Commit ba477a68dd4e4e89bbb83ed784dc7d42c713524c

Authored by Nattapon Wongpaet
1 parent e1a47bfd
Exists in master and in 1 other branch dev

change structure code

Showing 79 changed files with 5337 additions and 3163 deletions   Show diff stats
ais-structure/index.js 0 → 100644
... ... @@ -0,0 +1,40 @@
  1 +const crypto = require('crypto');
  2 +const fs = require("fs");
  3 +const http = require("http");
  4 +const https = require("https");
  5 +
  6 +
  7 +/* ------------- [START STORE CONFIG] ------------ */
  8 +process.env.NODE_ENV = process.env.NODE_ENV || 'development';
  9 +const config = require('./src/config/config').get(process.env.NODE_ENV);
  10 +
  11 +/* ------------- [END STORE CONFIG] ------------ */
  12 +/* ------------- [START IMPORT OUR MODULE] ------------ */
  13 +const logger = require('./src/logger/logger');
  14 +const express = require('./src/config/express');
  15 +var app = express();
  16 +/* ------------- [END IMPORT OUR MODULE] ------------ */
  17 +
  18 +/* ------------- [END IMPORT SSL CONFIG] ------------ */
  19 +/* ------------- [START INITIAL OUR APPLICATION] ------------ */
  20 +if ( (config.app_https === 'true' ) ) {
  21 + /* ------------- [START IMPORT SSL CONFIG] ------------ */
  22 + const privateKey = fs.readFileSync(config.KEY);
  23 + const certificate = fs.readFileSync(config.CERT);
  24 +
  25 + const options = {
  26 + key: privateKey,
  27 + cert: certificate
  28 + };
  29 + options.rejectUnauthorized = false ;
  30 + https.createServer(options, app).listen(config.app_port);
  31 + logger.info(`Is Secure : | Port : ${config.app_port}`);
  32 +} else {
  33 + http.createServer(app).listen(config.app_port);
  34 + logger.info(`Isn't Secure : | Port : ${config.app_port}`);
  35 +}
  36 +logger.info("ENVIRONMENT : "+ process.env.NODE_ENV);
  37 +// logger.info("App Port: "+config.app_port);
  38 +/* ------------- [END INITIAL OUR APPLICATION] ------------ */
  39 +
  40 +module.exports = app;
... ...
ais-structure/package-lock.json 0 → 100644
... ... @@ -0,0 +1,1131 @@
  1 +{
  2 + "name": "SRFc",
  3 + "version": "1.0.0",
  4 + "lockfileVersion": 1,
  5 + "requires": true,
  6 + "dependencies": {
  7 + "accepts": {
  8 + "version": "1.3.5",
  9 + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
  10 + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
  11 + "requires": {
  12 + "mime-types": "2.1.19",
  13 + "negotiator": "0.6.1"
  14 + }
  15 + },
  16 + "ajv": {
  17 + "version": "5.5.2",
  18 + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
  19 + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
  20 + "requires": {
  21 + "co": "4.6.0",
  22 + "fast-deep-equal": "1.1.0",
  23 + "fast-json-stable-stringify": "2.0.0",
  24 + "json-schema-traverse": "0.3.1"
  25 + }
  26 + },
  27 + "array-flatten": {
  28 + "version": "1.1.1",
  29 + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
  30 + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
  31 + },
  32 + "asn1": {
  33 + "version": "0.2.4",
  34 + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
  35 + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
  36 + "requires": {
  37 + "safer-buffer": "2.1.2"
  38 + }
  39 + },
  40 + "assert-plus": {
  41 + "version": "1.0.0",
  42 + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
  43 + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
  44 + },
  45 + "async": {
  46 + "version": "1.5.2",
  47 + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
  48 + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
  49 + },
  50 + "asynckit": {
  51 + "version": "0.4.0",
  52 + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
  53 + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
  54 + },
  55 + "aws-sign2": {
  56 + "version": "0.7.0",
  57 + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
  58 + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
  59 + },
  60 + "aws4": {
  61 + "version": "1.8.0",
  62 + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
  63 + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
  64 + },
  65 + "basic-auth": {
  66 + "version": "2.0.0",
  67 + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz",
  68 + "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=",
  69 + "requires": {
  70 + "safe-buffer": "5.1.1"
  71 + }
  72 + },
  73 + "bcrypt-pbkdf": {
  74 + "version": "1.0.2",
  75 + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
  76 + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
  77 + "optional": true,
  78 + "requires": {
  79 + "tweetnacl": "0.14.5"
  80 + }
  81 + },
  82 + "bluebird": {
  83 + "version": "3.5.1",
  84 + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
  85 + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
  86 + },
  87 + "body-parser": {
  88 + "version": "1.18.3",
  89 + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
  90 + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
  91 + "requires": {
  92 + "bytes": "3.0.0",
  93 + "content-type": "1.0.4",
  94 + "debug": "2.6.9",
  95 + "depd": "1.1.2",
  96 + "http-errors": "1.6.3",
  97 + "iconv-lite": "0.4.23",
  98 + "on-finished": "2.3.0",
  99 + "qs": "6.5.2",
  100 + "raw-body": "2.3.3",
  101 + "type-is": "1.6.16"
  102 + }
  103 + },
  104 + "buffer-equal-constant-time": {
  105 + "version": "1.0.1",
  106 + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
  107 + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
  108 + },
  109 + "bytes": {
  110 + "version": "3.0.0",
  111 + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
  112 + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
  113 + },
  114 + "caseless": {
  115 + "version": "0.12.0",
  116 + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
  117 + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
  118 + },
  119 + "circular-json": {
  120 + "version": "0.5.5",
  121 + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.5.tgz",
  122 + "integrity": "sha512-13YaR6kiz0kBNmIVM87Io8Hp7bWOo4r61vkEANy8iH9R9bc6avud/1FT0SBpqR1RpIQADOh/Q+yHZDA1iL6ysA=="
  123 + },
  124 + "co": {
  125 + "version": "4.6.0",
  126 + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
  127 + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
  128 + },
  129 + "combined-stream": {
  130 + "version": "1.0.6",
  131 + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
  132 + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
  133 + "requires": {
  134 + "delayed-stream": "1.0.0"
  135 + }
  136 + },
  137 + "content-disposition": {
  138 + "version": "0.5.2",
  139 + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
  140 + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
  141 + },
  142 + "content-type": {
  143 + "version": "1.0.4",
  144 + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
  145 + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
  146 + },
  147 + "cookie": {
  148 + "version": "0.3.1",
  149 + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
  150 + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
  151 + },
  152 + "cookie-parser": {
  153 + "version": "1.4.3",
  154 + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz",
  155 + "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=",
  156 + "requires": {
  157 + "cookie": "0.3.1",
  158 + "cookie-signature": "1.0.6"
  159 + }
  160 + },
  161 + "cookie-signature": {
  162 + "version": "1.0.6",
  163 + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
  164 + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
  165 + },
  166 + "core-util-is": {
  167 + "version": "1.0.2",
  168 + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
  169 + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
  170 + },
  171 + "dashdash": {
  172 + "version": "1.14.1",
  173 + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
  174 + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
  175 + "requires": {
  176 + "assert-plus": "1.0.0"
  177 + }
  178 + },
  179 + "date-format": {
  180 + "version": "1.2.0",
  181 + "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz",
  182 + "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg="
  183 + },
  184 + "debug": {
  185 + "version": "2.6.9",
  186 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
  187 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
  188 + "requires": {
  189 + "ms": "2.0.0"
  190 + }
  191 + },
  192 + "delayed-stream": {
  193 + "version": "1.0.0",
  194 + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
  195 + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
  196 + },
  197 + "depd": {
  198 + "version": "1.1.2",
  199 + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
  200 + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
  201 + },
  202 + "destroy": {
  203 + "version": "1.0.4",
  204 + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
  205 + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
  206 + },
  207 + "ecc-jsbn": {
  208 + "version": "0.1.2",
  209 + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
  210 + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
  211 + "optional": true,
  212 + "requires": {
  213 + "jsbn": "0.1.1",
  214 + "safer-buffer": "2.1.2"
  215 + }
  216 + },
  217 + "ecdsa-sig-formatter": {
  218 + "version": "1.0.10",
  219 + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.10.tgz",
  220 + "integrity": "sha1-HFlQAPBKiJffuFAAiSoPTDOvhsM=",
  221 + "requires": {
  222 + "safe-buffer": "5.1.1"
  223 + }
  224 + },
  225 + "ee-first": {
  226 + "version": "1.1.1",
  227 + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
  228 + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
  229 + },
  230 + "encodeurl": {
  231 + "version": "1.0.2",
  232 + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
  233 + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
  234 + },
  235 + "escape-html": {
  236 + "version": "1.0.3",
  237 + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
  238 + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
  239 + },
  240 + "etag": {
  241 + "version": "1.8.1",
  242 + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
  243 + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
  244 + },
  245 + "express": {
  246 + "version": "4.16.3",
  247 + "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz",
  248 + "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=",
  249 + "requires": {
  250 + "accepts": "1.3.5",
  251 + "array-flatten": "1.1.1",
  252 + "body-parser": "1.18.2",
  253 + "content-disposition": "0.5.2",
  254 + "content-type": "1.0.4",
  255 + "cookie": "0.3.1",
  256 + "cookie-signature": "1.0.6",
  257 + "debug": "2.6.9",
  258 + "depd": "1.1.2",
  259 + "encodeurl": "1.0.2",
  260 + "escape-html": "1.0.3",
  261 + "etag": "1.8.1",
  262 + "finalhandler": "1.1.1",
  263 + "fresh": "0.5.2",
  264 + "merge-descriptors": "1.0.1",
  265 + "methods": "1.1.2",
  266 + "on-finished": "2.3.0",
  267 + "parseurl": "1.3.2",
  268 + "path-to-regexp": "0.1.7",
  269 + "proxy-addr": "2.0.4",
  270 + "qs": "6.5.1",
  271 + "range-parser": "1.2.0",
  272 + "safe-buffer": "5.1.1",
  273 + "send": "0.16.2",
  274 + "serve-static": "1.13.2",
  275 + "setprototypeof": "1.1.0",
  276 + "statuses": "1.4.0",
  277 + "type-is": "1.6.16",
  278 + "utils-merge": "1.0.1",
  279 + "vary": "1.1.2"
  280 + },
  281 + "dependencies": {
  282 + "body-parser": {
  283 + "version": "1.18.2",
  284 + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
  285 + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
  286 + "requires": {
  287 + "bytes": "3.0.0",
  288 + "content-type": "1.0.4",
  289 + "debug": "2.6.9",
  290 + "depd": "1.1.2",
  291 + "http-errors": "1.6.3",
  292 + "iconv-lite": "0.4.19",
  293 + "on-finished": "2.3.0",
  294 + "qs": "6.5.1",
  295 + "raw-body": "2.3.2",
  296 + "type-is": "1.6.16"
  297 + }
  298 + },
  299 + "iconv-lite": {
  300 + "version": "0.4.19",
  301 + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
  302 + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
  303 + },
  304 + "qs": {
  305 + "version": "6.5.1",
  306 + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
  307 + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="
  308 + },
  309 + "raw-body": {
  310 + "version": "2.3.2",
  311 + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
  312 + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
  313 + "requires": {
  314 + "bytes": "3.0.0",
  315 + "http-errors": "1.6.2",
  316 + "iconv-lite": "0.4.19",
  317 + "unpipe": "1.0.0"
  318 + },
  319 + "dependencies": {
  320 + "depd": {
  321 + "version": "1.1.1",
  322 + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
  323 + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k="
  324 + },
  325 + "http-errors": {
  326 + "version": "1.6.2",
  327 + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
  328 + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
  329 + "requires": {
  330 + "depd": "1.1.1",
  331 + "inherits": "2.0.3",
  332 + "setprototypeof": "1.0.3",
  333 + "statuses": "1.4.0"
  334 + }
  335 + },
  336 + "setprototypeof": {
  337 + "version": "1.0.3",
  338 + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
  339 + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
  340 + }
  341 + }
  342 + },
  343 + "statuses": {
  344 + "version": "1.4.0",
  345 + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
  346 + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
  347 + }
  348 + }
  349 + },
  350 + "express-jwt": {
  351 + "version": "5.3.1",
  352 + "resolved": "https://registry.npmjs.org/express-jwt/-/express-jwt-5.3.1.tgz",
  353 + "integrity": "sha512-1C9RNq0wMp/JvsH/qZMlg3SIPvKu14YkZ4YYv7gJQ1Vq+Dv8LH9tLKenS5vMNth45gTlEUGx+ycp9IHIlaHP/g==",
  354 + "requires": {
  355 + "async": "1.5.2",
  356 + "express-unless": "0.3.1",
  357 + "jsonwebtoken": "8.3.0",
  358 + "lodash.set": "4.3.2"
  359 + }
  360 + },
  361 + "express-load": {
  362 + "version": "1.1.16",
  363 + "resolved": "https://registry.npmjs.org/express-load/-/express-load-1.1.16.tgz",
  364 + "integrity": "sha512-R+HNkLZMbUCJQ42VPx4sGbs/a0Xv//XUNRft2WqgBz7+6qL8QyTsqBdwPh3h33lxFFrwHKfF4Wn65sDg8POiHA==",
  365 + "requires": {
  366 + "async": "0.2.9"
  367 + },
  368 + "dependencies": {
  369 + "async": {
  370 + "version": "0.2.9",
  371 + "resolved": "https://registry.npmjs.org/async/-/async-0.2.9.tgz",
  372 + "integrity": "sha1-32MGD789Myhqdqr21Vophtn/hhk="
  373 + }
  374 + }
  375 + },
  376 + "express-unless": {
  377 + "version": "0.3.1",
  378 + "resolved": "https://registry.npmjs.org/express-unless/-/express-unless-0.3.1.tgz",
  379 + "integrity": "sha1-JVfBRudb65A+LSR/m1ugFFJpbiA="
  380 + },
  381 + "extend": {
  382 + "version": "3.0.2",
  383 + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
  384 + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
  385 + },
  386 + "extsprintf": {
  387 + "version": "1.3.0",
  388 + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
  389 + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
  390 + },
  391 + "fast-deep-equal": {
  392 + "version": "1.1.0",
  393 + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
  394 + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
  395 + },
  396 + "fast-json-stable-stringify": {
  397 + "version": "2.0.0",
  398 + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
  399 + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
  400 + },
  401 + "finalhandler": {
  402 + "version": "1.1.1",
  403 + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
  404 + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
  405 + "requires": {
  406 + "debug": "2.6.9",
  407 + "encodeurl": "1.0.2",
  408 + "escape-html": "1.0.3",
  409 + "on-finished": "2.3.0",
  410 + "parseurl": "1.3.2",
  411 + "statuses": "1.4.0",
  412 + "unpipe": "1.0.0"
  413 + },
  414 + "dependencies": {
  415 + "statuses": {
  416 + "version": "1.4.0",
  417 + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
  418 + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
  419 + }
  420 + }
  421 + },
  422 + "forever-agent": {
  423 + "version": "0.6.1",
  424 + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
  425 + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
  426 + },
  427 + "form-data": {
  428 + "version": "2.3.2",
  429 + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
  430 + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
  431 + "requires": {
  432 + "asynckit": "0.4.0",
  433 + "combined-stream": "1.0.6",
  434 + "mime-types": "2.1.19"
  435 + }
  436 + },
  437 + "forwarded": {
  438 + "version": "0.1.2",
  439 + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
  440 + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
  441 + },
  442 + "fresh": {
  443 + "version": "0.5.2",
  444 + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
  445 + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
  446 + },
  447 + "fs": {
  448 + "version": "0.0.1-security",
  449 + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz",
  450 + "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ="
  451 + },
  452 + "getpass": {
  453 + "version": "0.1.7",
  454 + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
  455 + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
  456 + "requires": {
  457 + "assert-plus": "1.0.0"
  458 + }
  459 + },
  460 + "har-schema": {
  461 + "version": "2.0.0",
  462 + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
  463 + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
  464 + },
  465 + "har-validator": {
  466 + "version": "5.0.3",
  467 + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
  468 + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
  469 + "requires": {
  470 + "ajv": "5.5.2",
  471 + "har-schema": "2.0.0"
  472 + }
  473 + },
  474 + "http": {
  475 + "version": "0.0.0",
  476 + "resolved": "https://registry.npmjs.org/http/-/http-0.0.0.tgz",
  477 + "integrity": "sha1-huYybSnF0Dnen6xYSkVon5KfT3I="
  478 + },
  479 + "http-errors": {
  480 + "version": "1.6.3",
  481 + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
  482 + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
  483 + "requires": {
  484 + "depd": "1.1.2",
  485 + "inherits": "2.0.3",
  486 + "setprototypeof": "1.1.0",
  487 + "statuses": "1.5.0"
  488 + }
  489 + },
  490 + "http-signature": {
  491 + "version": "1.2.0",
  492 + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
  493 + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
  494 + "requires": {
  495 + "assert-plus": "1.0.0",
  496 + "jsprim": "1.4.1",
  497 + "sshpk": "1.14.2"
  498 + }
  499 + },
  500 + "https": {
  501 + "version": "1.0.0",
  502 + "resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz",
  503 + "integrity": "sha1-PDfHrhqO65ZpBKKtHpdaGUt+06Q="
  504 + },
  505 + "iconv-lite": {
  506 + "version": "0.4.23",
  507 + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
  508 + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
  509 + "requires": {
  510 + "safer-buffer": "2.1.2"
  511 + }
  512 + },
  513 + "inherits": {
  514 + "version": "2.0.3",
  515 + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
  516 + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
  517 + },
  518 + "ipaddr.js": {
  519 + "version": "1.8.0",
  520 + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz",
  521 + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4="
  522 + },
  523 + "is-typedarray": {
  524 + "version": "1.0.0",
  525 + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
  526 + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
  527 + },
  528 + "isarray": {
  529 + "version": "1.0.0",
  530 + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
  531 + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
  532 + },
  533 + "isstream": {
  534 + "version": "0.1.2",
  535 + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
  536 + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
  537 + },
  538 + "jsbn": {
  539 + "version": "0.1.1",
  540 + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
  541 + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
  542 + "optional": true
  543 + },
  544 + "json-schema": {
  545 + "version": "0.2.3",
  546 + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
  547 + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
  548 + },
  549 + "json-schema-traverse": {
  550 + "version": "0.3.1",
  551 + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
  552 + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
  553 + },
  554 + "json-stringify-safe": {
  555 + "version": "5.0.1",
  556 + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
  557 + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
  558 + },
  559 + "jsonwebtoken": {
  560 + "version": "8.3.0",
  561 + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.3.0.tgz",
  562 + "integrity": "sha512-oge/hvlmeJCH+iIz1DwcO7vKPkNGJHhgkspk8OH3VKlw+mbi42WtD4ig1+VXRln765vxptAv+xT26Fd3cteqag==",
  563 + "requires": {
  564 + "jws": "3.1.5",
  565 + "lodash.includes": "4.3.0",
  566 + "lodash.isboolean": "3.0.3",
  567 + "lodash.isinteger": "4.0.4",
  568 + "lodash.isnumber": "3.0.3",
  569 + "lodash.isplainobject": "4.0.6",
  570 + "lodash.isstring": "4.0.1",
  571 + "lodash.once": "4.1.1",
  572 + "ms": "2.1.1"
  573 + },
  574 + "dependencies": {
  575 + "ms": {
  576 + "version": "2.1.1",
  577 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
  578 + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
  579 + }
  580 + }
  581 + },
  582 + "jsprim": {
  583 + "version": "1.4.1",
  584 + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
  585 + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
  586 + "requires": {
  587 + "assert-plus": "1.0.0",
  588 + "extsprintf": "1.3.0",
  589 + "json-schema": "0.2.3",
  590 + "verror": "1.10.0"
  591 + }
  592 + },
  593 + "jwa": {
  594 + "version": "1.1.6",
  595 + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.6.tgz",
  596 + "integrity": "sha512-tBO/cf++BUsJkYql/kBbJroKOgHWEigTKBAjjBEmrMGYd1QMBC74Hr4Wo2zCZw6ZrVhlJPvoMrkcOnlWR/DJfw==",
  597 + "requires": {
  598 + "buffer-equal-constant-time": "1.0.1",
  599 + "ecdsa-sig-formatter": "1.0.10",
  600 + "safe-buffer": "5.1.1"
  601 + }
  602 + },
  603 + "jws": {
  604 + "version": "3.1.5",
  605 + "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.5.tgz",
  606 + "integrity": "sha512-GsCSexFADNQUr8T5HPJvayTjvPIfoyJPtLQBwn5a4WZQchcrPMPMAWcC1AzJVRDKyD6ZPROPAxgv6rfHViO4uQ==",
  607 + "requires": {
  608 + "jwa": "1.1.6",
  609 + "safe-buffer": "5.1.1"
  610 + }
  611 + },
  612 + "jwt-decode": {
  613 + "version": "2.2.0",
  614 + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz",
  615 + "integrity": "sha1-fYa9VmefWM5qhHBKZX3TkruoGnk="
  616 + },
  617 + "lodash": {
  618 + "version": "4.17.10",
  619 + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
  620 + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg=="
  621 + },
  622 + "lodash.includes": {
  623 + "version": "4.3.0",
  624 + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
  625 + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8="
  626 + },
  627 + "lodash.isboolean": {
  628 + "version": "3.0.3",
  629 + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
  630 + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY="
  631 + },
  632 + "lodash.isinteger": {
  633 + "version": "4.0.4",
  634 + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
  635 + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M="
  636 + },
  637 + "lodash.isnumber": {
  638 + "version": "3.0.3",
  639 + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
  640 + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w="
  641 + },
  642 + "lodash.isplainobject": {
  643 + "version": "4.0.6",
  644 + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
  645 + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
  646 + },
  647 + "lodash.isstring": {
  648 + "version": "4.0.1",
  649 + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
  650 + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE="
  651 + },
  652 + "lodash.once": {
  653 + "version": "4.1.1",
  654 + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
  655 + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
  656 + },
  657 + "lodash.set": {
  658 + "version": "4.3.2",
  659 + "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz",
  660 + "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM="
  661 + },
  662 + "log4js": {
  663 + "version": "3.0.4",
  664 + "resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.4.tgz",
  665 + "integrity": "sha512-4rQ1TrOf85lxB0+hBiPF27Zw8pGTHxKZq8FYfum1TNhx/KMUlQ+LL4bMKcdzc7zoAFF992w8+MFQm3BQbUgePA==",
  666 + "requires": {
  667 + "circular-json": "0.5.5",
  668 + "date-format": "1.2.0",
  669 + "debug": "3.1.0",
  670 + "streamroller": "0.7.0"
  671 + },
  672 + "dependencies": {
  673 + "debug": {
  674 + "version": "3.1.0",
  675 + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
  676 + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
  677 + "requires": {
  678 + "ms": "2.0.0"
  679 + }
  680 + }
  681 + }
  682 + },
  683 + "media-typer": {
  684 + "version": "0.3.0",
  685 + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
  686 + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
  687 + },
  688 + "memory-cache": {
  689 + "version": "0.2.0",
  690 + "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz",
  691 + "integrity": "sha1-eJCwHVLADI68nVM+H46xfjA0hxo="
  692 + },
  693 + "merge-descriptors": {
  694 + "version": "1.0.1",
  695 + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
  696 + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
  697 + },
  698 + "methods": {
  699 + "version": "1.1.2",
  700 + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
  701 + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
  702 + },
  703 + "mime": {
  704 + "version": "1.4.1",
  705 + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
  706 + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
  707 + },
  708 + "mime-db": {
  709 + "version": "1.35.0",
  710 + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz",
  711 + "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg=="
  712 + },
  713 + "mime-types": {
  714 + "version": "2.1.19",
  715 + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz",
  716 + "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==",
  717 + "requires": {
  718 + "mime-db": "1.35.0"
  719 + }
  720 + },
  721 + "minimist": {
  722 + "version": "0.0.8",
  723 + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
  724 + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
  725 + },
  726 + "mkdirp": {
  727 + "version": "0.5.1",
  728 + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
  729 + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
  730 + "requires": {
  731 + "minimist": "0.0.8"
  732 + }
  733 + },
  734 + "moment": {
  735 + "version": "2.22.2",
  736 + "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz",
  737 + "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y="
  738 + },
  739 + "morgan": {
  740 + "version": "1.9.0",
  741 + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz",
  742 + "integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=",
  743 + "requires": {
  744 + "basic-auth": "2.0.0",
  745 + "debug": "2.6.9",
  746 + "depd": "1.1.2",
  747 + "on-finished": "2.3.0",
  748 + "on-headers": "1.0.1"
  749 + }
  750 + },
  751 + "ms": {
  752 + "version": "2.0.0",
  753 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
  754 + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
  755 + },
  756 + "negotiator": {
  757 + "version": "0.6.1",
  758 + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
  759 + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
  760 + },
  761 + "oauth-sign": {
  762 + "version": "0.8.2",
  763 + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
  764 + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
  765 + },
  766 + "on-finished": {
  767 + "version": "2.3.0",
  768 + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
  769 + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
  770 + "requires": {
  771 + "ee-first": "1.1.1"
  772 + }
  773 + },
  774 + "on-headers": {
  775 + "version": "1.0.1",
  776 + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
  777 + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c="
  778 + },
  779 + "parseurl": {
  780 + "version": "1.3.2",
  781 + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
  782 + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
  783 + },
  784 + "passport": {
  785 + "version": "0.4.0",
  786 + "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.0.tgz",
  787 + "integrity": "sha1-xQlWkTR71a07XhgCOMORTRbwWBE=",
  788 + "requires": {
  789 + "passport-strategy": "1.0.0",
  790 + "pause": "0.0.1"
  791 + }
  792 + },
  793 + "passport-local": {
  794 + "version": "1.0.0",
  795 + "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz",
  796 + "integrity": "sha1-H+YyaMkudWBmJkN+O5BmYsFbpu4=",
  797 + "requires": {
  798 + "passport-strategy": "1.0.0"
  799 + }
  800 + },
  801 + "passport-strategy": {
  802 + "version": "1.0.0",
  803 + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz",
  804 + "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ="
  805 + },
  806 + "path": {
  807 + "version": "0.12.7",
  808 + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz",
  809 + "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=",
  810 + "requires": {
  811 + "process": "0.11.10",
  812 + "util": "0.10.4"
  813 + }
  814 + },
  815 + "path-to-regexp": {
  816 + "version": "0.1.7",
  817 + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
  818 + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
  819 + },
  820 + "pause": {
  821 + "version": "0.0.1",
  822 + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
  823 + "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10="
  824 + },
  825 + "performance-now": {
  826 + "version": "2.1.0",
  827 + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
  828 + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
  829 + },
  830 + "process": {
  831 + "version": "0.11.10",
  832 + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
  833 + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
  834 + },
  835 + "process-nextick-args": {
  836 + "version": "2.0.0",
  837 + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
  838 + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
  839 + },
  840 + "proxy-addr": {
  841 + "version": "2.0.4",
  842 + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
  843 + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==",
  844 + "requires": {
  845 + "forwarded": "0.1.2",
  846 + "ipaddr.js": "1.8.0"
  847 + }
  848 + },
  849 + "punycode": {
  850 + "version": "1.4.1",
  851 + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
  852 + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
  853 + },
  854 + "qs": {
  855 + "version": "6.5.2",
  856 + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
  857 + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
  858 + },
  859 + "range-parser": {
  860 + "version": "1.2.0",
  861 + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
  862 + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
  863 + },
  864 + "raw-body": {
  865 + "version": "2.3.3",
  866 + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
  867 + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
  868 + "requires": {
  869 + "bytes": "3.0.0",
  870 + "http-errors": "1.6.3",
  871 + "iconv-lite": "0.4.23",
  872 + "unpipe": "1.0.0"
  873 + }
  874 + },
  875 + "readable-stream": {
  876 + "version": "2.3.6",
  877 + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
  878 + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
  879 + "requires": {
  880 + "core-util-is": "1.0.2",
  881 + "inherits": "2.0.3",
  882 + "isarray": "1.0.0",
  883 + "process-nextick-args": "2.0.0",
  884 + "safe-buffer": "5.1.1",
  885 + "string_decoder": "1.1.1",
  886 + "util-deprecate": "1.0.2"
  887 + }
  888 + },
  889 + "request": {
  890 + "version": "2.87.0",
  891 + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz",
  892 + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==",
  893 + "requires": {
  894 + "aws-sign2": "0.7.0",
  895 + "aws4": "1.8.0",
  896 + "caseless": "0.12.0",
  897 + "combined-stream": "1.0.6",
  898 + "extend": "3.0.2",
  899 + "forever-agent": "0.6.1",
  900 + "form-data": "2.3.2",
  901 + "har-validator": "5.0.3",
  902 + "http-signature": "1.2.0",
  903 + "is-typedarray": "1.0.0",
  904 + "isstream": "0.1.2",
  905 + "json-stringify-safe": "5.0.1",
  906 + "mime-types": "2.1.19",
  907 + "oauth-sign": "0.8.2",
  908 + "performance-now": "2.1.0",
  909 + "qs": "6.5.2",
  910 + "safe-buffer": "5.1.1",
  911 + "tough-cookie": "2.3.4",
  912 + "tunnel-agent": "0.6.0",
  913 + "uuid": "3.3.2"
  914 + }
  915 + },
  916 + "request-promise": {
  917 + "version": "4.2.2",
  918 + "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.2.tgz",
  919 + "integrity": "sha1-0epG1lSm7k+O5qT+oQGMIpEZBLQ=",
  920 + "requires": {
  921 + "bluebird": "3.5.1",
  922 + "request-promise-core": "1.1.1",
  923 + "stealthy-require": "1.1.1",
  924 + "tough-cookie": "2.3.4"
  925 + }
  926 + },
  927 + "request-promise-core": {
  928 + "version": "1.1.1",
  929 + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz",
  930 + "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=",
  931 + "requires": {
  932 + "lodash": "4.17.10"
  933 + }
  934 + },
  935 + "safe-buffer": {
  936 + "version": "5.1.1",
  937 + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
  938 + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
  939 + },
  940 + "safer-buffer": {
  941 + "version": "2.1.2",
  942 + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
  943 + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
  944 + },
  945 + "sax": {
  946 + "version": "1.2.4",
  947 + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
  948 + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
  949 + },
  950 + "send": {
  951 + "version": "0.16.2",
  952 + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
  953 + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
  954 + "requires": {
  955 + "debug": "2.6.9",
  956 + "depd": "1.1.2",
  957 + "destroy": "1.0.4",
  958 + "encodeurl": "1.0.2",
  959 + "escape-html": "1.0.3",
  960 + "etag": "1.8.1",
  961 + "fresh": "0.5.2",
  962 + "http-errors": "1.6.3",
  963 + "mime": "1.4.1",
  964 + "ms": "2.0.0",
  965 + "on-finished": "2.3.0",
  966 + "range-parser": "1.2.0",
  967 + "statuses": "1.4.0"
  968 + },
  969 + "dependencies": {
  970 + "statuses": {
  971 + "version": "1.4.0",
  972 + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
  973 + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
  974 + }
  975 + }
  976 + },
  977 + "serve-static": {
  978 + "version": "1.13.2",
  979 + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
  980 + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
  981 + "requires": {
  982 + "encodeurl": "1.0.2",
  983 + "escape-html": "1.0.3",
  984 + "parseurl": "1.3.2",
  985 + "send": "0.16.2"
  986 + }
  987 + },
  988 + "setprototypeof": {
  989 + "version": "1.1.0",
  990 + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
  991 + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
  992 + },
  993 + "sshpk": {
  994 + "version": "1.14.2",
  995 + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
  996 + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
  997 + "requires": {
  998 + "asn1": "0.2.4",
  999 + "assert-plus": "1.0.0",
  1000 + "bcrypt-pbkdf": "1.0.2",
  1001 + "dashdash": "1.14.1",
  1002 + "ecc-jsbn": "0.1.2",
  1003 + "getpass": "0.1.7",
  1004 + "jsbn": "0.1.1",
  1005 + "safer-buffer": "2.1.2",
  1006 + "tweetnacl": "0.14.5"
  1007 + }
  1008 + },
  1009 + "statuses": {
  1010 + "version": "1.5.0",
  1011 + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
  1012 + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
  1013 + },
  1014 + "stealthy-require": {
  1015 + "version": "1.1.1",
  1016 + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
  1017 + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks="
  1018 + },
  1019 + "streamroller": {
  1020 + "version": "0.7.0",
  1021 + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz",
  1022 + "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==",
  1023 + "requires": {
  1024 + "date-format": "1.2.0",
  1025 + "debug": "3.1.0",
  1026 + "mkdirp": "0.5.1",
  1027 + "readable-stream": "2.3.6"
  1028 + },
  1029 + "dependencies": {
  1030 + "debug": {
  1031 + "version": "3.1.0",
  1032 + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
  1033 + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
  1034 + "requires": {
  1035 + "ms": "2.0.0"
  1036 + }
  1037 + }
  1038 + }
  1039 + },
  1040 + "string_decoder": {
  1041 + "version": "1.1.1",
  1042 + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
  1043 + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
  1044 + "requires": {
  1045 + "safe-buffer": "5.1.1"
  1046 + }
  1047 + },
  1048 + "tough-cookie": {
  1049 + "version": "2.3.4",
  1050 + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
  1051 + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
  1052 + "requires": {
  1053 + "punycode": "1.4.1"
  1054 + }
  1055 + },
  1056 + "tunnel-agent": {
  1057 + "version": "0.6.0",
  1058 + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
  1059 + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
  1060 + "requires": {
  1061 + "safe-buffer": "5.1.1"
  1062 + }
  1063 + },
  1064 + "tweetnacl": {
  1065 + "version": "0.14.5",
  1066 + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
  1067 + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
  1068 + "optional": true
  1069 + },
  1070 + "type-is": {
  1071 + "version": "1.6.16",
  1072 + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
  1073 + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
  1074 + "requires": {
  1075 + "media-typer": "0.3.0",
  1076 + "mime-types": "2.1.19"
  1077 + }
  1078 + },
  1079 + "unpipe": {
  1080 + "version": "1.0.0",
  1081 + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
  1082 + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
  1083 + },
  1084 + "util": {
  1085 + "version": "0.10.4",
  1086 + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
  1087 + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
  1088 + "requires": {
  1089 + "inherits": "2.0.3"
  1090 + }
  1091 + },
  1092 + "util-deprecate": {
  1093 + "version": "1.0.2",
  1094 + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
  1095 + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
  1096 + },
  1097 + "utils-merge": {
  1098 + "version": "1.0.1",
  1099 + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
  1100 + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
  1101 + },
  1102 + "uuid": {
  1103 + "version": "3.3.2",
  1104 + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
  1105 + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
  1106 + },
  1107 + "vary": {
  1108 + "version": "1.1.2",
  1109 + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
  1110 + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
  1111 + },
  1112 + "verror": {
  1113 + "version": "1.10.0",
  1114 + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
  1115 + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
  1116 + "requires": {
  1117 + "assert-plus": "1.0.0",
  1118 + "core-util-is": "1.0.2",
  1119 + "extsprintf": "1.3.0"
  1120 + }
  1121 + },
  1122 + "xml-js": {
  1123 + "version": "1.6.7",
  1124 + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.7.tgz",
  1125 + "integrity": "sha512-1hn0xwwfMcWywnJxqiOXiv+pZaOJyf/YWcUeqJICF0BFb+IOkRFSkKyeA0V62WqTHXNdBxNuCFHhS/w2DtYpoA==",
  1126 + "requires": {
  1127 + "sax": "1.2.4"
  1128 + }
  1129 + }
  1130 + }
  1131 +}
... ...
ais-structure/package.json 0 → 100644
... ... @@ -0,0 +1,35 @@
  1 +{
  2 + "name": "SRFc",
  3 + "version": "1.0.0",
  4 + "description": "",
  5 + "main": "index.js",
  6 + "scripts": {
  7 + "test": "echo \"Error: no test specified\" && exit 1"
  8 + },
  9 + "keywords": [],
  10 + "author": "",
  11 + "license": "ISC",
  12 + "dependencies": {
  13 + "body-parser": "^1.18.3",
  14 + "cookie-parser": "^1.4.3",
  15 + "express": "^4.16.3",
  16 + "express-jwt": "^5.3.1",
  17 + "express-load": "^1.1.16",
  18 + "fs": "0.0.1-security",
  19 + "http": "0.0.0",
  20 + "https": "^1.0.0",
  21 + "jwt-decode": "^2.2.0",
  22 + "lodash": "^4.17.10",
  23 + "log4js": "^3.0.4",
  24 + "memory-cache": "^0.2.0",
  25 + "moment": "^2.22.2",
  26 + "morgan": "^1.9.0",
  27 + "passport": "^0.4.0",
  28 + "passport-local": "^1.0.0",
  29 + "path": "^0.12.7",
  30 + "request": "^2.87.0",
  31 + "request-promise": "^4.2.2",
  32 + "uuid": "^3.3.2",
  33 + "xml-js": "^1.6.7"
  34 + }
  35 +}
