146 lines
4.8 KiB
JavaScript
146 lines
4.8 KiB
JavaScript
import { fetchSettings, updateSettings, uploadMedia } from '@/api/settings'
|
|
import { initialSettings } from '@/api/initialDataForConfig'
|
|
import { filterIgnored, parseTuples, valueHasTuples, wrapConfig } from './normalizers'
|
|
|
|
const settings = {
|
|
state: {
|
|
settings: {
|
|
'activitypub': {},
|
|
'adapter': {},
|
|
'admin_token': {},
|
|
'assets': { mascots: {}},
|
|
'auth': {},
|
|
'auto_linker': { opts: {}},
|
|
'backends': {},
|
|
'chat': {},
|
|
'console': { colors: {}},
|
|
'credentials': {},
|
|
'database': {},
|
|
'ecto_repos': {},
|
|
'emoji': { groups: {}},
|
|
'enabled': {},
|
|
'ex_syslogger': {},
|
|
'expose': {},
|
|
'fetch_initial_posts': {},
|
|
'format_encoders': {},
|
|
'frontend_configurations': { pleroma_fe: {}, masto_fe: {}},
|
|
'gopher': {},
|
|
'hackney_pools': { federation: {}, media: {}, upload: {}},
|
|
'handler': {},
|
|
'headers': {},
|
|
'http': { adapter: {}},
|
|
'http_security': {},
|
|
'instance': { poll_limits: {}},
|
|
'level': {},
|
|
'ldap': {},
|
|
'markup': {},
|
|
'max_age': {},
|
|
'media_proxy': { proxy_opts: {}},
|
|
'meta': {},
|
|
'methods': {},
|
|
'mrf_hellthread': {},
|
|
'mrf_keyword': { replace: {}},
|
|
'mrf_mention': {},
|
|
'mrf_normalize_markup': {},
|
|
'mrf_rejectnonpublic': {},
|
|
'mrf_simple': {},
|
|
'mrf_subchain': { match_actor: {}},
|
|
'mrf_user_allowlist': {},
|
|
'oauth2': {},
|
|
'password_authenticator': {},
|
|
'Pleroma.Captcha': {},
|
|
'Pleroma.Captcha.Kocaptcha': {},
|
|
'Pleroma.Emails.Mailer': {},
|
|
'Pleroma.Repo': {},
|
|
'Pleroma.ScheduledActivity': {},
|
|
'Pleroma.Upload': { proxy_opts: {}},
|
|
'Pleroma.Upload.Filter.AnonymizeFilename': {},
|
|
'Pleroma.Upload.Filter.Mogrify': {},
|
|
'Pleroma.Uploaders.Local': {},
|
|
'Pleroma.Uploaders.MDII': {},
|
|
'Pleroma.Uploaders.S3': {},
|
|
'Pleroma.User': {},
|
|
'Pleroma.Web.Auth.Authenticator': {},
|
|
'Pleroma.Web.Endpoint':
|
|
{ http: false, url: {}, render_errors: {}, pubsub: {}},
|
|
'Pleroma.Web.Federator.RetryQueue': {},
|
|
'Pleroma.Web.Metadata': {},
|
|
'port': {},
|
|
'priv_dir': {},
|
|
'queues': {},
|
|
'rate_limit': {},
|
|
'rich_media': {},
|
|
'suggestions': {},
|
|
'types': { value: {}},
|
|
'Ueberauth': {},
|
|
'Ueberauth.Strategy.Facebook.OAuth': {},
|
|
'Ueberauth.Strategy.Google.OAuth': {},
|
|
'Ueberauth.Strategy.Microsoft.OAuth': {},
|
|
'Ueberauth.Strategy.Twitter.OAuth': {},
|
|
'user': {},
|
|
'uri_schemes': {},
|
|
'vapid_details': {},
|
|
'webhook_url': {}
|
|
},
|
|
ignoredIfNotEnabled: ['enabled', 'handler', 'password_authenticator', 'port', 'priv_dir'],
|
|
loading: true
|
|
},
|
|
mutations: {
|
|
REWRITE_CONFIG: (state, { tab, data }) => {
|
|
state.settings[tab] = data
|
|
},
|
|
SET_LOADING: (state, status) => {
|
|
state.loading = status
|
|
},
|
|
SET_SETTINGS: (state, data) => {
|
|
const newSettings = data.reduce((acc, config) => {
|
|
const key = config.key[0] === ':' ? config.key.substr(1) : config.key
|
|
const value = valueHasTuples(key, config.value) ? { value: config.value } : parseTuples(config.value, key)
|
|
acc[key] = { ...acc[key], ...value }
|
|
return acc
|
|
}, state.settings)
|
|
state.settings = newSettings
|
|
},
|
|
UPDATE_SETTINGS: (state, { tab, data }) => {
|
|
Object.keys(state.settings).map(configName => {
|
|
if (configName === tab) {
|
|
state.settings[configName] = { ...state.settings[configName], ...data }
|
|
}
|
|
})
|
|
}
|
|
},
|
|
actions: {
|
|
async FetchSettings({ commit, dispatch, getters }) {
|
|
commit('SET_LOADING', true)
|
|
const response = await fetchSettings(getters.authHost, getters.token)
|
|
if (response.data.configs.length === 0) {
|
|
dispatch('SubmitChanges', initialSettings)
|
|
} else {
|
|
commit('SET_SETTINGS', response.data.configs)
|
|
}
|
|
commit('SET_LOADING', false)
|
|
},
|
|
RewriteConfig({ commit }, { tab, data }) {
|
|
commit('REWRITE_CONFIG', { tab, data })
|
|
},
|
|
async SubmitChanges({ getters, commit, state }, data) {
|
|
const filteredSettings = filterIgnored(state.settings, state.ignoredIfNotEnabled)
|
|
const configs = data || wrapConfig(filteredSettings)
|
|
const response = await updateSettings(configs, getters.authHost, getters.token)
|
|
if (data) {
|
|
commit('SET_SETTINGS', response.data.configs)
|
|
}
|
|
},
|
|
UpdateSettings({ commit }, { tab, data }) {
|
|
commit('UPDATE_SETTINGS', { tab, data })
|
|
},
|
|
async UploadMedia({ dispatch, getters, state }, { file, tab, inputName, childName }) {
|
|
const response = await uploadMedia(file, getters.authHost, getters.token)
|
|
const updatedValue = { ...state.settings[tab][inputName], ...{ [childName]: response.data.url }}
|
|
dispatch('UpdateSettings', { tab, data: { [inputName]: updatedValue }})
|
|
}
|
|
}
|
|
}
|
|
|
|
export default settings
|