@@ -7,8 +7,11 @@ package integrations
7
7
import (
8
8
"fmt"
9
9
"net/http"
10
+ "net/url"
10
11
"testing"
11
12
13
+ "github.com/stretchr/testify/assert"
14
+
12
15
"code.gitea.io/gitea/models"
13
16
api "code.gitea.io/sdk/gitea"
14
17
)
@@ -90,3 +93,102 @@ func TestCreateReadWriteDeployKey(t *testing.T) {
90
93
Mode : models .AccessModeWrite ,
91
94
})
92
95
}
96
+
97
+ func TestCreateUserKey (t * testing.T ) {
98
+ prepareTestEnv (t )
99
+ user := models .AssertExistsAndLoadBean (t , & models.User {Name : "user1" }).(* models.User )
100
+
101
+ session := loginUser (t , "user1" )
102
+ token := url .QueryEscape (getTokenForLoggedInUser (t , session ))
103
+ keysURL := fmt .Sprintf ("/api/v1/user/keys?token=%s" , token )
104
+ keyType := "ssh-rsa"
105
+ keyContent := "AAAAB3NzaC1yc2EAAAADAQABAAABAQCyTiPTeHJl6Gs5D1FyHT0qTWpVkAy9+LIKjctQXklrePTvUNVrSpt4r2exFYXNMPeA8V0zCrc3Kzs1SZw3jWkG3i53te9onCp85DqyatxOD2pyZ30/gPn1ZUg40WowlFM8gsUFMZqaH7ax6d8nsBKW7N/cRyqesiOQEV9up3tnKjIB8XMTVvC5X4rBWgywz7AFxSv8mmaTHnUgVW4LgMPwnTWo0pxtiIWbeMLyrEE4hIM74gSwp6CRQYo6xnG3fn4yWkcK2X2mT9adQ241IDdwpENJHcry/T6AJ8dNXduEZ67egnk+rVlQ2HM4LpymAv9DAAFFeaQK0hT+3aMDoumV"
106
+ rawKeyBody := api.CreateKeyOption {
107
+ Title : "test-key" ,
108
+ Key : keyType + " " + keyContent ,
109
+ }
110
+ req := NewRequestWithJSON (t , "POST" , keysURL , rawKeyBody )
111
+ resp := session .MakeRequest (t , req , http .StatusCreated )
112
+
113
+ var newPublicKey api.PublicKey
114
+ DecodeJSON (t , resp , & newPublicKey )
115
+ models .AssertExistsAndLoadBean (t , & models.PublicKey {
116
+ ID : newPublicKey .ID ,
117
+ OwnerID : user .ID ,
118
+ Name : rawKeyBody .Title ,
119
+ Content : rawKeyBody .Key ,
120
+ Mode : models .AccessModeWrite ,
121
+ })
122
+
123
+ // Search by fingerprint
124
+ fingerprintURL := fmt .Sprintf ("/api/v1/user/keys?token=%s&fingerprint=%s" , token , newPublicKey .Fingerprint )
125
+
126
+ req = NewRequest (t , "GET" , fingerprintURL )
127
+ resp = session .MakeRequest (t , req , http .StatusOK )
128
+
129
+ var fingerprintPublicKeys []api.PublicKey
130
+ DecodeJSON (t , resp , & fingerprintPublicKeys )
131
+ assert .Equal (t , newPublicKey .Fingerprint , fingerprintPublicKeys [0 ].Fingerprint )
132
+ assert .Equal (t , newPublicKey .ID , fingerprintPublicKeys [0 ].ID )
133
+ assert .Equal (t , user .ID , fingerprintPublicKeys [0 ].Owner .ID )
134
+
135
+ fingerprintURL = fmt .Sprintf ("/api/v1/users/%s/keys?token=%s&fingerprint=%s" , user .Name , token , newPublicKey .Fingerprint )
136
+
137
+ req = NewRequest (t , "GET" , fingerprintURL )
138
+ resp = session .MakeRequest (t , req , http .StatusOK )
139
+
140
+ DecodeJSON (t , resp , & fingerprintPublicKeys )
141
+ assert .Equal (t , newPublicKey .Fingerprint , fingerprintPublicKeys [0 ].Fingerprint )
142
+ assert .Equal (t , newPublicKey .ID , fingerprintPublicKeys [0 ].ID )
143
+ assert .Equal (t , user .ID , fingerprintPublicKeys [0 ].Owner .ID )
144
+
145
+ // Fail search by fingerprint
146
+ fingerprintURL = fmt .Sprintf ("/api/v1/user/keys?token=%s&fingerprint=%sA" , token , newPublicKey .Fingerprint )
147
+
148
+ req = NewRequest (t , "GET" , fingerprintURL )
149
+ resp = session .MakeRequest (t , req , http .StatusOK )
150
+
151
+ DecodeJSON (t , resp , & fingerprintPublicKeys )
152
+ assert .Len (t , fingerprintPublicKeys , 0 )
153
+
154
+ // Fail searching for wrong users key
155
+ fingerprintURL = fmt .Sprintf ("/api/v1/users/%s/keys?token=%s&fingerprint=%s" , "user2" , token , newPublicKey .Fingerprint )
156
+ req = NewRequest (t , "GET" , fingerprintURL )
157
+ resp = session .MakeRequest (t , req , http .StatusOK )
158
+
159
+ DecodeJSON (t , resp , & fingerprintPublicKeys )
160
+ assert .Len (t , fingerprintPublicKeys , 0 )
161
+
162
+ // Now login as user 2
163
+ session2 := loginUser (t , "user2" )
164
+ token2 := url .QueryEscape (getTokenForLoggedInUser (t , session2 ))
165
+
166
+ // Should find key even though not ours, but we shouldn't know whose it is
167
+ fingerprintURL = fmt .Sprintf ("/api/v1/user/keys?token=%s&fingerprint=%s" , token2 , newPublicKey .Fingerprint )
168
+ req = NewRequest (t , "GET" , fingerprintURL )
169
+ resp = session .MakeRequest (t , req , http .StatusOK )
170
+
171
+ DecodeJSON (t , resp , & fingerprintPublicKeys )
172
+ assert .Equal (t , newPublicKey .Fingerprint , fingerprintPublicKeys [0 ].Fingerprint )
173
+ assert .Equal (t , newPublicKey .ID , fingerprintPublicKeys [0 ].ID )
174
+ assert .Nil (t , fingerprintPublicKeys [0 ].Owner )
175
+
176
+ // Should find key even though not ours, but we shouldn't know whose it is
177
+ fingerprintURL = fmt .Sprintf ("/api/v1/users/%s/keys?token=%s&fingerprint=%s" , user .Name , token2 , newPublicKey .Fingerprint )
178
+
179
+ req = NewRequest (t , "GET" , fingerprintURL )
180
+ resp = session .MakeRequest (t , req , http .StatusOK )
181
+
182
+ DecodeJSON (t , resp , & fingerprintPublicKeys )
183
+ assert .Equal (t , newPublicKey .Fingerprint , fingerprintPublicKeys [0 ].Fingerprint )
184
+ assert .Equal (t , newPublicKey .ID , fingerprintPublicKeys [0 ].ID )
185
+ assert .Nil (t , fingerprintPublicKeys [0 ].Owner )
186
+
187
+ // Fail when searching for key if it is not ours
188
+ fingerprintURL = fmt .Sprintf ("/api/v1/users/%s/keys?token=%s&fingerprint=%s" , "user2" , token2 , newPublicKey .Fingerprint )
189
+ req = NewRequest (t , "GET" , fingerprintURL )
190
+ resp = session .MakeRequest (t , req , http .StatusOK )
191
+
192
+ DecodeJSON (t , resp , & fingerprintPublicKeys )
193
+ assert .Len (t , fingerprintPublicKeys , 0 )
194
+ }
0 commit comments