summaryrefslogtreecommitdiff
path: root/web/source
diff options
context:
space:
mode:
Diffstat (limited to 'web/source')
-rw-r--r--web/source/settings/lib/types/instance.ts1
-rw-r--r--web/source/settings/views/user/settings.tsx72
2 files changed, 66 insertions, 7 deletions
diff --git a/web/source/settings/lib/types/instance.ts b/web/source/settings/lib/types/instance.ts
index 4c6f5061b..11f75032c 100644
--- a/web/source/settings/lib/types/instance.ts
+++ b/web/source/settings/lib/types/instance.ts
@@ -49,6 +49,7 @@ export interface InstanceConfiguration {
polls: InstancePolls;
accounts: InstanceAccounts;
emojis: InstanceEmojis;
+ oidc_enabled?: boolean;
}
export interface InstanceAccounts {
diff --git a/web/source/settings/views/user/settings.tsx b/web/source/settings/views/user/settings.tsx
index a27cc1ba3..5696144a0 100644
--- a/web/source/settings/views/user/settings.tsx
+++ b/web/source/settings/views/user/settings.tsx
@@ -28,6 +28,7 @@ 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 (
@@ -106,6 +107,24 @@ function UserSettingsForm({ data }) {
}
function PasswordChange() {
+ // Load instance data.
+ const {
+ data: instance,
+ isFetching: isFetchingInstance,
+ isLoading: isLoadingInstance
+ } = useInstanceV1Query();
+ if (isFetchingInstance || isLoadingInstance) {
+ return <Loading />;
+ }
+
+ if (instance === undefined) {
+ throw "could not fetch instance";
+ }
+
+ return <PasswordChangeForm oidcEnabled={instance.configuration.oidc_enabled} />;
+}
+
+function PasswordChangeForm({ oidcEnabled }: { oidcEnabled?: boolean }) {
const form = {
oldPassword: useTextInput("old_password"),
newPassword: useTextInput("new_password", {
@@ -133,6 +152,13 @@ function PasswordChange() {
<form className="change-password" onSubmit={submitForm}>
<div className="form-section-docs">
<h3>Change Password</h3>
+ { oidcEnabled && <p>
+ This instance is running with OIDC as its authorization + identity provider.
+ <br/>
+ This means <strong>you cannot change your password using this settings panel</strong>.
+ <br/>
+ To change your password, you should instead contact your OIDC provider.
+ </p> }
<a
href="https://docs.gotosocial.org/en/latest/user_guide/settings/#password-change"
target="_blank"
@@ -142,12 +168,14 @@ function PasswordChange() {
Learn more about this (opens in a new tab)
</a>
</div>
+
<TextInput
type="password"
name="password"
field={form.oldPassword}
label="Current password"
autoComplete="current-password"
+ disabled={oidcEnabled}
/>
<TextInput
type="password"
@@ -155,6 +183,7 @@ function PasswordChange() {
field={form.newPassword}
label="New password"
autoComplete="new-password"
+ disabled={oidcEnabled}
/>
<TextInput
type="password"
@@ -162,20 +191,36 @@ function PasswordChange() {
field={verifyNewPassword}
label="Confirm new password"
autoComplete="new-password"
+ disabled={oidcEnabled}
/>
<MutationButton
- disabled={false}
label="Change password"
result={result}
+ disabled={oidcEnabled ?? false}
/>
</form>
);
}
function EmailChange() {
- // Load existing user data.
- const { data: user, isFetching, isLoading } = useUserQuery();
- if (isFetching || isLoading) {
+ // 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 <Loading />;
}
@@ -183,10 +228,14 @@ function EmailChange() {
throw "could not fetch user";
}
- return <EmailChangeForm user={user} />;
+ if (instance === undefined) {
+ throw "could not fetch instance";
+ }
+
+ return <EmailChangeForm user={user} oidcEnabled={instance.configuration.oidc_enabled} />;
}
-function EmailChangeForm({user}: {user: User}) {
+function EmailChangeForm({user, oidcEnabled}: { user: User, oidcEnabled?: boolean }) {
const form = {
currentEmail: useTextInput("current_email", {
defaultValue: user.email,
@@ -217,6 +266,15 @@ function EmailChangeForm({user}: {user: User}) {
<form className="change-email" onSubmit={submitForm}>
<div className="form-section-docs">
<h3>Change Email</h3>
+ { oidcEnabled && <p>
+ This instance is running with OIDC as its authorization + identity provider.
+ <br/>
+ 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.
+ <br/>
+ To change the email address you use to log in, contact your OIDC provider.
+ </p> }
<a
href="https://docs.gotosocial.org/en/latest/user_guide/settings/#email-change"
target="_blank"
@@ -227,7 +285,7 @@ function EmailChangeForm({user}: {user: User}) {
</a>
</div>
- { user.unconfirmed_email && <>
+ { (user.unconfirmed_email && user.unconfirmed_email !== user.email) && <>
<div className="info">
<i className="fa fa-fw fa-info-circle" aria-hidden="true"></i>
<b>