pleroma/packages/pl-fe/src/actions/mrf.ts

37 lines
1.1 KiB
TypeScript
Raw Normal View History

import ConfigDB from 'pl-fe/utils/config-db';
import { fetchConfig, updateConfig } from './admin';
import type { MRFSimple } from 'pl-fe/schemas/pleroma';
import type { AppDispatch, RootState } from 'pl-fe/store';
const simplePolicyMerge = (simplePolicy: MRFSimple, host: string, restrictions: Record<string, any>) => {
2023-09-23 18:41:24 -07:00
const entries = Object.entries(simplePolicy).map(([key, hosts]) => {
const isRestricted = restrictions[key];
const set = new Set(hosts);
if (isRestricted) {
set.add(host);
} else {
set.delete(host);
}
return [key, [...set]];
});
2023-09-23 18:41:24 -07:00
return Object.fromEntries(entries);
};
const updateMrf = (host: string, restrictions: Record<string, any>) =>
(dispatch: AppDispatch, getState: () => RootState) =>
dispatch(fetchConfig()).then(() => {
const configs = getState().admin.get('configs');
const simplePolicy = ConfigDB.toSimplePolicy(configs);
const merged = simplePolicyMerge(simplePolicy, host, restrictions);
const config = ConfigDB.fromSimplePolicy(merged);
return dispatch(updateConfig(config));
});
export { updateMrf };