From 4638eda9198363948bd56412137cbf5168358089 Mon Sep 17 00:00:00 2001 From: tobi Date: Mon, 3 Mar 2025 16:11:45 +0100 Subject: [PATCH] [feature] Add token review / delete to backend + settings panel --- docs/api/swagger.yaml | 149 ++++++++++++ .../public/user-settings-access-tokens.png | Bin 0 -> 211974 bytes docs/user_guide/settings.md | 18 ++ internal/api/client.go | 4 + internal/api/client/tokens/tokenget.go | 98 ++++++++ internal/api/client/tokens/tokenget_test.go | 78 +++++++ internal/api/client/tokens/tokeninvalidate.go | 103 +++++++++ .../api/client/tokens/tokeninvalidate_test.go | 87 +++++++ internal/api/client/tokens/tokens.go | 48 ++++ internal/api/client/tokens/tokens_test.go | 117 ++++++++++ internal/api/client/tokens/tokensget.go | 144 ++++++++++++ internal/api/client/tokens/tokensget_test.go | 69 ++++++ internal/api/model/token.go | 22 ++ internal/db/application.go | 4 + internal/db/bundb/application.go | 102 +++++++++ internal/processing/account/tokens.go | 122 ++++++++++ internal/typeutils/internaltofrontend.go | 36 +++ web/source/settings/lib/query/gts-api.ts | 3 +- web/source/settings/lib/query/user/tokens.ts | 73 ++++++ web/source/settings/lib/types/tokeninfo.ts | 62 +++++ web/source/settings/style.css | 27 +++ web/source/settings/views/user/menu.tsx | 5 + web/source/settings/views/user/router.tsx | 3 + .../settings/views/user/tokens/index.tsx | 50 ++++ .../settings/views/user/tokens/search.tsx | 214 ++++++++++++++++++ 25 files changed, 1637 insertions(+), 1 deletion(-) create mode 100644 docs/overrides/public/user-settings-access-tokens.png create mode 100644 internal/api/client/tokens/tokenget.go create mode 100644 internal/api/client/tokens/tokenget_test.go create mode 100644 internal/api/client/tokens/tokeninvalidate.go create mode 100644 internal/api/client/tokens/tokeninvalidate_test.go create mode 100644 internal/api/client/tokens/tokens.go create mode 100644 internal/api/client/tokens/tokens_test.go create mode 100644 internal/api/client/tokens/tokensget.go create mode 100644 internal/api/client/tokens/tokensget_test.go create mode 100644 internal/processing/account/tokens.go create mode 100644 web/source/settings/lib/query/user/tokens.ts create mode 100644 web/source/settings/lib/types/tokeninfo.ts create mode 100644 web/source/settings/views/user/tokens/index.tsx create mode 100644 web/source/settings/views/user/tokens/search.tsx diff --git a/docs/api/swagger.yaml b/docs/api/swagger.yaml index c8b263afe..25b23770c 100644 --- a/docs/api/swagger.yaml +++ b/docs/api/swagger.yaml @@ -3369,6 +3369,37 @@ definitions: type: object x-go-name: ThreadContext x-go-package: github.com/superseriousbusiness/gotosocial/internal/api/model + tokenInfo: + description: The actual access token itself will never be sent via the API. + properties: + application: + $ref: '#/definitions/application' + created_at: + description: When the token was created (ISO 8601 Datetime). + example: "2021-07-30T09:20:25+00:00" + type: string + x-go-name: CreatedAt + id: + description: Database ID of this token. + example: 01JMW7QBAZYZ8T8H73PCEX12XG + type: string + x-go-name: ID + last_used: + description: |- + Approximate time (accurate to within an hour) when the token was last used (ISO 8601 Datetime). + Omitted if token has never been used, or it is not known when it was last used (eg., it was last used before tracking "last_used" became a thing). + example: "2021-07-30T09:20:25+00:00" + type: string + x-go-name: LastUsed + scope: + description: OAuth scopes granted by the token, space-separated. + example: read write admin + type: string + x-go-name: Scope + title: TokenInfo represents metadata about one user-level access token. + type: object + x-go-name: TokenInfo + x-go-package: github.com/superseriousbusiness/gotosocial/internal/api/model user: properties: admin: @@ -11642,6 +11673,124 @@ paths: summary: See public statuses that use the given hashtag (case insensitive). tags: - timelines + /api/v1/tokens: + get: + description: |- + The items will be returned in descending chronological order (newest first), with sequential IDs (bigger = newer). + + The returned Link header can be used to generate the previous and next queries when paging up or down. + + Example: + + ``` + ; rel="next", ; rel="prev" + ```` + operationId: tokensInfoGet + parameters: + - description: Return only items *OLDER* than the given max status ID. The item with the specified ID will not be included in the response. + in: query + name: max_id + type: string + - description: Return only items *newer* than the given since status ID. The item with the specified ID will not be included in the response. + in: query + name: since_id + type: string + - description: Return only items *immediately newer* than the given since status ID. The item with the specified ID will not be included in the response. + in: query + name: min_id + type: string + - default: 20 + description: Number of items to return. + in: query + name: limit + type: integer + produces: + - application/json + responses: + "200": + description: Array of token info entries. + headers: + Link: + description: Links to the next and previous queries. + type: string + schema: + items: + $ref: '#/definitions/tokenInfo' + type: array + "400": + description: bad request + "401": + description: unauthorized + security: + - OAuth2 Bearer: + - read:accounts + summary: See info about tokens created for/by your account. + tags: + - tokens + /api/v1/tokens/{id}: + get: + operationId: tokenInfoGet + parameters: + - description: The id of the requested token. + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: The requested token. + schema: + $ref: '#/definitions/tokenInfo' + "400": + description: bad request + "401": + description: unauthorized + "404": + description: not found + "406": + description: not acceptable + "500": + description: internal server error + security: + - OAuth2 Bearer: + - read:accounts + summary: Get information about a single token. + tags: + - tokens + /api/v1/tokens/{id}/invalidate: + post: + operationId: tokenInvalidatePost + parameters: + - description: The id of the target token. + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: Info about the invalidated token. + schema: + $ref: '#/definitions/tokenInfo' + "400": + description: bad request + "401": + description: unauthorized + "404": + description: not found + "406": + description: not acceptable + "500": + description: internal server error + security: + - OAuth2 Bearer: + - write:accounts + summary: Invalidate the target token, removing it from the database and making it unusable. + tags: + - tokens /api/v1/user: get: operationId: getUser diff --git a/docs/overrides/public/user-settings-access-tokens.png b/docs/overrides/public/user-settings-access-tokens.png new file mode 100644 index 0000000000000000000000000000000000000000..a710bdd2367b306826069fb2a79748ab669f604c GIT binary patch literal 211974 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∋j7$}ExzXq;K+2f73M_cc^r^D1J7qc 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. + +package tokens + +import ( + "net/http" + + "github.com/gin-gonic/gin" + apiutil "github.com/superseriousbusiness/gotosocial/internal/api/util" + "github.com/superseriousbusiness/gotosocial/internal/gtserror" +) + +// TokenInfoGETHandler swagger:operation GET /api/v1/tokens/{id} tokenInfoGet +// +// Get information about a single token. +// +// --- +// tags: +// - tokens +// +// produces: +// - application/json +// +// parameters: +// - +// name: id +// type: string +// description: The id of the requested token. +// in: path +// required: true +// +// security: +// - OAuth2 Bearer: +// - read:accounts +// +// responses: +// '200': +// description: The requested token. +// schema: +// "$ref": "#/definitions/tokenInfo" +// '400': +// description: bad request +// '401': +// description: unauthorized +// '404': +// description: not found +// '406': +// description: not acceptable +// '500': +// description: internal server error +func (m *Module) TokenInfoGETHandler(c *gin.Context) { + authed, errWithCode := apiutil.TokenAuth(c, + true, true, true, true, + apiutil.ScopeReadAccounts, + ) + if errWithCode != nil { + apiutil.ErrorHandler(c, errWithCode, m.processor.InstanceGetV1) + return + } + + if _, err := apiutil.NegotiateAccept(c, apiutil.JSONAcceptHeaders...); err != nil { + apiutil.ErrorHandler(c, gtserror.NewErrorNotAcceptable(err, err.Error()), m.processor.InstanceGetV1) + return + } + + tokenID, errWithCode := apiutil.ParseID(c.Param(apiutil.IDKey)) + if errWithCode != nil { + apiutil.ErrorHandler(c, errWithCode, m.processor.InstanceGetV1) + return + } + + tokenInfo, errWithCode := m.processor.Account().TokenGet( + c.Request.Context(), + authed.User.ID, + tokenID, + ) + if errWithCode != nil { + apiutil.ErrorHandler(c, errWithCode, m.processor.InstanceGetV1) + return + } + + apiutil.JSON(c, http.StatusOK, tokenInfo) +} diff --git a/internal/api/client/tokens/tokenget_test.go b/internal/api/client/tokens/tokenget_test.go new file mode 100644 index 000000000..c7cbf3022 --- /dev/null +++ b/internal/api/client/tokens/tokenget_test.go @@ -0,0 +1,78 @@ +// GoToSocial +// Copyright (C) GoToSocial Authors admin@gotosocial.org +// SPDX-License-Identifier: AGPL-3.0-or-later +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package tokens_test + +import ( + "net/http" + "testing" + + "github.com/stretchr/testify/suite" + "github.com/superseriousbusiness/gotosocial/internal/api/client/tokens" +) + +type TokenGetTestSuite struct { + TokensStandardTestSuite +} + +func (suite *TokenGetTestSuite) TestTokenGet() { + var ( + testToken = suite.testTokens["local_account_1"] + testPath = "/api" + tokens.BasePath + "/" + testToken.ID + ) + + out, code := suite.req( + http.MethodGet, + testPath, + suite.tokens.TokenInfoGETHandler, + map[string]string{"id": testToken.ID}, + ) + + suite.Equal(http.StatusOK, code) + suite.Equal(`{ + "id": "01F8MGTQW4DKTDF8SW5CT9HYGA", + "created_at": "2021-06-20T10:53:00.164Z", + "scope": "read write push", + "application": { + "name": "really cool gts application", + "website": "https://reallycool.app" + } +}`, out) +} + +func (suite *TokenGetTestSuite) TestTokenGetNotOurs() { + var ( + testToken = suite.testTokens["admin_account"] + testPath = "/api" + tokens.BasePath + "/" + testToken.ID + ) + + out, code := suite.req( + http.MethodGet, + testPath, + suite.tokens.TokenInfoGETHandler, + map[string]string{"id": testToken.ID}, + ) + + suite.Equal(http.StatusNotFound, code) + suite.Equal(`{ + "error": "Not Found" +}`, out) +} + +func TestTokenGetTestSuite(t *testing.T) { + suite.Run(t, new(TokenGetTestSuite)) +} diff --git a/internal/api/client/tokens/tokeninvalidate.go b/internal/api/client/tokens/tokeninvalidate.go new file mode 100644 index 000000000..192bbf33b --- /dev/null +++ b/internal/api/client/tokens/tokeninvalidate.go @@ -0,0 +1,103 @@ +// GoToSocial +// Copyright (C) GoToSocial Authors admin@gotosocial.org +// SPDX-License-Identifier: AGPL-3.0-or-later +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package tokens + +import ( + "net/http" + + "github.com/gin-gonic/gin" + apiutil "github.com/superseriousbusiness/gotosocial/internal/api/util" + "github.com/superseriousbusiness/gotosocial/internal/gtserror" +) + +// TokenInvalidatePOSTHandler swagger:operation POST /api/v1/tokens/{id}/invalidate tokenInvalidatePost +// +// Invalidate the target token, removing it from the database and making it unusable. +// +// --- +// tags: +// - tokens +// +// produces: +// - application/json +// +// parameters: +// - +// name: id +// type: string +// description: The id of the target token. +// in: path +// required: true +// +// security: +// - OAuth2 Bearer: +// - write:accounts +// +// responses: +// '200': +// description: Info about the invalidated token. +// schema: +// "$ref": "#/definitions/tokenInfo" +// '400': +// description: bad request +// '401': +// description: unauthorized +// '404': +// description: not found +// '406': +// description: not acceptable +// '500': +// description: internal server error +func (m *Module) TokenInvalidatePOSTHandler(c *gin.Context) { + authed, errWithCode := apiutil.TokenAuth(c, + true, true, true, true, + apiutil.ScopeWriteAccounts, + ) + if errWithCode != nil { + apiutil.ErrorHandler(c, errWithCode, m.processor.InstanceGetV1) + return + } + + if authed.Account.IsMoving() { + apiutil.ForbiddenAfterMove(c) + return + } + + if _, err := apiutil.NegotiateAccept(c, apiutil.JSONAcceptHeaders...); err != nil { + apiutil.ErrorHandler(c, gtserror.NewErrorNotAcceptable(err, err.Error()), m.processor.InstanceGetV1) + return + } + + tokenID, errWithCode := apiutil.ParseID(c.Param(apiutil.IDKey)) + if errWithCode != nil { + apiutil.ErrorHandler(c, errWithCode, m.processor.InstanceGetV1) + return + } + + tokenInfo, errWithCode := m.processor.Account().TokenInvalidate( + c.Request.Context(), + authed.User.ID, + tokenID, + ) + if errWithCode != nil { + apiutil.ErrorHandler(c, errWithCode, m.processor.InstanceGetV1) + return + } + + apiutil.JSON(c, http.StatusOK, tokenInfo) +} diff --git a/internal/api/client/tokens/tokeninvalidate_test.go b/internal/api/client/tokens/tokeninvalidate_test.go new file mode 100644 index 000000000..281f9b96d --- /dev/null +++ b/internal/api/client/tokens/tokeninvalidate_test.go @@ -0,0 +1,87 @@ +// GoToSocial +// Copyright (C) GoToSocial Authors admin@gotosocial.org +// SPDX-License-Identifier: AGPL-3.0-or-later +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package tokens_test + +import ( + "context" + "net/http" + "testing" + + "github.com/stretchr/testify/suite" + "github.com/superseriousbusiness/gotosocial/internal/api/client/tokens" + "github.com/superseriousbusiness/gotosocial/internal/db" +) + +type TokenInvalidateTestSuite struct { + TokensStandardTestSuite +} + +func (suite *TokenInvalidateTestSuite) TestTokenInvalidate() { + var ( + testToken = suite.testTokens["local_account_1"] + testPath = "/api" + tokens.BasePath + "/" + testToken.ID + "/invalidate" + ) + + out, code := suite.req( + http.MethodPost, + testPath, + suite.tokens.TokenInvalidatePOSTHandler, + map[string]string{"id": testToken.ID}, + ) + + suite.Equal(http.StatusOK, code) + suite.Equal(`{ + "id": "01F8MGTQW4DKTDF8SW5CT9HYGA", + "created_at": "2021-06-20T10:53:00.164Z", + "scope": "read write push", + "application": { + "name": "really cool gts application", + "website": "https://reallycool.app" + } +}`, out) + + // Check database for token we + // just invalidated, should be gone. + _, err := suite.testStructs.State.DB.GetTokenByID( + context.Background(), testToken.ID, + ) + suite.ErrorIs(err, db.ErrNoEntries) +} + +func (suite *TokenInvalidateTestSuite) TestTokenInvalidateNotOurs() { + var ( + testToken = suite.testTokens["admin_account"] + testPath = "/api" + tokens.BasePath + "/" + testToken.ID + "/invalidate" + ) + + out, code := suite.req( + http.MethodGet, + testPath, + suite.tokens.TokenInfoGETHandler, + map[string]string{"id": testToken.ID}, + ) + + suite.Equal(http.StatusNotFound, code) + suite.Equal(`{ + "error": "Not Found" +}`, out) +} + +func TestTokenInvalidateTestSuite(t *testing.T) { + suite.Run(t, new(TokenInvalidateTestSuite)) +} diff --git a/internal/api/client/tokens/tokens.go b/internal/api/client/tokens/tokens.go new file mode 100644 index 000000000..ce00a6459 --- /dev/null +++ b/internal/api/client/tokens/tokens.go @@ -0,0 +1,48 @@ +// GoToSocial +// Copyright (C) GoToSocial Authors admin@gotosocial.org +// SPDX-License-Identifier: AGPL-3.0-or-later +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package tokens + +import ( + "net/http" + + "github.com/gin-gonic/gin" + apiutil "github.com/superseriousbusiness/gotosocial/internal/api/util" + "github.com/superseriousbusiness/gotosocial/internal/processing" +) + +const ( + BasePath = "/v1/tokens" + BasePathWithID = BasePath + "/:" + apiutil.IDKey + InvalidateTokenPath = BasePathWithID + "/invalidate" +) + +type Module struct { + processor *processing.Processor +} + +func New(processor *processing.Processor) *Module { + return &Module{ + processor: processor, + } +} + +func (m *Module) Route(attachHandler func(method string, path string, f ...gin.HandlerFunc) gin.IRoutes) { + attachHandler(http.MethodGet, BasePath, m.TokensInfoGETHandler) + attachHandler(http.MethodGet, BasePathWithID, m.TokensInfoGETHandler) + attachHandler(http.MethodPost, InvalidateTokenPath, m.TokenInvalidatePOSTHandler) +} diff --git a/internal/api/client/tokens/tokens_test.go b/internal/api/client/tokens/tokens_test.go new file mode 100644 index 000000000..bae140194 --- /dev/null +++ b/internal/api/client/tokens/tokens_test.go @@ -0,0 +1,117 @@ +// GoToSocial +// Copyright (C) GoToSocial Authors admin@gotosocial.org +// SPDX-License-Identifier: AGPL-3.0-or-later +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package tokens_test + +import ( + "bytes" + "encoding/json" + "io" + "net/http/httptest" + + "github.com/gin-gonic/gin" + "github.com/stretchr/testify/suite" + "github.com/superseriousbusiness/gotosocial/internal/api/client/tokens" + "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" + "github.com/superseriousbusiness/gotosocial/internal/oauth" + "github.com/superseriousbusiness/gotosocial/testrig" +) + +type TokensStandardTestSuite struct { + suite.Suite + + // standard suite models + testTokens map[string]*gtsmodel.Token + testApplications map[string]*gtsmodel.Application + testUsers map[string]*gtsmodel.User + testAccounts map[string]*gtsmodel.Account + testStructs *testrig.TestStructs + + // module being tested + tokens *tokens.Module +} + +func (suite *TokensStandardTestSuite) req( + httpMethod string, + requestPath string, + handler gin.HandlerFunc, + pathParams map[string]string, +) (string, int) { + var ( + recorder = httptest.NewRecorder() + ctx, _ = testrig.CreateGinTestContext(recorder, nil) + ) + + // Prepare test context. + ctx.Set(oauth.SessionAuthorizedAccount, suite.testAccounts["local_account_1"]) + ctx.Set(oauth.SessionAuthorizedToken, oauth.DBTokenToToken(suite.testTokens["local_account_1"])) + ctx.Set(oauth.SessionAuthorizedApplication, suite.testApplications["application_1"]) + ctx.Set(oauth.SessionAuthorizedUser, suite.testUsers["local_account_1"]) + + // Prepare test context request. + request := httptest.NewRequest(httpMethod, requestPath, nil) + request.Header.Set("accept", "application/json") + ctx.Request = request + + // Inject path parameters. + if pathParams != nil { + for k, v := range pathParams { + ctx.AddParam(k, v) + } + } + + // Trigger the handler + handler(ctx) + + // Read the response + result := recorder.Result() + defer result.Body.Close() + b, err := io.ReadAll(result.Body) + if err != nil { + suite.FailNow(err.Error()) + } + + // Format as nice indented json. + dst := &bytes.Buffer{} + if err := json.Indent(dst, b, "", " "); err != nil { + suite.FailNow(err.Error()) + } + + return dst.String(), recorder.Code +} + +func (suite *TokensStandardTestSuite) SetupSuite() { + testrig.InitTestConfig() + testrig.InitTestLog() + + suite.testTokens = testrig.NewTestTokens() + suite.testApplications = testrig.NewTestApplications() + suite.testUsers = testrig.NewTestUsers() + suite.testAccounts = testrig.NewTestAccounts() +} + +func (suite *TokensStandardTestSuite) SetupTest() { + suite.testStructs = testrig.SetupTestStructs( + "../../../../testrig/media", + "../../../../web/template", + ) + suite.tokens = tokens.New(suite.testStructs.Processor) +} + +func (suite *TokensStandardTestSuite) TearDownTest() { + testrig.TearDownTestStructs(suite.testStructs) +} diff --git a/internal/api/client/tokens/tokensget.go b/internal/api/client/tokens/tokensget.go new file mode 100644 index 000000000..2ffc2afb9 --- /dev/null +++ b/internal/api/client/tokens/tokensget.go @@ -0,0 +1,144 @@ +// GoToSocial +// Copyright (C) GoToSocial Authors admin@gotosocial.org +// SPDX-License-Identifier: AGPL-3.0-or-later +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package tokens + +import ( + "net/http" + + "github.com/gin-gonic/gin" + apiutil "github.com/superseriousbusiness/gotosocial/internal/api/util" + "github.com/superseriousbusiness/gotosocial/internal/gtserror" + "github.com/superseriousbusiness/gotosocial/internal/paging" +) + +// TokensInfoGETHandler swagger:operation GET /api/v1/tokens tokensInfoGet +// +// See info about tokens created for/by your account. +// +// The items will be returned in descending chronological order (newest first), with sequential IDs (bigger = newer). +// +// The returned Link header can be used to generate the previous and next queries when paging up or down. +// +// Example: +// +// ``` +// ; rel="next", ; rel="prev" +// ```` +// +// --- +// tags: +// - tokens +// +// produces: +// - application/json +// +// parameters: +// - +// name: max_id +// type: string +// description: >- +// Return only items *OLDER* than the given max status ID. +// The item with the specified ID will not be included in the response. +// in: query +// required: false +// - +// name: since_id +// type: string +// description: >- +// Return only items *newer* than the given since status ID. +// The item with the specified ID will not be included in the response. +// in: query +// - +// name: min_id +// type: string +// description: >- +// Return only items *immediately newer* than the given since status ID. +// The item with the specified ID will not be included in the response. +// in: query +// required: false +// - +// name: limit +// type: integer +// description: Number of items to return. +// default: 20 +// in: query +// required: false +// max: 80 +// min: 0 +// +// security: +// - OAuth2 Bearer: +// - read:accounts +// +// responses: +// '200': +// name: tokens +// description: Array of token info entries. +// schema: +// type: array +// items: +// "$ref": "#/definitions/tokenInfo" +// headers: +// Link: +// type: string +// description: Links to the next and previous queries. +// '401': +// description: unauthorized +// '400': +// description: bad request +func (m *Module) TokensInfoGETHandler(c *gin.Context) { + authed, errWithCode := apiutil.TokenAuth(c, + true, true, true, true, + apiutil.ScopeReadAccounts, + ) + if errWithCode != nil { + apiutil.ErrorHandler(c, errWithCode, m.processor.InstanceGetV1) + return + } + + if _, err := apiutil.NegotiateAccept(c, apiutil.JSONAcceptHeaders...); err != nil { + apiutil.ErrorHandler(c, gtserror.NewErrorNotAcceptable(err, err.Error()), m.processor.InstanceGetV1) + return + } + + page, errWithCode := paging.ParseIDPage(c, + 0, // min limit + 80, // max limit + 20, // default limit + ) + if errWithCode != nil { + apiutil.ErrorHandler(c, errWithCode, m.processor.InstanceGetV1) + return + } + + resp, errWithCode := m.processor.Account().TokensGet( + c.Request.Context(), + authed.User.ID, + page, + ) + if errWithCode != nil { + apiutil.ErrorHandler(c, errWithCode, m.processor.InstanceGetV1) + return + } + + if resp.LinkHeader != "" { + c.Header("Link", resp.LinkHeader) + } + + apiutil.JSON(c, http.StatusOK, resp.Items) +} diff --git a/internal/api/client/tokens/tokensget_test.go b/internal/api/client/tokens/tokensget_test.go new file mode 100644 index 000000000..0164c0379 --- /dev/null +++ b/internal/api/client/tokens/tokensget_test.go @@ -0,0 +1,69 @@ +// GoToSocial +// Copyright (C) GoToSocial Authors admin@gotosocial.org +// SPDX-License-Identifier: AGPL-3.0-or-later +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package tokens_test + +import ( + "net/http" + "testing" + + "github.com/stretchr/testify/suite" + "github.com/superseriousbusiness/gotosocial/internal/api/client/tokens" +) + +type TokensGetTestSuite struct { + TokensStandardTestSuite +} + +func (suite *TokensGetTestSuite) TestTokensGet() { + var ( + testPath = "/api" + tokens.BasePath + ) + + out, code := suite.req( + http.MethodGet, + testPath, + suite.tokens.TokensInfoGETHandler, + nil, + ) + + suite.Equal(http.StatusOK, code) + suite.Equal(`[ + { + "id": "01JN0X2D9GJTZQ5KYPYFWN16QW", + "created_at": "2025-02-26T10:33:04.560Z", + "scope": "push", + "application": { + "name": "really cool gts application", + "website": "https://reallycool.app" + } + }, + { + "id": "01F8MGTQW4DKTDF8SW5CT9HYGA", + "created_at": "2021-06-20T10:53:00.164Z", + "scope": "read write push", + "application": { + "name": "really cool gts application", + "website": "https://reallycool.app" + } + } +]`, out) +} + +func TestTokensGetTestSuite(t *testing.T) { + suite.Run(t, new(TokensGetTestSuite)) +} diff --git a/internal/api/model/token.go b/internal/api/model/token.go index 5a1abe28f..3ad45e684 100644 --- a/internal/api/model/token.go +++ b/internal/api/model/token.go @@ -33,3 +33,25 @@ type Token struct { // example: 1627644520 CreatedAt int64 `json:"created_at"` } + +// TokenInfo represents metadata about one user-level access token. +// The actual access token itself will never be sent via the API. +// +// swagger:model tokenInfo +type TokenInfo struct { + // Database ID of this token. + // example: 01JMW7QBAZYZ8T8H73PCEX12XG + ID string `json:"id"` + // When the token was created (ISO 8601 Datetime). + // example: 2021-07-30T09:20:25+00:00 + CreatedAt string `json:"created_at"` + // Approximate time (accurate to within an hour) when the token was last used (ISO 8601 Datetime). + // Omitted if token has never been used, or it is not known when it was last used (eg., it was last used before tracking "last_used" became a thing). + // example: 2021-07-30T09:20:25+00:00 + LastUsed string `json:"last_used,omitempty"` + // OAuth scopes granted by the token, space-separated. + // example: read write admin + Scope string `json:"scope"` + // Application used to create this token. + Application *Application `json:"application"` +} diff --git a/internal/db/application.go b/internal/db/application.go index 9f0109d59..a3061f028 100644 --- a/internal/db/application.go +++ b/internal/db/application.go @@ -21,6 +21,7 @@ "context" "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" + "github.com/superseriousbusiness/gotosocial/internal/paging" ) type Application interface { @@ -39,6 +40,9 @@ type Application interface { // GetAllTokens fetches all client oauth tokens from database. GetAllTokens(ctx context.Context) ([]*gtsmodel.Token, error) + // GetAccessTokens allows paging through a user's access (ie., user-level) tokens. + GetAccessTokens(ctx context.Context, userID string, page *paging.Page) ([]*gtsmodel.Token, error) + // GetTokenByID fetches the client oauth token from database with ID. GetTokenByID(ctx context.Context, id string) (*gtsmodel.Token, error) diff --git a/internal/db/bundb/application.go b/internal/db/bundb/application.go index d94c984d0..c21221c9f 100644 --- a/internal/db/bundb/application.go +++ b/internal/db/bundb/application.go @@ -19,8 +19,11 @@ import ( "context" + "slices" + "github.com/superseriousbusiness/gotosocial/internal/gtserror" "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" + "github.com/superseriousbusiness/gotosocial/internal/paging" "github.com/superseriousbusiness/gotosocial/internal/state" "github.com/superseriousbusiness/gotosocial/internal/util/xslices" "github.com/uptrace/bun" @@ -139,6 +142,74 @@ func(uncached []string) ([]*gtsmodel.Token, error) { return tokens, nil } +func (a *applicationDB) GetAccessTokens( + ctx context.Context, + userID string, + page *paging.Page, +) ([]*gtsmodel.Token, error) { + var ( + // Get paging params. + minID = page.GetMin() + maxID = page.GetMax() + limit = page.GetLimit() + order = page.GetOrder() + + // Make educated guess for slice size. + tokenIDs = make([]string, 0, limit) + ) + + // Ensure user ID. + if userID == "" { + return nil, gtserror.New("userID not set") + } + + q := a.db. + NewSelect(). + TableExpr("? AS ?", bun.Ident("tokens"), bun.Ident("token")). + Column("token.id"). + Where("? = ?", bun.Ident("token.user_id"), userID). + Where("? != ?", bun.Ident("token.access"), "") + + if maxID != "" { + // Return only tokens LOWER (ie., older) than maxID. + q = q.Where("? < ?", bun.Ident("token.id"), maxID) + } + + if minID != "" { + // Return only tokens HIGHER (ie., newer) than minID. + q = q.Where("? > ?", bun.Ident("token.id"), minID) + } + + if limit > 0 { + q = q.Limit(limit) + } + + if order == paging.OrderAscending { + // Page up. + q = q.Order("token.id ASC") + } else { + // Page down. + q = q.Order("token.id DESC") + } + + if err := q.Scan(ctx, &tokenIDs); err != nil { + return nil, err + } + + if len(tokenIDs) == 0 { + return nil, nil + } + + // If we're paging up, we still want tokens + // to be sorted by ID desc (ie., newest to + // oldest), so reverse ids slice. + if order == paging.OrderAscending { + slices.Reverse(tokenIDs) + } + + return a.getTokensByIDs(ctx, tokenIDs) +} + func (a *applicationDB) GetTokenByID(ctx context.Context, code string) (*gtsmodel.Token, error) { return a.getTokenBy( "ID", @@ -149,6 +220,37 @@ func(t *gtsmodel.Token) error { ) } +func (a *applicationDB) getTokensByIDs(ctx context.Context, ids []string) ([]*gtsmodel.Token, error) { + tokens, err := a.state.Caches.DB.Token.LoadIDs("ID", + ids, + func(uncached []string) ([]*gtsmodel.Token, error) { + // Preallocate expected length of uncached tokens. + tokens := make([]*gtsmodel.Token, 0, len(uncached)) + + // Perform database query scanning + // the remaining (uncached) token IDs. + if err := a.db.NewSelect(). + Model(&tokens). + Where("? IN (?)", bun.Ident("id"), bun.In(uncached)). + Scan(ctx); err != nil { + return nil, err + } + + return tokens, nil + }, + ) + if err != nil { + return nil, err + } + + // Reorder the tokens by their + // IDs to ensure in correct order. + getID := func(t *gtsmodel.Token) string { return t.ID } + xslices.OrderBy(tokens, ids, getID) + + return tokens, nil +} + func (a *applicationDB) GetTokenByCode(ctx context.Context, code string) (*gtsmodel.Token, error) { return a.getTokenBy( "Code", diff --git a/internal/processing/account/tokens.go b/internal/processing/account/tokens.go new file mode 100644 index 000000000..dcd997839 --- /dev/null +++ b/internal/processing/account/tokens.go @@ -0,0 +1,122 @@ +// GoToSocial +// Copyright (C) GoToSocial Authors admin@gotosocial.org +// SPDX-License-Identifier: AGPL-3.0-or-later +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package account + +import ( + "context" + "errors" + + apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model" + "github.com/superseriousbusiness/gotosocial/internal/db" + "github.com/superseriousbusiness/gotosocial/internal/gtserror" + "github.com/superseriousbusiness/gotosocial/internal/log" + "github.com/superseriousbusiness/gotosocial/internal/paging" +) + +func (p *Processor) TokensGet( + ctx context.Context, + userID string, + page *paging.Page, +) (*apimodel.PageableResponse, gtserror.WithCode) { + tokens, err := p.state.DB.GetAccessTokens(ctx, userID, page) + if err != nil && !errors.Is(err, db.ErrNoEntries) { + err := gtserror.Newf("db error getting tokens: %w", err) + return nil, gtserror.NewErrorInternalError(err) + } + + count := len(tokens) + if count == 0 { + return paging.EmptyResponse(), nil + } + + var ( + // Get the lowest and highest + // ID values, used for paging. + lo = tokens[count-1].ID + hi = tokens[0].ID + + // Best-guess items length. + items = make([]interface{}, 0, count) + ) + + for _, token := range tokens { + tokenInfo, err := p.converter.TokenToAPITokenInfo(ctx, token) + if err != nil { + log.Errorf(ctx, "error converting token to api token info: %v", err) + continue + } + + // Append req to return items. + items = append(items, tokenInfo) + } + + return paging.PackageResponse(paging.ResponseParams{ + Items: items, + Path: "/api/v1/tokens", + Next: page.Next(lo, hi), + Prev: page.Prev(lo, hi), + }), nil +} + +func (p *Processor) TokenGet( + ctx context.Context, + userID string, + tokenID string, +) (*apimodel.TokenInfo, gtserror.WithCode) { + token, err := p.state.DB.GetTokenByID(ctx, tokenID) + if err != nil && !errors.Is(err, db.ErrNoEntries) { + err := gtserror.Newf("db error getting token %s: %w", tokenID, err) + return nil, gtserror.NewErrorInternalError(err) + } + + if token == nil { + err := gtserror.Newf("token %s not found in the db", tokenID) + return nil, gtserror.NewErrorNotFound(err) + } + + if token.UserID != userID { + err := gtserror.Newf("token %s does not belong to user %s", tokenID, userID) + return nil, gtserror.NewErrorNotFound(err) + } + + tokenInfo, err := p.converter.TokenToAPITokenInfo(ctx, token) + if err != nil { + err := gtserror.Newf("error converting token to api token info: %w", err) + return nil, gtserror.NewErrorInternalError(err) + } + + return tokenInfo, nil +} + +func (p *Processor) TokenInvalidate( + ctx context.Context, + userID string, + tokenID string, +) (*apimodel.TokenInfo, gtserror.WithCode) { + tokenInfo, errWithCode := p.TokenGet(ctx, userID, tokenID) + if errWithCode != nil { + return nil, errWithCode + } + + if err := p.state.DB.DeleteTokenByID(ctx, tokenID); err != nil { + err := gtserror.Newf("db error deleting token %s: %w", tokenID, err) + return nil, gtserror.NewErrorInternalError(err) + } + + return tokenInfo, nil +} diff --git a/internal/typeutils/internaltofrontend.go b/internal/typeutils/internaltofrontend.go index 510b165d1..8bd92512a 100644 --- a/internal/typeutils/internaltofrontend.go +++ b/internal/typeutils/internaltofrontend.go @@ -3068,3 +3068,39 @@ func (c *Converter) WebPushSubscriptionToAPIWebPushSubscription( Standard: true, }, nil } + +func (c *Converter) TokenToAPITokenInfo( + ctx context.Context, + token *gtsmodel.Token, +) (*apimodel.TokenInfo, error) { + createdAt, err := id.TimeFromULID(token.ID) + if err != nil { + err := gtserror.Newf("error parsing time from token id: %w", err) + return nil, err + } + + var lastUsed string + if !token.LastUsed.IsZero() { + lastUsed = util.FormatISO8601(token.LastUsed) + } + + application, err := c.state.DB.GetApplicationByClientID(ctx, token.ClientID) + if err != nil { + err := gtserror.Newf("db error getting application with client id %s: %w", token.ClientID, err) + return nil, err + } + + apiApplication, err := c.AppToAPIAppPublic(ctx, application) + if err != nil { + err := gtserror.Newf("error converting application to api application: %w", err) + return nil, err + } + + return &apimodel.TokenInfo{ + ID: token.ID, + CreatedAt: util.FormatISO8601(createdAt), + LastUsed: lastUsed, + Scope: token.Scope, + Application: apiApplication, + }, nil +} diff --git a/web/source/settings/lib/query/gts-api.ts b/web/source/settings/lib/query/gts-api.ts index 34b66913a..401423766 100644 --- a/web/source/settings/lib/query/gts-api.ts +++ b/web/source/settings/lib/query/gts-api.ts @@ -171,7 +171,8 @@ export const gtsApi = createApi({ "InteractionRequest", "DomainPermissionDraft", "DomainPermissionExclude", - "DomainPermissionSubscription" + "DomainPermissionSubscription", + "TokenInfo", ], endpoints: (build) => ({ instanceV1: build.query({ diff --git a/web/source/settings/lib/query/user/tokens.ts b/web/source/settings/lib/query/user/tokens.ts new file mode 100644 index 000000000..5ba4d1355 --- /dev/null +++ b/web/source/settings/lib/query/user/tokens.ts @@ -0,0 +1,73 @@ +/* + GoToSocial + Copyright (C) GoToSocial Authors admin@gotosocial.org + SPDX-License-Identifier: AGPL-3.0-or-later + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +import { + SearchTokenInfoParams, + SearchTokenInfoResp, + TokenInfo, +} from "../../types/tokeninfo"; +import { gtsApi } from "../gts-api"; +import parse from "parse-link-header"; + +const extended = gtsApi.injectEndpoints({ + endpoints: (build) => ({ + searchTokenInfo: build.query({ + query: (form) => { + const params = new(URLSearchParams); + Object.entries(form).forEach(([k, v]) => { + if (v !== undefined) { + params.append(k, v); + } + }); + + let query = ""; + if (params.size !== 0) { + query = `?${params.toString()}`; + } + + return { + url: `/api/v1/tokens${query}` + }; + }, + // Headers required for paging. + transformResponse: (apiResp: TokenInfo[], meta) => { + const tokens = apiResp; + const linksStr = meta?.response?.headers.get("Link"); + const links = parse(linksStr); + return { tokens, links }; + }, + providesTags: [{ type: "TokenInfo", id: "TRANSFORMED" }] + }), + invalidateToken: build.mutation({ + query: (id) => ({ + method: "POST", + url: `/api/v1/tokens/${id}/invalidate`, + }), + invalidatesTags: (res) => + res + ? [{ type: "TokenInfo", id: "TRANSFORMED" }, { type: "InteractionRequest", id: res.id }] + : [{ type: "TokenInfo", id: "TRANSFORMED" }] + }), + }) +}); + +export const { + useLazySearchTokenInfoQuery, + useInvalidateTokenMutation, +} = extended; diff --git a/web/source/settings/lib/types/tokeninfo.ts b/web/source/settings/lib/types/tokeninfo.ts new file mode 100644 index 000000000..989ed67be --- /dev/null +++ b/web/source/settings/lib/types/tokeninfo.ts @@ -0,0 +1,62 @@ +/* + GoToSocial + Copyright (C) GoToSocial Authors admin@gotosocial.org + SPDX-License-Identifier: AGPL-3.0-or-later + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +import { Links } from "parse-link-header"; + +export interface TokenInfo { + id: string; + created_at: string; + last_used?: string; + scope: string; + application: { + name: string; + website?: string; + }; +} + +/** + * Parameters for GET to /api/v1/tokens. + */ +export interface SearchTokenInfoParams { + /** + * If set, show only items older (ie., lower) than the given ID. + * Item with the given ID will not be included in response. + */ + max_id?: string; + /** + * If set, show only items newer (ie., higher) than the given ID. + * Item with the given ID will not be included in response. + */ + since_id?: string; + /** + * If set, show only items *immediately newer* than the given ID. + * Item with the given ID will not be included in response. + */ + min_id?: string; + /** + * If set, limit returned items to this number. + * Else, fall back to GtS API defaults. + */ + limit?: number; +} + +export interface SearchTokenInfoResp { + tokens: TokenInfo[]; + links: Links | null; +} diff --git a/web/source/settings/style.css b/web/source/settings/style.css index 75e7e7e3f..5a85f370e 100644 --- a/web/source/settings/style.css +++ b/web/source/settings/style.css @@ -1468,6 +1468,33 @@ button.tab-button { gap: 1rem; } +.tokens-view { + .token-info { + .info-list { + border: none; + width: 100%; + + .info-list-entry { + background: none; + padding: 0; + } + + > .info-list-entry > .monospace { + font-size: large; + } + } + + .action-buttons { + margin-top: 0.5rem; + > .mutation-button + > button { + font-size: 1rem; + line-height: 1rem; + } + } + } +} + .instance-rules { list-style-position: inside; margin: 0; diff --git a/web/source/settings/views/user/menu.tsx b/web/source/settings/views/user/menu.tsx index 85734ae52..570912ef2 100644 --- a/web/source/settings/views/user/menu.tsx +++ b/web/source/settings/views/user/menu.tsx @@ -63,6 +63,11 @@ export default function UserMenu() { itemUrl="export-import" icon="fa-floppy-o" /> + ); } diff --git a/web/source/settings/views/user/router.tsx b/web/source/settings/views/user/router.tsx index 091dd40ae..be1fa4434 100644 --- a/web/source/settings/views/user/router.tsx +++ b/web/source/settings/views/user/router.tsx @@ -28,6 +28,7 @@ import EmailPassword from "./emailpassword"; import ExportImport from "./export-import"; import InteractionRequests from "./interactions"; import InteractionRequestDetail from "./interactions/detail"; +import Tokens from "./tokens"; /** * - /settings/user/profile @@ -35,6 +36,7 @@ import InteractionRequestDetail from "./interactions/detail"; * - /settings/user/emailpassword * - /settings/user/migration * - /settings/user/export-import + * - /settings/user/tokens * - /settings/users/interaction_requests */ export default function UserRouter() { @@ -52,6 +54,7 @@ export default function UserRouter() { + diff --git a/web/source/settings/views/user/tokens/index.tsx b/web/source/settings/views/user/tokens/index.tsx new file mode 100644 index 000000000..c8a8b8e38 --- /dev/null +++ b/web/source/settings/views/user/tokens/index.tsx @@ -0,0 +1,50 @@ +/* + GoToSocial + Copyright (C) GoToSocial Authors admin@gotosocial.org + SPDX-License-Identifier: AGPL-3.0-or-later + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +import React from "react"; +import TokensSearchForm from "./search"; + +export default function Tokens() { + return ( + + ); +} diff --git a/web/source/settings/views/user/tokens/search.tsx b/web/source/settings/views/user/tokens/search.tsx new file mode 100644 index 000000000..87080cc8f --- /dev/null +++ b/web/source/settings/views/user/tokens/search.tsx @@ -0,0 +1,214 @@ +/* + GoToSocial + Copyright (C) GoToSocial Authors admin@gotosocial.org + SPDX-License-Identifier: AGPL-3.0-or-later + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +import React, { ReactNode, useEffect, useMemo } from "react"; + +import { useTextInput } from "../../../lib/form"; +import { PageableList } from "../../../components/pageable-list"; +import MutationButton from "../../../components/form/mutation-button"; +import { useLocation, useSearch } from "wouter"; +import { Select } from "../../../components/form/inputs"; +import { useInvalidateTokenMutation, useLazySearchTokenInfoQuery } from "../../../lib/query/user/tokens"; +import { TokenInfo } from "../../../lib/types/tokeninfo"; + +export default function TokensSearchForm() { + const [ location, setLocation ] = useLocation(); + const search = useSearch(); + const urlQueryParams = useMemo(() => new URLSearchParams(search), [search]); + const [ searchTokenInfo, searchRes ] = useLazySearchTokenInfoQuery(); + + // Populate search form using values from + // urlQueryParams, to allow paging. + const form = { + limit: useTextInput("limit", { defaultValue: urlQueryParams.get("limit") ?? "20" }) + }; + + // On mount, trigger search. + useEffect(() => { + searchTokenInfo(Object.fromEntries(urlQueryParams), true); + }, [urlQueryParams, searchTokenInfo]); + + // Rather than triggering the search directly, + // the "submit" button changes the location + // based on form field params, and lets the + // useEffect hook above actually do the search. + function submitQuery(e) { + e.preventDefault(); + + // Parse query parameters. + const entries = Object.entries(form).map(([k, v]) => { + // Take only defined form fields. + if (v.value === undefined) { + return null; + } else if (typeof v.value === "string" && v.value.length === 0) { + return null; + } + + return [[k, v.value.toString()]]; + }).flatMap(kv => { + // Remove any nulls. + return kv !== null ? kv : []; + }); + + const searchParams = new URLSearchParams(entries); + setLocation(location + "?" + searchParams.toString()); + } + + // Function to map an item to a list entry. + function itemToEntry(tokenInfo: TokenInfo): ReactNode { + return ( + + ); + } + + return ( + <> +
+ + + + No tokens found.} + prevNextLinks={searchRes.data?.links} + /> + + ); +} + +interface TokenInfoListEntryProps { + tokenInfo: TokenInfo; +} + +function TokenInfoListEntry({ tokenInfo }: TokenInfoListEntryProps) { + const appWebsite = useMemo(() => { + if (!tokenInfo.application.website) { + return ""; + } + + try { + // Try to parse nicely and return link. + const websiteURL = new URL(tokenInfo.application.website); + const websiteURLStr = websiteURL.toString(); + return ( + {websiteURLStr} + ); + } catch { + // Fall back to returning string. + return tokenInfo.application.website; + } + }, [tokenInfo.application.website]); + + const created = useMemo(() => { + const createdAt = new Date(tokenInfo.created_at); + return ; + }, [tokenInfo.created_at]); + + const lastUsed = useMemo(() => { + if (!tokenInfo.last_used) { + return "unknown/never"; + } + + const lastUsed = new Date(tokenInfo.last_used); + return ; + }, [tokenInfo.last_used]); + + const [ invalidate, invalidateResult ] = useInvalidateTokenMutation(); + + return ( + +
+
+
App name:
+
{tokenInfo.application.name}
+
+ { appWebsite && +
+
App website:
+
{appWebsite}
+
+ } +
+
Scope:
+
{tokenInfo.scope}
+
+
+
Created:
+
{created}
+
+
+
Last used:
+
{lastUsed}
+
+
+
+ { + e.preventDefault(); + e.stopPropagation(); + invalidate(tokenInfo.id); + }} + disabled={false} + showError={true} + result={invalidateResult} + /> +
+
+ ); +}