... ...
ais-structure/src/config/config.js 0 → 100644
... ... @@ -0,0 +1,51 @@
  1 +/* ------------- [START SERVER CONFIG VARIABLES] ------------ */
  2 +var config = {
  3 + development: {
  4 + app_host: "0.0.0.0",
  5 + app_port: "3000",
  6 + app_https: false,
  7 + KEY: "key1.pem",
  8 + CERT: "cert1.pem",
  9 + service: {
  10 + PANDORA: {
  11 + // URI : 'http://25.27.7.151:34618', //JBOSS IOT
  12 + URI : 'http://25.27.7.151:34680', //JBOSS DEV
  13 + URI_EQX: "http://25.27.7.151:15300", //EQUINOX
  14 + //URI: "http://localhost:8080",
  15 + KEY: "./PANDORA_CERT/server.key",
  16 + CERT: "./PANDORA_CERT/server.pem",
  17 + PREFIX: "/phxPartner/v1/partner"
  18 + }
  19 + },
  20 + http_req_timeout: 120,
  21 + session: 30 //minutes
  22 + }
  23 + };
  24 + /* ------------- [END SERVER CONFIG VARIABLES] ------------ */
  25 +
  26 + /* ------------- [START SERVER GET FUNTION] ------------ */
  27 + exports.get = function get(env) {
  28 + var cfg = config[env] || config.development;
  29 + cfg.app_host = process.env.APP_HOST || cfg.app_host;
  30 + cfg.app_port = process.env.APP_PORT || cfg.app_port;
  31 + cfg.app_https = process.env.USE_HTTPS || cfg.app_https;
  32 + cfg.db_ip_port = process.env.DATABASE_IP_PORT || cfg.db_ip_port;
  33 + cfg.pandora_key = process.env.PANDORA_KEY || cfg.pandora_key;
  34 + cfg.pandora_cert = process.env.PANDORA_CERT || cfg.pandora_cert;
  35 + cfg.KEY = process.env.KEY || cfg.KEY;
  36 + cfg.CERT = process.env.CERT || cfg.CERT;
  37 + cfg.tmp_path = process.env.TMP_PATH || cfg.tmp_path;
  38 + var envService = null;
  39 + try {
  40 + if (process.env.SERVICE && process.env.SERVICE.length > 0) {
  41 + envService = JSON.parse(process.env.SERVICE);
  42 + }
  43 + } catch (error) {
  44 + envService = null;
  45 + }
  46 + cfg.service = envService != null ? envService : cfg.service;
  47 + return cfg;
  48 + };
  49 +
  50 + /* ------------- [END SERVER GET FUNTION] ------------ */
  51 +
0 52 \ No newline at end of file
... ...
ais-structure/src/config/express.js 0 → 100644
... ... @@ -0,0 +1,268 @@
  1 +/* ------------- [START IMPORT MODULE] ------------ */
  2 +const express = require('express');
  3 +const morgan = require("morgan");
  4 +const cookieParser = require('cookie-parser');
  5 +const bodyParser = require('body-parser');
  6 +const path = require('path');
  7 +var env = process.env.NODE_ENV || 'development';
  8 +/* ------------- [END SET ENVIRONMENT] ------------ */
  9 +/* ------------- [START STORE CONFIG] ------------ */
  10 +const config = require('./config').get(env);
  11 +
  12 +/* ------------- [END IMPORT MODULE] ------------ */
  13 +/* ------------- [START IMPORT OUR UTIL] ------------ */
  14 +//var logger = require('../utils/logger');
  15 +var log4js = require('log4js');
  16 +var moment = require('moment');
  17 +var passport = require('passport');
  18 +var memCache = require('memory-cache');
  19 +var jwtDecode = require('jwt-decode');
  20 +var uuid = require('uuid');
  21 +
  22 +var expireTimeDef = 30 * 60 * 1000; //minutes * seconds * 1000 ==> ms
  23 +memCache.put('expires-ms-def', expireTimeDef);
  24 +
  25 +
  26 +
  27 +/* ------------- [END IMPORT OUR UTIL] ------------ */
  28 +/* ------------- [START IMPLEMENT] ------------ */
  29 +module.exports = function () {
  30 + var logger = require("../logger/logger");
  31 +
  32 + var app = express();
  33 + app.use(bodyParser.urlencoded({
  34 + extended: true
  35 + }));
  36 + app.use(bodyParser.json());
  37 + app.use(cookieParser());
  38 +
  39 + require('./passport');
  40 + app.use(passport.initialize());
  41 + app.use(passport.session());
  42 + var isRevokedCallback = function (req, payload, done) {
  43 +
  44 + return done(null, false);
  45 + };
  46 +
  47 + var jwt = require('express-jwt');
  48 + var auth = jwt({
  49 + secret: 'ccsm',
  50 + userProperty: 'currentUser',
  51 + getToken: function fromHeaderOrQuerystring(req) {
  52 + if (req.headers.authorization && req.headers.authorization.split(' ')[0] === 'Bearer') {
  53 + return req.headers.authorization.split(' ')[1];
  54 + }
  55 + if (req.headers.authorization && req.headers.authorization.length > 0) {
  56 + return req.headers.authorization;
  57 + } else if (req.query && req.query.token) {
  58 + return req.query.token;
  59 + }
  60 + return null;
  61 + },
  62 + isRevoked: isRevokedCallback
  63 + });
  64 +
  65 + function getCurrentUser(req, res, next) {
  66 + var token = null;
  67 + var tokenHeader = req.headers["x-authorization"] || req.headers.authorization ;
  68 + if (tokenHeader && tokenHeader.split(' ')[0] === 'Bearer') {
  69 + token = tokenHeader.split(' ')[1];
  70 + } else if (req.query && req.query.token) {
  71 + token = req.query.token;
  72 + }
  73 + if (token == null) {
  74 + res.send(401);
  75 + return;
  76 + }
  77 + var decoded = jwtDecode(token);
  78 + if (!decoded.userGroup) {
  79 + if (decoded.role) {
  80 + var userGroupArr = decoded.role.split('#');
  81 + if (userGroupArr.length > 0) {
  82 + decoded.userGroup = userGroupArr;
  83 + }
  84 + }
  85 +
  86 + }
  87 + // console.log(decoded);
  88 + req.currentUser = decoded;
  89 + next();
  90 + }
  91 +
  92 + logger.info("Overriding 'Express' logger");
  93 + morgan.token('id', function getId(req) {
  94 + return req.id;
  95 + });
  96 +
  97 + morgan.token('user-id', function getId(req) {
  98 + return req.currentUser ? req.currentUser.username : '';
  99 + });
  100 +
  101 + function getRemoteIp(req ,res){
  102 + var remoteIp = req.headers['x-forwarded-for'] || req.connection.remoteAddress || '';
  103 + if(remoteIp.indexOf(':') > -1 ){
  104 + var tmp = remoteIp.split(':');
  105 + remoteIp = tmp.length > 0 ? tmp[tmp.length -1 ]:remoteIp;
  106 + }
  107 + return remoteIp;
  108 + }
  109 +
  110 + morgan.token('remote-ip', getRemoteIp);
  111 +
  112 + morgan.token('uri', function(req, res){
  113 + return req.originalUrl || req.url ;
  114 + })
  115 +
  116 + morgan.token('json', function(req, res){
  117 + var body = req.body && req.body != {} ? JSON.parse(JSON.stringify(req.body)): null ;
  118 + var bodyStr = body != null ? JSON.stringify(body):'';
  119 + var cfgLog = config.LOG || {};
  120 + if(bodyStr.length > 0 && cfgLog.exclude){
  121 + for (var key in cfgLog.exclude) {
  122 + if (cfgLog.exclude.hasOwnProperty(key)) {
  123 + var pattern = '("'+key+'":")(?:\\"|[^"])*"'
  124 + var reg = new RegExp(pattern, 'g');
  125 + bodyStr = bodyStr.replace(reg , '"'+key+'":"'+cfgLog.exclude[key]+'"')
  126 + }
  127 + }
  128 + }
  129 + if(req.url.startsWith("/service/auth/oauth2")){
  130 + console.log(config);
  131 + console.log(req.url);
  132 + return '' ;
  133 + }
  134 + return bodyStr.length > 0 && bodyStr != '{}' ? bodyStr:'' ;
  135 + })
  136 +
  137 +
  138 +
  139 +
  140 + app.all('/api/*', getCurrentUser, function (req, res, next) {
  141 + res.header("Access-Control-Allow-Origin", "*");
  142 + res.header("Access-Control-Allow-Headers", "X-Requested-With");
  143 + // var headerLog = req.currentUser ? + '' + req.currentUser.username + ':'+req.id: req.id;
  144 + next();
  145 + });
  146 +
  147 + app.use('/api/*', function (req, res, next) {
  148 + if (req.currentUser && !req.baseUrl.startsWith('/api/refresh-token')) {
  149 + //update Time Expire for keep alive
  150 + }
  151 + next();
  152 + });
  153 +
  154 + app.use(function (req, res, next) {
  155 + req.id = req.headers['x-request-id'] || uuid.v4();
  156 + var remoteIp = getRemoteIp(req, res);
  157 + var username =req.currentUser?req.currentUser.username:'';
  158 + var headerLog = 'IP|'+remoteIp+'|USER|'+username+'|REQUESTID|'+req.id;
  159 +
  160 + logger.setHeader(headerLog);
  161 + next();
  162 + });
  163 +
  164 + function logResponseBody(req, res, next) {
  165 + var oldWrite = res.write,
  166 + oldEnd = res.end;
  167 +
  168 + var chunks = [];
  169 +
  170 + res.write = function (chunk) {
  171 + chunks.push(chunk);
  172 + oldWrite.apply(res, arguments);
  173 + };
  174 +
  175 + res.end = function (chunk) {
  176 + var body = '';
  177 +
  178 + if (typeof chunk !== 'string' && !(chunk instanceof Buffer)) {
  179 + res["resBody"] = body ;
  180 + oldEnd.apply(res, arguments);
  181 + return ;
  182 + }
  183 +
  184 + if (!(chunk instanceof String || typeof chunk === 'string' ) )
  185 + chunks.push(chunk);
  186 + try {
  187 + //console.dir(chunks);
  188 + body = chunks.length > 0? Buffer.concat(chunks).toString('utf8') :'';
  189 + } catch (error) {
  190 + logger.errorStack(error);
  191 + }
  192 +
  193 + res["resBody"] = body ;
  194 +
  195 + oldEnd.apply(res, arguments);
  196 + };
  197 +
  198 + next();
  199 + }
  200 +
  201 + app.use(logResponseBody);
  202 +
  203 + morgan.token('resp-body', function(req, res){
  204 + return res.resBody?res.resBody:'' ;
  205 + })
  206 +
  207 +
  208 + // app.use(morgan('IP|:remote-ip|USER|:user-id|REQUESTID|:id|METHOD|:method|URI|:uri|REQUESTBODY|:json|RESPSTATUS|:status|RESPBODY|:resp-body|RESPTIME|:response-time', {
  209 + // "stream": logger.stream
  210 + // }));
  211 +
  212 + //app.use(logResponseBody);
  213 + /* ------------- [START LOAD API ROUTE] ------------ */
  214 + // var ALL_ROUTES = require('../routes/index').GET_ALL_ROUTES();
  215 + // app.use('/', ALL_ROUTES);
  216 +
  217 + logger.info("load module");
  218 + var load = require('express-load');
  219 + // load('modules', {
  220 + // cwd: 'server',
  221 + // verbose: true
  222 + // }).then('utils', {
  223 + // cwd: 'server',
  224 + // verbose: true
  225 + // }).into(app);
  226 + // {checkext:true, extlist:['.js','.myextension']}
  227 + var cwdPath = path.join(__dirname, '..');
  228 + load('modules', {
  229 + cwd: cwdPath,
  230 + checkext:true,
  231 + extlist:['service.js']
  232 + }).into(app);
  233 + load('modules', {
  234 + cwd: cwdPath ,
  235 + checkext:true,
  236 + extlist:['ctrl.js']
  237 + }).into(app);
  238 + load('modules', {
  239 + cwd: cwdPath,
  240 + // verbose: true,
  241 + checkext:true,
  242 + extlist:['route.js']
  243 + }).into(app);
  244 + // load('utils', {
  245 + // cwd: 'server',
  246 + // // verbose: true
  247 + // }).into(app);
  248 + /* ------------- [END LOAD API ROUTE] ------------ */
  249 + /* ------------- [START NOT MATCH ROUTE - 404 ] ------------ */
  250 +
  251 + app.all('/error', function (req, res) {
  252 + logger.error('Got Redirect Error');
  253 + res.status(500).send({
  254 + error: "Connection close!"
  255 + });
  256 + // Future Action.
  257 + });
  258 + // app.all('*', function (req, res) {
  259 + // logger.info('[TRACE] Server 404 request:' + req.originalUrl);
  260 + // res.status(500).send({
  261 + // error: "Connection close!"
  262 + // });
  263 + // // Future Action.
  264 + // });
  265 + /* ------------- [END NOT MATCH ROUTE - 404 ] ------------ */
  266 + return app;
  267 +};
  268 +/* ------------- [END IMPLEMENT] ------------ */
0 269 \ No newline at end of file
... ...
ais-structure/src/config/log4js_config.json 0 → 100644
... ... @@ -0,0 +1,59 @@
  1 +{
  2 + "appenders": {
  3 + "out": {
  4 + "type": "stdout",
  5 + "layout": {
  6 + "type": "pattern",
  7 + "pattern": "TIMESTAMP|%d{ISO8601}|LOGTYPE|%p|%m"
  8 + }
  9 + },
  10 + "app": {
  11 + "type": "file",
  12 + "filename": "app/app.log",
  13 + "layout": {
  14 + "type": "pattern",
  15 + "pattern": "TIMESTAMP|%d{ISO8601}|LOGTYPE|%p|%m"
  16 + },
  17 + "category": [
  18 + "SRFc-app"
  19 + ]
  20 + },
  21 + "access": {
  22 + "type": "file",
  23 + "filename": "access/access.log",
  24 + "layout": {
  25 + "type": "pattern",
  26 + "pattern": "TIMESTAMP|%d{ISO8601}|LOGTYPE|%p|%m"
  27 + },
  28 + "category": [
  29 + "SRFc-access"
  30 + ]
  31 + },
  32 + "service": {
  33 + "type": "file",
  34 + "filename": "service/service.log",
  35 + "layout": {
  36 + "type": "pattern",
  37 + "pattern": "TIMESTAMP|%d{ISO8601}|LOGTYPE|%p|%m"
  38 + },
  39 + "category": [
  40 + "SRFc-service"
  41 + ]
  42 + }
  43 + },
  44 + "categories": {
  45 + "default": {
  46 + "appenders": ["out", "app"],
  47 + "level": "debug"
  48 + },
  49 + "SRFc-access": {
  50 + "appenders": ["out", "access"],
  51 + "level": "info"
  52 + }
  53 + ,
  54 + "SRFc-service": {
  55 + "appenders": [ "out","service"],
  56 + "level": "info"
  57 + }
  58 + }
  59 +}
... ...
ais-structure/src/config/passport.js 0 → 100644
... ... @@ -0,0 +1,17 @@
  1 +//var models = require('../models');
  2 +var fs = require('fs');
  3 +var passport = require('passport');
  4 +var LocalStrategy = require('passport-local').Strategy;
  5 +
  6 +// var name = 'username';
  7 +// var pw = 'password';
  8 +passport.use(new LocalStrategy({
  9 + // usernameField: name,
  10 + // passwordField: pw
  11 + },
  12 + function(username, password, done) {
  13 + console.log("authen is start.");
  14 + var user = { id : 'guest' , firstName : 'srfc' , lastname: 'demo' };
  15 + return done(null, user);
  16 + }
  17 +));
0 18 \ No newline at end of file
... ...
ais-structure/src/logger/log-rotator-util.js 0 → 100644
... ... @@ -0,0 +1,280 @@
  1 +var fs = require('fs');
  2 +var util = require('util');
  3 +var zlib = require('zlib');
  4 +var events = require('events');
  5 +
  6 +/**
  7 + * Performs scheduled and on demand log rotation on files
  8 + */
  9 +function Logrotator() {
  10 + events.EventEmitter.call(this);
  11 + this.timers = {};
  12 +}
  13 +
  14 +util.inherits(Logrotator, events.EventEmitter);
  15 +
  16 +/**
  17 + * Schedules a file for rotation. emits a 'rotate' event whenever the file has been rotated.
  18 + * @param file full file path to rotate
  19 + * @param options rotation options
  20 + * - schedule - how often to check for file rotation conditions. possible values are '1s', '1m', '1h'. default is 5m.
  21 + * - size - size of the file to trigger rotation. possible values are '1k', '1m', '1g'. default is 10m.
  22 + * - count - number of files to keep. default is 3.
  23 + * - compress - whether to gzip rotated files. default is true.
  24 + * - format - a function to build the name of a rotated file. the function receives the index of the rotated file.
  25 + * default format is the index itself.
  26 + */
  27 +Logrotator.prototype.register = function(file, options) {
  28 +
  29 + options = util._extend({schedule: '5m'}, options);
  30 +
  31 + var match = options.schedule.match(/^([0-9]+)(s|m|h)$/);
  32 + if (!match) {
  33 + this.emit('error', 'incorrect schedule format ' + options.schedule);
  34 + return;
  35 + }
  36 +
  37 + if (this.timers[file]) {
  38 + this.unregister(file);
  39 + }
  40 +
  41 + // calculate the schedule
  42 + var multi = this._timeMultiplier(match[2]);
  43 + var schedule = parseInt(match[1]) * multi;
  44 + var scheduleMinute = parseInt(match[1]) ;
  45 + var _this = this;
  46 +
  47 + // perform rotation
  48 + function _doRotate() {
  49 + _this.rotate(file, options, function(err, rotated) {
  50 + if (err) {
  51 + _this.emit('error', err);
  52 + return;
  53 + }
  54 + if (rotated) {
  55 + _this.emit('rotate', file);
  56 + }
  57 + });
  58 + }
  59 +
  60 + // register the rotation timer
  61 + this.timers[file] = setInterval(function() {
  62 + var d = new Date();
  63 + var n = d.getMinutes();
  64 + if( (n % scheduleMinute) == 0 ){
  65 + _doRotate();
  66 + }
  67 +
  68 + }, 60 * 1000 );
  69 +
  70 + // immediately rotate
  71 + // _doRotate(); //ignore
  72 +};
  73 +
  74 +/**
  75 + * Remove the scheduled rotation of a file
  76 + * @param file the file to stop rotating
  77 + */
  78 +Logrotator.prototype.unregister = function(file) {
  79 + if (!this.timers[file]) {
  80 + return;
  81 + }
  82 +
  83 + clearInterval(this.timers[file]);
  84 + delete this.timers[file];
  85 +};
  86 +
  87 +/**
  88 + * Stop all schedulers
  89 + */
  90 +Logrotator.prototype.stop = function() {
  91 + var _this = this;
  92 + Object.keys(this.timers).forEach(function(name) {
  93 + clearInterval(_this.timers[name]);
  94 + });
  95 + this.timers = {};
  96 +};
  97 +
  98 +Logrotator.prototype._timeMultiplier = function(multi) {
  99 + switch (multi) {
  100 + case 's':
  101 + return 1000;
  102 + case 'm':
  103 + return 60*1000;
  104 + case 'h':
  105 + return 60*60*1000;
  106 + }
  107 +};
  108 +
  109 +Logrotator.prototype._sizeMultiplier = function(multi) {
  110 + switch (multi) {
  111 + case 'k':
  112 + return 1024;
  113 + case 'm':
  114 + return 1024*1024;
  115 + case 'g':
  116 + return 1024*1024*1024;
  117 + }
  118 +};
  119 +
  120 +/**
  121 + * Rotate a file now if size conditions are met.
  122 + * @param file full file path to rotate
  123 + * @param options rotation options
  124 + * - size - size of the file to trigger rotation. possible values are '1k', '1m', '1g'. default is 10m.
  125 + * - count - number of files to keep. default is 3.
  126 + * - compress - gzip rotated files. default is true.
  127 + * - format - a function to build the name of a rotated file. the function receives the index of the rotated file.
  128 + * default format is the index itself.
  129 + * @param cb - invoked on completion, receives 'err' on error
  130 + */
  131 +Logrotator.prototype.rotate = function(file, options, cb) {
  132 +
  133 + if (!cb) {
  134 + cb = options;
  135 + options = null;
  136 + }
  137 +
  138 + options = util._extend({size: '10m', count: 3, compress: true}, options);
  139 +
  140 + var match = options.size.match(/^([0-9]+)(k|m|g)$/);
  141 + if (!match) {
  142 + cb('incorrect size format ' + options.size);
  143 + return;
  144 + }
  145 +
  146 + var multi = this._sizeMultiplier(match[2]);
  147 + var size = parseInt(match[1]) * multi;
  148 +
  149 + // check if the file reached the trigger size
  150 + var _this = this;
  151 + fs.stat(file, function(err, stats) {
  152 + if (err) {
  153 + var message = null;
  154 + // if file does not exist, ignore
  155 + if (err.code !== 'ENOENT') {
  156 + // other errors
  157 + message = file + ' stat failed: ' + err.message;
  158 + }
  159 + cb(message);
  160 + return;
  161 + }
  162 +
  163 + // this isn't a file
  164 + if (!stats.isFile()) {
  165 + cb(file + ' is not a file');
  166 + return;
  167 + }
  168 +
  169 + // check file size to see if rotation is needed
  170 + if (stats.size >= size) {
  171 + _this._rotate(file, options.count, options, cb);
  172 + } else {
  173 + cb(null, false);
  174 + }
  175 + });
  176 +
  177 +};
  178 +
  179 +/**
  180 + * Get the correct file name based on params
  181 + * @param file
  182 + * @param index
  183 + * @param options
  184 + * @private
  185 + */
  186 +Logrotator.prototype._filename = function(file, index, options) {
  187 + var format = index;
  188 + if (typeof options.format === 'function') {
  189 + format = options.format(index);
  190 + }
  191 +
  192 + var fileName = file + '.' + format;
  193 + if (options.compress) {
  194 + fileName += '.gz';
  195 + }
  196 + return fileName;
  197 +};
  198 +
  199 +/**
  200 + * The log rotation brains
  201 + * @param file
  202 + * @param index
  203 + * @param options
  204 + * @param cb
  205 + * @private
  206 + */
  207 +Logrotator.prototype._rotate = function(file, index, options, cb) {
  208 +
  209 + // rotate all existing files
  210 + // 1. delete last file
  211 + // 2. rename all files to with +1
  212 + // 3. read + compress current log into 1
  213 + // 4. truncate file to size 0
  214 + var _this = this;
  215 + var fileName = this._filename(file, index, options);
  216 +
  217 + // delete last file
  218 + if (index === options.count) {
  219 + fs.unlink(fileName, function(err) {
  220 + if (err && err.code !== 'ENOENT') {
  221 + cb('error deleting file ' + fileName + ': ' + err.message);
  222 + return;
  223 + }
  224 + _this._rotate(file, --index, options, cb);
  225 + });
  226 + return;
  227 + }
  228 +
  229 + // rename all files to with +1
  230 + if (index > 0) {
  231 + var renameTo = this._filename(file, index+1, options);
  232 + fs.rename(fileName, renameTo, function(err) {
  233 + if (err && err.code !== 'ENOENT') {
  234 + cb('error renaming file ' + fileName + ': ' + err.message);
  235 + return;
  236 + }
  237 + _this._rotate(file, --index, options, cb);
  238 + });
  239 +
  240 + return;
  241 + }
  242 +
  243 + // read (and compress) the file log into index 1
  244 + var fis = fs.createReadStream(file);
  245 + var fos = fs.createWriteStream(this._filename(file, 1, options));
  246 + var pipe;
  247 + if (options.compress) {
  248 + pipe = fis.pipe(zlib.createGzip()).pipe(fos);
  249 + } else {
  250 + pipe = fis.pipe(fos);
  251 + }
  252 +
  253 + var error;
  254 + pipe.on('finish', function() {
  255 + if (error) {
  256 + return;
  257 + }
  258 + // truncate log file to size 0
  259 + fs.truncate(file, 0, function(err) {
  260 + if (err) {
  261 + cb && cb('error truncating file ' + file + ': ' + err.message);
  262 + return;
  263 + }
  264 + cb && cb(null, true);
  265 + })
  266 + });
  267 + pipe.on('error', function(err) {
  268 + error = true;
  269 + cb('error compressing file ' + file + ': ' + err.message);
  270 + cb = null;
  271 + });
  272 +};
  273 +
  274 +// create a new log rotator
  275 +module.exports.create = function() {
  276 + return new Logrotator();
  277 +};
  278 +
  279 +// global log rotator
  280 +module.exports.rotator = new Logrotator();
0 281 \ No newline at end of file
... ...
ais-structure/src/logger/logger.js 0 → 100644
... ... @@ -0,0 +1,142 @@
  1 +var log4js = require('log4js');
  2 +var mkdirp = require('mkdirp');
  3 +var fs = require('fs');
  4 +var path = require('path');
  5 +var logrotate = require('./log-rotator-util');
  6 +var moment = require('moment');
  7 +var logConfigPath = path.join(__dirname, '..', 'config', 'log4js_config.json');
  8 +var data = fs.readFileSync(logConfigPath, 'utf8');
  9 +var logConfig = JSON.parse(data);
  10 +
  11 +
  12 +var logDir = process.env.LOG_PATH || './logs';
  13 +var logRotateTime = process.env.LOG_ROTATE_TIME || '15';
  14 +
  15 +// if (!fs.existsSync(logDir)){
  16 +// fs.mkdirSync(logDir);
  17 +// }
  18 +
  19 +for (var key in logConfig.appenders) {
  20 + var logAppender = logConfig.appenders[key];
  21 + if (logAppender.filename) {
  22 +
  23 + var pathFile = logDir+'/'+logAppender.filename;
  24 + var dirLog = path.dirname(pathFile);
  25 + if (!fs.existsSync(dirLog)){
  26 + mkdirp(dirLog);
  27 + }
  28 + logAppender.filename = pathFile;
  29 + logConfig.appenders[key] = logAppender;
  30 + }
  31 +}
  32 +path.dirname(require.main.filename);
  33 +
  34 +log4js.configure(logConfig);
  35 +var rotator = null;
  36 +if (rotator == null) {
  37 + // "access": {
  38 + // "type": "file",
  39 + rotator = logrotate.rotator;
  40 + for (var key in logConfig.appenders) {
  41 + if (logConfig.appenders[key].type == 'file') {
  42 + var pathLogFile = logConfig.appenders[key].filename;
  43 + rotator.register(pathLogFile, {
  44 + schedule:logRotateTime+'m',
  45 + size: '0m',
  46 + compress: false,
  47 + count: 0,
  48 + format: function (index) {
  49 + let format = moment().format("YYYYMMDD_HHmm");
  50 + return format;
  51 + }
  52 + });
  53 + }
  54 + }
  55 +
  56 + rotator.on('error', function (err) {
  57 + // console.log('oops, an error occured!');
  58 + });
  59 +
  60 + // // 'rotate' event is invoked whenever a registered file gets rotated
  61 + // rotator.on('rotate', function (file) {
  62 + // console.log('file ' + file + ' was rotated!');
  63 + // });
  64 +}
  65 +var _logger = log4js.getLogger('phxpartners-app');
  66 +var _serviceLogger = log4js.getLogger('phxpartners-service');
  67 +var _accessLogger = log4js.getLogger('phxpartners-access');
  68 +
  69 +var logger = module.exports = {};
  70 +
  71 +logger.setHeader = function (fn) {
  72 + logger['header'] = fn;
  73 + // return this;
  74 +};
  75 +
  76 +logger.debug = function (msg) {
  77 + var header = logger.header || '';
  78 + _logger.debug(header + '::' + msg);
  79 +};
  80 +
  81 +logger.info = function (msg) {
  82 + var header = logger.header || '';
  83 + _logger.info(header + '::' + msg);
  84 +};
  85 +
  86 +logger.trace = function (msg) {
  87 + var header = logger.header || '';
  88 + _logger.trace(header + '::' + msg);
  89 +};
  90 +
  91 +logger.warn = function (msg) {
  92 + var header = logger.header || '';
  93 + _logger.warn(header + '::' + msg);
  94 +};
  95 +
  96 +logger.error = function (msg, err) {
  97 + var header = logger.header || '';
  98 + if (err) {
  99 + _logger.error(header + '::' + msg, err);
  100 + } else {
  101 + _logger.error(header + '::' + msg);
  102 + }
  103 +};
  104 +
  105 +logger.errorStack = function (err) {
  106 + _logger.debug(err.stack || err);
  107 + var header = logger.header || '';
  108 + _logger.error(header + '::' + JSON.stringify(err.stack || err));
  109 +
  110 + // if (err) {
  111 + // _logger.error(header + '::' + msg, err);
  112 + // } else {
  113 + // _logger.error(header + '::' + msg);
  114 + // }
  115 +};
  116 +
  117 +logger.log = function (msg) {
  118 + var header = logger.header || '';
  119 + _logger.log(header + '::' + msg);
  120 +};
  121 +
  122 +logger.fatal = function (msg) {
  123 + var header = logger.header || '';
  124 + _logger.fatal(header + '::' + msg);
  125 +};
  126 +
  127 +logger.stream = {
  128 + write: function (message, encoding) {
  129 + _accessLogger.info(message);
  130 + }
  131 +};
  132 +
  133 +logger.serviceLog = _serviceLogger;
  134 +// function(msg) {
  135 +// // var header = logger.header || '';
  136 +// _serviceLogger.info(msg);
  137 +// };
  138 +
  139 +logger.logResponse = function (msg) {
  140 + var header = logger.header || '';
  141 + _accessLogger.debug(header + '::' + msg);
  142 +};
0 143 \ No newline at end of file
... ...
ais-structure/src/modules/login/login.ctrl.js 0 → 100644
... ... @@ -0,0 +1,34 @@
  1 +var fs = require('fs');
  2 +var moment = require('moment');
  3 +var _ = require('lodash');
  4 +var env = process.env.NODE_ENV || 'development';
  5 +var rp = require('request-promise');
  6 +var logger = require('../../logger/logger');
  7 +var cfg = require('../../config/config.js').get(env);
  8 +
  9 +
  10 +exports.login = function (req, res, next) {
  11 + // res.json('result');
  12 + var currentUserId = req.query.userId ? req.query.userId : "test001";
  13 + logger.info('Check Duplicate Session by id = [' + currentUserId + ']');
  14 + // var data = req.body;
  15 + // logger.info(data);
  16 + var ret = {
  17 + responseCode: 200,
  18 + responseMessage: 'Success'
  19 + };
  20 + try {
  21 + var now = moment();
  22 + var expired = moment().add(cfg.session, 'minutes');
  23 + ret.timestemp = expired;
  24 + res.json(ret);
  25 +
  26 +
  27 + } catch (error) {
  28 + logger.errorStack(error);
  29 + ret.responseCode = 500;
  30 + ret.responseMessage = 'Fail';
  31 + ret.responseDescription = error.message;
  32 + res.json(ret);
  33 + }
  34 +};
0 35 \ No newline at end of file
... ...
ais-structure/src/modules/login/login.route.js 0 → 100644
... ... @@ -0,0 +1,8 @@
  1 +module.exports = function (app) {
  2 + var loginCtrl = app.modules.login.loginCtrl;
  3 +
  4 + app.get('/user/login',
  5 + loginCtrl.login
  6 + );
  7 +
  8 +};
... ...
ais-structure/src/modules/vizcard/postVizCard.ctrl.js 0 → 100644
... ... @@ -0,0 +1,11 @@
  1 +var fs = require('fs');
  2 +var moment = require('moment');
  3 +var _ = require('lodash');
  4 +var env = process.env.NODE_ENV || 'development';
  5 +var rp = require('request-promise');
  6 +var logger = require('../../logger/logger');
  7 +var cfg = require('../../config/config.js').get(env);
  8 +
  9 +exports.postVizcard = function (req, res, next){
  10 + res.send("post viz card");
  11 +};
0 12 \ No newline at end of file
... ...
ais-structure/src/modules/vizcard/vizCard.ctrl.js 0 → 100644
... ... @@ -0,0 +1,86 @@
  1 +var fs = require('fs');
  2 +var moment = require('moment');
  3 +var _ = require('lodash');
  4 +var env = process.env.NODE_ENV || 'development';
  5 +var rp = require('request-promise');
  6 +var logger = require('../../logger/logger');
  7 +var cfg = require('../../config/config.js').get(env);
  8 +var request = require('request');
  9 +var parseJson = require('xml-js');
  10 +var _url = `http://localhost:8080`
  11 +
  12 +exports.vizcard = async function (req, res, next) {
  13 + var requestXml = `<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/">
  14 + <soap:Header/>
  15 + <soap:Body>
  16 + <tem:SearchCustomer>
  17 + <tem:username>axviz</tem:username>
  18 + <tem:password>1234</tem:password>
  19 + <tem:systemName>30</tem:systemName>
  20 + <tem:queryType>1</tem:queryType>
  21 + <tem:cardId>${req.params.id}</tem:cardId>
  22 + </tem:SearchCustomer>
  23 + </soap:Body>
  24 + </soap:Envelope>`
  25 +
  26 + // console.log(requestXml);
  27 + // console.log(req.query.fields)
  28 +
  29 + const result = await asyncRequest({
  30 + url : _url,
  31 + body : requestXml,
  32 + method : 'POST'
  33 + });
  34 +
  35 + // parseString(result.body, function (err, result1) {
  36 + // console.log(result1);
  37 + // });
  38 +
  39 + var result1 = parseJson.xml2json(result.body, {compact: true, spaces: 4})
  40 + result1 = JSON.parse(result1)
  41 + result1 = result1['soap:Envelope']['soap:Body']['tem:SearchCustomerResponse']['tem:SearchCustomerResult']['tem:CustomerSearchResult'];
  42 + delete result1._comment;
  43 +
  44 + var response = {};
  45 +
  46 + response['resultCode'] = '20000';
  47 + response['developerMessage'] = 'Success';
  48 +
  49 + if(req.query.fields){
  50 + var listFields = req.query.fields.split(",");
  51 + // console.log(listFields)
  52 + }
  53 +
  54 + for(var key in result1){
  55 + var keyObj = capitalizeFirstLetter(key.replace('tem:',''))
  56 + // console.log(keyObj+' : '+result1[key]['_text']);
  57 + if(listFields){
  58 + if(listFields.includes(keyObj)){
  59 + response[keyObj] = result1[key]['_text'];
  60 + }
  61 + } else {
  62 + response[keyObj] = result1[key]['_text'];
  63 + }
  64 + }
  65 +
  66 + res.status(200).json(response);
  67 +};
  68 +
  69 +function capitalizeFirstLetter(string) {
  70 + return string.charAt(0).toLowerCase() + string.slice(1);
  71 +}
  72 +
  73 +function asyncRequest (params = {}) {
  74 + return new Promise((resolve, reject) => {
  75 + request(params, function (error, response, body) {
  76 + if (error) {
  77 + reject(error);
  78 + } else {
  79 + resolve({
  80 + 'body' : body,
  81 + 'response': response
  82 + });
  83 + }
  84 + });
  85 + });
  86 +}
0 87 \ No newline at end of file
... ...
ais-structure/src/modules/vizcard/vizCard.route.js 0 → 100644
... ... @@ -0,0 +1,12 @@
  1 +module.exports = function (app) {
  2 + var vizcardCtrl = app.modules.vizcard.vizCardCtrl;
  3 + var postVizcardCtrl = app.modules.vizcard.postVizCardCtrl;
  4 +
  5 + app.get('/cmf/v2/vizCard/:id.json',
  6 + vizcardCtrl.vizcard
  7 + );
  8 +
  9 + app.post('/cmf/v2/vizCard.json',
  10 + postVizcardCtrl.postVizcard
  11 + );
  12 +};
