@@ -24,6 +24,7 @@ const (
2424 baseSigned signingMode = "basesigned"
2525 headSigned signingMode = "headsigned"
2626 commitsSigned signingMode = "commitssigned"
27+ approved signingMode = "approved"
2728)
2829
2930func signingModeFromStrings (modeStrings []string ) []signingMode {
@@ -45,6 +46,8 @@ func signingModeFromStrings(modeStrings []string) []signingMode {
4546 fallthrough
4647 case headSigned :
4748 fallthrough
49+ case approved :
50+ fallthrough
4851 case commitsSigned :
4952 returnable = append (returnable , signMode )
5053 }
@@ -211,98 +214,3 @@ func (repo *Repository) SignCRUDAction(u *User, tmpBasePath, parentCommit string
211214 }
212215 return true , signingKey
213216}
214-
215- // SignMerge determines if we should sign a merge commit to this repository
216- func (repo * Repository ) SignMerge (u * User , tmpBasePath , baseCommit , headCommit string ) (bool , string ) {
217- rules := signingModeFromStrings (setting .Repository .Signing .Merges )
218- signingKey := signingKey (repo .RepoPath ())
219- if signingKey == "" {
220- return false , ""
221- }
222- var gitRepo * git.Repository
223- var err error
224-
225- for _ , rule := range rules {
226- switch rule {
227- case never :
228- return false , ""
229- case always :
230- break
231- case pubkey :
232- keys , err := ListGPGKeys (u .ID )
233- if err != nil || len (keys ) == 0 {
234- return false , ""
235- }
236- case twofa :
237- twofa , err := GetTwoFactorByUID (u .ID )
238- if err != nil || twofa == nil {
239- return false , ""
240- }
241- case baseSigned :
242- if gitRepo == nil {
243- gitRepo , err = git .OpenRepository (tmpBasePath )
244- if err != nil {
245- return false , ""
246- }
247- defer gitRepo .Close ()
248- }
249- commit , err := gitRepo .GetCommit (baseCommit )
250- if err != nil {
251- return false , ""
252- }
253- verification := ParseCommitWithSignature (commit )
254- if ! verification .Verified {
255- return false , ""
256- }
257- case headSigned :
258- if gitRepo == nil {
259- gitRepo , err = git .OpenRepository (tmpBasePath )
260- if err != nil {
261- return false , ""
262- }
263- defer gitRepo .Close ()
264- }
265- commit , err := gitRepo .GetCommit (headCommit )
266- if err != nil {
267- return false , ""
268- }
269- verification := ParseCommitWithSignature (commit )
270- if ! verification .Verified {
271- return false , ""
272- }
273- case commitsSigned :
274- if gitRepo == nil {
275- gitRepo , err = git .OpenRepository (tmpBasePath )
276- if err != nil {
277- return false , ""
278- }
279- defer gitRepo .Close ()
280- }
281- commit , err := gitRepo .GetCommit (headCommit )
282- if err != nil {
283- return false , ""
284- }
285- verification := ParseCommitWithSignature (commit )
286- if ! verification .Verified {
287- return false , ""
288- }
289- // need to work out merge-base
290- mergeBaseCommit , _ , err := gitRepo .GetMergeBase ("" , baseCommit , headCommit )
291- if err != nil {
292- return false , ""
293- }
294- commitList , err := commit .CommitsBeforeUntil (mergeBaseCommit )
295- if err != nil {
296- return false , ""
297- }
298- for e := commitList .Front (); e != nil ; e = e .Next () {
299- commit = e .Value .(* git.Commit )
300- verification := ParseCommitWithSignature (commit )
301- if ! verification .Verified {
302- return false , ""
303- }
304- }
305- }
306- }
307- return true , signingKey
308- }
0 commit comments