summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorEvan Tobin <me@evantob.in>2023-10-14 03:04:44 -0500
committerGitHub <noreply@github.com>2023-10-14 08:04:44 +0000
commitae419fa49403537725c806a5f3f1e5b274f52eb7 (patch)
tree695da5e5638712d6ee7ce589059953bff87acc66 /tests
parentc6c829fe3fde5d55b2115eb006b427288e381158 (diff)
downloadgitea-ae419fa49403537725c806a5f3f1e5b274f52eb7.tar.gz
gitea-ae419fa49403537725c806a5f3f1e5b274f52eb7.zip
Fix permissions for Token DELETE endpoint to match GET and POST (#27610)
Fixes #27598 In #27080, the logic for the tokens endpoints were updated to allow admins to create and view tokens in other accounts. However, the same functionality was not added to the DELETE endpoint. This PR makes the DELETE endpoint function the same as the other token endpoints and adds unit tests
Diffstat (limited to 'tests')
-rw-r--r--tests/integration/api_token_test.go31
1 files changed, 29 insertions, 2 deletions
diff --git a/tests/integration/api_token_test.go b/tests/integration/api_token_test.go
index fe0e44d97f..e28d9a372f 100644
--- a/tests/integration/api_token_test.go
+++ b/tests/integration/api_token_test.go
@@ -63,6 +63,33 @@ func TestAPIGetTokensPermission(t *testing.T) {
MakeRequest(t, req, http.StatusForbidden)
}
+// TestAPIDeleteTokensPermission ensures that only the admin can delete tokens from other users
+func TestAPIDeleteTokensPermission(t *testing.T) {
+ defer tests.PrepareTestEnv(t)()
+
+ admin := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
+ user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
+ user4 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4})
+
+ // admin can delete tokens for other users
+ createAPIAccessTokenWithoutCleanUp(t, "test-key-1", user2, nil)
+ req := NewRequestf(t, "DELETE", "/api/v1/users/"+user2.LoginName+"/tokens/test-key-1")
+ req = AddBasicAuthHeader(req, admin.Name)
+ MakeRequest(t, req, http.StatusNoContent)
+
+ // non-admin can delete tokens for himself
+ createAPIAccessTokenWithoutCleanUp(t, "test-key-2", user2, nil)
+ req = NewRequestf(t, "DELETE", "/api/v1/users/"+user2.LoginName+"/tokens/test-key-2")
+ req = AddBasicAuthHeader(req, user2.Name)
+ MakeRequest(t, req, http.StatusNoContent)
+
+ // non-admin can't delete tokens for other users
+ createAPIAccessTokenWithoutCleanUp(t, "test-key-3", user2, nil)
+ req = NewRequestf(t, "DELETE", "/api/v1/users/"+user2.LoginName+"/tokens/test-key-3")
+ req = AddBasicAuthHeader(req, user4.Name)
+ MakeRequest(t, req, http.StatusForbidden)
+}
+
type permission struct {
category auth_model.AccessTokenScopeCategory
level auth_model.AccessTokenScopeLevel
@@ -525,7 +552,7 @@ func createAPIAccessTokenWithoutCleanUp(t *testing.T, tokenName string, user *us
}
}
log.Debug("Requesting creation of token with scopes: %v", scopes)
- req := NewRequestWithJSON(t, "POST", "/api/v1/users/user1/tokens", payload)
+ req := NewRequestWithJSON(t, "POST", "/api/v1/users/"+user.LoginName+"/tokens", payload)
req = AddBasicAuthHeader(req, user.Name)
resp := MakeRequest(t, req, http.StatusCreated)
@@ -545,7 +572,7 @@ func createAPIAccessTokenWithoutCleanUp(t *testing.T, tokenName string, user *us
// createAPIAccessTokenWithoutCleanUp Delete an API access token and assert that
// deletion succeeded.
func deleteAPIAccessToken(t *testing.T, accessToken api.AccessToken, user *user_model.User) {
- req := NewRequestf(t, "DELETE", "/api/v1/users/user1/tokens/%d", accessToken.ID)
+ req := NewRequestf(t, "DELETE", "/api/v1/users/"+user.LoginName+"/tokens/%d", accessToken.ID)
req = AddBasicAuthHeader(req, user.Name)
MakeRequest(t, req, http.StatusNoContent)