... ...
... ... @@ -1,48 +0,0 @@
1   -var express = require('express');
2   -var path = require('path');
3   -var favicon = require('serve-favicon');
4   -var logger = require('morgan');
5   -var cookieParser = require('cookie-parser');
6   -var bodyParser = require('body-parser');
7   -
8   -var cmf = require('./routes/CMF/index');
9   -var users = require('./routes/users');
10   -
11   -var app = express();
12   -var prefixUrl = '/appName/v2'
13   -
14   -// view engine setup
15   -app.set('views', path.join(__dirname, 'views'));
16   -app.set('view engine', 'jade');
17   -
18   -// uncomment after placing your favicon in /public
19   -//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
20   -app.use(logger('dev'));
21   -app.use(bodyParser.json());
22   -app.use(bodyParser.urlencoded({ extended: false }));
23   -app.use(cookieParser());
24   -app.use(express.static(path.join(__dirname, 'public')));
25   -
26   -app.use(prefixUrl + '/', cmf);
27   -app.use('/users', users);
28   -app.listen(3000, () => console.log('Example app listening on port 3000!'))
29   -
30   -// catch 404 and forward to error handler
31   -app.use(function(req, res, next) {
32   - var err = new Error('Not Found');
33   - err.status = 404;
34   - next(err);
35   -});
36   -
37   -// error handler
38   -app.use(function(err, req, res, next) {
39   - // set locals, only providing error in development
40   - res.locals.message = err.message;
41   - res.locals.error = req.app.get('env') === 'development' ? err : {};
42   -
43   - // render the error page
44   - res.status(err.status || 500);
45   - res.render('error');
46   -});
47   -
48   -module.exports = app;
app_srfp.js
... ... @@ -1,93 +0,0 @@
1   -var express = require('express');
2   -var path = require('path');
3   -var favicon = require('serve-favicon');
4   -var logger = require('morgan');
5   -var cookieParser = require('cookie-parser');
6   -var bodyParser = require('body-parser');
7   -var index = require('./routes/index');
8   -var users = require('./routes/users');
9   -var app = express();
10   -var fs = require('fs');
11   -var util = require('util');
12   -var crypto = require('crypto');
13   -var http = require("http");
14   -var url = require("url");
15   -
16   -app.listen(3000, function () {
17   - console.log('Example app listening on port 3000!')
18   -});
19   -
20   -/*const now=(unit)=>{
21   -
22   - const hrTime=process.hrtime();
23   - switch (unit) {
24   - case 'milli':return hrTime[0] * 1000 + hrTime[1] / 1000000;
25   - case 'micro':return hrTime[0] * 1000000 + hrTime[1] / 1000;
26   - case 'nano':return hrTime[0] * 1000000000 + hrTime[1] ;
27   - break;
28   - default:return hrTime[0] * 1000000000 + hrTime[1] ;
29   - }
30   -}*/
31   -
32   -app.get('/multiMedia.json',function (req, res) {
33   - var name = req.query.name;
34   - var type = req.query.type;
35   - var commadId = req.query.commandId;
36   - var pathfile = null;
37   -
38   - if (type === 'audio') {
39   - pathfile = './audio/' + name;
40   - } else if (type === 'video') {
41   - pathfile = './video/' + name;
42   - } else if (type === 'image') {
43   - pathfile = 'D:\\PROJECT@AIS\\SRFP_Node\\Genesis-SRFP\\public\\image\\' + name;
44   - } else {
45   - console.log('Access Denied');
46   - }
47   -
48   - // if (type === 'audio') {
49   - // pathfile = path.join('D:', 'Node','Audio' , name);
50   - // } else if (type === 'video') {
51   - // pathfile = path.join('D:', 'Node','Video' , name);
52   - // } else if (type === 'image') {
53   - // pathfile = path.join('D:', 'Node','Image' , name);
54   - // } else {
55   - // console.log('Access Denied');
56   - // }
57   -
58   - var file = fs.readFileSync(pathfile);
59   - var value = Buffer.from(file).toString('base64');
60   -
61   - var stats = fs.statSync(pathfile);
62   - var mtime = stats.mtime;
63   - var size = stats.size;
64   -
65   - console.log(mtime.toISOString().replace(/T/, ' ').replace(/\..+/, ''));
66   - // console.log(mtime.getTime());
67   -
68   - // Get the if-modified-since header from the request
69   - var reqModDate = req.headers['if-modified-since'];
70   - // console.log('If-modify ' + new Date(reqModDate).toISOString().replace(/T/, ' ').replace(/\..+/, ''));
71   -
72   - if (reqModDate != null) {
73   - reqModDate = new Date(reqModDate);
74   - if (reqModDate.getTime() == mtime.getTime()) {
75   - console.log("load from cache");
76   - res.writeHead(304, {
77   - "Last-Modified": mtime.toUTCString()
78   - });
79   - res.end();
80   - } else {
81   - console.log("no cache");
82   - var fileName = "test.jpg";
83   - res.download(pathfile, fileName);
84   - res.end();
85   - }
86   - } else {
87   - res.writeHead(304, {
88   - "Last-Modified": mtime.toUTCString()
89   - });
90   - res.end();
91   - }
92   - // res.send(value.toString());
93   -});
... ... @@ -1,90 +0,0 @@
1   -#!/usr/bin/env node
2   -
3   -/**
4   - * Module dependencies.
5   - */
6   -
7   -var app = require('../app');
8   -var debug = require('debug')('srfpgenesis:server');
9   -var http = require('http');
10   -
11   -/**
12   - * Get port from environment and store in Express.
13   - */
14   -
15   -var port = normalizePort(process.env.PORT || '3000');
16   -app.set('port', port);
17   -
18   -/**
19   - * Create HTTP server.
20   - */
21   -
22   -var server = http.createServer(app);
23   -
24   -/**
25   - * Listen on provided port, on all network interfaces.
26   - */
27   -
28   -server.listen(port);
29   -server.on('error', onError);
30   -server.on('listening', onListening);
31   -
32   -/**
33   - * Normalize a port into a number, string, or false.
34   - */
35   -
36   -function normalizePort(val) {
37   - var port = parseInt(val, 10);
38   -
39   - if (isNaN(port)) {
40   - // named pipe
41   - return val;
42   - }
43   -
44   - if (port >= 0) {
45   - // port number
46   - return port;
47   - }
48   -
49   - return false;
50   -}
51   -
52   -/**
53   - * Event listener for HTTP server "error" event.
54   - */
55   -
56   -function onError(error) {
57   - if (error.syscall !== 'listen') {
58   - throw error;
59   - }
60   -
61   - var bind = typeof port === 'string'
62   - ? 'Pipe ' + port
63   - : 'Port ' + port;
64   -
65   - // handle specific listen errors with friendly messages
66   - switch (error.code) {
67   - case 'EACCES':
68   - console.error(bind + ' requires elevated privileges');
69   - process.exit(1);
70   - break;
71   - case 'EADDRINUSE':
72   - console.error(bind + ' is already in use');
73   - process.exit(1);
74   - break;
75   - default:
76   - throw error;
77   - }
78   -}
79   -
80   -/**
81   - * Event listener for HTTP server "listening" event.
82   - */
83   -
84   -function onListening() {
85   - var addr = server.address();
86   - var bind = typeof addr === 'string'
87   - ? 'pipe ' + addr
88   - : 'port ' + addr.port;
89   - debug('Listening on ' + bind);
90   -}
config/config.js
... ... @@ -1,25 +0,0 @@
1   -'use strict';
2   -
3   -var config = {};
4   -
5   -// config.statCodeTbl = {};
6   -config.log = {};
7   -config.mediaPath={};
8   -
9   -config.log.logPath = 'D:\\PROJECT@AIS\\SRFP_Node\\SRFPGenesis_TestLog\\logTest\\';
10   -config.log.summaryPath = 'D:\\PROJECT@AIS\\SRFP_Node\\SRFPGenesis_TestLog\\logTest\\';
11   -config.log.statPath = 'D:\\PROJECT@AIS\\SRFP_Node\\SRFPGenesis_TestLog\\logTest\\';
12   -config.log.alarmPath = 'D:\\PROJECT@AIS\\SRFP_Node\\SRFPGenesis_TestLog\\logTest\\';
13   -config.log.detailPath = 'D:\\PROJECT@AIS\\SRFP_Node\\SRFPGenesis_TestLog\\logTest\\';
14   -config.log.projectName = 'SRFP_Genesis';
15   -config.log.logTime = 15; //Minute
16   -config.log.statTime = 5; //Minute
17   -config.log.alarmTime = 5; //Minute
18   -config.log.detailTime = 15; //Minute
19   -config.log.summaryTime = 15; //Minute
20   -
21   -config.mediaPath.video ="D:\\PROJECT@AIS\\SRFP_Node\\SRFPGenesis_TestLog\\source\\video\\";// --> mp4.m4a
22   -config.mediaPath.image ='D:\\PROJECT@AIS\\SRFP_Node\\SRFPGenesis_TestLog\\source\\image\\';// --> jpg,jpeg,png
23   -config.mediaPath.audio ='D:\\PROJECT@AIS\\SRFP_Node\\SRFPGenesis_TestLog\\source\\audio\\';// --> mp3,m4a
24   -
25   -module.exports = config;
config/log4js.json
... ... @@ -1,45 +0,0 @@
1   -{
2   - "appenders": {
3   - "access": {
4   - "type": "dateFile",
5   - "filename": "log/access",
6   - "pattern": ".yyyy-MM-dd-hh-mm.log",
7   - "compress": false,
8   - "category": "serverLog",
9   - "layout": {
10   - "type": "pattern",
11   - "pattern": "%h %d{dd/MM/yyyy hh:mm} %m"
12   - }
13   - },
14   - "app": {
15   - "type": "file",
16   - "filename": "log/app.log",
17   - "maxLogSize": 10485760,
18   - "numBackups": 3
19   - },
20   - "errorFile": {
21   - "type": "file",
22   - "filename": "log/errors.log"
23   - },
24   - "errors": {
25   - "type": "logLevelFilter",
26   - "level": "ERROR",
27   - "appender": "errorFile"
28   - }
29   - },
30   - "categories": {
31   - "default": {
32   - "appenders": [
33   - "app",
34   - "errors"
35   - ],
36   - "level": "DEBUG"
37   - },
38   - "serverLog": {
39   - "appenders": [
40   - "access"
41   - ],
42   - "level": "DEBUG"
43   - }
44   - }
45   -}
46 0 \ No newline at end of file
config/logger.js
... ... @@ -1,3 +0,0 @@
1   -var SutisLog = require('../utils/SutisLog')
2   -var logger = new SutisLog()
3   -module.exports = logger
4 0 \ No newline at end of file
config/writeLog.rar
No preview for this file type
logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805210945.detail
... ... @@ -1 +0,0 @@
1   -20180521 09:49:19|DESKTOP-G5SEAPD|SRFP_Genesis - detail: {"SRFP-Genesis.Details":{"Session":"1","Scenario":"getMultimedia","Identity":"","InputTimeStamp":"20180521 09:49:19.959","Input":[{"Event":"SRFP-Genesis.getMultimedia","Type":"REQ","RawData":"http://localhost:3000/mulitiMedia.json?name=girl.jpg&type=image&commandId=1","Data":{"Name":"girl.jpg","Type":"image","CommandId":"1"}}],"OutputTimeStamp":"20180521 09:49:19.959","Output":[{"Event":"SRFP-Genesis.getMultimedia","Type":"RES","RawData":"girl.jpg","Data":{"Size":"null","Modified":"null"}}],"ProcessingTime":"0 ms"}}
logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805210945.stat
... ... @@ -1,3 +0,0 @@
1   -20180521 09:49:19|DESKTOP-G5SEAPD|SRFP_Genesis - stat: SRFP-Genesis Returned Unknown URL
2   -20180521 09:49:19|DESKTOP-G5SEAPD|SRFP_Genesis - stat: SRFP-Genesis Received Unknown URL Request
3   -20180521 09:49:19|DESKTOP-G5SEAPD|SRFP_Genesis - stat: SRFP-Genesis Received Unknown URL Request
logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805210945.summary
... ... @@ -1 +0,0 @@
1   -20180521 09:49:19|DESKTOP-G5SEAPD|SRFP_Genesis - summary: 20180521 09:49:19|null||getMultimedia|null|40400|Unknown URL|[client; getMultimedia(1); [40400; Unknown URL(1)]]|20180521 09:49:19|0
logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805211000.detail
... ... @@ -1 +0,0 @@
1   -20180521 10:02:46|DESKTOP-G5SEAPD|SRFP_Genesis|{"SRFP-Genesis.Details":{"Session":"1","Scenario":"getMultimedia","Identity":"","InputTimeStamp":"20180521 10:02:46.944","Input":[{"Event":"SRFP-Genesis.getMultimedia","Type":"REQ","RawData":"http://localhost:3000/mulitiMedia.json?name=girl.jpg&type=image&commandId=1","Data":{"Name":"girl.jpg","Type":"image","CommandId":"1"}}],"OutputTimeStamp":"20180521 10:02:46.944","Output":[{"Event":"SRFP-Genesis.getMultimedia","Type":"RES","RawData":"girl.jpg","Data":{"Size":"null","Modified":"null"}}],"ProcessingTime":"0 ms"}}
logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805211000.stat
... ... @@ -1,3 +0,0 @@
1   -20180521 10:02:46|DESKTOP-G5SEAPD|SRFP_Genesis|SRFP-Genesis Received Unknown URL Request
2   -20180521 10:02:46|DESKTOP-G5SEAPD|SRFP_Genesis|SRFP-Genesis Returned Unknown URL
3   -20180521 10:02:46|DESKTOP-G5SEAPD|SRFP_Genesis|SRFP-Genesis Received Unknown URL Request
logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805211000.summary
... ... @@ -1 +0,0 @@
1   -20180521 10:02:46|null||getMultimedia|null|40400|Unknown URL|[client; getMultimedia(1); [40400; Unknown URL(1)]]|20180521 10:02:46|1
package-lock.json
... ... @@ -1,1225 +0,0 @@
1   -{
2   - "name": "srfpgenesis",
3   - "version": "0.0.0",
4   - "lockfileVersion": 1,
5   - "requires": true,
6   - "dependencies": {
7   - "accepts": {
8   - "version": "1.3.4",
9   - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz",
10   - "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=",
11   - "requires": {
12   - "mime-types": "2.1.17",
13   - "negotiator": "0.6.1"
14   - }
15   - },
16   - "acorn": {
17   - "version": "2.7.0",
18   - "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz",
19   - "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc="
20   - },
21   - "acorn-globals": {
22   - "version": "1.0.9",
23   - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz",
24   - "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=",
25   - "requires": {
26   - "acorn": "2.7.0"
27   - }
28   - },
29   - "ajv": {
30   - "version": "5.5.2",
31   - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
32   - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
33   - "requires": {
34   - "co": "4.6.0",
35   - "fast-deep-equal": "1.1.0",
36   - "fast-json-stable-stringify": "2.0.0",
37   - "json-schema-traverse": "0.3.1"
38   - }
39   - },
40   - "align-text": {
41   - "version": "0.1.4",
42   - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
43   - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
44   - "requires": {
45   - "kind-of": "3.2.2",
46   - "longest": "1.0.1",
47   - "repeat-string": "1.6.1"
48   - }
49   - },
50   - "amdefine": {
51   - "version": "1.0.1",
52   - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
53   - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
54   - },
55   - "array-flatten": {
56   - "version": "1.1.1",
57   - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
58   - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
59   - },
60   - "asap": {
61   - "version": "1.0.0",
62   - "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz",
63   - "integrity": "sha1-sqRdpf36ILBJb8N2jMJ8EvqRan0="
64   - },
65   - "asn1": {
66   - "version": "0.2.4",
67   - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
68   - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
69   - "requires": {
70   - "safer-buffer": "2.1.2"
71   - }
72   - },
73   - "assert-plus": {
74   - "version": "1.0.0",
75   - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
76   - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
77   - },
78   - "asynckit": {
79   - "version": "0.4.0",
80   - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
81   - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
82   - },
83   - "aws-sign2": {
84   - "version": "0.7.0",
85   - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
86   - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
87   - },
88   - "aws4": {
89   - "version": "1.8.0",
90   - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
91   - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
92   - },
93   - "basic-auth": {
94   - "version": "2.0.0",
95   - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz",
96   - "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=",
97   - "requires": {
98   - "safe-buffer": "5.1.1"
99   - }
100   - },
101   - "bcrypt-pbkdf": {
102   - "version": "1.0.2",
103   - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
104   - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
105   - "optional": true,
106   - "requires": {
107   - "tweetnacl": "0.14.5"
108   - }
109   - },
110   - "body-parser": {
111   - "version": "1.18.2",
112   - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
113   - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
114   - "requires": {
115   - "bytes": "3.0.0",
116   - "content-type": "1.0.4",
117   - "debug": "2.6.9",
118   - "depd": "1.1.2",
119   - "http-errors": "1.6.2",
120   - "iconv-lite": "0.4.19",
121   - "on-finished": "2.3.0",
122   - "qs": "6.5.1",
123   - "raw-body": "2.3.2",
124   - "type-is": "1.6.15"
125   - }
126   - },
127   - "bytes": {
128   - "version": "3.0.0",
129   - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
130   - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
131   - },
132   - "camelcase": {
133   - "version": "1.2.1",
134   - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
135   - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
136   - },
137   - "caseless": {
138   - "version": "0.12.0",
139   - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
140   - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
141   - },
142   - "center-align": {
143   - "version": "0.1.3",
144   - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
145   - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
146   - "requires": {
147   - "align-text": "0.1.4",
148   - "lazy-cache": "1.0.4"
149   - }
150   - },
151   - "character-parser": {
152   - "version": "1.2.1",
153   - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz",
154   - "integrity": "sha1-wN3kqxgnE7kZuXCVmhI+zBow/NY="
155   - },
156   - "circular-json": {
157   - "version": "0.5.5",
158   - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.5.tgz",
159   - "integrity": "sha512-13YaR6kiz0kBNmIVM87Io8Hp7bWOo4r61vkEANy8iH9R9bc6avud/1FT0SBpqR1RpIQADOh/Q+yHZDA1iL6ysA=="
160   - },
161   - "clean-css": {
162   - "version": "3.4.28",
163   - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz",
164   - "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=",
165   - "requires": {
166   - "commander": "2.8.1",
167   - "source-map": "0.4.4"
168   - },
169   - "dependencies": {
170   - "commander": {
171   - "version": "2.8.1",
172   - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
173   - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
174   - "requires": {
175   - "graceful-readlink": "1.0.1"
176   - }
177   - }
178   - }
179   - },
180   - "cliui": {
181   - "version": "2.1.0",
182   - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
183   - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
184   - "requires": {
185   - "center-align": "0.1.3",
186   - "right-align": "0.1.3",
187   - "wordwrap": "0.0.2"
188   - },
189   - "dependencies": {
190   - "wordwrap": {
191   - "version": "0.0.2",
192   - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
193   - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
194   - }
195   - }
196   - },
197   - "co": {
198   - "version": "4.6.0",
199   - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
200   - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
201   - },
202   - "combined-stream": {
203   - "version": "1.0.6",
204   - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
205   - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
206   - "requires": {
207   - "delayed-stream": "1.0.0"
208   - }
209   - },
210   - "commander": {
211   - "version": "2.6.0",
212   - "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz",
213   - "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0="
214   - },
215   - "constantinople": {
216   - "version": "3.0.2",
217   - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz",
218   - "integrity": "sha1-S5RdmTeQe82Y7ldRIsOBdRZUQUE=",
219   - "requires": {
220   - "acorn": "2.7.0"
221   - }
222   - },
223   - "content-disposition": {
224   - "version": "0.5.2",
225   - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
226   - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
227   - },
228   - "content-type": {
229   - "version": "1.0.4",
230   - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
231   - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
232   - },
233   - "cookie": {
234   - "version": "0.3.1",
235   - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
236   - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
237   - },
238   - "cookie-parser": {
239   - "version": "1.4.3",
240   - "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz",
241   - "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=",
242   - "requires": {
243   - "cookie": "0.3.1",
244   - "cookie-signature": "1.0.6"
245   - }
246   - },
247   - "cookie-signature": {
248   - "version": "1.0.6",
249   - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
250   - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
251   - },
252   - "core-util-is": {
253   - "version": "1.0.2",
254   - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
255   - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
256   - },
257   - "css": {
258   - "version": "1.0.8",
259   - "resolved": "https://registry.npmjs.org/css/-/css-1.0.8.tgz",
260   - "integrity": "sha1-k4aBHKgrzMnuf7WnMrHioxfIo+c=",
261   - "requires": {
262   - "css-parse": "1.0.4",
263   - "css-stringify": "1.0.5"
264   - }
265   - },
266   - "css-parse": {
267   - "version": "1.0.4",
268   - "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.0.4.tgz",
269   - "integrity": "sha1-OLBQP7+dqfVOnB29pg4UXHcRe90="
270   - },
271   - "css-stringify": {
272   - "version": "1.0.5",
273   - "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz",
274   - "integrity": "sha1-sNBClG2ylTu50pKQCmy19tASIDE="
275   - },
276   - "dashdash": {
277   - "version": "1.14.1",
278   - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
279   - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
280   - "requires": {
281   - "assert-plus": "1.0.0"
282   - }
283   - },
284   - "date-format": {
285   - "version": "1.2.0",
286   - "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz",
287   - "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg="
288   - },
289   - "dateformat": {
290   - "version": "3.0.3",
291   - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
292   - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q=="
293   - },
294   - "debug": {
295   - "version": "2.6.9",
296   - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
297   - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
298   - "requires": {
299   - "ms": "2.0.0"
300   - }
301   - },
302   - "decamelize": {
303   - "version": "1.2.0",
304   - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
305   - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
306   - },
307   - "delayed-stream": {
308   - "version": "1.0.0",
309   - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
310   - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
311   - },
312   - "depd": {
313   - "version": "1.1.2",
314   - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
315   - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
316   - },
317   - "destroy": {
318   - "version": "1.0.4",
319   - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
320   - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
321   - },
322   - "easysoap": {
323   - "version": "2.0.1",
324   - "resolved": "https://registry.npmjs.org/easysoap/-/easysoap-2.0.1.tgz",
325   - "integrity": "sha512-pMLbaDcR3BGVy94yTEyZbsY7OXKm4xmM5FLy+bOz1mYSNt2drNOQSuj7bim2WGiJwoE648wtqa8wHnZbNjuFQw==",
326   - "requires": {
327   - "request": "2.87.0",
328   - "underscore": "1.9.1",
329   - "wsdlrdr": "0.4.0",
330   - "xmldoc": "1.1.2"
331   - }
332   - },
333   - "ecc-jsbn": {
334   - "version": "0.1.2",
335   - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
336   - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
337   - "optional": true,
338   - "requires": {
339   - "jsbn": "0.1.1",
340   - "safer-buffer": "2.1.2"
341   - }
342   - },
343   - "ee-first": {
344   - "version": "1.1.1",
345   - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
346   - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
347   - },
348   - "encodeurl": {
349   - "version": "1.0.2",
350   - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
351   - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
352   - },
353   - "escape-html": {
354   - "version": "1.0.3",
355   - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
356   - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
357   - },
358   - "etag": {
359   - "version": "1.8.1",
360   - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
361   - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
362   - },
363   - "express": {
364   - "version": "4.15.5",
365   - "resolved": "https://registry.npmjs.org/express/-/express-4.15.5.tgz",
366   - "integrity": "sha1-ZwI1ypWYiQpa6BcLg9tyK4Qu2Sc=",
367   - "requires": {
368   - "accepts": "1.3.4",
369   - "array-flatten": "1.1.1",
370   - "content-disposition": "0.5.2",
371   - "content-type": "1.0.4",
372   - "cookie": "0.3.1",
373   - "cookie-signature": "1.0.6",
374   - "debug": "2.6.9",
375   - "depd": "1.1.2",
376   - "encodeurl": "1.0.2",
377   - "escape-html": "1.0.3",
378   - "etag": "1.8.1",
379   - "finalhandler": "1.0.6",
380   - "fresh": "0.5.2",
381   - "merge-descriptors": "1.0.1",
382   - "methods": "1.1.2",
383   - "on-finished": "2.3.0",
384   - "parseurl": "1.3.2",
385   - "path-to-regexp": "0.1.7",
386   - "proxy-addr": "1.1.5",
387   - "qs": "6.5.0",
388   - "range-parser": "1.2.0",
389   - "send": "0.15.6",
390   - "serve-static": "1.12.6",
391   - "setprototypeof": "1.0.3",
392   - "statuses": "1.3.1",
393   - "type-is": "1.6.15",
394   - "utils-merge": "1.0.0",
395   - "vary": "1.1.2"
396   - },
397   - "dependencies": {
398   - "qs": {
399   - "version": "6.5.0",
400   - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.0.tgz",
401   - "integrity": "sha512-fjVFjW9yhqMhVGwRExCXLhJKrLlkYSaxNWdyc9rmHlrVZbk35YHH312dFd7191uQeXkI3mKLZTIbSvIeFwFemg=="
402   - },
403   - "statuses": {
404   - "version": "1.3.1",
405   - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
406   - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4="
407   - }
408   - }
409   - },
410   - "extend": {
411   - "version": "3.0.2",
412   - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
413   - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
414   - },
415   - "extsprintf": {
416   - "version": "1.3.0",
417   - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
418   - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
419   - },
420   - "fast-deep-equal": {
421   - "version": "1.1.0",
422   - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
423   - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
424   - },
425   - "fast-json-stable-stringify": {
426   - "version": "2.0.0",
427   - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
428   - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
429   - },
430   - "finalhandler": {
431   - "version": "1.0.6",
432   - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz",
433   - "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=",
434   - "requires": {
435   - "debug": "2.6.9",
436   - "encodeurl": "1.0.2",
437   - "escape-html": "1.0.3",
438   - "on-finished": "2.3.0",
439   - "parseurl": "1.3.2",
440   - "statuses": "1.3.1",
441   - "unpipe": "1.0.0"
442   - },
443   - "dependencies": {
444   - "statuses": {
445   - "version": "1.3.1",
446   - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
447   - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4="
448   - }
449   - }
450   - },
451   - "forever-agent": {
452   - "version": "0.6.1",
453   - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
454   - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
455   - },
456   - "form-data": {
457   - "version": "2.3.2",
458   - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
459   - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
460   - "requires": {
461   - "asynckit": "0.4.0",
462   - "combined-stream": "1.0.6",
463   - "mime-types": "2.1.17"
464   - }
465   - },
466   - "forwarded": {
467   - "version": "0.1.2",
468   - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
469   - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
470   - },
471   - "fresh": {
472   - "version": "0.5.2",
473   - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
474   - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
475   - },
476   - "getpass": {
477   - "version": "0.1.7",
478   - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
479   - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
480   - "requires": {
481   - "assert-plus": "1.0.0"
482   - }
483   - },
484   - "graceful-readlink": {
485   - "version": "1.0.1",
486   - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
487   - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
488   - },
489   - "har-schema": {
490   - "version": "2.0.0",
491   - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
492   - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
493   - },
494   - "har-validator": {
495   - "version": "5.0.3",
496   - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
497   - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
498   - "requires": {
499   - "ajv": "5.5.2",
500   - "har-schema": "2.0.0"
501   - }
502   - },
503   - "http-errors": {
504   - "version": "1.6.2",
505   - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
506   - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
507   - "requires": {
508   - "depd": "1.1.1",
509   - "inherits": "2.0.3",
510   - "setprototypeof": "1.0.3",
511   - "statuses": "1.4.0"
512   - },
513   - "dependencies": {
514   - "depd": {
515   - "version": "1.1.1",
516   - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
517   - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k="
518   - }
519   - }
520   - },
521   - "http-signature": {
522   - "version": "1.2.0",
523   - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
524   - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
525   - "requires": {
526   - "assert-plus": "1.0.0",
527   - "jsprim": "1.4.1",
528   - "sshpk": "1.14.2"
529   - }
530   - },
531   - "iconv-lite": {
532   - "version": "0.4.19",
533   - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
534   - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
535   - },
536   - "inherits": {
537   - "version": "2.0.3",
538   - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
539   - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
540   - },
541   - "ipaddr.js": {
542   - "version": "1.4.0",
543   - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.4.0.tgz",
544   - "integrity": "sha1-KWrKh4qCGBbluF0KKFqZvP9FgvA="
545   - },
546   - "is-buffer": {
547   - "version": "1.1.6",
548   - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
549   - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
550   - },
551   - "is-promise": {
552   - "version": "2.1.0",
553   - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
554   - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
555   - },
556   - "is-typedarray": {
557   - "version": "1.0.0",
558   - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
559   - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
560   - },
561   - "isarray": {
562   - "version": "1.0.0",
563   - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
564   - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
565   - },
566   - "isstream": {
567   - "version": "0.1.2",
568   - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
569   - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
570   - },
571   - "jade": {
572   - "version": "1.11.0",
573   - "resolved": "https://registry.npmjs.org/jade/-/jade-1.11.0.tgz",
574   - "integrity": "sha1-nIDlOMEtP7lcjZu5VZ+gzAQEBf0=",
575   - "requires": {
576   - "character-parser": "1.2.1",
577   - "clean-css": "3.4.28",
578   - "commander": "2.6.0",
579   - "constantinople": "3.0.2",
580   - "jstransformer": "0.0.2",
581   - "mkdirp": "0.5.1",
582   - "transformers": "2.1.0",
583   - "uglify-js": "2.8.29",
584   - "void-elements": "2.0.1",
585   - "with": "4.0.3"
586   - }
587   - },
588   - "jsbn": {
589   - "version": "0.1.1",
590   - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
591   - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
592   - "optional": true
593   - },
594   - "json-schema": {
595   - "version": "0.2.3",
596   - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
597   - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
598   - },
599   - "json-schema-traverse": {
600   - "version": "0.3.1",
601   - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
602   - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
603   - },
604   - "json-stringify-safe": {
605   - "version": "5.0.1",
606   - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
607   - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
608   - },
609   - "jsprim": {
610   - "version": "1.4.1",
611   - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
612   - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
613   - "requires": {
614   - "assert-plus": "1.0.0",
615   - "extsprintf": "1.3.0",
616   - "json-schema": "0.2.3",
617   - "verror": "1.10.0"
618   - }
619   - },
620   - "jstransformer": {
621   - "version": "0.0.2",
622   - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-0.0.2.tgz",
623   - "integrity": "sha1-eq4pqQPRls+glz2IXT5HlH7Ndqs=",
624   - "requires": {
625   - "is-promise": "2.1.0",
626   - "promise": "6.1.0"
627   - }
628   - },
629   - "kind-of": {
630   - "version": "3.2.2",
631   - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
632   - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
633   - "requires": {
634   - "is-buffer": "1.1.6"
635   - }
636   - },
637   - "lazy-cache": {
638   - "version": "1.0.4",
639   - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
640   - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
641   - },
642   - "log4js": {
643   - "version": "3.0.4",
644   - "resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.4.tgz",
645   - "integrity": "sha512-4rQ1TrOf85lxB0+hBiPF27Zw8pGTHxKZq8FYfum1TNhx/KMUlQ+LL4bMKcdzc7zoAFF992w8+MFQm3BQbUgePA==",
646   - "requires": {
647   - "circular-json": "0.5.5",
648   - "date-format": "1.2.0",
649   - "debug": "3.1.0",
650   - "streamroller": "0.7.0"
651   - },
652   - "dependencies": {
653   - "debug": {
654   - "version": "3.1.0",
655   - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
656   - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
657   - "requires": {
658   - "ms": "2.0.0"
659   - }
660   - }
661   - }
662   - },
663   - "longest": {
664   - "version": "1.0.1",
665   - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
666   - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
667   - },
668   - "media-typer": {
669   - "version": "0.3.0",
670   - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
671   - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
672   - },
673   - "merge-descriptors": {
674   - "version": "1.0.1",
675   - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
676   - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
677   - },
678   - "methods": {
679   - "version": "1.1.2",
680   - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
681   - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
682   - },
683   - "mime": {
684   - "version": "1.3.4",
685   - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
686   - "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM="
687   - },
688   - "mime-db": {
689   - "version": "1.30.0",
690   - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz",
691   - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE="
692   - },
693   - "mime-types": {
694   - "version": "2.1.17",
695   - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
696   - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
697   - "requires": {
698   - "mime-db": "1.30.0"
699   - }
700   - },
701   - "minimist": {
702   - "version": "0.0.8",
703   - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
704   - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
705   - },
706   - "mkdirp": {
707   - "version": "0.5.1",
708   - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
709   - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
710   - "requires": {
711   - "minimist": "0.0.8"
712   - }
713   - },
714   - "morgan": {
715   - "version": "1.9.0",
716   - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz",
717   - "integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=",
718   - "requires": {
719   - "basic-auth": "2.0.0",
720   - "debug": "2.6.9",
721   - "depd": "1.1.2",
722   - "on-finished": "2.3.0",
723   - "on-headers": "1.0.1"
724   - }
725   - },
726   - "ms": {
727   - "version": "2.0.0",
728   - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
729   - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
730   - },
731   - "negotiator": {
732   - "version": "0.6.1",
733   - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
734   - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
735   - },
736   - "oauth-sign": {
737   - "version": "0.8.2",
738   - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
739   - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
740   - },
741   - "on-finished": {
742   - "version": "2.3.0",
743   - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
744   - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
745   - "requires": {
746   - "ee-first": "1.1.1"
747   - }
748   - },
749   - "on-headers": {
750   - "version": "1.0.1",
751   - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
752   - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c="
753   - },
754   - "optimist": {
755   - "version": "0.3.7",
756   - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
757   - "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
758   - "requires": {
759   - "wordwrap": "0.0.3"
760   - }
761   - },
762   - "parseurl": {
763   - "version": "1.3.2",
764   - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
765   - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
766   - },
767   - "path-to-regexp": {
768   - "version": "0.1.7",
769   - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
770   - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
771   - },
772   - "performance-now": {
773   - "version": "2.1.0",
774   - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
775   - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
776   - },
777   - "process-nextick-args": {
778   - "version": "2.0.0",
779   - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
780   - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
781   - },
782   - "promise": {
783   - "version": "6.1.0",
784   - "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz",
785   - "integrity": "sha1-LOcp9rlLRcJoka0GAsXJDgTG7vY=",
786   - "requires": {
787   - "asap": "1.0.0"
788   - }
789   - },
790   - "proxy-addr": {
791   - "version": "1.1.5",
792   - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz",
793   - "integrity": "sha1-ccDuOxAt4/IC87ZPYI0XP8uhqRg=",
794   - "requires": {
795   - "forwarded": "0.1.2",
796   - "ipaddr.js": "1.4.0"
797   - }
798   - },
799   - "punycode": {
800   - "version": "1.4.1",
801   - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
802   - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
803   - },
804   - "qs": {
805   - "version": "6.5.1",
806   - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
807   - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="
808   - },
809   - "range-parser": {
810   - "version": "1.2.0",
811   - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
812   - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
813   - },
814   - "raw-body": {
815   - "version": "2.3.2",
816   - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
817   - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
818   - "requires": {
819   - "bytes": "3.0.0",
820   - "http-errors": "1.6.2",
821   - "iconv-lite": "0.4.19",
822   - "unpipe": "1.0.0"
823   - }
824   - },
825   - "readable-stream": {
826   - "version": "2.3.6",
827   - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
828   - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
829   - "requires": {
830   - "core-util-is": "1.0.2",
831   - "inherits": "2.0.3",
832   - "isarray": "1.0.0",
833   - "process-nextick-args": "2.0.0",
834   - "safe-buffer": "5.1.1",
835   - "string_decoder": "1.1.1",
836   - "util-deprecate": "1.0.2"
837   - }
838   - },
839   - "repeat-string": {
840   - "version": "1.6.1",
841   - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
842   - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
843   - },
844   - "request": {
845   - "version": "2.87.0",
846   - "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz",
847   - "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==",
848   - "requires": {
849   - "aws-sign2": "0.7.0",
850   - "aws4": "1.8.0",
851   - "caseless": "0.12.0",
852   - "combined-stream": "1.0.6",
853   - "extend": "3.0.2",
854   - "forever-agent": "0.6.1",
855   - "form-data": "2.3.2",
856   - "har-validator": "5.0.3",
857   - "http-signature": "1.2.0",
858   - "is-typedarray": "1.0.0",
859   - "isstream": "0.1.2",
860   - "json-stringify-safe": "5.0.1",
861   - "mime-types": "2.1.17",
862   - "oauth-sign": "0.8.2",
863   - "performance-now": "2.1.0",
864   - "qs": "6.5.1",
865   - "safe-buffer": "5.1.1",
866   - "tough-cookie": "2.3.4",
867   - "tunnel-agent": "0.6.0",
868   - "uuid": "3.3.2"
869   - }
870   - },
871   - "right-align": {
872   - "version": "0.1.3",
873   - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
874   - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
875   - "requires": {
876   - "align-text": "0.1.4"
877   - }
878   - },
879   - "safe-buffer": {
880   - "version": "5.1.1",
881   - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
882   - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
883   - },
884   - "safer-buffer": {
885   - "version": "2.1.2",
886   - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
887   - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
888   - },
889   - "sax": {
890   - "version": "1.2.4",
891   - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
892   - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
893   - },
894   - "send": {
895   - "version": "0.15.6",
896   - "resolved": "https://registry.npmjs.org/send/-/send-0.15.6.tgz",
897   - "integrity": "sha1-IPI6nJJbdiq4JwX+L52yUqzkfjQ=",
898   - "requires": {
899   - "debug": "2.6.9",
900   - "depd": "1.1.2",
901   - "destroy": "1.0.4",
902   - "encodeurl": "1.0.2",
903   - "escape-html": "1.0.3",
904   - "etag": "1.8.1",
905   - "fresh": "0.5.2",
906   - "http-errors": "1.6.2",
907   - "mime": "1.3.4",
908   - "ms": "2.0.0",
909   - "on-finished": "2.3.0",
910   - "range-parser": "1.2.0",
911   - "statuses": "1.3.1"
912   - },
913   - "dependencies": {
914   - "statuses": {
915   - "version": "1.3.1",
916   - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
917   - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4="
918   - }
919   - }
920   - },
921   - "serve-favicon": {
922   - "version": "2.4.5",
923   - "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.4.5.tgz",
924   - "integrity": "sha512-s7F8h2NrslMkG50KxvlGdj+ApSwaLex0vexuJ9iFf3GLTIp1ph/l1qZvRe9T9TJEYZgmq72ZwJ2VYiAEtChknw==",
925   - "requires": {
926   - "etag": "1.8.1",
927   - "fresh": "0.5.2",
928   - "ms": "2.0.0",
929   - "parseurl": "1.3.2",
930   - "safe-buffer": "5.1.1"
931   - }
932   - },
933   - "serve-static": {
934   - "version": "1.12.6",
935   - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.6.tgz",
936   - "integrity": "sha1-uXN3P2NEmTTaVOW+ul4x2fQhFXc=",
937   - "requires": {
938   - "encodeurl": "1.0.2",
939   - "escape-html": "1.0.3",
940   - "parseurl": "1.3.2",
941   - "send": "0.15.6"
942   - }
943   - },
944   - "setprototypeof": {
945   - "version": "1.0.3",
946   - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
947   - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
948   - },
949   - "source-map": {
950   - "version": "0.4.4",
951   - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
952   - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
953   - "requires": {
954   - "amdefine": "1.0.1"
955   - }
956   - },
957   - "sshpk": {
958   - "version": "1.14.2",
959   - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
960   - "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
961   - "requires": {
962   - "asn1": "0.2.4",
963   - "assert-plus": "1.0.0",
964   - "bcrypt-pbkdf": "1.0.2",
965   - "dashdash": "1.14.1",
966   - "ecc-jsbn": "0.1.2",
967   - "getpass": "0.1.7",
968   - "jsbn": "0.1.1",
969   - "safer-buffer": "2.1.2",
970   - "tweetnacl": "0.14.5"
971   - }
972   - },
973   - "statuses": {
974   - "version": "1.4.0",
975   - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
976   - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
977   - },
978   - "streamroller": {
979   - "version": "0.7.0",
980   - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz",
981   - "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==",
982   - "requires": {
983   - "date-format": "1.2.0",
984   - "debug": "3.1.0",
985   - "mkdirp": "0.5.1",
986   - "readable-stream": "2.3.6"
987   - },
988   - "dependencies": {
989   - "debug": {
990   - "version": "3.1.0",
991   - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
992   - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
993   - "requires": {
994   - "ms": "2.0.0"
995   - }
996   - }
997   - }
998   - },
999   - "string_decoder": {
1000   - "version": "1.1.1",
1001   - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
1002   - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
1003   - "requires": {
1004   - "safe-buffer": "5.1.1"
1005   - }
1006   - },
1007   - "tough-cookie": {
1008   - "version": "2.3.4",
1009   - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
1010   - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
1011   - "requires": {
1012   - "punycode": "1.4.1"
1013   - }
1014   - },
1015   - "transformers": {
1016   - "version": "2.1.0",
1017   - "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz",
1018   - "integrity": "sha1-XSPLNVYd2F3Gf7hIIwm0fVPM6ac=",
1019   - "requires": {
1020   - "css": "1.0.8",
1021   - "promise": "2.0.0",
1022   - "uglify-js": "2.2.5"
1023   - },
1024   - "dependencies": {
1025   - "is-promise": {
1026   - "version": "1.0.1",
1027   - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz",
1028   - "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU="
1029   - },
1030   - "promise": {
1031   - "version": "2.0.0",
1032   - "resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz",
1033   - "integrity": "sha1-RmSKqdYFr10ucMMCS/WUNtoCuA4=",
1034   - "requires": {
1035   - "is-promise": "1.0.1"
1036   - }
1037   - },
1038   - "source-map": {
1039   - "version": "0.1.43",
1040   - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
1041   - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
1042   - "requires": {
1043   - "amdefine": "1.0.1"
1044   - }
1045   - },
1046   - "uglify-js": {
1047   - "version": "2.2.5",
1048   - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz",
1049   - "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=",
1050   - "requires": {
1051   - "optimist": "0.3.7",
1052   - "source-map": "0.1.43"
1053   - }
1054   - }
1055   - }
1056   - },
1057   - "tunnel-agent": {
1058   - "version": "0.6.0",
1059   - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
1060   - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
1061   - "requires": {
1062   - "safe-buffer": "5.1.1"
1063   - }
1064   - },
1065   - "tweetnacl": {
1066   - "version": "0.14.5",
1067   - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
1068   - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
1069   - "optional": true
1070   - },
1071   - "type-is": {
1072   - "version": "1.6.15",
1073   - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz",
1074   - "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=",
1075   - "requires": {
1076   - "media-typer": "0.3.0",
1077   - "mime-types": "2.1.17"
1078   - }
1079   - },
1080   - "uglify-js": {
1081   - "version": "2.8.29",
1082   - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
1083   - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
1084   - "requires": {
1085   - "source-map": "0.5.7",
1086   - "uglify-to-browserify": "1.0.2",
1087   - "yargs": "3.10.0"
1088   - },
1089   - "dependencies": {
1090   - "source-map": {
1091   - "version": "0.5.7",
1092   - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
1093   - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
1094   - }
1095   - }
1096   - },
1097   - "uglify-to-browserify": {
1098   - "version": "1.0.2",
1099   - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
1100   - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
1101   - "optional": true
1102   - },
1103   - "underscore": {
1104   - "version": "1.9.1",
1105   - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz",
1106   - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg=="
1107   - },
1108   - "unpipe": {
1109   - "version": "1.0.0",
1110   - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1111   - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
1112   - },
1113   - "util-deprecate": {
1114   - "version": "1.0.2",
1115   - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1116   - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
1117   - },
1118   - "utils-merge": {
1119   - "version": "1.0.0",
1120   - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz",
1121   - "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg="
1122   - },
1123   - "uuid": {
1124   - "version": "3.3.2",
1125   - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
1126   - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
1127   - },
1128   - "vary": {
1129   - "version": "1.1.2",
1130   - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1131   - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
1132   - },
1133   - "verror": {
1134   - "version": "1.10.0",
1135   - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
1136   - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
1137   - "requires": {
1138   - "assert-plus": "1.0.0",
1139   - "core-util-is": "1.0.2",
1140   - "extsprintf": "1.3.0"
1141   - }
1142   - },
1143   - "void-elements": {
1144   - "version": "2.0.1",
1145   - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
1146   - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w="
1147   - },
1148   - "window-size": {
1149   - "version": "0.1.0",
1150   - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
1151   - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
1152   - },
1153   - "with": {
1154   - "version": "4.0.3",
1155   - "resolved": "https://registry.npmjs.org/with/-/with-4.0.3.tgz",
1156   - "integrity": "sha1-7v0VTp550sjTQXtkeo8U2f7M4U4=",
1157   - "requires": {
1158   - "acorn": "1.2.2",
1159   - "acorn-globals": "1.0.9"
1160   - },
1161   - "dependencies": {
1162   - "acorn": {
1163   - "version": "1.2.2",
1164   - "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz",
1165   - "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ="
1166   - }
1167   - }
1168   - },
1169   - "wordwrap": {
1170   - "version": "0.0.3",
1171   - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
1172   - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
1173   - },
1174   - "wsdlrdr": {
1175   - "version": "0.4.0",
1176   - "resolved": "https://registry.npmjs.org/wsdlrdr/-/wsdlrdr-0.4.0.tgz",
1177   - "integrity": "sha512-9JZLfnxRx4j8nABatZwYt+DN5p0/4NW5LAIk4oac3rt6sdn9O2pxsoHVrgvk8hPrKya0lw1Ql30sdKzNn4hSWg==",
1178   - "requires": {
1179   - "request": "2.87.0",
1180   - "xmldoc": "1.1.2"
1181   - }
1182   - },
1183   - "xml-js": {
1184   - "version": "1.6.7",
1185   - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.7.tgz",
1186   - "integrity": "sha512-1hn0xwwfMcWywnJxqiOXiv+pZaOJyf/YWcUeqJICF0BFb+IOkRFSkKyeA0V62WqTHXNdBxNuCFHhS/w2DtYpoA==",
1187   - "requires": {
1188   - "sax": "1.2.4"
1189   - }
1190   - },
1191   - "xml2js": {
1192   - "version": "0.4.19",
1193   - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
1194   - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
1195   - "requires": {
1196   - "sax": "1.2.4",
1197   - "xmlbuilder": "9.0.7"
1198   - }
1199   - },
1200   - "xmlbuilder": {
1201   - "version": "9.0.7",
1202   - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
1203   - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
1204   - },
1205   - "xmldoc": {
1206   - "version": "1.1.2",
1207   - "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.1.2.tgz",
1208   - "integrity": "sha512-ruPC/fyPNck2BD1dpz0AZZyrEwMOrWTO5lDdIXS91rs3wtm4j+T8Rp2o+zoOYkkAxJTZRPOSnOGei1egoRmKMQ==",
1209   - "requires": {
1210   - "sax": "1.2.4"
1211   - }
1212   - },
1213   - "yargs": {
1214   - "version": "3.10.0",
1215   - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
1216   - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
1217   - "requires": {
1218   - "camelcase": "1.2.1",
1219   - "cliui": "2.1.0",
1220   - "decamelize": "1.2.0",
1221   - "window-size": "0.1.0"
1222   - }
1223   - }
1224   - }
1225   -}
package.json
... ... @@ -1,23 +0,0 @@
1   -{
2   - "name": "srfpgenesis",
3   - "version": "0.0.0",
4   - "private": true,
5   - "scripts": {
6   - "start": "node ./bin/www"
7   - },
8   - "dependencies": {
9   - "body-parser": "~1.18.2",
10   - "cookie-parser": "~1.4.3",
11   - "dateformat": "^3.0.3",
12   - "debug": "~2.6.9",
13   - "easysoap": "^2.0.1",
14   - "express": "^4.15.5",
15   - "jade": "~1.11.0",
16   - "log4js": "^3.0.4",
17   - "morgan": "~1.9.0",
18   - "request": "^2.87.0",
19   - "serve-favicon": "~2.4.5",
20   - "xml-js": "^1.6.7",
21   - "xml2js": "^0.4.19"
22   - }
23   -}
public/image/image.jpg

