AddPublicKey adds new public key to database and authorized_keys file.
(ownerID int64, name, content string)
| 398 | |
| 399 | // AddPublicKey adds new public key to database and authorized_keys file. |
| 400 | func AddPublicKey(ownerID int64, name, content string) (*PublicKey, error) { |
| 401 | log.Trace("Add public key: %s", content) |
| 402 | if err := checkKeyContent(content); err != nil { |
| 403 | return nil, err |
| 404 | } |
| 405 | |
| 406 | // Key name of same user cannot be duplicated. |
| 407 | has, err := x.Where("owner_id = ? AND name = ?", ownerID, name).Get(new(PublicKey)) |
| 408 | if err != nil { |
| 409 | return nil, err |
| 410 | } else if has { |
| 411 | return nil, ErrKeyNameAlreadyUsed{ownerID, name} |
| 412 | } |
| 413 | |
| 414 | sess := x.NewSession() |
| 415 | defer sess.Close() |
| 416 | if err = sess.Begin(); err != nil { |
| 417 | return nil, err |
| 418 | } |
| 419 | |
| 420 | key := &PublicKey{ |
| 421 | OwnerID: ownerID, |
| 422 | Name: name, |
| 423 | Content: content, |
| 424 | Mode: AccessModeWrite, |
| 425 | Type: KeyTypeUser, |
| 426 | } |
| 427 | if err = addKey(sess, key); err != nil { |
| 428 | return nil, errors.Newf("addKey: %v", err) |
| 429 | } |
| 430 | |
| 431 | return key, sess.Commit() |
| 432 | } |
| 433 | |
| 434 | // GetPublicKeyByID returns public key by given ID. |
| 435 | func GetPublicKeyByID(keyID int64) (*PublicKey, error) { |
no test coverage detected