Skip to content

Commit 8ed52ed

Browse files
committed
Apply review recommendation + simplify database operations
1 parent 46c43cd commit 8ed52ed

File tree

1 file changed

+20
-36
lines changed

1 file changed

+20
-36
lines changed

models/gpg_key.go

Lines changed: 20 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ import (
1111
"strings"
1212
"time"
1313

14-
"code.gitea.io/gitea/modules/log"
15-
1614
"github.com/go-xorm/xorm"
1715
"golang.org/x/crypto/openpgp"
1816
"golang.org/x/crypto/openpgp/packet"
@@ -46,20 +44,6 @@ func (key *GPGKey) BeforeInsert() {
4644
key.CreatedUnix = key.Created.Unix()
4745
}
4846

49-
// AfterInsert will be invoked by XORM after inserting a record
50-
func (key *GPGKey) AfterInsert() {
51-
log.Debug("AfterInsert Subkeys: %v", key.SubsKey)
52-
sess := x.NewSession()
53-
defer sessionRelease(sess)
54-
sess.Begin()
55-
for _, subkey := range key.SubsKey {
56-
if err := addGPGKey(sess, subkey); err != nil {
57-
log.Warn("Failed to add subKey: [err:%v, subkey:%v]", err, subkey)
58-
}
59-
}
60-
sess.Commit()
61-
}
62-
6347
// AfterSet is invoked from XORM after setting the value of a field of this object.
6448
func (key *GPGKey) AfterSet(colName string, _ xorm.Cell) {
6549
switch colName {
@@ -102,11 +86,18 @@ func checkArmoredGPGKeyString(content string) (*openpgp.Entity, error) {
10286
return list[0], nil
10387
}
10488

89+
//addGPGKey add key and subkeys to database
10590
func addGPGKey(e Engine, key *GPGKey) (err error) {
106-
// Save GPG key.
91+
// Save GPG primary key.
10792
if _, err = e.Insert(key); err != nil {
10893
return err
10994
}
95+
// Save GPG subs key.
96+
for _, subkey := range key.SubsKey {
97+
if err := addGPGKey(e, subkey); err != nil {
98+
return err
99+
}
100+
}
110101
return nil
111102
}
112103

@@ -139,11 +130,13 @@ func AddGPGKey(ownerID int64, content string) (*GPGKey, error) {
139130
}
140131

141132
if err = addGPGKey(sess, key); err != nil {
142-
return nil, fmt.Errorf("addKey: %v", err)
133+
return nil, err
143134
}
144135

145136
return key, sess.Commit()
146137
}
138+
139+
//base64EncPubKey encode public kay content to base 64
147140
func base64EncPubKey(pubkey *packet.PublicKey) (string, error) {
148141
var w bytes.Buffer
149142
err := pubkey.Serialize(&w)
@@ -152,6 +145,8 @@ func base64EncPubKey(pubkey *packet.PublicKey) (string, error) {
152145
}
153146
return base64.StdEncoding.EncodeToString(w.Bytes()), nil
154147
}
148+
149+
//parseSubGPGKey parse a sub Key
155150
func parseSubGPGKey(ownerID int64, primaryID string, pubkey *packet.PublicKey, expiry time.Time) (*GPGKey, error) {
156151
content, err := base64EncPubKey(pubkey)
157152
if err != nil {
@@ -170,6 +165,8 @@ func parseSubGPGKey(ownerID int64, primaryID string, pubkey *packet.PublicKey, e
170165
CanCertify: pubkey.PubKeyAlgo.CanSign(),
171166
}, nil
172167
}
168+
169+
//parseGPGKey parse a PrimaryKey entity (primary key + subs keys + self-signature)
173170
func parseGPGKey(ownerID int64, e *openpgp.Entity) (*GPGKey, error) {
174171
pubkey := e.PrimaryKey
175172

@@ -239,13 +236,11 @@ func parseGPGKey(ownerID int64, e *openpgp.Entity) (*GPGKey, error) {
239236
}
240237

241238
// deleteGPGKey does the actual key deletion
242-
func deleteGPGKey(e *xorm.Session, keyIDs ...int64) error {
243-
if len(keyIDs) == 0 {
244-
return nil
239+
func deleteGPGKey(e *xorm.Session, keyID string) (int64, error) {
240+
if keyID == "" {
241+
return 0, fmt.Errorf("empty KeyId forbidden") //Should never happen but just to be sure
245242
}
246-
247-
_, err := e.In("id", keyIDs).Delete(new(GPGKey))
248-
return err
243+
return e.Where("key_id=?", keyID).Or("primary_key_id=?", keyID).Delete(new(GPGKey))
249244
}
250245

251246
// DeleteGPGKey deletes GPG key information in database.
@@ -269,18 +264,7 @@ func DeleteGPGKey(doer *User, id int64) (err error) {
269264
return err
270265
}
271266

272-
//Add subkeys to remove
273-
subkeys := make([]*GPGKey, 0, 5)
274-
x.Where("primary_key_id=?", key.KeyID).Find(&subkeys)
275-
ids := make([]int64, len(subkeys)+1)
276-
for i, sk := range subkeys {
277-
ids[i] = sk.ID
278-
}
279-
280-
//Add primary key to remove at last
281-
ids[len(subkeys)] = id
282-
283-
if err = deleteGPGKey(sess, ids...); err != nil {
267+
if _, err = deleteGPGKey(sess, key.KeyID); err != nil {
284268
return err
285269
}
286270

0 commit comments

Comments
 (0)