// https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#create-a-public-key func CreateUserPublicKey(ctx *middleware.Context, form api.CreateKeyOption) { content, err := models.CheckPublicKeyString(form.Key) if err != nil { handleCheckKeyStringError(ctx, err) return } key, err := models.AddPublicKey(ctx.User.Id, form.Title, content) if err != nil { handleAddKeyError(ctx, err) return } apiLink := composePublicKeysAPILink() ctx.JSON(201, ToApiPublicKey(apiLink, key)) }
// CreateUserPublicKey creates new public key to given user by ID. func CreateUserPublicKey(ctx *context.APIContext, form api.CreateKeyOption, uid int64) { content, err := models.CheckPublicKeyString(form.Key) if err != nil { repo.HandleCheckKeyStringError(ctx, err) return } key, err := models.AddPublicKey(uid, form.Title, content) if err != nil { repo.HandleAddKeyError(ctx, err) return } apiLink := composePublicKeysAPILink() ctx.JSON(201, convert.ToPublicKey(apiLink, key)) }
func SettingsSSHKeysPost(ctx *context.Context, form auth.AddSSHKeyForm) { ctx.Data["Title"] = ctx.Tr("settings") ctx.Data["PageIsSettingsSSHKeys"] = true keys, err := models.ListPublicKeys(ctx.User.ID) if err != nil { ctx.Handle(500, "ListPublicKeys", err) return } ctx.Data["Keys"] = keys if ctx.HasError() { ctx.HTML(200, SETTINGS_SSH_KEYS) return } content, err := models.CheckPublicKeyString(form.Content) if err != nil { 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/ssh") 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 } ctx.Flash.Success(ctx.Tr("settings.add_key_success", form.Title)) ctx.Redirect(setting.AppSubUrl + "/user/settings/ssh") }
func SettingSSHKeys(ctx *middleware.Context, form auth.AddSSHKeyForm) { ctx.Data["Title"] = "SSH Keys" ctx.Data["PageIsUserSetting"] = true ctx.Data["IsUserPageSettingSSH"] = true // Delete SSH key. if ctx.Req.Method == "DELETE" || ctx.Query("_method") == "DELETE" { id, err := base.StrTo(ctx.Query("id")).Int64() if err != nil { log.Error("ssh.DelPublicKey: %v", err) ctx.JSON(200, map[string]interface{}{ "ok": false, "err": err.Error(), }) return } if err = models.DeletePublicKey(&models.PublicKey{Id: id}); err != nil { log.Error("ssh.DelPublicKey: %v", err) ctx.JSON(200, map[string]interface{}{ "ok": false, "err": err.Error(), }) } else { log.Trace("%s User SSH key deleted: %s", ctx.Req.RequestURI, ctx.User.LowerName) ctx.JSON(200, map[string]interface{}{ "ok": true, }) } return } // List existed SSH keys. keys, err := models.ListPublicKey(ctx.User.Id) if err != nil { ctx.Handle(500, "ssh.ListPublicKey", err) return } ctx.Data["Keys"] = keys // Add new SSH key. if ctx.Req.Method == "POST" { if ctx.HasError() { ctx.HTML(200, "user/publickey") return } if len(form.KeyContent) < 100 || !strings.HasPrefix(form.KeyContent, "ssh-rsa") { ctx.Flash.Error("SSH key content is not valid.") ctx.Redirect("/user/settings/ssh") return } k := &models.PublicKey{ OwnerId: ctx.User.Id, Name: form.KeyName, Content: form.KeyContent, } if err := models.AddPublicKey(k); err != nil { if err.Error() == models.ErrKeyAlreadyExist.Error() { ctx.RenderWithErr("Public key name has been used", "user/publickey", &form) return } ctx.Handle(500, "ssh.AddPublicKey", err) return } else { log.Trace("%s User SSH key added: %s", ctx.Req.RequestURI, ctx.User.LowerName) ctx.Flash.Success("New SSH Key has been added!") ctx.Redirect("/user/settings/ssh") return } } ctx.HTML(200, "user/publickey") }
func SettingSSHKeys(ctx *middleware.Context, form auth.AddSSHKeyForm) { ctx.Data["Title"] = "SSH Keys" // Delete SSH key. if ctx.Req.Method == "DELETE" || ctx.Query("_method") == "DELETE" { id, err := strconv.ParseInt(ctx.Query("id"), 10, 64) if err != nil { log.Error("ssh.DelPublicKey: %v", err) ctx.JSON(200, map[string]interface{}{ "ok": false, "err": err.Error(), }) return } k := &models.PublicKey{ Id: id, OwnerId: ctx.User.Id, } if err = models.DeletePublicKey(k); err != nil { log.Error("ssh.DelPublicKey: %v", err) ctx.JSON(200, map[string]interface{}{ "ok": false, "err": err.Error(), }) } else { log.Trace("%s User SSH key deleted: %s", ctx.Req.RequestURI, ctx.User.LowerName) ctx.JSON(200, map[string]interface{}{ "ok": true, }) } return } // Add new SSH key. if ctx.Req.Method == "POST" { if hasErr, ok := ctx.Data["HasError"]; ok && hasErr.(bool) { ctx.HTML(200, "user/publickey") return } k := &models.PublicKey{OwnerId: ctx.User.Id, Name: form.KeyName, Content: form.KeyContent, } if err := models.AddPublicKey(k); err != nil { if err.Error() == models.ErrKeyAlreadyExist.Error() { ctx.RenderWithErr("Public key name has been used", "user/publickey", &form) return } ctx.Handle(200, "ssh.AddPublicKey", err) log.Trace("%s User SSH key added: %s", ctx.Req.RequestURI, ctx.User.LowerName) return } else { ctx.Data["AddSSHKeySuccess"] = true } } // List existed SSH keys. keys, err := models.ListPublicKey(ctx.User.Id) if err != nil { ctx.Handle(200, "ssh.ListPublicKey", err) return } ctx.Data["PageIsUserSetting"] = true ctx.Data["IsUserPageSettingSSH"] = true ctx.Data["Keys"] = keys ctx.HTML(200, "user/publickey") }
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) if err != nil { ctx.Handle(500, "ssh.ListPublicKey", err) return } // Delete SSH key. if ctx.Query("_method") == "DELETE" { id := com.StrTo(ctx.Query("id")).MustInt64() if id <= 0 { return } 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) ctx.Redirect(setting.AppSubUrl + "/user/settings/ssh") } return } // Add new SSH key. if ctx.Req.Method == "POST" { if ctx.HasError() { ctx.HTML(200, SETTINGS_SSH_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.Flash.Error(ctx.Tr("form.invalid_ssh_key", err.Error())) ctx.Redirect(setting.AppSubUrl + "/user/settings/ssh") 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) } 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 } } ctx.HTML(200, SETTINGS_SSH_KEYS) }
func SettingsSSHKeysPost(ctx *middleware.Context, form auth.AddSSHKeyForm) { ctx.Data["Title"] = ctx.Tr("settings") ctx.Data["PageIsUserSettings"] = true ctx.Data["PageIsSettingsSSHKeys"] = true var err error ctx.Data["Keys"], err = models.ListPublicKey(ctx.User.Id) if err != nil { ctx.Handle(500, "ssh.ListPublicKey", err) return } // Delete SSH key. if ctx.Query("_method") == "DELETE" { id := com.StrTo(ctx.Query("id")).MustInt64() if id <= 0 { return } 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) ctx.Redirect("/user/settings/ssh") } return } // Add new SSH key. if ctx.Req.Method == "POST" { if ctx.HasError() { ctx.HTML(200, SETTINGS_SSH_KEYS) return } // Remove newline characters from form.KeyContent cleanContent := strings.Replace(form.Content, "\n", "", -1) if ok, err := models.CheckPublicKeyString(cleanContent); !ok { ctx.Flash.Error(ctx.Tr("form.invalid_ssh_key", err.Error())) ctx.Redirect("/user/settings/ssh") return } k := &models.PublicKey{ OwnerId: ctx.User.Id, Name: form.SSHTitle, Content: cleanContent, } 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 } 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.Redirect("/user/settings/ssh") return } } ctx.HTML(200, SETTINGS_SSH_KEYS) }