From e84e0ab904e076e248d7b84c0a840b5473c6739b Mon Sep 17 00:00:00 2001 From: Eryx Date: Tue, 28 Oct 2014 10:36:47 +0800 Subject: [PATCH] Fix #266 --- models/publickey.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/models/publickey.go b/models/publickey.go index 762d7333fa..c29003ce6f 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 {