From 260301bf2e2d9af6eacbb237eae10c06c77f0685 Mon Sep 17 00:00:00 2001 From: Unknwon Date: Tue, 25 Aug 2015 03:30:39 +0800 Subject: [PATCH] #1535 Removing deploy key does not remove key --- models/publickey.go | 22 +++++++++++++--------- models/user.go | 2 +- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/models/publickey.go b/models/publickey.go index 14720f24df..ad92d64fec 100644 --- a/models/publickey.go +++ b/models/publickey.go @@ -298,9 +298,13 @@ func saveAuthorizedKeyFile(keys ...*PublicKey) error { return nil } +// checkKeyContent onlys checks if key content has been used as public key, +// it is OK to use same key as deploy key for multiple repositories/users. func checkKeyContent(content string) error { - // Same key can only be added once. - has, err := x.Where("content=?", content).Get(new(PublicKey)) + has, err := x.Get(&PublicKey{ + Content: content, + Type: KEY_TYPE_USER, + }) if err != nil { return err } else if has { @@ -440,10 +444,11 @@ func UpdatePublicKey(key *PublicKey) error { return err } -func deletePublicKey(e *xorm.Session, key *PublicKey) error { +func deletePublicKey(e *xorm.Session, keyID int64) error { sshOpLocker.Lock() defer sshOpLocker.Unlock() + key := &PublicKey{ID: keyID} has, err := e.Get(key) if err != nil { return err @@ -451,7 +456,7 @@ func deletePublicKey(e *xorm.Session, key *PublicKey) error { return nil } - if _, err = e.Id(key.ID).Delete(key); err != nil { + if _, err = e.Id(key.ID).Delete(new(PublicKey)); err != nil { return err } @@ -467,8 +472,7 @@ func deletePublicKey(e *xorm.Session, key *PublicKey) error { // DeletePublicKey deletes SSH key information both in database and authorized_keys file. func DeletePublicKey(id int64) (err error) { - key := &PublicKey{ID: id} - has, err := x.Id(key.ID).Get(key) + has, err := x.Id(id).Get(new(PublicKey)) if err != nil { return err } else if !has { @@ -481,7 +485,7 @@ func DeletePublicKey(id int64) (err error) { return err } - if err = deletePublicKey(sess, key); err != nil { + if err = deletePublicKey(sess, id); err != nil { return err } @@ -658,7 +662,7 @@ func DeleteDeployKey(id int64) error { return err } - if _, err = sess.Id(key.ID).Delete(key); err != nil { + if _, err = sess.Id(key.ID).Delete(new(DeployKey)); err != nil { return fmt.Errorf("delete deploy key[%d]: %v", key.ID, err) } @@ -667,7 +671,7 @@ func DeleteDeployKey(id int64) error { if err != nil { return err } else if !has { - if err = deletePublicKey(sess, &PublicKey{ID: key.KeyID}); err != nil { + if err = deletePublicKey(sess, key.KeyID); err != nil { return err } } diff --git a/models/user.go b/models/user.go index bc0a0461ca..f2fc480e1b 100644 --- a/models/user.go +++ b/models/user.go @@ -592,7 +592,7 @@ func DeleteUser(u *User) error { return fmt.Errorf("get all public keys: %v", err) } for _, key := range keys { - if err = deletePublicKey(sess, key); err != nil { + if err = deletePublicKey(sess, key.ID); err != nil { return fmt.Errorf("deletePublicKey: %v", err) } }