diff options
Diffstat (limited to 'web/source')
| -rw-r--r-- | web/source/settings/lib/types/instance.ts | 1 | ||||
| -rw-r--r-- | web/source/settings/views/user/settings.tsx | 72 | 
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> | 