57 KB

public/stylesheets/style.css
... ... @@ -1,8 +0,0 @@
1   -body {
2   - padding: 50px;
3   - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
4   -}
5   -
6   -a {
7   - color: #00B7FF;
8   -}
routes/CMF/customerMembership.js
... ... @@ -1,9 +0,0 @@
1   -var express = require('express');
2   -var router = express.Router();
3   -
4   -/* GET users listing. */
5   -router.get('/', function(req, res, next) {
6   - res.send('customer membership');
7   -});
8   -
9   -module.exports = router;
routes/CMF/index.js
... ... @@ -1,11 +0,0 @@
1   -let express = require('express');
2   -let router = express.Router();
3   -
4   -// load controllers
5   -const vizCard = require('./vizCard');
6   -const customerMembership = require('./customerMembership');
7   -
8   -router.use('/vizCard.json', vizCard);
9   -router.use('/customerMembership.json', customerMembership);
10   -
11   -module.exports = router;
12 0 \ No newline at end of file
routes/CMF/vizCard.js
... ... @@ -1,98 +0,0 @@
1   -'use strict';
2   -var express = require('express');
3   -var router = express.Router();
4   -const request = require('request');
5   -var parseJson = require('xml-js');
6   -var custom_log = require('../../config/logger');
7   -var config = require('../../config/config');
8   -var stat = require('../../utils/SutisStat');
9   -var alarm = require('../../utils/SutisAlarm');
10   -var detail = require('../../utils/SutisDetail');
11   -var logger = require('../../utils/SutisLogSummary');
12   -
13   -var _url = `http://localhost:8080`
14   -
15   -router.get('/',async function(req, res, next) {
16   -
17   - var cmd = 'vizCard'
18   -
19   - var requestXml = `<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/">
20   - <soap:Header/>
21   - <soap:Body>
22   - <tem:SearchCustomer>
23   - <tem:username>axviz</tem:username>
24   - <tem:password>1234</tem:password>
25   - <tem:systemName>30</tem:systemName>
26   - <tem:queryType>1</tem:queryType>
27   - <tem:cardId>${req.query.id}</tem:cardId>
28   - </tem:SearchCustomer>
29   - </soap:Body>
30   - </soap:Envelope>`
31   -
32   - console.log(requestXml);
33   - // console.log(req.query.fields)
34   -
35   - const result = await asyncRequest({
36   - url : _url,
37   - body : requestXml,
38   - method : 'POST'
39   - });
40   -
41   - // parseString(result.body, function (err, result1) {
42   - // console.log(result1);
43   - // });
44   -
45   - var result1 = parseJson.xml2json(result.body, {compact: true, spaces: 4})
46   - result1 = JSON.parse(result1)
47   - result1 = result1['soap:Envelope']['soap:Body']['tem:SearchCustomerResponse']['tem:SearchCustomerResult']['tem:CustomerSearchResult'];
48   - delete result1._comment;
49   -
50   - var response = {};
51   -
52   - if(req.query.fields){
53   - var listFields = req.query.fields.split(",");
54   - // console.log(listFields)
55   - }
56   -
57   - for(var key in result1){
58   - var keyObj = capitalizeFirstLetter(key.replace('tem:',''))
59   - // console.log(keyObj+' : '+result1[key]['_text']);
60   - if(listFields){
61   - if(listFields.includes(keyObj)){
62   - response[keyObj] = result1[key]['_text'];
63   - }
64   - } else {
65   - response[keyObj] = result1[key]['_text'];
66   - }
67   - }
68   -
69   - stat.recv(cmd, '20000');
70   - stat.retn(cmd, '20000');
71   -
72   - res.status(200).json({
73   - resultCode: '20000',
74   - resultDescription: 'Success',
75   - resultData: response
76   - });
77   -});
78   -
79   -function capitalizeFirstLetter(string) {
80   - return string.charAt(0).toLowerCase() + string.slice(1);
81   -}
82   -
83   -function asyncRequest (params = {}) {
84   - return new Promise((resolve, reject) => {
85   - request(params, function (error, response, body) {
86   - if (error) {
87   - reject(error);
88   - } else {
89   - resolve({
90   - 'body' : body,
91   - 'response': response
92   - });
93   - }
94   - });
95   - });
96   -}
97   -
98   -module.exports = router;
routes/users.js
... ... @@ -1,9 +0,0 @@
1   -var express = require('express');
2   -var router = express.Router();
3   -
4   -/* GET users listing. */
5   -router.get('/', function(req, res, next) {
6   - res.send('respond with a resource');
7   -});
8   -
9   -module.exports = router;
sc-structure/app.js 0 → 100644
... ... @@ -0,0 +1,48 @@
  1 +var express = require('express');
  2 +var path = require('path');
  3 +var favicon = require('serve-favicon');
  4 +var logger = require('morgan');
  5 +var cookieParser = require('cookie-parser');
  6 +var bodyParser = require('body-parser');
  7 +
  8 +var cmf = require('./routes/CMF/index');
  9 +var users = require('./routes/users');
  10 +
  11 +var app = express();
  12 +var prefixUrl = '/appName/v2'
  13 +
  14 +// view engine setup
  15 +app.set('views', path.join(__dirname, 'views'));
  16 +app.set('view engine', 'jade');
  17 +
  18 +// uncomment after placing your favicon in /public
  19 +//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
  20 +app.use(logger('dev'));
  21 +app.use(bodyParser.json());
  22 +app.use(bodyParser.urlencoded({ extended: false }));
  23 +app.use(cookieParser());
  24 +app.use(express.static(path.join(__dirname, 'public')));
  25 +
  26 +app.use(prefixUrl + '/', cmf);
  27 +app.use('/users', users);
  28 +app.listen(3000, () => console.log('Example app listening on port 3000!'))
  29 +
  30 +// catch 404 and forward to error handler
  31 +app.use(function(req, res, next) {
  32 + var err = new Error('Not Found');
  33 + err.status = 404;
  34 + next(err);
  35 +});
  36 +
  37 +// error handler
  38 +app.use(function(err, req, res, next) {
  39 + // set locals, only providing error in development
  40 + res.locals.message = err.message;
  41 + res.locals.error = req.app.get('env') === 'development' ? err : {};
  42 +
  43 + // render the error page
  44 + res.status(err.status || 500);
  45 + res.render('error');
  46 +});
  47 +
  48 +module.exports = app;
... ...
sc-structure/app_srfp.js 0 → 100644
... ... @@ -0,0 +1,93 @@
  1 +var express = require('express');
  2 +var path = require('path');
  3 +var favicon = require('serve-favicon');
  4 +var logger = require('morgan');
  5 +var cookieParser = require('cookie-parser');
  6 +var bodyParser = require('body-parser');
  7 +var index = require('./routes/index');
  8 +var users = require('./routes/users');
  9 +var app = express();
  10 +var fs = require('fs');
  11 +var util = require('util');
  12 +var crypto = require('crypto');
  13 +var http = require("http");
  14 +var url = require("url");
  15 +
  16 +app.listen(3000, function () {
  17 + console.log('Example app listening on port 3000!')
  18 +});
  19 +
  20 +/*const now=(unit)=>{
  21 +
  22 + const hrTime=process.hrtime();
  23 + switch (unit) {
  24 + case 'milli':return hrTime[0] * 1000 + hrTime[1] / 1000000;
  25 + case 'micro':return hrTime[0] * 1000000 + hrTime[1] / 1000;
  26 + case 'nano':return hrTime[0] * 1000000000 + hrTime[1] ;
  27 + break;
  28 + default:return hrTime[0] * 1000000000 + hrTime[1] ;
  29 + }
  30 +}*/
  31 +
  32 +app.get('/multiMedia.json',function (req, res) {
  33 + var name = req.query.name;
  34 + var type = req.query.type;
  35 + var commadId = req.query.commandId;
  36 + var pathfile = null;
  37 +
  38 + if (type === 'audio') {
  39 + pathfile = './audio/' + name;
  40 + } else if (type === 'video') {
  41 + pathfile = './video/' + name;
  42 + } else if (type === 'image') {
  43 + pathfile = 'D:\\PROJECT@AIS\\SRFP_Node\\Genesis-SRFP\\public\\image\\' + name;
  44 + } else {
  45 + console.log('Access Denied');
  46 + }
  47 +
  48 + // if (type === 'audio') {
  49 + // pathfile = path.join('D:', 'Node','Audio' , name);
  50 + // } else if (type === 'video') {
  51 + // pathfile = path.join('D:', 'Node','Video' , name);
  52 + // } else if (type === 'image') {
  53 + // pathfile = path.join('D:', 'Node','Image' , name);
  54 + // } else {
  55 + // console.log('Access Denied');
  56 + // }
  57 +
  58 + var file = fs.readFileSync(pathfile);
  59 + var value = Buffer.from(file).toString('base64');
  60 +
  61 + var stats = fs.statSync(pathfile);
  62 + var mtime = stats.mtime;
  63 + var size = stats.size;
  64 +
  65 + console.log(mtime.toISOString().replace(/T/, ' ').replace(/\..+/, ''));
  66 + // console.log(mtime.getTime());
  67 +
  68 + // Get the if-modified-since header from the request
  69 + var reqModDate = req.headers['if-modified-since'];
  70 + // console.log('If-modify ' + new Date(reqModDate).toISOString().replace(/T/, ' ').replace(/\..+/, ''));
  71 +
  72 + if (reqModDate != null) {
  73 + reqModDate = new Date(reqModDate);
  74 + if (reqModDate.getTime() == mtime.getTime()) {
  75 + console.log("load from cache");
  76 + res.writeHead(304, {
  77 + "Last-Modified": mtime.toUTCString()
  78 + });
  79 + res.end();
  80 + } else {
  81 + console.log("no cache");
  82 + var fileName = "test.jpg";
  83 + res.download(pathfile, fileName);
  84 + res.end();
  85 + }
  86 + } else {
  87 + res.writeHead(304, {
  88 + "Last-Modified": mtime.toUTCString()
  89 + });
  90 + res.end();
  91 + }
  92 + // res.send(value.toString());
  93 +});
... ...
sc-structure/bin/www 0 → 100644
... ... @@ -0,0 +1,90 @@
  1 +#!/usr/bin/env node
  2 +
  3 +/**
  4 + * Module dependencies.
  5 + */
  6 +
  7 +var app = require('../app');
  8 +var debug = require('debug')('srfpgenesis:server');
  9 +var http = require('http');
  10 +
  11 +/**
  12 + * Get port from environment and store in Express.
  13 + */
  14 +
  15 +var port = normalizePort(process.env.PORT || '3000');
  16 +app.set('port', port);
  17 +
  18 +/**
  19 + * Create HTTP server.
  20 + */
  21 +
  22 +var server = http.createServer(app);
  23 +
  24 +/**
  25 + * Listen on provided port, on all network interfaces.
  26 + */
  27 +
  28 +server.listen(port);
  29 +server.on('error', onError);
  30 +server.on('listening', onListening);
  31 +
  32 +/**
  33 + * Normalize a port into a number, string, or false.
  34 + */
  35 +
  36 +function normalizePort(val) {
  37 + var port = parseInt(val, 10);
  38 +
  39 + if (isNaN(port)) {
  40 + // named pipe
  41 + return val;
  42 + }
  43 +
  44 + if (port >= 0) {
  45 + // port number
  46 + return port;
  47 + }
  48 +
  49 + return false;
  50 +}
  51 +
  52 +/**
  53 + * Event listener for HTTP server "error" event.
  54 + */
  55 +
  56 +function onError(error) {
  57 + if (error.syscall !== 'listen') {
  58 + throw error;
  59 + }
  60 +
  61 + var bind = typeof port === 'string'
  62 + ? 'Pipe ' + port
  63 + : 'Port ' + port;
  64 +
  65 + // handle specific listen errors with friendly messages
  66 + switch (error.code) {
  67 + case 'EACCES':
  68 + console.error(bind + ' requires elevated privileges');
  69 + process.exit(1);
  70 + break;
  71 + case 'EADDRINUSE':
  72 + console.error(bind + ' is already in use');
  73 + process.exit(1);
  74 + break;
  75 + default:
  76 + throw error;
  77 + }
  78 +}
  79 +
  80 +/**
  81 + * Event listener for HTTP server "listening" event.
  82 + */
  83 +
  84 +function onListening() {
  85 + var addr = server.address();
  86 + var bind = typeof addr === 'string'
  87 + ? 'pipe ' + addr
  88 + : 'port ' + addr.port;
  89 + debug('Listening on ' + bind);
  90 +}
... ...
sc-structure/config/config.js 0 → 100644
... ... @@ -0,0 +1,25 @@
  1 +'use strict';
  2 +
  3 +var config = {};
  4 +
  5 +// config.statCodeTbl = {};
  6 +config.log = {};
  7 +config.mediaPath={};
  8 +
  9 +config.log.logPath = 'D:\\PROJECT@AIS\\SRFP_Node\\SRFPGenesis_TestLog\\logTest\\';
  10 +config.log.summaryPath = 'D:\\PROJECT@AIS\\SRFP_Node\\SRFPGenesis_TestLog\\logTest\\';
  11 +config.log.statPath = 'D:\\PROJECT@AIS\\SRFP_Node\\SRFPGenesis_TestLog\\logTest\\';
  12 +config.log.alarmPath = 'D:\\PROJECT@AIS\\SRFP_Node\\SRFPGenesis_TestLog\\logTest\\';
  13 +config.log.detailPath = 'D:\\PROJECT@AIS\\SRFP_Node\\SRFPGenesis_TestLog\\logTest\\';
  14 +config.log.projectName = 'SRFP_Genesis';
  15 +config.log.logTime = 15; //Minute
  16 +config.log.statTime = 5; //Minute
  17 +config.log.alarmTime = 5; //Minute
  18 +config.log.detailTime = 15; //Minute
  19 +config.log.summaryTime = 15; //Minute
  20 +
  21 +config.mediaPath.video ="D:\\PROJECT@AIS\\SRFP_Node\\SRFPGenesis_TestLog\\source\\video\\";// --> mp4.m4a
  22 +config.mediaPath.image ='D:\\PROJECT@AIS\\SRFP_Node\\SRFPGenesis_TestLog\\source\\image\\';// --> jpg,jpeg,png
  23 +config.mediaPath.audio ='D:\\PROJECT@AIS\\SRFP_Node\\SRFPGenesis_TestLog\\source\\audio\\';// --> mp3,m4a
  24 +
  25 +module.exports = config;
... ...
sc-structure/config/log4js.json 0 → 100644
... ... @@ -0,0 +1,45 @@
  1 +{
  2 + "appenders": {
  3 + "access": {
  4 + "type": "dateFile",
  5 + "filename": "log/access",
  6 + "pattern": ".yyyy-MM-dd-hh-mm.log",
  7 + "compress": false,
  8 + "category": "serverLog",
  9 + "layout": {
  10 + "type": "pattern",
  11 + "pattern": "%h %d{dd/MM/yyyy hh:mm} %m"
  12 + }
  13 + },
  14 + "app": {
  15 + "type": "file",
  16 + "filename": "log/app.log",
  17 + "maxLogSize": 10485760,
  18 + "numBackups": 3
  19 + },
  20 + "errorFile": {
  21 + "type": "file",
  22 + "filename": "log/errors.log"
  23 + },
  24 + "errors": {
  25 + "type": "logLevelFilter",
  26 + "level": "ERROR",
  27 + "appender": "errorFile"
  28 + }
  29 + },
  30 + "categories": {
  31 + "default": {
  32 + "appenders": [
  33 + "app",
  34 + "errors"
  35 + ],
  36 + "level": "DEBUG"
  37 + },
  38 + "serverLog": {
  39 + "appenders": [
  40 + "access"
  41 + ],
  42 + "level": "DEBUG"
  43 + }
  44 + }
  45 +}
0 46 \ No newline at end of file
... ...
sc-structure/config/logger.js 0 → 100644
... ... @@ -0,0 +1,3 @@
  1 +var SutisLog = require('../utils/SutisLog')
  2 +var logger = new SutisLog()
  3 +module.exports = logger
0 4 \ No newline at end of file
... ...
sc-structure/config/writeLog.rar 0 → 100644
No preview for this file type
sc-structure/log/access 0 → 100644
sc-structure/logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805210945.detail 0 → 100644
... ... @@ -0,0 +1 @@
  1 +20180521 09:49:19|DESKTOP-G5SEAPD|SRFP_Genesis - detail: {"SRFP-Genesis.Details":{"Session":"1","Scenario":"getMultimedia","Identity":"","InputTimeStamp":"20180521 09:49:19.959","Input":[{"Event":"SRFP-Genesis.getMultimedia","Type":"REQ","RawData":"http://localhost:3000/mulitiMedia.json?name=girl.jpg&type=image&commandId=1","Data":{"Name":"girl.jpg","Type":"image","CommandId":"1"}}],"OutputTimeStamp":"20180521 09:49:19.959","Output":[{"Event":"SRFP-Genesis.getMultimedia","Type":"RES","RawData":"girl.jpg","Data":{"Size":"null","Modified":"null"}}],"ProcessingTime":"0 ms"}}
... ...
sc-structure/logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805210945.stat 0 → 100644
... ... @@ -0,0 +1,3 @@
  1 +20180521 09:49:19|DESKTOP-G5SEAPD|SRFP_Genesis - stat: SRFP-Genesis Returned Unknown URL
  2 +20180521 09:49:19|DESKTOP-G5SEAPD|SRFP_Genesis - stat: SRFP-Genesis Received Unknown URL Request
  3 +20180521 09:49:19|DESKTOP-G5SEAPD|SRFP_Genesis - stat: SRFP-Genesis Received Unknown URL Request
... ...
sc-structure/logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805210945.summary 0 → 100644
... ... @@ -0,0 +1 @@
  1 +20180521 09:49:19|DESKTOP-G5SEAPD|SRFP_Genesis - summary: 20180521 09:49:19|null||getMultimedia|null|40400|Unknown URL|[client; getMultimedia(1); [40400; Unknown URL(1)]]|20180521 09:49:19|0
... ...
sc-structure/logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805211000.detail 0 → 100644
... ... @@ -0,0 +1 @@
  1 +20180521 10:02:46|DESKTOP-G5SEAPD|SRFP_Genesis|{"SRFP-Genesis.Details":{"Session":"1","Scenario":"getMultimedia","Identity":"","InputTimeStamp":"20180521 10:02:46.944","Input":[{"Event":"SRFP-Genesis.getMultimedia","Type":"REQ","RawData":"http://localhost:3000/mulitiMedia.json?name=girl.jpg&type=image&commandId=1","Data":{"Name":"girl.jpg","Type":"image","CommandId":"1"}}],"OutputTimeStamp":"20180521 10:02:46.944","Output":[{"Event":"SRFP-Genesis.getMultimedia","Type":"RES","RawData":"girl.jpg","Data":{"Size":"null","Modified":"null"}}],"ProcessingTime":"0 ms"}}
... ...
sc-structure/logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805211000.stat 0 → 100644
... ... @@ -0,0 +1,3 @@
  1 +20180521 10:02:46|DESKTOP-G5SEAPD|SRFP_Genesis|SRFP-Genesis Received Unknown URL Request
  2 +20180521 10:02:46|DESKTOP-G5SEAPD|SRFP_Genesis|SRFP-Genesis Returned Unknown URL
  3 +20180521 10:02:46|DESKTOP-G5SEAPD|SRFP_Genesis|SRFP-Genesis Received Unknown URL Request
... ...
sc-structure/logTest/DESKTOP-G5SEAPD_SRFP_Genesis_201805211000.summary 0 → 100644
... ... @@ -0,0 +1 @@
  1 +20180521 10:02:46|null||getMultimedia|null|40400|Unknown URL|[client; getMultimedia(1); [40400; Unknown URL(1)]]|20180521 10:02:46|1
