Commit ed276114ca934889a7d759ba030bfc39503a82bb

Authored by Adhidarma Hadiwinoto
1 parent 0d9032a831
Exists in master

APISERVER: remote-products

Showing 4 changed files with 178 additions and 2 deletions Side-by-side Diff

... ... @@ -15,6 +15,7 @@ const matrix = require('../matrix');
15 15 const routerConfig = require('./router-config');
16 16 const routerMatrix = require('./router-matrix');
17 17 const routerProducts = require('./router-products');
  18 +const routerRemoteProducts = require('./router-remote-products');
18 19  
19 20 const app = express();
20 21  
... ... @@ -44,3 +45,4 @@ app.use('/apikey/:apikey', needValidApikey);
44 45 app.use('/apikey/:apikey/config', routerConfig);
45 46 app.use('/apikey/:apikey/matrix', routerMatrix);
46 47 app.use('/apikey/:apikey/products', routerProducts);
  48 +app.use('/apikey/:apikey/remote-products', routerRemoteProducts);
api-server/router-remote-products.js
... ... @@ -0,0 +1,52 @@
  1 +"use strict";
  2 +
  3 +const express = require('express');
  4 +const sortObj = require('sort-object');
  5 +const naturalCompare = require('string-natural-compare');
  6 +
  7 +const config = require('../config');
  8 +const logger = require('../logger');
  9 +const matrix = require('../matrix');
  10 +
  11 +const router = express.Router();
  12 +module.exports = router;
  13 +
  14 +function pageIndex(req, res, next) {
  15 + res.json({
  16 + method: '/products',
  17 + error: null,
  18 + result: config.remote_products
  19 + });
  20 +}
  21 +
  22 +function pageSet(req, res, next) {
  23 + if (!req.params.localProduct || !req.params.localProduct.trim() || !req.params.remoteProduct || !req.params.remoteProduct.trim()) {
  24 + res.json({
  25 + method: '/remote-products/set',
  26 + error: true,
  27 + error_msg: 'Usage: /remote-products/set/<LOCAL_PRODUCT>/<REMOTE_PRODUCT>'
  28 + });
  29 +
  30 + return;
  31 + }
  32 +
  33 + const localProduct = req.params.localProduct.trim().toUpperCase();
  34 + const remoteProduct = req.params.remoteProduct.trim();
  35 +
  36 + config.remote_products[localProduct] = remoteProduct;
  37 + sortObj(config.remote_products, {
  38 + sort: naturalCompare.caseInsensitive
  39 + });
  40 + matrix.config_is_dirty = true;
  41 +
  42 + res.json({
  43 + method: '/remote-products/set',
  44 + error: null,
  45 + local_product: localProduct,
  46 + remote_product: remoteProduct,
  47 + remote_products: config.remote_products
  48 + })
  49 +}
  50 +
  51 +router.get('/', pageIndex);
  52 +router.get('/set/:localProduct/:remoteProduct');
... ... @@ -83,6 +83,11 @@
83 83 "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=",
84 84 "optional": true
85 85 },
  86 + "arr-union": {
  87 + "version": "3.1.0",
  88 + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
  89 + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
  90 + },
86 91 "array-flatten": {
87 92 "version": "1.1.1",
88 93 "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
... ... @@ -219,6 +224,23 @@
219 224 "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
220 225 "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
221 226 },
  227 + "bytewise": {
  228 + "version": "1.1.0",
  229 + "resolved": "https://registry.npmjs.org/bytewise/-/bytewise-1.1.0.tgz",
  230 + "integrity": "sha1-HRPL/3F65xWAlKqIGzXQgbOHJT4=",
  231 + "requires": {
  232 + "bytewise-core": "1.2.3",
  233 + "typewise": "1.0.3"
  234 + }
  235 + },
  236 + "bytewise-core": {
  237 + "version": "1.2.3",
  238 + "resolved": "https://registry.npmjs.org/bytewise-core/-/bytewise-core-1.2.3.tgz",
  239 + "integrity": "sha1-P7QQx+kVWOsasiqCg0V3qmvWHUI=",
  240 + "requires": {
  241 + "typewise-core": "1.2.0"
  242 + }
  243 + },
222 244 "camelcase": {
223 245 "version": "2.1.1",
224 246 "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
... ... @@ -558,6 +580,14 @@
558 580 "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
559 581 "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
560 582 },
  583 + "extend-shallow": {
  584 + "version": "2.0.1",
  585 + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
  586 + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
  587 + "requires": {
  588 + "is-extendable": "0.1.1"
  589 + }
  590 + },
561 591 "extglob": {
562 592 "version": "0.3.2",
563 593 "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
... ... @@ -1132,6 +1162,11 @@
1132 1162 }
1133 1163 }
1134 1164 },
  1165 + "get-value": {
  1166 + "version": "2.0.6",
  1167 + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
  1168 + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
  1169 + },
1135 1170 "getpass": {
1136 1171 "version": "0.1.7",
1137 1172 "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
... ... @@ -1303,8 +1338,7 @@
1303 1338 "is-extendable": {
1304 1339 "version": "0.1.1",
1305 1340 "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
1306   - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
1307   - "optional": true
  1341 + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
1308 1342 },
1309 1343 "is-extglob": {
1310 1344 "version": "1.0.0",
... ... @@ -1336,6 +1370,21 @@
1336 1370 "kind-of": "3.2.2"
1337 1371 }
1338 1372 },
  1373 + "is-plain-object": {
  1374 + "version": "2.0.4",
  1375 + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
  1376 + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
  1377 + "requires": {
  1378 + "isobject": "3.0.1"
  1379 + },
  1380 + "dependencies": {
  1381 + "isobject": {
  1382 + "version": "3.0.1",
  1383 + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
  1384 + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
  1385 + }
  1386 + }
  1387 + },
