summaryrefslogtreecommitdiff
path: root/web/source/settings/components/authorization/index.jsx
diff options
context:
space:
mode:
Diffstat (limited to 'web/source/settings/components/authorization/index.jsx')
-rw-r--r--web/source/settings/components/authorization/index.jsx76
1 files changed, 76 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