50 lines
1.1 KiB
JavaScript
50 lines
1.1 KiB
JavaScript
import {
|
|
Map as ImmutableMap,
|
|
List as ImmutableList,
|
|
Set as ImmutableSet,
|
|
fromJS,
|
|
} from 'immutable';
|
|
import { trimStart } from 'lodash';
|
|
|
|
const find = (configs, group, key) => {
|
|
return configs.find(config =>
|
|
config.isSuperset({ group, key }),
|
|
);
|
|
};
|
|
|
|
const toSimplePolicy = configs => {
|
|
const config = find(configs, ':pleroma', ':mrf_simple');
|
|
|
|
const reducer = (acc, curr) => {
|
|
const { tuple: [key, hosts] } = curr.toJS();
|
|
return acc.set(trimStart(key, ':'), ImmutableSet(hosts));
|
|
};
|
|
|
|
if (config && config.get) {
|
|
const value = config.get('value', ImmutableList());
|
|
return value.reduce(reducer, ImmutableMap());
|
|
} else {
|
|
return ImmutableMap();
|
|
}
|
|
};
|
|
|
|
const fromSimplePolicy = simplePolicy => {
|
|
const mapper = (hosts, key) => fromJS({ tuple: [`:${key}`, hosts.toJS()] });
|
|
const value = simplePolicy.map(mapper).toList();
|
|
|
|
return ImmutableList([
|
|
ImmutableMap({
|
|
group: ':pleroma',
|
|
key: ':mrf_simple',
|
|
value,
|
|
}),
|
|
]);
|
|
};
|
|
|
|
export const ConfigDB = {
|
|
find,
|
|
toSimplePolicy,
|
|
fromSimplePolicy,
|
|
};
|
|
|
|
export default ConfigDB;
|