diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2022-05-20 22:08:52 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-20 22:08:52 +0800 |
commit | fd7d83ace60258acf7139c4c787aa8af75b7ba8c (patch) | |
tree | 50038348ec10485f72344f3ac80324e04abc1283 /models/asymkey | |
parent | d81e31ad7826a81fc7139f329f250594610a274b (diff) | |
download | gitea-fd7d83ace60258acf7139c4c787aa8af75b7ba8c.tar.gz gitea-fd7d83ace60258acf7139c4c787aa8af75b7ba8c.zip |
Move almost all functions' parameter db.Engine to context.Context (#19748)
* Move almost all functions' parameter db.Engine to context.Context
* remove some unnecessary wrap functions
Diffstat (limited to 'models/asymkey')
-rw-r--r-- | models/asymkey/gpg_key.go | 8 | ||||
-rw-r--r-- | models/asymkey/gpg_key_add.go | 17 | ||||
-rw-r--r-- | models/asymkey/ssh_key.go | 36 | ||||
-rw-r--r-- | models/asymkey/ssh_key_authorized_keys.go | 11 | ||||
-rw-r--r-- | models/asymkey/ssh_key_authorized_principals.go | 18 | ||||
-rw-r--r-- | models/asymkey/ssh_key_deploy.go | 29 | ||||
-rw-r--r-- | models/asymkey/ssh_key_fingerprint.go | 5 | ||||
-rw-r--r-- | models/asymkey/ssh_key_principals.go | 16 |
8 files changed, 52 insertions, 88 deletions
diff --git a/models/asymkey/gpg_key.go b/models/asymkey/gpg_key.go index ced6ca37a3..2b99972379 100644 --- a/models/asymkey/gpg_key.go +++ b/models/asymkey/gpg_key.go @@ -198,16 +198,16 @@ func parseGPGKey(ownerID int64, e *openpgp.Entity, verified bool) (*GPGKey, erro } // deleteGPGKey does the actual key deletion -func deleteGPGKey(e db.Engine, keyID string) (int64, error) { +func deleteGPGKey(ctx context.Context, keyID string) (int64, error) { if keyID == "" { return 0, fmt.Errorf("empty KeyId forbidden") // Should never happen but just to be sure } // Delete imported key - n, err := e.Where("key_id=?", keyID).Delete(new(GPGKeyImport)) + n, err := db.GetEngine(ctx).Where("key_id=?", keyID).Delete(new(GPGKeyImport)) if err != nil { return n, err } - return e.Where("key_id=?", keyID).Or("primary_key_id=?", keyID).Delete(new(GPGKey)) + return db.GetEngine(ctx).Where("key_id=?", keyID).Or("primary_key_id=?", keyID).Delete(new(GPGKey)) } // DeleteGPGKey deletes GPG key information in database. @@ -231,7 +231,7 @@ func DeleteGPGKey(doer *user_model.User, id int64) (err error) { } defer committer.Close() - if _, err = deleteGPGKey(db.GetEngine(ctx), key.KeyID); err != nil { + if _, err = deleteGPGKey(ctx, key.KeyID); err != nil { return err } diff --git a/models/asymkey/gpg_key_add.go b/models/asymkey/gpg_key_add.go index 8f84bba1df..d01f2deb03 100644 --- a/models/asymkey/gpg_key_add.go +++ b/models/asymkey/gpg_key_add.go @@ -5,6 +5,7 @@ package asymkey import ( + "context" "strings" "code.gitea.io/gitea/models/db" @@ -29,21 +30,21 @@ import ( // This file contains functions relating to adding GPG Keys // addGPGKey add key, import and subkeys to database -func addGPGKey(e db.Engine, key *GPGKey, content string) (err error) { +func addGPGKey(ctx context.Context, key *GPGKey, content string) (err error) { // Add GPGKeyImport - if _, err = e.Insert(GPGKeyImport{ + if err = db.Insert(ctx, &GPGKeyImport{ KeyID: key.KeyID, Content: content, }); err != nil { return err } // Save GPG primary key. - if _, err = e.Insert(key); err != nil { + if err = db.Insert(ctx, key); err != nil { return err } // Save GPG subs key. for _, subkey := range key.SubsKey { - if err := addGPGSubKey(e, subkey); err != nil { + if err := addGPGSubKey(ctx, subkey); err != nil { return err } } @@ -51,14 +52,14 @@ func addGPGKey(e db.Engine, key *GPGKey, content string) (err error) { } // addGPGSubKey add subkeys to database -func addGPGSubKey(e db.Engine, key *GPGKey) (err error) { +func addGPGSubKey(ctx context.Context, key *GPGKey) (err error) { // Save GPG primary key. - if _, err = e.Insert(key); err != nil { + if err = db.Insert(ctx, key); err != nil { return err } // Save GPG subs key. for _, subkey := range key.SubsKey { - if err := addGPGSubKey(e, subkey); err != nil { + if err := addGPGSubKey(ctx, subkey); err != nil { return err } } @@ -158,7 +159,7 @@ func AddGPGKey(ownerID int64, content, token, signature string) ([]*GPGKey, erro return nil, err } - if err = addGPGKey(db.GetEngine(ctx), key, content); err != nil { + if err = addGPGKey(ctx, key, content); err != nil { return nil, err } keys = append(keys, key) diff --git a/models/asymkey/ssh_key.go b/models/asymkey/ssh_key.go index 74d2411dd9..10220ea937 100644 --- a/models/asymkey/ssh_key.go +++ b/models/asymkey/ssh_key.go @@ -75,7 +75,7 @@ func (key *PublicKey) AuthorizedString() string { return AuthorizedStringForKey(key) } -func addKey(e db.Engine, key *PublicKey) (err error) { +func addKey(ctx context.Context, key *PublicKey) (err error) { if len(key.Fingerprint) == 0 { key.Fingerprint, err = calcFingerprint(key.Content) if err != nil { @@ -84,7 +84,7 @@ func addKey(e db.Engine, key *PublicKey) (err error) { } // Save SSH key. - if _, err = e.Insert(key); err != nil { + if err = db.Insert(ctx, key); err != nil { return err } @@ -105,14 +105,13 @@ func AddPublicKey(ownerID int64, name, content string, authSourceID int64) (*Pub return nil, err } defer committer.Close() - sess := db.GetEngine(ctx) - if err := checkKeyFingerprint(sess, fingerprint); err != nil { + if err := checkKeyFingerprint(ctx, fingerprint); err != nil { return nil, err } // Key name of same user cannot be duplicated. - has, err := sess. + has, err := db.GetEngine(ctx). Where("owner_id = ? AND name = ?", ownerID, name). Get(new(PublicKey)) if err != nil { @@ -130,7 +129,7 @@ func AddPublicKey(ownerID int64, name, content string, authSourceID int64) (*Pub Type: KeyTypeUser, LoginSourceID: authSourceID, } - if err = addKey(sess, key); err != nil { + if err = addKey(ctx, key); err != nil { return nil, fmt.Errorf("addKey: %v", err) } @@ -151,9 +150,11 @@ func GetPublicKeyByID(keyID int64) (*PublicKey, error) { return key, nil } -func searchPublicKeyByContentWithEngine(e db.Engine, content string) (*PublicKey, error) { +// SearchPublicKeyByContent searches content as prefix (leak e-mail part) +// and returns public key found. +func SearchPublicKeyByContent(ctx context.Context, content string) (*PublicKey, error) { key := new(PublicKey) - has, err := e. + has, err := db.GetEngine(ctx). Where("content like ?", content+"%"). Get(key) if err != nil { @@ -164,15 +165,11 @@ func searchPublicKeyByContentWithEngine(e db.Engine, content string) (*PublicKey return key, nil } -// SearchPublicKeyByContent searches content as prefix (leak e-mail part) +// SearchPublicKeyByContentExact searches content // and returns public key found. -func SearchPublicKeyByContent(content string) (*PublicKey, error) { - return searchPublicKeyByContentWithEngine(db.GetEngine(db.DefaultContext), content) -} - -func searchPublicKeyByContentExactWithEngine(e db.Engine, content string) (*PublicKey, error) { +func SearchPublicKeyByContentExact(ctx context.Context, content string) (*PublicKey, error) { key := new(PublicKey) - has, err := e. + has, err := db.GetEngine(ctx). Where("content = ?", content). Get(key) if err != nil { @@ -183,12 +180,6 @@ func searchPublicKeyByContentExactWithEngine(e db.Engine, content string) (*Publ return key, nil } -// SearchPublicKeyByContentExact searches content -// and returns public key found. -func SearchPublicKeyByContentExact(content string) (*PublicKey, error) { - return searchPublicKeyByContentExactWithEngine(db.GetEngine(db.DefaultContext), content) -} - // SearchPublicKey returns a list of public keys matching the provided arguments. func SearchPublicKey(uid int64, fingerprint string) ([]*PublicKey, error) { keys := make([]*PublicKey, 0, 5) @@ -335,12 +326,11 @@ func deleteKeysMarkedForDeletion(keys []string) (bool, error) { return false, err } defer committer.Close() - sess := db.GetEngine(ctx) // Delete keys marked for deletion var sshKeysNeedUpdate bool for _, KeyToDelete := range keys { - key, err := searchPublicKeyByContentWithEngine(sess, KeyToDelete) + key, err := SearchPublicKeyByContent(ctx, KeyToDelete) if err != nil { log.Error("SearchPublicKeyByContent: %v", err) continue diff --git a/models/asymkey/ssh_key_authorized_keys.go b/models/asymkey/ssh_key_authorized_keys.go index dd058f5d11..ce3b0248ce 100644 --- a/models/asymkey/ssh_key_authorized_keys.go +++ b/models/asymkey/ssh_key_authorized_keys.go @@ -6,6 +6,7 @@ package asymkey import ( "bufio" + "context" "fmt" "io" "os" @@ -165,7 +166,7 @@ func RewriteAllPublicKeys() error { } } - if err := RegeneratePublicKeys(t); err != nil { + if err := RegeneratePublicKeys(db.DefaultContext, t); err != nil { return err } @@ -174,12 +175,8 @@ func RewriteAllPublicKeys() error { } // RegeneratePublicKeys regenerates the authorized_keys file -func RegeneratePublicKeys(t io.StringWriter) error { - return regeneratePublicKeys(db.GetEngine(db.DefaultContext), t) -} - -func regeneratePublicKeys(e db.Engine, t io.StringWriter) error { - if err := e.Where("type != ?", KeyTypePrincipal).Iterate(new(PublicKey), func(idx int, bean interface{}) (err error) { +func RegeneratePublicKeys(ctx context.Context, t io.StringWriter) error { + if err := db.GetEngine(ctx).Where("type != ?", KeyTypePrincipal).Iterate(new(PublicKey), func(idx int, bean interface{}) (err error) { _, err = t.WriteString((bean.(*PublicKey)).AuthorizedString()) return err }); err != nil { diff --git a/models/asymkey/ssh_key_authorized_principals.go b/models/asymkey/ssh_key_authorized_principals.go index a8c48c50aa..4b08d0dfe7 100644 --- a/models/asymkey/ssh_key_authorized_principals.go +++ b/models/asymkey/ssh_key_authorized_principals.go @@ -6,6 +6,7 @@ package asymkey import ( "bufio" + "context" "fmt" "io" "os" @@ -42,11 +43,7 @@ const authorizedPrincipalsFile = "authorized_principals" // RewriteAllPrincipalKeys removes any authorized principal and rewrite all keys from database again. // Note: db.GetEngine(db.DefaultContext).Iterate does not get latest data after insert/delete, so we have to call this function // outside any session scope independently. -func RewriteAllPrincipalKeys() error { - return rewriteAllPrincipalKeys(db.GetEngine(db.DefaultContext)) -} - -func rewriteAllPrincipalKeys(e db.Engine) error { +func RewriteAllPrincipalKeys(ctx context.Context) error { // Don't rewrite key if internal server if setting.SSH.StartBuiltinServer || !setting.SSH.CreateAuthorizedPrincipalsFile { return nil @@ -92,7 +89,7 @@ func rewriteAllPrincipalKeys(e db.Engine) error { } } - if err := regeneratePrincipalKeys(e, t); err != nil { + if err := regeneratePrincipalKeys(ctx, t); err != nil { return err } @@ -100,13 +97,8 @@ func rewriteAllPrincipalKeys(e db.Engine) error { return util.Rename(tmpPath, fPath) } -// RegeneratePrincipalKeys regenerates the authorized_principals file -func RegeneratePrincipalKeys(t io.StringWriter) error { - return regeneratePrincipalKeys(db.GetEngine(db.DefaultContext), t) -} - -func regeneratePrincipalKeys(e db.Engine, t io.StringWriter) error { - if err := e.Where("type = ?", KeyTypePrincipal).Iterate(new(PublicKey), func(idx int, bean interface{}) (err error) { +func regeneratePrincipalKeys(ctx context.Context, t io.StringWriter) error { + if err := db.GetEngine(ctx).Where("type = ?", KeyTypePrincipal).Iterate(new(PublicKey), func(idx int, bean interface{}) (err error) { _, err = t.WriteString((bean.(*PublicKey)).AuthorizedString()) return err }); err != nil { diff --git a/models/asymkey/ssh_key_deploy.go b/models/asymkey/ssh_key_deploy.go index fe2ade43ae..9a97d37f93 100644 --- a/models/asymkey/ssh_key_deploy.go +++ b/models/asymkey/ssh_key_deploy.go @@ -67,9 +67,9 @@ func init() { db.RegisterModel(new(DeployKey)) } -func checkDeployKey(e db.Engine, keyID, repoID int64, name string) error { +func checkDeployKey(ctx context.Context, keyID, repoID int64, name string) error { // Note: We want error detail, not just true or false here. - has, err := e. + has, err := db.GetEngine(ctx). Where("key_id = ? AND repo_id = ?", keyID, repoID). Get(new(DeployKey)) if err != nil { @@ -78,7 +78,7 @@ func checkDeployKey(e db.Engine, keyID, repoID int64, name string) error { return ErrDeployKeyAlreadyExist{keyID, repoID} } - has, err = e. + has, err = db.GetEngine(ctx). Where("repo_id = ? AND name = ?", repoID, name). Get(new(DeployKey)) if err != nil { @@ -91,8 +91,8 @@ func checkDeployKey(e db.Engine, keyID, repoID int64, name string) error { } // addDeployKey adds new key-repo relation. -func addDeployKey(e db.Engine, keyID, repoID int64, name, fingerprint string, mode perm.AccessMode) (*DeployKey, error) { - if err := checkDeployKey(e, keyID, repoID, name); err != nil { +func addDeployKey(ctx context.Context, keyID, repoID int64, name, fingerprint string, mode perm.AccessMode) (*DeployKey, error) { + if err := checkDeployKey(ctx, keyID, repoID, name); err != nil { return nil, err } @@ -103,8 +103,7 @@ func addDeployKey(e db.Engine, keyID, repoID int64, name, fingerprint string, mo Fingerprint: fingerprint, Mode: mode, } - _, err := e.Insert(key) - return key, err + return key, db.Insert(ctx, key) } // HasDeployKey returns true if public key is a deploy key of given repository. @@ -133,12 +132,10 @@ func AddDeployKey(repoID int64, name, content string, readOnly bool) (*DeployKey } defer committer.Close() - sess := db.GetEngine(ctx) - pkey := &PublicKey{ Fingerprint: fingerprint, } - has, err := sess.Get(pkey) + has, err := db.GetByBean(ctx, pkey) if err != nil { return nil, err } @@ -153,12 +150,12 @@ func AddDeployKey(repoID int64, name, content string, readOnly bool) (*DeployKey pkey.Type = KeyTypeDeploy pkey.Content = content pkey.Name = name - if err = addKey(sess, pkey); err != nil { + if err = addKey(ctx, pkey); err != nil { return nil, fmt.Errorf("addKey: %v", err) } } - key, err := addDeployKey(sess, pkey.ID, repoID, name, pkey.Fingerprint, accessMode) + key, err := addDeployKey(ctx, pkey.ID, repoID, name, pkey.Fingerprint, accessMode) if err != nil { return nil, err } @@ -179,16 +176,12 @@ func GetDeployKeyByID(ctx context.Context, id int64) (*DeployKey, error) { } // GetDeployKeyByRepo returns deploy key by given public key ID and repository ID. -func GetDeployKeyByRepo(keyID, repoID int64) (*DeployKey, error) { - return getDeployKeyByRepo(db.GetEngine(db.DefaultContext), keyID, repoID) -} - -func getDeployKeyByRepo(e db.Engine, keyID, repoID int64) (*DeployKey, error) { +func GetDeployKeyByRepo(ctx context.Context, keyID, repoID int64) (*DeployKey, error) { key := &DeployKey{ KeyID: keyID, RepoID: repoID, } - has, err := e.Get(key) + has, err := db.GetByBean(ctx, key) if err != nil { return nil, err } else if !has { diff --git a/models/asymkey/ssh_key_fingerprint.go b/models/asymkey/ssh_key_fingerprint.go index 437f283bfa..283b3d3b64 100644 --- a/models/asymkey/ssh_key_fingerprint.go +++ b/models/asymkey/ssh_key_fingerprint.go @@ -5,6 +5,7 @@ package asymkey import ( + "context" "errors" "fmt" "strings" @@ -31,8 +32,8 @@ import ( // checkKeyFingerprint only checks if key fingerprint has been used as public key, // it is OK to use same key as deploy key for multiple repositories/users. -func checkKeyFingerprint(e db.Engine, fingerprint string) error { - has, err := e.Get(&PublicKey{ +func checkKeyFingerprint(ctx context.Context, fingerprint string) error { + has, err := db.GetByBean(ctx, &PublicKey{ Fingerprint: fingerprint, }) if err != nil { diff --git a/models/asymkey/ssh_key_principals.go b/models/asymkey/ssh_key_principals.go index 5f18fd04d1..7a5c234f6f 100644 --- a/models/asymkey/ssh_key_principals.go +++ b/models/asymkey/ssh_key_principals.go @@ -31,10 +31,9 @@ func AddPrincipalKey(ownerID int64, content string, authSourceID int64) (*Public return nil, err } defer committer.Close() - sess := db.GetEngine(ctx) // Principals cannot be duplicated. - has, err := sess. + has, err := db.GetEngine(ctx). Where("content = ? AND type = ?", content, KeyTypePrincipal). Get(new(PublicKey)) if err != nil { @@ -51,7 +50,7 @@ func AddPrincipalKey(ownerID int64, content string, authSourceID int64) (*Public Type: KeyTypePrincipal, LoginSourceID: authSourceID, } - if err = addPrincipalKey(sess, key); err != nil { + if err = db.Insert(ctx, key); err != nil { return nil, fmt.Errorf("addKey: %v", err) } @@ -61,16 +60,7 @@ func AddPrincipalKey(ownerID int64, content string, authSourceID int64) (*Public committer.Close() - return key, RewriteAllPrincipalKeys() -} - -func addPrincipalKey(e db.Engine, key *PublicKey) (err error) { - // Save Key representing a principal. - if _, err = e.Insert(key); err != nil { - return err - } - - return nil + return key, RewriteAllPrincipalKeys(db.DefaultContext) } // CheckPrincipalKeyString strips spaces and returns an error if the given principal contains newlines |