|
|
@ -1,4 +1,5 @@
|
|
|
|
import {
|
|
|
|
import {
|
|
|
|
|
|
|
|
INSTANCE_REMEMBER_SUCCESS,
|
|
|
|
INSTANCE_FETCH_SUCCESS,
|
|
|
|
INSTANCE_FETCH_SUCCESS,
|
|
|
|
INSTANCE_FETCH_FAIL,
|
|
|
|
INSTANCE_FETCH_FAIL,
|
|
|
|
NODEINFO_FETCH_SUCCESS,
|
|
|
|
NODEINFO_FETCH_SUCCESS,
|
|
|
@ -7,6 +8,7 @@ import { PLEROMA_PRELOAD_IMPORT } from 'soapbox/actions/preload';
|
|
|
|
import { ADMIN_CONFIG_UPDATE_REQUEST, ADMIN_CONFIG_UPDATE_SUCCESS } from 'soapbox/actions/admin';
|
|
|
|
import { ADMIN_CONFIG_UPDATE_REQUEST, ADMIN_CONFIG_UPDATE_SUCCESS } from 'soapbox/actions/admin';
|
|
|
|
import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable';
|
|
|
|
import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable';
|
|
|
|
import { ConfigDB } from 'soapbox/utils/config_db';
|
|
|
|
import { ConfigDB } from 'soapbox/utils/config_db';
|
|
|
|
|
|
|
|
import localforage from 'localforage';
|
|
|
|
|
|
|
|
|
|
|
|
const nodeinfoToInstance = nodeinfo => {
|
|
|
|
const nodeinfoToInstance = nodeinfo => {
|
|
|
|
// Match Pleroma's develop branch
|
|
|
|
// Match Pleroma's develop branch
|
|
|
@ -37,9 +39,17 @@ const initialState = ImmutableMap({
|
|
|
|
version: '0.0.0',
|
|
|
|
version: '0.0.0',
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const importInstance = (state, instance) => {
|
|
|
|
|
|
|
|
return initialState.mergeDeep(instance);
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const importNodeinfo = (state, nodeinfo) => {
|
|
|
|
|
|
|
|
return nodeinfoToInstance(nodeinfo).mergeDeep(state);
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const preloadImport = (state, action, path) => {
|
|
|
|
const preloadImport = (state, action, path) => {
|
|
|
|
const data = action.data[path];
|
|
|
|
const instance = action.data[path];
|
|
|
|
return data ? initialState.mergeDeep(fromJS(data)) : state;
|
|
|
|
return instance ? importInstance(state, fromJS(instance)) : state;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const getConfigValue = (instanceConfig, key) => {
|
|
|
|
const getConfigValue = (instanceConfig, key) => {
|
|
|
@ -80,16 +90,39 @@ const handleAuthFetch = state => {
|
|
|
|
}).merge(state);
|
|
|
|
}).merge(state);
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const getHost = instance => {
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
return new URL(instance.uri).host;
|
|
|
|
|
|
|
|
} catch {
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
return new URL(`https://${instance.uri}`).host;
|
|
|
|
|
|
|
|
} catch {
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const persistInstance = instance => {
|
|
|
|
|
|
|
|
const host = getHost(instance);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (host) {
|
|
|
|
|
|
|
|
localforage.setItem(`instance:${host}`, instance);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
export default function instance(state = initialState, action) {
|
|
|
|
export default function instance(state = initialState, action) {
|
|
|
|
switch(action.type) {
|
|
|
|
switch(action.type) {
|
|
|
|
case PLEROMA_PRELOAD_IMPORT:
|
|
|
|
case PLEROMA_PRELOAD_IMPORT:
|
|
|
|
return preloadImport(state, action, '/api/v1/instance');
|
|
|
|
return preloadImport(state, action, '/api/v1/instance');
|
|
|
|
|
|
|
|
case INSTANCE_REMEMBER_SUCCESS:
|
|
|
|
|
|
|
|
return importInstance(state, fromJS(action.instance));
|
|
|
|
case INSTANCE_FETCH_SUCCESS:
|
|
|
|
case INSTANCE_FETCH_SUCCESS:
|
|
|
|
return initialState.mergeDeep(fromJS(action.instance));
|
|
|
|
persistInstance(action.instance);
|
|
|
|
|
|
|
|
return importInstance(state, fromJS(action.instance));
|
|
|
|
case INSTANCE_FETCH_FAIL:
|
|
|
|
case INSTANCE_FETCH_FAIL:
|
|
|
|
return action.error.response.status === 401 ? handleAuthFetch(state) : state;
|
|
|
|
return action.error.response.status === 401 ? handleAuthFetch(state) : state;
|
|
|
|
case NODEINFO_FETCH_SUCCESS:
|
|
|
|
case NODEINFO_FETCH_SUCCESS:
|
|
|
|
return nodeinfoToInstance(fromJS(action.nodeinfo)).mergeDeep(state);
|
|
|
|
return importNodeinfo(state, fromJS(action.nodeinfo));
|
|
|
|
case ADMIN_CONFIG_UPDATE_REQUEST:
|
|
|
|
case ADMIN_CONFIG_UPDATE_REQUEST:
|
|
|
|
case ADMIN_CONFIG_UPDATE_SUCCESS:
|
|
|
|
case ADMIN_CONFIG_UPDATE_SUCCESS:
|
|
|
|
return importConfigs(state, fromJS(action.configs));
|
|
|
|
return importConfigs(state, fromJS(action.configs));
|
|
|
|