diff options
| author | 2023-01-18 14:45:14 +0100 | |
|---|---|---|
| committer | 2023-01-18 14:45:14 +0100 | |
| commit | 9b139b632098e6741b10fa87ff6224dcb5045947 (patch) | |
| tree | c72b5c666ed01db7d1a18e531e5e01e07f504a46 /web/source/settings/components/authorization | |
| parent | [chore] Change default sqlite busy timeout to 5m (#1352) (diff) | |
| download | gotosocial-9b139b632098e6741b10fa87ff6224dcb5045947.tar.xz | |
[frogend] Settings refactor (#1318)
* yakshave new form field structure
* fully refactor user profile settings form
* use rtk query api for profile settings
* refactor user post settings
* refactor password change form
* refactor admin settings
* FormWithData structure for user forms
* admin actions refactor
* whitespace
* fix user settings data prop
* remove superfluous logging
* cleanup old code
* refactor federation/suspend (overview, detail)
* mostly abstracted (emoji) checkbox list
* refactor parse-from-toot
* refactor custom-emoji, progress on federation bulk
* loading icon styling to prevent big spinny
* refactor federation import-export interface
* cleanup old files
* [chore] Update/add license headers for 2023
* redux fixes
* text-field exports
* appease the linter
* refactor authentication with RTK Query
* fix login/logout state transition weirdness
* fixes/cleanup
* small linter-related fixes
* add eslint license header check, fix existing files
* remove old code, clarify comment
* clarify suspend on subdomains
* collapse if/else
* fa-fw width info comment
Diffstat (limited to 'web/source/settings/components/authorization')
| -rw-r--r-- | web/source/settings/components/authorization/index.jsx | 76 | ||||
| -rw-r--r-- | web/source/settings/components/authorization/login.jsx | 67 | 
2 files changed, 143 insertions, 0 deletions
diff --git a/web/source/settings/components/authorization/index.jsx b/web/source/settings/components/authorization/index.jsx new file mode 100644 index 000000000..8bcf68e09 --- /dev/null +++ b/web/source/settings/components/authorization/index.jsx @@ -0,0 +1,76 @@ +/* +	GoToSocial +	Copyright (C) 2021-2023 GoToSocial Authors admin@gotosocial.org + +	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 <http://www.gnu.org/licenses/>. +*/ + +"use strict"; + +const React = require("react"); +const Redux = require("react-redux"); + +const query = require("../../lib/query"); + +const Login = require("./login"); +const Loading = require("../loading"); +const { Error } = require("../error"); + +module.exports = function Authorization({ App }) { +	const loginState = Redux.useSelector((state) => state.oauth.loginState); +	const [hasStoredLogin] = React.useState(loginState != "none" && loginState != "logout"); + +	const { isLoading, isSuccess, data: account, error } = query.useVerifyCredentialsQuery(undefined, { +		skip: loginState == "none" || loginState == "logout" +	}); + +	let showLogin = true; +	let content = null; + +	if (isLoading && hasStoredLogin) { +		showLogin = false; + +		let loadingInfo; +		if (loginState == "callback") { +			loadingInfo = "Processing OAUTH callback."; +		} else if (loginState == "login") { +			loadingInfo = "Verifying stored login."; +		} + +		content = ( +			<div> +				<Loading /> {loadingInfo} +			</div> +		); +	} else if (error != undefined) { +		content = ( +			<div> +				<Error error={error} /> +				You can attempt logging in again below: +			</div> +		); +	} + +	if (loginState == "login" && isSuccess) { +		return <App account={account} />; +	} else { +		return ( +			<section className="oauth"> +				<h1>GoToSocial Settings</h1> +				{content} +				{showLogin && <Login />} +			</section> +		); +	} +};
\ No newline at end of file diff --git a/web/source/settings/components/authorization/login.jsx b/web/source/settings/components/authorization/login.jsx new file mode 100644 index 000000000..3115c5da2 --- /dev/null +++ b/web/source/settings/components/authorization/login.jsx @@ -0,0 +1,67 @@ +/* +	GoToSocial +	Copyright (C) 2021-2023 GoToSocial Authors admin@gotosocial.org + +	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 <http://www.gnu.org/licenses/>. +*/ + +"use strict"; + +const React = require("react"); + +const query = require("../../lib/query"); +const { useTextInput, useValue } = require("../../lib/form"); +const useFormSubmit = require("../../lib/form/submit"); +const { TextInput } = require("../form/inputs"); +const MutationButton = require("../form/mutation-button"); +const Loading = require("../loading"); + +module.exports = function Login({ }) { +	const form = { +		instance: useTextInput("instance", { +			defaultValue: window.location.origin +		}), +		scopes: useValue("scopes", "user admin") +	}; + +	const [formSubmit, result] = useFormSubmit( +		form, +		query.useAuthorizeFlowMutation(), +		{ changedOnly: false } +	); + +	if (result.isLoading) { +		return ( +			<div> +				<Loading /> Checking instance. +			</div> +		); +	} else if (result.isSuccess) { +		return ( +			<div> +				<Loading /> Redirecting to instance authorization page. +			</div> +		); +	} + +	return ( +		<form onSubmit={formSubmit}> +			<TextInput +				field={form.instance} +				label="Instance" +			/> +			<MutationButton label="Login" result={result} /> +		</form> +	); +};
\ No newline at end of file  | 
