Add check if public key name has been used
This commit is contained in:
		
							parent
							
								
									ca956d5cec
								
							
						
					
					
						commit
						fb960db6af
					
				
					 2 changed files with 16 additions and 0 deletions
				
			
		|  | @ -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") | ||||
|  |  | |||
|  | @ -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 { | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue