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

53 lines
1.5 KiB
TypeScript
Raw Normal View History

import queryString from 'query-string';
2022-08-11 19:50:08 -07:00
2022-11-15 12:48:54 -08:00
import * as BuildConfig from 'soapbox/build-config';
2022-08-11 19:50:08 -07:00
import { isURL } from 'soapbox/utils/auth';
import sourceCode from 'soapbox/utils/code';
import { getScopes } from 'soapbox/utils/scopes';
2022-08-11 19:50:08 -07:00
import { createApp } from './apps';
import type { AppDispatch, RootState } from 'soapbox/store';
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,
redirect_uris: `${window.location.origin}/login/external`,
website: sourceCode.homepage,
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
};