From bcda048eab799284fc46d74706334bf9ef76dc83 Mon Sep 17 00:00:00 2001 From: tobi <31960611+tsmethurst@users.noreply.github.com> Date: Thu, 6 Jun 2024 15:43:25 +0200 Subject: [PATCH] [feature] Self-serve email change for users (#2957) * [feature] Email change * frontend stuff for changing email * docs * tests etc * differentiate more clearly between local user+account and account * populate user --- docs/api/swagger.yaml | 142 ++++++++++++++++++ docs/assets/user-settings-post-settings.png | Bin 106948 -> 0 bytes docs/assets/user-settings-settings.png | Bin 0 -> 110058 bytes docs/user_guide/settings.md | 18 ++- .../api/activitypub/users/userget_test.go | 2 +- internal/api/client/accounts/accountcreate.go | 6 +- internal/api/client/accounts/accountdelete.go | 2 +- internal/api/client/admin/accountapprove.go | 2 +- internal/api/client/admin/accountreject.go | 2 +- internal/api/client/user/emailchange.go | 104 +++++++++++++ internal/api/client/user/emailchange_test.go | 142 ++++++++++++++++++ .../api/client/user/passwordchange_test.go | 122 +++++---------- internal/api/client/user/user.go | 4 + internal/api/client/user/user_test.go | 43 +++++- internal/api/client/user/userget.go | 78 ++++++++++ internal/api/model/user.go | 61 ++++++++ internal/email/confirm.go | 15 +- internal/email/email_test.go | 17 ++- internal/federation/federatingdb/delete.go | 2 +- internal/federation/federatingdb/move.go | 2 +- internal/federation/federatingdb/move_test.go | 6 +- internal/federation/federatingdb/update.go | 2 +- internal/processing/account/account.go | 4 - internal/processing/account/account_test.go | 5 +- internal/processing/account/delete.go | 17 --- internal/processing/account/update.go | 2 +- internal/processing/account/update_test.go | 10 +- internal/processing/account_test.go | 106 ------------- .../{accountapprove.go => signupapprove.go} | 7 +- ...tapprove_test.go => signupapprove_test.go} | 2 +- .../{accountreject.go => signupreject.go} | 7 +- ...untreject_test.go => signupreject_test.go} | 6 +- internal/processing/processor.go | 6 +- internal/processing/report/create.go | 2 +- .../processing/{account => user}/create.go | 12 +- internal/processing/user/delete.go | 48 ++++++ internal/processing/user/email.go | 81 ++++++++++ internal/processing/user/get.go | 32 ++++ internal/processing/user/user.go | 14 +- internal/processing/user/user_test.go | 3 +- internal/processing/workers/fromclientapi.go | 66 +++++--- internal/processing/workers/fromfediapi.go | 12 +- .../processing/workers/fromfediapi_test.go | 4 +- internal/processing/workers/surfaceemail.go | 6 +- internal/typeutils/internaltofrontend.go | 38 +++++ internal/web/signup.go | 4 +- web/source/settings/lib/query/user/index.ts | 14 ++ web/source/settings/lib/types/user.ts | 34 +++++ web/source/settings/views/user/settings.tsx | 107 ++++++++++++- web/template/email_confirm.tmpl | 6 +- 50 files changed, 1118 insertions(+), 309 deletions(-) delete mode 100644 docs/assets/user-settings-post-settings.png create mode 100644 docs/assets/user-settings-settings.png create mode 100644 internal/api/client/user/emailchange.go create mode 100644 internal/api/client/user/emailchange_test.go create mode 100644 internal/api/client/user/userget.go delete mode 100644 internal/processing/account_test.go rename internal/processing/admin/{accountapprove.go => signupapprove.go} (93%) rename internal/processing/admin/{accountapprove_test.go => signupapprove_test.go} (97%) rename internal/processing/admin/{accountreject.go => signupreject.go} (95%) rename internal/processing/admin/{accountreject_test.go => signupreject_test.go} (96%) rename internal/processing/{account => user}/create.go (94%) create mode 100644 internal/processing/user/delete.go create mode 100644 internal/processing/user/get.go create mode 100644 web/source/settings/lib/types/user.ts diff --git a/docs/api/swagger.yaml b/docs/api/swagger.yaml index 5d93b33b1..55e88b62c 100644 --- a/docs/api/swagger.yaml +++ b/docs/api/swagger.yaml @@ -2713,6 +2713,77 @@ definitions: type: object x-go-name: Theme x-go-package: github.com/superseriousbusiness/gotosocial/internal/api/model + user: + properties: + admin: + description: User is an admin. + example: false + type: boolean + x-go-name: Admin + approved: + description: User was approved by an admin. + example: true + type: boolean + x-go-name: Approved + confirmation_sent_at: + description: Time when the last "please confirm your email address" email was sent, if at all. (ISO 8601 Datetime) + example: "2021-07-30T09:20:25+00:00" + type: string + x-go-name: ConfirmationSentAt + confirmed_at: + description: Time at which the email given in the `email` field was confirmed, if at all. (ISO 8601 Datetime) + example: "2021-07-30T09:20:25+00:00" + type: string + x-go-name: ConfirmedAt + created_at: + description: Time this user was created. (ISO 8601 Datetime) + example: "2021-07-30T09:20:25+00:00" + type: string + x-go-name: CreatedAt + disabled: + description: User's account is disabled. + example: false + type: boolean + x-go-name: Disabled + email: + description: Confirmed email address of this user, if set. + example: someone@example.org + type: string + x-go-name: Email + id: + description: Database ID of this user. + example: 01FBVD42CQ3ZEEVMW180SBX03B + type: string + x-go-name: ID + last_emailed_at: + description: Time at which this user was last emailed, if at all. (ISO 8601 Datetime) + example: "2021-07-30T09:20:25+00:00" + type: string + x-go-name: LastEmailedAt + moderator: + description: User is a moderator. + example: false + type: boolean + x-go-name: Moderator + reason: + description: Reason for sign-up, if provided. + example: Please! Pretty please! + type: string + x-go-name: Reason + reset_password_sent_at: + description: Time when the last "please reset your password" email was sent, if at all. (ISO 8601 Datetime) + example: "2021-07-30T09:20:25+00:00" + type: string + x-go-name: ResetPasswordSentAt + unconfirmed_email: + description: Unconfirmed email address of this user, if set. + example: someone.else@somewhere.else.example.org + type: string + x-go-name: UnconfirmedEmail + title: User models fields relevant to one user. + type: object + x-go-name: User + x-go-package: github.com/superseriousbusiness/gotosocial/internal/api/model wellKnownResponse: description: See https://webfinger.net/ properties: @@ -8636,6 +8707,77 @@ paths: summary: See public statuses that use the given hashtag (case insensitive). tags: - timelines + /api/v1/user: + get: + operationId: getUser + produces: + - application/json + responses: + "200": + description: The requested user. + schema: + $ref: '#/definitions/user' + "400": + description: bad request + "401": + description: unauthorized + "403": + description: forbidden + "406": + description: not acceptable + "500": + description: internal error + security: + - OAuth2 Bearer: + - read:user + summary: Get your own user model. + tags: + - user + /api/v1/user/email_change: + post: + consumes: + - application/json + - application/xml + - application/x-www-form-urlencoded + operationId: userEmailChange + parameters: + - description: User's current password, for verification. + in: formData + name: password + required: true + type: string + x-go-name: Password + - description: Desired new email address. + in: formData + name: new_email + required: true + type: string + x-go-name: NewEmail + produces: + - application/json + responses: + "202": + description: 'Accepted: email change is processing; check your inbox to confirm new address.' + schema: + $ref: '#/definitions/user' + "400": + description: bad request + "401": + description: unauthorized + "403": + description: forbidden + "406": + description: not acceptable + "409": + description: 'Conflict: desired email address already in use' + "500": + description: internal error + security: + - OAuth2 Bearer: + - write:user + summary: Request changing the email address of authenticated user. + tags: + - user /api/v1/user/password_change: post: consumes: diff --git a/docs/assets/user-settings-post-settings.png b/docs/assets/user-settings-post-settings.png deleted file mode 100644 index 6d32f5d62fad747f79f600cfb4059ecd9ff79a96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106948 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
  • wg1zkCRyCLxJdZ_-rHC7bZ@VJ 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

    *&o*1Y?9RL|wP{fWxywx_!m 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 X=R&px7CRUi7#KWV{an^LB{Ts5g%>J} literal 0 HcmV?d00001 diff --git a/docs/user_guide/settings.md b/docs/user_guide/settings.md index 7bcbb762f..1d0ec177d 100644 --- a/docs/user_guide/settings.md +++ b/docs/user_guide/settings.md @@ -133,11 +133,13 @@ See the [Custom CSS](./custom_css.md) page for some tips on writing custom CSS f !!! tip Any custom CSS you add in this box will be applied *after* your selected theme, so you can pick a preset theme that you like and then make your own tweaks! -## Post Settings +## Settings -![Screenshot of the user settings section, providing drop-down menu's to select default post settings, and form fields to change your password](../assets/user-settings-post-settings.png) +![Screenshot of the settings section](../assets/user-settings-settings.png) -In the 'Settings' section, you can set various defaults for new posts. +In the 'Settings' section, you can set various defaults for new posts, and change your password / email address. + +### Post Settings The default post language setting allows you to indicate to other fediverse users which language your posts are usually written in. This is helpful for fediverse users who speak (for example) Korean, and would prefer to filter out posts written in other languages. @@ -151,12 +153,18 @@ The markdown setting indicates that your posts should be parsed as Markdown, whi When you are finished updating your post settings, remember to click the `Save post settings` button at the bottom of the section to save your changes. -## Password Change +### Password Change -You can use the Password Change section of the User Settings Panel to set a new password for your account. +You can use the Password Change section of the panel to set a new password for your account. For security reasons, you must provide your current password to validate the change. For more information on the way GoToSocial manages passwords, please see the [Password management document](./password_management.md). +### Email Change + +You can use the Email Change section of the panel to change the email address for your account. For security reasons, you must provide your current password to validate the change. + +Once a new email address has been entered, and you have clicked "Change email address", you must open the inbox of the new email address and confirm your address via the link provided. Once you've done that, your email address change will be confirmed, and you should use the new email address to log in. + ## Migration In the migration section you can manage settings related to aliasing and/or migrating your account to another account. diff --git a/internal/api/activitypub/users/userget_test.go b/internal/api/activitypub/users/userget_test.go index ac8b2c0eb..2a68b309c 100644 --- a/internal/api/activitypub/users/userget_test.go +++ b/internal/api/activitypub/users/userget_test.go @@ -97,7 +97,7 @@ func (suite *UserGetTestSuite) TestGetUserPublicKeyDeleted() { userModule := users.New(suite.processor) targetAccount := suite.testAccounts["local_account_1"] - suite.processor.Account().DeleteSelf(context.Background(), suite.testAccounts["local_account_1"]) + suite.processor.User().DeleteSelf(context.Background(), suite.testAccounts["local_account_1"]) // wait for the account delete to be processed if !testrig.WaitFor(func() bool { diff --git a/internal/api/client/accounts/accountcreate.go b/internal/api/client/accounts/accountcreate.go index 920b6d4d8..33d743791 100644 --- a/internal/api/client/accounts/accountcreate.go +++ b/internal/api/client/accounts/accountcreate.go @@ -105,9 +105,9 @@ func (m *Module) AccountCreatePOSTHandler(c *gin.Context) { } form.IP = signUpIP - // Create the new account + user. + // Create the new user+account. ctx := c.Request.Context() - user, errWithCode := m.processor.Account().Create( + user, errWithCode := m.processor.User().Create( ctx, authed.Application, form, @@ -118,7 +118,7 @@ func (m *Module) AccountCreatePOSTHandler(c *gin.Context) { } // Get a token for the new user. - ti, errWithCode := m.processor.Account().TokenForNewUser( + ti, errWithCode := m.processor.User().TokenForNewUser( ctx, authed.Token, authed.Application, diff --git a/internal/api/client/accounts/accountdelete.go b/internal/api/client/accounts/accountdelete.go index 947634f70..9a1ef7931 100644 --- a/internal/api/client/accounts/accountdelete.go +++ b/internal/api/client/accounts/accountdelete.go @@ -91,7 +91,7 @@ func (m *Module) AccountDeletePOSTHandler(c *gin.Context) { return } - if errWithCode := m.processor.Account().DeleteSelf(c.Request.Context(), authed.Account); errWithCode != nil { + if errWithCode := m.processor.User().DeleteSelf(c.Request.Context(), authed.Account); errWithCode != nil { apiutil.ErrorHandler(c, errWithCode, m.processor.InstanceGetV1) return } diff --git a/internal/api/client/admin/accountapprove.go b/internal/api/client/admin/accountapprove.go index ff6474adb..7aaa48509 100644 --- a/internal/api/client/admin/accountapprove.go +++ b/internal/api/client/admin/accountapprove.go @@ -91,7 +91,7 @@ func (m *Module) AccountApprovePOSTHandler(c *gin.Context) { return } - account, errWithCode := m.processor.Admin().AccountApprove( + account, errWithCode := m.processor.Admin().SignupApprove( c.Request.Context(), authed.Account, targetAcctID, diff --git a/internal/api/client/admin/accountreject.go b/internal/api/client/admin/accountreject.go index 1e909b508..a4653985d 100644 --- a/internal/api/client/admin/accountreject.go +++ b/internal/api/client/admin/accountreject.go @@ -119,7 +119,7 @@ func (m *Module) AccountRejectPOSTHandler(c *gin.Context) { return } - account, errWithCode := m.processor.Admin().AccountReject( + account, errWithCode := m.processor.Admin().SignupReject( c.Request.Context(), authed.Account, targetAcctID, diff --git a/internal/api/client/user/emailchange.go b/internal/api/client/user/emailchange.go new file mode 100644 index 000000000..b2e25343f --- /dev/null +++ b/internal/api/client/user/emailchange.go @@ -0,0 +1,104 @@ +// 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 user + +import ( + "errors" + "net/http" + + "github.com/gin-gonic/gin" + apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model" + apiutil "github.com/superseriousbusiness/gotosocial/internal/api/util" + "github.com/superseriousbusiness/gotosocial/internal/gtserror" + "github.com/superseriousbusiness/gotosocial/internal/oauth" +) + +// EmailChangePOSTHandler swagger:operation POST /api/v1/user/email_change userEmailChange +// +// Request changing the email address of authenticated user. +// +// --- +// tags: +// - user +// +// consumes: +// - application/json +// - application/xml +// - application/x-www-form-urlencoded +// +// produces: +// - application/json +// +// security: +// - OAuth2 Bearer: +// - write:user +// +// responses: +// '202': +// description: "Accepted: email change is processing; check your inbox to confirm new address." +// schema: +// "$ref": "#/definitions/user" +// '400': +// description: bad request +// '401': +// description: unauthorized +// '403': +// description: forbidden +// '406': +// description: not acceptable +// '409': +// description: "Conflict: desired email address already in use" +// '500': +// description: internal error +func (m *Module) EmailChangePOSTHandler(c *gin.Context) { + authed, err := oauth.Authed(c, true, true, true, true) + if err != nil { + apiutil.ErrorHandler(c, gtserror.NewErrorUnauthorized(err, err.Error()), 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 + } + + form := &apimodel.EmailChangeRequest{} + if err := c.ShouldBind(form); err != nil { + apiutil.ErrorHandler(c, gtserror.NewErrorBadRequest(err, err.Error()), m.processor.InstanceGetV1) + return + } + + if form.Password == "" { + err := errors.New("email change request missing field password") + apiutil.ErrorHandler(c, gtserror.NewErrorBadRequest(err, err.Error()), m.processor.InstanceGetV1) + return + } + + user, errWithCode := m.processor.User().EmailChange( + c.Request.Context(), + authed.User, + form.Password, + form.NewEmail, + ) + if errWithCode != nil { + apiutil.ErrorHandler(c, errWithCode, m.processor.InstanceGetV1) + return + } + + apiutil.JSON(c, http.StatusAccepted, user) +} diff --git a/internal/api/client/user/emailchange_test.go b/internal/api/client/user/emailchange_test.go new file mode 100644 index 000000000..fce96c144 --- /dev/null +++ b/internal/api/client/user/emailchange_test.go @@ -0,0 +1,142 @@ +// 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 user_test + +import ( + "encoding/json" + "io" + "net/http" + "testing" + + "github.com/stretchr/testify/suite" + "github.com/superseriousbusiness/gotosocial/internal/api/client/user" + apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model" + "github.com/superseriousbusiness/gotosocial/internal/state" + "github.com/superseriousbusiness/gotosocial/testrig" +) + +type EmailChangeTestSuite struct { + UserStandardTestSuite +} + +func (suite *EmailChangeTestSuite) TestEmailChangePOST() { + // Get a new processor for this test, as + // we're expecting an email, and we don't + // want the other tests interfering if + // we're running them at the same time. + state := new(state.State) + state.DB = testrig.NewTestDB(&suite.state) + storage := testrig.NewInMemoryStorage() + sentEmails := make(map[string]string) + emailSender := testrig.NewEmailSender("../../../../web/template/", sentEmails) + processor := testrig.NewTestProcessor(state, suite.federator, emailSender, suite.mediaManager) + testrig.StartWorkers(state, processor.Workers()) + userModule := user.New(processor) + testrig.StandardDBSetup(state.DB, suite.testAccounts) + testrig.StandardStorageSetup(storage, "../../../../testrig/media") + + defer func() { + testrig.StandardDBTeardown(state.DB) + testrig.StandardStorageTeardown(storage) + testrig.StopWorkers(state) + }() + + response, code := suite.POST(user.EmailChangePath, map[string][]string{ + "password": {"password"}, + "new_email": {"someone@example.org"}, + }, userModule.EmailChangePOSTHandler) + defer response.Body.Close() + + // Check response + suite.EqualValues(http.StatusAccepted, code) + b, err := io.ReadAll(response.Body) + if err != nil { + suite.FailNow(err.Error()) + } + + apiUser := new(apimodel.User) + if err := json.Unmarshal(b, apiUser); err != nil { + suite.FailNow(err.Error()) + } + + // Unconfirmed email should be set now. + suite.Equal("someone@example.org", apiUser.UnconfirmedEmail) + + // Ensure unconfirmed address gets an email. + if !testrig.WaitFor(func() bool { + _, ok := sentEmails["someone@example.org"] + return ok + }) { + suite.FailNow("no email received") + } +} + +func (suite *EmailChangeTestSuite) TestEmailChangePOSTAddressInUse() { + response, code := suite.POST(user.EmailChangePath, map[string][]string{ + "password": {"password"}, + "new_email": {"admin@example.org"}, + }, suite.userModule.EmailChangePOSTHandler) + defer response.Body.Close() + + // Check response + suite.EqualValues(http.StatusConflict, code) + b, err := io.ReadAll(response.Body) + if err != nil { + suite.FailNow(err.Error()) + } + + suite.Equal(`{"error":"Conflict: new email address is already in use on this instance"}`, string(b)) +} + +func (suite *EmailChangeTestSuite) TestEmailChangePOSTSameEmail() { + response, code := suite.POST(user.EmailChangePath, map[string][]string{ + "password": {"password"}, + "new_email": {"zork@example.org"}, + }, suite.userModule.EmailChangePOSTHandler) + defer response.Body.Close() + + // Check response + suite.EqualValues(http.StatusBadRequest, code) + b, err := io.ReadAll(response.Body) + if err != nil { + suite.FailNow(err.Error()) + } + + suite.Equal(`{"error":"Bad Request: new email address cannot be the same as current email address"}`, string(b)) +} + +func (suite *EmailChangeTestSuite) TestEmailChangePOSTBadPassword() { + response, code := suite.POST(user.EmailChangePath, map[string][]string{ + "password": {"notmypassword"}, + "new_email": {"someone@example.org"}, + }, suite.userModule.EmailChangePOSTHandler) + defer response.Body.Close() + + // Check response + suite.EqualValues(http.StatusUnauthorized, code) + b, err := io.ReadAll(response.Body) + if err != nil { + suite.FailNow(err.Error()) + } + + suite.Equal(`{"error":"Unauthorized: password was incorrect"}`, string(b)) +} + +func TestEmailChangeTestSuite(t *testing.T) { + suite.Run(t, &EmailChangeTestSuite{}) +} diff --git a/internal/api/client/user/passwordchange_test.go b/internal/api/client/user/passwordchange_test.go index b820696b5..8a741f96c 100644 --- a/internal/api/client/user/passwordchange_test.go +++ b/internal/api/client/user/passwordchange_test.go @@ -19,18 +19,13 @@ package user_test import ( "context" - "fmt" - "io/ioutil" + "io" "net/http" - "net/http/httptest" - "net/url" "testing" "github.com/stretchr/testify/suite" "github.com/superseriousbusiness/gotosocial/internal/api/client/user" "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" - "github.com/superseriousbusiness/gotosocial/internal/oauth" - "github.com/superseriousbusiness/gotosocial/testrig" "golang.org/x/crypto/bcrypt" ) @@ -39,29 +34,20 @@ type PasswordChangeTestSuite struct { } func (suite *PasswordChangeTestSuite) TestPasswordChangePOST() { - t := suite.testTokens["local_account_1"] - oauthToken := oauth.DBTokenToToken(t) - - recorder := httptest.NewRecorder() - ctx, _ := testrig.CreateGinTestContext(recorder, nil) - ctx.Set(oauth.SessionAuthorizedApplication, suite.testApplications["application_1"]) - ctx.Set(oauth.SessionAuthorizedToken, oauthToken) - ctx.Set(oauth.SessionAuthorizedUser, suite.testUsers["local_account_1"]) - ctx.Set(oauth.SessionAuthorizedAccount, suite.testAccounts["local_account_1"]) - ctx.Request = httptest.NewRequest(http.MethodPost, fmt.Sprintf("http://localhost:8080%s", user.PasswordChangePath), nil) - ctx.Request.Header.Set("accept", "application/json") - ctx.Request.Form = url.Values{ + response, code := suite.POST(user.PasswordChangePath, map[string][]string{ "old_password": {"password"}, "new_password": {"peepeepoopoopassword"}, - } - suite.userModule.PasswordChangePOSTHandler(ctx) + }, suite.userModule.PasswordChangePOSTHandler) + defer response.Body.Close() - // check response - suite.EqualValues(http.StatusOK, recorder.Code) + // Check response + suite.EqualValues(http.StatusOK, code) dbUser := >smodel.User{} err := suite.db.GetByID(context.Background(), suite.testUsers["local_account_1"].ID, dbUser) - suite.NoError(err) + if err != nil { + suite.FailNow(err.Error()) + } // new password should pass err = bcrypt.CompareHashAndPassword([]byte(dbUser.EncryptedPassword), []byte("peepeepoopoopassword")) @@ -73,85 +59,49 @@ func (suite *PasswordChangeTestSuite) TestPasswordChangePOST() { } func (suite *PasswordChangeTestSuite) TestPasswordMissingOldPassword() { - t := suite.testTokens["local_account_1"] - oauthToken := oauth.DBTokenToToken(t) - - recorder := httptest.NewRecorder() - ctx, _ := testrig.CreateGinTestContext(recorder, nil) - ctx.Set(oauth.SessionAuthorizedApplication, suite.testApplications["application_1"]) - ctx.Set(oauth.SessionAuthorizedToken, oauthToken) - ctx.Set(oauth.SessionAuthorizedUser, suite.testUsers["local_account_1"]) - ctx.Set(oauth.SessionAuthorizedAccount, suite.testAccounts["local_account_1"]) - ctx.Request = httptest.NewRequest(http.MethodPost, fmt.Sprintf("http://localhost:8080%s", user.PasswordChangePath), nil) - ctx.Request.Header.Set("accept", "application/json") - ctx.Request.Form = url.Values{ + response, code := suite.POST(user.PasswordChangePath, map[string][]string{ "new_password": {"peepeepoopoopassword"}, + }, suite.userModule.PasswordChangePOSTHandler) + defer response.Body.Close() + + // Check response + suite.EqualValues(http.StatusBadRequest, code) + b, err := io.ReadAll(response.Body) + if err != nil { + suite.FailNow(err.Error()) } - suite.userModule.PasswordChangePOSTHandler(ctx) - - // check response - suite.EqualValues(http.StatusBadRequest, recorder.Code) - - result := recorder.Result() - defer result.Body.Close() - b, err := ioutil.ReadAll(result.Body) - suite.NoError(err) suite.Equal(`{"error":"Bad Request: password change request missing field old_password"}`, string(b)) } func (suite *PasswordChangeTestSuite) TestPasswordIncorrectOldPassword() { - t := suite.testTokens["local_account_1"] - oauthToken := oauth.DBTokenToToken(t) - - recorder := httptest.NewRecorder() - ctx, _ := testrig.CreateGinTestContext(recorder, nil) - ctx.Set(oauth.SessionAuthorizedApplication, suite.testApplications["application_1"]) - ctx.Set(oauth.SessionAuthorizedToken, oauthToken) - ctx.Set(oauth.SessionAuthorizedUser, suite.testUsers["local_account_1"]) - ctx.Set(oauth.SessionAuthorizedAccount, suite.testAccounts["local_account_1"]) - ctx.Request = httptest.NewRequest(http.MethodPost, fmt.Sprintf("http://localhost:8080%s", user.PasswordChangePath), nil) - ctx.Request.Header.Set("accept", "application/json") - ctx.Request.Form = url.Values{ + response, code := suite.POST(user.PasswordChangePath, map[string][]string{ "old_password": {"notright"}, "new_password": {"peepeepoopoopassword"}, + }, suite.userModule.PasswordChangePOSTHandler) + defer response.Body.Close() + + // Check response + suite.EqualValues(http.StatusUnauthorized, code) + b, err := io.ReadAll(response.Body) + if err != nil { + suite.FailNow(err.Error()) } - suite.userModule.PasswordChangePOSTHandler(ctx) - - // check response - suite.EqualValues(http.StatusUnauthorized, recorder.Code) - - result := recorder.Result() - defer result.Body.Close() - b, err := ioutil.ReadAll(result.Body) - suite.NoError(err) suite.Equal(`{"error":"Unauthorized: old password was incorrect"}`, string(b)) } func (suite *PasswordChangeTestSuite) TestPasswordWeakNewPassword() { - t := suite.testTokens["local_account_1"] - oauthToken := oauth.DBTokenToToken(t) - - recorder := httptest.NewRecorder() - ctx, _ := testrig.CreateGinTestContext(recorder, nil) - ctx.Set(oauth.SessionAuthorizedApplication, suite.testApplications["application_1"]) - ctx.Set(oauth.SessionAuthorizedToken, oauthToken) - ctx.Set(oauth.SessionAuthorizedUser, suite.testUsers["local_account_1"]) - ctx.Set(oauth.SessionAuthorizedAccount, suite.testAccounts["local_account_1"]) - ctx.Request = httptest.NewRequest(http.MethodPost, fmt.Sprintf("http://localhost:8080%s", user.PasswordChangePath), nil) - ctx.Request.Header.Set("accept", "application/json") - ctx.Request.Form = url.Values{ + response, code := suite.POST(user.PasswordChangePath, map[string][]string{ "old_password": {"password"}, "new_password": {"peepeepoopoo"}, + }, suite.userModule.PasswordChangePOSTHandler) + defer response.Body.Close() + + // Check response + suite.EqualValues(http.StatusBadRequest, code) + b, err := io.ReadAll(response.Body) + if err != nil { + suite.FailNow(err.Error()) } - suite.userModule.PasswordChangePOSTHandler(ctx) - - // check response - suite.EqualValues(http.StatusBadRequest, recorder.Code) - - result := recorder.Result() - defer result.Body.Close() - b, err := ioutil.ReadAll(result.Body) - suite.NoError(err) suite.Equal(`{"error":"Bad Request: password is only 94% strength, try including more special characters, using uppercase letters, using numbers or using a longer password"}`, string(b)) } diff --git a/internal/api/client/user/user.go b/internal/api/client/user/user.go index 487b9684c..6ad176a2e 100644 --- a/internal/api/client/user/user.go +++ b/internal/api/client/user/user.go @@ -29,6 +29,8 @@ const ( BasePath = "/v1/user" // PasswordChangePath is the path for POSTing a password change request. PasswordChangePath = BasePath + "/password_change" + // EmailChangePath is the path for POSTing an email address change request. + EmailChangePath = BasePath + "/email_change" ) type Module struct { @@ -42,5 +44,7 @@ func New(processor *processing.Processor) *Module { } func (m *Module) Route(attachHandler func(method string, path string, f ...gin.HandlerFunc) gin.IRoutes) { + attachHandler(http.MethodGet, BasePath, m.UserGETHandler) attachHandler(http.MethodPost, PasswordChangePath, m.PasswordChangePOSTHandler) + attachHandler(http.MethodPost, EmailChangePath, m.EmailChangePOSTHandler) } diff --git a/internal/api/client/user/user_test.go b/internal/api/client/user/user_test.go index efff89b13..808daf1a3 100644 --- a/internal/api/client/user/user_test.go +++ b/internal/api/client/user/user_test.go @@ -18,14 +18,19 @@ package user_test import ( + "net/http" + "net/http/httptest" + "net/url" + + "github.com/gin-gonic/gin" "github.com/stretchr/testify/suite" "github.com/superseriousbusiness/gotosocial/internal/api/client/user" "github.com/superseriousbusiness/gotosocial/internal/db" - "github.com/superseriousbusiness/gotosocial/internal/email" "github.com/superseriousbusiness/gotosocial/internal/federation" "github.com/superseriousbusiness/gotosocial/internal/filter/visibility" "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" "github.com/superseriousbusiness/gotosocial/internal/media" + "github.com/superseriousbusiness/gotosocial/internal/oauth" "github.com/superseriousbusiness/gotosocial/internal/processing" "github.com/superseriousbusiness/gotosocial/internal/state" "github.com/superseriousbusiness/gotosocial/internal/storage" @@ -39,7 +44,6 @@ type UserStandardTestSuite struct { tc *typeutils.Converter mediaManager *media.Manager federator *federation.Federator - emailSender email.Sender processor *processing.Processor storage *storage.Driver state state.State @@ -50,8 +54,6 @@ type UserStandardTestSuite struct { testUsers map[string]*gtsmodel.User testAccounts map[string]*gtsmodel.Account - sentEmails map[string]string - userModule *user.Module } @@ -83,9 +85,7 @@ func (suite *UserStandardTestSuite) SetupTest() { suite.mediaManager = testrig.NewTestMediaManager(&suite.state) suite.federator = testrig.NewTestFederator(&suite.state, testrig.NewTestTransportController(&suite.state, testrig.NewMockHTTPClient(nil, "../../../../testrig/media")), suite.mediaManager) - suite.sentEmails = make(map[string]string) - suite.emailSender = testrig.NewEmailSender("../../../../web/template/", suite.sentEmails) - suite.processor = testrig.NewTestProcessor(&suite.state, suite.federator, suite.emailSender, suite.mediaManager) + suite.processor = testrig.NewTestProcessor(&suite.state, suite.federator, testrig.NewEmailSender("../../../../web/template/", nil), suite.mediaManager) suite.userModule = user.New(suite.processor) testrig.StandardDBSetup(suite.db, suite.testAccounts) testrig.StandardStorageSetup(suite.storage, "../../../../testrig/media") @@ -96,3 +96,32 @@ func (suite *UserStandardTestSuite) TearDownTest() { testrig.StandardStorageTeardown(suite.storage) testrig.StopWorkers(&suite.state) } + +func (suite *UserStandardTestSuite) POST(path string, formValues map[string][]string, handler gin.HandlerFunc) (*http.Response, int) { + var ( + oauthToken = oauth.DBTokenToToken(suite.testTokens["local_account_1"]) + app = suite.testApplications["application_1"] + user = suite.testUsers["local_account_1"] + account = suite.testAccounts["local_account_1"] + target = "http://localhost:8080" + path + ) + + // Prepare context. + recorder := httptest.NewRecorder() + ctx, _ := testrig.CreateGinTestContext(recorder, nil) + ctx.Set(oauth.SessionAuthorizedApplication, app) + ctx.Set(oauth.SessionAuthorizedToken, oauthToken) + ctx.Set(oauth.SessionAuthorizedUser, user) + ctx.Set(oauth.SessionAuthorizedAccount, account) + + // Prepare request. + ctx.Request = httptest.NewRequest(http.MethodPost, target, nil) + ctx.Request.Header.Set("accept", "application/json") + ctx.Request.Form = url.Values(formValues) + + // Call the handler. + handler(ctx) + + // Return response. + return recorder.Result(), recorder.Code +} diff --git a/internal/api/client/user/userget.go b/internal/api/client/user/userget.go new file mode 100644 index 000000000..147c1dbd5 --- /dev/null +++ b/internal/api/client/user/userget.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 user + +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/oauth" +) + +// UserGETHandler swagger:operation GET /api/v1/user getUser +// +// Get your own user model. +// +// --- +// tags: +// - user +// +// produces: +// - application/json +// +// security: +// - OAuth2 Bearer: +// - read:user +// +// responses: +// '200': +// description: The requested user. +// schema: +// "$ref": "#/definitions/user" +// '400': +// description: bad request +// '401': +// description: unauthorized +// '403': +// description: forbidden +// '406': +// description: not acceptable +// '500': +// description: internal error +func (m *Module) UserGETHandler(c *gin.Context) { + authed, err := oauth.Authed(c, true, true, true, true) + if err != nil { + apiutil.ErrorHandler(c, gtserror.NewErrorUnauthorized(err, err.Error()), 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 + } + + user, errWithCode := m.processor.User().Get(c.Request.Context(), authed.User) + if errWithCode != nil { + apiutil.ErrorHandler(c, errWithCode, m.processor.InstanceGetV1) + return + } + + apiutil.JSON(c, http.StatusOK, user) +} diff --git a/internal/api/model/user.go b/internal/api/model/user.go index 1a70a90d7..9226406d6 100644 --- a/internal/api/model/user.go +++ b/internal/api/model/user.go @@ -17,6 +17,51 @@ package model +// User models fields relevant to one user. +// +// swagger:model user +type User struct { + // Database ID of this user. + // example: 01FBVD42CQ3ZEEVMW180SBX03B + ID string `json:"id"` + // Time this user was created. (ISO 8601 Datetime) + // example: 2021-07-30T09:20:25+00:00 + CreatedAt string `json:"created_at"` + // Confirmed email address of this user, if set. + // example: someone@example.org + Email string `json:"email,omitempty"` + // Unconfirmed email address of this user, if set. + // example: someone.else@somewhere.else.example.org + UnconfirmedEmail string `json:"unconfirmed_email,omitempty"` + // Reason for sign-up, if provided. + // example: Please! Pretty please! + Reason string `json:"reason,omitempty"` + // Time at which this user was last emailed, if at all. (ISO 8601 Datetime) + // example: 2021-07-30T09:20:25+00:00 + LastEmailedAt string `json:"last_emailed_at,omitempty"` + // Time at which the email given in the `email` field was confirmed, if at all. (ISO 8601 Datetime) + // example: 2021-07-30T09:20:25+00:00 + ConfirmedAt string `json:"confirmed_at,omitempty"` + // Time when the last "please confirm your email address" email was sent, if at all. (ISO 8601 Datetime) + // example: 2021-07-30T09:20:25+00:00 + ConfirmationSentAt string `json:"confirmation_sent_at,omitempty"` + // User is a moderator. + // example: false + Moderator bool `json:"moderator"` + // User is an admin. + // example: false + Admin bool `json:"admin"` + // User's account is disabled. + // example: false + Disabled bool `json:"disabled"` + // User was approved by an admin. + // example: true + Approved bool `json:"approved"` + // Time when the last "please reset your password" email was sent, if at all. (ISO 8601 Datetime) + // example: 2021-07-30T09:20:25+00:00 + ResetPasswordSentAt string `json:"reset_password_sent_at,omitempty"` +} + // PasswordChangeRequest models user password change parameters. // // swagger:parameters userPasswordChange @@ -34,3 +79,19 @@ type PasswordChangeRequest struct { // required: true NewPassword string `form:"new_password" json:"new_password" xml:"new_password" validation:"required"` } + +// EmailChangeRequest models user email change parameters. +// +// swagger:parameters userEmailChange +type EmailChangeRequest struct { + // User's current password, for verification. + // + // in: formData + // required: true + Password string `form:"password" json:"password" xml:"password" validation:"required"` + // Desired new email address. + // + // in: formData + // required: true + NewEmail string `form:"new_email" json:"new_email" xml:"new_email" validation:"required"` +} diff --git a/internal/email/confirm.go b/internal/email/confirm.go index 9f05a4f71..4fbe2a98f 100644 --- a/internal/email/confirm.go +++ b/internal/email/confirm.go @@ -26,13 +26,20 @@ const ( type ConfirmData struct { // Username to be addressed. Username string - // URL of the instance to present to the receiver. + // URL of the instance to + // present to the receiver. InstanceURL string - // Name of the instance to present to the receiver. + // Name of the instance to + // present to the receiver. InstanceName string - // Link to present to the receiver to click on and do the confirmation. - // Should be a full link with protocol eg., https://example.org/confirm_email?token=some-long-token + // Link to present to the receiver to + // click on and do the confirmation. + // Should be a full link with protocol + // eg., https://example.org/confirm_email?token=some-long-token ConfirmLink string + // Is this confirm email being sent + // because this is a new sign-up? + NewSignup bool } func (s *sender) SendConfirmEmail(toAddress string, data ConfirmData) error { diff --git a/internal/email/email_test.go b/internal/email/email_test.go index b57562cb5..aacca1b3d 100644 --- a/internal/email/email_test.go +++ b/internal/email/email_test.go @@ -40,17 +40,32 @@ func (suite *EmailTestSuite) SetupTest() { suite.sender = testrig.NewEmailSender("../../web/template/", suite.sentEmails) } +func (suite *EmailTestSuite) TestTemplateConfirmNewSignup() { + confirmData := email.ConfirmData{ + Username: "test", + InstanceURL: "https://example.org", + InstanceName: "Test Instance", + ConfirmLink: "https://example.org/confirm_email?token=ee24f71d-e615-43f9-afae-385c0799b7fa", + NewSignup: true, + } + + suite.sender.SendConfirmEmail("user@example.org", confirmData) + suite.Len(suite.sentEmails, 1) + suite.Equal("To: user@example.org\r\nFrom: test@example.org\r\nSubject: GoToSocial Email Confirmation\r\nMIME-Version: 1.0\r\nContent-Transfer-Encoding: 8bit\r\nContent-Type: text/plain; charset=\"UTF-8\"\r\n\r\nHello test!\r\n\r\nYou are receiving this mail because you've requested an account on https://example.org.\r\n\r\nTo use your account, you must confirm that this is your email address.\r\n\r\nTo confirm your email, paste the following in your browser's address bar:\r\n\r\nhttps://example.org/confirm_email?token=ee24f71d-e615-43f9-afae-385c0799b7fa\r\n\r\n---\r\n\r\nIf you believe you've been sent this email in error, feel free to ignore it, or contact the administrator of https://example.org.\r\n\r\n", suite.sentEmails["user@example.org"]) +} + func (suite *EmailTestSuite) TestTemplateConfirm() { confirmData := email.ConfirmData{ Username: "test", InstanceURL: "https://example.org", InstanceName: "Test Instance", ConfirmLink: "https://example.org/confirm_email?token=ee24f71d-e615-43f9-afae-385c0799b7fa", + NewSignup: false, } suite.sender.SendConfirmEmail("user@example.org", confirmData) suite.Len(suite.sentEmails, 1) - suite.Equal("To: user@example.org\r\nFrom: test@example.org\r\nSubject: GoToSocial Email Confirmation\r\nMIME-Version: 1.0\r\nContent-Transfer-Encoding: 8bit\r\nContent-Type: text/plain; charset=\"UTF-8\"\r\n\r\nHello test!\r\n\r\nYou are receiving this mail because you've requested an account on https://example.org.\r\n\r\nTo use your account, you must confirm that this is your email address.\r\n\r\nTo confirm your email, paste the following in your browser's address bar:\r\n\r\nhttps://example.org/confirm_email?token=ee24f71d-e615-43f9-afae-385c0799b7fa\r\n\r\n---\r\n\r\nIf you believe you've been sent this email in error, feel free to ignore it, or contact the administrator of https://example.org.\r\n\r\n", suite.sentEmails["user@example.org"]) + suite.Equal("To: user@example.org\r\nFrom: test@example.org\r\nSubject: GoToSocial Email Confirmation\r\nMIME-Version: 1.0\r\nContent-Transfer-Encoding: 8bit\r\nContent-Type: text/plain; charset=\"UTF-8\"\r\n\r\nHello test!\r\n\r\nYou are receiving this mail because you've requested an email address change on https://example.org.\r\n\r\nTo complete the change, you must confirm that this is your email address.\r\n\r\nTo confirm your email, paste the following in your browser's address bar:\r\n\r\nhttps://example.org/confirm_email?token=ee24f71d-e615-43f9-afae-385c0799b7fa\r\n\r\n---\r\n\r\nIf you believe you've been sent this email in error, feel free to ignore it, or contact the administrator of https://example.org.\r\n\r\n", suite.sentEmails["user@example.org"]) } func (suite *EmailTestSuite) TestTemplateReset() { diff --git a/internal/federation/federatingdb/delete.go b/internal/federation/federatingdb/delete.go index 7e9b66c5a..931320940 100644 --- a/internal/federation/federatingdb/delete.go +++ b/internal/federation/federatingdb/delete.go @@ -113,7 +113,7 @@ func (f *federatingDB) deleteAccount( log.Debugf(ctx, "deleting account: %s", account.URI) f.state.Workers.Federator.Queue.Push(&messages.FromFediAPI{ - APObjectType: ap.ObjectProfile, + APObjectType: ap.ActorPerson, APActivityType: ap.ActivityDelete, GTSModel: account, Receiving: receiving, diff --git a/internal/federation/federatingdb/move.go b/internal/federation/federatingdb/move.go index 59dc2529c..681a9cff2 100644 --- a/internal/federation/federatingdb/move.go +++ b/internal/federation/federatingdb/move.go @@ -171,7 +171,7 @@ func (f *federatingDB) Move(ctx context.Context, move vocab.ActivityStreamsMove) // We had a Move already or stored a new Move. // Pass back to a worker for async processing. f.state.Workers.Federator.Queue.Push(&messages.FromFediAPI{ - APObjectType: ap.ObjectProfile, + APObjectType: ap.ActorPerson, APActivityType: ap.ActivityMove, GTSModel: stubMove, Requesting: requestingAcct, diff --git a/internal/federation/federatingdb/move_test.go b/internal/federation/federatingdb/move_test.go index 3e35dc97a..e9689b1a7 100644 --- a/internal/federation/federatingdb/move_test.go +++ b/internal/federation/federatingdb/move_test.go @@ -78,7 +78,7 @@ func (suite *MoveTestSuite) TestMove() { // Should be a message heading to the processor. msg, _ := suite.getFederatorMsg(5 * time.Second) - suite.Equal(ap.ObjectProfile, msg.APObjectType) + suite.Equal(ap.ActorPerson, msg.APObjectType) suite.Equal(ap.ActivityMove, msg.APActivityType) // Stub Move should be on the message. @@ -95,7 +95,7 @@ func (suite *MoveTestSuite) TestMove() { // Should be a message heading to the processor // since this is just a straight up retry. msg, _ = suite.getFederatorMsg(5 * time.Second) - suite.Equal(ap.ObjectProfile, msg.APObjectType) + suite.Equal(ap.ActorPerson, msg.APObjectType) suite.Equal(ap.ActivityMove, msg.APActivityType) // Same as the first Move, but with a different ID. @@ -115,7 +115,7 @@ func (suite *MoveTestSuite) TestMove() { // Should be a message heading to the processor // since this is just a retry with a different ID. msg, _ = suite.getFederatorMsg(5 * time.Second) - suite.Equal(ap.ObjectProfile, msg.APObjectType) + suite.Equal(ap.ActorPerson, msg.APObjectType) suite.Equal(ap.ActivityMove, msg.APActivityType) } diff --git a/internal/federation/federatingdb/update.go b/internal/federation/federatingdb/update.go index 2f00e0867..16ecf3443 100644 --- a/internal/federation/federatingdb/update.go +++ b/internal/federation/federatingdb/update.go @@ -99,7 +99,7 @@ func (f *federatingDB) updateAccountable(ctx context.Context, receivingAcct *gts // updating of eg., avatar/header, emojis, etc. The actual db // inserts/updates will take place there. f.state.Workers.Federator.Queue.Push(&messages.FromFediAPI{ - APObjectType: ap.ObjectProfile, + APObjectType: ap.ActorPerson, APActivityType: ap.ActivityUpdate, GTSModel: requestingAcct, APObject: accountable, diff --git a/internal/processing/account/account.go b/internal/processing/account/account.go index dbcecdb0a..65bb40292 100644 --- a/internal/processing/account/account.go +++ b/internal/processing/account/account.go @@ -22,7 +22,6 @@ import ( "github.com/superseriousbusiness/gotosocial/internal/filter/visibility" "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" "github.com/superseriousbusiness/gotosocial/internal/media" - "github.com/superseriousbusiness/gotosocial/internal/oauth" "github.com/superseriousbusiness/gotosocial/internal/processing/common" "github.com/superseriousbusiness/gotosocial/internal/state" "github.com/superseriousbusiness/gotosocial/internal/text" @@ -39,7 +38,6 @@ type Processor struct { state *state.State converter *typeutils.Converter mediaManager *media.Manager - oauthServer oauth.Server filter *visibility.Filter formatter *text.Formatter federator *federation.Federator @@ -53,7 +51,6 @@ func New( state *state.State, converter *typeutils.Converter, mediaManager *media.Manager, - oauthServer oauth.Server, federator *federation.Federator, filter *visibility.Filter, parseMention gtsmodel.ParseMentionFunc, @@ -63,7 +60,6 @@ func New( state: state, converter: converter, mediaManager: mediaManager, - oauthServer: oauthServer, filter: filter, formatter: text.NewFormatter(state.DB), federator: federator, diff --git a/internal/processing/account/account_test.go b/internal/processing/account/account_test.go index 10d5f91e1..556f4d91f 100644 --- a/internal/processing/account/account_test.go +++ b/internal/processing/account/account_test.go @@ -29,7 +29,6 @@ import ( "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" "github.com/superseriousbusiness/gotosocial/internal/media" "github.com/superseriousbusiness/gotosocial/internal/messages" - "github.com/superseriousbusiness/gotosocial/internal/oauth" "github.com/superseriousbusiness/gotosocial/internal/processing" "github.com/superseriousbusiness/gotosocial/internal/processing/account" "github.com/superseriousbusiness/gotosocial/internal/processing/common" @@ -48,7 +47,6 @@ type AccountStandardTestSuite struct { storage *storage.Driver state state.State mediaManager *media.Manager - oauthServer oauth.Server transportController transport.Controller federator *federation.Federator emailSender email.Sender @@ -106,7 +104,6 @@ func (suite *AccountStandardTestSuite) SetupTest() { suite.storage = testrig.NewInMemoryStorage() suite.state.Storage = suite.storage suite.mediaManager = testrig.NewTestMediaManager(&suite.state) - suite.oauthServer = testrig.NewTestOauthServer(suite.db) suite.transportController = testrig.NewTestTransportController(&suite.state, testrig.NewMockHTTPClient(nil, "../../../testrig/media")) suite.federator = testrig.NewTestFederator(&suite.state, suite.transportController, suite.mediaManager) @@ -115,7 +112,7 @@ func (suite *AccountStandardTestSuite) SetupTest() { filter := visibility.NewFilter(&suite.state) common := common.New(&suite.state, suite.tc, suite.federator, filter) - suite.accountProcessor = account.New(&common, &suite.state, suite.tc, suite.mediaManager, suite.oauthServer, suite.federator, filter, processing.GetParseMentionFunc(&suite.state, suite.federator)) + suite.accountProcessor = account.New(&common, &suite.state, suite.tc, suite.mediaManager, suite.federator, filter, processing.GetParseMentionFunc(&suite.state, suite.federator)) testrig.StandardDBSetup(suite.db, nil) testrig.StandardStorageSetup(suite.storage, "../../../testrig/media") } diff --git a/internal/processing/account/delete.go b/internal/processing/account/delete.go index 3f051edf0..075e94544 100644 --- a/internal/processing/account/delete.go +++ b/internal/processing/account/delete.go @@ -95,23 +95,6 @@ func (p *Processor) Delete( return nil } -// DeleteSelf is like Delete, but specifically for local accounts deleting themselves. -// -// Calling DeleteSelf results in a delete message being enqueued in the processor, -// which causes side effects to occur: delete will be federated out to other instances, -// and the above Delete function will be called afterwards from the processor, to clear -// out the account's bits and bobs, and stubbify it. -func (p *Processor) DeleteSelf(ctx context.Context, account *gtsmodel.Account) gtserror.WithCode { - // Process the delete side effects asynchronously. - p.state.Workers.Client.Queue.Push(&messages.FromClientAPI{ - APObjectType: ap.ActorPerson, - APActivityType: ap.ActivityDelete, - Origin: account, - Target: account, - }) - return nil -} - // deleteUserAndTokensForAccount deletes the gtsmodel.User and // any OAuth tokens and applications for the given account. // diff --git a/internal/processing/account/update.go b/internal/processing/account/update.go index 7f2749503..ea6abed6e 100644 --- a/internal/processing/account/update.go +++ b/internal/processing/account/update.go @@ -297,7 +297,7 @@ func (p *Processor) Update(ctx context.Context, account *gtsmodel.Account, form } p.state.Workers.Client.Queue.Push(&messages.FromClientAPI{ - APObjectType: ap.ObjectProfile, + APObjectType: ap.ActorPerson, APActivityType: ap.ActivityUpdate, GTSModel: account, Origin: account, diff --git a/internal/processing/account/update_test.go b/internal/processing/account/update_test.go index ad09ff25c..a07562544 100644 --- a/internal/processing/account/update_test.go +++ b/internal/processing/account/update_test.go @@ -64,7 +64,7 @@ func (suite *AccountUpdateTestSuite) TestAccountUpdateSimple() { // Profile update. suite.Equal(ap.ActivityUpdate, msg.APActivityType) - suite.Equal(ap.ObjectProfile, msg.APObjectType) + suite.Equal(ap.ActorPerson, msg.APObjectType) // Correct account updated. if msg.Origin == nil { @@ -114,7 +114,7 @@ func (suite *AccountUpdateTestSuite) TestAccountUpdateWithMention() { // Profile update. suite.Equal(ap.ActivityUpdate, msg.APActivityType) - suite.Equal(ap.ObjectProfile, msg.APObjectType) + suite.Equal(ap.ActorPerson, msg.APObjectType) // Correct account updated. if msg.Origin == nil { @@ -170,7 +170,7 @@ func (suite *AccountUpdateTestSuite) TestAccountUpdateWithMarkdownNote() { // Profile update. suite.Equal(ap.ActivityUpdate, msg.APActivityType) - suite.Equal(ap.ObjectProfile, msg.APObjectType) + suite.Equal(ap.ActorPerson, msg.APObjectType) // Correct account updated. if msg.Origin == nil { @@ -255,7 +255,7 @@ func (suite *AccountUpdateTestSuite) TestAccountUpdateWithFields() { // Profile update. suite.Equal(ap.ActivityUpdate, msg.APActivityType) - suite.Equal(ap.ObjectProfile, msg.APObjectType) + suite.Equal(ap.ActorPerson, msg.APObjectType) // Correct account updated. if msg.Origin == nil { @@ -312,7 +312,7 @@ func (suite *AccountUpdateTestSuite) TestAccountUpdateNoteNotFields() { // Profile update. suite.Equal(ap.ActivityUpdate, msg.APActivityType) - suite.Equal(ap.ObjectProfile, msg.APObjectType) + suite.Equal(ap.ActorPerson, msg.APObjectType) // Correct account updated. if msg.Origin == nil { diff --git a/internal/processing/account_test.go b/internal/processing/account_test.go deleted file mode 100644 index 82c28115e..000000000 --- a/internal/processing/account_test.go +++ /dev/null @@ -1,106 +0,0 @@ -// 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 processing_test - -import ( - "context" - "encoding/json" - "fmt" - "io" - "testing" - "time" - - "github.com/stretchr/testify/suite" - "github.com/superseriousbusiness/activity/pub" - "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" - "github.com/superseriousbusiness/gotosocial/testrig" -) - -type AccountTestSuite struct { - ProcessingStandardTestSuite -} - -func (suite *AccountTestSuite) TestAccountDeleteLocal() { - ctx := context.Background() - deletingAccount := suite.testAccounts["local_account_1"] - followingAccount := suite.testAccounts["remote_account_1"] - - // make the following account follow the deleting account so that a delete message will be sent to it via the federating API - follow := >smodel.Follow{ - ID: "01FJ1S8DX3STJJ6CEYPMZ1M0R3", - CreatedAt: time.Now(), - UpdatedAt: time.Now(), - URI: fmt.Sprintf("%s/follow/01FJ1S8DX3STJJ6CEYPMZ1M0R3", followingAccount.URI), - AccountID: followingAccount.ID, - TargetAccountID: deletingAccount.ID, - } - err := suite.db.Put(ctx, follow) - suite.NoError(err) - - errWithCode := suite.processor.Account().DeleteSelf(ctx, suite.testAccounts["local_account_1"]) - suite.NoError(errWithCode) - - // the delete should be federated outwards to the following account's inbox - var sent []byte - delete := new(struct { - Actor string `json:"actor"` - ID string `json:"id"` - Object string `json:"object"` - To string `json:"to"` - CC string `json:"cc"` - Type string `json:"type"` - }) - - if !testrig.WaitFor(func() bool { - delivery, ok := suite.state.Workers.Delivery.Queue.Pop() - if !ok { - return false - } - if !testrig.EqualRequestURIs(delivery.Request.URL, *followingAccount.SharedInboxURI) { - panic("differing request uris") - } - sent, err = io.ReadAll(delivery.Request.Body) - if err != nil { - panic("error reading body: " + err.Error()) - } - err = json.Unmarshal(sent, delete) - if err != nil { - panic("error unmarshaling json: " + err.Error()) - } - return true - }) { - suite.FailNow("timed out waiting for message") - } - - suite.Equal(deletingAccount.URI, delete.Actor) - suite.Equal(deletingAccount.URI, delete.Object) - suite.Equal(deletingAccount.FollowersURI, delete.To) - suite.Equal(pub.PublicActivityPubIRI, delete.CC) - suite.Equal("Delete", delete.Type) - - if !testrig.WaitFor(func() bool { - dbAccount, _ := suite.db.GetAccountByID(ctx, deletingAccount.ID) - return !dbAccount.SuspendedAt.IsZero() - }) { - suite.FailNow("timed out waiting for account to be deleted") - } -} - -func TestAccountTestSuite(t *testing.T) { - suite.Run(t, &AccountTestSuite{}) -} diff --git a/internal/processing/admin/accountapprove.go b/internal/processing/admin/signupapprove.go similarity index 93% rename from internal/processing/admin/accountapprove.go rename to internal/processing/admin/signupapprove.go index c3f6409c3..84e04fa8d 100644 --- a/internal/processing/admin/accountapprove.go +++ b/internal/processing/admin/signupapprove.go @@ -30,7 +30,7 @@ import ( "github.com/superseriousbusiness/gotosocial/internal/messages" ) -func (p *Processor) AccountApprove( +func (p *Processor) SignupApprove( ctx context.Context, adminAcct *gtsmodel.Account, accountID string, @@ -55,7 +55,10 @@ func (p *Processor) AccountApprove( if !*user.Approved { // Process approval side effects asynschronously. p.state.Workers.Client.Queue.Push(&messages.FromClientAPI{ - APObjectType: ap.ActorPerson, + // Use ap.ObjectProfile here to + // distinguish this message (user model) + // from ap.ActorPerson (account model). + APObjectType: ap.ObjectProfile, APActivityType: ap.ActivityAccept, GTSModel: user, Origin: adminAcct, diff --git a/internal/processing/admin/accountapprove_test.go b/internal/processing/admin/signupapprove_test.go similarity index 97% rename from internal/processing/admin/accountapprove_test.go rename to internal/processing/admin/signupapprove_test.go index b6ca1ed32..58b8fdade 100644 --- a/internal/processing/admin/accountapprove_test.go +++ b/internal/processing/admin/signupapprove_test.go @@ -42,7 +42,7 @@ func (suite *AdminApproveTestSuite) TestApprove() { *targetUser = *suite.testUsers["unconfirmed_account"] // Approve the sign-up. - acct, errWithCode := suite.adminProcessor.AccountApprove( + acct, errWithCode := suite.adminProcessor.SignupApprove( ctx, adminAcct, targetAcct.ID, diff --git a/internal/processing/admin/accountreject.go b/internal/processing/admin/signupreject.go similarity index 95% rename from internal/processing/admin/accountreject.go rename to internal/processing/admin/signupreject.go index 8cb54cad6..39eff0b87 100644 --- a/internal/processing/admin/accountreject.go +++ b/internal/processing/admin/signupreject.go @@ -30,7 +30,7 @@ import ( "github.com/superseriousbusiness/gotosocial/internal/messages" ) -func (p *Processor) AccountReject( +func (p *Processor) SignupReject( ctx context.Context, adminAcct *gtsmodel.Account, accountID string, @@ -102,7 +102,10 @@ func (p *Processor) AccountReject( // Process rejection side effects asynschronously. p.state.Workers.Client.Queue.Push(&messages.FromClientAPI{ - APObjectType: ap.ActorPerson, + // Use ap.ObjectProfile here to + // distinguish this message (user model) + // from ap.ActorPerson (account model). + APObjectType: ap.ObjectProfile, APActivityType: ap.ActivityReject, GTSModel: deniedUser, Origin: adminAcct, diff --git a/internal/processing/admin/accountreject_test.go b/internal/processing/admin/signupreject_test.go similarity index 96% rename from internal/processing/admin/accountreject_test.go rename to internal/processing/admin/signupreject_test.go index 071401afc..cb6a25eb3 100644 --- a/internal/processing/admin/accountreject_test.go +++ b/internal/processing/admin/signupreject_test.go @@ -42,7 +42,7 @@ func (suite *AdminRejectTestSuite) TestReject() { message = "Too stinky." ) - acct, errWithCode := suite.adminProcessor.AccountReject( + acct, errWithCode := suite.adminProcessor.SignupReject( ctx, adminAcct, targetAcct.ID, @@ -104,7 +104,7 @@ func (suite *AdminRejectTestSuite) TestRejectRemote() { ) // Try to reject a remote account. - _, err := suite.adminProcessor.AccountReject( + _, err := suite.adminProcessor.SignupReject( ctx, adminAcct, targetAcct.ID, @@ -126,7 +126,7 @@ func (suite *AdminRejectTestSuite) TestRejectApproved() { ) // Try to reject an already-approved account. - _, err := suite.adminProcessor.AccountReject( + _, err := suite.adminProcessor.SignupReject( ctx, adminAcct, targetAcct.ID, diff --git a/internal/processing/processor.go b/internal/processing/processor.go index 8a18bc45e..1e7997b8f 100644 --- a/internal/processing/processor.go +++ b/internal/processing/processor.go @@ -180,13 +180,13 @@ func NewProcessor( // Start with sub processors that will // be required by the workers processor. common := common.New(state, converter, federator, filter) - processor.account = account.New(&common, state, converter, mediaManager, oauthServer, federator, filter, parseMentionFunc) + processor.account = account.New(&common, state, converter, mediaManager, federator, filter, parseMentionFunc) processor.media = media.New(state, converter, mediaManager, federator.TransportController()) processor.stream = stream.New(state, oauthServer) // Instantiate the rest of the sub // processors + pin them to this struct. - processor.account = account.New(&common, state, converter, mediaManager, oauthServer, federator, filter, parseMentionFunc) + processor.account = account.New(&common, state, converter, mediaManager, federator, filter, parseMentionFunc) processor.admin = admin.New(state, cleaner, converter, mediaManager, federator.TransportController(), emailSender) processor.fedi = fedi.New(state, &common, converter, federator, filter) processor.filtersv1 = filtersv1.New(state, converter) @@ -198,7 +198,7 @@ func NewProcessor( processor.timeline = timeline.New(state, converter, filter) processor.search = search.New(state, federator, converter, filter) processor.status = status.New(state, &common, &processor.polls, federator, converter, filter, parseMentionFunc) - processor.user = user.New(state, emailSender) + processor.user = user.New(state, converter, oauthServer, emailSender) // Workers processor handles asynchronous // worker jobs; instantiate it separately diff --git a/internal/processing/report/create.go b/internal/processing/report/create.go index cac600006..dd31a8798 100644 --- a/internal/processing/report/create.go +++ b/internal/processing/report/create.go @@ -92,7 +92,7 @@ func (p *Processor) Create(ctx context.Context, account *gtsmodel.Account, form } p.state.Workers.Client.Queue.Push(&messages.FromClientAPI{ - APObjectType: ap.ObjectProfile, + APObjectType: ap.ActorPerson, APActivityType: ap.ActivityFlag, GTSModel: report, Origin: account, diff --git a/internal/processing/account/create.go b/internal/processing/user/create.go similarity index 94% rename from internal/processing/account/create.go rename to internal/processing/user/create.go index 761165356..0d848583e 100644 --- a/internal/processing/account/create.go +++ b/internal/processing/user/create.go @@ -15,7 +15,7 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -package account +package user import ( "context" @@ -32,10 +32,9 @@ import ( "github.com/superseriousbusiness/oauth2/v4" ) -// Create processes the given form for creating a new account, -// returning a new user (with attached account) if successful. +// Create processes the given form for creating a new user+account. // -// App should be the app used to create the account. +// App should be the app used to create the user+account. // If nil, the instance app will be used. // // Precondition: the form's fields should have already been @@ -124,9 +123,12 @@ func (p *Processor) Create( return nil, gtserror.NewErrorInternalError(err) } - // There are side effects for creating a new account + // There are side effects for creating a new user+account // (confirmation emails etc), perform these async. p.state.Workers.Client.Queue.Push(&messages.FromClientAPI{ + // Use ap.ObjectProfile here to + // distinguish this message (user model) + // from ap.ActorPerson (account model). APObjectType: ap.ObjectProfile, APActivityType: ap.ActivityCreate, GTSModel: user, diff --git a/internal/processing/user/delete.go b/internal/processing/user/delete.go new file mode 100644 index 000000000..9783010ef --- /dev/null +++ b/internal/processing/user/delete.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 user + +import ( + "context" + + "github.com/superseriousbusiness/gotosocial/internal/ap" + "github.com/superseriousbusiness/gotosocial/internal/gtserror" + "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" + "github.com/superseriousbusiness/gotosocial/internal/messages" +) + +// DeleteSelf is like Account.Delete, but specifically +// for local user+accounts deleting themselves. +// +// Calling DeleteSelf results in a delete message being enqueued in the processor, +// which causes side effects to occur: delete will be federated out to other instances, +// and the above Delete function will be called afterwards from the processor, to clear +// out the account's bits and bobs, and stubbify it. +func (p *Processor) DeleteSelf(ctx context.Context, account *gtsmodel.Account) gtserror.WithCode { + // Process the delete side effects asynchronously. + p.state.Workers.Client.Queue.Push(&messages.FromClientAPI{ + // Use ap.ObjectProfile here to + // distinguish this message (user model) + // from ap.ActorPerson (account model). + APObjectType: ap.ObjectProfile, + APActivityType: ap.ActivityDelete, + Origin: account, + Target: account, + }) + return nil +} diff --git a/internal/processing/user/email.go b/internal/processing/user/email.go index 2b27c6c92..ea9dbb64c 100644 --- a/internal/processing/user/email.go +++ b/internal/processing/user/email.go @@ -23,11 +23,92 @@ import ( "fmt" "time" + "github.com/superseriousbusiness/gotosocial/internal/ap" + 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/gtsmodel" + "github.com/superseriousbusiness/gotosocial/internal/messages" + "github.com/superseriousbusiness/gotosocial/internal/validate" + "golang.org/x/crypto/bcrypt" ) +// EmailChange processes an email address change request for the given user. +func (p *Processor) EmailChange( + ctx context.Context, + user *gtsmodel.User, + password string, + newEmail string, +) (*apimodel.User, gtserror.WithCode) { + // Ensure provided password is correct. + if err := bcrypt.CompareHashAndPassword([]byte(user.EncryptedPassword), []byte(password)); err != nil { + err := gtserror.Newf("%w", err) + return nil, gtserror.NewErrorUnauthorized(err, "password was incorrect") + } + + // Ensure new email address is valid. + if err := validate.Email(newEmail); err != nil { + return nil, gtserror.NewErrorBadRequest(err, err.Error()) + } + + // Ensure new email address is different + // from current email address. + if newEmail == user.Email { + const help = "new email address cannot be the same as current email address" + err := gtserror.New(help) + return nil, gtserror.NewErrorBadRequest(err, help) + } + + if newEmail == user.UnconfirmedEmail { + const help = "you already have an email change request pending for given email address" + err := gtserror.New(help) + return nil, gtserror.NewErrorBadRequest(err, help) + } + + // Ensure this address isn't already used by another account. + emailAvailable, err := p.state.DB.IsEmailAvailable(ctx, newEmail) + if err != nil { + err := gtserror.Newf("db error checking email availability: %w", err) + return nil, gtserror.NewErrorInternalError(err) + } + + if !emailAvailable { + const help = "new email address is already in use on this instance" + err := gtserror.New(help) + return nil, gtserror.NewErrorConflict(err, help) + } + + // Set new email address on user. + user.UnconfirmedEmail = newEmail + if err := p.state.DB.UpdateUser( + ctx, user, + "unconfirmed_email", + ); err != nil { + err := gtserror.Newf("db error updating user: %w", err) + return nil, gtserror.NewErrorInternalError(err) + } + + // Ensure user populated (we need account). + if err := p.state.DB.PopulateUser(ctx, user); err != nil { + err := gtserror.Newf("db error populating user: %w", err) + return nil, gtserror.NewErrorInternalError(err) + } + + // Add email sending job to the queue. + p.state.Workers.Client.Queue.Push(&messages.FromClientAPI{ + // Use ap.ObjectProfile here to + // distinguish this message (user model) + // from ap.ActorPerson (account model). + APObjectType: ap.ObjectProfile, + APActivityType: ap.ActivityUpdate, + GTSModel: user, + Origin: user.Account, + Target: user.Account, + }) + + return p.converter.UserToAPIUser(ctx, user), nil +} + // EmailGetUserForConfirmToken retrieves the user (with account) from // the database for the given "confirm your email" token string. func (p *Processor) EmailGetUserForConfirmToken(ctx context.Context, token string) (*gtsmodel.User, gtserror.WithCode) { diff --git a/internal/processing/user/get.go b/internal/processing/user/get.go new file mode 100644 index 000000000..9b19189a8 --- /dev/null +++ b/internal/processing/user/get.go @@ -0,0 +1,32 @@ +// 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 user + +import ( + "context" + + apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model" + "github.com/superseriousbusiness/gotosocial/internal/gtserror" + "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" +) + +// Get returns the API model of the given user. +// Should only be served if user == the user doing the request. +func (p *Processor) Get(ctx context.Context, user *gtsmodel.User) (*apimodel.User, gtserror.WithCode) { + return p.converter.UserToAPIUser(ctx, user), nil +} diff --git a/internal/processing/user/user.go b/internal/processing/user/user.go index 2fbb9c888..cd8ab9900 100644 --- a/internal/processing/user/user.go +++ b/internal/processing/user/user.go @@ -19,18 +19,28 @@ package user import ( "github.com/superseriousbusiness/gotosocial/internal/email" + "github.com/superseriousbusiness/gotosocial/internal/oauth" "github.com/superseriousbusiness/gotosocial/internal/state" + "github.com/superseriousbusiness/gotosocial/internal/typeutils" ) type Processor struct { state *state.State + converter *typeutils.Converter + oauthServer oauth.Server emailSender email.Sender } -// New returns a new user processor -func New(state *state.State, emailSender email.Sender) Processor { +// New returns a new user processor. +func New( + state *state.State, + converter *typeutils.Converter, + oauthServer oauth.Server, + emailSender email.Sender, +) Processor { return Processor{ state: state, + converter: converter, emailSender: emailSender, } } diff --git a/internal/processing/user/user_test.go b/internal/processing/user/user_test.go index 61e8f8b05..e473c5bb0 100644 --- a/internal/processing/user/user_test.go +++ b/internal/processing/user/user_test.go @@ -24,6 +24,7 @@ import ( "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" "github.com/superseriousbusiness/gotosocial/internal/processing/user" "github.com/superseriousbusiness/gotosocial/internal/state" + "github.com/superseriousbusiness/gotosocial/internal/typeutils" "github.com/superseriousbusiness/gotosocial/testrig" ) @@ -53,7 +54,7 @@ func (suite *UserStandardTestSuite) SetupTest() { suite.emailSender = testrig.NewEmailSender("../../../web/template/", suite.sentEmails) suite.testUsers = testrig.NewTestUsers() - suite.user = user.New(&suite.state, suite.emailSender) + suite.user = user.New(&suite.state, typeutils.NewConverter(&suite.state), testrig.NewTestOauthServer(suite.db), suite.emailSender) testrig.StandardDBSetup(suite.db, nil) } diff --git a/internal/processing/workers/fromclientapi.go b/internal/processing/workers/fromclientapi.go index a9e33892f..89b8f546f 100644 --- a/internal/processing/workers/fromclientapi.go +++ b/internal/processing/workers/fromclientapi.go @@ -71,9 +71,9 @@ func (p *Processor) ProcessFromClientAPI(ctx context.Context, cMsg *messages.Fro case ap.ActivityCreate: switch cMsg.APObjectType { - // CREATE PROFILE/ACCOUNT - case ap.ObjectProfile, ap.ActorPerson: - return p.clientAPI.CreateAccount(ctx, cMsg) + // CREATE USER (ie., new user+account sign-up) + case ap.ObjectProfile: + return p.clientAPI.CreateUser(ctx, cMsg) // CREATE NOTE/STATUS case ap.ObjectNote: @@ -111,13 +111,17 @@ func (p *Processor) ProcessFromClientAPI(ctx context.Context, cMsg *messages.Fro case ap.ObjectNote: return p.clientAPI.UpdateStatus(ctx, cMsg) - // UPDATE PROFILE/ACCOUNT - case ap.ObjectProfile, ap.ActorPerson: + // UPDATE ACCOUNT (ie., bio, settings, etc) + case ap.ActorPerson: return p.clientAPI.UpdateAccount(ctx, cMsg) // UPDATE A FLAG/REPORT (mark as resolved/closed) case ap.ActivityFlag: return p.clientAPI.UpdateReport(ctx, cMsg) + + // UPDATE USER (ie., email address) + case ap.ObjectProfile: + return p.clientAPI.UpdateUser(ctx, cMsg) } // ACCEPT SOMETHING @@ -128,9 +132,9 @@ func (p *Processor) ProcessFromClientAPI(ctx context.Context, cMsg *messages.Fro case ap.ActivityFollow: return p.clientAPI.AcceptFollow(ctx, cMsg) - // ACCEPT PROFILE/ACCOUNT (sign-up) - case ap.ObjectProfile, ap.ActorPerson: - return p.clientAPI.AcceptAccount(ctx, cMsg) + // ACCEPT USER (ie., new user+account sign-up) + case ap.ObjectProfile: + return p.clientAPI.AcceptUser(ctx, cMsg) } // REJECT SOMETHING @@ -141,9 +145,9 @@ func (p *Processor) ProcessFromClientAPI(ctx context.Context, cMsg *messages.Fro case ap.ActivityFollow: return p.clientAPI.RejectFollowRequest(ctx, cMsg) - // REJECT PROFILE/ACCOUNT (sign-up) - case ap.ObjectProfile, ap.ActorPerson: - return p.clientAPI.RejectAccount(ctx, cMsg) + // REJECT USER (ie., new user+account sign-up) + case ap.ObjectProfile: + return p.clientAPI.RejectUser(ctx, cMsg) } // UNDO SOMETHING @@ -175,17 +179,17 @@ func (p *Processor) ProcessFromClientAPI(ctx context.Context, cMsg *messages.Fro case ap.ObjectNote: return p.clientAPI.DeleteStatus(ctx, cMsg) - // DELETE PROFILE/ACCOUNT - case ap.ObjectProfile, ap.ActorPerson: - return p.clientAPI.DeleteAccount(ctx, cMsg) + // DELETE REMOTE ACCOUNT or LOCAL USER+ACCOUNT + case ap.ActorPerson, ap.ObjectProfile: + return p.clientAPI.DeleteAccountOrUser(ctx, cMsg) } // FLAG/REPORT SOMETHING case ap.ActivityFlag: switch cMsg.APObjectType { //nolint:gocritic - // FLAG/REPORT A PROFILE - case ap.ObjectProfile: + // FLAG/REPORT ACCOUNT + case ap.ActorPerson: return p.clientAPI.ReportAccount(ctx, cMsg) } @@ -193,8 +197,8 @@ func (p *Processor) ProcessFromClientAPI(ctx context.Context, cMsg *messages.Fro case ap.ActivityMove: switch cMsg.APObjectType { //nolint:gocritic - // MOVE PROFILE/ACCOUNT - case ap.ObjectProfile, ap.ActorPerson: + // MOVE ACCOUNT + case ap.ActorPerson: return p.clientAPI.MoveAccount(ctx, cMsg) } } @@ -202,7 +206,7 @@ func (p *Processor) ProcessFromClientAPI(ctx context.Context, cMsg *messages.Fro return gtserror.Newf("unhandled: %s %s", cMsg.APActivityType, cMsg.APObjectType) } -func (p *clientAPI) CreateAccount(ctx context.Context, cMsg *messages.FromClientAPI) error { +func (p *clientAPI) CreateUser(ctx context.Context, cMsg *messages.FromClientAPI) error { newUser, ok := cMsg.GTSModel.(*gtsmodel.User) if !ok { return gtserror.Newf("%T not parseable as *gtsmodel.User", cMsg.GTSModel) @@ -219,7 +223,7 @@ func (p *clientAPI) CreateAccount(ctx context.Context, cMsg *messages.FromClient } // Send "please confirm your address" email to the new user. - if err := p.surface.emailUserPleaseConfirm(ctx, newUser); err != nil { + if err := p.surface.emailUserPleaseConfirm(ctx, newUser, true); err != nil { log.Errorf(ctx, "error emailing confirm: %v", err) } @@ -479,6 +483,22 @@ func (p *clientAPI) UpdateReport(ctx context.Context, cMsg *messages.FromClientA return nil } +func (p *clientAPI) UpdateUser(ctx context.Context, cMsg *messages.FromClientAPI) error { + user, ok := cMsg.GTSModel.(*gtsmodel.User) + if !ok { + return gtserror.Newf("cannot cast %T -> *gtsmodel.User", cMsg.GTSModel) + } + + // The only possible "UpdateUser" action is to update the + // user's email address, so we can safely assume by this + // point that a new unconfirmed email address has been set. + if err := p.surface.emailUserPleaseConfirm(ctx, user, false); err != nil { + log.Errorf(ctx, "error emailing report closed: %v", err) + } + + return nil +} + func (p *clientAPI) AcceptFollow(ctx context.Context, cMsg *messages.FromClientAPI) error { follow, ok := cMsg.GTSModel.(*gtsmodel.Follow) if !ok { @@ -669,7 +689,7 @@ func (p *clientAPI) DeleteStatus(ctx context.Context, cMsg *messages.FromClientA return nil } -func (p *clientAPI) DeleteAccount(ctx context.Context, cMsg *messages.FromClientAPI) error { +func (p *clientAPI) DeleteAccountOrUser(ctx context.Context, cMsg *messages.FromClientAPI) error { // The originID of the delete, one of: // - ID of a domain block, for which // this account delete is a side effect. @@ -768,7 +788,7 @@ func (p *clientAPI) MoveAccount(ctx context.Context, cMsg *messages.FromClientAP return nil } -func (p *clientAPI) AcceptAccount(ctx context.Context, cMsg *messages.FromClientAPI) error { +func (p *clientAPI) AcceptUser(ctx context.Context, cMsg *messages.FromClientAPI) error { newUser, ok := cMsg.GTSModel.(*gtsmodel.User) if !ok { return gtserror.Newf("%T not parseable as *gtsmodel.User", cMsg.GTSModel) @@ -791,7 +811,7 @@ func (p *clientAPI) AcceptAccount(ctx context.Context, cMsg *messages.FromClient return nil } -func (p *clientAPI) RejectAccount(ctx context.Context, cMsg *messages.FromClientAPI) error { +func (p *clientAPI) RejectUser(ctx context.Context, cMsg *messages.FromClientAPI) error { deniedUser, ok := cMsg.GTSModel.(*gtsmodel.DeniedUser) if !ok { return gtserror.Newf("%T not parseable as *gtsmodel.DeniedUser", cMsg.GTSModel) diff --git a/internal/processing/workers/fromfediapi.go b/internal/processing/workers/fromfediapi.go index 49756a47a..ac4003f6a 100644 --- a/internal/processing/workers/fromfediapi.go +++ b/internal/processing/workers/fromfediapi.go @@ -115,8 +115,8 @@ func (p *Processor) ProcessFromFediAPI(ctx context.Context, fMsg *messages.FromF case ap.ObjectNote: return p.fediAPI.UpdateStatus(ctx, fMsg) - // UPDATE PROFILE/ACCOUNT - case ap.ObjectProfile: + // UPDATE ACCOUNT + case ap.ActorPerson: return p.fediAPI.UpdateAccount(ctx, fMsg) } @@ -137,17 +137,17 @@ func (p *Processor) ProcessFromFediAPI(ctx context.Context, fMsg *messages.FromF case ap.ObjectNote: return p.fediAPI.DeleteStatus(ctx, fMsg) - // DELETE PROFILE/ACCOUNT - case ap.ObjectProfile: + // DELETE ACCOUNT + case ap.ActorPerson: return p.fediAPI.DeleteAccount(ctx, fMsg) } // MOVE SOMETHING case ap.ActivityMove: - // MOVE PROFILE/ACCOUNT + // MOVE ACCOUNT // fromfediapi_move.go. - if fMsg.APObjectType == ap.ObjectProfile { + if fMsg.APObjectType == ap.ActorPerson { return p.fediAPI.MoveAccount(ctx, fMsg) } } diff --git a/internal/processing/workers/fromfediapi_test.go b/internal/processing/workers/fromfediapi_test.go index 8429fe17c..e69e2c7a8 100644 --- a/internal/processing/workers/fromfediapi_test.go +++ b/internal/processing/workers/fromfediapi_test.go @@ -337,7 +337,7 @@ func (suite *FromFediAPITestSuite) TestProcessAccountDelete() { // now they are mufos! err = testStructs.Processor.Workers().ProcessFromFediAPI(ctx, &messages.FromFediAPI{ - APObjectType: ap.ObjectProfile, + APObjectType: ap.ActorPerson, APActivityType: ap.ActivityDelete, GTSModel: deletedAccount, Receiving: receivingAccount, @@ -613,7 +613,7 @@ func (suite *FromFediAPITestSuite) TestMoveAccount() { // Process the Move. err := testStructs.Processor.Workers().ProcessFromFediAPI(ctx, &messages.FromFediAPI{ - APObjectType: ap.ObjectProfile, + APObjectType: ap.ActorPerson, APActivityType: ap.ActivityMove, GTSModel: >smodel.Move{ OriginURI: requestingAcct.URI, diff --git a/internal/processing/workers/surfaceemail.go b/internal/processing/workers/surfaceemail.go index 5f8ae1823..d0a40e6ba 100644 --- a/internal/processing/workers/surfaceemail.go +++ b/internal/processing/workers/surfaceemail.go @@ -74,7 +74,10 @@ func (s *Surface) emailUserReportClosed(ctx context.Context, report *gtsmodel.Re // emailUserPleaseConfirm emails the given user // to ask them to confirm their email address. -func (s *Surface) emailUserPleaseConfirm(ctx context.Context, user *gtsmodel.User) error { +// +// If newSignup is true, template will be geared +// towards someone who just created an account. +func (s *Surface) emailUserPleaseConfirm(ctx context.Context, user *gtsmodel.User, newSignup bool) error { if user.UnconfirmedEmail == "" || user.UnconfirmedEmail == user.Email { // User has already confirmed this @@ -104,6 +107,7 @@ func (s *Surface) emailUserPleaseConfirm(ctx context.Context, user *gtsmodel.Use InstanceURL: instance.URI, InstanceName: instance.Title, ConfirmLink: confirmLink, + NewSignup: newSignup, }, ); err != nil { return err diff --git a/internal/typeutils/internaltofrontend.go b/internal/typeutils/internaltofrontend.go index 68db61128..e1380fc9e 100644 --- a/internal/typeutils/internaltofrontend.go +++ b/internal/typeutils/internaltofrontend.go @@ -63,6 +63,44 @@ func toMastodonVersion(in string) string { return instanceMastodonVersion + "+" + strings.ReplaceAll(in, " ", "-") } +// UserToAPIUser converts a *gtsmodel.User to an API +// representation suitable for serving to that user. +// +// Contains sensitive info so should only +// ever be served to the user themself. +func (c *Converter) UserToAPIUser(ctx context.Context, u *gtsmodel.User) *apimodel.User { + user := &apimodel.User{ + ID: u.ID, + CreatedAt: util.FormatISO8601(u.CreatedAt), + Email: u.Email, + UnconfirmedEmail: u.UnconfirmedEmail, + Reason: u.Reason, + Moderator: *u.Moderator, + Admin: *u.Admin, + Disabled: *u.Disabled, + Approved: *u.Approved, + } + + // Zero-able dates. + if !u.LastEmailedAt.IsZero() { + user.LastEmailedAt = util.FormatISO8601(u.LastEmailedAt) + } + + if !u.ConfirmedAt.IsZero() { + user.ConfirmedAt = util.FormatISO8601(u.ConfirmedAt) + } + + if !u.ConfirmationSentAt.IsZero() { + user.ConfirmationSentAt = util.FormatISO8601(u.ConfirmationSentAt) + } + + if !u.ResetPasswordSentAt.IsZero() { + user.ResetPasswordSentAt = util.FormatISO8601(u.ResetPasswordSentAt) + } + + return user +} + // AppToAPIAppSensitive takes a db model application as a param, and returns a populated apitype application, or an error // if something goes wrong. The returned application should be ready to serialize on an API level, and may have sensitive fields // (such as client id and client secret), so serve it only to an authorized user who should have permission to see it. diff --git a/internal/web/signup.go b/internal/web/signup.go index 691469dff..bc30749f8 100644 --- a/internal/web/signup.go +++ b/internal/web/signup.go @@ -108,9 +108,9 @@ func (m *Module) signupPOSTHandler(c *gin.Context) { } form.IP = signUpIP - // We have all the info we need, call account create + // We have all the info we need, call user+account create // (this will also trigger side effects like sending emails etc). - user, errWithCode := m.processor.Account().Create( + user, errWithCode := m.processor.User().Create( c.Request.Context(), // nil to use // instance app. diff --git a/web/source/settings/lib/query/user/index.ts b/web/source/settings/lib/query/user/index.ts index 8c4e5215b..1f9070bfb 100644 --- a/web/source/settings/lib/query/user/index.ts +++ b/web/source/settings/lib/query/user/index.ts @@ -24,6 +24,7 @@ import type { UpdateAliasesFormData } from "../../types/migration"; import type { Theme } from "../../types/theme"; +import { User } from "../../types/user"; const extended = gtsApi.injectEndpoints({ endpoints: (build) => ({ @@ -37,6 +38,9 @@ const extended = gtsApi.injectEndpoints({ }), ...replaceCacheOnMutation("verifyCredentials") }), + user: build.query({ + query: () => ({url: `/api/v1/user`}) + }), passwordChange: build.mutation({ query: (data) => ({ method: "POST", @@ -44,6 +48,14 @@ const extended = gtsApi.injectEndpoints({ body: data }) }), + emailChange: build.mutation({ + query: (data) => ({ + method: "POST", + url: `/api/v1/user/email_change`, + body: data + }), + ...replaceCacheOnMutation("user") + }), aliasAccount: build.mutation({ async queryFn(formData, _api, _extraOpts, fetchWithBQ) { // Pull entries out from the hooked form. @@ -78,7 +90,9 @@ const extended = gtsApi.injectEndpoints({ export const { useUpdateCredentialsMutation, + useUserQuery, usePasswordChangeMutation, + useEmailChangeMutation, useAliasAccountMutation, useMoveAccountMutation, useAccountThemesQuery, diff --git a/web/source/settings/lib/types/user.ts b/web/source/settings/lib/types/user.ts new file mode 100644 index 000000000..92210d5d3 --- /dev/null +++ b/web/source/settings/lib/types/user.ts @@ -0,0 +1,34 @@ +/* + 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 . +*/ + +export interface User { + id: string; + created_at: string; + email?: string; + unconfirmed_email?: string; + reason?: string; + last_emailed_at?: string; + confirmed_at?: string; + confirmation_sent_at?: string; + moderator: boolean; + admin: boolean; + disabled: boolean; + approved: boolean; + reset_password_sent_at?: string; +} diff --git a/web/source/settings/views/user/settings.tsx b/web/source/settings/views/user/settings.tsx index cbd973706..a27cc1ba3 100644 --- a/web/source/settings/views/user/settings.tsx +++ b/web/source/settings/views/user/settings.tsx @@ -25,7 +25,9 @@ import FormWithData from "../../lib/form/form-with-data"; import Languages from "../../components/languages"; import MutationButton from "../../components/form/mutation-button"; import { useVerifyCredentialsQuery } from "../../lib/query/oauth"; -import { usePasswordChangeMutation, useUpdateCredentialsMutation } from "../../lib/query/user"; +import { useEmailChangeMutation, usePasswordChangeMutation, useUpdateCredentialsMutation, useUserQuery } from "../../lib/query/user"; +import Loading from "../../components/loading"; +import { User } from "../../lib/types/user"; export default function UserSettings() { return ( @@ -98,6 +100,7 @@ function UserSettingsForm({ data }) { /> + ); } @@ -168,3 +171,105 @@ function PasswordChange() { ); } + +function EmailChange() { + // Load existing user data. + const { data: user, isFetching, isLoading } = useUserQuery(); + if (isFetching || isLoading) { + return ; + } + + if (user === undefined) { + throw "could not fetch user"; + } + + return ; +} + +function EmailChangeForm({user}: {user: User}) { + const form = { + currentEmail: useTextInput("current_email", { + defaultValue: user.email, + nosubmit: true + }), + newEmail: useTextInput("new_email", { + validator: (value: string | undefined) => { + if (!value) { + return ""; + } + + if (value.toLowerCase() === user.email?.toLowerCase()) { + return "cannot change to your existing address"; + } + + if (value.toLowerCase() === user.unconfirmed_email?.toLowerCase()) { + return "you already have a pending email address change to this address"; + } + + return ""; + }, + }), + password: useTextInput("password"), + }; + const [submitForm, result] = useFormSubmit(form, useEmailChangeMutation()); + + return ( +

    + + + { user.unconfirmed_email && <> +
    + + + You currently have a pending email address + change to the address: {user.unconfirmed_email} +
    + To confirm {user.unconfirmed_email} as your new + address for this account, please check your email inbox. +
    +
    + } + + + + + + + + + + ); +} diff --git a/web/template/email_confirm.tmpl b/web/template/email_confirm.tmpl index b223e9e40..167ffcdf7 100644 --- a/web/template/email_confirm.tmpl +++ b/web/template/email_confirm.tmpl @@ -18,11 +18,15 @@ */ -}} Hello {{ .Username -}}! - +{{ if .NewSignup }} You are receiving this mail because you've requested an account on {{ .InstanceURL -}}. To use your account, you must confirm that this is your email address. +{{ else }} +You are receiving this mail because you've requested an email address change on {{ .InstanceURL -}}. +To complete the change, you must confirm that this is your email address. +{{ end }} To confirm your email, paste the following in your browser's address bar: {{ .ConfirmLink }}