-
Notifications
You must be signed in to change notification settings - Fork 46
/
022-copy-auth-from-config-to-db.js
84 lines (71 loc) · 2.47 KB
/
022-copy-auth-from-config-to-db.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
72
73
74
75
76
77
78
79
80
81
82
83
84
const config = require('../config.js'),
log = require('winston');
exports.id = 'copy-auth-from-config-to-db';
function createDBObjectsFromConfig() {
const authDbObjects = [];
if (config.api && config.api.authenticationStrategies) {
//Copy configs to DB objects
Object.keys(config.api.authenticationStrategies).forEach(authStratName => {
if (authStratName !== 'local') {
const authStratConfig = config.api.authenticationStrategies[authStratName];
log.debug("Copying " + authStratName + " auth strategy");
let binIcon;
if (authStratConfig.icon) {
binIcon = Buffer.from(authStratConfig.icon, 'base64');
}
const authDbObject = {
enabled: true,
name: authStratName,
type: authStratConfig.type,
title: authStratConfig.title,
textColor: authStratConfig.textColor,
buttonColor: authStratConfig.buttonColor,
icon: binIcon,
settings: {
newUserEvents: [],
newUserTeams: [],
usersReqAdmin: {
enabled: true
},
devicesReqAdmin: {
enabled: true
}
}
};
const nonSettingsKeys = ['name', 'type', 'title', 'textColor', 'buttonColor', 'icon'];
const allKeys = Object.keys(authStratConfig);
for (let i = 0; i < allKeys.length; i++) {
const key = allKeys[i];
if (nonSettingsKeys.includes(key)) {
continue
};
authDbObject.settings[key] = authStratConfig[key];
}
log.debug('Strategy ' + authStratName + ' DB object:' + JSON.stringify(authDbObject));
authDbObjects.push(authDbObject);
}
});
}
return authDbObjects;
}
exports.up = async function (done) {
log.info('Copying authentication strategies from config.js to the DB');
try {
const authDbObjects = createDBObjectsFromConfig();
//Save DB objects to DB
const collection = await this.db.collection('authenticationconfigurations');
await collection.createIndex(['type', 'name'], { unique: true });
if (authDbObjects.length > 0) {
log.info('Inserting ' + authDbObjects.length + ' authentication strategies into the DB');
collection.insertMany(authDbObjects, {}, done);
} else {
done();
}
} catch (err) {
log.warn("Failed while copying authentication strategies to the DB", err);
done(err);
}
};
exports.down = function (done) {
done();
};