-
Notifications
You must be signed in to change notification settings - Fork 8.3k
/
Copy pathindex.js
71 lines (61 loc) · 1.63 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import { defaultsDeep } from 'lodash';
import defaultsProvider from './defaults';
export default function setupSettings(kbnServer, server, config) {
const uiSettings = {
getAll,
getDefaults,
getUserProvided,
set,
setMany,
remove
};
server.decorate('server', 'uiSettings', () => uiSettings);
function getAll() {
return Promise
.all([getDefaults(), getUserProvided()])
.then(([defaults, user]) => defaultsDeep(user, defaults));
}
function getDefaults() {
return Promise.resolve(defaultsProvider());
}
function getUserProvided() {
const { client } = server.plugins.elasticsearch;
const clientSettings = getClientSettings(config);
return client
.get({ ...clientSettings })
.then(res => res._source)
.then(user => hydrateUserSettings(user));
}
function setMany(changes) {
const { client } = server.plugins.elasticsearch;
const clientSettings = getClientSettings(config);
return client
.update({
...clientSettings,
body: { doc: changes }
})
.then(() => ({}));
}
function set(key, value) {
return setMany({ [key]: value });
}
function remove(key) {
return set(key, null);
}
}
function hydrateUserSettings(user) {
return Object.keys(user).reduce(expand, {});
function expand(expanded, key) {
const userValue = user[key];
if (userValue !== null) {
expanded[key] = { userValue };
}
return expanded;
}
}
function getClientSettings(config) {
const index = config.get('kibana.index');
const id = config.get('pkg.version');
const type = 'config';
return { index, type, id };
}