pleroma/packages/pl-fe/src/actions/consumer-auth.ts

53 lines
1.6 KiB
TypeScript
Raw Normal View History

import queryString from 'query-string';
2022-08-11 19:50:08 -07:00
import * as BuildConfig from 'pl-fe/build-config';
import { isURL } from 'pl-fe/utils/auth';
import sourceCode from 'pl-fe/utils/code';
import { getScopes } from 'pl-fe/utils/scopes';
2022-08-11 19:50:08 -07:00
import { createApp } from './apps';
import type { AppDispatch, RootState } from 'pl-fe/store';
2022-08-11 19:50:08 -07:00
const createProviderApp = () =>
async(dispatch: AppDispatch, getState: () => RootState) => {
const scopes = getScopes(getState());
2022-08-11 19:50:08 -07:00
const params = {
client_name: `${sourceCode.displayName} (${new URL(window.origin).host})`,
2022-08-11 19:50:08 -07:00
redirect_uris: `${window.location.origin}/login/external`,
website: sourceCode.homepage,
2022-08-11 19:50:08 -07:00
scopes,
};
return dispatch(createApp(params));
};
const prepareRequest = (provider: string) =>
async(dispatch: AppDispatch, getState: () => RootState) => {
2022-08-11 19:50:08 -07:00
const baseURL = isURL(BuildConfig.BACKEND_URL) ? BuildConfig.BACKEND_URL : '';
const scopes = getScopes(getState());
2022-08-11 19:50:08 -07:00
const app = await dispatch(createProviderApp());
const { client_id, redirect_uri } = app;
localStorage.setItem('plfe:external:app', JSON.stringify(app));
localStorage.setItem('plfe:external:baseurl', baseURL);
localStorage.setItem('plfe:external:scopes', scopes);
2022-08-11 19:50:08 -07:00
const params = {
provider,
'authorization[client_id]': client_id,
'authorization[redirect_uri]': redirect_uri,
'authorization[scope]': scopes,
2022-08-11 19:50:08 -07:00
};
const query = queryString.stringify(params);
2022-08-11 19:50:08 -07:00
location.href = `${baseURL}/oauth/prepare_request?${query.toString()}`;
};
export {
prepareRequest,
2022-08-11 19:50:08 -07:00
};