/* 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 { useTextInput, useBoolInput } from "../../lib/form"; import useFormSubmit from "../../lib/form/submit"; import { Select, TextInput, Checkbox } from "../../components/form/inputs"; 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 { useEmailChangeMutation, usePasswordChangeMutation, useUpdateCredentialsMutation, useUserQuery } from "../../lib/query/user"; import Loading from "../../components/loading"; import { User } from "../../lib/types/user"; import { useInstanceV1Query } from "../../lib/query/gts-api"; export default function UserSettings() { return ( ); } function UserSettingsForm({ data }) { /* form keys - string source[privacy] - bool source[sensitive] - string source[language] - string source[status_content_type] */ const form = { defaultPrivacy: useTextInput("source[privacy]", { source: data, defaultValue: "unlisted" }), isSensitive: useBoolInput("source[sensitive]", { source: data }), language: useTextInput("source[language]", { source: data, valueSelector: (s) => s.source.language?.toUpperCase() ?? "EN" }), statusContentType: useTextInput("source[status_content_type]", { source: data, defaultValue: "text/plain" }), }; const [submitForm, result] = useFormSubmit(form, useUpdateCredentialsMutation()); return ( <>

Account Settings

Post Settings

Learn more about these settings (opens in a new tab)
); } function PasswordChange() { // Load instance data. const { data: instance, isFetching: isFetchingInstance, isLoading: isLoadingInstance } = useInstanceV1Query(); if (isFetchingInstance || isLoadingInstance) { return ; } if (instance === undefined) { throw "could not fetch instance"; } return ; } function PasswordChangeForm({ oidcEnabled }: { oidcEnabled?: boolean }) { const form = { oldPassword: useTextInput("old_password"), newPassword: useTextInput("new_password", { validator(val) { if (val != "" && val == form.oldPassword.value) { return "New password same as old password"; } return ""; } }) }; const verifyNewPassword = useTextInput("verifyNewPassword", { validator(val) { if (val != "" && val != form.newPassword.value) { return "Passwords do not match"; } return ""; } }); const [submitForm, result] = useFormSubmit(form, usePasswordChangeMutation()); return (

Change Password

{ oidcEnabled &&

This instance is running with OIDC as its authorization + identity provider.
This means you cannot change your password using this settings panel.
To change your password, you should instead contact your OIDC provider.

} Learn more about this (opens in a new tab)
); } function EmailChange() { // Load instance data. const { data: instance, isFetching: isFetchingInstance, isLoading: isLoadingInstance } = useInstanceV1Query(); // Load user data. const { data: user, isFetching: isFetchingUser, isLoading: isLoadingUser } = useUserQuery(); if ( (isFetchingInstance || isLoadingInstance) || (isFetchingUser || isLoadingUser) ) { return ; } if (user === undefined) { throw "could not fetch user"; } if (instance === undefined) { throw "could not fetch instance"; } return ; } function EmailChangeForm({user, oidcEnabled}: { user: User, oidcEnabled?: boolean }) { 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 (

Change Email

{ oidcEnabled &&

This instance is running with OIDC as its authorization + identity provider.
You can still change your email address using this settings panel, but it will only affect which address GoToSocial uses to contact you, not the email address you use to log in.
To change the email address you use to log in, contact your OIDC provider.

} Learn more about this (opens in a new tab)
{ (user.unconfirmed_email && user.unconfirmed_email !== user.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.
} ); }