44package asymkey
55
66import (
7+ "fmt"
78 "strings"
89 "testing"
910
11+ asymkey_model "code.gitea.io/gitea/models/asymkey"
12+ "code.gitea.io/gitea/models/unittest"
1013 user_model "code.gitea.io/gitea/models/user"
1114 "code.gitea.io/gitea/modules/git"
1215 "code.gitea.io/gitea/modules/setting"
@@ -17,6 +20,8 @@ import (
1720)
1821
1922func TestParseCommitWithSSHSignature (t * testing.T ) {
23+ assert .NoError (t , unittest .PrepareTestDatabase ())
24+
2025 // Here we only test the TrustedSSHKeys. The complete signing test is in tests/integration/gpg_ssh_git_test.go
2126 t .Run ("TrustedSSHKey" , func (t * testing.T ) {
2227 defer test .MockVariableValue (& setting .Repository .Signing .SigningName , "gitea" )()
@@ -51,4 +56,60 @@ Initial commit with signed file
5156 assert .
Equal (
t ,
"[email protected] " ,
ret .
SigningUser .
Email )
5257 }
5358 })
59+
60+ t .Run ("SSH_Sign_With_UserEmail" , func (t * testing.T ) {
61+ commit , err := git .CommitFromReader (nil , git .Sha1ObjectFormat .EmptyObjectID (), strings .NewReader (fmt .Sprintf (`tree a3b1fad553e0f9a2b4a58327bebde36c7da75aa2
62+ author user2 <[email protected] > 1752194028 -0700 63+ committer user2 <[email protected] > 1752194028 -0700 64+ gpgsig -----BEGIN SSH SIGNATURE-----
65+ U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAguk+sxdKD2pPHTiM809ZFwey63L
66+ FaNOEinNxo7rzJZWcAAAADZ2l0AAAAAAAAAAZzaGE1MTIAAABTAAAAC3NzaC1lZDI1NTE5
67+ AAAAQBfX+6mcKZBnXckwHcBFqRuXMD3vTKi1yv5wgrqIxTyr2LWB97xxmO92cvjsr0POQ2
68+ 2YA7mQS510Cg2s1uU1XAk=
69+ -----END SSH SIGNATURE-----
70+
71+ init project
72+ ` )))
73+ require .NoError (t , err )
74+ committingUser := unittest .AssertExistsAndLoadBean (t , & user_model.User {ID : 2 })
75+ sshKey := unittest .AssertExistsAndLoadBean (t , & asymkey_model.PublicKey {ID : 2 })
76+
77+ ret := ParseCommitWithSSHSignature (t .Context (), commit , committingUser )
78+ require .NotNil (t , ret )
79+ assert .True (t , ret .Verified )
80+ assert .Equal (t , "user2 / SHA256:70+Mc6lGvBwTlXkxDqJwXZYqV6XzU7jDE06+lC+gocY" , ret .Reason )
81+ assert .False (t , ret .Warning )
82+ assert .Equal (t , committingUser , ret .SigningUser )
83+ assert .Equal (t , committingUser , ret .CommittingUser )
84+ assert .Equal (t , sshKey , ret .SigningSSHKey )
85+ })
86+
87+ t .Run ("SSH_Sign_With_NoReplyEmailAddress" , func (t * testing.T ) {
88+ defer test .MockVariableValue (& setting .Service .NoReplyAddress , "noreply.localhost" )()
89+
90+ commit , err := git .CommitFromReader (nil , git .Sha1ObjectFormat .EmptyObjectID (), strings .NewReader (fmt .Sprintf (`tree a3b1fad553e0f9a2b4a58327bebde36c7da75aa2
91+ author user2 <user2@%s> 1752193378 -0700
92+ committer user2 <user2@%s> 1752193378 -0700
93+ gpgsig -----BEGIN SSH SIGNATURE-----
94+ U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAguk+sxdKD2pPHTiM809ZFwey63L
95+ FaNOEinNxo7rzJZWcAAAADZ2l0AAAAAAAAAAZzaGE1MTIAAABTAAAAC3NzaC1lZDI1NTE5
96+ AAAAQEbiBh8Ad9JVk4lGUsczwI+2ISaWvzBU+Y/6Lbh3F1sTRF8Rz1ZvVkYup+dVpOLswx
97+ 1tBhGYsG8gKwvqGTWQYwI=
98+ -----END SSH SIGNATURE-----
99+
100+ init project
101+ ` , setting .Service .NoReplyAddress , setting .Service .NoReplyAddress )))
102+ require .NoError (t , err )
103+ committingUser := unittest .AssertExistsAndLoadBean (t , & user_model.User {ID : 2 })
104+ sshKey := unittest .AssertExistsAndLoadBean (t , & asymkey_model.PublicKey {ID : 2 })
105+
106+ ret := ParseCommitWithSSHSignature (t .Context (), commit , committingUser )
107+ require .NotNil (t , ret )
108+ assert .True (t , ret .Verified )
109+ assert .Equal (t , "user2 / SHA256:70+Mc6lGvBwTlXkxDqJwXZYqV6XzU7jDE06+lC+gocY" , ret .Reason )
110+ assert .False (t , ret .Warning )
111+ assert .Equal (t , committingUser , ret .SigningUser )
112+ assert .Equal (t , committingUser , ret .CommittingUser )
113+ assert .Equal (t , sshKey , ret .SigningSSHKey )
114+ })
54115}
0 commit comments