| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- // Copyright 2024 The Gitea Authors. All rights reserved.
- // SPDX-License-Identifier: MIT
-
- package asymkey
-
- import (
- "context"
- "fmt"
-
- asymkey_model "code.gitea.io/gitea/models/asymkey"
- "code.gitea.io/gitea/models/db"
- "code.gitea.io/gitea/models/perm"
- )
-
- // AddPrincipalKey adds new principal to database and authorized_principals file.
- func AddPrincipalKey(ctx context.Context, ownerID int64, content string, authSourceID int64) (*asymkey_model.PublicKey, error) {
- key := &asymkey_model.PublicKey{
- OwnerID: ownerID,
- Name: content,
- Content: content,
- Mode: perm.AccessModeWrite,
- Type: asymkey_model.KeyTypePrincipal,
- LoginSourceID: authSourceID,
- }
-
- if err := db.WithTx(ctx, func(ctx context.Context) error {
- // Principals cannot be duplicated.
- has, err := db.GetEngine(ctx).
- Where("content = ? AND type = ?", content, asymkey_model.KeyTypePrincipal).
- Get(new(asymkey_model.PublicKey))
- if err != nil {
- return err
- } else if has {
- return asymkey_model.ErrKeyAlreadyExist{
- Content: content,
- }
- }
-
- if err = db.Insert(ctx, key); err != nil {
- return fmt.Errorf("addKey: %w", err)
- }
- return nil
- }); err != nil {
- return nil, err
- }
-
- return key, RewriteAllPrincipalKeys(ctx)
- }
|