pleroma/packages/pl-fe/src/actions/consumer-auth.ts
marcin mikołajczak df5c284ba2 Include domain in client name
Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
2024-08-30 00:26:25 +02:00

52 lines
1.6 KiB
TypeScript

import queryString from 'query-string';
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';
import { createApp } from './apps';
import type { AppDispatch, RootState } from 'pl-fe/store';
const createProviderApp = () =>
async(dispatch: AppDispatch, getState: () => RootState) => {
const scopes = getScopes(getState());
const params = {
client_name: `${sourceCode.displayName} (${new URL(window.origin).host})`,
redirect_uris: `${window.location.origin}/login/external`,
website: sourceCode.homepage,
scopes,
};
return dispatch(createApp(params));
};
const prepareRequest = (provider: string) =>
async(dispatch: AppDispatch, getState: () => RootState) => {
const baseURL = isURL(BuildConfig.BACKEND_URL) ? BuildConfig.BACKEND_URL : '';
const scopes = getScopes(getState());
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);
const params = {
provider,
'authorization[client_id]': client_id,
'authorization[redirect_uri]': redirect_uri,
'authorization[scope]': scopes,
};
const query = queryString.stringify(params);
location.href = `${baseURL}/oauth/prepare_request?${query.toString()}`;
};
export {
prepareRequest,
};