|  | @@ -269,12 +269,12 @@ func SettingsSSHKeys(ctx *middleware.Context) {
 | 
	
		
			
				|  |  |  	ctx.Data["Title"] = ctx.Tr("settings")
 | 
	
		
			
				|  |  |  	ctx.Data["PageIsSettingsSSHKeys"] = true
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	var err error
 | 
	
		
			
				|  |  | -	ctx.Data["Keys"], err = models.ListPublicKeys(ctx.User.Id)
 | 
	
		
			
				|  |  | +	keys, err := models.ListPublicKeys(ctx.User.Id)
 | 
	
		
			
				|  |  |  	if err != nil {
 | 
	
		
			
				|  |  | -		ctx.Handle(500, "ssh.ListPublicKey", err)
 | 
	
		
			
				|  |  | +		ctx.Handle(500, "ListPublicKeys", err)
 | 
	
		
			
				|  |  |  		return
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | +	ctx.Data["Keys"] = keys
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	ctx.HTML(200, SETTINGS_SSH_KEYS)
 | 
	
		
			
				|  |  |  }
 | 
	
	
		
			
				|  | @@ -283,66 +283,58 @@ func SettingsSSHKeysPost(ctx *middleware.Context, form auth.AddSSHKeyForm) {
 | 
	
		
			
				|  |  |  	ctx.Data["Title"] = ctx.Tr("settings")
 | 
	
		
			
				|  |  |  	ctx.Data["PageIsSettingsSSHKeys"] = true
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	var err error
 | 
	
		
			
				|  |  | -	ctx.Data["Keys"], err = models.ListPublicKeys(ctx.User.Id)
 | 
	
		
			
				|  |  | +	keys, err := models.ListPublicKeys(ctx.User.Id)
 | 
	
		
			
				|  |  |  	if err != nil {
 | 
	
		
			
				|  |  | -		ctx.Handle(500, "ssh.ListPublicKey", err)
 | 
	
		
			
				|  |  | +		ctx.Handle(500, "ListPublicKeys", err)
 | 
	
		
			
				|  |  |  		return
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | +	ctx.Data["Keys"] = keys
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	// Delete SSH key.
 | 
	
		
			
				|  |  | -	if ctx.Query("_method") == "DELETE" {
 | 
	
		
			
				|  |  | -		id := com.StrTo(ctx.Query("id")).MustInt64()
 | 
	
		
			
				|  |  | -		if id <= 0 {
 | 
	
		
			
				|  |  | -			return
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | +	if ctx.HasError() {
 | 
	
		
			
				|  |  | +		ctx.HTML(200, SETTINGS_SSH_KEYS)
 | 
	
		
			
				|  |  | +		return
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		if err = models.DeletePublicKey(&models.PublicKey{ID: id}); err != nil {
 | 
	
		
			
				|  |  | -			ctx.Handle(500, "DeletePublicKey", err)
 | 
	
		
			
				|  |  | +	content, err := models.CheckPublicKeyString(form.Content)
 | 
	
		
			
				|  |  | +	if err != nil {
 | 
	
		
			
				|  |  | +		if err == models.ErrKeyUnableVerify {
 | 
	
		
			
				|  |  | +			ctx.Flash.Info(ctx.Tr("form.unable_verify_ssh_key"))
 | 
	
		
			
				|  |  |  		} else {
 | 
	
		
			
				|  |  | -			log.Trace("SSH key deleted: %s", ctx.User.Name)
 | 
	
		
			
				|  |  | +			ctx.Flash.Error(ctx.Tr("form.invalid_ssh_key", err.Error()))
 | 
	
		
			
				|  |  |  			ctx.Redirect(setting.AppSubUrl + "/user/settings/ssh")
 | 
	
		
			
				|  |  | +			return
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		return
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	// Add new SSH key.
 | 
	
		
			
				|  |  | -	if ctx.Req.Method == "POST" {
 | 
	
		
			
				|  |  | -		if ctx.HasError() {
 | 
	
		
			
				|  |  | -			ctx.HTML(200, SETTINGS_SSH_KEYS)
 | 
	
		
			
				|  |  | -			return
 | 
	
		
			
				|  |  | +	if err = models.AddPublicKey(ctx.User.Id, form.Title, content); err != nil {
 | 
	
		
			
				|  |  | +		ctx.Data["HasError"] = true
 | 
	
		
			
				|  |  | +		switch {
 | 
	
		
			
				|  |  | +		case models.IsErrKeyAlreadyExist(err):
 | 
	
		
			
				|  |  | +			ctx.Data["Err_Content"] = true
 | 
	
		
			
				|  |  | +			ctx.RenderWithErr(ctx.Tr("settings.ssh_key_been_used"), SETTINGS_SSH_KEYS, &form)
 | 
	
		
			
				|  |  | +		case models.IsErrKeyNameAlreadyUsed(err):
 | 
	
		
			
				|  |  | +			ctx.Data["Err_Title"] = true
 | 
	
		
			
				|  |  | +			ctx.RenderWithErr(ctx.Tr("settings.ssh_key_name_used"), SETTINGS_SSH_KEYS, &form)
 | 
	
		
			
				|  |  | +		default:
 | 
	
		
			
				|  |  | +			ctx.Handle(500, "AddPublicKey", err)
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | +		return
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		content, err := models.CheckPublicKeyString(form.Content)
 | 
	
		
			
				|  |  | -		if err != nil {
 | 
	
		
			
				|  |  | -			if err == models.ErrKeyUnableVerify {
 | 
	
		
			
				|  |  | -				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/ssh")
 | 
	
		
			
				|  |  | -				return
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | +	ctx.Flash.Success(ctx.Tr("settings.add_key_success", form.Title))
 | 
	
		
			
				|  |  | +	ctx.Redirect(setting.AppSubUrl + "/user/settings/ssh")
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		if err = models.AddPublicKey(ctx.User.Id, form.Title, content); err != nil {
 | 
	
		
			
				|  |  | -			switch {
 | 
	
		
			
				|  |  | -			case models.IsErrKeyAlreadyExist(err):
 | 
	
		
			
				|  |  | -				ctx.RenderWithErr(ctx.Tr("settings.ssh_key_been_used"), SETTINGS_SSH_KEYS, &form)
 | 
	
		
			
				|  |  | -			case models.IsErrKeyNameAlreadyUsed(err):
 | 
	
		
			
				|  |  | -				ctx.RenderWithErr(ctx.Tr("settings.ssh_key_name_used"), SETTINGS_SSH_KEYS, &form)
 | 
	
		
			
				|  |  | -			default:
 | 
	
		
			
				|  |  | -				ctx.Handle(500, "AddPublicKey", err)
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			return
 | 
	
		
			
				|  |  | -		} else {
 | 
	
		
			
				|  |  | -			log.Trace("SSH key added: %s", ctx.User.Name)
 | 
	
		
			
				|  |  | -			ctx.Flash.Success(ctx.Tr("settings.add_key_success", form.Title))
 | 
	
		
			
				|  |  | -			ctx.Redirect(setting.AppSubUrl + "/user/settings/ssh")
 | 
	
		
			
				|  |  | -			return
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | +func DeleteSSHKey(ctx *middleware.Context) {
 | 
	
		
			
				|  |  | +	if err := models.DeletePublicKey(ctx.QueryInt64("id")); err != nil {
 | 
	
		
			
				|  |  | +		ctx.Flash.Error("DeletePublicKey: " + err.Error())
 | 
	
		
			
				|  |  | +	} else {
 | 
	
		
			
				|  |  | +		ctx.Flash.Success(ctx.Tr("settings.ssh_key_deletion_success"))
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	ctx.HTML(200, SETTINGS_SSH_KEYS)
 | 
	
		
			
				|  |  | +	ctx.JSON(200, map[string]interface{}{
 | 
	
		
			
				|  |  | +		"redirect": setting.AppSubUrl + "/user/settings/ssh",
 | 
	
		
			
				|  |  | +	})
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func SettingsSocial(ctx *middleware.Context) {
 | 
	
	
		
			
				|  | @@ -389,6 +381,12 @@ func SettingsApplicationsPost(ctx *middleware.Context, form auth.NewAccessTokenF
 | 
	
		
			
				|  |  |  	ctx.Data["PageIsSettingsApplications"] = true
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if ctx.HasError() {
 | 
	
		
			
				|  |  | +		tokens, err := models.ListAccessTokens(ctx.User.Id)
 | 
	
		
			
				|  |  | +		if err != nil {
 | 
	
		
			
				|  |  | +			ctx.Handle(500, "ListAccessTokens", err)
 | 
	
		
			
				|  |  | +			return
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		ctx.Data["Tokens"] = tokens
 | 
	
		
			
				|  |  |  		ctx.HTML(200, SETTINGS_APPLICATIONS)
 | 
	
		
			
				|  |  |  		return
 | 
	
		
			
				|  |  |  	}
 |