... ...
sc-structure/package-lock.json 0 → 100644
... ... @@ -0,0 +1,1225 @@
  1 +{
  2 + "name": "srfpgenesis",
  3 + "version": "0.0.0",
  4 + "lockfileVersion": 1,
  5 + "requires": true,
  6 + "dependencies": {
  7 + "accepts": {
  8 + "version": "1.3.4",
  9 + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz",
  10 + "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=",
  11 + "requires": {
  12 + "mime-types": "2.1.17",
  13 + "negotiator": "0.6.1"
  14 + }
  15 + },
  16 + "acorn": {
  17 + "version": "2.7.0",
  18 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz",
  19 + "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc="
  20 + },
  21 + "acorn-globals": {
  22 + "version": "1.0.9",
  23 + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz",
  24 + "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=",
  25 + "requires": {
  26 + "acorn": "2.7.0"
  27 + }
  28 + },
  29 + "ajv": {
  30 + "version": "5.5.2",
  31 + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
  32 + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
  33 + "requires": {
  34 + "co": "4.6.0",
  35 + "fast-deep-equal": "1.1.0",
  36 + "fast-json-stable-stringify": "2.0.0",
  37 + "json-schema-traverse": "0.3.1"
  38 + }
  39 + },
  40 + "align-text": {
  41 + "version": "0.1.4",
  42 + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
  43 + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
  44 + "requires": {
  45 + "kind-of": "3.2.2",
  46 + "longest": "1.0.1",
  47 + "repeat-string": "1.6.1"
  48 + }
  49 + },
  50 + "amdefine": {
  51 + "version": "1.0.1",
  52 + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
  53 + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
  54 + },
  55 + "array-flatten": {
  56 + "version": "1.1.1",
  57 + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
  58 + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
  59 + },
  60 + "asap": {
  61 + "version": "1.0.0",
  62 + "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz",
  63 + "integrity": "sha1-sqRdpf36ILBJb8N2jMJ8EvqRan0="
  64 + },
  65 + "asn1": {
  66 + "version": "0.2.4",
  67 + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
  68 + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
  69 + "requires": {
  70 + "safer-buffer": "2.1.2"
  71 + }
  72 + },
  73 + "assert-plus": {
  74 + "version": "1.0.0",
  75 + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
  76 + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
  77 + },
  78 + "asynckit": {
  79 + "version": "0.4.0",
  80 + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
  81 + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
  82 + },
  83 + "aws-sign2": {
  84 + "version": "0.7.0",
  85 + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
  86 + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
  87 + },
  88 + "aws4": {
  89 + "version": "1.8.0",
  90 + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
  91 + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
  92 + },
  93 + "basic-auth": {
  94 + "version": "2.0.0",
  95 + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz",
  96 + "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=",
  97 + "requires": {
  98 + "safe-buffer": "5.1.1"
  99 + }
  100 + },
  101 + "bcrypt-pbkdf": {
  102 + "version": "1.0.2",
  103 + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
  104 + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
  105 + "optional": true,
  106 + "requires": {
  107 + "tweetnacl": "0.14.5"
  108 + }
  109 + },
  110 + "body-parser": {
  111 + "version": "1.18.2",
  112 + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
  113 + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
  114 + "requires": {
  115 + "bytes": "3.0.0",
  116 + "content-type": "1.0.4",
  117 + "debug": "2.6.9",
  118 + "depd": "1.1.2",
  119 + "http-errors": "1.6.2",
  120 + "iconv-lite": "0.4.19",
  121 + "on-finished": "2.3.0",
  122 + "qs": "6.5.1",
  123 + "raw-body": "2.3.2",
  124 + "type-is": "1.6.15"
  125 + }
  126 + },
  127 + "bytes": {
  128 + "version": "3.0.0",
  129 + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
  130 + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
  131 + },
  132 + "camelcase": {
  133 + "version": "1.2.1",
  134 + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
  135 + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
  136 + },
  137 + "caseless": {
  138 + "version": "0.12.0",
  139 + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
  140 + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
  141 + },
  142 + "center-align": {
  143 + "version": "0.1.3",
  144 + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
  145 + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
  146 + "requires": {
  147 + "align-text": "0.1.4",
  148 + "lazy-cache": "1.0.4"
  149 + }
  150 + },
  151 + "character-parser": {
  152 + "version": "1.2.1",
  153 + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz",
  154 + "integrity": "sha1-wN3kqxgnE7kZuXCVmhI+zBow/NY="
  155 + },
  156 + "circular-json": {
  157 + "version": "0.5.5",
  158 + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.5.tgz",
  159 + "integrity": "sha512-13YaR6kiz0kBNmIVM87Io8Hp7bWOo4r61vkEANy8iH9R9bc6avud/1FT0SBpqR1RpIQADOh/Q+yHZDA1iL6ysA=="
  160 + },
  161 + "clean-css": {
  162 + "version": "3.4.28",
  163 + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz",
  164 + "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=",
  165 + "requires": {
  166 + "commander": "2.8.1",
  167 + "source-map": "0.4.4"
  168 + },
  169 + "dependencies": {
  170 + "commander": {
  171 + "version": "2.8.1",
  172 + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
  173 + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
  174 + "requires": {
  175 + "graceful-readlink": "1.0.1"
  176 + }
  177 + }
  178 + }
  179 + },
  180 + "cliui": {
  181 + "version": "2.1.0",
  182 + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
  183 + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
  184 + "requires": {
  185 + "center-align": "0.1.3",
  186 + "right-align": "0.1.3",
  187 + "wordwrap": "0.0.2"
  188 + },
  189 + "dependencies": {
  190 + "wordwrap": {
  191 + "version": "0.0.2",
  192 + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
  193 + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
  194 + }
  195 + }
  196 + },
  197 + "co": {
  198 + "version": "4.6.0",
  199 + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
  200 + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
  201 + },
  202 + "combined-stream": {
  203 + "version": "1.0.6",
  204 + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
  205 + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
  206 + "requires": {
  207 + "delayed-stream": "1.0.0"
  208 + }
  209 + },
  210 + "commander": {
  211 + "version": "2.6.0",
  212 + "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz",
  213 + "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0="
  214 + },
  215 + "constantinople": {
  216 + "version": "3.0.2",
  217 + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz",
  218 + "integrity": "sha1-S5RdmTeQe82Y7ldRIsOBdRZUQUE=",
  219 + "requires": {
  220 + "acorn": "2.7.0"
  221 + }
  222 + },
  223 + "content-disposition": {
  224 + "version": "0.5.2",
  225 + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
  226 + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
  227 + },
  228 + "content-type": {
  229 + "version": "1.0.4",
  230 + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
  231 + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
  232 + },
  233 + "cookie": {
  234 + "version": "0.3.1",
  235 + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
  236 + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
  237 + },
  238 + "cookie-parser": {
  239 + "version": "1.4.3",
  240 + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz",
  241 + "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=",
  242 + "requires": {
  243 + "cookie": "0.3.1",
  244 + "cookie-signature": "1.0.6"
  245 + }
  246 + },
  247 + "cookie-signature": {
  248 + "version": "1.0.6",
  249 + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
  250 + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
  251 + },
  252 + "core-util-is": {
  253 + "version": "1.0.2",
  254 + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
  255 + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
  256 + },
  257 + "css": {
  258 + "version": "1.0.8",
  259 + "resolved": "https://registry.npmjs.org/css/-/css-1.0.8.tgz",
  260 + "integrity": "sha1-k4aBHKgrzMnuf7WnMrHioxfIo+c=",
  261 + "requires": {
  262 + "css-parse": "1.0.4",
  263 + "css-stringify": "1.0.5"
  264 + }
  265 + },
  266 + "css-parse": {
  267 + "version": "1.0.4",
  268 + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.0.4.tgz",
  269 + "integrity": "sha1-OLBQP7+dqfVOnB29pg4UXHcRe90="
  270 + },
  271 + "css-stringify": {
  272 + "version": "1.0.5",
  273 + "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz",
  274 + "integrity": "sha1-sNBClG2ylTu50pKQCmy19tASIDE="
  275 + },
  276 + "dashdash": {
  277 + "version": "1.14.1",
  278 + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
  279 + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
  280 + "requires": {
  281 + "assert-plus": "1.0.0"
  282 + }
  283 + },
  284 + "date-format": {
  285 + "version": "1.2.0",
  286 + "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz",
  287 + "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg="
  288 + },
  289 + "dateformat": {
  290 + "version": "3.0.3",
  291 + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
  292 + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q=="
  293 + },
  294 + "debug": {
  295 + "version": "2.6.9",
  296 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
  297 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
  298 + "requires": {
  299 + "ms": "2.0.0"
  300 + }
  301 + },
  302 + "decamelize": {
  303 + "version": "1.2.0",
  304 + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
  305 + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
  306 + },
  307 + "delayed-stream": {
  308 + "version": "1.0.0",
  309 + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
  310 + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
  311 + },
  312 + "depd": {
  313 + "version": "1.1.2",
  314 + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
  315 + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
  316 + },
  317 + "destroy": {
  318 + "version": "1.0.4",
  319 + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
  320 + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
  321 + },
  322 + "easysoap": {
  323 + "version": "2.0.1",
  324 + "resolved": "https://registry.npmjs.org/easysoap/-/easysoap-2.0.1.tgz",
  325 + "integrity": "sha512-pMLbaDcR3BGVy94yTEyZbsY7OXKm4xmM5FLy+bOz1mYSNt2drNOQSuj7bim2WGiJwoE648wtqa8wHnZbNjuFQw==",
  326 + "requires": {
  327 + "request": "2.87.0",
  328 + "underscore": "1.9.1",
  329 + "wsdlrdr": "0.4.0",
  330 + "xmldoc": "1.1.2"
  331 + }
  332 + },
  333 + "ecc-jsbn": {
  334 + "version": "0.1.2",
  335 + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
  336 + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
  337 + "optional": true,
  338 + "requires": {
  339 + "jsbn": "0.1.1",
  340 + "safer-buffer": "2.1.2"
  341 + }
  342 + },
  343 + "ee-first": {
  344 + "version": "1.1.1",
  345 + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
  346 + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
  347 + },
  348 + "encodeurl": {
  349 + "version": "1.0.2",
  350 + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
  351 + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
  352 + },
  353 + "escape-html": {
  354 + "version": "1.0.3",
  355 + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
  356 + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
  357 + },
  358 + "etag": {
  359 + "version": "1.8.1",
  360 + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
  361 + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
  362 + },
  363 + "express": {
  364 + "version": "4.15.5",
  365 + "resolved": "https://registry.npmjs.org/express/-/express-4.15.5.tgz",
  366 + "integrity": "sha1-ZwI1ypWYiQpa6BcLg9tyK4Qu2Sc=",
  367 + "requires": {
  368 + "accepts": "1.3.4",
  369 + "array-flatten": "1.1.1",
  370 + "content-disposition": "0.5.2",
  371 + "content-type": "1.0.4",
  372 + "cookie": "0.3.1",
  373 + "cookie-signature": "1.0.6",
  374 + "debug": "2.6.9",
  375 + "depd": "1.1.2",
  376 + "encodeurl": "1.0.2",
  377 + "escape-html": "1.0.3",
  378 + "etag": "1.8.1",
  379 + "finalhandler": "1.0.6",
  380 + "fresh": "0.5.2",
  381 + "merge-descriptors": "1.0.1",
  382 + "methods": "1.1.2",
  383 + "on-finished": "2.3.0",
  384 + "parseurl": "1.3.2",
  385 + "path-to-regexp": "0.1.7",
  386 + "proxy-addr": "1.1.5",
  387 + "qs": "6.5.0",
  388 + "range-parser": "1.2.0",
  389 + "send": "0.15.6",
  390 + "serve-static": "1.12.6",
  391 + "setprototypeof": "1.0.3",
  392 + "statuses": "1.3.1",
  393 + "type-is": "1.6.15",
  394 + "utils-merge": "1.0.0",
  395 + "vary": "1.1.2"
  396 + },
  397 + "dependencies": {
  398 + "qs": {
  399 + "version": "6.5.0",
  400 + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.0.tgz",
  401 + "integrity": "sha512-fjVFjW9yhqMhVGwRExCXLhJKrLlkYSaxNWdyc9rmHlrVZbk35YHH312dFd7191uQeXkI3mKLZTIbSvIeFwFemg=="
  402 + },
  403 + "statuses": {
  404 + "version": "1.3.1",
  405 + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
  406 + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4="
  407 + }
  408 + }
  409 + },
  410 + "extend": {
  411 + "version": "3.0.2",
  412 + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
  413 + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
  414 + },
  415 + "extsprintf": {
  416 + "version": "1.3.0",
  417 + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
  418 + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
  419 + },
  420 + "fast-deep-equal": {
  421 + "version": "1.1.0",
  422 + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
  423 + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
  424 + },
  425 + "fast-json-stable-stringify": {
  426 + "version": "2.0.0",
  427 + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
  428 + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
  429 + },
  430 + "finalhandler": {
  431 + "version": "1.0.6",
  432 + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz",
  433 + "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=",
  434 + "requires": {
  435 + "debug": "2.6.9",
  436 + "encodeurl": "1.0.2",
  437 + "escape-html": "1.0.3",
  438 + "on-finished": "2.3.0",
  439 + "parseurl": "1.3.2",
  440 + "statuses": "1.3.1",
  441 + "unpipe": "1.0.0"
  442 + },
  443 + "dependencies": {
  444 + "statuses": {
  445 + "version": "1.3.1",
  446 + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
  447 + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4="
  448 + }
  449 + }
  450 + },
  451 + "forever-agent": {
  452 + "version": "0.6.1",
  453 + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
  454 + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
  455 + },
  456 + "form-data": {
  457 + "version": "2.3.2",
  458 + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
  459 + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
  460 + "requires": {
  461 + "asynckit": "0.4.0",
  462 + "combined-stream": "1.0.6",
  463 + "mime-types": "2.1.17"
  464 + }
  465 + },
  466 + "forwarded": {
  467 + "version": "0.1.2",
  468 + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
  469 + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
  470 + },
  471 + "fresh": {
  472 + "version": "0.5.2",
  473 + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
  474 + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
  475 + },
  476 + "getpass": {
  477 + "version": "0.1.7",
  478 + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
  479 + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
  480 + "requires": {
  481 + "assert-plus": "1.0.0"
  482 + }
  483 + },
  484 + "graceful-readlink": {
  485 + "version": "1.0.1",
  486 + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
  487 + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
  488 + },
  489 + "har-schema": {
  490 + "version": "2.0.0",
  491 + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
  492 + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
  493 + },
  494 + "har-validator": {
  495 + "version": "5.0.3",
  496 + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
  497 + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
  498 + "requires": {
  499 + "ajv": "5.5.2",
  500 + "har-schema": "2.0.0"
  501 + }
  502 + },
  503 + "http-errors": {
  504 + "version": "1.6.2",
  505 + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
  506 + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
  507 + "requires": {
  508 + "depd": "1.1.1",
  509 + "inherits": "2.0.3",
  510 + "setprototypeof": "1.0.3",
  511 + "statuses": "1.4.0"
  512 + },
  513 + "dependencies": {
  514 + "depd": {
  515 + "version": "1.1.1",
  516 + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
  517 + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k="
  518 + }
  519 + }
  520 + },
  521 + "http-signature": {
  522 + "version": "1.2.0",
  523 + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
  524 + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
  525 + "requires": {
  526 + "assert-plus": "1.0.0",
  527 + "jsprim": "1.4.1",
  528 + "sshpk": "1.14.2"
  529 + }
  530 + },
  531 + "iconv-lite": {
  532 + "version": "0.4.19",
  533 + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
  534 + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
  535 + },
  536 + "inherits": {
  537 + "version": "2.0.3",
  538 + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
  539 + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
  540 + },
  541 + "ipaddr.js": {
  542 + "version": "1.4.0",
  543 + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.4.0.tgz",
  544 + "integrity": "sha1-KWrKh4qCGBbluF0KKFqZvP9FgvA="
  545 + },
  546 + "is-buffer": {
  547 + "version": "1.1.6",
  548 + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
  549 + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
  550 + },
  551 + "is-promise": {
  552 + "version": "2.1.0",
  553 + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
  554 + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
  555 + },
  556 + "is-typedarray": {
  557 + "version": "1.0.0",
  558 + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
  559 + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
  560 + },
  561 + "isarray": {
  562 + "version": "1.0.0",
  563 + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
  564 + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
  565 + },
  566 + "isstream": {
  567 + "version": "0.1.2",
  568 + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
  569 + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
  570 + },
  571 + "jade": {
  572 + "version": "1.11.0",
  573 + "resolved": "https://registry.npmjs.org/jade/-/jade-1.11.0.tgz",
  574 + "integrity": "sha1-nIDlOMEtP7lcjZu5VZ+gzAQEBf0=",
  575 + "requires": {
  576 + "character-parser": "1.2.1",
  577 + "clean-css": "3.4.28",
  578 + "commander": "2.6.0",
  579 + "constantinople": "3.0.2",
  580 + "jstransformer": "0.0.2",
  581 + "mkdirp": "0.5.1",
  582 + "transformers": "2.1.0",
  583 + "uglify-js": "2.8.29",
  584 + "void-elements": "2.0.1",
  585 + "with": "4.0.3"
  586 + }
  587 + },
  588 + "jsbn": {
  589 + "version": "0.1.1",
  590 + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
  591 + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
  592 + "optional": true
  593 + },
  594 + "json-schema": {
  595 + "version": "0.2.3",
  596 + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
  597 + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
  598 + },
  599 + "json-schema-traverse": {
  600 + "version": "0.3.1",
  601 + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
  602 + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
  603 + },
  604 + "json-stringify-safe": {
  605 + "version": "5.0.1",
  606 + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
  607 + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
  608 + },
  609 + "jsprim": {
  610 + "version": "1.4.1",
  611 + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
  612 + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
  613 + "requires": {
  614 + "assert-plus": "1.0.0",
  615 + "extsprintf": "1.3.0",
  616 + "json-schema": "0.2.3",
  617 + "verror": "1.10.0"
  618 + }
  619 + },
  620 + "jstransformer": {
  621 + "version": "0.0.2",
  622 + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-0.0.2.tgz",
  623 + "integrity": "sha1-eq4pqQPRls+glz2IXT5HlH7Ndqs=",
  624 + "requires": {
  625 + "is-promise": "2.1.0",
  626 + "promise": "6.1.0"
  627 + }
  628 + },
  629 + "kind-of": {
  630 + "version": "3.2.2",
  631 + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
  632 + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
  633 + "requires": {
  634 + "is-buffer": "1.1.6"
  635 + }
  636 + },
  637 + "lazy-cache": {
  638 + "version": "1.0.4",
  639 + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
  640 + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
  641 + },
  642 + "log4js": {
  643 + "version": "3.0.4",
  644 + "resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.4.tgz",
  645 + "integrity": "sha512-4rQ1TrOf85lxB0+hBiPF27Zw8pGTHxKZq8FYfum1TNhx/KMUlQ+LL4bMKcdzc7zoAFF992w8+MFQm3BQbUgePA==",
  646 + "requires": {
  647 + "circular-json": "0.5.5",
  648 + "date-format": "1.2.0",
  649 + "debug": "3.1.0",
  650 + "streamroller": "0.7.0"
  651 + },
  652 + "dependencies": {
  653 + "debug": {
  654 + "version": "3.1.0",
  655 + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
  656 + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
  657 + "requires": {
  658 + "ms": "2.0.0"
  659 + }
  660 + }
  661 + }
  662 + },
  663 + "longest": {
  664 + "version": "1.0.1",
  665 + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
  666 + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
  667 + },
  668 + "media-typer": {
  669 + "version": "0.3.0",
  670 + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
  671 + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
  672 + },
  673 + "merge-descriptors": {
  674 + "version": "1.0.1",
  675 + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
  676 + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
  677 + },
  678 + "methods": {
  679 + "version": "1.1.2",
  680 + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
  681 + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
  682 + },
  683 + "mime": {
  684 + "version": "1.3.4",
  685 + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
  686 + "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM="
  687 + },
  688 + "mime-db": {
  689 + "version": "1.30.0",
  690 + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz",
  691 + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE="
  692 + },
  693 + "mime-types": {
  694 + "version": "2.1.17",
  695 + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
  696 + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
  697 + "requires": {
  698 + "mime-db": "1.30.0"
  699 + }
  700 + },
  701 + "minimist": {
  702 + "version": "0.0.8",
  703 + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
  704 + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
  705 + },
  706 + "mkdirp": {
  707 + "version": "0.5.1",
  708 + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
  709 + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
  710 + "requires": {
  711 + "minimist": "0.0.8"
  712 + }
  713 + },
  714 + "morgan": {
  715 + "version": "1.9.0",
  716 + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz",
  717 + "integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=",
  718 + "requires": {
  719 + "basic-auth": "2.0.0",
  720 + "debug": "2.6.9",
  721 + "depd": "1.1.2",
  722 + "on-finished": "2.3.0",
  723 + "on-headers": "1.0.1"
  724 + }
  725 + },
  726 + "ms": {
  727 + "version": "2.0.0",
  728 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
  729 + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
  730 + },
  731 + "negotiator": {
  732 + "version": "0.6.1",
  733 + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
  734 + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
  735 + },
  736 + "oauth-sign": {
  737 + "version": "0.8.2",
  738 + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
  739 + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
  740 + },
  741 + "on-finished": {
  742 + "version": "2.3.0",
  743 + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
  744 + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
  745 + "requires": {
  746 + "ee-first": "1.1.1"
  747 + }
  748 + },
  749 + "on-headers": {
  750 + "version": "1.0.1",
  751 + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
  752 + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c="
  753 + },
  754 + "optimist": {
  755 + "version": "0.3.7",
  756 + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
  757 + "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
  758 + "requires": {
  759 + "wordwrap": "0.0.3"
  760 + }
  761 + },
  762 + "parseurl": {
  763 + "version": "1.3.2",
  764 + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
  765 + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
  766 + },
  767 + "path-to-regexp": {
  768 + "version": "0.1.7",
  769 + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
  770 + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
  771 + },
  772 + "performance-now": {
  773 + "version": "2.1.0",
  774 + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
  775 + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
  776 + },
  777 + "process-nextick-args": {
  778 + "version": "2.0.0",
  779 + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
  780 + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
  781 + },
  782 + "promise": {
  783 + "version": "6.1.0",
  784 + "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz",
  785 + "integrity": "sha1-LOcp9rlLRcJoka0GAsXJDgTG7vY=",
  786 + "requires": {
  787 + "asap": "1.0.0"
  788 + }
  789 + },
  790 + "proxy-addr": {
  791 + "version": "1.1.5",
  792 + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz",
  793 + "integrity": "sha1-ccDuOxAt4/IC87ZPYI0XP8uhqRg=",
  794 + "requires": {
  795 + "forwarded": "0.1.2",
  796 + "ipaddr.js": "1.4.0"
  797 + }
  798 + },
  799 + "punycode": {
  800 + "version": "1.4.1",
  801 + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
  802 + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
  803 + },
  804 + "qs": {
  805 + "version": "6.5.1",
  806 + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
  807 + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="
  808 + },
  809 + "range-parser": {
  810 + "version": "1.2.0",
  811 + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
  812 + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
  813 + },
  814 + "raw-body": {
  815 + "version": "2.3.2",
  816 + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
  817 + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
  818 + "requires": {
  819 + "bytes": "3.0.0",
  820 + "http-errors": "1.6.2",
  821 + "iconv-lite": "0.4.19",
  822 + "unpipe": "1.0.0"
  823 + }
  824 + },
  825 + "readable-stream": {
  826 + "version": "2.3.6",
  827 + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
  828 + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
  829 + "requires": {
  830 + "core-util-is": "1.0.2",
  831 + "inherits": "2.0.3",
  832 + "isarray": "1.0.0",
  833 + "process-nextick-args": "2.0.0",
  834 + "safe-buffer": "5.1.1",
  835 + "string_decoder": "1.1.1",
  836 + "util-deprecate": "1.0.2"
  837 + }
  838 + },
  839 + "repeat-string": {
  840 + "version": "1.6.1",
  841 + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
  842 + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
  843 + },
  844 + "request": {
  845 + "version": "2.87.0",
  846 + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz",
  847 + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==",
  848 + "requires": {
  849 + "aws-sign2": "0.7.0",
  850 + "aws4": "1.8.0",
  851 + "caseless": "0.12.0",
  852 + "combined-stream": "1.0.6",
  853 + "extend": "3.0.2",
  854 + "forever-agent": "0.6.1",
  855 + "form-data": "2.3.2",
  856 + "har-validator": "5.0.3",
  857 + "http-signature": "1.2.0",
  858 + "is-typedarray": "1.0.0",
  859 + "isstream": "0.1.2",
  860 + "json-stringify-safe": "5.0.1",
  861 + "mime-types": "2.1.17",
  862 + "oauth-sign": "0.8.2",
  863 + "performance-now": "2.1.0",
  864 + "qs": "6.5.1",
  865 + "safe-buffer": "5.1.1",
  866 + "tough-cookie": "2.3.4",
  867 + "tunnel-agent": "0.6.0",
  868 + "uuid": "3.3.2"
  869 + }
  870 + },
  871 + "right-align": {
  872 + "version": "0.1.3",
  873 + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
  874 + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
  875 + "requires": {
  876 + "align-text": "0.1.4"
  877 + }
  878 + },
  879 + "safe-buffer": {
  880 + "version": "5.1.1",
  881 + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
  882 + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
  883 + },
  884 + "safer-buffer": {
  885 + "version": "2.1.2",
  886 + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
  887 + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
  888 + },
  889 + "sax": {
  890 + "version": "1.2.4",
  891 + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
  892 + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
  893 + },
  894 + "send": {
  895 + "version": "0.15.6",
  896 + "resolved": "https://registry.npmjs.org/send/-/send-0.15.6.tgz",
  897 + "integrity": "sha1-IPI6nJJbdiq4JwX+L52yUqzkfjQ=",
  898 + "requires": {
  899 + "debug": "2.6.9",
  900 + "depd": "1.1.2",
  901 + "destroy": "1.0.4",
  902 + "encodeurl": "1.0.2",
  903 + "escape-html": "1.0.3",
  904 + "etag": "1.8.1",
  905 + "fresh": "0.5.2",
  906 + "http-errors": "1.6.2",
  907 + "mime": "1.3.4",
  908 + "ms": "2.0.0",
  909 + "on-finished": "2.3.0",
  910 + "range-parser": "1.2.0",
  911 + "statuses": "1.3.1"
  912 + },
  913 + "dependencies": {
  914 + "statuses": {
  915 + "version": "1.3.1",
  916 + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
  917 + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4="
  918 + }
  919 + }
  920 + },
  921 + "serve-favicon": {
  922 + "version": "2.4.5",
  923 + "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.4.5.tgz",
  924 + "integrity": "sha512-s7F8h2NrslMkG50KxvlGdj+ApSwaLex0vexuJ9iFf3GLTIp1ph/l1qZvRe9T9TJEYZgmq72ZwJ2VYiAEtChknw==",
  925 + "requires": {
  926 + "etag": "1.8.1",
  927 + "fresh": "0.5.2",
  928 + "ms": "2.0.0",
  929 + "parseurl": "1.3.2",
  930 + "safe-buffer": "5.1.1"
  931 + }
  932 + },
  933 + "serve-static": {
  934 + "version": "1.12.6",
  935 + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.6.tgz",
  936 + "integrity": "sha1-uXN3P2NEmTTaVOW+ul4x2fQhFXc=",
  937 + "requires": {
  938 + "encodeurl": "1.0.2",
  939 + "escape-html": "1.0.3",
  940 + "parseurl": "1.3.2",
  941 + "send": "0.15.6"
  942 + }
  943 + },
  944 + "setprototypeof": {
  945 + "version": "1.0.3",
  946 + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
  947 + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
  948 + },
  949 + "source-map": {
  950 + "version": "0.4.4",
  951 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
  952 + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
  953 + "requires": {
  954 + "amdefine": "1.0.1"
  955 + }
  956 + },
  957 + "sshpk": {
  958 + "version": "1.14.2",
  959 + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
  960 + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
  961 + "requires": {
  962 + "asn1": "0.2.4",
  963 + "assert-plus": "1.0.0",
  964 + "bcrypt-pbkdf": "1.0.2",
  965 + "dashdash": "1.14.1",
  966 + "ecc-jsbn": "0.1.2",
  967 + "getpass": "0.1.7",
  968 + "jsbn": "0.1.1",
  969 + "safer-buffer": "2.1.2",
  970 + "tweetnacl": "0.14.5"
  971 + }
  972 + },
  973 + "statuses": {
  974 + "version": "1.4.0",
  975 + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
  976 + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
  977 + },
  978 + "streamroller": {
  979 + "version": "0.7.0",
  980 + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz",
  981 + "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==",
  982 + "requires": {
  983 + "date-format": "1.2.0",
  984 + "debug": "3.1.0",
  985 + "mkdirp": "0.5.1",
  986 + "readable-stream": "2.3.6"
  987 + },
  988 + "dependencies": {
  989 + "debug": {
  990 + "version": "3.1.0",
  991 + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
  992 + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
  993 + "requires": {
  994 + "ms": "2.0.0"
  995 + }
  996 + }
  997 + }
  998 + },
  999 + "string_decoder": {
  1000 + "version": "1.1.1",
  1001 + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
  1002 + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
  1003 + "requires": {
  1004 + "safe-buffer": "5.1.1"
  1005 + }
  1006 + },
  1007 + "tough-cookie": {
  1008 + "version": "2.3.4",
  1009 + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
  1010 + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
  1011 + "requires": {
  1012 + "punycode": "1.4.1"
  1013 + }
  1014 + },
  1015 + "transformers": {
  1016 + "version": "2.1.0",
  1017 + "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz",
  1018 + "integrity": "sha1-XSPLNVYd2F3Gf7hIIwm0fVPM6ac=",
  1019 + "requires": {
  1020 + "css": "1.0.8",
  1021 + "promise": "2.0.0",
  1022 + "uglify-js": "2.2.5"
  1023 + },
  1024 + "dependencies": {
  1025 + "is-promise": {
  1026 + "version": "1.0.1",
  1027 + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz",
  1028 + "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU="
  1029 + },
  1030 + "promise": {
  1031 + "version": "2.0.0",
  1032 + "resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz",
  1033 + "integrity": "sha1-RmSKqdYFr10ucMMCS/WUNtoCuA4=",
  1034 + "requires": {
  1035 + "is-promise": "1.0.1"
  1036 + }
  1037 + },
  1038 + "source-map": {
  1039 + "version": "0.1.43",
  1040 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
  1041 + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
  1042 + "requires": {
  1043 + "amdefine": "1.0.1"
  1044 + }
  1045 + },
  1046 + "uglify-js": {
  1047 + "version": "2.2.5",
  1048 + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz",
  1049 + "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=",
  1050 + "requires": {
  1051 + "optimist": "0.3.7",
  1052 + "source-map": "0.1.43"
  1053 + }
  1054 + }
  1055 + }
  1056 + },
  1057 + "tunnel-agent": {
  1058 + "version": "0.6.0",
  1059 + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
  1060 + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
  1061 + "requires": {
  1062 + "safe-buffer": "5.1.1"
  1063 + }
  1064 + },
  1065 + "tweetnacl": {
  1066 + "version": "0.14.5",
  1067 + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
  1068 + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
  1069 + "optional": true
  1070 + },
  1071 + "type-is": {
  1072 + "version": "1.6.15",
  1073 + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz",
  1074 + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=",
  1075 + "requires": {
  1076 + "media-typer": "0.3.0",
  1077 + "mime-types": "2.1.17"
  1078 + }
  1079 + },
  1080 + "uglify-js": {
  1081 + "version": "2.8.29",
  1082 + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
  1083 + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
  1084 + "requires": {
  1085 + "source-map": "0.5.7",
  1086 + "uglify-to-browserify": "1.0.2",
  1087 + "yargs": "3.10.0"
  1088 + },
  1089 + "dependencies": {
  1090 + "source-map": {
  1091 + "version": "0.5.7",
  1092 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
  1093 + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
  1094 + }
  1095 + }
  1096 + },
  1097 + "uglify-to-browserify": {
  1098 + "version": "1.0.2",
  1099 + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
  1100 + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
  1101 + "optional": true
  1102 + },
  1103 + "underscore": {
  1104 + "version": "1.9.1",
  1105 + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz",
  1106 + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg=="
  1107 + },
  1108 + "unpipe": {
  1109 + "version": "1.0.0",
  1110 + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
  1111 + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
  1112 + },
  1113 + "util-deprecate": {
  1114 + "version": "1.0.2",
  1115 + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
  1116 + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
  1117 + },
  1118 + "utils-merge": {
  1119 + "version": "1.0.0",
  1120 + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz",
  1121 + "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg="
  1122 + },
  1123 + "uuid": {
  1124 + "version": "3.3.2",
  1125 + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
  1126 + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
  1127 + },
  1128 + "vary": {
  1129 + "version": "1.1.2",
  1130 + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
  1131 + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
  1132 + },
  1133 + "verror": {
  1134 + "version": "1.10.0",
  1135 + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
  1136 + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
  1137 + "requires": {
  1138 + "assert-plus": "1.0.0",
  1139 + "core-util-is": "1.0.2",
  1140 + "extsprintf": "1.3.0"
  1141 + }
  1142 + },
  1143 + "void-elements": {
  1144 + "version": "2.0.1",
  1145 + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
  1146 + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w="
  1147 + },
  1148 + "window-size": {
  1149 + "version": "0.1.0",
  1150 + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
  1151 + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
  1152 + },
  1153 + "with": {
  1154 + "version": "4.0.3",
  1155 + "resolved": "https://registry.npmjs.org/with/-/with-4.0.3.tgz",
  1156 + "integrity": "sha1-7v0VTp550sjTQXtkeo8U2f7M4U4=",
  1157 + "requires": {
  1158 + "acorn": "1.2.2",
  1159 + "acorn-globals": "1.0.9"
  1160 + },
  1161 + "dependencies": {
  1162 + "acorn": {
  1163 + "version": "1.2.2",
  1164 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz",
  1165 + "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ="
  1166 + }
  1167 + }
  1168 + },
  1169 + "wordwrap": {
  1170 + "version": "0.0.3",
  1171 + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
  1172 + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
  1173 + },
  1174 + "wsdlrdr": {
  1175 + "version": "0.4.0",
  1176 + "resolved": "https://registry.npmjs.org/wsdlrdr/-/wsdlrdr-0.4.0.tgz",
  1177 + "integrity": "sha512-9JZLfnxRx4j8nABatZwYt+DN5p0/4NW5LAIk4oac3rt6sdn9O2pxsoHVrgvk8hPrKya0lw1Ql30sdKzNn4hSWg==",
  1178 + "requires": {
  1179 + "request": "2.87.0",
  1180 + "xmldoc": "1.1.2"
  1181 + }
  1182 + },
  1183 + "xml-js": {
  1184 + "version": "1.6.7",
  1185 + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.7.tgz",
  1186 + "integrity": "sha512-1hn0xwwfMcWywnJxqiOXiv+pZaOJyf/YWcUeqJICF0BFb+IOkRFSkKyeA0V62WqTHXNdBxNuCFHhS/w2DtYpoA==",
  1187 + "requires": {
  1188 + "sax": "1.2.4"
  1189 + }
  1190 + },
  1191 + "xml2js": {
  1192 + "version": "0.4.19",
  1193 + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
  1194 + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
  1195 + "requires": {
  1196 + "sax": "1.2.4",
  1197 + "xmlbuilder": "9.0.7"
  1198 + }
  1199 + },
  1200 + "xmlbuilder": {
  1201 + "version": "9.0.7",
  1202 + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
  1203 + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
  1204 + },
  1205 + "xmldoc": {
  1206 + "version": "1.1.2",
  1207 + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.1.2.tgz",
  1208 + "integrity": "sha512-ruPC/fyPNck2BD1dpz0AZZyrEwMOrWTO5lDdIXS91rs3wtm4j+T8Rp2o+zoOYkkAxJTZRPOSnOGei1egoRmKMQ==",
  1209 + "requires": {
  1210 + "sax": "1.2.4"
  1211 + }
  1212 + },
  1213 + "yargs": {
  1214 + "version": "3.10.0",
  1215 + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
  1216 + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
  1217 + "requires": {
  1218 + "camelcase": "1.2.1",
  1219 + "cliui": "2.1.0",
  1220 + "decamelize": "1.2.0",
  1221 + "window-size": "0.1.0"
  1222 + }
  1223 + }
  1224 + }
  1225 +}
... ...
sc-structure/package.json 0 → 100644
... ... @@ -0,0 +1,23 @@
  1 +{
  2 + "name": "srfpgenesis",
  3 + "version": "0.0.0",
  4 + "private": true,
  5 + "scripts": {
  6 + "start": "node ./bin/www"
  7 + },
  8 + "dependencies": {
  9 + "body-parser": "~1.18.2",
  10 + "cookie-parser": "~1.4.3",
  11 + "dateformat": "^3.0.3",
  12 + "debug": "~2.6.9",
  13 + "easysoap": "^2.0.1",
  14 + "express": "^4.15.5",
  15 + "jade": "~1.11.0",
  16 + "log4js": "^3.0.4",
  17 + "morgan": "~1.9.0",
  18 + "request": "^2.87.0",
  19 + "serve-favicon": "~2.4.5",
  20 + "xml-js": "^1.6.7",
  21 + "xml2js": "^0.4.19"
  22 + }
  23 +}
... ...
sc-structure/public/image/image.jpg 0 → 100644

57 KB

sc-structure/public/stylesheets/style.css 0 → 100644
... ... @@ -0,0 +1,8 @@
  1 +body {
  2 + padding: 50px;
  3 + font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
  4 +}
  5 +
  6 +a {
  7 + color: #00B7FF;
  8 +}
... ...
sc-structure/routes/CMF/customerMembership.js 0 → 100644
... ... @@ -0,0 +1,9 @@
  1 +var express = require('express');
  2 +var router = express.Router();
  3 +
  4 +/* GET users listing. */
  5 +router.get('/', function(req, res, next) {
  6 + res.send('customer membership');
  7 +});
  8 +
  9 +module.exports = router;
... ...
sc-structure/routes/CMF/index.js 0 → 100644
... ... @@ -0,0 +1,11 @@
  1 +let express = require('express');
  2 +let router = express.Router();
  3 +
  4 +// load controllers
  5 +const vizCard = require('./vizCard');
  6 +const customerMembership = require('./customerMembership');
  7 +
  8 +router.use('/vizCard.json', vizCard);
  9 +router.use('/customerMembership.json', customerMembership);
  10 +
  11 +module.exports = router;
0 12 \ No newline at end of file
... ...
sc-structure/routes/CMF/vizCard.js 0 → 100644
... ... @@ -0,0 +1,98 @@
  1 +'use strict';
  2 +var express = require('express');
  3 +var router = express.Router();
  4 +const request = require('request');
  5 +var parseJson = require('xml-js');
  6 +var custom_log = require('../../config/logger');
  7 +var config = require('../../config/config');
  8 +var stat = require('../../utils/SutisStat');
  9 +var alarm = require('../../utils/SutisAlarm');
  10 +var detail = require('../../utils/SutisDetail');
  11 +var logger = require('../../utils/SutisLogSummary');
  12 +
  13 +var _url = `http://localhost:8080`
  14 +
  15 +router.get('/',async function(req, res, next) {
  16 +
  17 + var cmd = 'vizCard'
  18 +
  19 + var requestXml = `<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/">
  20 + <soap:Header/>
  21 + <soap:Body>
  22 + <tem:SearchCustomer>
  23 + <tem:username>axviz</tem:username>
  24 + <tem:password>1234</tem:password>
  25 + <tem:systemName>30</tem:systemName>
  26 + <tem:queryType>1</tem:queryType>
  27 + <tem:cardId>${req.query.id}</tem:cardId>
  28 + </tem:SearchCustomer>
  29 + </soap:Body>
  30 + </soap:Envelope>`
  31 +
  32 + console.log(requestXml);
  33 + // console.log(req.query.fields)
  34 +
  35 + const result = await asyncRequest({
  36 + url : _url,
  37 + body : requestXml,
  38 + method : 'POST'
  39 + });
  40 +
  41 + // parseString(result.body, function (err, result1) {
  42 + // console.log(result1);
  43 + // });
  44 +
  45 + var result1 = parseJson.xml2json(result.body, {compact: true, spaces: 4})
  46 + result1 = JSON.parse(result1)
  47 + result1 = result1['soap:Envelope']['soap:Body']['tem:SearchCustomerResponse']['tem:SearchCustomerResult']['tem:CustomerSearchResult'];
  48 + delete result1._comment;
  49 +
  50 + var response = {};
  51 +
  52 + if(req.query.fields){
  53 + var listFields = req.query.fields.split(",");
  54 + // console.log(listFields)
  55 + }
  56 +
  57 + for(var key in result1){
  58 + var keyObj = capitalizeFirstLetter(key.replace('tem:',''))
  59 + // console.log(keyObj+' : '+result1[key]['_text']);
  60 + if(listFields){
  61 + if(listFields.includes(keyObj)){
  62 + response[keyObj] = result1[key]['_text'];
  63 + }
  64 + } else {
  65 + response[keyObj] = result1[key]['_text'];
  66 + }
  67 + }
  68 +
  69 + stat.recv(cmd, '20000');
  70 + stat.retn(cmd, '20000');
  71 +
  72 + res.status(200).json({
  73 + resultCode: '20000',
  74 + resultDescription: 'Success',
  75 + resultData: response
  76 + });
  77 +});
  78 +
  79 +function capitalizeFirstLetter(string) {
  80 + return string.charAt(0).toLowerCase() + string.slice(1);
  81 +}
  82 +
  83 +function asyncRequest (params = {}) {
  84 + return new Promise((resolve, reject) => {
  85 + request(params, function (error, response, body) {
  86 + if (error) {
  87 + reject(error);
  88 + } else {
  89 + resolve({
  90 + 'body' : body,
  91 + 'response': response
  92 + });
  93 + }
  94 + });
  95 + });
  96 +}
  97 +
  98 +module.exports = router;
... ...
sc-structure/routes/users.js 0 → 100644
... ... @@ -0,0 +1,9 @@
  1 +var express = require('express');
  2 +var router = express.Router();
  3 +
  4 +/* GET users listing. */
  5 +router.get('/', function(req, res, next) {
  6 + res.send('respond with a resource');
  7 +});
  8 +
  9 +module.exports = router;
