diff options
author | 2023-10-05 16:06:19 +0200 | |
---|---|---|
committer | 2023-10-05 16:06:19 +0200 | |
commit | d173fcdfa3ad6f6aee721c8553f25f4db38fa302 (patch) | |
tree | 722cdaf93e090edcf83769ae763731008daf5fd3 /web/source/settings/lib/query/oauth.js | |
parent | updates markdown parsing to reduce allocations in the same way as the plain t... (diff) | |
download | gotosocial-d173fcdfa3ad6f6aee721c8553f25f4db38fa302.tar.xz |
[chore] Convert some settings / admin panel JS to TypeScript (#2247)
* initial conversion of STUFF to typescript
* more stuff
* update babel deps, include commonjs transform
* update bundler & eslint configuration
* eslint --fix
* upgrade deps
* update docs, build stuff, peripheral stuff
---------
Co-authored-by: f0x <f0x@cthu.lu>
Diffstat (limited to 'web/source/settings/lib/query/oauth.js')
-rw-r--r-- | web/source/settings/lib/query/oauth.js | 160 |
1 files changed, 0 insertions, 160 deletions
diff --git a/web/source/settings/lib/query/oauth.js b/web/source/settings/lib/query/oauth.js deleted file mode 100644 index 7284ee856..000000000 --- a/web/source/settings/lib/query/oauth.js +++ /dev/null @@ -1,160 +0,0 @@ -/* - 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 <http://www.gnu.org/licenses/>. -*/ - -"use strict"; - -const Promise = require("bluebird"); - -const base = require("./base"); -const { unwrapRes } = require("./lib"); -const oauth = require("../../redux/oauth").actions; - -function getSettingsURL() { - /* needed in case the settings interface isn't hosted at /settings but - some subpath like /gotosocial/settings. Other parts of the code don't - take this into account yet so mostly future-proofing. - - Also drops anything past /settings/, because authorization urls that are too long - get rejected by GTS. - */ - let [pre, _past] = window.location.pathname.split("/settings"); - return `${window.location.origin}${pre}/settings`; -} - -const SETTINGS_URL = getSettingsURL(); - -const endpoints = (build) => ({ - verifyCredentials: build.query({ - providesTags: (_res, error) => - error == undefined - ? ["Auth"] - : [], - queryFn: (_arg, api, _extraOpts, baseQuery) => { - const state = api.getState(); - - return Promise.try(() => { - // Process callback code first, if available - if (state.oauth.loginState == "callback") { - let urlParams = new URLSearchParams(window.location.search); - let code = urlParams.get("code"); - - if (code == undefined) { - throw { - message: "Waiting for callback, but no ?code= provided in url." - }; - } else { - let app = state.oauth.registration; - - if (app == undefined || app.client_id == undefined) { - throw { - message: "No stored registration data, can't finish login flow." - }; - } - - return baseQuery({ - method: "POST", - url: "/oauth/token", - body: { - client_id: app.client_id, - client_secret: app.client_secret, - redirect_uri: SETTINGS_URL, - grant_type: "authorization_code", - code: code - } - }).then(unwrapRes).then((token) => { - // remove ?code= from url - window.history.replaceState({}, document.title, window.location.pathname); - api.dispatch(oauth.setToken(token)); - }); - } - } - }).then(() => { - return baseQuery({ - url: `/api/v1/accounts/verify_credentials` - }); - }).catch((e) => { - return { error: e }; - }); - } - }), - authorizeFlow: build.mutation({ - queryFn: (formData, api, _extraOpts, baseQuery) => { - let instance; - const state = api.getState(); - - return Promise.try(() => { - if (!formData.instance.startsWith("http")) { - formData.instance = `https://${formData.instance}`; - } - instance = new URL(formData.instance).origin; - - const stored = state.oauth.instance; - if (stored?.instance == instance && stored.registration) { - return stored.registration; - } - - return baseQuery({ - method: "POST", - baseUrl: instance, - url: "/api/v1/apps", - body: { - client_name: "GoToSocial Settings", - scopes: formData.scopes, - redirect_uris: SETTINGS_URL, - website: SETTINGS_URL - } - }).then(unwrapRes).then((app) => { - app.scopes = formData.scopes; - - api.dispatch(oauth.authorize({ - instance: instance, - registration: app, - loginState: "callback", - expectingRedirect: true - })); - - return app; - }); - }).then((app) => { - let url = new URL(instance); - url.pathname = "/oauth/authorize"; - url.searchParams.set("client_id", app.client_id); - url.searchParams.set("redirect_uri", SETTINGS_URL); - url.searchParams.set("response_type", "code"); - url.searchParams.set("scope", app.scopes); - - let redirectURL = url.toString(); - window.location.assign(redirectURL); - - return { data: null }; - }).catch((e) => { - return { error: e }; - }); - }, - }), - logout: build.mutation({ - queryFn: (_arg, api) => { - api.dispatch(oauth.remove()); - return { data: null }; - }, - invalidatesTags: ["Auth"] - }) -}); - -module.exports = base.injectEndpoints({ endpoints });
\ No newline at end of file |