summaryrefslogtreecommitdiffstats
path: root/routers
diff options
context:
space:
mode:
authorUnknwon <u@gogs.io>2015-08-06 22:48:11 +0800
committerUnknwon <u@gogs.io>2015-08-06 22:48:11 +0800
commit39a3b768bc8b0288cb4aa91d27485f46cfbfeb29 (patch)
treebef625e010018151863344d9da3ff22d2dfbc8f9 /routers
parent9f12ab0e8847682a686fdb843922a761bbb5c225 (diff)
downloadgitea-39a3b768bc8b0288cb4aa91d27485f46cfbfeb29.tar.gz
gitea-39a3b768bc8b0288cb4aa91d27485f46cfbfeb29.zip
#334: Add Deployment Key Support
Diffstat (limited to 'routers')
-rw-r--r--routers/repo/setting.go77
-rw-r--r--routers/user/setting.go31
2 files changed, 84 insertions, 24 deletions
diff --git a/routers/repo/setting.go b/routers/repo/setting.go
index 12fc428c1d..8f6ef1787b 100644
--- a/routers/repo/setting.go
+++ b/routers/repo/setting.go
@@ -27,10 +27,11 @@ const (
SETTINGS_OPTIONS base.TplName = "repo/settings/options"
COLLABORATION base.TplName = "repo/settings/collaboration"
HOOKS base.TplName = "repo/settings/hooks"
- GITHOOKS base.TplName = "repo/settings/githooks"
- GITHOOK_EDIT base.TplName = "repo/settings/githook_edit"
HOOK_NEW base.TplName = "repo/settings/hook_new"
ORG_HOOK_NEW base.TplName = "org/settings/hook_new"
+ GITHOOKS base.TplName = "repo/settings/githooks"
+ GITHOOK_EDIT base.TplName = "repo/settings/githook_edit"
+ DEPLOY_KEYS base.TplName = "repo/settings/deploy_keys"
)
func Settings(ctx *middleware.Context) {
@@ -584,6 +585,10 @@ func getOrgRepoCtx(ctx *middleware.Context) (*OrgRepoCtx, error) {
}
}
+func TriggerHook(ctx *middleware.Context) {
+ models.HookQueue.AddRepoID(ctx.Repo.Repository.Id)
+}
+
func GitHooks(ctx *middleware.Context) {
ctx.Data["Title"] = ctx.Tr("repo.settings")
ctx.Data["PageIsSettingsGitHooks"] = true
@@ -635,6 +640,70 @@ func GitHooksEditPost(ctx *middleware.Context) {
ctx.Redirect(ctx.Repo.RepoLink + "/settings/hooks/git")
}
-func TriggerHook(ctx *middleware.Context) {
- models.HookQueue.AddRepoID(ctx.Repo.Repository.Id)
+func SettingsDeployKeys(ctx *middleware.Context) {
+ ctx.Data["Title"] = ctx.Tr("repo.settings")
+ ctx.Data["PageIsSettingsKeys"] = true
+
+ keys, err := models.ListDeployKeys(ctx.Repo.Repository.Id)
+ if err != nil {
+ ctx.Handle(500, "ListDeployKeys", err)
+ return
+ }
+ ctx.Data["Deploykeys"] = keys
+
+ ctx.HTML(200, DEPLOY_KEYS)
+}
+
+func SettingsDeployKeysPost(ctx *middleware.Context, form auth.AddSSHKeyForm) {
+ ctx.Data["Title"] = ctx.Tr("repo.settings")
+ ctx.Data["PageIsSettingsKeys"] = true
+
+ if ctx.HasError() {
+ ctx.HTML(200, DEPLOY_KEYS)
+ 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.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
+ }
+ }
+
+ if err = models.AddDeployKey(ctx.Repo.Repository.Id, form.Title, content); err != nil {
+ ctx.Data["HasError"] = true
+ switch {
+ case models.IsErrKeyAlreadyExist(err):
+ ctx.Data["Err_Content"] = true
+ ctx.RenderWithErr(ctx.Tr("repo.settings.key_been_used"), DEPLOY_KEYS, &form)
+ case models.IsErrKeyNameAlreadyUsed(err):
+ ctx.Data["Err_Title"] = true
+ ctx.RenderWithErr(ctx.Tr("repo.settings.key_name_used"), DEPLOY_KEYS, &form)
+ default:
+ ctx.Handle(500, "AddDeployKey", err)
+ }
+ return
+ }
+
+ log.Trace("Deploy key added: %d", ctx.Repo.Repository.Id)
+ ctx.Flash.Success(ctx.Tr("repo.settings.add_key_success", form.Title))
+ ctx.Redirect(ctx.Repo.RepoLink + "/settings/keys")
+}
+
+func DeleteDeployKey(ctx *middleware.Context) {
+ if err := models.DeleteDeployKey(ctx.QueryInt64("id")); err != nil {
+ ctx.Flash.Error("DeleteDeployKey: " + err.Error())
+ } else {
+ ctx.Flash.Success(ctx.Tr("repo.settings.deploy_key_deletion_success"))
+ }
+
+ ctx.JSON(200, map[string]interface{}{
+ "redirect": ctx.Repo.RepoLink + "/settings/keys",
+ })
}
diff --git a/routers/user/setting.go b/routers/user/setting.go
index b31e93a63f..de9af6556b 100644
--- a/routers/user/setting.go
+++ b/routers/user/setting.go
@@ -305,7 +305,7 @@ func SettingsSSHKeysPost(ctx *middleware.Context, form auth.AddSSHKeyForm) {
return
}
- if err = models.DeletePublicKey(&models.PublicKey{Id: id}); err != nil {
+ if err = models.DeletePublicKey(&models.PublicKey{ID: id}); err != nil {
ctx.Handle(500, "DeletePublicKey", err)
} else {
log.Trace("SSH key deleted: %s", ctx.User.Name)
@@ -321,15 +321,8 @@ func SettingsSSHKeysPost(ctx *middleware.Context, form auth.AddSSHKeyForm) {
return
}
- // Parse openssh style string from form content
- content, err := models.ParseKeyString(form.Content)
+ content, err := models.CheckPublicKeyString(form.Content)
if err != nil {
- ctx.Flash.Error(ctx.Tr("form.invalid_ssh_key", err.Error()))
- ctx.Redirect(setting.AppSubUrl + "/user/settings/ssh")
- return
- }
-
- if ok, err := models.CheckPublicKeyString(content); !ok {
if err == models.ErrKeyUnableVerify {
ctx.Flash.Info(ctx.Tr("form.unable_verify_ssh_key"))
} else {
@@ -339,21 +332,19 @@ func SettingsSSHKeysPost(ctx *middleware.Context, form auth.AddSSHKeyForm) {
}
}
- k := &models.PublicKey{
- OwnerId: ctx.User.Id,
- Name: form.SSHTitle,
- Content: content,
- }
- if err := models.AddPublicKey(k); err != nil {
- if err == models.ErrKeyAlreadyExist {
- ctx.RenderWithErr(ctx.Tr("form.ssh_key_been_used"), SETTINGS_SSH_KEYS, &form)
- return
+ 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)
}
- ctx.Handle(500, "ssh.AddPublicKey", err)
return
} else {
log.Trace("SSH key added: %s", ctx.User.Name)
- ctx.Flash.Success(ctx.Tr("settings.add_key_success"))
+ ctx.Flash.Success(ctx.Tr("settings.add_key_success", form.Title))
ctx.Redirect(setting.AppSubUrl + "/user/settings/ssh")
return
}