... ...
sc-structure/srfp_genesis.js 0 → 100644
... ... @@ -0,0 +1,323 @@
  1 +var express = require('express');
  2 +var path = require('path');
  3 +var app = express();
  4 +var fs = require('fs');
  5 +var logger = require('./config/logger');
  6 +var config = require('./config/config');
  7 +
  8 +function checkReq(req) {
  9 + var regex_filetype = /^.*\.(jpg|jpeg|png|mp3|mp4|m4a)$/ig;
  10 + var regex_datetime = /(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s\d{1,2}\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{4}\s([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\sGMT$/g;
  11 + var regex_commandId = /^\d+$/g;
  12 +
  13 + var reqModDate = req.get('If-Modified-Since');
  14 + var errorCase = null;
  15 + // logger.error('>>>>>>>>> ' + req.url);
  16 +
  17 + if (reqModDate != null) {
  18 + // logger.error('Req Header Not null');
  19 + if (!regex_datetime.test(reqModDate)) {
  20 + logger.error('[invalid] date format: ' + reqModDate);
  21 + errorCase = 'req.If-Modified-Since=' + reqModDate;
  22 +
  23 + var resc = '40300';
  24 + var desc = 'Missing or invalid parameter';
  25 + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
  26 + var missingInvalid = errorCase;
  27 + return [resc, desc, prompt, missingInvalid];
  28 + }
  29 + }
  30 +
  31 + if (req.query.name && req.query.type && req.query.commandId) {
  32 + if (regex_filetype.test(req.query.name)) {
  33 + return true;
  34 + }
  35 + }
  36 +
  37 + if (!req.query.name) {
  38 + logger.error('[missing or invalid]: name');
  39 + errorCase = 'req.name=' + req.query.name;
  40 + } else if (!req.query.type) {
  41 + logger.error('[missing or invalid]: type');
  42 + errorCase = 'req.type=' + req.query.type;
  43 + } else if (!req.query.commandId) {
  44 + logger.error('[missing or invalid]: commandId');
  45 + errorCase = 'req.commandId=' + req.query.commandId;
  46 + }
  47 +
  48 + var resc = '40300';
  49 + var desc = 'Missing or invalid parameter';
  50 + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
  51 + var missingInvalid = errorCase;
  52 + return [resc, desc, prompt, missingInvalid];
  53 +
  54 +};
  55 +
  56 +function checkFile(req) {
  57 + var path;
  58 + if (req.query.type === 'audio') {
  59 + path = config.mediaPath.audio + req.query.name;
  60 + } else if (req.query.type === 'video') {
  61 + path = config.mediaPath.video + req.query.name;
  62 + } else if (req.query.type === 'image') {
  63 + path = config.mediaPath.image + req.query.name;
  64 + } else {
  65 + var resc = '40401';
  66 + var desc = 'File not found';
  67 + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
  68 + var missingInvalid = 'req.name=' + req.query.name;
  69 + return [resc, desc, prompt, missingInvalid];
  70 + }
  71 +
  72 + if (fs.existsSync(path)) {
  73 + try {
  74 + fs.accessSync(path, fs.constants.R_OK);
  75 + var file_name = req.query.name;
  76 + return [true, file_name, path];
  77 + } catch (err) {
  78 + var resc = '40101';
  79 + var desc = 'Access denied';
  80 + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
  81 + var missingInvalid = 'req.name=' + req.query.name;
  82 + return [resc, desc, prompt, missingInvalid];
  83 + }
  84 + } else {
  85 + var resc = '40401';
  86 + var desc = 'File not found';
  87 + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
  88 + var missingInvalid = 'req.name=' + req.query.name;
  89 + return [resc, desc, prompt, missingInvalid];
  90 + }
  91 +};
  92 +
  93 +function checkHeader(req, path_file) {
  94 + try {
  95 + // var reqModDate = req.headers['If-Modified-Since'];
  96 + var reqModDate = req.get('If-Modified-Since');
  97 + var stats = fs.statSync(path_file);
  98 + var mtime = stats.mtime;
  99 + var size = stats['size'];
  100 +
  101 + if (reqModDate != null) {
  102 + reqModDate = new Date(reqModDate);
  103 +
  104 + logger.info('[If-Modified-Since]: ' + reqModDate.toUTCString());
  105 + logger.info('[Modified-File] : ' + mtime.toUTCString());
  106 +
  107 + if (reqModDate.toUTCString() == mtime.toUTCString()) {
  108 + logger.info('[Req Header]: If-Modified-Since == Modified File');
  109 + return [304, mtime, size];
  110 + } else {
  111 + logger.info('[Req Header]: If-Modified-Since != Modified File');
  112 + return [200, mtime, size];
  113 + }
  114 + } else {
  115 + logger.info('[Req Header]: No-header: If-Modified-Since');
  116 + logger.info('[Modified-File]: ' + mtime.toUTCString());
  117 + return [200, mtime, size];
  118 + }
  119 + } catch (error) {
  120 + logger.error('[Error check header!!!]');
  121 + return [200, mtime, size];
  122 + }
  123 +};
  124 +
  125 +function writeApplog(req) {
  126 +
  127 + logger.info('[Start getMultimedia Validate Parameter]: ' + 'name: ' + req.query.name + ', type=' + req.query.type + ', commandId=' + req.query.commandId);
  128 + logger.info('[incommigHeader: If-Modified-Since]: ' + req.get('If-Modified-Since'));
  129 + logger.info('[incomming url]: ' + req.protocol + '://' + req.get('host') + req.originalUrl);
  130 +}
  131 +
  132 +app.listen(8080, function() {
  133 + logger.info('=============================');
  134 + logger.info('SRFP-Genesis on port 8080!');
  135 +});
  136 +
  137 +app.get('/multiMedia.json', function(req, res) {
  138 + var summaryLog;
  139 + var request = checkReq(req);
  140 + var fileReq = checkFile(req);
  141 + // var headerReq = checkHeader(req, fileReq[2]);
  142 +
  143 + var session = req.query.commandId;
  144 + var cmd = 'getMultimedia';
  145 + var identity = '';
  146 + var reqfile = req.query.name;
  147 +
  148 + writeApplog(req);
  149 +
  150 + // [Check Request]
  151 + if (request == true && fileReq[0] == true) {
  152 + var resc = '20000';
  153 + var desc = 'Success';
  154 +
  155 + var headerReq = checkHeader(req, fileReq[2]);
  156 + var statusCode = headerReq[0];
  157 + var mtime = headerReq[1];
  158 + var size = headerReq[2];
  159 +
  160 + summaryLog = logger.summary(session, cmd, identity, resc, desc);
  161 + summaryLog.addSuccessBlock('client', cmd, 'null', 'Success');
  162 + summaryLog.addSuccessBlock('null', 'getFile', resc, desc);
  163 +
  164 + logger.statRecv(cmd, resc);
  165 + logger.statRetn(cmd, resc);
  166 + logger.detail(req, cmd, size, mtime.toUTCString());
  167 +
  168 + var content_type;
  169 + var regex_image = /^.*\.(jpg|jpeg)$/ig;
  170 + var regex_png = /^.*\.(png)$/ig;
  171 + var regex_mp3 = /^.*\.(mp3)$/ig;
  172 + var regex_mp4 = /^.*\.(mp4)$/ig;
  173 + var regex_m4a = /^.*\.(m4a)$/ig;
  174 +
  175 + if (regex_image.test(checkFile(req)[1])) {
  176 + content_type = 'image/jpeg';
  177 + } else if (regex_png.test(checkFile(req)[1])) {
  178 + content_type = 'image/png';
  179 + } else if (regex_mp3.test(checkFile(req)[1])) {
  180 + content_type = 'audio/mpeg';
  181 + } else if (regex_mp4.test(checkFile(req)[1])) {
  182 + content_type = 'video/mp4';
  183 + } else if (regex_m4a.test(checkFile(req)[1])) {
  184 + content_type = 'audio/m4a';
  185 + }
  186 +
  187 + logger.info('[Path File]: ' + fileReq[2]);
  188 +
  189 + if (statusCode == 200) {
  190 + logger.info('[statusCode]: 200');
  191 + var resc = '20000';
  192 + var desc = 'Success';
  193 +
  194 + logger.info('[resultCode]: ' + resc + ', [developerMessage]: ' + desc);
  195 +
  196 + res.writeHead(200, {
  197 + "Last-Modified": mtime.toUTCString(),
  198 + "Content-Disposition": 'attachment; filename="' + checkFile(req)[1] + '"',
  199 + "Content-Type": content_type,
  200 + "Content-Length": size
  201 + });
  202 + fs.createReadStream(checkFile(req)[2]).pipe(res);
  203 + // res.write(img);
  204 + // res.end();
  205 +
  206 + }
  207 + // return 304!
  208 + else {
  209 + logger.info('[statusCode]: 304');
  210 + var resc = '20000';
  211 + var desc = 'Success';
  212 +
  213 + logger.info('[resultCode]: ' + resc + ', [developerMessage]: ' + desc);
  214 +
  215 + res.writeHead(304, {
  216 + // "Content-Disposition": 'attachment; filename="' + checkFile(req)[1] + '"',
  217 + "Content-Type": content_type,
  218 + "Content-Length": size
  219 + });
  220 + res.end();
  221 +
  222 + }
  223 + } else if (request == true && fileReq[0] != true) {
  224 + var status_code = fileReq[0].substring(0, 3);
  225 +
  226 + logger.error('[statusCode]: ' + status_code);
  227 + logger.error('[resultCode]: ' + fileReq[0] + ', [developerMessage]: ' + fileReq[1]);
  228 +
  229 + summaryLog = logger.summary(session, cmd, identity, fileReq[0], fileReq[1]);
  230 + summaryLog.addSuccessBlock('client', cmd, 'null', 'Success');
  231 + summaryLog.addErrorBlock('null', 'getFile', fileReq[0], fileReq[1], fileReq[3]);
  232 +
  233 + logger.statRecv(cmd, fileReq[0]);
  234 + logger.statRetn(cmd, fileReq[0]);
  235 + logger.detail(req, cmd, null, null);
  236 +
  237 + res.writeHead(status_code, {
  238 + // "Content-Disposition": 'attachment; filename="' + req.query.name + '"',
  239 + "Content-Type": 'application/json'
  240 + });
  241 + res.write(fileReq[2]);
  242 + res.end();
  243 +
  244 + } else if (request != true) {
  245 + var status_code = request[0].substring(0, 3);
  246 +
  247 + logger.error('[statusCode]: ' + status_code);
  248 + logger.error('[resultCode]: ' + request[0] + ', [developerMessage]: ' + request[1]);
  249 +
  250 + summaryLog = logger.summary(session, cmd, identity, request[0], request[1]);
  251 + summaryLog.addErrorBlock('client', cmd, request[0], request[1], request[3]);
  252 +
  253 + logger.statRecv(cmd, request[0]);
  254 + logger.statRetn(cmd, request[0]);
  255 + logger.alarm(cmd, request[0]);
  256 + logger.detail(req, cmd, null, null);
  257 +
  258 + res.writeHead(status_code, {
  259 + // "Content-Disposition": 'attachment; filename="' + req.query.name + '"',
  260 + "Content-Type": 'application/json'
  261 + });
  262 + res.write(request[2]);
  263 + res.end();
  264 +
  265 + } else {
  266 + var resc = '50000';
  267 + var desc = 'System error';
  268 + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';;
  269 +
  270 + logger.error('[statusCode]: 500');
  271 + logger.error('[resultCode]: ' + resc + ', [developerMessage]: ' + desc);
  272 +
  273 + summaryLog = logger.summary(session, cmd, identity, resc, desc);
  274 + summaryLog.addErrorBlock('client', cmd, resc, desc, 'system_error');
  275 +
  276 + logger.statRecv(cmd, resc);
  277 + logger.statRetn(cmd, resc);
  278 + logger.alarm(cmd, resc);
  279 + logger.detail(req, cmd, null, null);
  280 +
  281 + res.writeHead(500, {
  282 + // "Content-Disposition": 'attachment; filename="' + req.query.name + '"',
  283 + "Content-Type": 'application/json'
  284 + });
  285 + res.write(prompt);
  286 + res.end();
  287 + }
  288 + summaryLog.flush();
  289 + logger.info('=============================');
  290 +});
  291 +
  292 +app.use(function(req, res, next) {
  293 + writeApplog(req);
  294 + var resc = '40400';
  295 + var desc = 'Unknown URL';
  296 + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
  297 +
  298 + var session = 'null';
  299 + var cmd = 'getMultimedia';
  300 + var identity = 'null';
  301 +
  302 + logger.error('[statusCode]: 404');
  303 + logger.error('[resultCode]: ' + resc + ', [developerMessage]: ' + desc);
  304 +
  305 + logger.statRecv(cmd, resc);
  306 + logger.statRetn(cmd, resc);
  307 + logger.alarm(cmd, resc);
  308 + logger.detail(req, cmd, null, null);
  309 +
  310 + summaryLog = logger.summary(session, cmd, identity, resc, desc);
  311 + summaryLog.addErrorBlock('client', cmd, resc, desc, 'req.url=' + req.url);
  312 + summaryLog.flush();
  313 +
  314 +
  315 + res.writeHead(404, {
  316 + // "Content-Disposition": 'attachment; filename="' + req.query.name + '"',
  317 + "Content-Type": 'application/json'
  318 + });
  319 + res.write(prompt);
  320 + res.end();
  321 +
  322 + logger.info('=============================');
  323 +});
... ...
sc-structure/srfp_genesis_backup.js 0 → 100644
... ... @@ -0,0 +1,278 @@
  1 +var express = require('express');
  2 +var path = require('path');
  3 +var app = express();
  4 +var fs = require('fs');
  5 +var util = require('util');
  6 +var crypto = require('crypto');
  7 +var http = require("http");
  8 +var url = require("url");
  9 +//var logger = require('./config/logger');
  10 +var config = require('./config/config');
  11 +var stat = require('./utils/SutisStat');
  12 +var detail = require('./utils/SutisDetail');
  13 +//var summaryLog = require('./utils/SutisLogSummary');
  14 +var logger = require('./utils/SutisLogSummary');
  15 +
  16 +function checkReq(req) {
  17 + var regex_filetype = /^.*\.(jpg|jpeg|png|mp3|mp4|m4a)$/ig;
  18 + var regex_datetime = /(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s\d{1,2}\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{4}\s[0-2][0-3]:[0-5][0-9]:[0-5][0-9]\sGMT$/g;
  19 +
  20 + // var reqModDate = req.get('If-Modified-Since')
  21 + // logger.error('>>>>>>>>> ' + req.url);
  22 +
  23 + if (req.query.name != null && req.query.type != null && req.query.commandId != null) {
  24 + if (regex_filetype.test(req.query.name) == true) {
  25 + return true;
  26 + }
  27 + }
  28 +
  29 + var resc = '40300';
  30 + var desc = 'Missing or invalid parameter';
  31 + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
  32 + return [resc, desc, prompt];
  33 +
  34 +};
  35 +
  36 +function checkFile(req) {
  37 + var path;
  38 + if (req.query.type === 'audio') {
  39 + path = config.mediaPath.audio + req.query.name;
  40 + } else if (req.query.type === 'video') {
  41 + path = config.mediaPath.video + req.query.name;
  42 + } else if (req.query.type === 'image') {
  43 + path = config.mediaPath.image + req.query.name;
  44 + } else {
  45 + var resc = '40401';
  46 + var desc = 'File not found';
  47 + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';;
  48 + return [resc, desc, prompt];
  49 + }
  50 +
  51 + if (fs.existsSync(path)) {
  52 + try {
  53 + fs.accessSync(path, fs.constants.R_OK);
  54 + var file_name = req.query.name;
  55 + return [true, file_name, path];
  56 + } catch (err) {
  57 + var resc = '40101';
  58 + var desc = 'Access denied';
  59 + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';;
  60 + return [resc, desc, prompt];
  61 + }
  62 + } else {
  63 + var resc = '40401';
  64 + var desc = 'File not found';
  65 + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';;
  66 + return [resc, desc, prompt];
  67 + }
  68 +};
  69 +
  70 +function checkHeader(req, path_file) {
  71 + try {
  72 + // var reqModDate = req.headers['If-Modified-Since'];
  73 + var reqModDate = req.get('If-Modified-Since')
  74 + var stats = fs.statSync(path_file);
  75 + var mtime = stats.mtime;
  76 + var size = stats['size'];
  77 +
  78 + if (reqModDate != null) {
  79 + reqModDate = new Date(reqModDate);
  80 +
  81 + logger.info('[If-Modified-Since]: ' + reqModDate.toUTCString());
  82 + logger.info('[Modified-File] : ' + mtime.toUTCString());
  83 +
  84 + if (reqModDate.toUTCString() == mtime.toUTCString()) {
  85 + logger.info('[Req Header]: If-Modified-Since == Modified File');
  86 + return [304, mtime, size];
  87 + } else {
  88 + logger.info('[Req Header]: If-Modified-Since != Modified File');
  89 + return [200, mtime, size];
  90 + }
  91 + } else {
  92 + logger.info('[Req Header]: No-header: If-Modified-Since');
  93 + logger.info('[Modified-File]: ' + mtime.toUTCString());
  94 + return [200, mtime, size];
  95 + }
  96 + } catch (error) {
  97 + logger.error('[Error check header!!!]');
  98 + return [200, mtime, size];
  99 + }
  100 +};
  101 +
  102 +function writeApplog(req) {
  103 +
  104 + logger.info('[Start getMultimedia Validate Parameter]: ' + 'name: ' + req.query.name + ', type=' + req.query.type + ', commandId=' + req.query.commandId);
  105 + logger.info('[incommigHeader: If-Modified-Since]: ' + req.get('If-Modified-Since'));
  106 + logger.info('[incomming url]: ' + req.protocol + '://' + req.get('host') + req.originalUrl);
  107 +}
  108 +
  109 +app.listen(3000, function() {
  110 + logger.info('=============================');
  111 + logger.info('SRFP-Genesis on port 3000!');
  112 +});
  113 +
  114 +app.get('/multiMedia.json', function(req, res) {
  115 + var sumaryLog;
  116 + var request = checkReq(req);
  117 + var fileReq = checkFile(req);
  118 +
  119 + var session = req.query.commandId;
  120 + var cmd = 'getMultimedia';
  121 + var identiry = 'null';
  122 +
  123 + writeApplog(req);
  124 +
  125 + // [Check Request]
  126 + if (request == true && fileReq[0] == true) {
  127 + var headerReq = checkHeader(req, fileReq[2]);
  128 + var statusCode = headerReq[0];
  129 + var mtime = headerReq[1];
  130 + var size = headerReq[2];
  131 +
  132 + // logger.info('>>> Last-Modified: ' + mtime.toUTCString());
  133 +
  134 + var content_type;
  135 + var regex_image = /^.*\.(jpg|jpeg)$/ig;
  136 + var regex_png = /^.*\.(png)$/ig;
  137 + var regex_mp3 = /^.*\.(mp3)$/ig;
  138 + var regex_mp4 = /^.*\.(mp4)$/ig;
  139 + var regex_m4a = /^.*\.(m4a)$/ig;
  140 +
  141 + if (regex_image.test(checkFile(req)[1])) {
  142 + content_type = 'image/jpeg';
  143 + } else if (regex_png.test(checkFile(req)[1])) {
  144 + content_type = 'image/png';
  145 + } else if (regex_mp3.test(checkFile(req)[1])) {
  146 + content_type = 'audio/mpeg';
  147 + } else if (regex_mp4.test(checkFile(req)[1])) {
  148 + content_type = 'video/mp4';
  149 + } else if (regex_m4a.test(checkFile(req)[1])) {
  150 + content_type = 'audio/m4a';
  151 + }
  152 +
  153 + logger.info('[Path File]: ' + fileReq[2]);
  154 +
  155 + if (statusCode == 200) {
  156 + logger.info('[statusCode]: 200');
  157 + var resc = '20000';
  158 + var desc = 'Success';
  159 +
  160 + logger.info('[resultCode]: ' + resc + ', [developerMessage]: ' + desc);
  161 +
  162 + sumaryLog = logger.summary(session, cmd, identiry);
  163 + sumaryLog.addSuccessBlock('client', cmd, resc, desc);
  164 + stat.recv(cmd, resc);
  165 + stat.retn(cmd, resc);
  166 + detail.write(req, cmd, size, mtime);
  167 +
  168 + res.writeHead(200, {
  169 + "Last-Modified": mtime.toUTCString(),
  170 + "Content-Disposition": 'attachment; filename="' + checkFile(req)[1] + '"',
  171 + "Content-Type": content_type,
  172 + "Content-Length": size
  173 + });
  174 + fs.createReadStream(checkFile(req)[2]).pipe(res);
  175 + // res.write(img);
  176 + // res.end();
  177 +
  178 + }
  179 + // return 304!
  180 + else {
  181 + logger.info('[statusCode]: 304');
  182 + var resc = '20000';
  183 + var desc = 'Success';
  184 +
  185 + logger.info('[resultCode]: ' + resc + ', [developerMessage]: ' + desc);
  186 +
  187 + sumaryLog = logger.summary(session, cmd, identiry);
  188 + sumaryLog.addSuccessBlock('client', cmd, resc, desc);
  189 + stat.recv(cmd, resc);
  190 + stat.retn(cmd, resc);
  191 + detail.write(req, cmd, size, mtime);
  192 +
  193 + res.writeHead(304, {
  194 + // "Content-Disposition": 'attachment; filename="' + checkFile(req)[1] + '"',
  195 + "Content-Type": content_type,
  196 + "Content-Length": size
  197 + });
  198 + res.end();
  199 +
  200 + }
  201 + } else {
  202 + if (request != true) {
  203 + logger.error('[resultCode]: ' + request[0] + ', [developerMessage]: ' + request[1]);
  204 + sumaryLog = logger.summary(session, cmd, identiry);
  205 + sumaryLog.addErrorBlock('client', cmd, request[0], request[1]);
  206 + stat.recv(cmd, request[0]);
  207 + stat.retn(cmd, request[0]);
  208 + detail.write(req, cmd, size, mtime);
  209 +
  210 + res.writeHead(request[0].substring(0, 3), {
  211 + // "Content-Disposition": 'attachment; filename="' + req.query.name + '"',
  212 + "Content-Type": 'application/json'
  213 + });
  214 + res.write(request[2]);
  215 + res.end();
  216 + // res.send();
  217 +
  218 + } else if (fileReq != true) {
  219 +
  220 + logger.error('[resultCode]: ' + fileReq[0] + ', [developerMessage]: ' + fileReq[1]);
  221 + sumaryLog = logger.summary(session, cmd, identiry);
  222 + sumaryLog.addErrorBlock('client', cmd, fileReq[0], fileReq[1]);
  223 + stat.recv(cmd, fileReq[0]);
  224 + stat.retn(cmd, fileReq[0]);
  225 + detail.write(req, cmd, size, mtime);
  226 +
  227 + res.writeHead(fileReq[0].substring(0, 3), {
  228 + // "Content-Disposition": 'attachment; filename="' + req.query.name + '"',
  229 + "Content-Type": 'application/json'
  230 + });
  231 + res.write(fileReq[2]);
  232 + res.end();
  233 + } else {
  234 + var resc = '50000';
  235 + var desc = 'System error';
  236 + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';;
  237 +
  238 + logger.error('[resultCode]: ' + resc + ', [developerMessage]: ' + desc);
  239 + sumaryLog = logger.summary(session, cmd, identiry);
  240 + sumaryLog.addErrorBlock('client', cmd, resc, desc);
  241 + stat.recv(cmd, resc);
  242 + stat.retn(cmd, resc);
  243 + detail.write(req, cmd, null, null);
  244 +
  245 + res.writeHead(500, {
  246 + // "Content-Disposition": 'attachment; filename="' + req.query.name + '"',
  247 + "Content-Type": 'application/json'
  248 + });
  249 + res.write(prompt);
  250 + res.end();
  251 + }
  252 + }
  253 + sumaryLog.flush();
  254 + logger.info('=============================');
  255 +});
  256 +
  257 +app.use(function(req, res, next) {
  258 + writeApplog(req);
  259 + var resc = '40400';
  260 + var desc = 'Unknown URL';
  261 + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
  262 +
  263 + var session = 'null';
  264 + var cmd = 'getMultimedia';
  265 + var identiry = 'null';
  266 +
  267 + logger.error('[resultCode]: ' + resc + ', [developerMessage]: ' + desc);
  268 + sumaryLog = logger.summary(session, cmd, identiry);
  269 + sumaryLog.addErrorBlock('client', cmd, resc, desc);
  270 + stat.recv(cmd, resc);
  271 + stat.retn(cmd, resc);
  272 + detail.write(req, cmd, null, null);
  273 + sumaryLog.flush();
  274 +
  275 + res.status(404).send(prompt);
  276 +
  277 + logger.info('=============================');
  278 +});
0 279 \ No newline at end of file
... ...
sc-structure/srfp_genesis_backup_2.js 0 → 100644
... ... @@ -0,0 +1,316 @@
  1 +var express = require('express');
  2 +var path = require('path');
  3 +var app = express();
  4 +var fs = require('fs');
  5 +// var util = require('util');
  6 +// var crypto = require('crypto');
  7 +// var http = require("http");
  8 +var url = require("url");
  9 +var custom_log = require('./config/logger');
  10 +var config = require('./config/config');
  11 +var stat = require('./utils/SutisStat');
  12 +var alarm = require('./utils/SutisAlarm');
  13 +var detail = require('./utils/SutisDetail');
  14 +var logger = require('./utils/SutisLogSummary');
  15 +
  16 +function checkReq(req) {
  17 + var regex_filetype = /^.*\.(jpg|jpeg|png|mp3|mp4|m4a)$/ig;
  18 + var regex_datetime = /(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s\d{1,2}\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{4}\s([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\sGMT$/g;
  19 + var regex_commandId = /^\d+$/g;
  20 +
  21 + var reqModDate = req.get('If-Modified-Since');
  22 + var errorCase = null;
  23 + // logger.error('>>>>>>>>> ' + req.url);
  24 +
  25 + if (reqModDate != null) {
  26 + // logger.error('Req Header Not null');
  27 + if (!regex_datetime.test(reqModDate)) {
  28 + logger.error('[invalid] date format: ' + reqModDate);
  29 + errorCase = 'req.If-Modified-Since=' + reqModDate;
  30 +
  31 + var resc = '40300';
  32 + var desc = 'Missing or invalid parameter';
  33 + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
  34 + var missingInvalid = errorCase;
  35 + return [resc, desc, prompt, missingInvalid];
  36 + }
  37 + }
  38 +
  39 + if (req.query.name && req.query.type && req.query.commandId) {
  40 + if (regex_filetype.test(req.query.name)) {
  41 + return true;
  42 + }
  43 + }
  44 +
  45 + if (!req.query.name) {
  46 + logger.error('[missing or invalid]: name');
  47 + errorCase = 'req.name=' + req.query.name;
  48 + } else if (!req.query.type) {
  49 + logger.error('[missing or invalid]: type');
  50 + errorCase = 'req.type=' + req.query.type;
  51 + } else if (!req.query.commandId) {
  52 + logger.error('[missing or invalid]: commandId');
  53 + errorCase = 'req.commandId=' + req.query.commandId;
  54 + }
  55 +
  56 + var resc = '40300';
  57 + var desc = 'Missing or invalid parameter';
  58 + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
  59 + var missingInvalid = errorCase;
  60 + return [resc, desc, prompt, missingInvalid];
  61 +
  62 +};
  63 +
  64 +function checkFile(req) {
  65 + var path;
  66 + if (req.query.type === 'audio') {
  67 + path = config.mediaPath.audio + req.query.name;
  68 + } else if (req.query.type === 'video') {
  69 + path = config.mediaPath.video + req.query.name;
  70 + } else if (req.query.type === 'image') {
  71 + path = config.mediaPath.image + req.query.name;
  72 + } else {
  73 + var resc = '40401';
  74 + var desc = 'File not found';
  75 + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
  76 + var missingInvalid = 'req.name=' + req.query.name;
  77 + return [resc, desc, prompt, missingInvalid];
  78 + }
  79 +
  80 + if (fs.existsSync(path)) {
  81 + try {
  82 + fs.accessSync(path, fs.constants.R_OK);
  83 + var file_name = req.query.name;
  84 + return [true, file_name, path];
  85 + } catch (err) {
  86 + var resc = '40101';
  87 + var desc = 'Access denied';
  88 + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
  89 + var missingInvalid = 'req.name=' + req.query.name;
  90 + return [resc, desc, prompt, missingInvalid];
  91 + }
  92 + } else {
  93 + var resc = '40401';
  94 + var desc = 'File not found';
  95 + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
  96 + var missingInvalid = 'req.name=' + req.query.name;
  97 + return [resc, desc, prompt, missingInvalid];
  98 + }
  99 +};
  100 +
  101 +function checkHeader(req, path_file) {
  102 + try {
  103 + // var reqModDate = req.headers['If-Modified-Since'];
  104 + var reqModDate = req.get('If-Modified-Since');
  105 + var stats = fs.statSync(path_file);
  106 + var mtime = stats.mtime;
  107 + var size = stats['size'];
  108 +
  109 + if (reqModDate != null) {
  110 + reqModDate = new Date(reqModDate);
  111 +
  112 + logger.info('[If-Modified-Since]: ' + reqModDate.toUTCString());
  113 + logger.info('[Modified-File] : ' + mtime.toUTCString());
  114 +
  115 + if (reqModDate.toUTCString() == mtime.toUTCString()) {
  116 + logger.info('[Req Header]: If-Modified-Since == Modified File');
  117 + return [304, mtime, size];
  118 + } else {
  119 + logger.info('[Req Header]: If-Modified-Since != Modified File');
  120 + return [200, mtime, size];
  121 + }
  122 + } else {
  123 + logger.info('[Req Header]: No-header: If-Modified-Since');
  124 + logger.info('[Modified-File]: ' + mtime.toUTCString());
  125 + return [200, mtime, size];
  126 + }
  127 + } catch (error) {
  128 + logger.error('[Error check header!!!]');
  129 + return [200, mtime, size];
  130 + }
  131 +};
  132 +
  133 +function writeApplog(req) {
  134 +
  135 + logger.info('[Start getMultimedia Validate Parameter]: ' + 'name: ' + req.query.name + ', type=' + req.query.type + ', commandId=' + req.query.commandId);
  136 + logger.info('[incommigHeader: If-Modified-Since]: ' + req.get('If-Modified-Since'));
  137 + logger.info('[incomming url]: ' + req.protocol + '://' + req.get('host') + req.originalUrl);
  138 +}
  139 +
  140 +app.listen(3000, function () {
  141 + logger.info('=============================');
  142 + logger.info('SRFP-Genesis on port 3000!');
  143 +});
  144 +
  145 +app.get('/multiMedia.json', function (req, res) {
  146 + var sumaryLog;
  147 + var request = checkReq(req);
  148 + var fileReq = checkFile(req);
  149 + // var headerReq = checkHeader(req, fileReq[2]);
  150 +
  151 + var session = req.query.commandId;
  152 + var cmd = 'getMultimedia';
  153 + var identity = '';
  154 + var reqfile = req.query.name;
  155 +
  156 + writeApplog(req);
  157 +
  158 + // [Check Request]
  159 + if (request == true && fileReq[0] == true) {
  160 + var resc = '20000';
  161 + var desc = 'Success';
  162 +
  163 + var headerReq = checkHeader(req, fileReq[2]);
  164 + var statusCode = headerReq[0];
  165 + var mtime = headerReq[1];
  166 + var size = headerReq[2];
  167 +
  168 + sumaryLog = logger.summary(session, cmd, identity, resc, desc);
  169 + sumaryLog.addSuccessBlock('client', cmd, 'null', 'Success');
  170 + sumaryLog.addSuccessBlock('null', 'getFile', resc, desc);
  171 + stat.recv(cmd, resc);
  172 + stat.retn(cmd, resc);
  173 + detail.write(req, cmd, size, mtime.toUTCString());
  174 +
  175 + var content_type;
  176 + var regex_image = /^.*\.(jpg|jpeg)$/ig;
  177 + var regex_png = /^.*\.(png)$/ig;
  178 + var regex_mp3 = /^.*\.(mp3)$/ig;
  179 + var regex_mp4 = /^.*\.(mp4)$/ig;
  180 + var regex_m4a = /^.*\.(m4a)$/ig;
  181 +
  182 + if (regex_image.test(checkFile(req)[1])) {
  183 + content_type = 'image/jpeg';
  184 + } else if (regex_png.test(checkFile(req)[1])) {
  185 + content_type = 'image/png';
  186 + } else if (regex_mp3.test(checkFile(req)[1])) {
  187 + content_type = 'audio/mpeg';
  188 + } else if (regex_mp4.test(checkFile(req)[1])) {
  189 + content_type = 'video/mp4';
  190 + } else if (regex_m4a.test(checkFile(req)[1])) {
  191 + content_type = 'audio/m4a';
  192 + }
  193 +
  194 + logger.info('[Path File]: ' + fileReq[2]);
  195 +
  196 + if (statusCode == 200) {
  197 + logger.info('[statusCode]: 200');
  198 + var resc = '20000';
  199 + var desc = 'Success';
  200 +
  201 + logger.info('[resultCode]: ' + resc + ', [developerMessage]: ' + desc);
  202 +
  203 + res.writeHead(200, {
  204 + "Last-Modified": mtime.toUTCString(),
  205 + "Content-Disposition": 'attachment; filename="' + checkFile(req)[1] + '"',
  206 + "Content-Type": content_type,
  207 + "Content-Length": size
  208 + });
  209 + fs.createReadStream(checkFile(req)[2]).pipe(res);
  210 + // res.write(img);
  211 + // res.end();
  212 +
  213 + }
  214 + // return 304!
  215 + else {
  216 + logger.info('[statusCode]: 304');
  217 + var resc = '20000';
  218 + var desc = 'Success';
  219 +
  220 + logger.info('[resultCode]: ' + resc + ', [developerMessage]: ' + desc);
  221 +
  222 + res.writeHead(304, {
  223 + // "Content-Disposition": 'attachment; filename="' + checkFile(req)[1] + '"',
  224 + "Content-Type": content_type,
  225 + "Content-Length": size
  226 + });
  227 + res.end();
  228 +
  229 + }
  230 + } else if (request == true && fileReq[0] != true) {
  231 + sumaryLog = logger.summary(session, cmd, identity, fileReq[0], fileReq[1]);
  232 + sumaryLog.addSuccessBlock('client', cmd, 'null', 'Success');
  233 + sumaryLog.addErrorBlock('null', 'getFile', fileReq[0], fileReq[1], fileReq[3]);
  234 + stat.recv(cmd, fileReq[0]);
  235 + stat.retn(cmd, fileReq[0]);
  236 + detail.write(req, cmd, null, null);
  237 +
  238 + } else if (request != true) {
  239 + var status_code = request[0].substring(0, 3);
  240 + logger.error('[statusCode]: ' + status_code);
  241 + logger.error('[resultCode]: ' + request[0] + ', [developerMessage]: ' + request[1]);
  242 + sumaryLog = logger.summary(session, cmd, identity, request[0], request[1]);
  243 + sumaryLog.addErrorBlock('client', cmd, request[0], request[1], request[3]);
  244 + stat.recv(cmd, request[0]);
  245 + stat.retn(cmd, request[0]);
  246 + alarm.recv(cmd, request[0]);
  247 + detail.write(req, cmd, null, null);
  248 +
  249 + res.writeHead(status_code, {
  250 + // "Content-Disposition": 'attachment; filename="' + req.query.name + '"',
  251 + "Content-Type": 'application/json'
  252 + });
  253 + res.write(request[2]);
  254 + res.end();
  255 +
  256 +
  257 + } else {
  258 + var resc = '50000';
  259 + var desc = 'System error';
  260 + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';;
  261 +
  262 + logger.error('[statusCode]: 500');
  263 + logger.error('[resultCode]: ' + resc + ', [developerMessage]: ' + desc);
  264 + sumaryLog = logger.summary(session, cmd, identity, resc, desc);
  265 + sumaryLog.addErrorBlock('client', cmd, resc, desc, 'system_error');
  266 + stat.recv(cmd, resc);
  267 + stat.retn(cmd, resc);
  268 + alarm.recv(cmd, resc);
  269 + detail.write(req, cmd, null, null);
  270 +
  271 + res.writeHead(500, {
  272 + // "Content-Disposition": 'attachment; filename="' + req.query.name + '"',
  273 + "Content-Type": 'application/json'
  274 + });
  275 + res.write(prompt);
  276 + res.end();
  277 + }
  278 + sumaryLog.flush();
  279 + logger.info('=============================');
  280 +});
  281 +
  282 +app.use(function (req, res, next) {
  283 + writeApplog(req);
  284 + var resc = '40400';
  285 + var desc = 'Unknown URL';
  286 + var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
  287 +
  288 + var session = 'null';
  289 + var cmd = 'getMultimedia';
  290 + var identity = 'null';
  291 +
  292 + var summaryLog;
  293 +
  294 + custom_log.error('[statusCode]: 404');
  295 + custom_log.error('[resultCode]: ' + resc + ', [developerMessage]: ' + desc);
  296 +
  297 +
  298 + custom_log.statRecv(cmd, resc);
  299 + custom_log.statRetn(cmd, resc);
  300 + custom_log.alarm(cmd, resc);
  301 +
  302 + summaryLog = custom_log.summaryLog(session, cmd, identity, resc, desc);
  303 + summaryLog.addErrorBlock('client', cmd, resc, desc, 'req.url=' + req.url);
  304 + summaryLog.flush();
  305 +
  306 + custom_log.detail(req, cmd, null, null);
  307 +
  308 + res.writeHead(404, {
  309 + "Content-Type": 'application/json'
  310 + });
  311 + res.write(prompt);
  312 + res.end();
  313 +
  314 + // logger.info('=============================');
  315 + custom_log.info('=============================');
  316 +});
... ...
sc-structure/utils/SutisAlarm.js 0 → 100644
... ... @@ -0,0 +1,35 @@
  1 +'use strict';
  2 +var logger = require('./SutisLogSummary');
  3 +var alarm ={};
  4 +var nodeName = 'SRFP-Genesis';
  5 +// var statTbl = require('../config/config');
  6 +
  7 +alarm.recv=function(cmd, errCode){
  8 +
  9 + var alarmName = nodeName;
  10 + if (errCode == 40400) {
  11 + alarmName = alarmName + ' Received Unknown URL Request';
  12 + }else if (errCode == 40300) {
  13 + alarmName = alarmName + ' Received Bad '+ cmd + ' Request';
  14 + }
  15 + else{
  16 + // statName = statName + ' Received ' + cmd + ' err ' + statDesc;
  17 + }
  18 + logger.alarm(alarmName);
  19 +};
  20 +
  21 +// stat.retn=function(cmd, errCode){
  22 +
  23 +// var statName = nodeName;
  24 +// if(errCode == 20000){
  25 +// statName = statName + ' Returned ' + cmd + ' Success';
  26 +// } else if (errCode == 40400) {
  27 +// statName = statName + ' Returned Unknown URL';
  28 +// } else if (errCode == 40300 || errCode == 40401 || errCode == 40101) {
  29 +// statName = statName + ' Returned ' + cmd + ' Error';
  30 +// } else{
  31 +// // statName = statName + ' Received ' + cmd + ' err ' + statDesc;
  32 +// }
  33 +// logger.stat(statName);
  34 +// };
  35 +module.exports = alarm;
... ...
sc-structure/utils/SutisDetail.js 0 → 100644
... ... @@ -0,0 +1,70 @@
  1 +'use strict';
  2 +var logger = require('./SutisLogSummary');
  3 +var detail ={};
  4 +var nodeName = 'SRFP-Genesis';
  5 +var dateFormat = require('dateformat');
  6 +// var dateFMT = 'l';
  7 +var dateFMT = 'yyyymmdd HH:MM:ss.l';
  8 +
  9 +function dateTimeReq(dateFMT) {
  10 + var date = new Date();
  11 + var dateMs = 'l';
  12 + var dateFor = dateFormat(date, dateFMT);
  13 + var dateForms = dateFormat(date, dateMs);
  14 + return [dateFor, dateForms]
  15 +}
  16 +
  17 +function dateTimeRes(dateFMT) {
  18 + // var time = new Date();
  19 + // var dateTime = formatDate(new Date(), dateFMT)
  20 + // return [dateTime,time.getTime()];
  21 +
  22 + var date = new Date();
  23 + var dateMs = 'l';
  24 + var dateFor = dateFormat(date, dateFMT);
  25 + var dateForms = dateFormat(date, dateMs);
  26 + return [dateFor, dateForms]
  27 +}
  28 +
  29 +detail.write=function(req, cmd, size, mtime){
  30 + var requestTime = dateTimeReq(dateFMT);
  31 + var responseTime = dateTimeRes(dateFMT);
  32 + var processTime = parseInt(responseTime[1]-requestTime[1]);
  33 +
  34 + var appDetail = '{'+
  35 + '"' + nodeName + '.Details' + '":{' +
  36 + '"Session":"'+ req.query.commandId +'",' +
  37 + '"Scenario":"'+ cmd +'",' +
  38 + '"Identity":"",' +
  39 + '"InputTimeStamp":"'+ requestTime[0] +'",' +
  40 + '"Input":' + '[' +
  41 + '{'+
  42 + '"Event":"'+ nodeName +'.'+ cmd +'",' +
  43 + '"Type":"REQ",' +
  44 + '"RawData":"' + req.protocol + '://' + req.get('host') + req.originalUrl +'",' +
  45 + '"Data":' + '{'+
  46 + '"Name":"'+ req.query.name + '",' +
  47 + '"Type":"'+ req.query.type + '",' +
  48 + '"CommandId":"'+ req.query.commandId + '"' +
  49 + '}' +
  50 + '}'+
  51 + '],'+
  52 + '"OutputTimeStamp":"'+ responseTime[0] +'",' +
  53 + '"Output":' + '[' +
  54 + '{'+
  55 + '"Event":"'+ nodeName +'.'+ cmd +'",' +
  56 + '"Type":"' + 'RES",' +
  57 + '"RawData":"'+ req.query.name +'",' +
  58 + '"Data":' + '{'+
  59 + '"Size":"'+ size + '",' +
  60 + '"Modified":"'+ mtime + '"' +
  61 + '}' +
  62 + '}'+
  63 + '],'+
  64 + '"ProcessingTime":"'+ processTime +' ms"' +
  65 + '}' +
  66 + '}'
  67 + logger.detail(appDetail);
  68 +};
  69 +
  70 +module.exports = detail;
... ...
sc-structure/utils/SutisLog.js 0 → 100644
... ... @@ -0,0 +1,288 @@
  1 +var fs = require('fs');
  2 +var os = require("os");
  3 +var config = null;
  4 +var logCfg = require('../config/config');
  5 +
  6 +var dateFormat = require('dateformat');
  7 +
  8 +function SutisLog() {
  9 +}
  10 +function getDateTimeFormat(time) {
  11 +
  12 + var years = new Date().getFullYear();
  13 + var months = new Date().getMonth() + 1;
  14 + var day = new Date().getDate();
  15 + var hours = new Date().getHours();
  16 + var mins = new Date().getMinutes();
  17 + var monthFormatted = months < 10 ? "0" + months : months;
  18 + var dayFormatted = day < 10 ? "0" + day : day;
  19 + var hourFormatted = hours < 10 ? "0" + hours : hours;
  20 + var result = "";
  21 + var minFormatted = null;
  22 + var div = null;
  23 +
  24 + if ((mins % time) > 0) {
  25 + minFormatted = ((Math.floor(mins / time)) * time);
  26 + } else {
  27 + minFormatted = mins;
  28 + }
  29 +
  30 + minFormatted = minFormatted < 10 ? "0" + minFormatted : minFormatted;
  31 + result = '' + years + monthFormatted + dayFormatted + hourFormatted + minFormatted;
  32 + return result;
  33 +}
  34 +
  35 +function getDateTimeLogFormat() {
  36 + var dates = new Date();
  37 + var years = dates.getFullYear();
  38 + var months = dates.getMonth() + 1;
  39 + var day = dates.getDate();
  40 + var hours = dates.getHours();
  41 + var minutes = dates.getMinutes();
  42 + var second = new Date().getSeconds();
  43 + var millisecs = dates.getMilliseconds();
  44 + var monthFormatted = months < 10 ? "0" + months : months;
  45 + var dayFormatted = day < 10 ? "0" + day : day;
  46 + var hourFormatted = hours < 10 ? "0" + hours : hours;
  47 + var minFormatted = minutes < 10 ? "0" + minutes : minutes;
  48 + var secFormatted = second < 10 ? "0" + second : second;
  49 + var milliFormatted = null;
  50 +
  51 + if (millisecs < 10) {
  52 + milliFormatted = "00" + millisecs;
  53 + }
  54 + else if (millisecs < 100) {
  55 + milliFormatted = "0" + millisecs;
  56 + }
  57 + else {
  58 + milliFormatted = millisecs;
  59 + }
  60 +
  61 + // return '[' + years + '-' + monthFormatted + '-' + dayFormatted + ' ' + hourFormatted + ':' + minFormatted + ':' + secFormatted + ':' + milliFormatted + ']';
  62 + var detail = years + monthFormatted + dayFormatted + ' ' + hourFormatted + ':' + minFormatted + ':' + secFormatted + '|' + os.hostname() + '|' + logCfg.log.projectName + '|';
  63 + return detail;
  64 +}
  65 +
  66 +function getLogFileName() {
  67 + return os.hostname() + '_' + logCfg.log.projectName + '_' + getDateTimeFormat(logCfg.log.logTime) + '.log';
  68 +}
  69 +function getStatFileName() {
  70 + return os.hostname() + '_' + logCfg.log.projectName + '_' + getDateTimeFormat(logCfg.log.statTime) + '.stat';
  71 +}
  72 +function getAlarmFileName() {
  73 + return os.hostname() + '_' + logCfg.log.projectName + '_' + getDateTimeFormat(logCfg.log.alarmTime) + '.stat';
  74 +}
  75 +function getSummaryFileName() {
  76 + return os.hostname() + '_' + logCfg.log.projectName + '_' + getDateTimeFormat(logCfg.log.summaryTime) + '.summary';
  77 +}
  78 +function getDetailFileName() {
  79 + return os.hostname() + '_' + logCfg.log.projectName + '_' + getDateTimeFormat(logCfg.log.detailTime) + '.detail';
  80 +}
  81 +
  82 +SutisLog.prototype.info = function (logMessage) {
  83 + var stream = fs.createWriteStream(logCfg.log.logPath + '/' + getLogFileName(), { 'flags': 'a' });
  84 + stream.once('open', function (fd) {
  85 + stream.write(getDateTimeLogFormat() + ' - info: ' + logMessage + '\n');
  86 + stream.end();
  87 + });
  88 +};
  89 +
  90 +SutisLog.prototype.error = function (logMessage) {
  91 + var stream = fs.createWriteStream(logCfg.log.logPath + '/' + getLogFileName(), { 'flags': 'a' });
  92 +
  93 + stream.once('open', function (fd) {
  94 + stream.write(getDateTimeLogFormat() + ' - error: ' + logMessage + '\n');
  95 + stream.end();
  96 + });
  97 +};
  98 +// session, cmd, identity, resultCode, resultDescription
  99 +SutisLog.prototype.summaryLog = function (session, cmd, identity, resultCode, resultDescription) {
  100 + var dateFMT = 'yyyymmdd HH:MM:ss';
  101 +
  102 + var stream = fs.createWriteStream(logCfg.log.summaryPath + '/' + getSummaryFileName(), { 'flags': 'a' });
  103 +
  104 + // var test = {
  105 + // x1: function() {
  106 + // stream.once('open', function (fd) {
  107 + // stream.write(getDateTimeLogFormat() + ' - summary: ' + 'txt-+-+-+dhjsdhfjkshfjsd' + '\n');
  108 + // stream.end();
  109 + // });
  110 + // }
  111 + // }
  112 + // return test;
  113 +
  114 + var summaryLog = {
  115 + requestTime: new Date(),
  116 + session: session,
  117 + initInvoke: '', //only equinox platform
  118 + cmd: cmd,
  119 + identity: identity,
  120 + resultCode: resultCode,
  121 + resultDescription: resultDescription,
  122 + blockDetail: [],
  123 +
  124 + addSuccessBlock: function(node, cmd, statusCode, detail){
  125 + this.blockDetail.push('['+ node+'; '+cmd+'(1); ['+ statusCode+'; '+detail+'(1)]]');
  126 + },
  127 +
  128 + addErrorBlock: function(node, cmd, statusCode, detail, errorDetail){
  129 + this.blockDetail.push('['+ node+'; '+cmd+'(1); ['+ statusCode+'; '+detail+'(1)]]');
  130 + },
  131 +
  132 + flush : function(){
  133 + var endTime = new Date();
  134 +
  135 + var txt = dateFormat(this.requestTime, dateFMT) + '|';
  136 + txt += this.session +'|';
  137 + txt += this.initInvoke +'|'
  138 + txt += this.cmd +'|'
  139 + txt += this.identity +'|'
  140 + txt += this.resultCode +'|'
  141 + txt += this.resultDescription +'|'
  142 + txt += this.blockDetail +'|'
  143 + txt += dateFormat(endTime, dateFMT) +'|'
  144 + txt += (endTime.getTime() - this.requestTime.getTime());
  145 +
  146 + stream.once('open', function (fd) {
  147 + stream.write(txt + '\n');
  148 + stream.end();
  149 + });
  150 +
  151 + }
  152 + };
  153 + return summaryLog;
  154 +};
  155 +
  156 +SutisLog.prototype.detail = function (req, cmd, size, mtime) {
  157 + var stream = fs.createWriteStream(logCfg.log.detailPath + '/' + getDetailFileName(), { 'flags': 'a' });
  158 +
  159 + var nodeName = 'SRFP-Genesis';
  160 + var dateFormat = require('dateformat');
  161 + // var dateFMT = 'l';
  162 + var dateFMT = 'yyyymmdd HH:MM:ss.l';
  163 +
  164 + function dateTimeReq(dateFMT) {
  165 + var date = new Date();
  166 + var dateMs = 'l';
  167 + var dateFor = dateFormat(date, dateFMT);
  168 + var dateForms = dateFormat(date, dateMs);
  169 + return [dateFor, dateForms]
  170 + }
  171 +
  172 + function dateTimeRes(dateFMT) {
  173 + // var time = new Date();
  174 + // var dateTime = formatDate(new Date(), dateFMT)
  175 + // return [dateTime,time.getTime()];
  176 +
  177 + var date = new Date();
  178 + var dateMs = 'l';
  179 + var dateFor = dateFormat(date, dateFMT);
  180 + var dateForms = dateFormat(date, dateMs);
  181 + return [dateFor, dateForms]
  182 + }
  183 +
  184 + var requestTime = dateTimeReq(dateFMT);
  185 + var responseTime = dateTimeRes(dateFMT);
  186 + var processTime = parseInt(responseTime[1] - requestTime[1]);
  187 +
  188 + var appDetail = '{' +
  189 + '"' + nodeName + '.Details' + '":{' +
  190 + '"Session":"' + req.query.commandId + '",' +
  191 + '"Scenario":"' + cmd + '",' +
  192 + '"Identity":"",' +
  193 + '"InputTimeStamp":"' + requestTime[0] + '",' +
  194 + '"Input":' + '[' +
  195 + '{' +
  196 + '"Event":"' + nodeName + '.' + cmd + '",' +
  197 + '"Type":"REQ",' +
  198 + '"RawData":"' + req.protocol + '://' + req.get('host') + req.originalUrl + '",' +
  199 + '"Data":' + '{' +
  200 + '"Name":"' + req.query.name + '",' +
  201 + '"Type":"' + req.query.type + '",' +
  202 + '"CommandId":"' + req.query.commandId + '"' +
  203 + '}' +
  204 + '}' +
  205 + '],' +
  206 + '"OutputTimeStamp":"' + responseTime[0] + '",' +
  207 + '"Output":' + '[' +
  208 + '{' +
  209 + '"Event":"' + nodeName + '.' + cmd + '",' +
  210 + '"Type":"' + 'RES",' +
  211 + '"RawData":"' + req.query.name + '",' +
  212 + '"Data":' + '{' +
  213 + '"Size":"' + size + '",' +
  214 + '"Modified":"' + mtime + '"' +
  215 + '}' +
  216 + '}' +
  217 + '],' +
  218 + '"ProcessingTime":"' + processTime + ' ms"' +
  219 + '}' +
  220 + '}';
  221 +
  222 + stream.once('open', function (fd) {
  223 + stream.write(getDateTimeLogFormat() + appDetail + '\n');
  224 + stream.end();
  225 + });
  226 +};
  227 +
  228 +SutisLog.prototype.statRecv = function (cmd, errCode) {
  229 + var nodeName = 'SRFP-Genesis';
  230 + var stream = fs.createWriteStream(logCfg.log.statPath + '/' + getStatFileName(), { 'flags': 'a' });
  231 +
  232 + var statName = nodeName;
  233 + if (errCode == 20000 || errCode == 40401 || errCode == 40101) {
  234 + statName = statName + ' Received Request';
  235 + } else if (errCode == 40400) {
  236 + statName = statName + ' Received Unknown URL Request';
  237 + } else if (errCode == 40300) {
  238 + statName = statName + ' Received Bad ' + cmd + ' Request';
  239 + }
  240 + else {
  241 + statName = statName + ' Received ' + cmd + ' error';
  242 + }
  243 + stream.once('open', function (fd) {
  244 + stream.write(getDateTimeLogFormat() + statName + '\n');
  245 + stream.end();
  246 + });
  247 +};
  248 +
  249 +SutisLog.prototype.statRetn = function (cmd, errCode) {
  250 + var nodeName = 'SRFP-Genesis';
  251 + var stream = fs.createWriteStream(logCfg.log.statPath + '/' + getStatFileName(), { 'flags': 'a' });
  252 +
  253 + var statName = nodeName;
  254 + if (errCode == 20000) {
  255 + statName = statName + ' Returned ' + cmd + ' Success';
  256 + } else if (errCode == 40400) {
  257 + statName = statName + ' Returned Unknown URL';
  258 + } else if (errCode == 40300 || errCode == 40401 || errCode == 40101 || errCode == 50000) {
  259 + statName = statName + ' Returned ' + cmd + ' Error';
  260 + } else {
  261 + // statName = statName + ' Returned ' + cmd + ' err ' + statDesc;
  262 + }
  263 + stream.once('open', function (fd) {
  264 + stream.write(getDateTimeLogFormat() + statName + '\n');
  265 + stream.end();
  266 + });
  267 +};
  268 +
  269 +SutisLog.prototype.alarm = function (cmd, errCode) {
  270 + var nodeName = 'SRFP-Genesis';
  271 + var stream = fs.createWriteStream(logCfg.log.alarmPath + '/' + getAlarmFileName(), { 'flags': 'a' });
  272 +
  273 + var alarmName = nodeName;
  274 + if (errCode == 40400) {
  275 + alarmName = alarmName + ' Received Unknown URL Request';
  276 + } else if (errCode == 40300) {
  277 + alarmName = alarmName + ' Received Bad ' + cmd + ' Request';
  278 + }
  279 + else {
  280 + // alarmName = alarmName + ' Received ' + cmd + ' err ' + statDesc;
  281 + }
  282 + stream.once('open', function (fd) {
  283 + stream.write(getDateTimeLogFormat() + alarmName + '\n');
  284 + stream.end();
  285 + });
  286 +};
  287 +module.exports = SutisLog;
  288 +
... ...
sc-structure/utils/SutisLogSummary.js 0 → 100644
... ... @@ -0,0 +1,75 @@
  1 +var log4js = require('log4js');
  2 +log4js.configure('./config/log4js.json');
  3 +
  4 +var log = log4js.getLogger('serverLog');
  5 +var stat = log4js.getLogger('statLog');
  6 +var alarm = log4js.getLogger('alarmLog');
  7 +var detail = log4js.getLogger('datailLog');
  8 +var summary = log4js.getLogger('summaryLog');
  9 +
  10 +var dateFMT = 'yyyymmdd HH:MM:ss';
  11 +var dateFormat = require('dateformat');
  12 +
  13 +
  14 +var l = {};
  15 +l.debug = function(_log){
  16 + log.debug(_log);
  17 +}
  18 +l.info = function(_log){
  19 + log.info(_log);
  20 +}
  21 +l.warn = function(_log){
  22 + log.warn(_log);
  23 +}
  24 +l.error = function(_log){
  25 + log.error(_log);
  26 +}
  27 +l.stat = function(statName){
  28 + stat.info(statName);
  29 +}
  30 +l.alarm = function(alarmName){
  31 + alarm.info(alarmName);
  32 +}
  33 +l.detail = function(appDetail){
  34 + detail.info(appDetail);
  35 +}
  36 +
  37 +l.summary = function(session, cmd, identity, resultCode, resultDescription){
  38 + var summaryLog = {
  39 + requestTime: new Date(),
  40 + session: session,
  41 + initInvoke: '', //only equinox platform
  42 + cmd: cmd,
  43 + identity: identity,
  44 + resultCode: resultCode,
  45 + resultDescription: resultDescription,
  46 + blockDetail: [],
  47 +
  48 + addSuccessBlock: function(node, cmd, statusCode, detail){
  49 + this.blockDetail.push('['+ node+'; '+cmd+'(1); ['+ statusCode+'; '+detail+'(1)]]');
  50 + },
  51 +
  52 + addErrorBlock: function(node, cmd, statusCode, detail, errorDetail){
  53 + this.blockDetail.push('['+ node+'; '+cmd+'(1); ['+ statusCode+'; '+detail+'(1)]]');
  54 + },
  55 +
  56 + flush : function(){
  57 + var endTime = new Date();
  58 +
  59 + var txt = dateFormat(this.requestTime, dateFMT) + '|';
  60 + txt += this.session +'|';
  61 + txt += this.initInvoke +'|'
  62 + txt += this.cmd +'|'
  63 + txt += this.identity +'|'
  64 + txt += this.resultCode +'|'
  65 + txt += this.resultDescription +'|'
  66 + txt += this.blockDetail +'|'
  67 + txt += dateFormat(endTime, dateFMT) +'|'
  68 + txt += (endTime.getTime() - this.requestTime.getTime());
  69 +
  70 + summary.info(txt);
  71 + }
  72 + };
  73 + return summaryLog;
  74 +}
  75 +module.exports = l;
0 76 \ No newline at end of file
... ...
sc-structure/utils/SutisStat.js 0 → 100644
... ... @@ -0,0 +1,64 @@
  1 +'use strict';
  2 +var logger = require('./SutisLogSummary');
  3 +var stat ={};
  4 +var nodeName = 'SRFP-Genesis';
  5 +// var statTbl = require('../config/config');
  6 +
  7 +// stat.sendReq=function(cmd){
  8 +// var statName = nodeName + ' send ' + cmd + ' req.';
  9 +// logger.stat(statName);
  10 +// };
  11 +
  12 +// stat.sendRes=function(cmd, errCode){
  13 +// var statDesc;
  14 +// if(!errCode){
  15 +// errCode = "50000";
  16 +
  17 +// }else{
  18 +// statDesc = statTbl[errCode];
  19 +// if(!statDesc){
  20 +// errCode = "90000";
  21 +// }
  22 +// }
  23 +// statDesc = statTbl[errCode];
  24 +
  25 +// var statName = nodeName;
  26 +// if(errCode == '20000'){
  27 +// statName = statName + ' send ' + cmd + ' success res '+ errCode +'.';
  28 +// }else{
  29 +// statName = statName + ' send ' + cmd + ' err ' + statDesc.toLowerCase() +' res '+ errCode +'.';
  30 +// }
  31 +// logger.stat(statName);
  32 +// };
  33 +
  34 +stat.recv=function(cmd, errCode){
  35 +
  36 + var statName = nodeName;
  37 + if(errCode == 20000 || errCode == 40401 || errCode == 40101){
  38 + statName = statName + ' Received Request';
  39 + } else if (errCode == 40400) {
  40 + statName = statName + ' Received Unknown URL Request';
  41 + }else if (errCode == 40300) {
  42 + statName = statName + ' Received Bad '+ cmd + ' Request';
  43 + }
  44 + else{
  45 + statName = statName + ' Received ' + cmd + ' error';
  46 + }
  47 + logger.stat(statName);
  48 +};
  49 +
  50 +stat.retn=function(cmd, errCode){
  51 +
  52 + var statName = nodeName;
  53 + if(errCode == 20000){
  54 + statName = statName + ' Returned ' + cmd + ' Success';
  55 + } else if (errCode == 40400) {
  56 + statName = statName + ' Returned Unknown URL';
  57 + } else if (errCode == 40300 || errCode == 40401 || errCode == 40101 || errCode == 50000) {
  58 + statName = statName + ' Returned ' + cmd + ' Error';
  59 + } else{
  60 + // statName = statName + ' Returned ' + cmd + ' err ' + statDesc;
  61 + }
  62 + logger.stat(statName);
  63 +};
  64 +module.exports = stat;
... ...
sc-structure/views/error.jade 0 → 100644
... ... @@ -0,0 +1,5 @@
  1 +extends layout
  2 +
  3 +block content
  4 + h1= message
  5 + h2= error.status
... ...
sc-structure/views/index.jade 0 → 100644
... ... @@ -0,0 +1,5 @@
  1 +extends layout
  2 +
  3 +block content
  4 + h1= title
  5 + p Welcome to #{title}
... ...
sc-structure/views/layout.jade 0 → 100644
... ... @@ -0,0 +1,7 @@
  1 +doctype html
  2 +html
  3 + head
  4 + title= title
  5 + link(rel='stylesheet', href='/stylesheets/style.css')
  6 + body
  7 + block content
... ...
srfp_genesis.js
... ... @@ -1,323 +0,0 @@
1   -var express = require('express');
2   -var path = require('path');
3   -var app = express();
4   -var fs = require('fs');
5   -var logger = require('./config/logger');
6   -var config = require('./config/config');
7   -
8   -function checkReq(req) {
9   - var regex_filetype = /^.*\.(jpg|jpeg|png|mp3|mp4|m4a)$/ig;
10   - var regex_datetime = /(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s\d{1,2}\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{4}\s([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\sGMT$/g;
11   - var regex_commandId = /^\d+$/g;
12   -
13   - var reqModDate = req.get('If-Modified-Since');
14   - var errorCase = null;
15   - // logger.error('>>>>>>>>> ' + req.url);
16   -
17   - if (reqModDate != null) {
18   - // logger.error('Req Header Not null');
19   - if (!regex_datetime.test(reqModDate)) {
20   - logger.error('[invalid] date format: ' + reqModDate);
21   - errorCase = 'req.If-Modified-Since=' + reqModDate;
22   -
23   - var resc = '40300';
24   - var desc = 'Missing or invalid parameter';
25   - var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
26   - var missingInvalid = errorCase;
27   - return [resc, desc, prompt, missingInvalid];
28   - }
29   - }
30   -
31   - if (req.query.name && req.query.type && req.query.commandId) {
32   - if (regex_filetype.test(req.query.name)) {
33   - return true;
34   - }
35   - }
36   -
37   - if (!req.query.name) {
38   - logger.error('[missing or invalid]: name');
39   - errorCase = 'req.name=' + req.query.name;
40   - } else if (!req.query.type) {
41   - logger.error('[missing or invalid]: type');
42   - errorCase = 'req.type=' + req.query.type;
43   - } else if (!req.query.commandId) {
44   - logger.error('[missing or invalid]: commandId');
45   - errorCase = 'req.commandId=' + req.query.commandId;
46   - }
47   -
48   - var resc = '40300';
49   - var desc = 'Missing or invalid parameter';
50   - var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
51   - var missingInvalid = errorCase;
52   - return [resc, desc, prompt, missingInvalid];
53   -
54   -};
55   -
56   -function checkFile(req) {
57   - var path;
58   - if (req.query.type === 'audio') {
59   - path = config.mediaPath.audio + req.query.name;
60   - } else if (req.query.type === 'video') {
61   - path = config.mediaPath.video + req.query.name;
62   - } else if (req.query.type === 'image') {
63   - path = config.mediaPath.image + req.query.name;
64   - } else {
65   - var resc = '40401';
66   - var desc = 'File not found';
67   - var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
68   - var missingInvalid = 'req.name=' + req.query.name;
69   - return [resc, desc, prompt, missingInvalid];
70   - }
71   -
72   - if (fs.existsSync(path)) {
73   - try {
74   - fs.accessSync(path, fs.constants.R_OK);
75   - var file_name = req.query.name;
76   - return [true, file_name, path];
77   - } catch (err) {
78   - var resc = '40101';
79   - var desc = 'Access denied';
80   - var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
81   - var missingInvalid = 'req.name=' + req.query.name;
82   - return [resc, desc, prompt, missingInvalid];
83   - }
84   - } else {
85   - var resc = '40401';
86   - var desc = 'File not found';
87   - var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
88   - var missingInvalid = 'req.name=' + req.query.name;
89   - return [resc, desc, prompt, missingInvalid];
90   - }
91   -};
92   -
93   -function checkHeader(req, path_file) {
94   - try {
95   - // var reqModDate = req.headers['If-Modified-Since'];
96   - var reqModDate = req.get('If-Modified-Since');
97   - var stats = fs.statSync(path_file);
98   - var mtime = stats.mtime;
99   - var size = stats['size'];
100   -
101   - if (reqModDate != null) {
102   - reqModDate = new Date(reqModDate);
103   -
104   - logger.info('[If-Modified-Since]: ' + reqModDate.toUTCString());
105   - logger.info('[Modified-File] : ' + mtime.toUTCString());
106   -
107   - if (reqModDate.toUTCString() == mtime.toUTCString()) {
108   - logger.info('[Req Header]: If-Modified-Since == Modified File');
109   - return [304, mtime, size];
110   - } else {
111   - logger.info('[Req Header]: If-Modified-Since != Modified File');
112   - return [200, mtime, size];
113   - }
114   - } else {
115   - logger.info('[Req Header]: No-header: If-Modified-Since');
116   - logger.info('[Modified-File]: ' + mtime.toUTCString());
117   - return [200, mtime, size];
118   - }
119   - } catch (error) {
120   - logger.error('[Error check header!!!]');
121   - return [200, mtime, size];
122   - }
123   -};
124   -
125   -function writeApplog(req) {
126   -
127   - logger.info('[Start getMultimedia Validate Parameter]: ' + 'name: ' + req.query.name + ', type=' + req.query.type + ', commandId=' + req.query.commandId);
128   - logger.info('[incommigHeader: If-Modified-Since]: ' + req.get('If-Modified-Since'));
129   - logger.info('[incomming url]: ' + req.protocol + '://' + req.get('host') + req.originalUrl);
130   -}
131   -
132   -app.listen(8080, function() {
133   - logger.info('=============================');
134   - logger.info('SRFP-Genesis on port 8080!');
135   -});
136   -
137   -app.get('/multiMedia.json', function(req, res) {
138   - var summaryLog;
139   - var request = checkReq(req);
140   - var fileReq = checkFile(req);
141   - // var headerReq = checkHeader(req, fileReq[2]);
142   -
143   - var session = req.query.commandId;
144   - var cmd = 'getMultimedia';
145   - var identity = '';
146   - var reqfile = req.query.name;
147   -
148   - writeApplog(req);
149   -
150   - // [Check Request]
151   - if (request == true && fileReq[0] == true) {
152   - var resc = '20000';
153   - var desc = 'Success';
154   -
155   - var headerReq = checkHeader(req, fileReq[2]);
156   - var statusCode = headerReq[0];
157   - var mtime = headerReq[1];
158   - var size = headerReq[2];
159   -
160   - summaryLog = logger.summary(session, cmd, identity, resc, desc);
161   - summaryLog.addSuccessBlock('client', cmd, 'null', 'Success');
162   - summaryLog.addSuccessBlock('null', 'getFile', resc, desc);
163   -
164   - logger.statRecv(cmd, resc);
165   - logger.statRetn(cmd, resc);
166   - logger.detail(req, cmd, size, mtime.toUTCString());
167   -
168   - var content_type;
169   - var regex_image = /^.*\.(jpg|jpeg)$/ig;
170   - var regex_png = /^.*\.(png)$/ig;
171   - var regex_mp3 = /^.*\.(mp3)$/ig;
172   - var regex_mp4 = /^.*\.(mp4)$/ig;
173   - var regex_m4a = /^.*\.(m4a)$/ig;
174   -
175   - if (regex_image.test(checkFile(req)[1])) {
176   - content_type = 'image/jpeg';
177   - } else if (regex_png.test(checkFile(req)[1])) {
178   - content_type = 'image/png';
179   - } else if (regex_mp3.test(checkFile(req)[1])) {
180   - content_type = 'audio/mpeg';
181   - } else if (regex_mp4.test(checkFile(req)[1])) {
182   - content_type = 'video/mp4';
183   - } else if (regex_m4a.test(checkFile(req)[1])) {
184   - content_type = 'audio/m4a';
185   - }
186   -
187   - logger.info('[Path File]: ' + fileReq[2]);
188   -
189   - if (statusCode == 200) {
190   - logger.info('[statusCode]: 200');
191   - var resc = '20000';
192   - var desc = 'Success';
193   -
194   - logger.info('[resultCode]: ' + resc + ', [developerMessage]: ' + desc);
195   -
196   - res.writeHead(200, {
197   - "Last-Modified": mtime.toUTCString(),
198   - "Content-Disposition": 'attachment; filename="' + checkFile(req)[1] + '"',
199   - "Content-Type": content_type,
200   - "Content-Length": size
201   - });
202   - fs.createReadStream(checkFile(req)[2]).pipe(res);
203   - // res.write(img);
204   - // res.end();
205   -
206   - }
207   - // return 304!
208   - else {
209   - logger.info('[statusCode]: 304');
210   - var resc = '20000';
211   - var desc = 'Success';
212   -
213   - logger.info('[resultCode]: ' + resc + ', [developerMessage]: ' + desc);
214   -
215   - res.writeHead(304, {
216   - // "Content-Disposition": 'attachment; filename="' + checkFile(req)[1] + '"',
217   - "Content-Type": content_type,
218   - "Content-Length": size
219   - });
220   - res.end();
221   -
222   - }
223   - } else if (request == true && fileReq[0] != true) {
224   - var status_code = fileReq[0].substring(0, 3);
225   -
226   - logger.error('[statusCode]: ' + status_code);
227   - logger.error('[resultCode]: ' + fileReq[0] + ', [developerMessage]: ' + fileReq[1]);
228   -
229   - summaryLog = logger.summary(session, cmd, identity, fileReq[0], fileReq[1]);
230   - summaryLog.addSuccessBlock('client', cmd, 'null', 'Success');
231   - summaryLog.addErrorBlock('null', 'getFile', fileReq[0], fileReq[1], fileReq[3]);
232   -
233   - logger.statRecv(cmd, fileReq[0]);
234   - logger.statRetn(cmd, fileReq[0]);
235   - logger.detail(req, cmd, null, null);
236   -
237   - res.writeHead(status_code, {
238   - // "Content-Disposition": 'attachment; filename="' + req.query.name + '"',
239   - "Content-Type": 'application/json'
240   - });
241   - res.write(fileReq[2]);
242   - res.end();
243   -
244   - } else if (request != true) {
245   - var status_code = request[0].substring(0, 3);
246   -
247   - logger.error('[statusCode]: ' + status_code);
248   - logger.error('[resultCode]: ' + request[0] + ', [developerMessage]: ' + request[1]);
249   -
250   - summaryLog = logger.summary(session, cmd, identity, request[0], request[1]);
251   - summaryLog.addErrorBlock('client', cmd, request[0], request[1], request[3]);
252   -
253   - logger.statRecv(cmd, request[0]);
254   - logger.statRetn(cmd, request[0]);
255   - logger.alarm(cmd, request[0]);
256   - logger.detail(req, cmd, null, null);
257   -
258   - res.writeHead(status_code, {
259   - // "Content-Disposition": 'attachment; filename="' + req.query.name + '"',
260   - "Content-Type": 'application/json'
261   - });
262   - res.write(request[2]);
263   - res.end();
264   -
265   - } else {
266   - var resc = '50000';
267   - var desc = 'System error';
268   - var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';;
269   -
270   - logger.error('[statusCode]: 500');
271   - logger.error('[resultCode]: ' + resc + ', [developerMessage]: ' + desc);
272   -
273   - summaryLog = logger.summary(session, cmd, identity, resc, desc);
274   - summaryLog.addErrorBlock('client', cmd, resc, desc, 'system_error');
275   -
276   - logger.statRecv(cmd, resc);
277   - logger.statRetn(cmd, resc);
278   - logger.alarm(cmd, resc);
279   - logger.detail(req, cmd, null, null);
280   -
281   - res.writeHead(500, {
282   - // "Content-Disposition": 'attachment; filename="' + req.query.name + '"',
283   - "Content-Type": 'application/json'
284   - });
285   - res.write(prompt);
286   - res.end();
287   - }
288   - summaryLog.flush();
289   - logger.info('=============================');
290   -});
291   -
292   -app.use(function(req, res, next) {
293   - writeApplog(req);
294   - var resc = '40400';
295   - var desc = 'Unknown URL';
296   - var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
297   -
298   - var session = 'null';
299   - var cmd = 'getMultimedia';
300   - var identity = 'null';
301   -
302   - logger.error('[statusCode]: 404');
303   - logger.error('[resultCode]: ' + resc + ', [developerMessage]: ' + desc);
304   -
305   - logger.statRecv(cmd, resc);
306   - logger.statRetn(cmd, resc);
307   - logger.alarm(cmd, resc);
308   - logger.detail(req, cmd, null, null);
309   -
310   - summaryLog = logger.summary(session, cmd, identity, resc, desc);
311   - summaryLog.addErrorBlock('client', cmd, resc, desc, 'req.url=' + req.url);
312   - summaryLog.flush();
313   -
314   -
315   - res.writeHead(404, {
316   - // "Content-Disposition": 'attachment; filename="' + req.query.name + '"',
317   - "Content-Type": 'application/json'
318   - });
319   - res.write(prompt);
320   - res.end();
321   -
322   - logger.info('=============================');
323   -});
srfp_genesis_backup.js
... ... @@ -1,278 +0,0 @@
1   -var express = require('express');
2   -var path = require('path');
3   -var app = express();
4   -var fs = require('fs');
5   -var util = require('util');
6   -var crypto = require('crypto');
7   -var http = require("http");
8   -var url = require("url");
9   -//var logger = require('./config/logger');
10   -var config = require('./config/config');
11   -var stat = require('./utils/SutisStat');
12   -var detail = require('./utils/SutisDetail');
13   -//var summaryLog = require('./utils/SutisLogSummary');
14   -var logger = require('./utils/SutisLogSummary');
15   -
16   -function checkReq(req) {
17   - var regex_filetype = /^.*\.(jpg|jpeg|png|mp3|mp4|m4a)$/ig;
18   - var regex_datetime = /(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s\d{1,2}\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{4}\s[0-2][0-3]:[0-5][0-9]:[0-5][0-9]\sGMT$/g;
19   -
20   - // var reqModDate = req.get('If-Modified-Since')
21   - // logger.error('>>>>>>>>> ' + req.url);
22   -
23   - if (req.query.name != null && req.query.type != null && req.query.commandId != null) {
24   - if (regex_filetype.test(req.query.name) == true) {
25   - return true;
26   - }
27   - }
28   -
29   - var resc = '40300';
30   - var desc = 'Missing or invalid parameter';
31   - var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
32   - return [resc, desc, prompt];
33   -
34   -};
35   -
36   -function checkFile(req) {
37   - var path;
38   - if (req.query.type === 'audio') {
39   - path = config.mediaPath.audio + req.query.name;
40   - } else if (req.query.type === 'video') {
41   - path = config.mediaPath.video + req.query.name;
42   - } else if (req.query.type === 'image') {
43   - path = config.mediaPath.image + req.query.name;
44   - } else {
45   - var resc = '40401';
46   - var desc = 'File not found';
47   - var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';;
48   - return [resc, desc, prompt];
49   - }
50   -
51   - if (fs.existsSync(path)) {
52   - try {
53   - fs.accessSync(path, fs.constants.R_OK);
54   - var file_name = req.query.name;
55   - return [true, file_name, path];
56   - } catch (err) {
57   - var resc = '40101';
58   - var desc = 'Access denied';
59   - var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';;
60   - return [resc, desc, prompt];
61   - }
62   - } else {
63   - var resc = '40401';
64   - var desc = 'File not found';
65   - var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';;
66   - return [resc, desc, prompt];
67   - }
68   -};
69   -
70   -function checkHeader(req, path_file) {
71   - try {
72   - // var reqModDate = req.headers['If-Modified-Since'];
73   - var reqModDate = req.get('If-Modified-Since')
74   - var stats = fs.statSync(path_file);
75   - var mtime = stats.mtime;
76   - var size = stats['size'];
77   -
78   - if (reqModDate != null) {
79   - reqModDate = new Date(reqModDate);
80   -
81   - logger.info('[If-Modified-Since]: ' + reqModDate.toUTCString());
82   - logger.info('[Modified-File] : ' + mtime.toUTCString());
83   -
84   - if (reqModDate.toUTCString() == mtime.toUTCString()) {
85   - logger.info('[Req Header]: If-Modified-Since == Modified File');
86   - return [304, mtime, size];
87   - } else {
88   - logger.info('[Req Header]: If-Modified-Since != Modified File');
89   - return [200, mtime, size];
90   - }
91   - } else {
92   - logger.info('[Req Header]: No-header: If-Modified-Since');
93   - logger.info('[Modified-File]: ' + mtime.toUTCString());
94   - return [200, mtime, size];
95   - }
96   - } catch (error) {
97   - logger.error('[Error check header!!!]');
98   - return [200, mtime, size];
99   - }
100   -};
101   -
102   -function writeApplog(req) {
103   -
104   - logger.info('[Start getMultimedia Validate Parameter]: ' + 'name: ' + req.query.name + ', type=' + req.query.type + ', commandId=' + req.query.commandId);
105   - logger.info('[incommigHeader: If-Modified-Since]: ' + req.get('If-Modified-Since'));
106   - logger.info('[incomming url]: ' + req.protocol + '://' + req.get('host') + req.originalUrl);
107   -}
108   -
109   -app.listen(3000, function() {
110   - logger.info('=============================');
111   - logger.info('SRFP-Genesis on port 3000!');
112   -});
113   -
114   -app.get('/multiMedia.json', function(req, res) {
115   - var sumaryLog;
116   - var request = checkReq(req);
117   - var fileReq = checkFile(req);
118   -
119   - var session = req.query.commandId;
120   - var cmd = 'getMultimedia';
121   - var identiry = 'null';
122   -
123   - writeApplog(req);
124   -
125   - // [Check Request]
126   - if (request == true && fileReq[0] == true) {
127   - var headerReq = checkHeader(req, fileReq[2]);
128   - var statusCode = headerReq[0];
129   - var mtime = headerReq[1];
130   - var size = headerReq[2];
131   -
132   - // logger.info('>>> Last-Modified: ' + mtime.toUTCString());
133   -
134   - var content_type;
135   - var regex_image = /^.*\.(jpg|jpeg)$/ig;
136   - var regex_png = /^.*\.(png)$/ig;
137   - var regex_mp3 = /^.*\.(mp3)$/ig;
138   - var regex_mp4 = /^.*\.(mp4)$/ig;
139   - var regex_m4a = /^.*\.(m4a)$/ig;
140   -
141   - if (regex_image.test(checkFile(req)[1])) {
142   - content_type = 'image/jpeg';
143   - } else if (regex_png.test(checkFile(req)[1])) {
144   - content_type = 'image/png';
145   - } else if (regex_mp3.test(checkFile(req)[1])) {
146   - content_type = 'audio/mpeg';
147   - } else if (regex_mp4.test(checkFile(req)[1])) {
148   - content_type = 'video/mp4';
149   - } else if (regex_m4a.test(checkFile(req)[1])) {
150   - content_type = 'audio/m4a';
151   - }
152   -
153   - logger.info('[Path File]: ' + fileReq[2]);
154   -
155   - if (statusCode == 200) {
156   - logger.info('[statusCode]: 200');
157   - var resc = '20000';
158   - var desc = 'Success';
159   -
160   - logger.info('[resultCode]: ' + resc + ', [developerMessage]: ' + desc);
161   -
162   - sumaryLog = logger.summary(session, cmd, identiry);
163   - sumaryLog.addSuccessBlock('client', cmd, resc, desc);
164   - stat.recv(cmd, resc);
165   - stat.retn(cmd, resc);
166   - detail.write(req, cmd, size, mtime);
167   -
168   - res.writeHead(200, {
169   - "Last-Modified": mtime.toUTCString(),
170   - "Content-Disposition": 'attachment; filename="' + checkFile(req)[1] + '"',
171   - "Content-Type": content_type,
172   - "Content-Length": size
173   - });
174   - fs.createReadStream(checkFile(req)[2]).pipe(res);
175   - // res.write(img);
176   - // res.end();
177   -
178   - }
179   - // return 304!
180   - else {
181   - logger.info('[statusCode]: 304');
182   - var resc = '20000';
183   - var desc = 'Success';
184   -
185   - logger.info('[resultCode]: ' + resc + ', [developerMessage]: ' + desc);
186   -
187   - sumaryLog = logger.summary(session, cmd, identiry);
188   - sumaryLog.addSuccessBlock('client', cmd, resc, desc);
189   - stat.recv(cmd, resc);
190   - stat.retn(cmd, resc);
191   - detail.write(req, cmd, size, mtime);
192   -
193   - res.writeHead(304, {
194   - // "Content-Disposition": 'attachment; filename="' + checkFile(req)[1] + '"',
195   - "Content-Type": content_type,
196   - "Content-Length": size
197   - });
198   - res.end();
199   -
200   - }
201   - } else {
202   - if (request != true) {
203   - logger.error('[resultCode]: ' + request[0] + ', [developerMessage]: ' + request[1]);
204   - sumaryLog = logger.summary(session, cmd, identiry);
205   - sumaryLog.addErrorBlock('client', cmd, request[0], request[1]);
206   - stat.recv(cmd, request[0]);
207   - stat.retn(cmd, request[0]);
208   - detail.write(req, cmd, size, mtime);
209   -
210   - res.writeHead(request[0].substring(0, 3), {
211   - // "Content-Disposition": 'attachment; filename="' + req.query.name + '"',
212   - "Content-Type": 'application/json'
213   - });
214   - res.write(request[2]);
215   - res.end();
216   - // res.send();
217   -
218   - } else if (fileReq != true) {
219   -
220   - logger.error('[resultCode]: ' + fileReq[0] + ', [developerMessage]: ' + fileReq[1]);
221   - sumaryLog = logger.summary(session, cmd, identiry);
222   - sumaryLog.addErrorBlock('client', cmd, fileReq[0], fileReq[1]);
223   - stat.recv(cmd, fileReq[0]);
224   - stat.retn(cmd, fileReq[0]);
225   - detail.write(req, cmd, size, mtime);
226   -
227   - res.writeHead(fileReq[0].substring(0, 3), {
228   - // "Content-Disposition": 'attachment; filename="' + req.query.name + '"',
229   - "Content-Type": 'application/json'
230   - });
231   - res.write(fileReq[2]);
232   - res.end();
233   - } else {
234   - var resc = '50000';
235   - var desc = 'System error';
236   - var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';;
237   -
238   - logger.error('[resultCode]: ' + resc + ', [developerMessage]: ' + desc);
239   - sumaryLog = logger.summary(session, cmd, identiry);
240   - sumaryLog.addErrorBlock('client', cmd, resc, desc);
241   - stat.recv(cmd, resc);
242   - stat.retn(cmd, resc);
243   - detail.write(req, cmd, null, null);
244   -
245   - res.writeHead(500, {
246   - // "Content-Disposition": 'attachment; filename="' + req.query.name + '"',
247   - "Content-Type": 'application/json'
248   - });
249   - res.write(prompt);
250   - res.end();
251   - }
252   - }
253   - sumaryLog.flush();
254   - logger.info('=============================');
255   -});
256   -
257   -app.use(function(req, res, next) {
258   - writeApplog(req);
259   - var resc = '40400';
260   - var desc = 'Unknown URL';
261   - var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
262   -
263   - var session = 'null';
264   - var cmd = 'getMultimedia';
265   - var identiry = 'null';
266   -
267   - logger.error('[resultCode]: ' + resc + ', [developerMessage]: ' + desc);
268   - sumaryLog = logger.summary(session, cmd, identiry);
269   - sumaryLog.addErrorBlock('client', cmd, resc, desc);
270   - stat.recv(cmd, resc);
271   - stat.retn(cmd, resc);
272   - detail.write(req, cmd, null, null);
273   - sumaryLog.flush();
274   -
275   - res.status(404).send(prompt);
276   -
277   - logger.info('=============================');
278   -});
279 0 \ No newline at end of file
srfp_genesis_backup_2.js
... ... @@ -1,316 +0,0 @@
1   -var express = require('express');
2   -var path = require('path');
3   -var app = express();
4   -var fs = require('fs');
5   -// var util = require('util');
6   -// var crypto = require('crypto');
7   -// var http = require("http");
8   -var url = require("url");
9   -var custom_log = require('./config/logger');
10   -var config = require('./config/config');
11   -var stat = require('./utils/SutisStat');
12   -var alarm = require('./utils/SutisAlarm');
13   -var detail = require('./utils/SutisDetail');
14   -var logger = require('./utils/SutisLogSummary');
15   -
16   -function checkReq(req) {
17   - var regex_filetype = /^.*\.(jpg|jpeg|png|mp3|mp4|m4a)$/ig;
18   - var regex_datetime = /(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s\d{1,2}\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{4}\s([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\sGMT$/g;
19   - var regex_commandId = /^\d+$/g;
20   -
21   - var reqModDate = req.get('If-Modified-Since');
22   - var errorCase = null;
23   - // logger.error('>>>>>>>>> ' + req.url);
24   -
25   - if (reqModDate != null) {
26   - // logger.error('Req Header Not null');
27   - if (!regex_datetime.test(reqModDate)) {
28   - logger.error('[invalid] date format: ' + reqModDate);
29   - errorCase = 'req.If-Modified-Since=' + reqModDate;
30   -
31   - var resc = '40300';
32   - var desc = 'Missing or invalid parameter';
33   - var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
34   - var missingInvalid = errorCase;
35   - return [resc, desc, prompt, missingInvalid];
36   - }
37   - }
38   -
39   - if (req.query.name && req.query.type && req.query.commandId) {
40   - if (regex_filetype.test(req.query.name)) {
41   - return true;
42   - }
43   - }
44   -
45   - if (!req.query.name) {
46   - logger.error('[missing or invalid]: name');
47   - errorCase = 'req.name=' + req.query.name;
48   - } else if (!req.query.type) {
49   - logger.error('[missing or invalid]: type');
50   - errorCase = 'req.type=' + req.query.type;
51   - } else if (!req.query.commandId) {
52   - logger.error('[missing or invalid]: commandId');
53   - errorCase = 'req.commandId=' + req.query.commandId;
54   - }
55   -
56   - var resc = '40300';
57   - var desc = 'Missing or invalid parameter';
58   - var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
59   - var missingInvalid = errorCase;
60   - return [resc, desc, prompt, missingInvalid];
61   -
62   -};
63   -
64   -function checkFile(req) {
65   - var path;
66   - if (req.query.type === 'audio') {
67   - path = config.mediaPath.audio + req.query.name;
68   - } else if (req.query.type === 'video') {
69   - path = config.mediaPath.video + req.query.name;
70   - } else if (req.query.type === 'image') {
71   - path = config.mediaPath.image + req.query.name;
72   - } else {
73   - var resc = '40401';
74   - var desc = 'File not found';
75   - var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
76   - var missingInvalid = 'req.name=' + req.query.name;
77   - return [resc, desc, prompt, missingInvalid];
78   - }
79   -
80   - if (fs.existsSync(path)) {
81   - try {
82   - fs.accessSync(path, fs.constants.R_OK);
83   - var file_name = req.query.name;
84   - return [true, file_name, path];
85   - } catch (err) {
86   - var resc = '40101';
87   - var desc = 'Access denied';
88   - var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
89   - var missingInvalid = 'req.name=' + req.query.name;
90   - return [resc, desc, prompt, missingInvalid];
91   - }
92   - } else {
93   - var resc = '40401';
94   - var desc = 'File not found';
95   - var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
96   - var missingInvalid = 'req.name=' + req.query.name;
97   - return [resc, desc, prompt, missingInvalid];
98   - }
99   -};
100   -
101   -function checkHeader(req, path_file) {
102   - try {
103   - // var reqModDate = req.headers['If-Modified-Since'];
104   - var reqModDate = req.get('If-Modified-Since');
105   - var stats = fs.statSync(path_file);
106   - var mtime = stats.mtime;
107   - var size = stats['size'];
108   -
109   - if (reqModDate != null) {
110   - reqModDate = new Date(reqModDate);
111   -
112   - logger.info('[If-Modified-Since]: ' + reqModDate.toUTCString());
113   - logger.info('[Modified-File] : ' + mtime.toUTCString());
114   -
115   - if (reqModDate.toUTCString() == mtime.toUTCString()) {
116   - logger.info('[Req Header]: If-Modified-Since == Modified File');
117   - return [304, mtime, size];
118   - } else {
119   - logger.info('[Req Header]: If-Modified-Since != Modified File');
120   - return [200, mtime, size];
121   - }
122   - } else {
123   - logger.info('[Req Header]: No-header: If-Modified-Since');
124   - logger.info('[Modified-File]: ' + mtime.toUTCString());
125   - return [200, mtime, size];
126   - }
127   - } catch (error) {
128   - logger.error('[Error check header!!!]');
129   - return [200, mtime, size];
130   - }
131   -};
132   -
133   -function writeApplog(req) {
134   -
135   - logger.info('[Start getMultimedia Validate Parameter]: ' + 'name: ' + req.query.name + ', type=' + req.query.type + ', commandId=' + req.query.commandId);
136   - logger.info('[incommigHeader: If-Modified-Since]: ' + req.get('If-Modified-Since'));
137   - logger.info('[incomming url]: ' + req.protocol + '://' + req.get('host') + req.originalUrl);
138   -}
139   -
140   -app.listen(3000, function () {
141   - logger.info('=============================');
142   - logger.info('SRFP-Genesis on port 3000!');
143   -});
144   -
145   -app.get('/multiMedia.json', function (req, res) {
146   - var sumaryLog;
147   - var request = checkReq(req);
148   - var fileReq = checkFile(req);
149   - // var headerReq = checkHeader(req, fileReq[2]);
150   -
151   - var session = req.query.commandId;
152   - var cmd = 'getMultimedia';
153   - var identity = '';
154   - var reqfile = req.query.name;
155   -
156   - writeApplog(req);
157   -
158   - // [Check Request]
159   - if (request == true && fileReq[0] == true) {
160   - var resc = '20000';
161   - var desc = 'Success';
162   -
163   - var headerReq = checkHeader(req, fileReq[2]);
164   - var statusCode = headerReq[0];
165   - var mtime = headerReq[1];
166   - var size = headerReq[2];
167   -
168   - sumaryLog = logger.summary(session, cmd, identity, resc, desc);
169   - sumaryLog.addSuccessBlock('client', cmd, 'null', 'Success');
170   - sumaryLog.addSuccessBlock('null', 'getFile', resc, desc);
171   - stat.recv(cmd, resc);
172   - stat.retn(cmd, resc);
173   - detail.write(req, cmd, size, mtime.toUTCString());
174   -
175   - var content_type;
176   - var regex_image = /^.*\.(jpg|jpeg)$/ig;
177   - var regex_png = /^.*\.(png)$/ig;
178   - var regex_mp3 = /^.*\.(mp3)$/ig;
179   - var regex_mp4 = /^.*\.(mp4)$/ig;
180   - var regex_m4a = /^.*\.(m4a)$/ig;
181   -
182   - if (regex_image.test(checkFile(req)[1])) {
183   - content_type = 'image/jpeg';
184   - } else if (regex_png.test(checkFile(req)[1])) {
185   - content_type = 'image/png';
186   - } else if (regex_mp3.test(checkFile(req)[1])) {
187   - content_type = 'audio/mpeg';
188   - } else if (regex_mp4.test(checkFile(req)[1])) {
189   - content_type = 'video/mp4';
190   - } else if (regex_m4a.test(checkFile(req)[1])) {
191   - content_type = 'audio/m4a';
192   - }
193   -
194   - logger.info('[Path File]: ' + fileReq[2]);
195   -
196   - if (statusCode == 200) {
197   - logger.info('[statusCode]: 200');
198   - var resc = '20000';
199   - var desc = 'Success';
200   -
201   - logger.info('[resultCode]: ' + resc + ', [developerMessage]: ' + desc);
202   -
203   - res.writeHead(200, {
204   - "Last-Modified": mtime.toUTCString(),
205   - "Content-Disposition": 'attachment; filename="' + checkFile(req)[1] + '"',
206   - "Content-Type": content_type,
207   - "Content-Length": size
208   - });
209   - fs.createReadStream(checkFile(req)[2]).pipe(res);
210   - // res.write(img);
211   - // res.end();
212   -
213   - }
214   - // return 304!
215   - else {
216   - logger.info('[statusCode]: 304');
217   - var resc = '20000';
218   - var desc = 'Success';
219   -
220   - logger.info('[resultCode]: ' + resc + ', [developerMessage]: ' + desc);
221   -
222   - res.writeHead(304, {
223   - // "Content-Disposition": 'attachment; filename="' + checkFile(req)[1] + '"',
224   - "Content-Type": content_type,
225   - "Content-Length": size
226   - });
227   - res.end();
228   -
229   - }
230   - } else if (request == true && fileReq[0] != true) {
231   - sumaryLog = logger.summary(session, cmd, identity, fileReq[0], fileReq[1]);
232   - sumaryLog.addSuccessBlock('client', cmd, 'null', 'Success');
233   - sumaryLog.addErrorBlock('null', 'getFile', fileReq[0], fileReq[1], fileReq[3]);
234   - stat.recv(cmd, fileReq[0]);
235   - stat.retn(cmd, fileReq[0]);
236   - detail.write(req, cmd, null, null);
237   -
238   - } else if (request != true) {
239   - var status_code = request[0].substring(0, 3);
240   - logger.error('[statusCode]: ' + status_code);
241   - logger.error('[resultCode]: ' + request[0] + ', [developerMessage]: ' + request[1]);
242   - sumaryLog = logger.summary(session, cmd, identity, request[0], request[1]);
243   - sumaryLog.addErrorBlock('client', cmd, request[0], request[1], request[3]);
244   - stat.recv(cmd, request[0]);
245   - stat.retn(cmd, request[0]);
246   - alarm.recv(cmd, request[0]);
247   - detail.write(req, cmd, null, null);
248   -
249   - res.writeHead(status_code, {
250   - // "Content-Disposition": 'attachment; filename="' + req.query.name + '"',
251   - "Content-Type": 'application/json'
252   - });
253   - res.write(request[2]);
254   - res.end();
255   -
256   -
257   - } else {
258   - var resc = '50000';
259   - var desc = 'System error';
260   - var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';;
261   -
262   - logger.error('[statusCode]: 500');
263   - logger.error('[resultCode]: ' + resc + ', [developerMessage]: ' + desc);
264   - sumaryLog = logger.summary(session, cmd, identity, resc, desc);
265   - sumaryLog.addErrorBlock('client', cmd, resc, desc, 'system_error');
266   - stat.recv(cmd, resc);
267   - stat.retn(cmd, resc);
268   - alarm.recv(cmd, resc);
269   - detail.write(req, cmd, null, null);
270   -
271   - res.writeHead(500, {
272   - // "Content-Disposition": 'attachment; filename="' + req.query.name + '"',
273   - "Content-Type": 'application/json'
274   - });
275   - res.write(prompt);
276   - res.end();
277   - }
278   - sumaryLog.flush();
279   - logger.info('=============================');
280   -});
281   -
282   -app.use(function (req, res, next) {
283   - writeApplog(req);
284   - var resc = '40400';
285   - var desc = 'Unknown URL';
286   - var prompt = '{"prompt":{"resultCode":"' + resc + '","developerMessage":"' + desc + '"}}';
287   -
288   - var session = 'null';
289   - var cmd = 'getMultimedia';
290   - var identity = 'null';
291   -
292   - var summaryLog;
293   -
294   - custom_log.error('[statusCode]: 404');
295   - custom_log.error('[resultCode]: ' + resc + ', [developerMessage]: ' + desc);
296   -
297   -
298   - custom_log.statRecv(cmd, resc);
299   - custom_log.statRetn(cmd, resc);
300   - custom_log.alarm(cmd, resc);
301   -
302   - summaryLog = custom_log.summaryLog(session, cmd, identity, resc, desc);
303   - summaryLog.addErrorBlock('client', cmd, resc, desc, 'req.url=' + req.url);
304   - summaryLog.flush();
305   -
306   - custom_log.detail(req, cmd, null, null);
307   -
308   - res.writeHead(404, {
309   - "Content-Type": 'application/json'
310   - });
311   - res.write(prompt);
312   - res.end();
313   -
314   - // logger.info('=============================');
315   - custom_log.info('=============================');
316   -});
utils/SutisAlarm.js
... ... @@ -1,35 +0,0 @@
1   -'use strict';
2   -var logger = require('./SutisLogSummary');
3   -var alarm ={};
4   -var nodeName = 'SRFP-Genesis';
5   -// var statTbl = require('../config/config');
6   -
7   -alarm.recv=function(cmd, errCode){
8   -
9   - var alarmName = nodeName;
10   - if (errCode == 40400) {
11   - alarmName = alarmName + ' Received Unknown URL Request';
12   - }else if (errCode == 40300) {
13   - alarmName = alarmName + ' Received Bad '+ cmd + ' Request';
14   - }
15   - else{
16   - // statName = statName + ' Received ' + cmd + ' err ' + statDesc;
17   - }
18   - logger.alarm(alarmName);
19   -};
20   -
21   -// stat.retn=function(cmd, errCode){
22   -
23   -// var statName = nodeName;
24   -// if(errCode == 20000){
25   -// statName = statName + ' Returned ' + cmd + ' Success';
26   -// } else if (errCode == 40400) {
27   -// statName = statName + ' Returned Unknown URL';
28   -// } else if (errCode == 40300 || errCode == 40401 || errCode == 40101) {
29   -// statName = statName + ' Returned ' + cmd + ' Error';
30   -// } else{
31   -// // statName = statName + ' Received ' + cmd + ' err ' + statDesc;
32   -// }
33   -// logger.stat(statName);
34   -// };
35   -module.exports = alarm;
utils/SutisDetail.js
... ... @@ -1,70 +0,0 @@
1   -'use strict';
2   -var logger = require('./SutisLogSummary');
3   -var detail ={};
4   -var nodeName = 'SRFP-Genesis';
5   -var dateFormat = require('dateformat');
6   -// var dateFMT = 'l';
7   -var dateFMT = 'yyyymmdd HH:MM:ss.l';
8   -
9   -function dateTimeReq(dateFMT) {
10   - var date = new Date();
11   - var dateMs = 'l';
12   - var dateFor = dateFormat(date, dateFMT);
13   - var dateForms = dateFormat(date, dateMs);
14   - return [dateFor, dateForms]
15   -}
16   -
17   -function dateTimeRes(dateFMT) {
18   - // var time = new Date();
19   - // var dateTime = formatDate(new Date(), dateFMT)
20   - // return [dateTime,time.getTime()];
21   -
22   - var date = new Date();
23   - var dateMs = 'l';
24   - var dateFor = dateFormat(date, dateFMT);
25   - var dateForms = dateFormat(date, dateMs);
26   - return [dateFor, dateForms]
27   -}
28   -
29   -detail.write=function(req, cmd, size, mtime){
30   - var requestTime = dateTimeReq(dateFMT);
31   - var responseTime = dateTimeRes(dateFMT);
32   - var processTime = parseInt(responseTime[1]-requestTime[1]);
33   -
34   - var appDetail = '{'+
35   - '"' + nodeName + '.Details' + '":{' +
36   - '"Session":"'+ req.query.commandId +'",' +
37   - '"Scenario":"'+ cmd +'",' +
38   - '"Identity":"",' +
39   - '"InputTimeStamp":"'+ requestTime[0] +'",' +
40   - '"Input":' + '[' +
41   - '{'+
42   - '"Event":"'+ nodeName +'.'+ cmd +'",' +
43   - '"Type":"REQ",' +
44   - '"RawData":"' + req.protocol + '://' + req.get('host') + req.originalUrl +'",' +
45   - '"Data":' + '{'+
46   - '"Name":"'+ req.query.name + '",' +
47   - '"Type":"'+ req.query.type + '",' +
48   - '"CommandId":"'+ req.query.commandId + '"' +
49   - '}' +
50   - '}'+
51   - '],'+
52   - '"OutputTimeStamp":"'+ responseTime[0] +'",' +
53   - '"Output":' + '[' +
54   - '{'+
55   - '"Event":"'+ nodeName +'.'+ cmd +'",' +
56   - '"Type":"' + 'RES",' +
57   - '"RawData":"'+ req.query.name +'",' +
58   - '"Data":' + '{'+
59   - '"Size":"'+ size + '",' +
60   - '"Modified":"'+ mtime + '"' +
61   - '}' +
62   - '}'+
63   - '],'+
64   - '"ProcessingTime":"'+ processTime +' ms"' +
65   - '}' +
66   - '}'
67   - logger.detail(appDetail);
68   -};
69   -
70   -module.exports = detail;
utils/SutisLog.js
... ... @@ -1,288 +0,0 @@
1   -var fs = require('fs');
2   -var os = require("os");
3   -var config = null;
4   -var logCfg = require('../config/config');
5   -
6   -var dateFormat = require('dateformat');
7   -
8   -function SutisLog() {
9   -}
10   -function getDateTimeFormat(time) {
11   -
12   - var years = new Date().getFullYear();
13   - var months = new Date().getMonth() + 1;
14   - var day = new Date().getDate();
15   - var hours = new Date().getHours();
16   - var mins = new Date().getMinutes();
17   - var monthFormatted = months < 10 ? "0" + months : months;
18   - var dayFormatted = day < 10 ? "0" + day : day;
19   - var hourFormatted = hours < 10 ? "0" + hours : hours;
20   - var result = "";
21   - var minFormatted = null;
22   - var div = null;
23   -
24   - if ((mins % time) > 0) {
25   - minFormatted = ((Math.floor(mins / time)) * time);
26   - } else {
27   - minFormatted = mins;
28   - }
29   -
30   - minFormatted = minFormatted < 10 ? "0" + minFormatted : minFormatted;
31   - result = '' + years + monthFormatted + dayFormatted + hourFormatted + minFormatted;
32   - return result;
33   -}
34   -
35   -function getDateTimeLogFormat() {
36   - var dates = new Date();
37   - var years = dates.getFullYear();
38   - var months = dates.getMonth() + 1;
39   - var day = dates.getDate();
40   - var hours = dates.getHours();
41   - var minutes = dates.getMinutes();
42   - var second = new Date().getSeconds();
43   - var millisecs = dates.getMilliseconds();
44   - var monthFormatted = months < 10 ? "0" + months : months;
45   - var dayFormatted = day < 10 ? "0" + day : day;
46   - var hourFormatted = hours < 10 ? "0" + hours : hours;
47   - var minFormatted = minutes < 10 ? "0" + minutes : minutes;
48   - var secFormatted = second < 10 ? "0" + second : second;
49   - var milliFormatted = null;
50   -
51   - if (millisecs < 10) {
52   - milliFormatted = "00" + millisecs;
53   - }
54   - else if (millisecs < 100) {
55   - milliFormatted = "0" + millisecs;
56   - }
57   - else {
58   - milliFormatted = millisecs;
59   - }
60   -
61   - // return '[' + years + '-' + monthFormatted + '-' + dayFormatted + ' ' + hourFormatted + ':' + minFormatted + ':' + secFormatted + ':' + milliFormatted + ']';
62   - var detail = years + monthFormatted + dayFormatted + ' ' + hourFormatted + ':' + minFormatted + ':' + secFormatted + '|' + os.hostname() + '|' + logCfg.log.projectName + '|';
63   - return detail;
64   -}
65   -
66   -function getLogFileName() {
67   - return os.hostname() + '_' + logCfg.log.projectName + '_' + getDateTimeFormat(logCfg.log.logTime) + '.log';
68   -}
69   -function getStatFileName() {
70   - return os.hostname() + '_' + logCfg.log.projectName + '_' + getDateTimeFormat(logCfg.log.statTime) + '.stat';
71   -}
72   -function getAlarmFileName() {
73   - return os.hostname() + '_' + logCfg.log.projectName + '_' + getDateTimeFormat(logCfg.log.alarmTime) + '.stat';
74   -}
75   -function getSummaryFileName() {
76   - return os.hostname() + '_' + logCfg.log.projectName + '_' + getDateTimeFormat(logCfg.log.summaryTime) + '.summary';
77   -}
78   -function getDetailFileName() {
79   - return os.hostname() + '_' + logCfg.log.projectName + '_' + getDateTimeFormat(logCfg.log.detailTime) + '.detail';
80   -}
81   -
82   -SutisLog.prototype.info = function (logMessage) {
83   - var stream = fs.createWriteStream(logCfg.log.logPath + '/' + getLogFileName(), { 'flags': 'a' });
84   - stream.once('open', function (fd) {
85   - stream.write(getDateTimeLogFormat() + ' - info: ' + logMessage + '\n');
86   - stream.end();
87   - });
88   -};
89   -
90   -SutisLog.prototype.error = function (logMessage) {
91   - var stream = fs.createWriteStream(logCfg.log.logPath + '/' + getLogFileName(), { 'flags': 'a' });
92   -
93   - stream.once('open', function (fd) {
94   - stream.write(getDateTimeLogFormat() + ' - error: ' + logMessage + '\n');
95   - stream.end();
96   - });
97   -};
98   -// session, cmd, identity, resultCode, resultDescription
99   -SutisLog.prototype.summaryLog = function (session, cmd, identity, resultCode, resultDescription) {
100   - var dateFMT = 'yyyymmdd HH:MM:ss';
101   -
102   - var stream = fs.createWriteStream(logCfg.log.summaryPath + '/' + getSummaryFileName(), { 'flags': 'a' });
103   -
104   - // var test = {
105   - // x1: function() {
106   - // stream.once('open', function (fd) {
107   - // stream.write(getDateTimeLogFormat() + ' - summary: ' + 'txt-+-+-+dhjsdhfjkshfjsd' + '\n');
108   - // stream.end();
109   - // });
110   - // }
111   - // }
112   - // return test;
113   -
114   - var summaryLog = {
115   - requestTime: new Date(),
116   - session: session,
117   - initInvoke: '', //only equinox platform
118   - cmd: cmd,
119   - identity: identity,
120   - resultCode: resultCode,
121   - resultDescription: resultDescription,
122   - blockDetail: [],
123   -
124   - addSuccessBlock: function(node, cmd, statusCode, detail){
125   - this.blockDetail.push('['+ node+'; '+cmd+'(1); ['+ statusCode+'; '+detail+'(1)]]');
126   - },
127   -
128   - addErrorBlock: function(node, cmd, statusCode, detail, errorDetail){
129   - this.blockDetail.push('['+ node+'; '+cmd+'(1); ['+ statusCode+'; '+detail+'(1)]]');
130   - },
131   -
132   - flush : function(){
133   - var endTime = new Date();
134   -
135   - var txt = dateFormat(this.requestTime, dateFMT) + '|';
136   - txt += this.session +'|';
137   - txt += this.initInvoke +'|'
138   - txt += this.cmd +'|'
139   - txt += this.identity +'|'
140   - txt += this.resultCode +'|'
141   - txt += this.resultDescription +'|'
142   - txt += this.blockDetail +'|'
143   - txt += dateFormat(endTime, dateFMT) +'|'
144   - txt += (endTime.getTime() - this.requestTime.getTime());
145   -
146   - stream.once('open', function (fd) {
147   - stream.write(txt + '\n');
148   - stream.end();
149   - });
150   -
151   - }
152   - };
153   - return summaryLog;
154   -};
155   -
156   -SutisLog.prototype.detail = function (req, cmd, size, mtime) {
157   - var stream = fs.createWriteStream(logCfg.log.detailPath + '/' + getDetailFileName(), { 'flags': 'a' });
158   -
159   - var nodeName = 'SRFP-Genesis';
160   - var dateFormat = require('dateformat');
161   - // var dateFMT = 'l';
162   - var dateFMT = 'yyyymmdd HH:MM:ss.l';
163   -
164   - function dateTimeReq(dateFMT) {
165   - var date = new Date();
166   - var dateMs = 'l';
167   - var dateFor = dateFormat(date, dateFMT);
168   - var dateForms = dateFormat(date, dateMs);
169   - return [dateFor, dateForms]
170   - }
171   -
172   - function dateTimeRes(dateFMT) {
173   - // var time = new Date();
174   - // var dateTime = formatDate(new Date(), dateFMT)
175   - // return [dateTime,time.getTime()];
176   -
177   - var date = new Date();
178   - var dateMs = 'l';
179   - var dateFor = dateFormat(date, dateFMT);
180   - var dateForms = dateFormat(date, dateMs);
181   - return [dateFor, dateForms]
182   - }
183   -
184   - var requestTime = dateTimeReq(dateFMT);
185   - var responseTime = dateTimeRes(dateFMT);
186   - var processTime = parseInt(responseTime[1] - requestTime[1]);
187   -
188   - var appDetail = '{' +
189   - '"' + nodeName + '.Details' + '":{' +
190   - '"Session":"' + req.query.commandId + '",' +
191   - '"Scenario":"' + cmd + '",' +
192   - '"Identity":"",' +
193   - '"InputTimeStamp":"' + requestTime[0] + '",' +
194   - '"Input":' + '[' +
195   - '{' +
196   - '"Event":"' + nodeName + '.' + cmd + '",' +
197   - '"Type":"REQ",' +
198   - '"RawData":"' + req.protocol + '://' + req.get('host') + req.originalUrl + '",' +
199   - '"Data":' + '{' +
200   - '"Name":"' + req.query.name + '",' +
201   - '"Type":"' + req.query.type + '",' +
202   - '"CommandId":"' + req.query.commandId + '"' +
203   - '}' +
204   - '}' +
205   - '],' +
206   - '"OutputTimeStamp":"' + responseTime[0] + '",' +
207   - '"Output":' + '[' +
208   - '{' +
209   - '"Event":"' + nodeName + '.' + cmd + '",' +
210   - '"Type":"' + 'RES",' +
211   - '"RawData":"' + req.query.name + '",' +
212   - '"Data":' + '{' +
213   - '"Size":"' + size + '",' +
214   - '"Modified":"' + mtime + '"' +
215   - '}' +
216   - '}' +
217   - '],' +
218   - '"ProcessingTime":"' + processTime + ' ms"' +
219   - '}' +
220   - '}';
221   -
222   - stream.once('open', function (fd) {
223   - stream.write(getDateTimeLogFormat() + appDetail + '\n');
224   - stream.end();
225   - });
226   -};
227   -
228   -SutisLog.prototype.statRecv = function (cmd, errCode) {
229   - var nodeName = 'SRFP-Genesis';
230   - var stream = fs.createWriteStream(logCfg.log.statPath + '/' + getStatFileName(), { 'flags': 'a' });
231   -
232   - var statName = nodeName;
233   - if (errCode == 20000 || errCode == 40401 || errCode == 40101) {
234   - statName = statName + ' Received Request';
235   - } else if (errCode == 40400) {
236   - statName = statName + ' Received Unknown URL Request';
237   - } else if (errCode == 40300) {
238   - statName = statName + ' Received Bad ' + cmd + ' Request';
239   - }
240   - else {
241   - statName = statName + ' Received ' + cmd + ' error';
242   - }
243   - stream.once('open', function (fd) {
244   - stream.write(getDateTimeLogFormat() + statName + '\n');
245   - stream.end();
246   - });
247   -};
248   -
249   -SutisLog.prototype.statRetn = function (cmd, errCode) {
250   - var nodeName = 'SRFP-Genesis';
251   - var stream = fs.createWriteStream(logCfg.log.statPath + '/' + getStatFileName(), { 'flags': 'a' });
252   -
253   - var statName = nodeName;
254   - if (errCode == 20000) {
255   - statName = statName + ' Returned ' + cmd + ' Success';
256   - } else if (errCode == 40400) {
257   - statName = statName + ' Returned Unknown URL';
258   - } else if (errCode == 40300 || errCode == 40401 || errCode == 40101 || errCode == 50000) {
259   - statName = statName + ' Returned ' + cmd + ' Error';
260   - } else {
261   - // statName = statName + ' Returned ' + cmd + ' err ' + statDesc;
262   - }
263   - stream.once('open', function (fd) {
264   - stream.write(getDateTimeLogFormat() + statName + '\n');
265   - stream.end();
266   - });
267   -};
268   -
269   -SutisLog.prototype.alarm = function (cmd, errCode) {
270   - var nodeName = 'SRFP-Genesis';
271   - var stream = fs.createWriteStream(logCfg.log.alarmPath + '/' + getAlarmFileName(), { 'flags': 'a' });
272   -
273   - var alarmName = nodeName;
274   - if (errCode == 40400) {
275   - alarmName = alarmName + ' Received Unknown URL Request';
276   - } else if (errCode == 40300) {
277   - alarmName = alarmName + ' Received Bad ' + cmd + ' Request';
278   - }
279   - else {
280   - // alarmName = alarmName + ' Received ' + cmd + ' err ' + statDesc;
281   - }
282   - stream.once('open', function (fd) {
283   - stream.write(getDateTimeLogFormat() + alarmName + '\n');
284   - stream.end();
285   - });
286   -};
287   -module.exports = SutisLog;
288   -
utils/SutisLogSummary.js
... ... @@ -1,75 +0,0 @@
1   -var log4js = require('log4js');
2   -log4js.configure('./config/log4js.json');
3   -
4   -var log = log4js.getLogger('serverLog');
5   -var stat = log4js.getLogger('statLog');
6   -var alarm = log4js.getLogger('alarmLog');
7   -var detail = log4js.getLogger('datailLog');
8   -var summary = log4js.getLogger('summaryLog');
9   -
10   -var dateFMT = 'yyyymmdd HH:MM:ss';
11   -var dateFormat = require('dateformat');
12   -
13   -
14   -var l = {};
15   -l.debug = function(_log){
16   - log.debug(_log);
17   -}
18   -l.info = function(_log){
19   - log.info(_log);
20   -}
21   -l.warn = function(_log){
22   - log.warn(_log);
23   -}
24   -l.error = function(_log){
25   - log.error(_log);
26   -}
27   -l.stat = function(statName){
28   - stat.info(statName);
29   -}
30   -l.alarm = function(alarmName){
31   - alarm.info(alarmName);
32   -}
33   -l.detail = function(appDetail){
34   - detail.info(appDetail);
35   -}
36   -
37   -l.summary = function(session, cmd, identity, resultCode, resultDescription){
38   - var summaryLog = {
39   - requestTime: new Date(),
40   - session: session,
41   - initInvoke: '', //only equinox platform
42   - cmd: cmd,
43   - identity: identity,
44   - resultCode: resultCode,
45   - resultDescription: resultDescription,
46   - blockDetail: [],
47   -
48   - addSuccessBlock: function(node, cmd, statusCode, detail){
49   - this.blockDetail.push('['+ node+'; '+cmd+'(1); ['+ statusCode+'; '+detail+'(1)]]');
50   - },
51   -
52   - addErrorBlock: function(node, cmd, statusCode, detail, errorDetail){
53   - this.blockDetail.push('['+ node+'; '+cmd+'(1); ['+ statusCode+'; '+detail+'(1)]]');
54   - },
55   -
56   - flush : function(){
57   - var endTime = new Date();
58   -
59   - var txt = dateFormat(this.requestTime, dateFMT) + '|';
60   - txt += this.session +'|';
61   - txt += this.initInvoke +'|'
62   - txt += this.cmd +'|'
63   - txt += this.identity +'|'
64   - txt += this.resultCode +'|'
65   - txt += this.resultDescription +'|'
66   - txt += this.blockDetail +'|'
67   - txt += dateFormat(endTime, dateFMT) +'|'
68   - txt += (endTime.getTime() - this.requestTime.getTime());
69   -
70   - summary.info(txt);
71   - }
72   - };
73   - return summaryLog;
74   -}
75   -module.exports = l;
76 0 \ No newline at end of file
utils/SutisStat.js
... ... @@ -1,64 +0,0 @@
1   -'use strict';
2   -var logger = require('./SutisLogSummary');
3   -var stat ={};
4   -var nodeName = 'SRFP-Genesis';
5   -// var statTbl = require('../config/config');
6   -
7   -// stat.sendReq=function(cmd){
8   -// var statName = nodeName + ' send ' + cmd + ' req.';
9   -// logger.stat(statName);
10   -// };
11   -
12   -// stat.sendRes=function(cmd, errCode){
13   -// var statDesc;
14   -// if(!errCode){
15   -// errCode = "50000";
16   -
17   -// }else{
18   -// statDesc = statTbl[errCode];
19   -// if(!statDesc){
20   -// errCode = "90000";
21   -// }
22   -// }
23   -// statDesc = statTbl[errCode];
24   -
25   -// var statName = nodeName;
26   -// if(errCode == '20000'){
27   -// statName = statName + ' send ' + cmd + ' success res '+ errCode +'.';
28   -// }else{
29   -// statName = statName + ' send ' + cmd + ' err ' + statDesc.toLowerCase() +' res '+ errCode +'.';
30   -// }
31   -// logger.stat(statName);
32   -// };
33   -
34   -stat.recv=function(cmd, errCode){
35   -
36   - var statName = nodeName;
37   - if(errCode == 20000 || errCode == 40401 || errCode == 40101){
38   - statName = statName + ' Received Request';
39   - } else if (errCode == 40400) {
40   - statName = statName + ' Received Unknown URL Request';
41   - }else if (errCode == 40300) {
42   - statName = statName + ' Received Bad '+ cmd + ' Request';
43   - }
44   - else{
45   - statName = statName + ' Received ' + cmd + ' error';
46   - }
47   - logger.stat(statName);
48   -};
49   -
50   -stat.retn=function(cmd, errCode){
51   -
52   - var statName = nodeName;
53   - if(errCode == 20000){
54   - statName = statName + ' Returned ' + cmd + ' Success';
55   - } else if (errCode == 40400) {
56   - statName = statName + ' Returned Unknown URL';
57   - } else if (errCode == 40300 || errCode == 40401 || errCode == 40101 || errCode == 50000) {
58   - statName = statName + ' Returned ' + cmd + ' Error';
59   - } else{
60   - // statName = statName + ' Returned ' + cmd + ' err ' + statDesc;
61   - }
62   - logger.stat(statName);
63   -};
64   -module.exports = stat;
views/error.jade
... ... @@ -1,5 +0,0 @@
1   -extends layout
2   -
3   -block content
4   - h1= message
5   - h2= error.status
views/index.jade
... ... @@ -1,5 +0,0 @@
1   -extends layout
2   -
3   -block content
4   - h1= title
5   - p Welcome to #{title}
views/layout.jade
... ... @@ -1,7 +0,0 @@
1   -doctype html
2   -html
3   - head
4   - title= title
5   - link(rel='stylesheet', href='/stylesheets/style.css')
6   - body
7   - block content