]> source.dussan.org Git - gitea.git/commitdiff
Add check if public key name has been used
authorUnknown <joe2010xtmf@163.com>
Sun, 16 Mar 2014 10:25:16 +0000 (06:25 -0400)
committerUnknown <joe2010xtmf@163.com>
Sun, 16 Mar 2014 10:25:16 +0000 (06:25 -0400)
models/publickey.go
routers/user/setting.go

index bd0b7ee937a1a930836fb87231ba0ed199860c73..ee6bd5310184b263ad8d01d0fb5d2fcd8e65e747 100644 (file)
@@ -67,11 +67,23 @@ type PublicKey struct {
        Updated     time.Time `xorm:"updated"`
 }
 
+var (
+       ErrKeyAlreadyExist = errors.New("Public key already exist")
+)
+
 func GenAuthorizedKey(keyId int64, key string) string {
        return fmt.Sprintf(tmplPublicKey, appPath, keyId, key)
 }
 
 func AddPublicKey(key *PublicKey) (err error) {
+       // Check if public key name has been used.
+       has, err := orm.Get(key)
+       if err != nil {
+               return err
+       } else if has {
+               return ErrKeyAlreadyExist
+       }
+
        // Calculate fingerprint.
        tmpPath := filepath.Join(os.TempDir(), fmt.Sprintf("%d", time.Now().Nanosecond()),
                "id_rsa.pub")
index cd12bb6296d887d2f833daf76ddcae3425c5ea06..91e992b18efaac4e805a4189da0563c3b838ffb6 100644 (file)
@@ -128,6 +128,10 @@ func SettingSSHKeys(ctx *middleware.Context, form auth.AddSSHKeyForm) {
                }
 
                if err := models.AddPublicKey(k); err != nil {
+                       if err.Error() == models.ErrKeyAlreadyExist.Error() {
+                               ctx.RenderWithErr("Public key name has been used", "user/publickey", &form)
+                               return
+                       }
                        ctx.Handle(200, "ssh.AddPublicKey", err)
                        return
                } else {