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"` | 	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") | ||||||
|  |  | ||||||
|  | @ -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…
	
		Reference in a new issue