diff --git a/models/publickey.go b/models/publickey.go index 762d7333f..c29003ce6 100644 --- a/models/publickey.go +++ b/models/publickey.go @@ -79,9 +79,9 @@ func init() { // PublicKey represents a SSH key. type PublicKey struct { Id int64 - OwnerId int64 `xorm:"UNIQUE(s) INDEX NOT NULL"` - Name string `xorm:"UNIQUE(s) NOT NULL"` - Fingerprint string + OwnerId int64 `xorm:"UNIQUE(s) INDEX NOT NULL"` + Name string `xorm:"UNIQUE(s) NOT NULL"` + Fingerprint string `xorm:"INDEX NOT NULL"` Content string `xorm:"TEXT NOT NULL"` Created time.Time `xorm:"CREATED"` Updated time.Time @@ -209,6 +209,9 @@ func AddPublicKey(key *PublicKey) (err error) { return errors.New("not enough output for calculating fingerprint: " + stdout) } key.Fingerprint = strings.Split(stdout, " ")[1] + if has, err := x.Get(&PublicKey{Fingerprint: key.Fingerprint}); err == nil && has { + return ErrKeyAlreadyExist + } // Save SSH key. if _, err = x.Insert(key); err != nil {