diff --git a/models/publickey.go b/models/publickey.go index ea5af8816..49d7f3082 100644 --- a/models/publickey.go +++ b/models/publickey.go @@ -77,6 +77,11 @@ func AddPublicKey(key *PublicKey) error { return nil } +func DeletePublicKey(key *PublicKey) error { + _, err := orm.Delete(key) + return err +} + func ListPublicKey(userId int64) ([]PublicKey, error) { keys := make([]PublicKey, 0) err := orm.Find(&keys, &PublicKey{OwnerId: userId}) diff --git a/routers/user/ssh.go b/routers/user/ssh.go index 34c378061..0144f7a96 100644 --- a/routers/user/ssh.go +++ b/routers/user/ssh.go @@ -6,6 +6,7 @@ package user import ( "net/http" + "strconv" "github.com/martini-contrib/render" "github.com/martini-contrib/sessions" @@ -38,6 +39,46 @@ func AddPublicKey(req *http.Request, data base.TmplData, r render.Render, sessio } } +func DelPublicKey(req *http.Request, data base.TmplData, r render.Render, session sessions.Session) { + data["Title"] = "Del Public Key" + + if req.Method == "GET" { + r.HTML(200, "user/publickey_add", data) + return + } + + if req.Method == "DELETE" { + id, err := strconv.ParseInt(req.FormValue("id"), 10, 64) + if err != nil { + data["ErrorMsg"] = err + log.Error("ssh.DelPublicKey: %v", err) + r.JSON(200, map[string]interface{}{ + "ok": false, + "err": err.Error(), + }) + return + } + + k := &models.PublicKey{ + Id: id, + OwnerId: auth.SignedInId(session), + } + err = models.DeletePublicKey(k) + if err != nil { + data["ErrorMsg"] = err + log.Error("ssh.DelPublicKey: %v", err) + r.JSON(200, map[string]interface{}{ + "ok": false, + "err": err.Error(), + }) + } else { + r.JSON(200, map[string]interface{}{ + "ok": true, + }) + } + } +} + func ListPublicKey(req *http.Request, data base.TmplData, r render.Render, session sessions.Session) { data["Title"] = "Public Keys"