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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 \ No newline at end of file 52 \ No newline at end of file
ais-structure/src/config/express.js 0 → 100644
@@ -0,0 +1,268 @@ @@ -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 \ No newline at end of file 269 \ No newline at end of file
ais-structure/src/config/log4js_config.json 0 → 100644
@@ -0,0 +1,59 @@ @@ -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 @@ @@ -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 \ No newline at end of file 18 \ No newline at end of file
ais-structure/src/logger/log-rotator-util.js 0 → 100644
@@ -0,0 +1,280 @@ @@ -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 \ No newline at end of file 281 \ No newline at end of file
ais-structure/src/logger/logger.js 0 → 100644
@@ -0,0 +1,142 @@ @@ -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 \ No newline at end of file 143 \ No newline at end of file
ais-structure/src/modules/login/login.ctrl.js 0 → 100644
@@ -0,0 +1,34 @@ @@ -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 \ No newline at end of file 35 \ No newline at end of file
ais-structure/src/modules/login/login.route.js 0 → 100644
@@ -0,0 +1,8 @@ @@ -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 @@ @@ -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 \ No newline at end of file 12 \ No newline at end of file
ais-structure/src/modules/vizcard/vizCard.ctrl.js 0 → 100644
@@ -0,0 +1,86 @@ @@ -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 \ No newline at end of file 87 \ No newline at end of file
ais-structure/src/modules/vizcard/vizCard.route.js 0 → 100644
@@ -0,0 +1,12 @@ @@ -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,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,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,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,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,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 \ No newline at end of file 0 \ No newline at end of file
config/logger.js
@@ -1,3 +0,0 @@ @@ -1,3 +0,0 @@
1 -var SutisLog = require('../utils/SutisLog')  
2 -var logger = new SutisLog()  
3 -module.exports = logger  
4 \ No newline at end of file 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 +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,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 +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 +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,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 +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,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,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,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,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,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 \ No newline at end of file 0 \ No newline at end of file
routes/CMF/vizCard.js
@@ -1,98 +0,0 @@ @@ -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,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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 \ No newline at end of file 46 \ No newline at end of file
sc-structure/config/logger.js 0 → 100644
@@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
  1 +var SutisLog = require('../utils/SutisLog')
  2 +var logger = new SutisLog()
  3 +module.exports = logger
0 \ No newline at end of file 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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 \ No newline at end of file 12 \ No newline at end of file
sc-structure/routes/CMF/vizCard.js 0 → 100644
@@ -0,0 +1,98 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 \ No newline at end of file 279 \ No newline at end of file
sc-structure/srfp_genesis_backup_2.js 0 → 100644
@@ -0,0 +1,316 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 \ No newline at end of file 76 \ No newline at end of file
sc-structure/utils/SutisStat.js 0 → 100644
@@ -0,0 +1,64 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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,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,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 \ No newline at end of file 0 \ No newline at end of file
srfp_genesis_backup_2.js
@@ -1,316 +0,0 @@ @@ -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,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,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,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,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 \ No newline at end of file 0 \ No newline at end of file
utils/SutisStat.js
@@ -1,64 +0,0 @@ @@ -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,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,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,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