Compare View
Commits (6)
Changes
Showing 3 changed files Side-by-side Diff
api-server/router-config.js
1 | 1 | "use strict"; |
2 | 2 | |
3 | +const fs = require('fs'); | |
3 | 4 | const express = require('express'); |
4 | 5 | const bodyParser = require('body-parser'); |
5 | 6 | const jsonQuery = require('json-query'); |
6 | 7 | const dot = require('dot-object'); |
8 | +const copyFile = require('fs-copy-file'); | |
9 | +const moment = require('moment'); | |
7 | 10 | |
8 | 11 | const config = require('../config'); |
9 | 12 | const logger = require('../logger'); |
... | ... | @@ -12,6 +15,8 @@ const matrix = require('../matrix'); |
12 | 15 | const router = express.Router(); |
13 | 16 | module.exports = router; |
14 | 17 | |
18 | +fs.existsSync('config-backup') || fs.mkdirSync('config-backup'); | |
19 | + | |
15 | 20 | function getJsonConfig(req, res, next) { |
16 | 21 | res.json(config); |
17 | 22 | } |
... | ... | @@ -47,7 +52,7 @@ function delConfigElement(req, res, next) { |
47 | 52 | |
48 | 53 | dot.str(key, config); |
49 | 54 | matrix.config_is_dirty = true; |
50 | - | |
55 | + | |
51 | 56 | res.json({ |
52 | 57 | method: '/config/del', |
53 | 58 | key: req.body.key, |
... | ... | @@ -56,7 +61,40 @@ function delConfigElement(req, res, next) { |
56 | 61 | } |
57 | 62 | |
58 | 63 | function saveConfig(req, res, next) { |
59 | - res.end('NOT YET IMPLEMENTED'); | |
64 | + copyFile('config.json', 'config-backup/config_' + moment().format('YYYYMMDD_HHmmss.SS') + '.json', function(err) { | |
65 | + if (err) { | |
66 | + res.json({ | |
67 | + method: '/config/save', | |
68 | + error: err.toString() | |
69 | + }) | |
70 | + return; | |
71 | + } | |
72 | + | |
73 | + fs.writeFile('config.json', JSON.stringify(config, null, 2), function(err) { | |
74 | + if (err) { | |
75 | + res.json({ | |
76 | + method: '/config/save', | |
77 | + error: err.toString() | |
78 | + }) | |
79 | + return; | |
80 | + } | |
81 | + }) | |
82 | + | |
83 | + matrix.config_is_dirty = false; | |
84 | + | |
85 | + res.json({ | |
86 | + method: '/config/save', | |
87 | + error: null | |
88 | + }) | |
89 | + }) | |
90 | +} | |
91 | + | |
92 | +function isDirty(req, res, next) { | |
93 | + res.json({ | |
94 | + method: '/config/is-dirty', | |
95 | + error: null, | |
96 | + dirty: matrix.config_is_dirty || false | |
97 | + }) | |
60 | 98 | } |
61 | 99 | |
62 | 100 | router.get('/', getJsonConfig); |
... | ... | @@ -69,3 +107,5 @@ router.post('/set/:key', bodyParser.json(), setConfigElement); |
69 | 107 | |
70 | 108 | router.get('/del/:key', delConfigElement); |
71 | 109 | router.get('/save', saveConfig); |
110 | + | |
111 | +router.get('/is-dirty', isDirty); |
package-lock.json
1 | 1 | { |
2 | 2 | "name": "komodo-sdk", |
3 | - "version": "1.30.0", | |
3 | + "version": "1.30.1", | |
4 | 4 | "lockfileVersion": 1, |
5 | 5 | "requires": true, |
6 | 6 | "dependencies": { |
7 | + "@cloudcmd/copy-file": { | |
8 | + "version": "1.1.1", | |
9 | + "resolved": "https://registry.npmjs.org/@cloudcmd/copy-file/-/copy-file-1.1.1.tgz", | |
10 | + "integrity": "sha512-t6pTJdsV0qhh9YX22/Npsv95GqVABc5GRInSK7JSSNIpPLq9TM+K7odYzcOuQRPZAD9OHxZfbYsB4WJOalzqng==", | |
11 | + "requires": { | |
12 | + "es6-promisify": "6.0.0", | |
13 | + "pipe-io": "3.0.3", | |
14 | + "wraptile": "2.0.0", | |
15 | + "zames": "2.0.0" | |
16 | + } | |
17 | + }, | |
7 | 18 | "a-sync-waterfall": { |
8 | 19 | "version": "1.0.0", |
9 | 20 | "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.0.tgz", |
... | ... | @@ -331,6 +342,11 @@ |
331 | 342 | "boom": "2.10.1" |
332 | 343 | } |
333 | 344 | }, |
345 | + "currify": { | |
346 | + "version": "2.0.6", | |
347 | + "resolved": "https://registry.npmjs.org/currify/-/currify-2.0.6.tgz", | |
348 | + "integrity": "sha512-F0lbcoBkA2FMcejFeHJkDEhQ1AvVkTpkn9PMzJch+7mHy5WdteZ9t+nhT6cOdga4uRay3rjvprgp8tUkixFy8w==" | |
349 | + }, | |
334 | 350 | "cycle": { |
335 | 351 | "version": "1.0.3", |
336 | 352 | "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", |
... | ... | @@ -412,6 +428,11 @@ |
412 | 428 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", |
413 | 429 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" |
414 | 430 | }, |
431 | + "es6-promisify": { | |
432 | + "version": "6.0.0", | |
433 | + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.0.0.tgz", | |
434 | + "integrity": "sha512-8Tbqjrb8lC85dd81haajYwuRmiU2rkqNAFnlvQOJeeKqdUloIlI+JcUqeJruV4rCm5Y7oNU7jfs2FbmxhRR/2g==" | |
435 | + }, | |
415 | 436 | "escape-html": { |
416 | 437 | "version": "1.0.3", |
417 | 438 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", |
... | ... | @@ -636,6 +657,14 @@ |
636 | 657 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", |
637 | 658 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" |
638 | 659 | }, |
660 | + "fs-copy-file": { | |
661 | + "version": "2.1.2", | |
662 | + "resolved": "https://registry.npmjs.org/fs-copy-file/-/fs-copy-file-2.1.2.tgz", | |
663 | + "integrity": "sha512-h5h3i58/mr86CSJvDLGV0ZEIUj4QfdfKt0NFX6AH4sRTRjs2/d5U1EQt5C9fUV6ZSi7MeSfZRW3LX9HttLXHeg==", | |
664 | + "requires": { | |
665 | + "@cloudcmd/copy-file": "1.1.1" | |
666 | + } | |
667 | + }, | |
639 | 668 | "fs.realpath": { |
640 | 669 | "version": "1.0.0", |
641 | 670 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", |
... | ... | @@ -1631,6 +1660,11 @@ |
1631 | 1660 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", |
1632 | 1661 | "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" |
1633 | 1662 | }, |
1663 | + "pipe-io": { | |
1664 | + "version": "3.0.3", | |
1665 | + "resolved": "https://registry.npmjs.org/pipe-io/-/pipe-io-3.0.3.tgz", | |
1666 | + "integrity": "sha512-7s7HlpMq6WAvd+Xbc2C6NQKEIkDbaSUm0CYtNsjidfyOpbTJmFcvzon47VkMJ6nszEj/X4t4lQs5bqeXgrzMgg==" | |
1667 | + }, | |
1634 | 1668 | "preserve": { |
1635 | 1669 | "version": "0.2.0", |
1636 | 1670 | "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", |
... | ... | @@ -2133,6 +2167,11 @@ |
2133 | 2167 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", |
2134 | 2168 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" |
2135 | 2169 | }, |
2170 | + "wraptile": { | |
2171 | + "version": "2.0.0", | |
2172 | + "resolved": "https://registry.npmjs.org/wraptile/-/wraptile-2.0.0.tgz", | |
2173 | + "integrity": "sha512-Jzt4wTT0DJGucp4VewhbT6YutpOfBh6Ab4r5hKWTvFYsNTCxPi0U8wOsesDk1CQ+VcHyaP36BzCiKRJTROJiTQ==" | |
2174 | + }, | |
2136 | 2175 | "y18n": { |
2137 | 2176 | "version": "3.2.1", |
2138 | 2177 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", |
... | ... | @@ -2156,6 +2195,15 @@ |
2156 | 2195 | "window-size": "0.1.4", |
2157 | 2196 | "y18n": "3.2.1" |
2158 | 2197 | } |
2198 | + }, | |
2199 | + "zames": { | |
2200 | + "version": "2.0.0", | |
2201 | + "resolved": "https://registry.npmjs.org/zames/-/zames-2.0.0.tgz", | |
2202 | + "integrity": "sha512-o9xURXaNLqnkZwk9f9uxraL/k1vXdcYDtJtmesJi0lcpyzkJKhBVyg3ohLfdXEDeHWj/7DfZ6/axINQyaKZGOQ==", | |
2203 | + "requires": { | |
2204 | + "currify": "2.0.6", | |
2205 | + "es6-promisify": "6.0.0" | |
2206 | + } | |
2159 | 2207 | } |
2160 | 2208 | } |
2161 | 2209 | } |
package.json
1 | 1 | { |
2 | 2 | "name": "komodo-sdk", |
3 | - "version": "1.30.0", | |
3 | + "version": "1.30.1", | |
4 | 4 | "description": "SDK for Komodo", |
5 | 5 | "main": "index.js", |
6 | 6 | "scripts": { |
... | ... | @@ -25,6 +25,7 @@ |
25 | 25 | "dot-object": "^1.7.0", |
26 | 26 | "express": "^4.16.3", |
27 | 27 | "express-session": "^1.15.6", |
28 | + "fs-copy-file": "^2.1.2", | |
28 | 29 | "json-query": "^2.2.2", |
29 | 30 | "lru-cache": "^4.1.1", |
30 | 31 | "macaddress": "^0.2.8", |