From d173fcdfa3ad6f6aee721c8553f25f4db38fa302 Mon Sep 17 00:00:00 2001 From: tobi <31960611+tsmethurst@users.noreply.github.com> Date: Thu, 5 Oct 2023 16:06:19 +0200 Subject: [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 --- web/source/settings/redux/oauth.ts | 89 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 web/source/settings/redux/oauth.ts (limited to 'web/source/settings/redux/oauth.ts') diff --git a/web/source/settings/redux/oauth.ts b/web/source/settings/redux/oauth.ts new file mode 100644 index 000000000..1d6bf9bb1 --- /dev/null +++ b/web/source/settings/redux/oauth.ts @@ -0,0 +1,89 @@ +/* + 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 . +*/ + +import { PayloadAction, createSlice } from "@reduxjs/toolkit"; + +/** + * OAuthToken represents a response + * to an OAuth token request. + */ +export interface OAuthToken { + /** + * Most likely to be 'Bearer' + * but may be something else. + */ + token_type: string; + /** + * The actual token. Can be passed in to + * authenticate further requests using the + * Authorization header and the token type. + */ + access_token: string; +} + +export interface OAuthApp { + client_id: string; + client_secret: string; +} + +export interface OAuthState { + instanceUrl?: string; + loginState: "none" | "callback" | "login" | "logout"; + expectingRedirect: boolean; + /** + * Token stored in easy-to-use format. + * Will look something like: + * "Authorization: Bearer BLAHBLAHBLAH" + */ + token?: string; + app?: OAuthApp; +} + +const initialState: OAuthState = { + loginState: 'none', + expectingRedirect: false, +}; + +export const oauthSlice = createSlice({ + name: "oauth", + initialState: initialState, + reducers: { + authorize: (_state, action: PayloadAction) => { + // Overrides state with payload. + return action.payload; + }, + setToken: (state, action: PayloadAction) => { + // Mark us as logged in by storing token. + state.token = `${action.payload.token_type} ${action.payload.access_token}`; + state.loginState = "login"; + }, + remove: (state) => { + // Mark us as logged out by clearing auth. + delete state.token; + delete state.app; + state.loginState = "logout"; + } + } +}); + +export const { + authorize, + setToken, + remove, +} = oauthSlice.actions; -- cgit v1.2.3