1339 1388 "is-posix-bracket": {
1340 1389 "version": "0.1.1",
1341 1390 "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
... ... @@ -1918,6 +1967,17 @@
1918 1967 "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
1919 1968 "optional": true
1920 1969 },
  1970 + "set-value": {
  1971 + "version": "0.4.3",
  1972 + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
  1973 + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
  1974 + "requires": {
  1975 + "extend-shallow": "2.0.1",
  1976 + "is-extendable": "0.1.1",
  1977 + "is-plain-object": "2.0.4",
  1978 + "to-object-path": "0.3.0"
  1979 + }
  1980 + },
1921 1981 "setprototypeof": {
1922 1982 "version": "1.1.0",
1923 1983 "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
... ... @@ -1948,6 +2008,29 @@
1948 2008 "hoek": "2.16.3"
1949 2009 }
1950 2010 },
  2011 + "sort-asc": {
  2012 + "version": "0.2.0",
  2013 + "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.2.0.tgz",
  2014 + "integrity": "sha1-AKSelHvCXVEL/eLLuN/9qfUOsvw="
  2015 + },
  2016 + "sort-desc": {
  2017 + "version": "0.2.0",
  2018 + "resolved": "https://registry.npmjs.org/sort-desc/-/sort-desc-0.2.0.tgz",
  2019 + "integrity": "sha1-KAwb2vxld4h87brR7S5BwDeXZkY="
  2020 + },
  2021 + "sort-object": {
  2022 + "version": "3.0.2",
  2023 + "resolved": "https://registry.npmjs.org/sort-object/-/sort-object-3.0.2.tgz",
  2024 + "integrity": "sha1-2vK2k/YR990qIbgrgF5OrCMPdV4=",
  2025 + "requires": {
  2026 + "bytewise": "1.1.0",
  2027 + "get-value": "2.0.6",
  2028 + "is-extendable": "0.1.1",
  2029 + "sort-asc": "0.2.0",
  2030 + "sort-desc": "0.2.0",
  2031 + "union-value": "0.2.4"
  2032 + }
  2033 + },
1951 2034 "sshpk": {
1952 2035 "version": "1.13.1",
1953 2036 "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
... ... @@ -1985,6 +2068,11 @@
1985 2068 "resolved": "https://registry.npmjs.org/strftime/-/strftime-0.10.0.tgz",
1986 2069 "integrity": "sha1-s/D6QZKVICpaKJ9ta+n0kJphcZM="
1987 2070 },
  2071 + "string-natural-compare": {
  2072 + "version": "2.0.2",
  2073 + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-2.0.2.tgz",
  2074 + "integrity": "sha1-xc5OJ4q10SZa5vxVQ1rre3b8sAE="
  2075 + },
1988 2076 "string-width": {
1989 2077 "version": "1.0.2",
1990 2078 "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
... ... @@ -2017,6 +2105,14 @@
2017 2105 "ansi-regex": "2.1.1"
2018 2106 }
2019 2107 },
  2108 + "to-object-path": {
  2109 + "version": "0.3.0",
  2110 + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
  2111 + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
  2112 + "requires": {
  2113 + "kind-of": "3.2.2"
  2114 + }
  2115 + },
2020 2116 "tough-cookie": {
2021 2117 "version": "2.3.2",
2022 2118 "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz",
... ... @@ -2063,6 +2159,19 @@
2063 2159 }
2064 2160 }
2065 2161 },
  2162 + "typewise": {
  2163 + "version": "1.0.3",
  2164 + "resolved": "https://registry.npmjs.org/typewise/-/typewise-1.0.3.tgz",
  2165 + "integrity": "sha1-EGeTZUCvl5N8xdz5kiSG6fooRlE=",
  2166 + "requires": {
  2167 + "typewise-core": "1.2.0"
  2168 + }
  2169 + },
  2170 + "typewise-core": {
  2171 + "version": "1.2.0",
  2172 + "resolved": "https://registry.npmjs.org/typewise-core/-/typewise-core-1.2.0.tgz",
  2173 + "integrity": "sha1-l+uRgFx/VdL5QXSPpQ0xXZke8ZU="
  2174 + },
2066 2175 "uid-safe": {
2067 2176 "version": "2.1.5",
2068 2177 "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
... ... @@ -2071,6 +2180,17 @@
2071 2180 "random-bytes": "1.0.0"
2072 2181 }
2073 2182 },
  2183 + "union-value": {
  2184 + "version": "0.2.4",
  2185 + "resolved": "https://registry.npmjs.org/union-value/-/union-value-0.2.4.tgz",
  2186 + "integrity": "sha1-c3UVJ4ZnkFfns3qmdug0aPwCdPA=",
  2187 + "requires": {
  2188 + "arr-union": "3.1.0",
  2189 + "get-value": "2.0.6",
  2190 + "is-extendable": "0.1.1",
  2191 + "set-value": "0.4.3"
  2192 + }
  2193 + },
2074 2194 "uniqid": {
2075 2195 "version": "4.1.1",
2076 2196 "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz",
... ... @@ -38,7 +38,9 @@
38 38 "request": "^2.81.0",
39 39 "sha1": "^1.1.1",
40 40 "simple-git": "^1.80.1",
  41 + "sort-object": "^3.0.2",
41 42 "strftime": "^0.10.0",
  43 + "string-natural-compare": "^2.0.2",
42 44 "uniqid": "^4.1.1",
43 45 "uuid": "^3.1.0",
44 46 "winston": "^2.3.1",