Disable add key button if SSH is disabled (#2873)
This commit is contained in:
		
							parent
							
								
									1f7aab6e19
								
							
						
					
					
						commit
						420fc8efc2
					
				|  | @ -37,6 +37,20 @@ func (err ErrNamePatternNotAllowed) Error() string { | ||||||
| 	return fmt.Sprintf("name pattern is not allowed [pattern: %s]", err.Pattern) | 	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" | ||||||
|  | } | ||||||
|  | 
 | ||||||
| //  ____ ___
 | //  ____ ___
 | ||||||
| // |    |   \______ ___________
 | // |    |   \______ ___________
 | ||||||
| // |    |   /  ___// __ \_  __ \
 | // |    |   /  ___// __ \_  __ \
 | ||||||
|  |  | ||||||
|  | @ -260,7 +260,7 @@ func SSHNativeParsePublicKey(keyLine string) (string, int, error) { | ||||||
| // It returns the actual public key line on success.
 | // It returns the actual public key line on success.
 | ||||||
| func CheckPublicKeyString(content string) (_ string, err error) { | func CheckPublicKeyString(content string) (_ string, err error) { | ||||||
| 	if setting.SSH.Disabled { | 	if setting.SSH.Disabled { | ||||||
| 		return "", errors.New("SSH is disabled") | 		return "", ErrSSHDisabled{} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	content, err = parseKeyString(content) | 	content, err = parseKeyString(content) | ||||||
|  |  | ||||||
|  | @ -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 | token_state_desc = This token has been used in the last 7 days | ||||||
| show_openid = Show on profile | show_openid = Show on profile | ||||||
| hide_openid = Hide from profile | hide_openid = Hide from profile | ||||||
|  | ssh_disabled = SSH is disabled | ||||||
| 
 | 
 | ||||||
| manage_social = Manage Associated Social Accounts | 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. | 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. | ||||||
|  |  | ||||||
|  | @ -106,7 +106,9 @@ func GetDeployKey(ctx *context.APIContext) { | ||||||
| 
 | 
 | ||||||
| // HandleCheckKeyStringError handle check key error
 | // HandleCheckKeyStringError handle check key error
 | ||||||
| func HandleCheckKeyStringError(ctx *context.APIContext, err 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") | 		ctx.Error(422, "", "Unable to verify key content") | ||||||
| 	} else { | 	} else { | ||||||
| 		ctx.Error(422, "", fmt.Errorf("Invalid key content: %v", err)) | 		ctx.Error(422, "", fmt.Errorf("Invalid key content: %v", err)) | ||||||
|  |  | ||||||
|  | @ -515,6 +515,7 @@ func GitHooksEditPost(ctx *context.Context) { | ||||||
| func DeployKeys(ctx *context.Context) { | func DeployKeys(ctx *context.Context) { | ||||||
| 	ctx.Data["Title"] = ctx.Tr("repo.settings.deploy_keys") | 	ctx.Data["Title"] = ctx.Tr("repo.settings.deploy_keys") | ||||||
| 	ctx.Data["PageIsSettingsKeys"] = true | 	ctx.Data["PageIsSettingsKeys"] = true | ||||||
|  | 	ctx.Data["DisableSSH"] = setting.SSH.Disabled | ||||||
| 
 | 
 | ||||||
| 	keys, err := models.ListDeployKeys(ctx.Repo.Repository.ID) | 	keys, err := models.ListDeployKeys(ctx.Repo.Repository.ID) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | @ -545,15 +546,17 @@ func DeployKeysPost(ctx *context.Context, form auth.AddKeyForm) { | ||||||
| 
 | 
 | ||||||
| 	content, err := models.CheckPublicKeyString(form.Content) | 	content, err := models.CheckPublicKeyString(form.Content) | ||||||
| 	if err != nil { | 	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")) | 			ctx.Flash.Info(ctx.Tr("form.unable_verify_ssh_key")) | ||||||
| 		} else { | 		} else { | ||||||
| 			ctx.Data["HasError"] = true | 			ctx.Data["HasError"] = true | ||||||
| 			ctx.Data["Err_Content"] = true | 			ctx.Data["Err_Content"] = true | ||||||
| 			ctx.Flash.Error(ctx.Tr("form.invalid_ssh_key", err.Error())) | 			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) | 	key, err := models.AddDeployKey(ctx.Repo.Repository.ID, form.Title, content) | ||||||
|  |  | ||||||
|  | @ -339,6 +339,7 @@ func DeleteEmail(ctx *context.Context) { | ||||||
| func SettingsKeys(ctx *context.Context) { | func SettingsKeys(ctx *context.Context) { | ||||||
| 	ctx.Data["Title"] = ctx.Tr("settings") | 	ctx.Data["Title"] = ctx.Tr("settings") | ||||||
| 	ctx.Data["PageIsSettingsKeys"] = true | 	ctx.Data["PageIsSettingsKeys"] = true | ||||||
|  | 	ctx.Data["DisableSSH"] = setting.SSH.Disabled | ||||||
| 
 | 
 | ||||||
| 	keys, err := models.ListPublicKeys(ctx.User.ID) | 	keys, err := models.ListPublicKeys(ctx.User.ID) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | @ -405,13 +406,15 @@ func SettingsKeysPost(ctx *context.Context, form auth.AddKeyForm) { | ||||||
| 	case "ssh": | 	case "ssh": | ||||||
| 		content, err := models.CheckPublicKeyString(form.Content) | 		content, err := models.CheckPublicKeyString(form.Content) | ||||||
| 		if err != nil { | 		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")) | 				ctx.Flash.Info(ctx.Tr("form.unable_verify_ssh_key")) | ||||||
| 			} else { | 			} else { | ||||||
| 				ctx.Flash.Error(ctx.Tr("form.invalid_ssh_key", err.Error())) | 				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 { | 		if _, err = models.AddPublicKey(ctx.User.ID, form.Title, content); err != nil { | ||||||
|  |  | ||||||
|  | @ -7,7 +7,11 @@ | ||||||
| 		<h4 class="ui top attached header"> | 		<h4 class="ui top attached header"> | ||||||
| 			{{.i18n.Tr "repo.settings.deploy_keys"}} | 			{{.i18n.Tr "repo.settings.deploy_keys"}} | ||||||
| 			<div class="ui right"> | 			<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> | 				<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> | 			</div> | ||||||
| 		</h4> | 		</h4> | ||||||
| 		<div class="ui attached segment"> | 		<div class="ui attached segment"> | ||||||
|  |  | ||||||
|  | @ -1,7 +1,11 @@ | ||||||
| <h4 class="ui top attached header"> | <h4 class="ui top attached header"> | ||||||
|   {{.i18n.Tr "settings.manage_ssh_keys"}} |   {{.i18n.Tr "settings.manage_ssh_keys"}} | ||||||
|   <div class="ui right"> |   <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> |     <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> |   </div> | ||||||
| </h4> | </h4> | ||||||
| <div class="ui attached segment"> | <div class="ui attached segment"> | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue