code.gitea.io/gitea@v1.21.7/routers/web/repo/setting/deploy_key.go (about) 1 // Copyright 2023 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package setting 5 6 import ( 7 "net/http" 8 9 asymkey_model "code.gitea.io/gitea/models/asymkey" 10 "code.gitea.io/gitea/models/db" 11 "code.gitea.io/gitea/modules/context" 12 "code.gitea.io/gitea/modules/log" 13 "code.gitea.io/gitea/modules/setting" 14 "code.gitea.io/gitea/modules/web" 15 asymkey_service "code.gitea.io/gitea/services/asymkey" 16 "code.gitea.io/gitea/services/forms" 17 ) 18 19 // DeployKeys render the deploy keys list of a repository page 20 func DeployKeys(ctx *context.Context) { 21 ctx.Data["Title"] = ctx.Tr("repo.settings.deploy_keys") + " / " + ctx.Tr("secrets.secrets") 22 ctx.Data["PageIsSettingsKeys"] = true 23 ctx.Data["DisableSSH"] = setting.SSH.Disabled 24 25 keys, err := asymkey_model.ListDeployKeys(ctx, &asymkey_model.ListDeployKeysOptions{RepoID: ctx.Repo.Repository.ID}) 26 if err != nil { 27 ctx.ServerError("ListDeployKeys", err) 28 return 29 } 30 ctx.Data["Deploykeys"] = keys 31 32 ctx.HTML(http.StatusOK, tplDeployKeys) 33 } 34 35 // DeployKeysPost response for adding a deploy key of a repository 36 func DeployKeysPost(ctx *context.Context) { 37 form := web.GetForm(ctx).(*forms.AddKeyForm) 38 ctx.Data["Title"] = ctx.Tr("repo.settings.deploy_keys") 39 ctx.Data["PageIsSettingsKeys"] = true 40 ctx.Data["DisableSSH"] = setting.SSH.Disabled 41 42 keys, err := asymkey_model.ListDeployKeys(ctx, &asymkey_model.ListDeployKeysOptions{RepoID: ctx.Repo.Repository.ID}) 43 if err != nil { 44 ctx.ServerError("ListDeployKeys", err) 45 return 46 } 47 ctx.Data["Deploykeys"] = keys 48 49 if ctx.HasError() { 50 ctx.HTML(http.StatusOK, tplDeployKeys) 51 return 52 } 53 54 content, err := asymkey_model.CheckPublicKeyString(form.Content) 55 if err != nil { 56 if db.IsErrSSHDisabled(err) { 57 ctx.Flash.Info(ctx.Tr("settings.ssh_disabled")) 58 } else if asymkey_model.IsErrKeyUnableVerify(err) { 59 ctx.Flash.Info(ctx.Tr("form.unable_verify_ssh_key")) 60 } else if err == asymkey_model.ErrKeyIsPrivate { 61 ctx.Data["HasError"] = true 62 ctx.Data["Err_Content"] = true 63 ctx.Flash.Error(ctx.Tr("form.must_use_public_key")) 64 } else { 65 ctx.Data["HasError"] = true 66 ctx.Data["Err_Content"] = true 67 ctx.Flash.Error(ctx.Tr("form.invalid_ssh_key", err.Error())) 68 } 69 ctx.Redirect(ctx.Repo.RepoLink + "/settings/keys") 70 return 71 } 72 73 key, err := asymkey_model.AddDeployKey(ctx.Repo.Repository.ID, form.Title, content, !form.IsWritable) 74 if err != nil { 75 ctx.Data["HasError"] = true 76 switch { 77 case asymkey_model.IsErrDeployKeyAlreadyExist(err): 78 ctx.Data["Err_Content"] = true 79 ctx.RenderWithErr(ctx.Tr("repo.settings.key_been_used"), tplDeployKeys, &form) 80 case asymkey_model.IsErrKeyAlreadyExist(err): 81 ctx.Data["Err_Content"] = true 82 ctx.RenderWithErr(ctx.Tr("settings.ssh_key_been_used"), tplDeployKeys, &form) 83 case asymkey_model.IsErrKeyNameAlreadyUsed(err): 84 ctx.Data["Err_Title"] = true 85 ctx.RenderWithErr(ctx.Tr("repo.settings.key_name_used"), tplDeployKeys, &form) 86 case asymkey_model.IsErrDeployKeyNameAlreadyUsed(err): 87 ctx.Data["Err_Title"] = true 88 ctx.RenderWithErr(ctx.Tr("repo.settings.key_name_used"), tplDeployKeys, &form) 89 default: 90 ctx.ServerError("AddDeployKey", err) 91 } 92 return 93 } 94 95 log.Trace("Deploy key added: %d", ctx.Repo.Repository.ID) 96 ctx.Flash.Success(ctx.Tr("repo.settings.add_key_success", key.Name)) 97 ctx.Redirect(ctx.Repo.RepoLink + "/settings/keys") 98 } 99 100 // DeleteDeployKey response for deleting a deploy key 101 func DeleteDeployKey(ctx *context.Context) { 102 if err := asymkey_service.DeleteDeployKey(ctx, ctx.Doer, ctx.FormInt64("id")); err != nil { 103 ctx.Flash.Error("DeleteDeployKey: " + err.Error()) 104 } else { 105 ctx.Flash.Success(ctx.Tr("repo.settings.deploy_key_deletion_success")) 106 } 107 108 ctx.JSONRedirect(ctx.Repo.RepoLink + "/settings/keys") 109 }