]> source.dussan.org Git - gitea.git/commitdiff
#1535 Removing deploy key does not remove key
authorUnknwon <u@gogs.io>
Mon, 24 Aug 2015 19:30:39 +0000 (03:30 +0800)
committerUnknwon <u@gogs.io>
Mon, 24 Aug 2015 19:30:39 +0000 (03:30 +0800)
models/publickey.go
models/user.go

index 14720f24df0b51490cc908e71a238029a2b08ef0..ad92d64fec151253d6cc3b66702e6840423cf078 100644 (file)
@@ -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
                }
        }
index bc0a0461ca800de0c5eee2d2dd4b37b4ba9e867d..f2fc480e1b7c3c1ef6ab36c5c368f41362c7f6d7 100644 (file)
@@ -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)
                }
        }