aboutsummaryrefslogtreecommitdiffstats
path: root/models/asymkey
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2022-05-20 22:08:52 +0800
committerGitHub <noreply@github.com>2022-05-20 22:08:52 +0800
commitfd7d83ace60258acf7139c4c787aa8af75b7ba8c (patch)
tree50038348ec10485f72344f3ac80324e04abc1283 /models/asymkey
parentd81e31ad7826a81fc7139f329f250594610a274b (diff)
downloadgitea-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.go8
-rw-r--r--models/asymkey/gpg_key_add.go17
-rw-r--r--models/asymkey/ssh_key.go36
-rw-r--r--models/asymkey/ssh_key_authorized_keys.go11
-rw-r--r--models/asymkey/ssh_key_authorized_principals.go18
-rw-r--r--models/asymkey/ssh_key_deploy.go29
-rw-r--r--models/asymkey/ssh_key_fingerprint.go5
-rw-r--r--models/asymkey/ssh_key_principals.go16
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