Browse Source

Add check if public key name has been used

for-closed-social
Unknown 10 years ago
parent
commit
fb960db6af
2 changed files with 16 additions and 0 deletions
  1. +12
    -0
      models/publickey.go
  2. +4
    -0
      routers/user/setting.go

+ 12
- 0
models/publickey.go View File

@ -67,11 +67,23 @@ type PublicKey struct {
Updated time.Time `xorm:"updated"` Updated time.Time `xorm:"updated"`
} }
var (
ErrKeyAlreadyExist = errors.New("Public key already exist")
)
func GenAuthorizedKey(keyId int64, key string) string { func GenAuthorizedKey(keyId int64, key string) string {
return fmt.Sprintf(tmplPublicKey, appPath, keyId, key) return fmt.Sprintf(tmplPublicKey, appPath, keyId, key)
} }
func AddPublicKey(key *PublicKey) (err error) { 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. // Calculate fingerprint.
tmpPath := filepath.Join(os.TempDir(), fmt.Sprintf("%d", time.Now().Nanosecond()), tmpPath := filepath.Join(os.TempDir(), fmt.Sprintf("%d", time.Now().Nanosecond()),
"id_rsa.pub") "id_rsa.pub")

+ 4
- 0
routers/user/setting.go View File

@ -128,6 +128,10 @@ func SettingSSHKeys(ctx *middleware.Context, form auth.AddSSHKeyForm) {
} }
if err := models.AddPublicKey(k); err != nil { 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) ctx.Handle(200, "ssh.AddPublicKey", err)
return return
} else { } else {

Loading…
Cancel
Save