@@ -72,96 +72,90 @@ func AddGPGKey(ctx context.Context, ownerID int64, content, token, signature str
7272		return  nil , err 
7373	}
7474
75- 	ctx , committer , err  :=  db .TxContext (ctx )
76- 	if  err  !=  nil  {
77- 		return  nil , err 
78- 	}
79- 	defer  committer .Close ()
80- 
81- 	keys  :=  make ([]* GPGKey , 0 , len (ekeys ))
82- 
83- 	verified  :=  false 
84- 	// Handle provided signature 
85- 	if  signature  !=  ""  {
86- 		signer , err  :=  openpgp .CheckArmoredDetachedSignature (ekeys , strings .NewReader (token ), strings .NewReader (signature ), nil )
87- 		if  err  !=  nil  {
88- 			signer , err  =  openpgp .CheckArmoredDetachedSignature (ekeys , strings .NewReader (token + "\n " ), strings .NewReader (signature ), nil )
89- 		}
90- 		if  err  !=  nil  {
91- 			signer , err  =  openpgp .CheckArmoredDetachedSignature (ekeys , strings .NewReader (token + "\r \n " ), strings .NewReader (signature ), nil )
92- 		}
93- 		if  err  !=  nil  {
94- 			log .Debug ("AddGPGKey CheckArmoredDetachedSignature failed: %v" , err )
95- 			return  nil , ErrGPGInvalidTokenSignature {
96- 				ID :      ekeys [0 ].PrimaryKey .KeyIdString (),
97- 				Wrapped : err ,
75+ 	return  db .WithTx2 (ctx , func (ctx  context.Context ) ([]* GPGKey , error ) {
76+ 		keys  :=  make ([]* GPGKey , 0 , len (ekeys ))
77+ 
78+ 		verified  :=  false 
79+ 		// Handle provided signature 
80+ 		if  signature  !=  ""  {
81+ 			signer , err  :=  openpgp .CheckArmoredDetachedSignature (ekeys , strings .NewReader (token ), strings .NewReader (signature ), nil )
82+ 			if  err  !=  nil  {
83+ 				signer , err  =  openpgp .CheckArmoredDetachedSignature (ekeys , strings .NewReader (token + "\n " ), strings .NewReader (signature ), nil )
9884			}
85+ 			if  err  !=  nil  {
86+ 				signer , err  =  openpgp .CheckArmoredDetachedSignature (ekeys , strings .NewReader (token + "\r \n " ), strings .NewReader (signature ), nil )
87+ 			}
88+ 			if  err  !=  nil  {
89+ 				log .Debug ("AddGPGKey CheckArmoredDetachedSignature failed: %v" , err )
90+ 				return  nil , ErrGPGInvalidTokenSignature {
91+ 					ID :      ekeys [0 ].PrimaryKey .KeyIdString (),
92+ 					Wrapped : err ,
93+ 				}
94+ 			}
95+ 			ekeys  =  []* openpgp.Entity {signer }
96+ 			verified  =  true 
9997		}
100- 		ekeys  =  []* openpgp.Entity {signer }
101- 		verified  =  true 
102- 	}
103- 
104- 	if  len (ekeys ) >  1  {
105- 		id2key  :=  map [string ]* openpgp.Entity {}
106- 		newEKeys  :=  make ([]* openpgp.Entity , 0 , len (ekeys ))
107- 		for  _ , ekey  :=  range  ekeys  {
108- 			id  :=  ekey .PrimaryKey .KeyIdString ()
109- 			if  original , has  :=  id2key [id ]; has  {
110- 				// Coalesce this with the other one 
111- 				for  _ , subkey  :=  range  ekey .Subkeys  {
112- 					if  subkey .PublicKey  ==  nil  {
113- 						continue 
114- 					}
115- 					found  :=  false 
11698
117- 					for  _ , originalSubkey  :=  range  original .Subkeys  {
118- 						if  originalSubkey .PublicKey  ==  nil  {
99+ 		if  len (ekeys ) >  1  {
100+ 			id2key  :=  map [string ]* openpgp.Entity {}
101+ 			newEKeys  :=  make ([]* openpgp.Entity , 0 , len (ekeys ))
102+ 			for  _ , ekey  :=  range  ekeys  {
103+ 				id  :=  ekey .PrimaryKey .KeyIdString ()
104+ 				if  original , has  :=  id2key [id ]; has  {
105+ 					// Coalesce this with the other one 
106+ 					for  _ , subkey  :=  range  ekey .Subkeys  {
107+ 						if  subkey .PublicKey  ==  nil  {
119108							continue 
120109						}
121- 						if  originalSubkey .PublicKey .KeyId  ==  subkey .PublicKey .KeyId  {
122- 							found  =  true 
123- 							break 
110+ 						found  :=  false 
111+ 
112+ 						for  _ , originalSubkey  :=  range  original .Subkeys  {
113+ 							if  originalSubkey .PublicKey  ==  nil  {
114+ 								continue 
115+ 							}
116+ 							if  originalSubkey .PublicKey .KeyId  ==  subkey .PublicKey .KeyId  {
117+ 								found  =  true 
118+ 								break 
119+ 							}
120+ 						}
121+ 						if  ! found  {
122+ 							original .Subkeys  =  append (original .Subkeys , subkey )
124123						}
125124					}
126- 					if  ! found  {
127- 						original .Subkeys  =  append (original .Subkeys , subkey )
128- 					}
129- 				}
130- 				for  name , identity  :=  range  ekey .Identities  {
131- 					if  _ , has  :=  original .Identities [name ]; has  {
132- 						continue 
125+ 					for  name , identity  :=  range  ekey .Identities  {
126+ 						if  _ , has  :=  original .Identities [name ]; has  {
127+ 							continue 
128+ 						}
129+ 						original .Identities [name ] =  identity 
133130					}
134- 					original . Identities [ name ]  =   identity 
131+ 					continue 
135132				}
136- 				continue 
133+ 				id2key [id ] =  ekey 
134+ 				newEKeys  =  append (newEKeys , ekey )
137135			}
138- 			id2key [id ] =  ekey 
139- 			newEKeys  =  append (newEKeys , ekey )
140- 		}
141- 		ekeys  =  newEKeys 
142- 	}
143- 
144- 	for  _ , ekey  :=  range  ekeys  {
145- 		// Key ID cannot be duplicated. 
146- 		has , err  :=  db .GetEngine (ctx ).Where ("key_id=?" , ekey .PrimaryKey .KeyIdString ()).
147- 			Get (new (GPGKey ))
148- 		if  err  !=  nil  {
149- 			return  nil , err 
150- 		} else  if  has  {
151- 			return  nil , ErrGPGKeyIDAlreadyUsed {ekey .PrimaryKey .KeyIdString ()}
136+ 			ekeys  =  newEKeys 
152137		}
153138
154- 		// Get DB session 
139+ 		for  _ , ekey  :=  range  ekeys  {
140+ 			// Key ID cannot be duplicated. 
141+ 			has , err  :=  db .GetEngine (ctx ).Where ("key_id=?" , ekey .PrimaryKey .KeyIdString ()).
142+ 				Get (new (GPGKey ))
143+ 			if  err  !=  nil  {
144+ 				return  nil , err 
145+ 			} else  if  has  {
146+ 				return  nil , ErrGPGKeyIDAlreadyUsed {ekey .PrimaryKey .KeyIdString ()}
147+ 			}
155148
156- 		key , err  :=  parseGPGKey (ctx , ownerID , ekey , verified )
157- 		if  err  !=  nil  {
158- 			return  nil , err 
159- 		}
149+ 			 key , err  :=  parseGPGKey (ctx , ownerID , ekey , verified )
150+ 			 if  err  !=  nil  {
151+ 				 return  nil , err 
152+ 			 }
160153
161- 		if  err  =  addGPGKey (ctx , key , content ); err  !=  nil  {
162- 			return  nil , err 
154+ 			if  err  =  addGPGKey (ctx , key , content ); err  !=  nil  {
155+ 				return  nil , err 
156+ 			}
157+ 			keys  =  append (keys , key )
163158		}
164- 		keys  =  append (keys , key )
165- 	}
166- 	return  keys , committer .Commit ()
159+ 		return  keys , nil 
160+ 	})
167161}
0 commit comments