DeleteDeployKey deletes deploy key from its repository authorized_keys file if needed.
(doer *User, id int64)
| 737 | |
| 738 | // DeleteDeployKey deletes deploy key from its repository authorized_keys file if needed. |
| 739 | func DeleteDeployKey(doer *User, id int64) error { |
| 740 | key, err := GetDeployKeyByID(id) |
| 741 | if err != nil { |
| 742 | if IsErrDeployKeyNotExist(err) { |
| 743 | return nil |
| 744 | } |
| 745 | return errors.Newf("GetDeployKeyByID: %v", err) |
| 746 | } |
| 747 | |
| 748 | // Check if user has access to delete this key. |
| 749 | if !doer.IsAdmin { |
| 750 | repo, err := GetRepositoryByID(key.RepoID) |
| 751 | if err != nil { |
| 752 | return errors.Newf("GetRepositoryByID: %v", err) |
| 753 | } |
| 754 | if !Handle.Permissions().Authorize(context.TODO(), doer.ID, repo.ID, AccessModeAdmin, |
| 755 | AccessModeOptions{ |
| 756 | OwnerID: repo.OwnerID, |
| 757 | Private: repo.IsPrivate, |
| 758 | }, |
| 759 | ) { |
| 760 | return ErrKeyAccessDenied{doer.ID, key.ID, "deploy"} |
| 761 | } |
| 762 | } |
| 763 | |
| 764 | sess := x.NewSession() |
| 765 | defer sess.Close() |
| 766 | if err = sess.Begin(); err != nil { |
| 767 | return err |
| 768 | } |
| 769 | |
| 770 | if _, err = sess.ID(key.ID).Delete(new(DeployKey)); err != nil { |
| 771 | return errors.Newf("delete deploy key [%d]: %v", key.ID, err) |
| 772 | } |
| 773 | |
| 774 | // Check if this is the last reference to same key content. |
| 775 | has, err := sess.Where("key_id = ?", key.KeyID).Get(new(DeployKey)) |
| 776 | if err != nil { |
| 777 | return err |
| 778 | } else if !has { |
| 779 | if err = deletePublicKeys(sess, key.KeyID); err != nil { |
| 780 | return err |
| 781 | } |
| 782 | } |
| 783 | |
| 784 | return sess.Commit() |
| 785 | } |
| 786 | |
| 787 | // ListDeployKeys returns all deploy keys by given repository ID. |
| 788 | func ListDeployKeys(repoID int64) ([]*DeployKey, error) { |
no test coverage detected