1 | const co = require('bluebird').coroutine;
|
2 | const fs = require('mz/fs');
|
3 | const path = require('path');
|
4 | const _ = require('lodash');
|
5 | const confProcessor = require('./utils/config.processor.js');
|
6 | const fsUtils = require('./utils/file.utils.js');
|
7 |
|
8 | const CONFIG = 'config.json';
|
9 |
|
10 | const baseResourceConfig = {
|
11 | signing_alg: 'RS256'
|
12 | };
|
13 |
|
14 | const create = (client, dir, config) => {
|
15 | return co(function* () {
|
16 |
|
17 | const resources = yield fsUtils.getDirectories(dir);
|
18 |
|
19 | for (let i in resources) {
|
20 | const resourceData = yield getResourceData(resources[i], config);
|
21 |
|
22 | yield createResource(client, resourceData);
|
23 | }
|
24 | })();
|
25 | };
|
26 |
|
27 | const getResourceData = (dir, config) => {
|
28 | return co(function* () {
|
29 | const files = yield fs.readdir(dir);
|
30 |
|
31 | const configFile = files.find(f => f === CONFIG);
|
32 |
|
33 | const configData = (configFile) ? yield fsUtils.getFileContent(path.join(dir, configFile)) : '{}';
|
34 |
|
35 | return {
|
36 | name: path.basename(dir),
|
37 | config: confProcessor.process(confProcessor.matcher.basic, configData, config)
|
38 | };
|
39 |
|
40 | })();
|
41 | };
|
42 |
|
43 | const createResource = (client, resourceInfo) => {
|
44 | return co(function* () {
|
45 |
|
46 | const resources = yield client.resourceServers.getAll();
|
47 |
|
48 | const existingResource = resources.find(res => {
|
49 | return res.name === resourceInfo.name;
|
50 | });
|
51 |
|
52 | if (existingResource) {
|
53 | console.log(`Updating resource: ${resourceInfo.name}`);
|
54 | const delta = _.merge({}, baseResourceConfig, resourceInfo.config);
|
55 |
|
56 | delete delta.identifier;
|
57 | yield client.resourceServers.update({id: existingResource.id}, delta);
|
58 |
|
59 | console.log('Updated resource');
|
60 |
|
61 | } else {
|
62 | console.log(`Creating resource: ${resourceInfo.name}`);
|
63 | const resource = _.merge({}, baseResourceConfig, resourceInfo.config);
|
64 | resource.name = resourceInfo.name;
|
65 |
|
66 | yield client.resourceServers.create(resource);
|
67 |
|
68 | console.log('Created resource');
|
69 | }
|
70 |
|
71 | })();
|
72 | };
|
73 |
|
74 | module.exports = {
|
75 | create
|
76 | };
|