Skip to content

Commit

Permalink
Merge pull request #1686 from ErKiran/master
Browse files Browse the repository at this point in the history
feat: Add support for getting a single personal access token
  • Loading branch information
svanharmelen committed Apr 10, 2023
2 parents 04bb121 + 851ee9b commit 7b93c5c
Show file tree
Hide file tree
Showing 5 changed files with 143 additions and 18 deletions.
41 changes: 41 additions & 0 deletions personal_access_tokens.go
Expand Up @@ -79,6 +79,47 @@ func (s *PersonalAccessTokensService) ListPersonalAccessTokens(opt *ListPersonal
return pats, resp, err
}

// GetSinglePersonalAccessTokenByID get a single personal access token by its ID.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/personal_access_tokens.html#using-a-personal-access-token-id
func (s *PersonalAccessTokensService) GetSinglePersonalAccessTokenByID(user int, options ...RequestOptionFunc) (*PersonalAccessToken, *Response, error) {
u := fmt.Sprintf("personal_access_tokens/%d", user)
req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
if err != nil {
return nil, nil, err
}

pat := new(PersonalAccessToken)
resp, err := s.client.Do(req, pat)
if err != nil {
return nil, resp, err
}

return pat, resp, err
}

// GetSinglePersonalAccessToken get a single personal access token by using
// passing the token in a header.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/personal_access_tokens.html#using-a-request-header
func (s *PersonalAccessTokensService) GetSinglePersonalAccessToken(options ...RequestOptionFunc) (*PersonalAccessToken, *Response, error) {
u := "personal_access_tokens/self"
req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
if err != nil {
return nil, nil, err
}

pat := new(PersonalAccessToken)
resp, err := s.client.Do(req, pat)
if err != nil {
return nil, resp, err
}

return pat, resp, err
}

// RevokePersonalAccessToken revokes a personal access token.
//
// GitLab API docs:
Expand Down
80 changes: 79 additions & 1 deletion personal_access_tokens_test.go
Expand Up @@ -147,7 +147,85 @@ func TestListPersonalAccessTokensNoUserFilter(t *testing.T) {
}
}

func TestDeletePersonalAccessToken(t *testing.T) {
func TestGetSinglePersonalAccessTokenByID(t *testing.T) {
mux, client := setup(t)

mux.HandleFunc("/api/v4/personal_access_tokens/1", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodGet)
mustWriteHTTPResponse(t, w, "testdata/list_personal_access_tokens_single.json")
})

token, _, err := client.PersonalAccessTokens.GetSinglePersonalAccessTokenByID(1)
if err != nil {
t.Errorf("PersonalAccessTokens.RevokePersonalAccessToken returned error: %v", err)
}

createdAt, err := time.Parse(time.RFC3339, "2020-07-23T14:31:47.729Z")
if err != nil {
t.Errorf("PersonalAccessTokens.ListPersonalAccessTokens returned error: %v", err)
}

lastUsedAt, err := time.Parse(time.RFC3339, "2021-10-06T17:58:37.550Z")
if err != nil {
t.Errorf("PersonalAccessTokens.ListPersonalAccessTokens returned error: %v", err)
}

want := &PersonalAccessToken{
ID: 1,
Name: "Test Token",
Revoked: false,
CreatedAt: &createdAt,
Scopes: []string{"api"},
UserID: 1,
LastUsedAt: &lastUsedAt,
Active: true,
}

if !reflect.DeepEqual(want, token) {
t.Errorf("PersonalAccessTokens.ListPersonalAccessTokens returned %+v, want %+v", token, want)
}
}

func TestGetSinglePersonalAccessToken(t *testing.T) {
mux, client := setup(t)

mux.HandleFunc("/api/v4/personal_access_tokens/self", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodGet)
mustWriteHTTPResponse(t, w, "testdata/list_personal_access_tokens_single.json")
})

token, _, err := client.PersonalAccessTokens.GetSinglePersonalAccessToken()
if err != nil {
t.Errorf("PersonalAccessTokens.RevokePersonalAccessToken returned error: %v", err)
}

createdAt, err := time.Parse(time.RFC3339, "2020-07-23T14:31:47.729Z")
if err != nil {
t.Errorf("PersonalAccessTokens.ListPersonalAccessTokens returned error: %v", err)
}

lastUsedAt, err := time.Parse(time.RFC3339, "2021-10-06T17:58:37.550Z")
if err != nil {
t.Errorf("PersonalAccessTokens.ListPersonalAccessTokens returned error: %v", err)
}

want := &PersonalAccessToken{
ID: 1,
Name: "Test Token",
Revoked: false,
CreatedAt: &createdAt,
Scopes: []string{"api"},
UserID: 1,
LastUsedAt: &lastUsedAt,
Active: true,
}

if !reflect.DeepEqual(want, token) {
t.Errorf("PersonalAccessTokens.ListPersonalAccessTokens returned %+v, want %+v", token, want)
}
}

func TestRevokePersonalAccessToken(t *testing.T) {
mux, client := setup(t)

mux.HandleFunc("/api/v4/personal_access_tokens/1", func(w http.ResponseWriter, r *http.Request) {
Expand Down
11 changes: 11 additions & 0 deletions testdata/list_personal_access_tokens_single.json
@@ -0,0 +1,11 @@
{
"id": 1,
"name": "Test Token",
"revoked": false,
"created_at": "2020-07-23T14:31:47.729Z",
"scopes": ["api"],
"user_id": 1,
"last_used_at": "2021-10-06T17:58:37.550Z",
"active": true,
"expires_at": null
}
9 changes: 2 additions & 7 deletions testdata/list_personal_access_tokens_with_user_filter.json
Expand Up @@ -4,9 +4,7 @@
"name": "test 1",
"revoked": true,
"created_at": "2020-02-20T14:58:56.238Z",
"scopes": [
"api"
],
"scopes": ["api"],
"user_id": 1,
"last_used_at": "2021-04-20T16:31:39.105Z",
"active": false,
Expand All @@ -17,10 +15,7 @@
"name": "test 2",
"revoked": false,
"created_at": "2022-03-20T03:56:18.968Z",
"scopes": [
"api",
"read_user"
],
"scopes": ["api", "read_user"],
"user_id": 1,
"last_used_at": null,
"active": false,
Expand Down
20 changes: 10 additions & 10 deletions testdata/list_project_feature_flags.json
@@ -1,12 +1,12 @@
[
{
"name":"merge_train",
"description":"This feature is about merge train",
"name": "merge_train",
"description": "This feature is about merge train",
"active": true,
"version": "new_version_flag",
"created_at":"2019-11-04T08:13:51Z",
"updated_at":"2019-11-04T08:13:11Z",
"scopes":[],
"created_at": "2019-11-04T08:13:51Z",
"updated_at": "2019-11-04T08:13:11Z",
"scopes": [],
"strategies": [
{
"id": 1,
Expand All @@ -24,13 +24,13 @@
]
},
{
"name":"new_live_trace",
"description":"This is a new live trace feature",
"name": "new_live_trace",
"description": "This is a new live trace feature",
"active": true,
"version": "new_version_flag",
"created_at":"2019-11-04T08:13:10Z",
"updated_at":"2019-11-04T08:13:10Z",
"scopes":[],
"created_at": "2019-11-04T08:13:10Z",
"updated_at": "2019-11-04T08:13:10Z",
"scopes": [],
"strategies": [
{
"id": 2,
Expand Down

0 comments on commit 7b93c5c

Please sign in to comment.