From e89bb7ef6a6848615a56f8c568ae335de0c2e9e7 Mon Sep 17 00:00:00 2001 From: Patrick G Date: Sat, 14 Oct 2017 11:51:00 -0400 Subject: [PATCH] Allow custom SSH user in UI for built-in SSH server (#2617) (#2678) * Allow custom SSH user in UI for built-in SSH server (#2617) * Some fixes * Did make fmt * Updated according to review - Renamed config to BUILTIN_SSH_SERVER_USER - Removed unnecessary default string value for config item * Updated according to review * Fixed some minor issues --- conf/app.ini | 2 ++ models/repo.go | 11 ++++++++--- modules/setting/setting.go | 3 +++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/conf/app.ini b/conf/app.ini index 9674b815c9..d4cb53d849 100644 --- a/conf/app.ini +++ b/conf/app.ini @@ -113,6 +113,8 @@ LOCAL_ROOT_URL = %(PROTOCOL)s://%(HTTP_ADDR)s:%(HTTP_PORT)s/ DISABLE_SSH = false ; Whether use builtin SSH server or not. START_SSH_SERVER = false +; Username to use for builtin SSH server. If blank, then it is the value of RUN_USER. +BUILTIN_SSH_SERVER_USER = ; Domain name to be exposed in clone URL SSH_DOMAIN = %(DOMAIN)s ; Network interface builtin SSH server listens on diff --git a/models/repo.go b/models/repo.go index 740bbe8da9..7ad9ad4dc9 100644 --- a/models/repo.go +++ b/models/repo.go @@ -806,14 +806,19 @@ func (repo *Repository) cloneLink(isWiki bool) *CloneLink { repoName += ".wiki" } + sshUser := setting.RunUser + if setting.SSH.StartBuiltinServer { + sshUser = setting.SSH.BuiltinServerUser + } + repo.Owner = repo.MustOwner() cl := new(CloneLink) if setting.SSH.Port != 22 { - cl.SSH = fmt.Sprintf("ssh://%s@%s:%d/%s/%s.git", setting.RunUser, setting.SSH.Domain, setting.SSH.Port, repo.Owner.Name, repoName) + cl.SSH = fmt.Sprintf("ssh://%s@%s:%d/%s/%s.git", sshUser, setting.SSH.Domain, setting.SSH.Port, repo.Owner.Name, repoName) } else if setting.Repository.UseCompatSSHURI { - cl.SSH = fmt.Sprintf("ssh://%s@%s/%s/%s.git", setting.RunUser, setting.SSH.Domain, repo.Owner.Name, repoName) + cl.SSH = fmt.Sprintf("ssh://%s@%s/%s/%s.git", sshUser, setting.SSH.Domain, repo.Owner.Name, repoName) } else { - cl.SSH = fmt.Sprintf("%s@%s:%s/%s.git", setting.RunUser, setting.SSH.Domain, repo.Owner.Name, repoName) + cl.SSH = fmt.Sprintf("%s@%s:%s/%s.git", sshUser, setting.SSH.Domain, repo.Owner.Name, repoName) } cl.HTTPS = ComposeHTTPSCloneURL(repo.Owner.Name, repoName) return cl diff --git a/modules/setting/setting.go b/modules/setting/setting.go index 6b1b269b73..85ffa643a9 100644 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -90,6 +90,7 @@ var ( SSH = struct { Disabled bool `ini:"DISABLE_SSH"` StartBuiltinServer bool `ini:"START_SSH_SERVER"` + BuiltinServerUser string `ini:"BUILTIN_SSH_SERVER_USER"` Domain string `ini:"SSH_DOMAIN"` Port int `ini:"SSH_PORT"` ListenHost string `ini:"SSH_LISTEN_HOST"` @@ -915,6 +916,8 @@ func NewContext() { } } + SSH.BuiltinServerUser = Cfg.Section("server").Key("BUILTIN_SSH_SERVER_USER").MustString(RunUser) + // Determine and create root git repository path. sec = Cfg.Section("repository") Repository.DisableHTTPGit = sec.Key("DISABLE_HTTP_GIT").MustBool()