]> source.dussan.org Git - gitea.git/commitdiff
Disable add key button if SSH is disabled (#2873)
authorMichael Kuhn <suraia@ikkoku.de>
Tue, 21 Nov 2017 03:49:33 +0000 (04:49 +0100)
committerLunny Xiao <xiaolunwen@gmail.com>
Tue, 21 Nov 2017 03:49:33 +0000 (11:49 +0800)
models/error.go
models/ssh_key.go
options/locale/locale_en-US.ini
routers/api/v1/repo/key.go
routers/repo/setting.go
routers/user/setting.go
templates/repo/settings/deploy_keys.tmpl
templates/user/settings/keys_ssh.tmpl

index aa9db7abef5e7cc46d0e2f747e542b28ccb230ae..9df419aee84700a01d4c49e6d7196b70ad749a8d 100644 (file)
@@ -37,6 +37,20 @@ func (err ErrNamePatternNotAllowed) Error() string {
        return fmt.Sprintf("name pattern is not allowed [pattern: %s]", err.Pattern)
 }
 
+// ErrSSHDisabled represents an "SSH disabled" error.
+type ErrSSHDisabled struct {
+}
+
+// IsErrSSHDisabled checks if an error is a ErrSSHDisabled.
+func IsErrSSHDisabled(err error) bool {
+       _, ok := err.(ErrSSHDisabled)
+       return ok
+}
+
+func (err ErrSSHDisabled) Error() string {
+       return "SSH is disabled"
+}
+
 //  ____ ___
 // |    |   \______ ___________
 // |    |   /  ___// __ \_  __ \
index 15544efbc6b87507d677959c8b6e09b4ca7a1c45..2d9f521fd4f8a98b910b6929b8bd032c9302340b 100644 (file)
@@ -260,7 +260,7 @@ func SSHNativeParsePublicKey(keyLine string) (string, int, error) {
 // It returns the actual public key line on success.
 func CheckPublicKeyString(content string) (_ string, err error) {
        if setting.SSH.Disabled {
-               return "", errors.New("SSH is disabled")
+               return "", ErrSSHDisabled{}
        }
 
        content, err = parseKeyString(content)
index 87c14e302d70edc099c1941cf9689e2cdf4fb6e4..834ec49e53199c1e4ed2ff7cface0d2909f76c97 100644 (file)
@@ -405,6 +405,7 @@ key_state_desc = This key has been used in the last 7 days
 token_state_desc = This token has been used in the last 7 days
 show_openid = Show on profile
 hide_openid = Hide from profile
+ssh_disabled = SSH is disabled
 
 manage_social = Manage Associated Social Accounts
 social_desc = This is a list of associated social accounts. For security reasons, please make sure you recognize all of these entries, as they can be used to log in to your account.
index a20f4c829e544ef5c80fe14df368376ca060eb81..42082c356111e63aaea3268b35d10e965daeaa7e 100644 (file)
@@ -106,7 +106,9 @@ func GetDeployKey(ctx *context.APIContext) {
 
 // HandleCheckKeyStringError handle check key error
 func HandleCheckKeyStringError(ctx *context.APIContext, err error) {
-       if models.IsErrKeyUnableVerify(err) {
+       if models.IsErrSSHDisabled(err) {
+               ctx.Error(422, "", "SSH is disabled")
+       } else if models.IsErrKeyUnableVerify(err) {
                ctx.Error(422, "", "Unable to verify key content")
        } else {
                ctx.Error(422, "", fmt.Errorf("Invalid key content: %v", err))
index ebe1c7cd9e029178ddbf158d2ba8bfe8c765442e..5586e81f05296bd2d7f7f3440bbbd0fce1ba57d7 100644 (file)
@@ -515,6 +515,7 @@ func GitHooksEditPost(ctx *context.Context) {
 func DeployKeys(ctx *context.Context) {
        ctx.Data["Title"] = ctx.Tr("repo.settings.deploy_keys")
        ctx.Data["PageIsSettingsKeys"] = true
+       ctx.Data["DisableSSH"] = setting.SSH.Disabled
 
        keys, err := models.ListDeployKeys(ctx.Repo.Repository.ID)
        if err != nil {
@@ -545,15 +546,17 @@ func DeployKeysPost(ctx *context.Context, form auth.AddKeyForm) {
 
        content, err := models.CheckPublicKeyString(form.Content)
        if err != nil {
-               if models.IsErrKeyUnableVerify(err) {
+               if models.IsErrSSHDisabled(err) {
+                       ctx.Flash.Info(ctx.Tr("settings.ssh_disabled"))
+               } else if models.IsErrKeyUnableVerify(err) {
                        ctx.Flash.Info(ctx.Tr("form.unable_verify_ssh_key"))
                } else {
                        ctx.Data["HasError"] = true
                        ctx.Data["Err_Content"] = true
                        ctx.Flash.Error(ctx.Tr("form.invalid_ssh_key", err.Error()))
-                       ctx.Redirect(ctx.Repo.RepoLink + "/settings/keys")
-                       return
                }
+               ctx.Redirect(ctx.Repo.RepoLink + "/settings/keys")
+               return
        }
 
        key, err := models.AddDeployKey(ctx.Repo.Repository.ID, form.Title, content)
index a00f3f287a7dd7154489a587ad536cf7ba938bd8..eae97e9aff62608457ed02eb4c5f0593e4cd6bfa 100644 (file)
@@ -339,6 +339,7 @@ func DeleteEmail(ctx *context.Context) {
 func SettingsKeys(ctx *context.Context) {
        ctx.Data["Title"] = ctx.Tr("settings")
        ctx.Data["PageIsSettingsKeys"] = true
+       ctx.Data["DisableSSH"] = setting.SSH.Disabled
 
        keys, err := models.ListPublicKeys(ctx.User.ID)
        if err != nil {
@@ -405,13 +406,15 @@ func SettingsKeysPost(ctx *context.Context, form auth.AddKeyForm) {
        case "ssh":
                content, err := models.CheckPublicKeyString(form.Content)
                if err != nil {
-                       if models.IsErrKeyUnableVerify(err) {
+                       if models.IsErrSSHDisabled(err) {
+                               ctx.Flash.Info(ctx.Tr("settings.ssh_disabled"))
+                       } else if models.IsErrKeyUnableVerify(err) {
                                ctx.Flash.Info(ctx.Tr("form.unable_verify_ssh_key"))
                        } else {
                                ctx.Flash.Error(ctx.Tr("form.invalid_ssh_key", err.Error()))
-                               ctx.Redirect(setting.AppSubURL + "/user/settings/keys")
-                               return
                        }
+                       ctx.Redirect(setting.AppSubURL + "/user/settings/keys")
+                       return
                }
 
                if _, err = models.AddPublicKey(ctx.User.ID, form.Title, content); err != nil {
index f082fde86b2d0a9e84e9f069bb5f40a34df521a9..caf9f29ce5a01dec4bb868e495e1b879006cfdf1 100644 (file)
@@ -7,7 +7,11 @@
                <h4 class="ui top attached header">
                        {{.i18n.Tr "repo.settings.deploy_keys"}}
                        <div class="ui right">
+                       {{if not .DisableSSH}}
                                <div class="ui blue tiny show-panel button" data-panel="#add-deploy-key-panel">{{.i18n.Tr "repo.settings.add_deploy_key"}}</div>
+                       {{else}}
+                               <div class="ui blue tiny button disabled">{{.i18n.Tr "settings.ssh_disabled"}}</div>
+                       {{end}}
                        </div>
                </h4>
                <div class="ui attached segment">
index 1bdf0b15b19cc7244dd884269fa8cb2fb256bc69..18fd9180123c74b22c56456977103faf817eff31 100644 (file)
@@ -1,7 +1,11 @@
 <h4 class="ui top attached header">
   {{.i18n.Tr "settings.manage_ssh_keys"}}
   <div class="ui right">
+  {{if not .DisableSSH}}
     <div class="ui blue tiny show-panel button" data-panel="#add-ssh-key-panel">{{.i18n.Tr "settings.add_key"}}</div>
+  {{else}}
+    <div class="ui blue tiny button disabled">{{.i18n.Tr "settings.ssh_disabled"}}</div>
+  {{end}}
   </div>
 </h4>
 <div class="ui attached segment">