Disable add key button if SSH is disabled (#2873)
This commit is contained in:
		
					parent
					
						
							
								1f7aab6e19
							
						
					
				
			
			
				commit
				
					
						420fc8efc2
					
				
			
		
					 8 changed files with 39 additions and 8 deletions
				
			
		| 
						 | 
				
			
			@ -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"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//  ____ ___
 | 
			
		||||
// |    |   \______ ___________
 | 
			
		||||
// |    |   /  ___// __ \_  __ \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue