From 829143d2636d4c0d274bf2ab4559912f472a2bc4 Mon Sep 17 00:00:00 2001 From: tobi <31960611+tsmethurst@users.noreply.github.com> Date: Tue, 4 Mar 2025 11:01:25 +0100 Subject: [PATCH] [feature] Add token review / delete to backend + settings panel (#3845) --- 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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 L4n-LcV`5C$>L1eU_13(%;Ur!JDC!? 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 z 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

5_0#8G+%4IRT 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 literal 0 HcmV?d00001 diff --git a/docs/user_guide/settings.md b/docs/user_guide/settings.md index 691181cb9..7e85e0ed8 100644 --- a/docs/user_guide/settings.md +++ b/docs/user_guide/settings.md @@ -269,3 +269,21 @@ Both merge and overwrite operations are idempotent, which basically means that d !!! warning The CSV format for mutes does not contain expiration data, so temporary mutes are exported (and imported) as permanent mutes. + +## Access Tokens + +In the access tokens section, you can review and invalidate [OAuth access tokens](https://www.oauth.com/oauth2-servers/access-tokens/) owned by applications that you have authorized to access your account and/or perform actions on your behalf. + +![The access tokens page.](../public/user-settings-access-tokens.png) + +In cases where you've logged in with an application multiple times, or logged in with multiple devices or browsers, you may see multiple tokens with the same application name. This is normal! For example, say you have logged in with Pinafore on both your phone and your laptop browser, you will see two different tokens owned by Pinafore. + +You can invalidate a token by clicking on the "Invalidate token" button under a token. This will remove the token from the database. The application that was authorized to access your account with that token will then no longer be authorized to do so, and you will need to log out and/or log in again with that application. + +Logging out of an application does not necessarily remove the token from the GoToSocial database, so old tokens may linger from applications you used a long time ago. So, feel free to invalidate tokens that have never been used, or haven't been used in a long time; it's good security practice to keep only the tokens that you need, and it's fun to click the big red button. + +!!! danger + If you see any tokens from applications that you do not recognize, or do not remember authorizing to access your account, then you should invalidate them, and consider changing your password as soon as possible. + +!!! note + Token "Last used" time is approximate and may be off by an hour in either direction. diff --git a/internal/api/client.go b/internal/api/client.go index 3112aeea5..a928176de 100644 --- a/internal/api/client.go +++ b/internal/api/client.go @@ -54,6 +54,7 @@ import ( "github.com/superseriousbusiness/gotosocial/internal/api/client/streaming" "github.com/superseriousbusiness/gotosocial/internal/api/client/tags" "github.com/superseriousbusiness/gotosocial/internal/api/client/timelines" + "github.com/superseriousbusiness/gotosocial/internal/api/client/tokens" "github.com/superseriousbusiness/gotosocial/internal/api/client/user" "github.com/superseriousbusiness/gotosocial/internal/db" "github.com/superseriousbusiness/gotosocial/internal/middleware" @@ -99,6 +100,7 @@ type Client struct { streaming *streaming.Module // api/v1/streaming tags *tags.Module // api/v1/tags timelines *timelines.Module // api/v1/timelines + tokens *tokens.Module // api/v1/tokens user *user.Module // api/v1/user } @@ -152,6 +154,7 @@ func (c *Client) Route(r *router.Router, m ...gin.HandlerFunc) { c.streaming.Route(h) c.tags.Route(h) c.timelines.Route(h) + c.tokens.Route(h) c.user.Route(h) } @@ -193,6 +196,7 @@ func NewClient(state *state.State, p *processing.Processor) *Client { streaming: streaming.New(p, time.Second*30, 4096), tags: tags.New(p), timelines: timelines.New(p), + tokens: tokens.New(p), user: user.New(p), } } diff --git a/internal/api/client/tokens/tokenget.go b/internal/api/client/tokens/tokenget.go new file mode 100644 index 000000000..c88b78743 --- /dev/null +++ b/internal/api/client/tokens/tokenget.go @@ -0,0 +1,98 @@ +// 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" +) + +// 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 @@ import ( "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 @@ package bundb 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 (a *applicationDB) GetAllTokens(ctx context.Context) ([]*gtsmodel.Token, er 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 (a *applicationDB) GetTokenByID(ctx context.Context, code string) (*gtsmode ) } +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} + /> +
+
+ ); +}