Improve error feedback for duplicate deploy keys (#13112)

Instead of a generic HTTP 500 error page, a flash message is rendered with the deploy key page template to inform the user that a key with the intended title already exists. 

Fixes #13110
tokarchuk/v1.17
Chris Shyi 4 years ago committed by GitHub
parent 0e4f663126
commit c752ccee64
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      models/error.go
  2. 2
      routers/api/v1/repo/key.go
  3. 3
      routers/repo/setting.go

@ -547,7 +547,7 @@ func IsErrDeployKeyNameAlreadyUsed(err error) bool {
} }
func (err ErrDeployKeyNameAlreadyUsed) Error() string { func (err ErrDeployKeyNameAlreadyUsed) Error() string {
return fmt.Sprintf("public key already exists [repo_id: %d, name: %s]", err.RepoID, err.Name) return fmt.Sprintf("public key with name already exists [repo_id: %d, name: %s]", err.RepoID, err.Name)
} }
// _____ ___________ __ // _____ ___________ __

@ -177,6 +177,8 @@ func HandleAddKeyError(ctx *context.APIContext, err error) {
ctx.Error(http.StatusUnprocessableEntity, "", "Key content has been used as non-deploy key") ctx.Error(http.StatusUnprocessableEntity, "", "Key content has been used as non-deploy key")
case models.IsErrKeyNameAlreadyUsed(err): case models.IsErrKeyNameAlreadyUsed(err):
ctx.Error(http.StatusUnprocessableEntity, "", "Key title has been used") ctx.Error(http.StatusUnprocessableEntity, "", "Key title has been used")
case models.IsErrDeployKeyNameAlreadyUsed(err):
ctx.Error(http.StatusUnprocessableEntity, "", "A key with the same name already exists")
default: default:
ctx.Error(http.StatusInternalServerError, "AddKey", err) ctx.Error(http.StatusInternalServerError, "AddKey", err)
} }

@ -885,6 +885,9 @@ func DeployKeysPost(ctx *context.Context, form auth.AddKeyForm) {
case models.IsErrKeyNameAlreadyUsed(err): case models.IsErrKeyNameAlreadyUsed(err):
ctx.Data["Err_Title"] = true ctx.Data["Err_Title"] = true
ctx.RenderWithErr(ctx.Tr("repo.settings.key_name_used"), tplDeployKeys, &form) ctx.RenderWithErr(ctx.Tr("repo.settings.key_name_used"), tplDeployKeys, &form)
case models.IsErrDeployKeyNameAlreadyUsed(err):
ctx.Data["Err_Title"] = true
ctx.RenderWithErr(ctx.Tr("repo.settings.key_name_used"), tplDeployKeys, &form)
default: default:
ctx.ServerError("AddDeployKey", err) ctx.ServerError("AddDeployKey", err)
} }

Loading…
Cancel
Save