From 0caa621272ce2a79d1b82e29ba0ea5d68462aa1d Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 11:41:08 +0100 Subject: [PATCH 001/161] commit testing --- config/config.js | 4 +- package-lock.json | 3277 +++++++++++---------------------------------- package.json | 12 +- 3 files changed, 794 insertions(+), 2499 deletions(-) diff --git a/config/config.js b/config/config.js index cf1ae0cd..f607a367 100644 --- a/config/config.js +++ b/config/config.js @@ -14,12 +14,12 @@ module.exports = { } }, database: { - host: 'localhost', // DB host + host: 'transfer.hft-stuttgart.de', // DB host user: 'DBManager', // DB username password: 'Stuttgart2019', // DB password port: 3306, // MySQL port db: 'test_db', // User DB - dbProject: 'projectdb' // Project DB + dbProject: 'projectDB' // Project DB }, mailer: { host: 'mail.hft-stuttgart.de', // hostname diff --git a/package-lock.json b/package-lock.json index ced597fe..7e0b9410 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,11 +31,6 @@ "negotiator": "0.6.2" } }, - "acorn": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", - "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=" - }, "align-text": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", @@ -46,73 +41,46 @@ "repeat-string": "^1.5.2" } }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "requires": { + "string-width": "^2.0.0" + } + }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" + "color-convert": "^1.9.0" } }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", "requires": { - "arr-flatten": "^1.0.1" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - }, "async": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/async/-/async-3.1.0.tgz", "integrity": "sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ==" }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", @@ -150,75 +118,13 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } - }, - "base64-url": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/base64-url/-/base64-url-1.2.1.tgz", - "integrity": "sha1-GZ/WYXAqDnt9yubgaYuwicUvbXg=" - }, "basic-auth": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.0.4.tgz", - "integrity": "sha1-Awk1sB3nyblKgksp8/zLdQ06UpA=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "requires": { + "safe-buffer": "5.1.2" + } }, "bcryptjs": { "version": "2.4.3", @@ -231,25 +137,46 @@ "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==" }, "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==" }, "body-parser": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.15.1.tgz", - "integrity": "sha1-m87vBmm4+LlD8K2M5dlXFr10D9I=", - "requires": { - "bytes": "2.3.0", - "content-type": "~1.0.1", - "debug": "~2.2.0", - "depd": "~1.1.0", - "http-errors": "~1.4.0", - "iconv-lite": "0.4.13", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.1.0", - "raw-body": "~2.1.6", - "type-is": "~1.6.12" + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + } + }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + } } }, "brace-expansion": { @@ -262,48 +189,28 @@ } }, "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" + "fill-range": "^7.0.1" } }, "bytes": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.3.0.tgz", - "integrity": "sha1-1baAoWW2IBc5rLYRVCqrwtjOsHA=" - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, "camelcase": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" }, + "capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" + }, "center-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", @@ -314,59 +221,40 @@ } }, "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" } }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" + }, "cliui": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", @@ -384,19 +272,18 @@ } } }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "color-name": "1.1.3" } }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "concat-map": { "version": "0.0.1", @@ -404,18 +291,16 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "configstore": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-1.4.0.tgz", - "integrity": "sha1-w1eB0FAdJowlxUuLF/YkDopPsCE=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", "requires": { + "dot-prop": "^4.1.0", "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "object-assign": "^4.0.1", - "os-tmpdir": "^1.0.0", - "osenv": "^0.1.0", - "uuid": "^2.0.1", - "write-file-atomic": "^1.1.2", - "xdg-basedir": "^2.0.0" + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" } }, "connect-flash": { @@ -424,17 +309,23 @@ "integrity": "sha1-2GMPJtlaf4UfmVax6MxnMvO2qjA=" }, "constantinople": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz", - "integrity": "sha1-S5RdmTeQe82Y7ldRIsOBdRZUQUE=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz", + "integrity": "sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==", "requires": { - "acorn": "^2.1.0" + "@types/babel-types": "^7.0.0", + "@types/babylon": "^6.16.2", + "babel-types": "^6.26.0", + "babylon": "^6.18.0" } }, "content-disposition": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.1.tgz", - "integrity": "sha1-h0dsamfI2qh+Muh2Ft+IO6f7Bxs=" + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } }, "content-type": { "version": "1.0.4", @@ -460,11 +351,6 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - }, "core-js": { "version": "2.6.10", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.10.tgz", @@ -475,22 +361,47 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, - "crc": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.0.tgz", - "integrity": "sha1-QljjUWE6dO8RU9/LBeggw+lxXX8=" + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } }, "crypto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==" }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" + }, "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "ms": "0.7.1" + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, "decamelize": { @@ -498,11 +409,6 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -516,53 +422,6 @@ "object-keys": "^1.0.12" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } - }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -578,39 +437,33 @@ "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "is-obj": "^1.0.0" } }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "ejs": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-0.8.8.tgz", - "integrity": "sha1-/9xW3MNdApJt1QrRNDm7xUBh1Zg=" + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, "errorhandler": { "version": "1.4.3", @@ -622,37 +475,32 @@ } }, "es-abstract": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz", - "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==", + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.3.tgz", + "integrity": "sha512-WtY7Fx5LiOnSYgF5eg/1T+GONaGmpvpPdCpSnYij+U2gDTL0UPfWrhDw7b2IYb+9NQJsYpCA0wOQvZfsd6YwRw==", "requires": { - "es-to-primitive": "^1.2.0", + "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.0", + "has-symbols": "^1.0.1", "is-callable": "^1.1.4", "is-regex": "^1.0.4", - "object-inspect": "^1.6.0", + "object-inspect": "^1.7.0", "object-keys": "^1.1.1", "string.prototype.trimleft": "^2.1.0", "string.prototype.trimright": "^2.1.0" } }, "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" } }, - "es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=" - }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -669,95 +517,65 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "etag": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz", - "integrity": "sha1-A9MLX2fdbmMtKUXTDWZScxo01dg=" - }, - "event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", - "requires": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "requires": { - "is-posix-bracket": "^0.1.0" - } + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "requires": { - "fill-range": "^2.1.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "express": { - "version": "4.13.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.13.4.tgz", - "integrity": "sha1-PAt288d1kMg0VzkGHsC9O6Bn7CQ=", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "requires": { - "accepts": "~1.2.12", + "accepts": "~1.3.7", "array-flatten": "1.1.1", - "content-disposition": "0.5.1", - "content-type": "~1.0.1", - "cookie": "0.1.5", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", "cookie-signature": "1.0.6", - "debug": "~2.2.0", - "depd": "~1.1.0", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "etag": "~1.7.0", - "finalhandler": "0.4.1", - "fresh": "0.3.0", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", "merge-descriptors": "1.0.1", "methods": "~1.1.2", "on-finished": "~2.3.0", - "parseurl": "~1.3.1", + "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~1.0.10", - "qs": "4.0.0", - "range-parser": "~1.0.3", - "send": "0.13.1", - "serve-static": "~1.10.2", - "type-is": "~1.6.6", - "utils-merge": "1.0.0", - "vary": "~1.0.1" + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "dependencies": { - "accepts": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz", - "integrity": "sha1-5fHzkoxtlf2WVYw27D2dDeSm7Oo=", - "requires": { - "mime-types": "~2.1.6", - "negotiator": "0.5.3" - } - }, "cookie": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.5.tgz", - "integrity": "sha1-armUiksa4hlSzSWIUwpHItQETXw=" - }, - "negotiator": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.5.3.tgz", - "integrity": "sha1-Jp1cR2gQ7JLtvntsLygxY4T5p+g=" - }, - "qs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz", - "integrity": "sha1-wx2bdOwn33XlQ6hseHKO2NRiNgc=" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" } } }, @@ -770,118 +588,68 @@ } }, "express-session": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.13.0.tgz", - "integrity": "sha1-isO1wBiLSDgoUdiCB7jndG77QBE=", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.0.tgz", + "integrity": "sha512-t4oX2z7uoSqATbMfsxWMbNjAL0T5zpvcJCk3Z9wnPPN7ibddhnmDZXHfEcoBMG2ojKXZoCyPMc5FbtK+G7SoDg==", "requires": { - "cookie": "0.2.3", + "cookie": "0.4.0", "cookie-signature": "1.0.6", - "crc": "3.4.0", - "debug": "~2.2.0", - "depd": "~1.1.0", - "on-headers": "~1.0.1", - "parseurl": "~1.3.0", - "uid-safe": "~2.0.0", - "utils-merge": "1.0.0" + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.0", + "uid-safe": "~2.1.5" }, "dependencies": { "cookie": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.2.3.tgz", - "integrity": "sha1-GllTavaFN6IReKATRvh8sFnSrlw=" - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" } } }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "requires": { - "is-extglob": "^1.0.0" - } - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" - }, "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" } }, "finalhandler": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.4.1.tgz", - "integrity": "sha1-haF8bFmpRxfSYtYSMNSw6+PUoU0=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "requires": { - "debug": "~2.2.0", + "debug": "2.6.9", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", "unpipe": "~1.0.0" } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "requires": { - "for-in": "^1.0.1" - } - }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "^0.2.2" - } - }, "fresh": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", - "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8=" - }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, "fs": { "version": "0.0.1-security", @@ -889,675 +657,136 @@ "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" }, "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", - "optional": true, + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", + "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "requires": { + "ini": "^1.3.4" + } + }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" }, "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "inherits": { "version": "2.0.3", - "bundled": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "optional": true + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" } } }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "requires": { - "is-glob": "^2.0.0" - } - }, - "got": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/got/-/got-3.3.1.tgz", - "integrity": "sha1-5dDtSvVfw+701WAHdp2YGSvLLso=", - "requires": { - "duplexify": "^3.2.0", - "infinity-agent": "^2.0.0", - "is-redirect": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "nested-error-stacks": "^1.0.0", - "object-assign": "^3.0.0", - "prepend-http": "^1.0.0", - "read-all-stream": "^3.0.0", - "timed-out": "^2.0.0" - }, - "dependencies": { - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=" - } - } - }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "http-errors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.4.0.tgz", - "integrity": "sha1-bAJC3qaz33r9oVPHEImzHG6Cqr8=", + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { - "inherits": "2.0.1", - "statuses": ">= 1.2.1 < 2" + "safer-buffer": ">= 2.1.2 < 3" } }, - "iconv-lite": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", - "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=" - }, "ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, - "infinity-agent": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/infinity-agent/-/infinity-agent-2.0.3.tgz", - "integrity": "sha1-ReDi/3qesDCyfWK3SzdEt6esQhY=" - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - }, "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "ipaddr.js": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.0.5.tgz", - "integrity": "sha1-X6eM8wG4JceKvDBC2BJyMEnqI8c=" - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - } + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" }, "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "requires": { - "binary-extensions": "^1.0.0" + "binary-extensions": "^2.0.0" } }, "is-buffer": { @@ -1570,12 +799,12 @@ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", "requires": { - "kind-of": "^3.0.2" + "ci-info": "^1.5.0" } }, "is-date-object": { @@ -1583,36 +812,6 @@ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "requires": { - "is-primitive": "^2.0.0" - } - }, "is-expression": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", @@ -1629,30 +828,31 @@ } } }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "requires": { - "number-is-nan": "^1.0.0" + "is-extglob": "^2.1.1" } }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", "requires": { - "is-extglob": "^1.0.0" + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" } }, "is-npm": { @@ -1661,38 +861,23 @@ "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" }, "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "requires": { - "kind-of": "^3.0.2" - } + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } + "path-is-inside": "^1.0.1" } }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" - }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", @@ -1711,36 +896,33 @@ "has": "^1.0.1" } }, + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", "requires": { - "has-symbols": "^1.0.0" + "has-symbols": "^1.0.1" } }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "js-stringify": { "version": "1.0.2", @@ -1756,11 +938,11 @@ } }, "latest-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-1.0.1.tgz", - "integrity": "sha1-cs/Ebj6NG+ZR4eu1Tqn26pbzdLs=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", "requires": { - "package-json": "^1.0.0" + "package-json": "^4.0.0" } }, "lazy-cache": { @@ -1769,92 +951,9 @@ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" }, "lodash": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.2.0.tgz", - "integrity": "sha1-S/UKMkP5rrC6xBpV09WZBnWkYvs=" - }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "requires": { - "lodash._basecopy": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=" - }, - "lodash._bindcallback": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=" - }, - "lodash._createassigner": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", - "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", - "requires": { - "lodash._bindcallback": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash.restparam": "^3.0.0" - } - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=" - }, - "lodash.assign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", - "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", - "requires": { - "lodash._baseassign": "^3.0.0", - "lodash._createassigner": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "lodash.defaults": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-3.1.2.tgz", - "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=", - "requires": { - "lodash.assign": "^3.0.0", - "lodash.restparam": "^3.0.0" - } - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=" + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, "longest": { "version": "1.0.1", @@ -1866,28 +965,22 @@ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=" - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "requires": { - "object-visit": "^1.0.0" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, - "math-random": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", - "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==" + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + } }, "media-typer": { "version": "0.3.0", @@ -1904,30 +997,10 @@ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, "mime": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", - "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { "version": "1.40.0", @@ -1951,53 +1024,26 @@ } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "morgan": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.7.0.tgz", - "integrity": "sha1-6xDKjlDRq+D409rVwCAdBS2YHGI=", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", + "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", "requires": { - "basic-auth": "~1.0.3", - "debug": "~2.2.0", - "depd": "~1.1.0", + "basic-auth": "~2.0.0", + "debug": "2.6.9", + "depd": "~1.1.2", "on-finished": "~2.3.0", "on-headers": "~1.0.1" } }, "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "mysql": { "version": "2.17.1", @@ -2010,64 +1056,15 @@ "sqlstring": "2.3.1" } }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } - }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, - "nested-error-stacks": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz", - "integrity": "sha1-GfYZWRUZ8JZ2mlupqG5u7sgjw88=", - "requires": { - "inherits": "~2.0.1" - } - }, "node-forge": { - "version": "0.2.24", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.2.24.tgz", - "integrity": "sha1-+m+Eb0L6k/Y6CjDJ+/97ThMOCFg=" + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz", + "integrity": "sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw==" }, "nodemailer": { "version": "6.3.1", @@ -2075,20 +1072,30 @@ "integrity": "sha512-j0BsSyaMlyadEDEypK/F+xlne2K5m6wzPYMXS/yxKI0s7jmT1kBx6GEKRVbZmyYfKOsjkeC/TiMVDJBI/w5gMQ==" }, "nodemon": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.9.2.tgz", - "integrity": "sha1-IbPNFX1Ug4M7RzNyyY4XlaTVWXA=", - "requires": { - "chokidar": "^1.4.3", - "debug": "^2.2.0", - "es6-promise": "^3.0.2", - "ignore-by-default": "^1.0.0", - "lodash.defaults": "^3.1.2", - "minimatch": "^3.0.0", - "ps-tree": "^1.0.1", - "touch": "1.0.0", - "undefsafe": "0.0.3", - "update-notifier": "0.5.0" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.1.tgz", + "integrity": "sha512-UC6FVhNLXjbbV4UzaXA3wUdbEkUZzLGgMGzmxvWAex5nzib/jhcSHVFlQODdbuUHq8SnnZ4/EABBAbC3RplvPg==", + "requires": { + "chokidar": "^3.2.2", + "debug": "^3.2.6", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.7", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.2", + "update-notifier": "^2.5.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } } }, "nopt": { @@ -2100,68 +1107,33 @@ } }, "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "requires": { - "remove-trailing-separator": "^1.0.1" + "path-key": "^2.0.0" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "object-inspect": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", - "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, "object.getownpropertydescriptors": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", @@ -2171,30 +1143,6 @@ "es-abstract": "^1.5.1" } }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -2208,51 +1156,20 @@ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "package-json": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-1.2.0.tgz", - "integrity": "sha1-yOysCUInzfdqMWh07QXifMk5oOA=", - "requires": { - "got": "^3.2.0", - "registry-url": "^3.0.0" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" } }, "parseurl": { @@ -2260,11 +1177,6 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, "passport": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/passport/-/passport-0.3.2.tgz", @@ -2275,17 +1187,28 @@ } }, "passport-saml": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/passport-saml/-/passport-saml-0.15.0.tgz", - "integrity": "sha1-fUXAe6r4DY4s+Jg2cTKl5MBTXK0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/passport-saml/-/passport-saml-1.2.0.tgz", + "integrity": "sha512-CU1JOx9FTITF8+vl/G1g7FV6kHWXYzECV3pq3D8K3RIM1MS0efbfQ2hkgDFdoZGdG9DdMH5z8OBW/O8qoXnkLQ==", "requires": { + "debug": "^3.1.0", "passport-strategy": "*", - "q": "1.1.x", - "xml-crypto": "0.8.x", - "xml-encryption": "~0.7", + "q": "^1.5.0", + "xml-crypto": "^1.1.4", + "xml-encryption": "^0.11.0", "xml2js": "0.4.x", - "xmlbuilder": "2.5.x", + "xmlbuilder": "^11.0.0", "xmldom": "0.1.x" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } } }, "passport-strategy": { @@ -2293,10 +1216,15 @@ "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, "path-parse": { "version": "1.0.6", @@ -2313,63 +1241,44 @@ "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "requires": { - "through": "~2.3" - } - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "^2.0.0" - } + "picomatch": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz", + "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==" }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" }, "prepend-http": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "proxy-addr": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.10.tgz", - "integrity": "sha1-DUCoL4Afw1VWfS7LZe/j8HfxIcU=", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", "requires": { - "forwarded": "~0.1.0", - "ipaddr.js": "1.0.5" + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.0" } }, - "ps-tree": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", - "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", - "requires": { - "event-stream": "=3.3.4" - } + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "pstree.remy": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.7.tgz", + "integrity": "sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A==" }, "pug": { "version": "2.0.4", @@ -2575,57 +1484,34 @@ "integrity": "sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA==" }, "q": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/q/-/q-1.1.2.tgz", - "integrity": "sha1-Y1fikSBnAdmfGXq4TlforRlvKok=" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" }, "qs": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.1.0.tgz", - "integrity": "sha1-7B0WJrJCeNmfD99FSeUk4k7O6yY=" + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" }, - "randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } + "random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" }, "range-parser": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz", - "integrity": "sha1-aHKCNTXGkuLCoBA4Jq/YLC4P8XU=" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", - "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "requires": { - "bytes": "2.4.0", - "iconv-lite": "0.4.13", + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", - "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=" - } } }, "rc": { @@ -2637,338 +1523,49 @@ "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } - } - }, - "read-all-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", - "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", - "requires": { - "pinkie-promise": "^2.0.0", - "readable-stream": "^2.0.0" } }, "readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - } - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "extglob": { + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" } } }, + "readdirp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "requires": { + "picomatch": "^2.0.4" + } + }, "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "registry-auth-token": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" } }, "registry-url": { @@ -2979,29 +1576,11 @@ "rc": "^1.0.1" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" - }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, - "repeating": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", - "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", - "requires": { - "is-finite": "^1.0.0" - } - }, "resolve": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", @@ -3010,16 +1589,6 @@ "path-parse": "^1.0.6" } }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, "right-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", @@ -3033,13 +1602,10 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "requires": { - "ret": "~0.1.10" - } + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sax": { "version": "1.2.4", @@ -3060,294 +1626,83 @@ } }, "send": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.13.1.tgz", - "integrity": "sha1-ow1fTILIqbrprQCh2bG9vm8Zntc=", + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "requires": { - "debug": "~2.2.0", - "depd": "~1.1.0", + "debug": "2.6.9", + "depd": "~1.1.2", "destroy": "~1.0.4", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "etag": "~1.7.0", - "fresh": "0.3.0", - "http-errors": "~1.3.1", - "mime": "1.3.4", - "ms": "0.7.1", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", "on-finished": "~2.3.0", - "range-parser": "~1.0.3", - "statuses": "~1.2.1" + "range-parser": "~1.2.1", + "statuses": "~1.5.0" }, "dependencies": { - "http-errors": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", - "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=", - "requires": { - "inherits": "~2.0.1", - "statuses": "1" - } - }, - "statuses": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz", - "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg=" + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" } } }, "serve-static": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.10.3.tgz", - "integrity": "sha1-zlpuzTEB/tXsCYJ9rCKpwpv7BTU=", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "requires": { + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.1", - "send": "0.13.2" - }, - "dependencies": { - "http-errors": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", - "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=", - "requires": { - "inherits": "~2.0.1", - "statuses": "1" - } - }, - "send": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.13.2.tgz", - "integrity": "sha1-dl52B8gFVFK7pvCwUllTUJhgNt4=", - "requires": { - "debug": "~2.2.0", - "depd": "~1.1.0", - "destroy": "~1.0.4", - "escape-html": "~1.0.3", - "etag": "~1.7.0", - "fresh": "0.3.0", - "http-errors": "~1.3.1", - "mime": "1.3.4", - "ms": "0.7.1", - "on-finished": "~2.3.0", - "range-parser": "~1.0.3", - "statuses": "~1.2.1" - } - }, - "statuses": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz", - "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg=" - } - } - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } + "parseurl": "~1.3.3", + "send": "0.17.1" } }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "requires": { - "kind-of": "^3.2.0" - } + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "shebang-regex": "^1.0.0" } }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" - }, - "split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", - "requires": { - "through": "2" - } + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "requires": { - "extend-shallow": "^3.0.0" - } + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "sqlstring": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, - "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", - "requires": { - "duplexer": "~0.1.1" - } - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" - }, - "string-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", - "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=", + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { - "strip-ansi": "^3.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "string.prototype.trimleft": { @@ -3377,85 +1732,71 @@ } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^3.0.0" } }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "requires": { + "execa": "^0.7.0" + } }, "timed-out": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-2.0.0.tgz", - "integrity": "sha1-84sK6B03R9YoAB9B2vxlKs5nHAo=" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" }, "to-fast-properties": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - } - } + "is-number": "^7.0.0" } }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, "token-stream": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=" }, "touch": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-1.0.0.tgz", - "integrity": "sha1-RJy+LbrlqMgDjjDXH6D/RklHxN4=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", "requires": { "nopt": "~1.0.10" } @@ -3493,27 +1834,27 @@ "optional": true }, "uid-safe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.0.0.tgz", - "integrity": "sha1-p/PGymSh9qXQTsDvPkw9U2cxcTc=", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", "requires": { - "base64-url": "1.2.1" + "random-bytes": "~1.0.0" } }, "undefsafe": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-0.0.3.tgz", - "integrity": "sha1-7Mo6A+VrmvFzhbqsgSrIO5lKli8=" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", + "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", + "requires": { + "debug": "^2.2.0" + } }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" + "crypto-random-string": "^1.0.0" } }, "unpipe": { @@ -3521,70 +1862,35 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" }, "update-notifier": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-0.5.0.tgz", - "integrity": "sha1-B7XcIGazYnqztPUwEw9+3doHpMw=", - "requires": { - "chalk": "^1.0.0", - "configstore": "^1.0.0", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", "is-npm": "^1.0.0", - "latest-version": "^1.0.0", - "repeating": "^1.1.2", + "latest-version": "^3.0.0", "semver-diff": "^2.0.0", - "string-length": "^1.0.0" + "xdg-basedir": "^3.0.0" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "requires": { + "prepend-http": "^1.0.1" + } }, "util-deprecate": { "version": "1.0.2", @@ -3601,85 +1907,84 @@ } }, "utils-merge": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", - "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=" - }, - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "vary": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.0.1.tgz", - "integrity": "sha1-meSYFWaihhGN+yuBc1ffeZM3bRA=" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, "void-elements": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "requires": { + "string-width": "^2.1.1" + } + }, "window-size": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, "write-file-atomic": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "requires": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", - "slide": "^1.1.5" + "signal-exit": "^3.0.2" } }, "xdg-basedir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", - "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", - "requires": { - "os-homedir": "^1.0.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" }, "xml-crypto": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/xml-crypto/-/xml-crypto-0.8.5.tgz", - "integrity": "sha1-K7z7PrM/OoKiGLgiv2craxwg5Tg=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/xml-crypto/-/xml-crypto-1.4.0.tgz", + "integrity": "sha512-K8FRdRxICVulK4WhiTUcJrRyAIJFPVOqxfurA3x/JlmXBTxy+SkEENF6GeRt7p/rB6WSOUS9g0gXNQw5n+407g==", "requires": { - "xmldom": "=0.1.19", - "xpath.js": ">=0.0.3" - }, - "dependencies": { - "xmldom": { - "version": "0.1.19", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.19.tgz", - "integrity": "sha1-Yx/Ad3bv2EEYvyUXGzftTQdaCrw=" - } + "xmldom": "0.1.27", + "xpath": "0.0.27" } }, "xml-encryption": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/xml-encryption/-/xml-encryption-0.7.4.tgz", - "integrity": "sha1-Qnkexk1VbSRV3LnaClQSNmWsZcc=", + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/xml-encryption/-/xml-encryption-0.11.2.tgz", + "integrity": "sha512-jVvES7i5ovdO7N+NjgncA326xYKjhqeAnnvIgRnY7ROLCfFqEDLwP0Sxp/30SHG0AXQV1048T5yinOFyvwGFzg==", "requires": { - "async": "~0.2.7", - "ejs": "~0.8.3", - "node-forge": "0.2.24", + "async": "^2.1.5", + "ejs": "^2.5.6", + "node-forge": "^0.7.0", "xmldom": "~0.1.15", - "xpath": "0.0.5" + "xpath": "0.0.27" }, "dependencies": { "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } } } }, @@ -3691,22 +1996,12 @@ "sax": ">=0.6.0", "util.promisify": "~1.0.0", "xmlbuilder": "~11.0.0" - }, - "dependencies": { - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" - } } }, "xmlbuilder": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-2.5.2.tgz", - "integrity": "sha1-WriPxQirL/FIcwELVhY9P5KxkyU=", - "requires": { - "lodash": "~3.2.0" - } + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" }, "xmldom": { "version": "0.1.27", @@ -3714,14 +2009,14 @@ "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" }, "xpath": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.5.tgz", - "integrity": "sha1-RUA29u8PPfWvXUukoRn7dWdLPmw=" + "version": "0.0.27", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz", + "integrity": "sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==" }, - "xpath.js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xpath.js/-/xpath.js-1.1.0.tgz", - "integrity": "sha512-jg+qkfS4K8E7965sqaUl8mRngXiKb3WZGfONgE18pr03FUQiuSV6G+Ej4tS55B+rIQSFEIw3phdVAQ4pPqNWfQ==" + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yargs": { "version": "3.10.0", diff --git a/package.json b/package.json index f7d2d9b9..93d0dbbf 100644 --- a/package.json +++ b/package.json @@ -23,20 +23,20 @@ "dependencies": { "async": "^3.1.0", "bcryptjs": "^2.4.3", - "body-parser": "1.15.1", + "body-parser": "^1.19.0", "cookie-parser": "1.4.3", "crypto": "^1.0.1", "errorhandler": "1.4.3", - "express": "4.13.4", + "express": "^4.17.1", "express-flash": "0.0.2", - "express-session": "1.13.0", + "express-session": "^1.17.0", "fs": "0.0.1-security", - "morgan": "1.7.0", + "morgan": "^1.9.1", "mysql": "^2.17.1", "nodemailer": "^6.3.1", - "nodemon": "1.9.2", + "nodemon": "^2.0.1", "passport": "0.3.2", - "passport-saml": "0.15.0", + "passport-saml": "^1.2.0", "pug": "^2.0.4" }, "devDependencies": {}, -- GitLab From 7eb2cf880aed9bb4e915bf27adf158599ee3d134 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 11:42:15 +0100 Subject: [PATCH 002/161] [cicd] gitlab.yml --- .gitlab-ci.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 00000000..4bd8c811 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,10 @@ +pages-devel: + stage: deploy + script: + - npm install + - pm2 restart ./app.js + - pm2 save + tags: + - testing + only: + -devel \ No newline at end of file -- GitLab From 6f63a213945890c14dc9ed7f5cc5cbf3c9f4669a Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 11:43:15 +0100 Subject: [PATCH 003/161] [cicd] gitlab.yml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4bd8c811..8e25672c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,4 +7,4 @@ pages-devel: tags: - testing only: - -devel \ No newline at end of file + - devel \ No newline at end of file -- GitLab From 2d16b7bbfa16c00db392be5244b13a12eaeff3fe Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 13:24:35 +0100 Subject: [PATCH 004/161] fixed cicd pipeline pm2 restart --- .gitlab-ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8e25672c..2c373532 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,7 +2,8 @@ pages-devel: stage: deploy script: - npm install - - pm2 restart ./app.js + - pm2 delete ./app.js + - pm2 start ./app.js - pm2 save tags: - testing -- GitLab From ece0d54c2736f7652f7f500f26d9a3184760df9d Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 13:29:37 +0100 Subject: [PATCH 005/161] [cicd] fixed error on empty delete --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2c373532..b6bfd87b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,7 +2,7 @@ pages-devel: stage: deploy script: - npm install - - pm2 delete ./app.js + - pm2 delete --silent ./app.js - pm2 start ./app.js - pm2 save tags: -- GitLab From a1e8a2f9d5198bd76271beffd9d094037d13ee61 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 13:43:21 +0100 Subject: [PATCH 006/161] [saml] set SP identifier to testing sp --- config/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.js b/config/config.js index f607a367..7ab4184f 100644 --- a/config/config.js +++ b/config/config.js @@ -9,7 +9,7 @@ module.exports = { saml: { path: process.env.SAML_PATH || '/saml/SSO', entryPoint: process.env.SAML_ENTRY_POINT || 'https://transfer.hft-stuttgart.de/idp/saml2/idp/SSOService.php', - issuer: 'sp-account.m4lab.hft-stuttgart.de', + issuer: 'sp-account-testing.m4lab.hft-stuttgart.de', logoutUrl: 'https://transfer.hft-stuttgart.de/idp/saml2/idp/SingleLogoutService.php' } }, -- GitLab From f979da9c529ca913e954dcdf820cf74665e73b6a Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 13:58:45 +0100 Subject: [PATCH 007/161] [cicd] fixed return code pm2 delete -s --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b6bfd87b..ec6a8fc5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,8 +2,8 @@ pages-devel: stage: deploy script: - npm install - - pm2 delete --silent ./app.js - - pm2 start ./app.js + - pm2 delete --silent account || : + - pm2 start ./app.js --name=account - pm2 save tags: - testing -- GitLab From 037048263a08406946c112012a74b9829e79e040 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 13:59:18 +0100 Subject: [PATCH 008/161] [cicd] fixed return code pm2 delete -s --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ec6a8fc5..45519e22 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,7 +2,7 @@ pages-devel: stage: deploy script: - npm install - - pm2 delete --silent account || : + - "pm2 delete --silent account || :" - pm2 start ./app.js --name=account - pm2 save tags: -- GitLab From 6f13c397b7767d64565e5266fe9f9017cc4483c6 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 14:04:10 +0100 Subject: [PATCH 009/161] [conf] added path --- config/config.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/config/config.js b/config/config.js index 7ab4184f..7b74f011 100644 --- a/config/config.js +++ b/config/config.js @@ -2,7 +2,8 @@ module.exports = { development: { app: { name: 'User Account Management', - port: process.env.PORT || 9989 + port: process.env.PORT || 9989, + path: '/account/' }, passport: { strategy: 'saml', -- GitLab From 965a24d901c9b88f50e6e58ccb29ef499860731d Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 14:07:56 +0100 Subject: [PATCH 010/161] [conf] removed path --- config/config.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/config/config.js b/config/config.js index 7b74f011..7ab4184f 100644 --- a/config/config.js +++ b/config/config.js @@ -2,8 +2,7 @@ module.exports = { development: { app: { name: 'User Account Management', - port: process.env.PORT || 9989, - path: '/account/' + port: process.env.PORT || 9989 }, passport: { strategy: 'saml', -- GitLab From 695110693c71a178853b547fcbec222bd3e37373 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 14:14:29 +0100 Subject: [PATCH 011/161] set paths to relative instead of global --- routes/routes.js | 64 ++++++++++++++++++++++++------------------------ 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/routes/routes.js b/routes/routes.js index 0d369f37..0b0d2c03 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -63,40 +63,40 @@ module.exports = function (app, config, passport) { res.send(JSON.stringify(req.flash('test'))); }); */ - app.get('/', function (req, res) { - res.redirect('/profile') + app.get('./', function (req, res) { + res.redirect('./profile') }); - app.get('/login', + app.get('./login', passport.authenticate(config.passport.strategy, { - successRedirect: '/', - failureRedirect: '/login' + successRedirect: './', + failureRedirect: './login' }) ); app.post(config.passport.saml.path, passport.authenticate(config.passport.strategy, { - failureRedirect: '/', + failureRedirect: './', failureFlash: true }), function (req, res) { - res.redirect('/'); + res.redirect('./'); } ); - app.get('/profile', function (req, res) { + app.get('./profile', function (req, res) { if (req.isAuthenticated()) { res.render('profile', { user: req.user // useful for view engine, useless for HTML }); } else { - res.redirect('/login'); + res.redirect('./login'); } }); - app.get('/services', function (req, res) { + app.get('./services', function (req, res) { if (req.isAuthenticated()) { async.waterfall([ // get userId by email from userdb @@ -156,21 +156,21 @@ module.exports = function (app, config, passport) { } ]) } else { - res.redirect('/login'); + res.redirect('./login'); } }); - app.get('/security', function (req, res) { + app.get('./security', function (req, res) { if (req.isAuthenticated()) { res.render('security', { user: req.user // useful for view engine, useless for HTML }); } else { - res.redirect('/login'); + res.redirect('./login'); } }); - app.post('/updateProfile', function (req, res) { + app.post('./updateProfile', function (req, res) { var userData = { title: req.body.inputTitle, firstname: req.body.inputFirstname, @@ -195,13 +195,13 @@ module.exports = function (app, config, passport) { }) } } else { - res.redirect('/login'); + res.redirect('./login'); } }); // todo: user registration with captcha - app.post('/changePwd', function (req, res) { + app.post('./changePwd', function (req, res) { if (req.isAuthenticated()) { var currPwd = req.body.inputCurrPwd var newPwd = req.body.inputNewPwd @@ -210,7 +210,7 @@ module.exports = function (app, config, passport) { // Load hashed passwd from DB. dbconn.user.query('SELECT password FROM user WHERE email="'+req.user.email+'"', function (err, rows, fields) { if (err) { - res.redirect('/500') + res.redirect('./500') throw err } var userPwd = rows[0].password @@ -218,16 +218,16 @@ module.exports = function (app, config, passport) { // check if the password is correct bcrypt.compare(currPwd, userPwd, function(err, isMatch) { if (err) { - res.redirect('/500') + res.redirect('./500') throw err } else if (!isMatch) { req.flash('error', "Sorry, your password was incorrect. Please double-check your password.") - res.redirect('/security') + res.redirect('./security') } else { if ( newPwd != retypePwd ) { req.flash('error', "Passwords do no match. Please make sure you re-type your new password correctly.") - res.redirect('/security') + res.redirect('./security') } else { // update password @@ -242,7 +242,7 @@ module.exports = function (app, config, passport) { req.flash('success', "Pasword updated!") console.log('pasword updated!') } - res.redirect('/security') + res.redirect('./security') }) }); }); @@ -251,11 +251,11 @@ module.exports = function (app, config, passport) { }) }) } else { - res.redirect('/login'); + res.redirect('./login'); } }); - app.get('/forgotPwd', function (req, res) { + app.get('./forgotPwd', function (req, res) { res.render('forgotPwd', { user: req.user }); @@ -284,7 +284,7 @@ module.exports = function (app, config, passport) { text: "" }; - app.post('/forgotPwd', function(req, res, next) { + app.post('./forgotPwd', function(req, res, next) { //methods.currentDate(); /* do something: write down reset password procedure in Technical Req. Document ref: https://meanstackdeveloper.in/implement-reset-password-functionality-in-node-js-express.html @@ -345,16 +345,16 @@ module.exports = function (app, config, passport) { else { req.flash('success', 'An e-mail has been sent to ' + emailAddress + ' with further instructions.'); } - res.redirect('/forgotPwd'); + res.redirect('./forgotPwd'); }); }); - app.get('/reset/:token', function(req, res) { + app.get('./reset/:token', function(req, res) { methods.checkUserToken(req.params.token, function(err, user){ //console.log(user); if (!user) { req.flash('error', 'Password reset token is invalid or has expired.'); - res.redirect('/forgotPwd'); + res.redirect('./forgotPwd'); } else { res.render('reset'); @@ -362,7 +362,7 @@ module.exports = function (app, config, passport) { }); }); - app.post('/reset/:token', function(req, res) { + app.post('./reset/:token', function(req, res) { methods.checkUserToken(req.params.token, function(err, user){ if (user) { // update password @@ -387,12 +387,12 @@ module.exports = function (app, config, passport) { } }); - res.redirect('/login') + res.redirect('./login') }); - app.get('/logout', function (req, res) { + app.get('./logout', function (req, res) { if (req.user == null) { - return res.redirect('/'); + return res.redirect('./'); } req.user.nameID = req.user.id; @@ -414,7 +414,7 @@ module.exports = function (app, config, passport) { }); // to generate Service Provider's XML metadata - app.get('/saml/metadata', + app.get('./saml/metadata', function(req, res) { res.type('application/xml'); var spMetadata = samlStrategy.generateServiceProviderMetadata(fs.readFileSync(__dirname + '/cert/cert.pem', 'utf8')); -- GitLab From b267c7ed4b1da57adc450023a2f9921e17ba907e Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 14:15:43 +0100 Subject: [PATCH 012/161] set paths to relative instead of global --- routes/routes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/routes.js b/routes/routes.js index 0b0d2c03..87e3e2db 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -63,7 +63,7 @@ module.exports = function (app, config, passport) { res.send(JSON.stringify(req.flash('test'))); }); */ - app.get('./', function (req, res) { + app.get('/', function (req, res) { res.redirect('./profile') }); -- GitLab From 2ccf70e7d42c84981a34a9cd4b00ca2e278a9b7a Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 14:17:05 +0100 Subject: [PATCH 013/161] set paths to relative instead of global --- routes/routes.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/routes/routes.js b/routes/routes.js index 87e3e2db..a8d07abc 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -70,7 +70,7 @@ module.exports = function (app, config, passport) { app.get('./login', passport.authenticate(config.passport.strategy, { - successRedirect: './', + successRedirect: '/', failureRedirect: './login' }) ); @@ -78,11 +78,11 @@ module.exports = function (app, config, passport) { app.post(config.passport.saml.path, passport.authenticate(config.passport.strategy, { - failureRedirect: './', + failureRedirect: '/', failureFlash: true }), function (req, res) { - res.redirect('./'); + res.redirect('/'); } ); @@ -392,7 +392,7 @@ module.exports = function (app, config, passport) { app.get('./logout', function (req, res) { if (req.user == null) { - return res.redirect('./'); + return res.redirect('/'); } req.user.nameID = req.user.id; -- GitLab From f4b926a6b87fac67597d21d49c982e4999e1e110 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 14:20:31 +0100 Subject: [PATCH 014/161] set paths to relative instead of global --- routes/routes.js | 58 ++++++++++++++++++++++++------------------------ 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/routes/routes.js b/routes/routes.js index a8d07abc..d9ef221b 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -1,7 +1,7 @@ const fs = require('fs'); const SamlStrategy = require('passport-saml').Strategy; -const dbconn = require('./dbconn'); -const methods = require('./methods'); +const dbconn = require('/dbconn'); +const methods = require('/methods'); // pwd encryption const bcrypt = require('bcryptjs'); const saltRounds = 10; @@ -64,14 +64,14 @@ module.exports = function (app, config, passport) { }); */ app.get('/', function (req, res) { - res.redirect('./profile') + res.redirect('/profile') }); - app.get('./login', + app.get('/login', passport.authenticate(config.passport.strategy, { successRedirect: '/', - failureRedirect: './login' + failureRedirect: '/login' }) ); @@ -86,17 +86,17 @@ module.exports = function (app, config, passport) { } ); - app.get('./profile', function (req, res) { + app.get('/profile', function (req, res) { if (req.isAuthenticated()) { res.render('profile', { user: req.user // useful for view engine, useless for HTML }); } else { - res.redirect('./login'); + res.redirect('/login'); } }); - app.get('./services', function (req, res) { + app.get('/services', function (req, res) { if (req.isAuthenticated()) { async.waterfall([ // get userId by email from userdb @@ -156,21 +156,21 @@ module.exports = function (app, config, passport) { } ]) } else { - res.redirect('./login'); + res.redirect('/login'); } }); - app.get('./security', function (req, res) { + app.get('/security', function (req, res) { if (req.isAuthenticated()) { res.render('security', { user: req.user // useful for view engine, useless for HTML }); } else { - res.redirect('./login'); + res.redirect('/login'); } }); - app.post('./updateProfile', function (req, res) { + app.post('/updateProfile', function (req, res) { var userData = { title: req.body.inputTitle, firstname: req.body.inputFirstname, @@ -195,13 +195,13 @@ module.exports = function (app, config, passport) { }) } } else { - res.redirect('./login'); + res.redirect('/login'); } }); // todo: user registration with captcha - app.post('./changePwd', function (req, res) { + app.post('/changePwd', function (req, res) { if (req.isAuthenticated()) { var currPwd = req.body.inputCurrPwd var newPwd = req.body.inputNewPwd @@ -210,7 +210,7 @@ module.exports = function (app, config, passport) { // Load hashed passwd from DB. dbconn.user.query('SELECT password FROM user WHERE email="'+req.user.email+'"', function (err, rows, fields) { if (err) { - res.redirect('./500') + res.redirect('/500') throw err } var userPwd = rows[0].password @@ -218,16 +218,16 @@ module.exports = function (app, config, passport) { // check if the password is correct bcrypt.compare(currPwd, userPwd, function(err, isMatch) { if (err) { - res.redirect('./500') + res.redirect('/500') throw err } else if (!isMatch) { req.flash('error', "Sorry, your password was incorrect. Please double-check your password.") - res.redirect('./security') + res.redirect('/security') } else { if ( newPwd != retypePwd ) { req.flash('error', "Passwords do no match. Please make sure you re-type your new password correctly.") - res.redirect('./security') + res.redirect('/security') } else { // update password @@ -242,7 +242,7 @@ module.exports = function (app, config, passport) { req.flash('success', "Pasword updated!") console.log('pasword updated!') } - res.redirect('./security') + res.redirect('/security') }) }); }); @@ -251,11 +251,11 @@ module.exports = function (app, config, passport) { }) }) } else { - res.redirect('./login'); + res.redirect('/login'); } }); - app.get('./forgotPwd', function (req, res) { + app.get('/forgotPwd', function (req, res) { res.render('forgotPwd', { user: req.user }); @@ -284,7 +284,7 @@ module.exports = function (app, config, passport) { text: "" }; - app.post('./forgotPwd', function(req, res, next) { + app.post('/forgotPwd', function(req, res, next) { //methods.currentDate(); /* do something: write down reset password procedure in Technical Req. Document ref: https://meanstackdeveloper.in/implement-reset-password-functionality-in-node-js-express.html @@ -345,16 +345,16 @@ module.exports = function (app, config, passport) { else { req.flash('success', 'An e-mail has been sent to ' + emailAddress + ' with further instructions.'); } - res.redirect('./forgotPwd'); + res.redirect('/forgotPwd'); }); }); - app.get('./reset/:token', function(req, res) { + app.get('/reset/:token', function(req, res) { methods.checkUserToken(req.params.token, function(err, user){ //console.log(user); if (!user) { req.flash('error', 'Password reset token is invalid or has expired.'); - res.redirect('./forgotPwd'); + res.redirect('/forgotPwd'); } else { res.render('reset'); @@ -362,7 +362,7 @@ module.exports = function (app, config, passport) { }); }); - app.post('./reset/:token', function(req, res) { + app.post('/reset/:token', function(req, res) { methods.checkUserToken(req.params.token, function(err, user){ if (user) { // update password @@ -387,10 +387,10 @@ module.exports = function (app, config, passport) { } }); - res.redirect('./login') + res.redirect('/login') }); - app.get('./logout', function (req, res) { + app.get('/logout', function (req, res) { if (req.user == null) { return res.redirect('/'); } @@ -414,7 +414,7 @@ module.exports = function (app, config, passport) { }); // to generate Service Provider's XML metadata - app.get('./saml/metadata', + app.get('/saml/metadata', function(req, res) { res.type('application/xml'); var spMetadata = samlStrategy.generateServiceProviderMetadata(fs.readFileSync(__dirname + '/cert/cert.pem', 'utf8')); -- GitLab From 3408c85b2e555a34b123400464d97b6d7f33b27f Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 14:21:07 +0100 Subject: [PATCH 015/161] set paths to relative instead of global --- routes/routes.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/routes/routes.js b/routes/routes.js index d9ef221b..0d369f37 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -1,7 +1,7 @@ const fs = require('fs'); const SamlStrategy = require('passport-saml').Strategy; -const dbconn = require('/dbconn'); -const methods = require('/methods'); +const dbconn = require('./dbconn'); +const methods = require('./methods'); // pwd encryption const bcrypt = require('bcryptjs'); const saltRounds = 10; -- GitLab From 00fe9e791e34c47786f9336a96b3ea9fe39acccb Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 14:42:41 +0100 Subject: [PATCH 016/161] login path after redirect from idp changed --- routes/routes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/routes.js b/routes/routes.js index 0d369f37..d2875ebd 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -70,7 +70,7 @@ module.exports = function (app, config, passport) { app.get('/login', passport.authenticate(config.passport.strategy, { - successRedirect: '/', + successRedirect: '/account', failureRedirect: '/login' }) ); -- GitLab From 231c1f60d8656998299ae21bae6452190060f05d Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 14:51:45 +0100 Subject: [PATCH 017/161] changed redirect paths relative to account --- routes/routes.js | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/routes/routes.js b/routes/routes.js index d2875ebd..ebaf6150 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -70,19 +70,19 @@ module.exports = function (app, config, passport) { app.get('/login', passport.authenticate(config.passport.strategy, { - successRedirect: '/account', - failureRedirect: '/login' + successRedirect: '/account/', + failureRedirect: '/account/login' }) ); app.post(config.passport.saml.path, passport.authenticate(config.passport.strategy, { - failureRedirect: '/', + failureRedirect: '/account/', failureFlash: true }), function (req, res) { - res.redirect('/'); + res.redirect('/account/'); } ); @@ -92,7 +92,7 @@ module.exports = function (app, config, passport) { user: req.user // useful for view engine, useless for HTML }); } else { - res.redirect('/login'); + res.redirect('/account/login'); } }); @@ -156,7 +156,7 @@ module.exports = function (app, config, passport) { } ]) } else { - res.redirect('/login'); + res.redirect('/account/login'); } }); @@ -166,7 +166,7 @@ module.exports = function (app, config, passport) { user: req.user // useful for view engine, useless for HTML }); } else { - res.redirect('/login'); + res.redirect('/account/login'); } }); @@ -191,11 +191,11 @@ module.exports = function (app, config, passport) { else { req.flash('success', 'Profile updated!'); } - res.redirect('/profile'); + res.redirect('/account/profile'); }) } } else { - res.redirect('/login'); + res.redirect('/account/login'); } }); @@ -210,7 +210,7 @@ module.exports = function (app, config, passport) { // Load hashed passwd from DB. dbconn.user.query('SELECT password FROM user WHERE email="'+req.user.email+'"', function (err, rows, fields) { if (err) { - res.redirect('/500') + res.redirect('/account/500') throw err } var userPwd = rows[0].password @@ -218,16 +218,16 @@ module.exports = function (app, config, passport) { // check if the password is correct bcrypt.compare(currPwd, userPwd, function(err, isMatch) { if (err) { - res.redirect('/500') + res.redirect('/account/500') throw err } else if (!isMatch) { req.flash('error', "Sorry, your password was incorrect. Please double-check your password.") - res.redirect('/security') + res.redirect('/account/security') } else { if ( newPwd != retypePwd ) { req.flash('error', "Passwords do no match. Please make sure you re-type your new password correctly.") - res.redirect('/security') + res.redirect('/account/security') } else { // update password @@ -242,7 +242,7 @@ module.exports = function (app, config, passport) { req.flash('success', "Pasword updated!") console.log('pasword updated!') } - res.redirect('/security') + res.redirect('/account/security') }) }); }); @@ -251,7 +251,7 @@ module.exports = function (app, config, passport) { }) }) } else { - res.redirect('/login'); + res.redirect('/account/login'); } }); @@ -345,7 +345,7 @@ module.exports = function (app, config, passport) { else { req.flash('success', 'An e-mail has been sent to ' + emailAddress + ' with further instructions.'); } - res.redirect('/forgotPwd'); + res.redirect('/account/forgotPwd'); }); }); @@ -354,7 +354,7 @@ module.exports = function (app, config, passport) { //console.log(user); if (!user) { req.flash('error', 'Password reset token is invalid or has expired.'); - res.redirect('/forgotPwd'); + res.redirect('/account/forgotPwd'); } else { res.render('reset'); @@ -387,12 +387,12 @@ module.exports = function (app, config, passport) { } }); - res.redirect('/login') + res.redirect('/account/login') }); app.get('/logout', function (req, res) { if (req.user == null) { - return res.redirect('/'); + return res.redirect('/account/'); } req.user.nameID = req.user.id; -- GitLab From 87b463d3983178dc98d1772fbe5ed7ac39500f84 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 14:53:31 +0100 Subject: [PATCH 018/161] changed redirect paths relative to account --- routes/routes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/routes.js b/routes/routes.js index ebaf6150..8461d3a8 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -64,7 +64,7 @@ module.exports = function (app, config, passport) { }); */ app.get('/', function (req, res) { - res.redirect('/profile') + res.redirect('/account/profile') }); app.get('/login', -- GitLab From 556264442019ee6febd50a723a86813c3f689397 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 14:58:30 +0100 Subject: [PATCH 019/161] changed redirect paths relative to account in virews --- views/forgotPwd.pug | 4 ++-- views/home.pug | 6 +++--- views/profile.pug | 6 +++--- views/reset.pug | 4 ++-- views/security.pug | 10 +++++----- views/services.pug | 4 ++-- 6 files changed, 17 insertions(+), 17 deletions(-) diff --git a/views/forgotPwd.pug b/views/forgotPwd.pug index e2893ed9..6e186fb7 100644 --- a/views/forgotPwd.pug +++ b/views/forgotPwd.pug @@ -40,7 +40,7 @@ html(lang="en") for error, i in errors div.alert.alert-danger.alert-dismissible.fade.show #{ error } a(class="close", href="#", data-dismiss="alert", aria-label="close") × - form#forgotForm(method="POST",action="/forgotPwd") + form#forgotForm(method="POST",action="/account/forgotPwd") div(class="form-group row") label(for="email") Email input#inputEmail(name="inputEmail", type="email", class="form-control", placeholder="Email" required) @@ -52,5 +52,5 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="/js/account.js") + script(src="/account/js/account.js") script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file diff --git a/views/home.pug b/views/home.pug index 2c704c1a..285666ec 100644 --- a/views/home.pug +++ b/views/home.pug @@ -3,10 +3,10 @@ extends layout block content if user !== null h1 Hello, #{user.firstName} - a(href="/profile") Profile + a(href="/account/profile") Profile br - a(href="/logout") Logout + a(href="/account/logout") Logout else h1 Welcome br - a(href="/login") Login + a(href="/account/login") Login diff --git a/views/profile.pug b/views/profile.pug index e2800ded..3045fd42 100644 --- a/views/profile.pug +++ b/views/profile.pug @@ -35,8 +35,8 @@ html(lang="en") span#fullname div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") a(class="nav-link" href="#" aria-selected="true") Profile - a(class="nav-link" href="/security" aria-selected="false") Security - a(class="nav-link" href="/services" aria-selected="false") Services + a(class="nav-link" href="/account/security" aria-selected="false") Security + a(class="nav-link" href="/account/services" aria-selected="false") Services div(class="col-sm-9") if successes for success in successes @@ -81,5 +81,5 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="/js/account.js") + script(src="/account//js/account.js") script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file diff --git a/views/reset.pug b/views/reset.pug index 774f9215..1dcb0528 100644 --- a/views/reset.pug +++ b/views/reset.pug @@ -56,6 +56,6 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="/js/account.js") - script(src="/js/generalFunction.js") + script(src="/account/js/account.js") + script(src="/account/js/generalFunction.js") script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file diff --git a/views/security.pug b/views/security.pug index 8d2f9700..42a91adc 100644 --- a/views/security.pug +++ b/views/security.pug @@ -34,9 +34,9 @@ html(lang="en") h5 span#fullname div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/profile" aria-selected="true") Profile + a(class="nav-link" href="/account/profile" aria-selected="true") Profile a(class="nav-link" href="#" aria-selected="false") Security - a(class="nav-link" href="/services" aria-selected="false") Services + a(class="nav-link" href="/account/services" aria-selected="false") Services div(class="col-sm-9") if successes for success in successes @@ -46,7 +46,7 @@ html(lang="en") for error, i in errors div.alert.alert-danger.alert-dismissible.fade.show #{ error } a(class="close", href="#", data-dismiss="alert", aria-label="close") × - form(class="needs-validation", method="post", action="/changePwd" novalidate) + form(class="needs-validation", method="post", action="/account/changePwd" novalidate) div(class="form-group row") label(for="currPwd") Current Password input(id="inputCurrPwd", name="inputCurrPwd", type="password", class="form-control" required) @@ -69,8 +69,8 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="/js/account.js") - script(src="/js/generalFunction.js") + script(src="/account/js/account.js") + script(src="/account/js/generalFunction.js") script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") script. // check input fields diff --git a/views/services.pug b/views/services.pug index a751c928..fdd32a31 100644 --- a/views/services.pug +++ b/views/services.pug @@ -34,8 +34,8 @@ html(lang="en") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/profile" aria-selected="true") Profile - a(class="nav-link" href="/security" aria-selected="false") Security + a(class="nav-link" href="/account/profile" aria-selected="true") Profile + a(class="nav-link" href="/account/security" aria-selected="false") Security a(class="nav-link" href="#" aria-selected="false") Services div(class="col-sm-9") if successes -- GitLab From df14a256c89abed56733a0a7acf9e7dbc5b2c2a9 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Mon, 9 Dec 2019 14:29:45 +0100 Subject: [PATCH 020/161] email text adapted, hostname created from config file --- config/config.js | 1 + routes/routes.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/config/config.js b/config/config.js index 7ab4184f..8bdb6939 100644 --- a/config/config.js +++ b/config/config.js @@ -1,6 +1,7 @@ module.exports = { development: { app: { + hostname: 'm4lab.hft-stuttgart.de', name: 'User Account Management', port: process.env.PORT || 9989 }, diff --git a/routes/routes.js b/routes/routes.js index 8461d3a8..ca2d854e 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -314,7 +314,7 @@ module.exports = function (app, config, passport) { emailSubject = "M4_LAB Password Reset"; emailContent = "Hi User,\n\n"+ "we've received a request to reset your password. If you didn't make the request, just ignore this email.\n\n"+ - "Otherwise, you can reset your password using this link: http://" + req.headers.host + "/reset/" + token + "\n" + + "Otherwise, you can reset your password using this link: https://" + config.app.hostname + "/reset/" + token + "\n" + "This password reset is only valid for 1 hour.\n\n"+ "Thanks,\nM4_LAB Team" -- GitLab From 6813453a25334f6133d66b3e77be156f94e2ea75 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Mon, 9 Dec 2019 14:33:35 +0100 Subject: [PATCH 021/161] email text adapted, hostname created from config file --- config/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.js b/config/config.js index 8bdb6939..22588677 100644 --- a/config/config.js +++ b/config/config.js @@ -1,7 +1,7 @@ module.exports = { development: { app: { - hostname: 'm4lab.hft-stuttgart.de', + hostname: 'm4lab.hft-stuttgart.de/account/', name: 'User Account Management', port: process.env.PORT || 9989 }, -- GitLab From 91ac91fe87acea02edd09450f40f3b020ae1fa33 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Mon, 9 Dec 2019 14:50:28 +0100 Subject: [PATCH 022/161] fix salting error in routes.js --- routes/routes.js | 1 + 1 file changed, 1 insertion(+) diff --git a/routes/routes.js b/routes/routes.js index ca2d854e..7f7598d8 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -5,6 +5,7 @@ const methods = require('./methods'); // pwd encryption const bcrypt = require('bcryptjs'); const saltRounds = 10; +const salt = 64; // salt length // forgot pwd const async = require('async'); const crypto = require('crypto'); -- GitLab From 6f888186835daad45893fde15515e57ac9144a12 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Mon, 9 Dec 2019 14:59:48 +0100 Subject: [PATCH 023/161] api call cd /home/knopkiwg/m4lab/user-account/config --- routes/api.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/routes/api.js b/routes/api.js index d18af65f..901e8de1 100644 --- a/routes/api.js +++ b/routes/api.js @@ -5,7 +5,7 @@ module.exports = function (app) { //console.log(dbconn); //var con = dbconn.connection - app.get('/api/v1/profile', function (req, res) { + app.get('/account/api/v1/profile', function (req, res) { if (req.isAuthenticated()) { // read data based on ID dbconn.user.query('SELECT title, firstname, lastname, email, industry, organisation, speciality FROM user WHERE email="'+req.user.email+'"', function (err, rows, fields) { @@ -13,7 +13,7 @@ module.exports = function (app) { res.send(rows[0]) }) } else { - res.redirect('/'); + res.redirect('/account/'); } }); -- GitLab From f53cb8e1661cf5e864e6d8edc7d6f931d4d31f01 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Mon, 9 Dec 2019 15:02:00 +0100 Subject: [PATCH 024/161] api call redirect fixed --- routes/api.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/api.js b/routes/api.js index 901e8de1..ddedf46c 100644 --- a/routes/api.js +++ b/routes/api.js @@ -5,7 +5,7 @@ module.exports = function (app) { //console.log(dbconn); //var con = dbconn.connection - app.get('/account/api/v1/profile', function (req, res) { + app.get('/api/v1/profile', function (req, res) { if (req.isAuthenticated()) { // read data based on ID dbconn.user.query('SELECT title, firstname, lastname, email, industry, organisation, speciality FROM user WHERE email="'+req.user.email+'"', function (err, rows, fields) { -- GitLab From 31acd6d0c299f2342cb1aec66522db6e100c60db Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Mon, 9 Dec 2019 15:32:56 +0100 Subject: [PATCH 025/161] token reset passwd --- config/config.js | 2 +- routes/routes.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/config/config.js b/config/config.js index 22588677..a64a4226 100644 --- a/config/config.js +++ b/config/config.js @@ -1,7 +1,7 @@ module.exports = { development: { app: { - hostname: 'm4lab.hft-stuttgart.de/account/', + hostname: 'm4lab.hft-stuttgart.de/account', name: 'User Account Management', port: process.env.PORT || 9989 }, diff --git a/routes/routes.js b/routes/routes.js index 7f7598d8..e849589e 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -364,11 +364,12 @@ module.exports = function (app, config, passport) { }); app.post('/reset/:token', function(req, res) { + var newPwd = req.body.inputNewPwd methods.checkUserToken(req.params.token, function(err, user){ if (user) { // update password bcrypt.genSalt(saltRounds, function(err, salt) { - bcrypt.hash(req.params.inputNewPwd, salt, function(err, hash) { + bcrypt.hash(newPwd, salt, function(err, hash) { methods.updatePassword(hash, user.email, function(err){ if (err) { req.flash('error', "Database error: Password cannot be modified.") -- GitLab From eb839e6cb84adc8755d1dbb93a2c27436259a155 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Tue, 10 Dec 2019 09:50:03 +0100 Subject: [PATCH 026/161] headfoot locally included, allows for testing server --- views/forgotPwd.pug | 2 +- views/profile.pug | 4 ++-- views/reset.pug | 2 +- views/security.pug | 2 +- views/services.pug | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/views/forgotPwd.pug b/views/forgotPwd.pug index 6e186fb7..7512f7ad 100644 --- a/views/forgotPwd.pug +++ b/views/forgotPwd.pug @@ -53,4 +53,4 @@ html(lang="en") script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB script(src="/account/js/account.js") - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file + script(src="/js/headfoot.js") \ No newline at end of file diff --git a/views/profile.pug b/views/profile.pug index 3045fd42..3cf17b7d 100644 --- a/views/profile.pug +++ b/views/profile.pug @@ -81,5 +81,5 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="/account//js/account.js") - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file + script(src="/account/js/account.js") + script(src="/js/headfoot.js") \ No newline at end of file diff --git a/views/reset.pug b/views/reset.pug index 1dcb0528..3a917341 100644 --- a/views/reset.pug +++ b/views/reset.pug @@ -58,4 +58,4 @@ html(lang="en") // M4_LAB script(src="/account/js/account.js") script(src="/account/js/generalFunction.js") - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file + script(src="/js/headfoot.js") \ No newline at end of file diff --git a/views/security.pug b/views/security.pug index 42a91adc..ff0fa67a 100644 --- a/views/security.pug +++ b/views/security.pug @@ -71,7 +71,7 @@ html(lang="en") // M4_LAB script(src="/account/js/account.js") script(src="/account/js/generalFunction.js") - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") + script(src="/js/headfoot.js") script. // check input fields 'use strict'; diff --git a/views/services.pug b/views/services.pug index fdd32a31..18e0f8ea 100644 --- a/views/services.pug +++ b/views/services.pug @@ -60,4 +60,4 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file + script(src="/js/headfoot.js") \ No newline at end of file -- GitLab From e32c0fccec7f976b6cfea8367edc97049d52b378 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Tue, 10 Dec 2019 14:05:21 +0100 Subject: [PATCH 027/161] change of header if email is valid --- public/js/account.js | 6 ++++++ routes/routes.js | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/public/js/account.js b/public/js/account.js index 59d74ae8..2b109c6c 100644 --- a/public/js/account.js +++ b/public/js/account.js @@ -23,6 +23,12 @@ $.get( "/api/v1/profile", function(data) { $("#inputIndustry").val(industry); $("#inputOrganisation").val(organisation); $("#inputSpeciality").val(speciality); + + // check for valid email and then change header accordingly: + if(email != ''){ + document.getElementById("navbarDropdown4").innerHTML="Logout"; + document.getElementById("navbarDropdown4").href="/account/logout"; + } }) .done(function() { console.log("done"); diff --git a/routes/routes.js b/routes/routes.js index e849589e..17ce02fb 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -88,7 +88,7 @@ module.exports = function (app, config, passport) { ); app.get('/profile', function (req, res) { - if (req.isAuthenticated()) { + if (req.isAuthenticated()) { res.render('profile', { user: req.user // useful for view engine, useless for HTML }); -- GitLab From 6c5de03f2a413f26da9e09c6d891dbfcff4f4659 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 11:41:08 +0100 Subject: [PATCH 028/161] commit testing --- config/config.js | 4 +- package-lock.json | 3277 +++++++++++---------------------------------- package.json | 12 +- 3 files changed, 794 insertions(+), 2499 deletions(-) diff --git a/config/config.js b/config/config.js index dfcd65ef..819181f1 100644 --- a/config/config.js +++ b/config/config.js @@ -2,6 +2,7 @@ module.exports = { development: { app: { name: 'User Account Management', + hostname: 'm4lab.hft-stuttgart.de/account', port: process.env.PORT || 9989 }, passport: { @@ -14,7 +15,7 @@ module.exports = { } }, database: { - host: 'localhost', // DB host + host: 'transfer.hft-stuttgart.de', // DB host user: 'DBManager', // DB username password: 'Stuttgart2019', // DB password port: 3306, // MySQL port @@ -32,4 +33,3 @@ module.exports = { } } } - diff --git a/package-lock.json b/package-lock.json index ced597fe..7e0b9410 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,11 +31,6 @@ "negotiator": "0.6.2" } }, - "acorn": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", - "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=" - }, "align-text": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", @@ -46,73 +41,46 @@ "repeat-string": "^1.5.2" } }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "requires": { + "string-width": "^2.0.0" + } + }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" + "color-convert": "^1.9.0" } }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", "requires": { - "arr-flatten": "^1.0.1" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - }, "async": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/async/-/async-3.1.0.tgz", "integrity": "sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ==" }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", @@ -150,75 +118,13 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } - }, - "base64-url": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/base64-url/-/base64-url-1.2.1.tgz", - "integrity": "sha1-GZ/WYXAqDnt9yubgaYuwicUvbXg=" - }, "basic-auth": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.0.4.tgz", - "integrity": "sha1-Awk1sB3nyblKgksp8/zLdQ06UpA=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "requires": { + "safe-buffer": "5.1.2" + } }, "bcryptjs": { "version": "2.4.3", @@ -231,25 +137,46 @@ "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==" }, "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==" }, "body-parser": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.15.1.tgz", - "integrity": "sha1-m87vBmm4+LlD8K2M5dlXFr10D9I=", - "requires": { - "bytes": "2.3.0", - "content-type": "~1.0.1", - "debug": "~2.2.0", - "depd": "~1.1.0", - "http-errors": "~1.4.0", - "iconv-lite": "0.4.13", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.1.0", - "raw-body": "~2.1.6", - "type-is": "~1.6.12" + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + } + }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + } } }, "brace-expansion": { @@ -262,48 +189,28 @@ } }, "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" + "fill-range": "^7.0.1" } }, "bytes": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.3.0.tgz", - "integrity": "sha1-1baAoWW2IBc5rLYRVCqrwtjOsHA=" - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, "camelcase": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" }, + "capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" + }, "center-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", @@ -314,59 +221,40 @@ } }, "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" } }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" + }, "cliui": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", @@ -384,19 +272,18 @@ } } }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "color-name": "1.1.3" } }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "concat-map": { "version": "0.0.1", @@ -404,18 +291,16 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "configstore": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-1.4.0.tgz", - "integrity": "sha1-w1eB0FAdJowlxUuLF/YkDopPsCE=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", "requires": { + "dot-prop": "^4.1.0", "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "object-assign": "^4.0.1", - "os-tmpdir": "^1.0.0", - "osenv": "^0.1.0", - "uuid": "^2.0.1", - "write-file-atomic": "^1.1.2", - "xdg-basedir": "^2.0.0" + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" } }, "connect-flash": { @@ -424,17 +309,23 @@ "integrity": "sha1-2GMPJtlaf4UfmVax6MxnMvO2qjA=" }, "constantinople": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz", - "integrity": "sha1-S5RdmTeQe82Y7ldRIsOBdRZUQUE=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz", + "integrity": "sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==", "requires": { - "acorn": "^2.1.0" + "@types/babel-types": "^7.0.0", + "@types/babylon": "^6.16.2", + "babel-types": "^6.26.0", + "babylon": "^6.18.0" } }, "content-disposition": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.1.tgz", - "integrity": "sha1-h0dsamfI2qh+Muh2Ft+IO6f7Bxs=" + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } }, "content-type": { "version": "1.0.4", @@ -460,11 +351,6 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - }, "core-js": { "version": "2.6.10", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.10.tgz", @@ -475,22 +361,47 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, - "crc": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.0.tgz", - "integrity": "sha1-QljjUWE6dO8RU9/LBeggw+lxXX8=" + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } }, "crypto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==" }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" + }, "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "ms": "0.7.1" + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, "decamelize": { @@ -498,11 +409,6 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -516,53 +422,6 @@ "object-keys": "^1.0.12" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } - }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -578,39 +437,33 @@ "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "is-obj": "^1.0.0" } }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "ejs": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-0.8.8.tgz", - "integrity": "sha1-/9xW3MNdApJt1QrRNDm7xUBh1Zg=" + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, "errorhandler": { "version": "1.4.3", @@ -622,37 +475,32 @@ } }, "es-abstract": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz", - "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==", + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.3.tgz", + "integrity": "sha512-WtY7Fx5LiOnSYgF5eg/1T+GONaGmpvpPdCpSnYij+U2gDTL0UPfWrhDw7b2IYb+9NQJsYpCA0wOQvZfsd6YwRw==", "requires": { - "es-to-primitive": "^1.2.0", + "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.0", + "has-symbols": "^1.0.1", "is-callable": "^1.1.4", "is-regex": "^1.0.4", - "object-inspect": "^1.6.0", + "object-inspect": "^1.7.0", "object-keys": "^1.1.1", "string.prototype.trimleft": "^2.1.0", "string.prototype.trimright": "^2.1.0" } }, "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" } }, - "es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=" - }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -669,95 +517,65 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "etag": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz", - "integrity": "sha1-A9MLX2fdbmMtKUXTDWZScxo01dg=" - }, - "event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", - "requires": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "requires": { - "is-posix-bracket": "^0.1.0" - } + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "requires": { - "fill-range": "^2.1.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "express": { - "version": "4.13.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.13.4.tgz", - "integrity": "sha1-PAt288d1kMg0VzkGHsC9O6Bn7CQ=", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "requires": { - "accepts": "~1.2.12", + "accepts": "~1.3.7", "array-flatten": "1.1.1", - "content-disposition": "0.5.1", - "content-type": "~1.0.1", - "cookie": "0.1.5", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", "cookie-signature": "1.0.6", - "debug": "~2.2.0", - "depd": "~1.1.0", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "etag": "~1.7.0", - "finalhandler": "0.4.1", - "fresh": "0.3.0", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", "merge-descriptors": "1.0.1", "methods": "~1.1.2", "on-finished": "~2.3.0", - "parseurl": "~1.3.1", + "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~1.0.10", - "qs": "4.0.0", - "range-parser": "~1.0.3", - "send": "0.13.1", - "serve-static": "~1.10.2", - "type-is": "~1.6.6", - "utils-merge": "1.0.0", - "vary": "~1.0.1" + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "dependencies": { - "accepts": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz", - "integrity": "sha1-5fHzkoxtlf2WVYw27D2dDeSm7Oo=", - "requires": { - "mime-types": "~2.1.6", - "negotiator": "0.5.3" - } - }, "cookie": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.5.tgz", - "integrity": "sha1-armUiksa4hlSzSWIUwpHItQETXw=" - }, - "negotiator": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.5.3.tgz", - "integrity": "sha1-Jp1cR2gQ7JLtvntsLygxY4T5p+g=" - }, - "qs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz", - "integrity": "sha1-wx2bdOwn33XlQ6hseHKO2NRiNgc=" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" } } }, @@ -770,118 +588,68 @@ } }, "express-session": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.13.0.tgz", - "integrity": "sha1-isO1wBiLSDgoUdiCB7jndG77QBE=", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.0.tgz", + "integrity": "sha512-t4oX2z7uoSqATbMfsxWMbNjAL0T5zpvcJCk3Z9wnPPN7ibddhnmDZXHfEcoBMG2ojKXZoCyPMc5FbtK+G7SoDg==", "requires": { - "cookie": "0.2.3", + "cookie": "0.4.0", "cookie-signature": "1.0.6", - "crc": "3.4.0", - "debug": "~2.2.0", - "depd": "~1.1.0", - "on-headers": "~1.0.1", - "parseurl": "~1.3.0", - "uid-safe": "~2.0.0", - "utils-merge": "1.0.0" + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.0", + "uid-safe": "~2.1.5" }, "dependencies": { "cookie": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.2.3.tgz", - "integrity": "sha1-GllTavaFN6IReKATRvh8sFnSrlw=" - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" } } }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "requires": { - "is-extglob": "^1.0.0" - } - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" - }, "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" } }, "finalhandler": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.4.1.tgz", - "integrity": "sha1-haF8bFmpRxfSYtYSMNSw6+PUoU0=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "requires": { - "debug": "~2.2.0", + "debug": "2.6.9", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", "unpipe": "~1.0.0" } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "requires": { - "for-in": "^1.0.1" - } - }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "^0.2.2" - } - }, "fresh": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", - "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8=" - }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, "fs": { "version": "0.0.1-security", @@ -889,675 +657,136 @@ "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" }, "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", - "optional": true, + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", + "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "requires": { + "ini": "^1.3.4" + } + }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" }, "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "inherits": { "version": "2.0.3", - "bundled": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "optional": true + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" } } }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "requires": { - "is-glob": "^2.0.0" - } - }, - "got": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/got/-/got-3.3.1.tgz", - "integrity": "sha1-5dDtSvVfw+701WAHdp2YGSvLLso=", - "requires": { - "duplexify": "^3.2.0", - "infinity-agent": "^2.0.0", - "is-redirect": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "nested-error-stacks": "^1.0.0", - "object-assign": "^3.0.0", - "prepend-http": "^1.0.0", - "read-all-stream": "^3.0.0", - "timed-out": "^2.0.0" - }, - "dependencies": { - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=" - } - } - }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "http-errors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.4.0.tgz", - "integrity": "sha1-bAJC3qaz33r9oVPHEImzHG6Cqr8=", + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { - "inherits": "2.0.1", - "statuses": ">= 1.2.1 < 2" + "safer-buffer": ">= 2.1.2 < 3" } }, - "iconv-lite": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", - "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=" - }, "ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, - "infinity-agent": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/infinity-agent/-/infinity-agent-2.0.3.tgz", - "integrity": "sha1-ReDi/3qesDCyfWK3SzdEt6esQhY=" - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - }, "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "ipaddr.js": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.0.5.tgz", - "integrity": "sha1-X6eM8wG4JceKvDBC2BJyMEnqI8c=" - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - } + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" }, "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "requires": { - "binary-extensions": "^1.0.0" + "binary-extensions": "^2.0.0" } }, "is-buffer": { @@ -1570,12 +799,12 @@ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", "requires": { - "kind-of": "^3.0.2" + "ci-info": "^1.5.0" } }, "is-date-object": { @@ -1583,36 +812,6 @@ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "requires": { - "is-primitive": "^2.0.0" - } - }, "is-expression": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", @@ -1629,30 +828,31 @@ } } }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "requires": { - "number-is-nan": "^1.0.0" + "is-extglob": "^2.1.1" } }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", "requires": { - "is-extglob": "^1.0.0" + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" } }, "is-npm": { @@ -1661,38 +861,23 @@ "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" }, "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "requires": { - "kind-of": "^3.0.2" - } + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } + "path-is-inside": "^1.0.1" } }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" - }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", @@ -1711,36 +896,33 @@ "has": "^1.0.1" } }, + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", "requires": { - "has-symbols": "^1.0.0" + "has-symbols": "^1.0.1" } }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "js-stringify": { "version": "1.0.2", @@ -1756,11 +938,11 @@ } }, "latest-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-1.0.1.tgz", - "integrity": "sha1-cs/Ebj6NG+ZR4eu1Tqn26pbzdLs=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", "requires": { - "package-json": "^1.0.0" + "package-json": "^4.0.0" } }, "lazy-cache": { @@ -1769,92 +951,9 @@ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" }, "lodash": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.2.0.tgz", - "integrity": "sha1-S/UKMkP5rrC6xBpV09WZBnWkYvs=" - }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "requires": { - "lodash._basecopy": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=" - }, - "lodash._bindcallback": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=" - }, - "lodash._createassigner": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", - "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", - "requires": { - "lodash._bindcallback": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash.restparam": "^3.0.0" - } - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=" - }, - "lodash.assign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", - "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", - "requires": { - "lodash._baseassign": "^3.0.0", - "lodash._createassigner": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "lodash.defaults": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-3.1.2.tgz", - "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=", - "requires": { - "lodash.assign": "^3.0.0", - "lodash.restparam": "^3.0.0" - } - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=" + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, "longest": { "version": "1.0.1", @@ -1866,28 +965,22 @@ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=" - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "requires": { - "object-visit": "^1.0.0" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, - "math-random": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", - "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==" + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + } }, "media-typer": { "version": "0.3.0", @@ -1904,30 +997,10 @@ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, "mime": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", - "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { "version": "1.40.0", @@ -1951,53 +1024,26 @@ } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "morgan": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.7.0.tgz", - "integrity": "sha1-6xDKjlDRq+D409rVwCAdBS2YHGI=", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", + "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", "requires": { - "basic-auth": "~1.0.3", - "debug": "~2.2.0", - "depd": "~1.1.0", + "basic-auth": "~2.0.0", + "debug": "2.6.9", + "depd": "~1.1.2", "on-finished": "~2.3.0", "on-headers": "~1.0.1" } }, "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "mysql": { "version": "2.17.1", @@ -2010,64 +1056,15 @@ "sqlstring": "2.3.1" } }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } - }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, - "nested-error-stacks": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz", - "integrity": "sha1-GfYZWRUZ8JZ2mlupqG5u7sgjw88=", - "requires": { - "inherits": "~2.0.1" - } - }, "node-forge": { - "version": "0.2.24", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.2.24.tgz", - "integrity": "sha1-+m+Eb0L6k/Y6CjDJ+/97ThMOCFg=" + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz", + "integrity": "sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw==" }, "nodemailer": { "version": "6.3.1", @@ -2075,20 +1072,30 @@ "integrity": "sha512-j0BsSyaMlyadEDEypK/F+xlne2K5m6wzPYMXS/yxKI0s7jmT1kBx6GEKRVbZmyYfKOsjkeC/TiMVDJBI/w5gMQ==" }, "nodemon": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.9.2.tgz", - "integrity": "sha1-IbPNFX1Ug4M7RzNyyY4XlaTVWXA=", - "requires": { - "chokidar": "^1.4.3", - "debug": "^2.2.0", - "es6-promise": "^3.0.2", - "ignore-by-default": "^1.0.0", - "lodash.defaults": "^3.1.2", - "minimatch": "^3.0.0", - "ps-tree": "^1.0.1", - "touch": "1.0.0", - "undefsafe": "0.0.3", - "update-notifier": "0.5.0" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.1.tgz", + "integrity": "sha512-UC6FVhNLXjbbV4UzaXA3wUdbEkUZzLGgMGzmxvWAex5nzib/jhcSHVFlQODdbuUHq8SnnZ4/EABBAbC3RplvPg==", + "requires": { + "chokidar": "^3.2.2", + "debug": "^3.2.6", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.7", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.2", + "update-notifier": "^2.5.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } } }, "nopt": { @@ -2100,68 +1107,33 @@ } }, "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "requires": { - "remove-trailing-separator": "^1.0.1" + "path-key": "^2.0.0" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "object-inspect": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", - "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, "object.getownpropertydescriptors": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", @@ -2171,30 +1143,6 @@ "es-abstract": "^1.5.1" } }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -2208,51 +1156,20 @@ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "package-json": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-1.2.0.tgz", - "integrity": "sha1-yOysCUInzfdqMWh07QXifMk5oOA=", - "requires": { - "got": "^3.2.0", - "registry-url": "^3.0.0" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" } }, "parseurl": { @@ -2260,11 +1177,6 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, "passport": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/passport/-/passport-0.3.2.tgz", @@ -2275,17 +1187,28 @@ } }, "passport-saml": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/passport-saml/-/passport-saml-0.15.0.tgz", - "integrity": "sha1-fUXAe6r4DY4s+Jg2cTKl5MBTXK0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/passport-saml/-/passport-saml-1.2.0.tgz", + "integrity": "sha512-CU1JOx9FTITF8+vl/G1g7FV6kHWXYzECV3pq3D8K3RIM1MS0efbfQ2hkgDFdoZGdG9DdMH5z8OBW/O8qoXnkLQ==", "requires": { + "debug": "^3.1.0", "passport-strategy": "*", - "q": "1.1.x", - "xml-crypto": "0.8.x", - "xml-encryption": "~0.7", + "q": "^1.5.0", + "xml-crypto": "^1.1.4", + "xml-encryption": "^0.11.0", "xml2js": "0.4.x", - "xmlbuilder": "2.5.x", + "xmlbuilder": "^11.0.0", "xmldom": "0.1.x" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } } }, "passport-strategy": { @@ -2293,10 +1216,15 @@ "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, "path-parse": { "version": "1.0.6", @@ -2313,63 +1241,44 @@ "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "requires": { - "through": "~2.3" - } - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "^2.0.0" - } + "picomatch": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz", + "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==" }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" }, "prepend-http": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "proxy-addr": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.10.tgz", - "integrity": "sha1-DUCoL4Afw1VWfS7LZe/j8HfxIcU=", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", "requires": { - "forwarded": "~0.1.0", - "ipaddr.js": "1.0.5" + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.0" } }, - "ps-tree": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", - "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", - "requires": { - "event-stream": "=3.3.4" - } + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "pstree.remy": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.7.tgz", + "integrity": "sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A==" }, "pug": { "version": "2.0.4", @@ -2575,57 +1484,34 @@ "integrity": "sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA==" }, "q": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/q/-/q-1.1.2.tgz", - "integrity": "sha1-Y1fikSBnAdmfGXq4TlforRlvKok=" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" }, "qs": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.1.0.tgz", - "integrity": "sha1-7B0WJrJCeNmfD99FSeUk4k7O6yY=" + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" }, - "randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } + "random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" }, "range-parser": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz", - "integrity": "sha1-aHKCNTXGkuLCoBA4Jq/YLC4P8XU=" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", - "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "requires": { - "bytes": "2.4.0", - "iconv-lite": "0.4.13", + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", - "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=" - } } }, "rc": { @@ -2637,338 +1523,49 @@ "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } - } - }, - "read-all-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", - "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", - "requires": { - "pinkie-promise": "^2.0.0", - "readable-stream": "^2.0.0" } }, "readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - } - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "extglob": { + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" } } }, + "readdirp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "requires": { + "picomatch": "^2.0.4" + } + }, "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "registry-auth-token": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" } }, "registry-url": { @@ -2979,29 +1576,11 @@ "rc": "^1.0.1" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" - }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, - "repeating": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", - "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", - "requires": { - "is-finite": "^1.0.0" - } - }, "resolve": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", @@ -3010,16 +1589,6 @@ "path-parse": "^1.0.6" } }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, "right-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", @@ -3033,13 +1602,10 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "requires": { - "ret": "~0.1.10" - } + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sax": { "version": "1.2.4", @@ -3060,294 +1626,83 @@ } }, "send": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.13.1.tgz", - "integrity": "sha1-ow1fTILIqbrprQCh2bG9vm8Zntc=", + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "requires": { - "debug": "~2.2.0", - "depd": "~1.1.0", + "debug": "2.6.9", + "depd": "~1.1.2", "destroy": "~1.0.4", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "etag": "~1.7.0", - "fresh": "0.3.0", - "http-errors": "~1.3.1", - "mime": "1.3.4", - "ms": "0.7.1", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", "on-finished": "~2.3.0", - "range-parser": "~1.0.3", - "statuses": "~1.2.1" + "range-parser": "~1.2.1", + "statuses": "~1.5.0" }, "dependencies": { - "http-errors": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", - "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=", - "requires": { - "inherits": "~2.0.1", - "statuses": "1" - } - }, - "statuses": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz", - "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg=" + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" } } }, "serve-static": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.10.3.tgz", - "integrity": "sha1-zlpuzTEB/tXsCYJ9rCKpwpv7BTU=", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "requires": { + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.1", - "send": "0.13.2" - }, - "dependencies": { - "http-errors": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", - "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=", - "requires": { - "inherits": "~2.0.1", - "statuses": "1" - } - }, - "send": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.13.2.tgz", - "integrity": "sha1-dl52B8gFVFK7pvCwUllTUJhgNt4=", - "requires": { - "debug": "~2.2.0", - "depd": "~1.1.0", - "destroy": "~1.0.4", - "escape-html": "~1.0.3", - "etag": "~1.7.0", - "fresh": "0.3.0", - "http-errors": "~1.3.1", - "mime": "1.3.4", - "ms": "0.7.1", - "on-finished": "~2.3.0", - "range-parser": "~1.0.3", - "statuses": "~1.2.1" - } - }, - "statuses": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz", - "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg=" - } - } - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } + "parseurl": "~1.3.3", + "send": "0.17.1" } }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "requires": { - "kind-of": "^3.2.0" - } + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "shebang-regex": "^1.0.0" } }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" - }, - "split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", - "requires": { - "through": "2" - } + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "requires": { - "extend-shallow": "^3.0.0" - } + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "sqlstring": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, - "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", - "requires": { - "duplexer": "~0.1.1" - } - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" - }, - "string-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", - "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=", + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { - "strip-ansi": "^3.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "string.prototype.trimleft": { @@ -3377,85 +1732,71 @@ } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^3.0.0" } }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "requires": { + "execa": "^0.7.0" + } }, "timed-out": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-2.0.0.tgz", - "integrity": "sha1-84sK6B03R9YoAB9B2vxlKs5nHAo=" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" }, "to-fast-properties": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - } - } + "is-number": "^7.0.0" } }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, "token-stream": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=" }, "touch": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-1.0.0.tgz", - "integrity": "sha1-RJy+LbrlqMgDjjDXH6D/RklHxN4=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", "requires": { "nopt": "~1.0.10" } @@ -3493,27 +1834,27 @@ "optional": true }, "uid-safe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.0.0.tgz", - "integrity": "sha1-p/PGymSh9qXQTsDvPkw9U2cxcTc=", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", "requires": { - "base64-url": "1.2.1" + "random-bytes": "~1.0.0" } }, "undefsafe": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-0.0.3.tgz", - "integrity": "sha1-7Mo6A+VrmvFzhbqsgSrIO5lKli8=" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", + "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", + "requires": { + "debug": "^2.2.0" + } }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" + "crypto-random-string": "^1.0.0" } }, "unpipe": { @@ -3521,70 +1862,35 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" }, "update-notifier": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-0.5.0.tgz", - "integrity": "sha1-B7XcIGazYnqztPUwEw9+3doHpMw=", - "requires": { - "chalk": "^1.0.0", - "configstore": "^1.0.0", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", "is-npm": "^1.0.0", - "latest-version": "^1.0.0", - "repeating": "^1.1.2", + "latest-version": "^3.0.0", "semver-diff": "^2.0.0", - "string-length": "^1.0.0" + "xdg-basedir": "^3.0.0" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "requires": { + "prepend-http": "^1.0.1" + } }, "util-deprecate": { "version": "1.0.2", @@ -3601,85 +1907,84 @@ } }, "utils-merge": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", - "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=" - }, - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "vary": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.0.1.tgz", - "integrity": "sha1-meSYFWaihhGN+yuBc1ffeZM3bRA=" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, "void-elements": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "requires": { + "string-width": "^2.1.1" + } + }, "window-size": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, "write-file-atomic": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "requires": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", - "slide": "^1.1.5" + "signal-exit": "^3.0.2" } }, "xdg-basedir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", - "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", - "requires": { - "os-homedir": "^1.0.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" }, "xml-crypto": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/xml-crypto/-/xml-crypto-0.8.5.tgz", - "integrity": "sha1-K7z7PrM/OoKiGLgiv2craxwg5Tg=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/xml-crypto/-/xml-crypto-1.4.0.tgz", + "integrity": "sha512-K8FRdRxICVulK4WhiTUcJrRyAIJFPVOqxfurA3x/JlmXBTxy+SkEENF6GeRt7p/rB6WSOUS9g0gXNQw5n+407g==", "requires": { - "xmldom": "=0.1.19", - "xpath.js": ">=0.0.3" - }, - "dependencies": { - "xmldom": { - "version": "0.1.19", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.19.tgz", - "integrity": "sha1-Yx/Ad3bv2EEYvyUXGzftTQdaCrw=" - } + "xmldom": "0.1.27", + "xpath": "0.0.27" } }, "xml-encryption": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/xml-encryption/-/xml-encryption-0.7.4.tgz", - "integrity": "sha1-Qnkexk1VbSRV3LnaClQSNmWsZcc=", + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/xml-encryption/-/xml-encryption-0.11.2.tgz", + "integrity": "sha512-jVvES7i5ovdO7N+NjgncA326xYKjhqeAnnvIgRnY7ROLCfFqEDLwP0Sxp/30SHG0AXQV1048T5yinOFyvwGFzg==", "requires": { - "async": "~0.2.7", - "ejs": "~0.8.3", - "node-forge": "0.2.24", + "async": "^2.1.5", + "ejs": "^2.5.6", + "node-forge": "^0.7.0", "xmldom": "~0.1.15", - "xpath": "0.0.5" + "xpath": "0.0.27" }, "dependencies": { "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } } } }, @@ -3691,22 +1996,12 @@ "sax": ">=0.6.0", "util.promisify": "~1.0.0", "xmlbuilder": "~11.0.0" - }, - "dependencies": { - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" - } } }, "xmlbuilder": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-2.5.2.tgz", - "integrity": "sha1-WriPxQirL/FIcwELVhY9P5KxkyU=", - "requires": { - "lodash": "~3.2.0" - } + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" }, "xmldom": { "version": "0.1.27", @@ -3714,14 +2009,14 @@ "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" }, "xpath": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.5.tgz", - "integrity": "sha1-RUA29u8PPfWvXUukoRn7dWdLPmw=" + "version": "0.0.27", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz", + "integrity": "sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==" }, - "xpath.js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xpath.js/-/xpath.js-1.1.0.tgz", - "integrity": "sha512-jg+qkfS4K8E7965sqaUl8mRngXiKb3WZGfONgE18pr03FUQiuSV6G+Ej4tS55B+rIQSFEIw3phdVAQ4pPqNWfQ==" + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yargs": { "version": "3.10.0", diff --git a/package.json b/package.json index f7d2d9b9..93d0dbbf 100644 --- a/package.json +++ b/package.json @@ -23,20 +23,20 @@ "dependencies": { "async": "^3.1.0", "bcryptjs": "^2.4.3", - "body-parser": "1.15.1", + "body-parser": "^1.19.0", "cookie-parser": "1.4.3", "crypto": "^1.0.1", "errorhandler": "1.4.3", - "express": "4.13.4", + "express": "^4.17.1", "express-flash": "0.0.2", - "express-session": "1.13.0", + "express-session": "^1.17.0", "fs": "0.0.1-security", - "morgan": "1.7.0", + "morgan": "^1.9.1", "mysql": "^2.17.1", "nodemailer": "^6.3.1", - "nodemon": "1.9.2", + "nodemon": "^2.0.1", "passport": "0.3.2", - "passport-saml": "0.15.0", + "passport-saml": "^1.2.0", "pug": "^2.0.4" }, "devDependencies": {}, -- GitLab From 637b660a16d204adebf37caa07066f7f81faff4c Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 11:42:15 +0100 Subject: [PATCH 029/161] [cicd] gitlab.yml --- .gitlab-ci.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 00000000..4bd8c811 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,10 @@ +pages-devel: + stage: deploy + script: + - npm install + - pm2 restart ./app.js + - pm2 save + tags: + - testing + only: + -devel \ No newline at end of file -- GitLab From 50047af79d011b4ddf82dbb2dee936ce1413e9c8 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 11:43:15 +0100 Subject: [PATCH 030/161] [cicd] gitlab.yml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4bd8c811..8e25672c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,4 +7,4 @@ pages-devel: tags: - testing only: - -devel \ No newline at end of file + - devel \ No newline at end of file -- GitLab From f1e37e81e65629d22364bb872cea383b44856979 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 13:24:35 +0100 Subject: [PATCH 031/161] fixed cicd pipeline pm2 restart --- .gitlab-ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8e25672c..2c373532 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,7 +2,8 @@ pages-devel: stage: deploy script: - npm install - - pm2 restart ./app.js + - pm2 delete ./app.js + - pm2 start ./app.js - pm2 save tags: - testing -- GitLab From 4dcab6ef8a347aa5f197ac55b1c55d96e86f15ab Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 13:29:37 +0100 Subject: [PATCH 032/161] [cicd] fixed error on empty delete --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2c373532..b6bfd87b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,7 +2,7 @@ pages-devel: stage: deploy script: - npm install - - pm2 delete ./app.js + - pm2 delete --silent ./app.js - pm2 start ./app.js - pm2 save tags: -- GitLab From a24d1138cda3c98b9bae4eec1dab5d8aa7a00bef Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 13:43:21 +0100 Subject: [PATCH 033/161] [saml] set SP identifier to testing sp --- config/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.js b/config/config.js index 819181f1..497c356e 100644 --- a/config/config.js +++ b/config/config.js @@ -10,7 +10,7 @@ module.exports = { saml: { path: process.env.SAML_PATH || '/saml/SSO', entryPoint: process.env.SAML_ENTRY_POINT || 'https://transfer.hft-stuttgart.de/idp/saml2/idp/SSOService.php', - issuer: 'sp-account.m4lab.hft-stuttgart.de', + issuer: 'sp-account-testing.m4lab.hft-stuttgart.de', logoutUrl: 'https://transfer.hft-stuttgart.de/idp/saml2/idp/SingleLogoutService.php' } }, -- GitLab From 2caca8e11eae484d7fb054af795a9d51ecacc0e6 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 13:58:45 +0100 Subject: [PATCH 034/161] [cicd] fixed return code pm2 delete -s --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b6bfd87b..ec6a8fc5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,8 +2,8 @@ pages-devel: stage: deploy script: - npm install - - pm2 delete --silent ./app.js - - pm2 start ./app.js + - pm2 delete --silent account || : + - pm2 start ./app.js --name=account - pm2 save tags: - testing -- GitLab From 6ace7097d1a20711837beec06c6b4178325f7fbe Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 13:59:18 +0100 Subject: [PATCH 035/161] [cicd] fixed return code pm2 delete -s --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ec6a8fc5..45519e22 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,7 +2,7 @@ pages-devel: stage: deploy script: - npm install - - pm2 delete --silent account || : + - "pm2 delete --silent account || :" - pm2 start ./app.js --name=account - pm2 save tags: -- GitLab From 718d94b9d7028442893b0b248c85cffd5195be05 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 14:42:41 +0100 Subject: [PATCH 036/161] login path after redirect from idp changed --- routes/routes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/routes.js b/routes/routes.js index 7077fc1d..682cab25 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -103,7 +103,7 @@ module.exports = function (app, config, passport) { app.get('/login', passport.authenticate(config.passport.strategy, { - successRedirect: '/', + successRedirect: '/account', failureRedirect: '/login' }) ); -- GitLab From 4a915b19ed20622700f017df1c6df683d793661c Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 14:51:45 +0100 Subject: [PATCH 037/161] changed redirect paths relative to account --- routes/routes.js | 79 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 67 insertions(+), 12 deletions(-) diff --git a/routes/routes.js b/routes/routes.js index 682cab25..e3d7e1d2 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -103,14 +103,14 @@ module.exports = function (app, config, passport) { app.get('/login', passport.authenticate(config.passport.strategy, { - successRedirect: '/account', - failureRedirect: '/login' + successRedirect: '/account/', + failureRedirect: '/account/login' }) ); app.get('/logout', function (req, res) { if (req.user == null) { - return res.redirect('/'); + return res.redirect('/account/'); } req.user.nameID = req.user.id; @@ -141,7 +141,7 @@ module.exports = function (app, config, passport) { } }) } else { - res.redirect('/login'); + res.redirect('/account/login'); } }); @@ -205,7 +205,7 @@ module.exports = function (app, config, passport) { } ]) } else { - res.redirect('/login'); + res.redirect('/account/login'); } }); @@ -216,7 +216,7 @@ module.exports = function (app, config, passport) { user: req.user // useful for view engine, useless for HTML }); } else { - res.redirect('/login'); + res.redirect('/account/login'); } }); @@ -241,11 +241,11 @@ module.exports = function (app, config, passport) { else { req.flash('success', 'Profile updated!'); } - res.redirect('/profile'); + res.redirect('/account/profile'); }) } } else { - res.redirect('/login'); + res.redirect('/account/login'); } }); @@ -254,6 +254,7 @@ module.exports = function (app, config, passport) { var currPwd = req.body.inputCurrPwd var newPwd = req.body.inputNewPwd var retypePwd = req.body.inputConfirm +<<<<<<< 718d94b9d7028442893b0b248c85cffd5195be05 methods.getUserIdByEmail(req.user.email, function(userId, err) { if (!err) { @@ -262,6 +263,48 @@ module.exports = function (app, config, passport) { if (err) { res.redirect('/500') throw err +======= + + // Load hashed passwd from DB. + dbconn.user.query('SELECT password FROM user WHERE email="'+req.user.email+'"', function (err, rows, fields) { + if (err) { + res.redirect('/account/500') + throw err + } + var userPwd = rows[0].password + + // check if the password is correct + bcrypt.compare(currPwd, userPwd, function(err, isMatch) { + if (err) { + res.redirect('/account/500') + throw err + } + else if (!isMatch) { + req.flash('error', "Sorry, your password was incorrect. Please double-check your password.") + res.redirect('/account/security') + } else { + if ( newPwd != retypePwd ) { + req.flash('error', "Passwords do no match. Please make sure you re-type your new password correctly.") + res.redirect('/account/security') + } + else { + // update password + bcrypt.genSalt(saltRounds, function(err, salt) { + bcrypt.hash(newPwd, salt, function(err, hash) { + methods.updatePassword(hash, req.user.email, function(err){ + if (err) { + req.flash('error', "Database error: Password cannot be modified.") + throw err + } + else { + req.flash('success', "Pasword updated!") + console.log('pasword updated!') + } + res.redirect('/account/security') + }) + }); + }); +>>>>>>> changed redirect paths relative to account } var userPwd = rows[0].password @@ -305,11 +348,17 @@ module.exports = function (app, config, passport) { } }) }) +<<<<<<< 718d94b9d7028442893b0b248c85cffd5195be05 } }) } else { res.redirect('/login'); +======= + }) + } else { + res.redirect('/account/login'); +>>>>>>> changed redirect paths relative to account } }); @@ -375,7 +424,7 @@ module.exports = function (app, config, passport) { else { req.flash('success', 'An e-mail has been sent to ' + emailAddress + ' with further instructions.'); } - res.redirect('/forgotPwd'); + res.redirect('/account/forgotPwd'); }); }); @@ -384,7 +433,7 @@ module.exports = function (app, config, passport) { //console.log(user); if (!user) { req.flash('error', 'Password reset token is invalid or has expired.'); - res.redirect('/forgotPwd'); + res.redirect('/account/forgotPwd'); } else { res.render('reset'); @@ -422,9 +471,10 @@ module.exports = function (app, config, passport) { } }); - res.redirect('/login') + res.redirect('/account/login') }); +<<<<<<< 718d94b9d7028442893b0b248c85cffd5195be05 // todo: user registration with captcha app.get('/registration', function(req, res) { res.render('registration') @@ -446,6 +496,11 @@ module.exports = function (app, config, passport) { industry: req.body.inputIndustry, speciality: req.body.inputSpeciality, createdDate: curDate.toISOString().slice(0,10) +======= + app.get('/logout', function (req, res) { + if (req.user == null) { + return res.redirect('/account/'); +>>>>>>> changed redirect paths relative to account } // encrypt password bcrypt.genSalt(saltRounds, function(err, salt) { @@ -481,4 +536,4 @@ module.exports = function (app, config, passport) { }) }) -}; \ No newline at end of file +}; -- GitLab From 45bbab2b386c98e5d2ea481b59357ab41b28bd9b Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 14:53:31 +0100 Subject: [PATCH 038/161] changed redirect paths relative to account --- routes/routes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/routes.js b/routes/routes.js index e3d7e1d2..fd8a5453 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -97,7 +97,7 @@ module.exports = function (app, config, passport) { // ======== APP ROUTES ==================== app.get('/', function (req, res) { - res.redirect('/profile') + res.redirect('/account/profile') }); app.get('/login', -- GitLab From b3c18b99f0648241aa2946bd02bf64e64e0c08b7 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Dec 2019 14:58:30 +0100 Subject: [PATCH 039/161] changed redirect paths relative to account in virews --- views/forgotPwd.pug | 8 ++++++-- views/home.pug | 6 +++--- views/profile.pug | 10 +++++----- views/reset.pug | 4 ++-- views/security.pug | 43 ++++++++++++++++++++----------------------- views/services.pug | 4 ++-- 6 files changed, 38 insertions(+), 37 deletions(-) diff --git a/views/forgotPwd.pug b/views/forgotPwd.pug index 58d66001..0a50e908 100644 --- a/views/forgotPwd.pug +++ b/views/forgotPwd.pug @@ -40,7 +40,7 @@ html(lang="en") for error, i in errors div.alert.alert-danger.alert-dismissible.fade.show #{ error } a(class="close", href="#", data-dismiss="alert", aria-label="close") × - form#forgotForm(class="form-signin", method="POST", action="/forgotPwd") + form#forgotForm(class="form-signin", method="POST", action="/account/forgotPwd") img(src="https://transfer.hft-stuttgart.de/images/demo/m4lab_logo.jpg", class="img-responsive center-block", width="185", height="192") div(class="form-row") input#inputEmail(name="inputEmail", type="email", class="form-control", placeholder="Email" required) @@ -53,4 +53,8 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file +<<<<<<< 45bbab2b386c98e5d2ea481b59357ab41b28bd9b +======= + script(src="/account/js/account.js") +>>>>>>> changed redirect paths relative to account in virews + script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") diff --git a/views/home.pug b/views/home.pug index 2c704c1a..285666ec 100644 --- a/views/home.pug +++ b/views/home.pug @@ -3,10 +3,10 @@ extends layout block content if user !== null h1 Hello, #{user.firstName} - a(href="/profile") Profile + a(href="/account/profile") Profile br - a(href="/logout") Logout + a(href="/account/logout") Logout else h1 Welcome br - a(href="/login") Login + a(href="/account/login") Login diff --git a/views/profile.pug b/views/profile.pug index 3d329f52..e4034308 100644 --- a/views/profile.pug +++ b/views/profile.pug @@ -35,9 +35,9 @@ html(lang="en") span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") a(class="nav-link" href="#" aria-selected="true") Profile - a(class="nav-link" href="/security" aria-selected="false") Security - a(class="nav-link" href="/services" aria-selected="false") Services - div(class="col-sm-8") + a(class="nav-link" href="/account/security" aria-selected="false") Security + a(class="nav-link" href="/account/services" aria-selected="false") Services + div(class="col-sm-9") if successes for success in successes div.alert.alert-success.alert-dismissible #{ success } @@ -87,5 +87,5 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - //script(src="/js/account.js") - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file + script(src="/account//js/account.js") + script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") diff --git a/views/reset.pug b/views/reset.pug index 774f9215..1dcb0528 100644 --- a/views/reset.pug +++ b/views/reset.pug @@ -56,6 +56,6 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="/js/account.js") - script(src="/js/generalFunction.js") + script(src="/account/js/account.js") + script(src="/account/js/generalFunction.js") script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file diff --git a/views/security.pug b/views/security.pug index 0bdea4cf..cd8f101a 100644 --- a/views/security.pug +++ b/views/security.pug @@ -37,9 +37,9 @@ html(lang="en") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/profile" aria-selected="true") Profile + a(class="nav-link" href="/account/profile" aria-selected="true") Profile a(class="nav-link" href="#" aria-selected="false") Security - a(class="nav-link" href="/services" aria-selected="false") Services + a(class="nav-link" href="/account/services" aria-selected="false") Services div(class="col-sm-9") if successes for success in successes @@ -49,24 +49,21 @@ html(lang="en") for error, i in errors div.alert.alert-danger.alert-dismissible.fade.show #{ error } a(class="close", href="#", data-dismiss="alert", aria-label="close") × - form(class="needs-validation", method="post", action="/changePwd" novalidate) - div(class="form-row") - div(class='form-group col-md-6') - label(for="currPwd") Current Password - input(id="inputCurrPwd", name="inputCurrPwd", type="password", class="form-control" required) - div(class="invalid-feedback") Please fill in this field. - div(class="form-row") - div(class='form-group col-md-6') - label(for="newPwd") New Password - input#inputNewPwd(name="inputNewPwd", type="password", class="form-control" required) - span#recommendation(class='warning') - div(class="invalid-feedback") Please fill in this field. - div(class="form-row") - div(class='form-group col-md-6') - label(for="confirm") Confirm New Password - input#inputConfirm(name="inputConfirm", type="password", class="form-control" required) - span#message(class='warning') - div(class="invalid-feedback") Please fill in this field. + form(class="needs-validation", method="post", action="/account/changePwd" novalidate) + div(class="form-group row") + label(for="currPwd") Current Password + input(id="inputCurrPwd", name="inputCurrPwd", type="password", class="form-control" required) + div(class="invalid-feedback") Please fill in this field. + div(class="form-group row") + label(for="newPwd") New Password + input#inputNewPwd(name="inputNewPwd", type="password", class="form-control" required) + span#recommendation + div(class="invalid-feedback") Please fill in this field. + div(class="form-group row") + label(for="confirm") Confirm New Password + input#inputConfirm(name="inputConfirm", type="password", class="form-control" required) + span#message + div(class="invalid-feedback") Please fill in this field. input#updateBtn(type="submit", class="btn btn-primary", value="Update Password" disabled) // jQuery @@ -75,8 +72,8 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="/js/generalFunction.js") - script(src="/js/security.js") + script(src="/account/js/account.js") + script(src="/account/js/generalFunction.js") script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") script. // check input fields @@ -94,4 +91,4 @@ html(lang="en") form.classList.add('was-validated'); }, false); }); - }, false); \ No newline at end of file + }, false); diff --git a/views/services.pug b/views/services.pug index a751c928..fdd32a31 100644 --- a/views/services.pug +++ b/views/services.pug @@ -34,8 +34,8 @@ html(lang="en") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/profile" aria-selected="true") Profile - a(class="nav-link" href="/security" aria-selected="false") Security + a(class="nav-link" href="/account/profile" aria-selected="true") Profile + a(class="nav-link" href="/account/security" aria-selected="false") Security a(class="nav-link" href="#" aria-selected="false") Services div(class="col-sm-9") if successes -- GitLab From b14f1c9303df621ac2ca77e810dcc793c4899317 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Mon, 9 Dec 2019 14:29:45 +0100 Subject: [PATCH 040/161] email text adapted, hostname created from config file --- config/config.js | 1 + routes/routes.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/config/config.js b/config/config.js index 497c356e..763c0be7 100644 --- a/config/config.js +++ b/config/config.js @@ -1,6 +1,7 @@ module.exports = { development: { app: { + hostname: 'm4lab.hft-stuttgart.de', name: 'User Account Management', hostname: 'm4lab.hft-stuttgart.de/account', port: process.env.PORT || 9989 diff --git a/routes/routes.js b/routes/routes.js index fd8a5453..c4755966 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -391,7 +391,7 @@ module.exports = function (app, config, passport) { emailSubject = "M4_LAB Password Reset"; emailContent = "Hi User,\n\n"+ "we've received a request to reset your password. If you didn't make the request, just ignore this email.\n\n"+ - "Otherwise, you can reset your password using this link: http://" + req.headers.host + "/reset/" + token + "\n" + + "Otherwise, you can reset your password using this link: https://" + config.app.hostname + "/reset/" + token + "\n" + "This password reset is only valid for 1 hour.\n\n"+ "Thanks,\nM4_LAB Team" -- GitLab From d2539c5dcf9eea83550ed8eb16933e6368c39ace Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Mon, 9 Dec 2019 14:33:35 +0100 Subject: [PATCH 041/161] email text adapted, hostname created from config file --- config/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.js b/config/config.js index 763c0be7..04327b8e 100644 --- a/config/config.js +++ b/config/config.js @@ -1,7 +1,7 @@ module.exports = { development: { app: { - hostname: 'm4lab.hft-stuttgart.de', + hostname: 'm4lab.hft-stuttgart.de/account/', name: 'User Account Management', hostname: 'm4lab.hft-stuttgart.de/account', port: process.env.PORT || 9989 -- GitLab From faba19a965c79e32757b354d0acdb7cfa0dd694d Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Mon, 9 Dec 2019 14:50:28 +0100 Subject: [PATCH 042/161] fix salting error in routes.js --- routes/routes.js | 62 ++++-------------------------------------------- 1 file changed, 4 insertions(+), 58 deletions(-) diff --git a/routes/routes.js b/routes/routes.js index c4755966..b777a4d7 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -3,8 +3,9 @@ const SamlStrategy = require('passport-saml').Strategy const dbconn = require('./dbconn') const methods = require('./methods') // pwd encryption -const bcrypt = require('bcryptjs') -const saltRounds = 10 +const bcrypt = require('bcryptjs'); +const saltRounds = 10; +const salt = 64; // salt length // forgot pwd const async = require('async') const crypto = require('crypto') @@ -254,57 +255,14 @@ module.exports = function (app, config, passport) { var currPwd = req.body.inputCurrPwd var newPwd = req.body.inputNewPwd var retypePwd = req.body.inputConfirm -<<<<<<< 718d94b9d7028442893b0b248c85cffd5195be05 methods.getUserIdByEmail(req.user.email, function(userId, err) { if (!err) { // Load hashed passwd from DB dbconn.user.query('SELECT password FROM credential WHERE user_id='+userId, function (err, rows, fields) { if (err) { - res.redirect('/500') + res.redirect('/account/500') throw err -======= - - // Load hashed passwd from DB. - dbconn.user.query('SELECT password FROM user WHERE email="'+req.user.email+'"', function (err, rows, fields) { - if (err) { - res.redirect('/account/500') - throw err - } - var userPwd = rows[0].password - - // check if the password is correct - bcrypt.compare(currPwd, userPwd, function(err, isMatch) { - if (err) { - res.redirect('/account/500') - throw err - } - else if (!isMatch) { - req.flash('error', "Sorry, your password was incorrect. Please double-check your password.") - res.redirect('/account/security') - } else { - if ( newPwd != retypePwd ) { - req.flash('error', "Passwords do no match. Please make sure you re-type your new password correctly.") - res.redirect('/account/security') - } - else { - // update password - bcrypt.genSalt(saltRounds, function(err, salt) { - bcrypt.hash(newPwd, salt, function(err, hash) { - methods.updatePassword(hash, req.user.email, function(err){ - if (err) { - req.flash('error', "Database error: Password cannot be modified.") - throw err - } - else { - req.flash('success', "Pasword updated!") - console.log('pasword updated!') - } - res.redirect('/account/security') - }) - }); - }); ->>>>>>> changed redirect paths relative to account } var userPwd = rows[0].password @@ -348,17 +306,11 @@ module.exports = function (app, config, passport) { } }) }) -<<<<<<< 718d94b9d7028442893b0b248c85cffd5195be05 } }) } else { - res.redirect('/login'); -======= - }) - } else { res.redirect('/account/login'); ->>>>>>> changed redirect paths relative to account } }); @@ -474,7 +426,6 @@ module.exports = function (app, config, passport) { res.redirect('/account/login') }); -<<<<<<< 718d94b9d7028442893b0b248c85cffd5195be05 // todo: user registration with captcha app.get('/registration', function(req, res) { res.render('registration') @@ -496,11 +447,6 @@ module.exports = function (app, config, passport) { industry: req.body.inputIndustry, speciality: req.body.inputSpeciality, createdDate: curDate.toISOString().slice(0,10) -======= - app.get('/logout', function (req, res) { - if (req.user == null) { - return res.redirect('/account/'); ->>>>>>> changed redirect paths relative to account } // encrypt password bcrypt.genSalt(saltRounds, function(err, salt) { -- GitLab From f9b92de8915cd2f322329167b9c3c9a13e10b2be Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Mon, 9 Dec 2019 14:59:48 +0100 Subject: [PATCH 043/161] api call cd /home/knopkiwg/m4lab/user-account/config --- routes/api.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/routes/api.js b/routes/api.js index d18af65f..901e8de1 100644 --- a/routes/api.js +++ b/routes/api.js @@ -5,7 +5,7 @@ module.exports = function (app) { //console.log(dbconn); //var con = dbconn.connection - app.get('/api/v1/profile', function (req, res) { + app.get('/account/api/v1/profile', function (req, res) { if (req.isAuthenticated()) { // read data based on ID dbconn.user.query('SELECT title, firstname, lastname, email, industry, organisation, speciality FROM user WHERE email="'+req.user.email+'"', function (err, rows, fields) { @@ -13,7 +13,7 @@ module.exports = function (app) { res.send(rows[0]) }) } else { - res.redirect('/'); + res.redirect('/account/'); } }); -- GitLab From e23a1d2d1c4280d6c8d66c87f15905eabbe716db Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Mon, 9 Dec 2019 15:02:00 +0100 Subject: [PATCH 044/161] api call redirect fixed --- routes/api.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/api.js b/routes/api.js index 901e8de1..ddedf46c 100644 --- a/routes/api.js +++ b/routes/api.js @@ -5,7 +5,7 @@ module.exports = function (app) { //console.log(dbconn); //var con = dbconn.connection - app.get('/account/api/v1/profile', function (req, res) { + app.get('/api/v1/profile', function (req, res) { if (req.isAuthenticated()) { // read data based on ID dbconn.user.query('SELECT title, firstname, lastname, email, industry, organisation, speciality FROM user WHERE email="'+req.user.email+'"', function (err, rows, fields) { -- GitLab From 3f8764035d3c20127d3ec5f91c0288b980eceafd Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Mon, 9 Dec 2019 15:32:56 +0100 Subject: [PATCH 045/161] token reset passwd --- config/config.js | 2 +- routes/routes.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/config/config.js b/config/config.js index 04327b8e..bdfbd5a1 100644 --- a/config/config.js +++ b/config/config.js @@ -1,7 +1,7 @@ module.exports = { development: { app: { - hostname: 'm4lab.hft-stuttgart.de/account/', + hostname: 'm4lab.hft-stuttgart.de/account', name: 'User Account Management', hostname: 'm4lab.hft-stuttgart.de/account', port: process.env.PORT || 9989 diff --git a/routes/routes.js b/routes/routes.js index b777a4d7..d4090043 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -394,6 +394,7 @@ module.exports = function (app, config, passport) { }); app.post('/reset/:token', function(req, res) { + var newPwd = req.body.inputNewPwd methods.checkUserToken(req.params.token, function(err, user){ if (user) { // encrypt password -- GitLab From f487c80968646e3c07ccf061186a5be5cc58eb66 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Tue, 10 Dec 2019 09:50:03 +0100 Subject: [PATCH 046/161] headfoot locally included, allows for testing server --- views/forgotPwd.pug | 6 +----- views/profile.pug | 4 ++-- views/reset.pug | 2 +- views/security.pug | 2 +- views/services.pug | 2 +- 5 files changed, 6 insertions(+), 10 deletions(-) diff --git a/views/forgotPwd.pug b/views/forgotPwd.pug index 0a50e908..84ea9340 100644 --- a/views/forgotPwd.pug +++ b/views/forgotPwd.pug @@ -53,8 +53,4 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB -<<<<<<< 45bbab2b386c98e5d2ea481b59357ab41b28bd9b -======= - script(src="/account/js/account.js") ->>>>>>> changed redirect paths relative to account in virews - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") + script(src="/js/headfoot.js") diff --git a/views/profile.pug b/views/profile.pug index e4034308..51d31093 100644 --- a/views/profile.pug +++ b/views/profile.pug @@ -87,5 +87,5 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="/account//js/account.js") - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") + script(src="/account/js/account.js") + script(src="/js/headfoot.js") diff --git a/views/reset.pug b/views/reset.pug index 1dcb0528..3a917341 100644 --- a/views/reset.pug +++ b/views/reset.pug @@ -58,4 +58,4 @@ html(lang="en") // M4_LAB script(src="/account/js/account.js") script(src="/account/js/generalFunction.js") - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file + script(src="/js/headfoot.js") \ No newline at end of file diff --git a/views/security.pug b/views/security.pug index cd8f101a..9908aa1a 100644 --- a/views/security.pug +++ b/views/security.pug @@ -74,7 +74,7 @@ html(lang="en") // M4_LAB script(src="/account/js/account.js") script(src="/account/js/generalFunction.js") - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") + script(src="/js/headfoot.js") script. // check input fields 'use strict'; diff --git a/views/services.pug b/views/services.pug index fdd32a31..18e0f8ea 100644 --- a/views/services.pug +++ b/views/services.pug @@ -60,4 +60,4 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file + script(src="/js/headfoot.js") \ No newline at end of file -- GitLab From 0b885ec326a35b87fd2085c384324f0247b78247 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Wed, 11 Dec 2019 10:42:28 +0100 Subject: [PATCH 047/161] urls adapted --- config/config.js | 4 ++-- routes/routes.js | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/config/config.js b/config/config.js index bdfbd5a1..1d40a39a 100644 --- a/config/config.js +++ b/config/config.js @@ -20,8 +20,8 @@ module.exports = { user: 'DBManager', // DB username password: 'Stuttgart2019', // DB password port: 3306, // MySQL port - dbUser: 'userdb', // User DB - dbProject: 'projectdb' // Project DB + dbUser: 'userDB', // User DB + dbProject: 'projectDB' // Project DB }, mailer: { host: 'mail.hft-stuttgart.de', // hostname diff --git a/routes/routes.js b/routes/routes.js index d4090043..64cfe7b6 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -274,12 +274,12 @@ module.exports = function (app, config, passport) { } else if (!isMatch) { req.flash('error', "Sorry, your password was incorrect. Please double-check your password.") - res.redirect('/security') + res.redirect('/account/security') } else { if ( newPwd != retypePwd ) { req.flash('error', "Passwords do no match. Please make sure you re-type your new password correctly.") - res.redirect('/security') + res.redirect('/account/security') } else { // update password @@ -298,7 +298,7 @@ module.exports = function (app, config, passport) { req.flash('success', "Pasword updated!") console.log('pasword updated!') } - res.redirect('/security') + res.redirect('/account/security') }) }); }); @@ -464,7 +464,7 @@ module.exports = function (app, config, passport) { else { req.flash('success', 'Your account has been created. Please log in.'); } - res.redirect('/registration'); + res.redirect('/account/registration'); }) }); }); -- GitLab From b127f995fd93d565fd67bf404a3c4eb05b4e3760 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Wed, 11 Dec 2019 11:24:53 +0100 Subject: [PATCH 048/161] caps fixed config --- config/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.js b/config/config.js index 1d40a39a..c0d068db 100644 --- a/config/config.js +++ b/config/config.js @@ -20,7 +20,7 @@ module.exports = { user: 'DBManager', // DB username password: 'Stuttgart2019', // DB password port: 3306, // MySQL port - dbUser: 'userDB', // User DB + dbUser: 'userdb', // User DB dbProject: 'projectDB' // Project DB }, mailer: { -- GitLab From d3d90b151f205a2695300fc2391adf911bd84575 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Wed, 11 Dec 2019 11:28:20 +0100 Subject: [PATCH 049/161] cd /home/knopkiwg/m4lab/user-account/routes --- views/registration.pug | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/views/registration.pug b/views/registration.pug index 9f843960..105fe7a7 100644 --- a/views/registration.pug +++ b/views/registration.pug @@ -86,6 +86,6 @@ html(lang="en") // toggle password script(src='https://unpkg.com/bootstrap-show-password@1.2.1/dist/bootstrap-show-password.min.js') // M4_LAB - script(src="/js/generalFunction.js") - script(src="/js/registration.js") - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file + script(src="/account/js/generalFunction.js") + script(src="/account/js/registration.js") + script(src="/js/headfoot.js") \ No newline at end of file -- GitLab From b60b2c84b5630b50ef31e5801fdf0b9991806eb9 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Wed, 11 Dec 2019 11:32:15 +0100 Subject: [PATCH 050/161] routes merge artifacts cleansed --- routes/routes.js | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/routes/routes.js b/routes/routes.js index 7c0addb3..c40237e3 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -149,7 +149,7 @@ module.exports = function (app, config, passport) { }); } - return res.redirect(uri); + return res.redirect('/'); }); }); @@ -449,9 +449,27 @@ module.exports = function (app, config, passport) { res.redirect('/account/login') }); - app.get('/logout', function (req, res) { - if (req.user == null) { - return res.redirect('/account/'); + // todo: user registration with captcha + app.get('/registration', function(req, res) { + res.render('registration') + }) + + app.post('/registration', function(req, res) { + // TODO: + // create gitlab account? + // send email to activate profile? + + // user data + var curDate = new Date() + var userData = { + title: req.body.inputTitle, + firstname: req.body.inputFirstname, + lastname: req.body.inputLastname, + email: req.body.inputEmail, + organisation: req.body.inputOrganisation, + industry: req.body.inputIndustry, + speciality: req.body.inputSpeciality, + createdDate: curDate.toISOString().slice(0,10) } // encrypt password bcrypt.genSalt(saltRounds, function(err, salt) { @@ -468,12 +486,16 @@ module.exports = function (app, config, passport) { else { req.flash('success', 'Your account has been created. Please log in.'); } - res.redirect('/account/registration'); + res.redirect('/registration'); }) }); }); }) + + + + app.get('/email/:email', function(req, res) { methods.checkUserEmail(req.params.email, function(err, user){ if (!err) { -- GitLab From 46ebc9cf244ce04371d2309fd3e20610fca68f6c Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Wed, 11 Dec 2019 11:35:02 +0100 Subject: [PATCH 051/161] changed relogin href --- views/registration.pug | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/registration.pug b/views/registration.pug index 105fe7a7..8d549496 100644 --- a/views/registration.pug +++ b/views/registration.pug @@ -75,7 +75,7 @@ html(lang="en") input#inputSpeciality(name="inputSpeciality", type="text", class="form-control", placeholder="Fachgebiete") input#submitBtn(type="submit", class="btn btn-outline-dark btn-block", value="Submit" disabled) br - p(class="text-center") Already have an account? Login. + p(class="text-center") Already have an account? Login. // jQuery -- GitLab From 452fd3f5ad6466ada4283458d7554a6e07437a4a Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Wed, 11 Dec 2019 11:40:01 +0100 Subject: [PATCH 052/161] logout broken? test --- routes/routes.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/routes/routes.js b/routes/routes.js index c40237e3..96f73143 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -133,7 +133,7 @@ module.exports = function (app, config, passport) { app.get('/logout', function (req, res) { if (req.user == null) { - return res.redirect('/account/'); + return res.redirect('/'); } req.user.nameID = req.user.id; @@ -149,10 +149,11 @@ module.exports = function (app, config, passport) { }); } - return res.redirect('/'); + return res.redirect(uri); }); }); + app.get('/profile', function (req, res) { if (req.isAuthenticated()) { methods.getUserByEmail(req.user.email, function(data, err){ -- GitLab From eaf5ed7cef147386895bdfd52e841ec9d6a95200 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Wed, 11 Dec 2019 11:48:38 +0100 Subject: [PATCH 053/161] copied script from security.pug to reset.pug to reenable reset --- views/reset.pug | 20 ++++++++++++++++++-- views/security.pug | 2 +- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/views/reset.pug b/views/reset.pug index 3a917341..b245b949 100644 --- a/views/reset.pug +++ b/views/reset.pug @@ -56,6 +56,22 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="/account/js/account.js") script(src="/account/js/generalFunction.js") - script(src="/js/headfoot.js") \ No newline at end of file + script(src="/js/headfoot.js") + script. + // check input fields + 'use strict'; + window.addEventListener('load', function() { + // Fetch all the forms we want to apply custom Bootstrap validation styles to + var forms = document.getElementsByClassName('needs-validation'); + // Loop over them and prevent submission + var validation = Array.prototype.filter.call(forms, function(form) { + form.addEventListener('submit', function(event) { + if (form.checkValidity() === false) { + event.preventDefault(); + event.stopPropagation(); + } + form.classList.add('was-validated'); + }, false); + }); + }, false); diff --git a/views/security.pug b/views/security.pug index 9908aa1a..37c990e9 100644 --- a/views/security.pug +++ b/views/security.pug @@ -72,7 +72,7 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="/account/js/account.js") + script(src="/account/js/security.js") script(src="/account/js/generalFunction.js") script(src="/js/headfoot.js") script. -- GitLab From c9d55d7bb472fd4974701450b026ebce61bdf033 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Wed, 11 Dec 2019 11:55:26 +0100 Subject: [PATCH 054/161] reset script --- views/reset.pug | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/views/reset.pug b/views/reset.pug index b245b949..42d23f06 100644 --- a/views/reset.pug +++ b/views/reset.pug @@ -59,19 +59,32 @@ html(lang="en") script(src="/account/js/generalFunction.js") script(src="/js/headfoot.js") script. - // check input fields - 'use strict'; - window.addEventListener('load', function() { - // Fetch all the forms we want to apply custom Bootstrap validation styles to - var forms = document.getElementsByClassName('needs-validation'); - // Loop over them and prevent submission - var validation = Array.prototype.filter.call(forms, function(form) { - form.addEventListener('submit', function(event) { - if (form.checkValidity() === false) { - event.preventDefault(); - event.stopPropagation(); - } - form.classList.add('was-validated'); - }, false); - }); - }, false); + $('#inputNewPwd, #inputConfirm').on('keyup', function () { + var isBest = false; + var isMatch = false; + + // password best practice + if ($('#inputNewPwd').val().length < 8) { + $('#recommendation').html('Must be at least 8 characters').css('color', 'red'); + isBest = false; + } else { + $('#recommendation').html('').css('color', 'red'); + isBest = true; + } + // match or not? + if ($('#inputNewPwd').val() == $('#inputConfirm').val()) { + $('#message').html('Matching').css('color', 'green'); + isMatch = true; + } else { + $('#message').html('Not Matching').css('color', 'red'); + isMatch = false; + } + + // enable/disable update button + if (isBest && isMatch) { + $('#updateBtn').prop('disabled', false); + } else { + $('#updateBtn').prop('disabled', true); + } + }); + -- GitLab From c35878845970010dac9ab85d1f78817bebafdd3f Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Wed, 11 Dec 2019 11:56:58 +0100 Subject: [PATCH 055/161] reset script --- views/reset.pug | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/views/reset.pug b/views/reset.pug index 42d23f06..d8f0e76e 100644 --- a/views/reset.pug +++ b/views/reset.pug @@ -79,12 +79,10 @@ html(lang="en") $('#message').html('Not Matching').css('color', 'red'); isMatch = false; } - - // enable/disable update button - if (isBest && isMatch) { - $('#updateBtn').prop('disabled', false); - } else { - $('#updateBtn').prop('disabled', true); - } - }); - + // enable/disable update button + if (isBest && isMatch) { + $('#updateBtn').prop('disabled', false); + } else { + $('#updateBtn').prop('disabled', true); + } + }); \ No newline at end of file -- GitLab From 40654a4a91233dbfa6593a81ea7168e812d79eca Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Wed, 11 Dec 2019 15:31:00 +0100 Subject: [PATCH 056/161] changes in branching reflected in ci/cd --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 45519e22..a22bda54 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -8,4 +8,4 @@ pages-devel: tags: - testing only: - - devel \ No newline at end of file + - testing \ No newline at end of file -- GitLab From bafa2004acdaf6ebb2a8bf37b529b71418f02060 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Wed, 11 Dec 2019 15:48:59 +0100 Subject: [PATCH 057/161] fix forgot password --- public/js/security.js | 1 + routes/routes.js | 4 +++- views/reset.pug | 19 +++++++++---------- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/public/js/security.js b/public/js/security.js index 52b42f14..0f4a8f09 100644 --- a/public/js/security.js +++ b/public/js/security.js @@ -1,4 +1,5 @@ // check password and password confirmation input fields +// used in Security and Reset Password $('#inputNewPwd, #inputConfirm').on('keyup', function () { var isBest, isMatch; diff --git a/routes/routes.js b/routes/routes.js index 7077fc1d..51ce386f 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -411,6 +411,7 @@ module.exports = function (app, config, passport) { else { req.flash('success', "Your pasword has been updated.") console.log('pasword updated!') + res.redirect('/login') // todo: send confirmation email } }) @@ -419,10 +420,11 @@ module.exports = function (app, config, passport) { } else { req.flash('error', "User not found.") + res.redirect('/login') } }); - res.redirect('/login') + //res.redirect('/login') }); // todo: user registration with captcha diff --git a/views/reset.pug b/views/reset.pug index 774f9215..c0e9d85b 100644 --- a/views/reset.pug +++ b/views/reset.pug @@ -5,6 +5,7 @@ html(lang="en") meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/custom/login.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") style. .collapse { @@ -30,8 +31,7 @@ html(lang="en") body div(class="container-fluid") div(class="row") - div(class="col-sm-9") - h2 Reset Password + div(class="col-md-6 offset-md-3") if successes for success in successes div.alert.alert-success.alert-dismissible #{ success } @@ -40,15 +40,14 @@ html(lang="en") for error, i in errors div.alert.alert-danger.alert-dismissible.fade.show #{ error } a(class="close", href="#", data-dismiss="alert", aria-label="close") × - form#forgotForm(method="POST") - div(class="form-group row") - label(for="newPwd") New Password + form#forgotForm(method="POST", class="form-signin") + img(src="https://transfer.hft-stuttgart.de/images/demo/m4lab_logo.jpg", class="img-responsive center-block", width="185", height="192") + div(class="form-row") input#inputNewPwd(name="inputNewPwd", type="password", class="form-control", placeholder="New Password" required) - span#recommendation - label(for="confirmPwd") Confirm Password + span#recommendation(class='warning') input#inputConfirm(name="inputConfirm", type="password", class="form-control", placeholder="Confirm Password" required) - span#message - input#updateBtn(type="submit", class="btn btn-primary", value="Update Password" disabled) + span#message(class='warning') + input#updateBtn(type="submit", class="btn btn-outline-dark btn-block", value="Update Password" disabled) // jQuery script(src="https://code.jquery.com/jquery-3.3.1.min.js") @@ -56,6 +55,6 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="/js/account.js") + script(src="/js/security.js") script(src="/js/generalFunction.js") script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file -- GitLab From 4243429bfc53f6c4bcfdbea3bfe6f71a86a461c4 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Wed, 11 Dec 2019 15:59:40 +0100 Subject: [PATCH 058/161] update devel-branch --- .gitlab-ci.yml | 11 + config/config.js | 9 +- package-lock.json | 3277 ++++++++++------------------------------ package.json | 12 +- routes/api.js | 2 +- views/forgotPwd.pug | 4 +- views/home.pug | 6 +- views/profile.pug | 9 +- views/registration.pug | 8 +- views/security.pug | 45 +- views/services.pug | 6 +- 11 files changed, 846 insertions(+), 2543 deletions(-) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 00000000..a22bda54 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,11 @@ +pages-devel: + stage: deploy + script: + - npm install + - "pm2 delete --silent account || :" + - pm2 start ./app.js --name=account + - pm2 save + tags: + - testing + only: + - testing \ No newline at end of file diff --git a/config/config.js b/config/config.js index dfcd65ef..c0d068db 100644 --- a/config/config.js +++ b/config/config.js @@ -1,7 +1,9 @@ module.exports = { development: { app: { + hostname: 'm4lab.hft-stuttgart.de/account', name: 'User Account Management', + hostname: 'm4lab.hft-stuttgart.de/account', port: process.env.PORT || 9989 }, passport: { @@ -9,17 +11,17 @@ module.exports = { saml: { path: process.env.SAML_PATH || '/saml/SSO', entryPoint: process.env.SAML_ENTRY_POINT || 'https://transfer.hft-stuttgart.de/idp/saml2/idp/SSOService.php', - issuer: 'sp-account.m4lab.hft-stuttgart.de', + issuer: 'sp-account-testing.m4lab.hft-stuttgart.de', logoutUrl: 'https://transfer.hft-stuttgart.de/idp/saml2/idp/SingleLogoutService.php' } }, database: { - host: 'localhost', // DB host + host: 'transfer.hft-stuttgart.de', // DB host user: 'DBManager', // DB username password: 'Stuttgart2019', // DB password port: 3306, // MySQL port dbUser: 'userdb', // User DB - dbProject: 'projectdb' // Project DB + dbProject: 'projectDB' // Project DB }, mailer: { host: 'mail.hft-stuttgart.de', // hostname @@ -32,4 +34,3 @@ module.exports = { } } } - diff --git a/package-lock.json b/package-lock.json index ced597fe..7e0b9410 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,11 +31,6 @@ "negotiator": "0.6.2" } }, - "acorn": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", - "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=" - }, "align-text": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", @@ -46,73 +41,46 @@ "repeat-string": "^1.5.2" } }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "requires": { + "string-width": "^2.0.0" + } + }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" + "color-convert": "^1.9.0" } }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", "requires": { - "arr-flatten": "^1.0.1" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - }, "async": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/async/-/async-3.1.0.tgz", "integrity": "sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ==" }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", @@ -150,75 +118,13 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } - }, - "base64-url": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/base64-url/-/base64-url-1.2.1.tgz", - "integrity": "sha1-GZ/WYXAqDnt9yubgaYuwicUvbXg=" - }, "basic-auth": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.0.4.tgz", - "integrity": "sha1-Awk1sB3nyblKgksp8/zLdQ06UpA=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "requires": { + "safe-buffer": "5.1.2" + } }, "bcryptjs": { "version": "2.4.3", @@ -231,25 +137,46 @@ "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==" }, "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==" }, "body-parser": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.15.1.tgz", - "integrity": "sha1-m87vBmm4+LlD8K2M5dlXFr10D9I=", - "requires": { - "bytes": "2.3.0", - "content-type": "~1.0.1", - "debug": "~2.2.0", - "depd": "~1.1.0", - "http-errors": "~1.4.0", - "iconv-lite": "0.4.13", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.1.0", - "raw-body": "~2.1.6", - "type-is": "~1.6.12" + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + } + }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + } } }, "brace-expansion": { @@ -262,48 +189,28 @@ } }, "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" + "fill-range": "^7.0.1" } }, "bytes": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.3.0.tgz", - "integrity": "sha1-1baAoWW2IBc5rLYRVCqrwtjOsHA=" - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, "camelcase": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" }, + "capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" + }, "center-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", @@ -314,59 +221,40 @@ } }, "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" } }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" + }, "cliui": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", @@ -384,19 +272,18 @@ } } }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "color-name": "1.1.3" } }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "concat-map": { "version": "0.0.1", @@ -404,18 +291,16 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "configstore": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-1.4.0.tgz", - "integrity": "sha1-w1eB0FAdJowlxUuLF/YkDopPsCE=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", "requires": { + "dot-prop": "^4.1.0", "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "object-assign": "^4.0.1", - "os-tmpdir": "^1.0.0", - "osenv": "^0.1.0", - "uuid": "^2.0.1", - "write-file-atomic": "^1.1.2", - "xdg-basedir": "^2.0.0" + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" } }, "connect-flash": { @@ -424,17 +309,23 @@ "integrity": "sha1-2GMPJtlaf4UfmVax6MxnMvO2qjA=" }, "constantinople": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz", - "integrity": "sha1-S5RdmTeQe82Y7ldRIsOBdRZUQUE=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz", + "integrity": "sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==", "requires": { - "acorn": "^2.1.0" + "@types/babel-types": "^7.0.0", + "@types/babylon": "^6.16.2", + "babel-types": "^6.26.0", + "babylon": "^6.18.0" } }, "content-disposition": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.1.tgz", - "integrity": "sha1-h0dsamfI2qh+Muh2Ft+IO6f7Bxs=" + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } }, "content-type": { "version": "1.0.4", @@ -460,11 +351,6 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - }, "core-js": { "version": "2.6.10", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.10.tgz", @@ -475,22 +361,47 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, - "crc": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.0.tgz", - "integrity": "sha1-QljjUWE6dO8RU9/LBeggw+lxXX8=" + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } }, "crypto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==" }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" + }, "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "ms": "0.7.1" + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, "decamelize": { @@ -498,11 +409,6 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -516,53 +422,6 @@ "object-keys": "^1.0.12" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } - }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -578,39 +437,33 @@ "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "is-obj": "^1.0.0" } }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "ejs": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-0.8.8.tgz", - "integrity": "sha1-/9xW3MNdApJt1QrRNDm7xUBh1Zg=" + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, "errorhandler": { "version": "1.4.3", @@ -622,37 +475,32 @@ } }, "es-abstract": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz", - "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==", + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.3.tgz", + "integrity": "sha512-WtY7Fx5LiOnSYgF5eg/1T+GONaGmpvpPdCpSnYij+U2gDTL0UPfWrhDw7b2IYb+9NQJsYpCA0wOQvZfsd6YwRw==", "requires": { - "es-to-primitive": "^1.2.0", + "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.0", + "has-symbols": "^1.0.1", "is-callable": "^1.1.4", "is-regex": "^1.0.4", - "object-inspect": "^1.6.0", + "object-inspect": "^1.7.0", "object-keys": "^1.1.1", "string.prototype.trimleft": "^2.1.0", "string.prototype.trimright": "^2.1.0" } }, "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" } }, - "es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=" - }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -669,95 +517,65 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "etag": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz", - "integrity": "sha1-A9MLX2fdbmMtKUXTDWZScxo01dg=" - }, - "event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", - "requires": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "requires": { - "is-posix-bracket": "^0.1.0" - } + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "requires": { - "fill-range": "^2.1.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "express": { - "version": "4.13.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.13.4.tgz", - "integrity": "sha1-PAt288d1kMg0VzkGHsC9O6Bn7CQ=", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "requires": { - "accepts": "~1.2.12", + "accepts": "~1.3.7", "array-flatten": "1.1.1", - "content-disposition": "0.5.1", - "content-type": "~1.0.1", - "cookie": "0.1.5", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", "cookie-signature": "1.0.6", - "debug": "~2.2.0", - "depd": "~1.1.0", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "etag": "~1.7.0", - "finalhandler": "0.4.1", - "fresh": "0.3.0", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", "merge-descriptors": "1.0.1", "methods": "~1.1.2", "on-finished": "~2.3.0", - "parseurl": "~1.3.1", + "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~1.0.10", - "qs": "4.0.0", - "range-parser": "~1.0.3", - "send": "0.13.1", - "serve-static": "~1.10.2", - "type-is": "~1.6.6", - "utils-merge": "1.0.0", - "vary": "~1.0.1" + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "dependencies": { - "accepts": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz", - "integrity": "sha1-5fHzkoxtlf2WVYw27D2dDeSm7Oo=", - "requires": { - "mime-types": "~2.1.6", - "negotiator": "0.5.3" - } - }, "cookie": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.5.tgz", - "integrity": "sha1-armUiksa4hlSzSWIUwpHItQETXw=" - }, - "negotiator": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.5.3.tgz", - "integrity": "sha1-Jp1cR2gQ7JLtvntsLygxY4T5p+g=" - }, - "qs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz", - "integrity": "sha1-wx2bdOwn33XlQ6hseHKO2NRiNgc=" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" } } }, @@ -770,118 +588,68 @@ } }, "express-session": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.13.0.tgz", - "integrity": "sha1-isO1wBiLSDgoUdiCB7jndG77QBE=", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.0.tgz", + "integrity": "sha512-t4oX2z7uoSqATbMfsxWMbNjAL0T5zpvcJCk3Z9wnPPN7ibddhnmDZXHfEcoBMG2ojKXZoCyPMc5FbtK+G7SoDg==", "requires": { - "cookie": "0.2.3", + "cookie": "0.4.0", "cookie-signature": "1.0.6", - "crc": "3.4.0", - "debug": "~2.2.0", - "depd": "~1.1.0", - "on-headers": "~1.0.1", - "parseurl": "~1.3.0", - "uid-safe": "~2.0.0", - "utils-merge": "1.0.0" + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.0", + "uid-safe": "~2.1.5" }, "dependencies": { "cookie": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.2.3.tgz", - "integrity": "sha1-GllTavaFN6IReKATRvh8sFnSrlw=" - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" } } }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "requires": { - "is-extglob": "^1.0.0" - } - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" - }, "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" } }, "finalhandler": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.4.1.tgz", - "integrity": "sha1-haF8bFmpRxfSYtYSMNSw6+PUoU0=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "requires": { - "debug": "~2.2.0", + "debug": "2.6.9", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", "unpipe": "~1.0.0" } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "requires": { - "for-in": "^1.0.1" - } - }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "^0.2.2" - } - }, "fresh": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", - "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8=" - }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, "fs": { "version": "0.0.1-security", @@ -889,675 +657,136 @@ "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" }, "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", - "optional": true, + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", + "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "requires": { + "ini": "^1.3.4" + } + }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" }, "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "inherits": { "version": "2.0.3", - "bundled": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "optional": true + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" } } }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "requires": { - "is-glob": "^2.0.0" - } - }, - "got": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/got/-/got-3.3.1.tgz", - "integrity": "sha1-5dDtSvVfw+701WAHdp2YGSvLLso=", - "requires": { - "duplexify": "^3.2.0", - "infinity-agent": "^2.0.0", - "is-redirect": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "nested-error-stacks": "^1.0.0", - "object-assign": "^3.0.0", - "prepend-http": "^1.0.0", - "read-all-stream": "^3.0.0", - "timed-out": "^2.0.0" - }, - "dependencies": { - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=" - } - } - }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "http-errors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.4.0.tgz", - "integrity": "sha1-bAJC3qaz33r9oVPHEImzHG6Cqr8=", + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { - "inherits": "2.0.1", - "statuses": ">= 1.2.1 < 2" + "safer-buffer": ">= 2.1.2 < 3" } }, - "iconv-lite": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", - "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=" - }, "ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, - "infinity-agent": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/infinity-agent/-/infinity-agent-2.0.3.tgz", - "integrity": "sha1-ReDi/3qesDCyfWK3SzdEt6esQhY=" - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - }, "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "ipaddr.js": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.0.5.tgz", - "integrity": "sha1-X6eM8wG4JceKvDBC2BJyMEnqI8c=" - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - } + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" }, "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "requires": { - "binary-extensions": "^1.0.0" + "binary-extensions": "^2.0.0" } }, "is-buffer": { @@ -1570,12 +799,12 @@ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", "requires": { - "kind-of": "^3.0.2" + "ci-info": "^1.5.0" } }, "is-date-object": { @@ -1583,36 +812,6 @@ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "requires": { - "is-primitive": "^2.0.0" - } - }, "is-expression": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", @@ -1629,30 +828,31 @@ } } }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "requires": { - "number-is-nan": "^1.0.0" + "is-extglob": "^2.1.1" } }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", "requires": { - "is-extglob": "^1.0.0" + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" } }, "is-npm": { @@ -1661,38 +861,23 @@ "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" }, "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "requires": { - "kind-of": "^3.0.2" - } + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } + "path-is-inside": "^1.0.1" } }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" - }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", @@ -1711,36 +896,33 @@ "has": "^1.0.1" } }, + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", "requires": { - "has-symbols": "^1.0.0" + "has-symbols": "^1.0.1" } }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "js-stringify": { "version": "1.0.2", @@ -1756,11 +938,11 @@ } }, "latest-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-1.0.1.tgz", - "integrity": "sha1-cs/Ebj6NG+ZR4eu1Tqn26pbzdLs=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", "requires": { - "package-json": "^1.0.0" + "package-json": "^4.0.0" } }, "lazy-cache": { @@ -1769,92 +951,9 @@ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" }, "lodash": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.2.0.tgz", - "integrity": "sha1-S/UKMkP5rrC6xBpV09WZBnWkYvs=" - }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "requires": { - "lodash._basecopy": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=" - }, - "lodash._bindcallback": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=" - }, - "lodash._createassigner": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", - "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", - "requires": { - "lodash._bindcallback": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash.restparam": "^3.0.0" - } - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=" - }, - "lodash.assign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", - "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", - "requires": { - "lodash._baseassign": "^3.0.0", - "lodash._createassigner": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "lodash.defaults": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-3.1.2.tgz", - "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=", - "requires": { - "lodash.assign": "^3.0.0", - "lodash.restparam": "^3.0.0" - } - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=" + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, "longest": { "version": "1.0.1", @@ -1866,28 +965,22 @@ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=" - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "requires": { - "object-visit": "^1.0.0" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, - "math-random": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", - "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==" + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + } }, "media-typer": { "version": "0.3.0", @@ -1904,30 +997,10 @@ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, "mime": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", - "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { "version": "1.40.0", @@ -1951,53 +1024,26 @@ } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "morgan": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.7.0.tgz", - "integrity": "sha1-6xDKjlDRq+D409rVwCAdBS2YHGI=", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", + "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", "requires": { - "basic-auth": "~1.0.3", - "debug": "~2.2.0", - "depd": "~1.1.0", + "basic-auth": "~2.0.0", + "debug": "2.6.9", + "depd": "~1.1.2", "on-finished": "~2.3.0", "on-headers": "~1.0.1" } }, "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "mysql": { "version": "2.17.1", @@ -2010,64 +1056,15 @@ "sqlstring": "2.3.1" } }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } - }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, - "nested-error-stacks": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz", - "integrity": "sha1-GfYZWRUZ8JZ2mlupqG5u7sgjw88=", - "requires": { - "inherits": "~2.0.1" - } - }, "node-forge": { - "version": "0.2.24", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.2.24.tgz", - "integrity": "sha1-+m+Eb0L6k/Y6CjDJ+/97ThMOCFg=" + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz", + "integrity": "sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw==" }, "nodemailer": { "version": "6.3.1", @@ -2075,20 +1072,30 @@ "integrity": "sha512-j0BsSyaMlyadEDEypK/F+xlne2K5m6wzPYMXS/yxKI0s7jmT1kBx6GEKRVbZmyYfKOsjkeC/TiMVDJBI/w5gMQ==" }, "nodemon": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.9.2.tgz", - "integrity": "sha1-IbPNFX1Ug4M7RzNyyY4XlaTVWXA=", - "requires": { - "chokidar": "^1.4.3", - "debug": "^2.2.0", - "es6-promise": "^3.0.2", - "ignore-by-default": "^1.0.0", - "lodash.defaults": "^3.1.2", - "minimatch": "^3.0.0", - "ps-tree": "^1.0.1", - "touch": "1.0.0", - "undefsafe": "0.0.3", - "update-notifier": "0.5.0" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.1.tgz", + "integrity": "sha512-UC6FVhNLXjbbV4UzaXA3wUdbEkUZzLGgMGzmxvWAex5nzib/jhcSHVFlQODdbuUHq8SnnZ4/EABBAbC3RplvPg==", + "requires": { + "chokidar": "^3.2.2", + "debug": "^3.2.6", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.7", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.2", + "update-notifier": "^2.5.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } } }, "nopt": { @@ -2100,68 +1107,33 @@ } }, "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "requires": { - "remove-trailing-separator": "^1.0.1" + "path-key": "^2.0.0" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "object-inspect": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", - "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, "object.getownpropertydescriptors": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", @@ -2171,30 +1143,6 @@ "es-abstract": "^1.5.1" } }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -2208,51 +1156,20 @@ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "package-json": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-1.2.0.tgz", - "integrity": "sha1-yOysCUInzfdqMWh07QXifMk5oOA=", - "requires": { - "got": "^3.2.0", - "registry-url": "^3.0.0" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" } }, "parseurl": { @@ -2260,11 +1177,6 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, "passport": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/passport/-/passport-0.3.2.tgz", @@ -2275,17 +1187,28 @@ } }, "passport-saml": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/passport-saml/-/passport-saml-0.15.0.tgz", - "integrity": "sha1-fUXAe6r4DY4s+Jg2cTKl5MBTXK0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/passport-saml/-/passport-saml-1.2.0.tgz", + "integrity": "sha512-CU1JOx9FTITF8+vl/G1g7FV6kHWXYzECV3pq3D8K3RIM1MS0efbfQ2hkgDFdoZGdG9DdMH5z8OBW/O8qoXnkLQ==", "requires": { + "debug": "^3.1.0", "passport-strategy": "*", - "q": "1.1.x", - "xml-crypto": "0.8.x", - "xml-encryption": "~0.7", + "q": "^1.5.0", + "xml-crypto": "^1.1.4", + "xml-encryption": "^0.11.0", "xml2js": "0.4.x", - "xmlbuilder": "2.5.x", + "xmlbuilder": "^11.0.0", "xmldom": "0.1.x" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } } }, "passport-strategy": { @@ -2293,10 +1216,15 @@ "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, "path-parse": { "version": "1.0.6", @@ -2313,63 +1241,44 @@ "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "requires": { - "through": "~2.3" - } - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "^2.0.0" - } + "picomatch": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz", + "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==" }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" }, "prepend-http": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "proxy-addr": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.10.tgz", - "integrity": "sha1-DUCoL4Afw1VWfS7LZe/j8HfxIcU=", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", "requires": { - "forwarded": "~0.1.0", - "ipaddr.js": "1.0.5" + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.0" } }, - "ps-tree": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", - "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", - "requires": { - "event-stream": "=3.3.4" - } + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "pstree.remy": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.7.tgz", + "integrity": "sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A==" }, "pug": { "version": "2.0.4", @@ -2575,57 +1484,34 @@ "integrity": "sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA==" }, "q": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/q/-/q-1.1.2.tgz", - "integrity": "sha1-Y1fikSBnAdmfGXq4TlforRlvKok=" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" }, "qs": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.1.0.tgz", - "integrity": "sha1-7B0WJrJCeNmfD99FSeUk4k7O6yY=" + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" }, - "randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } + "random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" }, "range-parser": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz", - "integrity": "sha1-aHKCNTXGkuLCoBA4Jq/YLC4P8XU=" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", - "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "requires": { - "bytes": "2.4.0", - "iconv-lite": "0.4.13", + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", - "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=" - } } }, "rc": { @@ -2637,338 +1523,49 @@ "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } - } - }, - "read-all-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", - "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", - "requires": { - "pinkie-promise": "^2.0.0", - "readable-stream": "^2.0.0" } }, "readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - } - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "extglob": { + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" } } }, + "readdirp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "requires": { + "picomatch": "^2.0.4" + } + }, "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "registry-auth-token": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" } }, "registry-url": { @@ -2979,29 +1576,11 @@ "rc": "^1.0.1" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" - }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, - "repeating": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", - "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", - "requires": { - "is-finite": "^1.0.0" - } - }, "resolve": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", @@ -3010,16 +1589,6 @@ "path-parse": "^1.0.6" } }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, "right-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", @@ -3033,13 +1602,10 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "requires": { - "ret": "~0.1.10" - } + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sax": { "version": "1.2.4", @@ -3060,294 +1626,83 @@ } }, "send": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.13.1.tgz", - "integrity": "sha1-ow1fTILIqbrprQCh2bG9vm8Zntc=", + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "requires": { - "debug": "~2.2.0", - "depd": "~1.1.0", + "debug": "2.6.9", + "depd": "~1.1.2", "destroy": "~1.0.4", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "etag": "~1.7.0", - "fresh": "0.3.0", - "http-errors": "~1.3.1", - "mime": "1.3.4", - "ms": "0.7.1", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", "on-finished": "~2.3.0", - "range-parser": "~1.0.3", - "statuses": "~1.2.1" + "range-parser": "~1.2.1", + "statuses": "~1.5.0" }, "dependencies": { - "http-errors": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", - "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=", - "requires": { - "inherits": "~2.0.1", - "statuses": "1" - } - }, - "statuses": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz", - "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg=" + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" } } }, "serve-static": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.10.3.tgz", - "integrity": "sha1-zlpuzTEB/tXsCYJ9rCKpwpv7BTU=", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "requires": { + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.1", - "send": "0.13.2" - }, - "dependencies": { - "http-errors": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", - "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=", - "requires": { - "inherits": "~2.0.1", - "statuses": "1" - } - }, - "send": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.13.2.tgz", - "integrity": "sha1-dl52B8gFVFK7pvCwUllTUJhgNt4=", - "requires": { - "debug": "~2.2.0", - "depd": "~1.1.0", - "destroy": "~1.0.4", - "escape-html": "~1.0.3", - "etag": "~1.7.0", - "fresh": "0.3.0", - "http-errors": "~1.3.1", - "mime": "1.3.4", - "ms": "0.7.1", - "on-finished": "~2.3.0", - "range-parser": "~1.0.3", - "statuses": "~1.2.1" - } - }, - "statuses": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz", - "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg=" - } - } - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } + "parseurl": "~1.3.3", + "send": "0.17.1" } }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "requires": { - "kind-of": "^3.2.0" - } + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "shebang-regex": "^1.0.0" } }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" - }, - "split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", - "requires": { - "through": "2" - } + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "requires": { - "extend-shallow": "^3.0.0" - } + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "sqlstring": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, - "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", - "requires": { - "duplexer": "~0.1.1" - } - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" - }, - "string-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", - "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=", + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { - "strip-ansi": "^3.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "string.prototype.trimleft": { @@ -3377,85 +1732,71 @@ } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^3.0.0" } }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "requires": { + "execa": "^0.7.0" + } }, "timed-out": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-2.0.0.tgz", - "integrity": "sha1-84sK6B03R9YoAB9B2vxlKs5nHAo=" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" }, "to-fast-properties": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - } - } + "is-number": "^7.0.0" } }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, "token-stream": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=" }, "touch": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-1.0.0.tgz", - "integrity": "sha1-RJy+LbrlqMgDjjDXH6D/RklHxN4=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", "requires": { "nopt": "~1.0.10" } @@ -3493,27 +1834,27 @@ "optional": true }, "uid-safe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.0.0.tgz", - "integrity": "sha1-p/PGymSh9qXQTsDvPkw9U2cxcTc=", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", "requires": { - "base64-url": "1.2.1" + "random-bytes": "~1.0.0" } }, "undefsafe": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-0.0.3.tgz", - "integrity": "sha1-7Mo6A+VrmvFzhbqsgSrIO5lKli8=" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", + "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", + "requires": { + "debug": "^2.2.0" + } }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" + "crypto-random-string": "^1.0.0" } }, "unpipe": { @@ -3521,70 +1862,35 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" }, "update-notifier": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-0.5.0.tgz", - "integrity": "sha1-B7XcIGazYnqztPUwEw9+3doHpMw=", - "requires": { - "chalk": "^1.0.0", - "configstore": "^1.0.0", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", "is-npm": "^1.0.0", - "latest-version": "^1.0.0", - "repeating": "^1.1.2", + "latest-version": "^3.0.0", "semver-diff": "^2.0.0", - "string-length": "^1.0.0" + "xdg-basedir": "^3.0.0" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "requires": { + "prepend-http": "^1.0.1" + } }, "util-deprecate": { "version": "1.0.2", @@ -3601,85 +1907,84 @@ } }, "utils-merge": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", - "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=" - }, - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "vary": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.0.1.tgz", - "integrity": "sha1-meSYFWaihhGN+yuBc1ffeZM3bRA=" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, "void-elements": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "requires": { + "string-width": "^2.1.1" + } + }, "window-size": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, "write-file-atomic": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "requires": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", - "slide": "^1.1.5" + "signal-exit": "^3.0.2" } }, "xdg-basedir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", - "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", - "requires": { - "os-homedir": "^1.0.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" }, "xml-crypto": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/xml-crypto/-/xml-crypto-0.8.5.tgz", - "integrity": "sha1-K7z7PrM/OoKiGLgiv2craxwg5Tg=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/xml-crypto/-/xml-crypto-1.4.0.tgz", + "integrity": "sha512-K8FRdRxICVulK4WhiTUcJrRyAIJFPVOqxfurA3x/JlmXBTxy+SkEENF6GeRt7p/rB6WSOUS9g0gXNQw5n+407g==", "requires": { - "xmldom": "=0.1.19", - "xpath.js": ">=0.0.3" - }, - "dependencies": { - "xmldom": { - "version": "0.1.19", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.19.tgz", - "integrity": "sha1-Yx/Ad3bv2EEYvyUXGzftTQdaCrw=" - } + "xmldom": "0.1.27", + "xpath": "0.0.27" } }, "xml-encryption": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/xml-encryption/-/xml-encryption-0.7.4.tgz", - "integrity": "sha1-Qnkexk1VbSRV3LnaClQSNmWsZcc=", + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/xml-encryption/-/xml-encryption-0.11.2.tgz", + "integrity": "sha512-jVvES7i5ovdO7N+NjgncA326xYKjhqeAnnvIgRnY7ROLCfFqEDLwP0Sxp/30SHG0AXQV1048T5yinOFyvwGFzg==", "requires": { - "async": "~0.2.7", - "ejs": "~0.8.3", - "node-forge": "0.2.24", + "async": "^2.1.5", + "ejs": "^2.5.6", + "node-forge": "^0.7.0", "xmldom": "~0.1.15", - "xpath": "0.0.5" + "xpath": "0.0.27" }, "dependencies": { "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } } } }, @@ -3691,22 +1996,12 @@ "sax": ">=0.6.0", "util.promisify": "~1.0.0", "xmlbuilder": "~11.0.0" - }, - "dependencies": { - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" - } } }, "xmlbuilder": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-2.5.2.tgz", - "integrity": "sha1-WriPxQirL/FIcwELVhY9P5KxkyU=", - "requires": { - "lodash": "~3.2.0" - } + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" }, "xmldom": { "version": "0.1.27", @@ -3714,14 +2009,14 @@ "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" }, "xpath": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.5.tgz", - "integrity": "sha1-RUA29u8PPfWvXUukoRn7dWdLPmw=" + "version": "0.0.27", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz", + "integrity": "sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==" }, - "xpath.js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xpath.js/-/xpath.js-1.1.0.tgz", - "integrity": "sha512-jg+qkfS4K8E7965sqaUl8mRngXiKb3WZGfONgE18pr03FUQiuSV6G+Ej4tS55B+rIQSFEIw3phdVAQ4pPqNWfQ==" + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yargs": { "version": "3.10.0", diff --git a/package.json b/package.json index f7d2d9b9..93d0dbbf 100644 --- a/package.json +++ b/package.json @@ -23,20 +23,20 @@ "dependencies": { "async": "^3.1.0", "bcryptjs": "^2.4.3", - "body-parser": "1.15.1", + "body-parser": "^1.19.0", "cookie-parser": "1.4.3", "crypto": "^1.0.1", "errorhandler": "1.4.3", - "express": "4.13.4", + "express": "^4.17.1", "express-flash": "0.0.2", - "express-session": "1.13.0", + "express-session": "^1.17.0", "fs": "0.0.1-security", - "morgan": "1.7.0", + "morgan": "^1.9.1", "mysql": "^2.17.1", "nodemailer": "^6.3.1", - "nodemon": "1.9.2", + "nodemon": "^2.0.1", "passport": "0.3.2", - "passport-saml": "0.15.0", + "passport-saml": "^1.2.0", "pug": "^2.0.4" }, "devDependencies": {}, diff --git a/routes/api.js b/routes/api.js index d18af65f..ddedf46c 100644 --- a/routes/api.js +++ b/routes/api.js @@ -13,7 +13,7 @@ module.exports = function (app) { res.send(rows[0]) }) } else { - res.redirect('/'); + res.redirect('/account/'); } }); diff --git a/views/forgotPwd.pug b/views/forgotPwd.pug index 58d66001..84ea9340 100644 --- a/views/forgotPwd.pug +++ b/views/forgotPwd.pug @@ -40,7 +40,7 @@ html(lang="en") for error, i in errors div.alert.alert-danger.alert-dismissible.fade.show #{ error } a(class="close", href="#", data-dismiss="alert", aria-label="close") × - form#forgotForm(class="form-signin", method="POST", action="/forgotPwd") + form#forgotForm(class="form-signin", method="POST", action="/account/forgotPwd") img(src="https://transfer.hft-stuttgart.de/images/demo/m4lab_logo.jpg", class="img-responsive center-block", width="185", height="192") div(class="form-row") input#inputEmail(name="inputEmail", type="email", class="form-control", placeholder="Email" required) @@ -53,4 +53,4 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file + script(src="/js/headfoot.js") diff --git a/views/home.pug b/views/home.pug index 2c704c1a..285666ec 100644 --- a/views/home.pug +++ b/views/home.pug @@ -3,10 +3,10 @@ extends layout block content if user !== null h1 Hello, #{user.firstName} - a(href="/profile") Profile + a(href="/account/profile") Profile br - a(href="/logout") Logout + a(href="/account/logout") Logout else h1 Welcome br - a(href="/login") Login + a(href="/account/login") Login diff --git a/views/profile.pug b/views/profile.pug index 3d329f52..94e9500a 100644 --- a/views/profile.pug +++ b/views/profile.pug @@ -35,9 +35,9 @@ html(lang="en") span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") a(class="nav-link" href="#" aria-selected="true") Profile - a(class="nav-link" href="/security" aria-selected="false") Security - a(class="nav-link" href="/services" aria-selected="false") Services - div(class="col-sm-8") + a(class="nav-link" href="/account/security" aria-selected="false") Security + a(class="nav-link" href="/account/services" aria-selected="false") Services + div(class="col-sm-9") if successes for success in successes div.alert.alert-success.alert-dismissible #{ success } @@ -87,5 +87,4 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - //script(src="/js/account.js") - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file + script(src="/js/headfoot.js") diff --git a/views/registration.pug b/views/registration.pug index 9f843960..8d549496 100644 --- a/views/registration.pug +++ b/views/registration.pug @@ -75,7 +75,7 @@ html(lang="en") input#inputSpeciality(name="inputSpeciality", type="text", class="form-control", placeholder="Fachgebiete") input#submitBtn(type="submit", class="btn btn-outline-dark btn-block", value="Submit" disabled) br - p(class="text-center") Already have an account? Login. + p(class="text-center") Already have an account? Login. // jQuery @@ -86,6 +86,6 @@ html(lang="en") // toggle password script(src='https://unpkg.com/bootstrap-show-password@1.2.1/dist/bootstrap-show-password.min.js') // M4_LAB - script(src="/js/generalFunction.js") - script(src="/js/registration.js") - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file + script(src="/account/js/generalFunction.js") + script(src="/account/js/registration.js") + script(src="/js/headfoot.js") \ No newline at end of file diff --git a/views/security.pug b/views/security.pug index 0bdea4cf..37c990e9 100644 --- a/views/security.pug +++ b/views/security.pug @@ -37,9 +37,9 @@ html(lang="en") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/profile" aria-selected="true") Profile + a(class="nav-link" href="/account/profile" aria-selected="true") Profile a(class="nav-link" href="#" aria-selected="false") Security - a(class="nav-link" href="/services" aria-selected="false") Services + a(class="nav-link" href="/account/services" aria-selected="false") Services div(class="col-sm-9") if successes for success in successes @@ -49,24 +49,21 @@ html(lang="en") for error, i in errors div.alert.alert-danger.alert-dismissible.fade.show #{ error } a(class="close", href="#", data-dismiss="alert", aria-label="close") × - form(class="needs-validation", method="post", action="/changePwd" novalidate) - div(class="form-row") - div(class='form-group col-md-6') - label(for="currPwd") Current Password - input(id="inputCurrPwd", name="inputCurrPwd", type="password", class="form-control" required) - div(class="invalid-feedback") Please fill in this field. - div(class="form-row") - div(class='form-group col-md-6') - label(for="newPwd") New Password - input#inputNewPwd(name="inputNewPwd", type="password", class="form-control" required) - span#recommendation(class='warning') - div(class="invalid-feedback") Please fill in this field. - div(class="form-row") - div(class='form-group col-md-6') - label(for="confirm") Confirm New Password - input#inputConfirm(name="inputConfirm", type="password", class="form-control" required) - span#message(class='warning') - div(class="invalid-feedback") Please fill in this field. + form(class="needs-validation", method="post", action="/account/changePwd" novalidate) + div(class="form-group row") + label(for="currPwd") Current Password + input(id="inputCurrPwd", name="inputCurrPwd", type="password", class="form-control" required) + div(class="invalid-feedback") Please fill in this field. + div(class="form-group row") + label(for="newPwd") New Password + input#inputNewPwd(name="inputNewPwd", type="password", class="form-control" required) + span#recommendation + div(class="invalid-feedback") Please fill in this field. + div(class="form-group row") + label(for="confirm") Confirm New Password + input#inputConfirm(name="inputConfirm", type="password", class="form-control" required) + span#message + div(class="invalid-feedback") Please fill in this field. input#updateBtn(type="submit", class="btn btn-primary", value="Update Password" disabled) // jQuery @@ -75,9 +72,9 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="/js/generalFunction.js") - script(src="/js/security.js") - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") + script(src="/account/js/security.js") + script(src="/account/js/generalFunction.js") + script(src="/js/headfoot.js") script. // check input fields 'use strict'; @@ -94,4 +91,4 @@ html(lang="en") form.classList.add('was-validated'); }, false); }); - }, false); \ No newline at end of file + }, false); diff --git a/views/services.pug b/views/services.pug index a751c928..18e0f8ea 100644 --- a/views/services.pug +++ b/views/services.pug @@ -34,8 +34,8 @@ html(lang="en") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/profile" aria-selected="true") Profile - a(class="nav-link" href="/security" aria-selected="false") Security + a(class="nav-link" href="/account/profile" aria-selected="true") Profile + a(class="nav-link" href="/account/security" aria-selected="false") Security a(class="nav-link" href="#" aria-selected="false") Services div(class="col-sm-9") if successes @@ -60,4 +60,4 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file + script(src="/js/headfoot.js") \ No newline at end of file -- GitLab From a8ccd2849c51be7e2e545f5c14d9a87655aeaa94 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Wed, 11 Dec 2019 16:08:35 +0100 Subject: [PATCH 059/161] add db design --- database/userdb.mwb | Bin 0 -> 10178 bytes database/userdb.png | Bin 0 -> 26606 bytes database/userdb.sql | 89 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 database/userdb.mwb create mode 100644 database/userdb.png create mode 100644 database/userdb.sql diff --git a/database/userdb.mwb b/database/userdb.mwb new file mode 100644 index 0000000000000000000000000000000000000000..6cb9b9285114f37d969bc9d563909cf62cb71fe5 GIT binary patch literal 10178 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 literal 0 HcmV?d00001 diff --git a/database/userdb.png b/database/userdb.png new file mode 100644 index 0000000000000000000000000000000000000000..917f4596421b323f05ba15b5a7d03fcc524b7cb5 GIT binary patch literal 26606 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ÐNIM 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 LL!ne275sky+YGN` literal 0 HcmV?d00001 diff --git a/database/userdb.sql b/database/userdb.sql new file mode 100644 index 00000000..88d6a99a --- /dev/null +++ b/database/userdb.sql @@ -0,0 +1,89 @@ +-- MySQL Workbench Forward Engineering + +SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; +SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; +SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; + +-- ----------------------------------------------------- +-- Schema userdb +-- ----------------------------------------------------- + +-- ----------------------------------------------------- +-- Schema userdb +-- ----------------------------------------------------- +CREATE SCHEMA IF NOT EXISTS `userdb` DEFAULT CHARACTER SET utf8 ; +-- ----------------------------------------------------- +-- Schema userdb +-- ----------------------------------------------------- +USE `userdb` ; + +-- ----------------------------------------------------- +-- Table `userdb`.`user` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `userdb`.`user` ( + `id` INT NOT NULL AUTO_INCREMENT, + `active` VARCHAR(45) NOT NULL DEFAULT '1', + `email` VARCHAR(45) NOT NULL, + `title` VARCHAR(45) NOT NULL, + `firstname` VARCHAR(45) NOT NULL, + `lastname` VARCHAR(45) NOT NULL, + `industry` VARCHAR(45) NULL, + `organisation` VARCHAR(45) NULL, + `speciality` VARCHAR(100) NULL, + `createdDate` DATE NOT NULL, + PRIMARY KEY (`id`)) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `userdb`.`credential` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `userdb`.`credential` ( + `password` VARCHAR(255) NOT NULL, + `resetPasswordToken` VARCHAR(255) NULL, + `resetPasswordExpires` BIGINT(11) NULL, + `user_id` INT NOT NULL, + PRIMARY KEY (`user_id`), + CONSTRAINT `fk_credential_user` + FOREIGN KEY (`user_id`) + REFERENCES `userdb`.`user` (`id`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `userdb`.`role` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `userdb`.`role` ( + `id` INT NOT NULL, + `name` VARCHAR(45) NOT NULL, + PRIMARY KEY (`id`)) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `userdb`.`user_project_role` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `userdb`.`user_project_role` ( + `project_id` INT NOT NULL, + `user_id` INT NOT NULL, + `role_id` INT NOT NULL, + PRIMARY KEY (`user_id`, `role_id`), + INDEX `fk_user_project_role_role1_idx` (`role_id` ASC) VISIBLE, + CONSTRAINT `fk_user_project_role_user1` + FOREIGN KEY (`user_id`) + REFERENCES `userdb`.`user` (`id`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_user_project_role_role1` + FOREIGN KEY (`role_id`) + REFERENCES `userdb`.`role` (`id`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +SET SQL_MODE=@OLD_SQL_MODE; +SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; +SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; -- GitLab From 98e0620da4e9be1b88294302668d290a7a711d48 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Mon, 16 Dec 2019 16:59:21 +0100 Subject: [PATCH 060/161] update userdb: add user_groups --- database/userdb_121219.sql | 169 +++++++++++++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 database/userdb_121219.sql diff --git a/database/userdb_121219.sql b/database/userdb_121219.sql new file mode 100644 index 00000000..17182485 --- /dev/null +++ b/database/userdb_121219.sql @@ -0,0 +1,169 @@ +-- MySQL dump 10.13 Distrib 5.7.28, for Linux (x86_64) +-- +-- Host: localhost Database: userdb +-- ------------------------------------------------------ +-- Server version 5.7.28-0ubuntu0.16.04.2 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `credential` +-- + +DROP TABLE IF EXISTS `credential`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `credential` ( + `password` varchar(255) NOT NULL, + `resetPasswordToken` varchar(255) DEFAULT NULL, + `resetPasswordExpires` bigint(11) DEFAULT NULL, + `user_id` int(11) NOT NULL, + PRIMARY KEY (`user_id`), + CONSTRAINT `fk_credential_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `credential` +-- + +LOCK TABLES `credential` WRITE; +/*!40000 ALTER TABLE `credential` DISABLE KEYS */; +INSERT INTO `credential` VALUES ('$2a$10$aaazJI39YqSX4E4IioZLyeij7PNVJOftflRoyR8cnEsJcnfiCEkJG',NULL,NULL,1),('$2a$10$mwSQgaevI6TMlADnNV4wXOHSbU0vMPFk0gXvF7k8uO7rq2nlq4i1m',NULL,NULL,2),('$2a$10$HdtI166dTpiDJ0DJ3iUdN.egdlVISeqKTdiVjK0pO3YCka4leCMqa',NULL,NULL,3),('$2a$10$.B64LLuZjih.N7mIiECfrOJreHS2wl/Tuq8Y3dQBR0Ibo7Qiyu46G',NULL,NULL,4),('$2a$10$9nr4ZPwwIFCmI9ui3cMSYOOm/4A87zEuXjUKITWrednzVgN9TkSdC',NULL,NULL,5),('$2a$10$jbh/nfxvQd.38I/7xjoPG..ouy5IEBHx/IXXKeDJRB7gyeLIXYgzS',NULL,NULL,6),('$2a$10$q.Az8ugqSV/pIJJUFL6zsuKNeOyRqkJ5VwETX5qgTrw87GFkJe.oa',NULL,NULL,7),('$2a$10$.2F7VAwc1coUEqApy0WKxOS3aa469IA/HS/5.55k9KSETXGNzHzc2',NULL,NULL,8),('$2a$10$N/pEeFf09M4JleRr7nWoqOgFE9BJ9CrCqmMwD6WVA0PIq9sn7TKzO',NULL,NULL,9),('$2a$10$aaazJI39YqSX4E4IioZLyeij7PNVJOftflRoyR8cnEsJcnfiCEkJG','4492472ebff697897f79b90221eed62c92daf4ce',1576064194107,10),('$2a$10$1IOasn3XS80V49A4R5c3terXZ.U9cw6tnulwvpH0hojFRiLDOaiGS',NULL,NULL,11),('$2a$10$PRScebJjV45CCkn0E2x0.OCasH131Mbu1.K.o.6TO3.SnAZKpGXS2',NULL,NULL,12),('$2a$10$79/hpCUI3pe7w4uKqntdC.6uvxXPj3/pqxgrE5Q8QRp7mFeeOeHeG',NULL,NULL,13),('$2a$10$AjfyBato1aDfZmRVQky24.6xHspwxmDg0OuauTlU2QE6.W/0.Nfj6',NULL,NULL,14),('$2a$10$dyJeMvCcwfFLs0T0z2aXSeQPVkXzltQhA5zzFzUUEAddjG.5bvwUW',NULL,NULL,15),('$2a$10$.B64LLuZjih.N7mIiECfrOJreHS2wl/Tuq8Y3dQBR0Ibo7Qiyu46G',NULL,NULL,16),('$2a$10$jGcRXSLA0l4cOb7Y1/c6Wehml/8O3b9J17zJbfQLfv6PCOQF3/rYq',NULL,NULL,18),('$2a$10$JIMQ7fHiQWpbEijzvViVMeSFcprSFNjQFdfPjtgZCEGtOHv.NTL/i',NULL,NULL,19); +/*!40000 ALTER TABLE `credential` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `role` +-- + +DROP TABLE IF EXISTS `role`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `role` ( + `id` int(11) NOT NULL, + `name` varchar(45) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `role` +-- + +LOCK TABLES `role` WRITE; +/*!40000 ALTER TABLE `role` DISABLE KEYS */; +INSERT INTO `role` VALUES (1,'ADMIN'),(2,'USER'); +/*!40000 ALTER TABLE `role` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `user` +-- + +DROP TABLE IF EXISTS `user`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `user` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `active` varchar(45) NOT NULL DEFAULT '1', + `email` varchar(45) NOT NULL, + `title` varchar(45) NOT NULL, + `firstname` varchar(45) NOT NULL, + `lastname` varchar(45) NOT NULL, + `industry` varchar(45) DEFAULT NULL, + `organisation` varchar(45) DEFAULT NULL, + `speciality` varchar(100) DEFAULT NULL, + `createdDate` date NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `user` +-- + +LOCK TABLES `user` WRITE; +/*!40000 ALTER TABLE `user` DISABLE KEYS */; +INSERT INTO `user` VALUES (1,'1','testi@testmann.de','Herr','Testi','Testmann','testing','HFT Stuttgart','test-driven testing','2019-12-11'),(2,'1','test@email.de','Frau','Test','Lastname','','','','2019-12-11'),(3,'1','christine.kraus@hft-stuttgart.de','Frau','Christine','Kraus','Bildung','HFT','Innovationslabor M4_LAB','2019-12-11'),(4,'1','volker.coors@hft-stuttgart.de','Prof. Dr.','Volker','Coors','Bildung','HfT Stuttgart','3D-Geodateninfrastrukturen, Visualisierung raumbezogener Daten','2019-12-11'),(5,'1','uta.bronner@hft-stuttgart.de','Prof. Dr.','Uta','Bronner','Bildung','HfT Stuttgart','Human Resources Management','2019-12-11'),(6,'1','michael.bossert@hft-stuttgart.de','Herr','Michael','Bossert','Bildung','HfT Stuttgart','m4_lab','2019-12-11'),(7,'1','patrick.wuerstle@hft-stuttgart.de','Herr','Patrick','Würstle','Bildung','HfT Stuttgart','Geoinformatik','2019-12-11'),(8,'1','thunyathep.santhanavanich@hft-stuttgart.de','Herr','Joe Thunyathep','Santhanavanich','Bildung','HfT Stuttgart','Geoinformatik','2019-12-11'),(9,'1','janto.skowronek@hft-stuttgart.de','Herr','Janto','Skowronek','','','','2019-12-11'),(10,'1','wolfgang.knopki@hft-stuttgart.de','Herr','Wolfgang','Knopki','Bildung','HfT Stuttgart','Administration','2019-12-11'),(11,'1','muddsairsharif@gmail.com','Herr','Muddsair','Sharif','','','','2019-12-11'),(12,'1','hans.mueller@hft-stuttgart.de','Herr','hans','Müller','Bildung','HfT Stuttgart','keines','2019-12-11'),(13,'1','rosanny.sihombing@hft-stuttgart.de','Frau','Rosanny','Sihombing','','','','2019-12-11'),(14,'1','82shhi1mst@hft-stuttgart.de','Frau','Himanshi','Sharma','Software Technology','HFT','','2019-12-11'),(15,'1','hft_gitlab@ericduminil.com','Herr','Eric','Duminil','zafh.net','HfT Stuttgart','urbane simulation','2019-12-11'),(16,'1','volker.coors@arcor.de','Prof. Dr.','Volker','Coors','','Herr','','2019-12-11'),(18,'1','matthias.betz@hft-stuttgart.de','Herr','Matthias','Betz','','HFT','','2019-12-11'),(19,'1','mail@khbrassel.de','Herr','Kai-Holger','Brassel','','','','2019-12-11'); +/*!40000 ALTER TABLE `user` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `user_groups` +-- + +DROP TABLE IF EXISTS `user_groups`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `user_groups` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `groups_string` longtext, + `user_id` int(11) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `user_id` (`user_id`), + CONSTRAINT `user_groups_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `user_groups` +-- + +LOCK TABLES `user_groups` WRITE; +/*!40000 ALTER TABLE `user_groups` DISABLE KEYS */; +INSERT INTO `user_groups` VALUES (1,'jira-software-users,confluence-users,jira-administrators,confluence-administrators',10),(2,'jira-software-users,confluence-users',9),(3,'jira-software-users,confluence-users',1); +/*!40000 ALTER TABLE `user_groups` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `user_project_role` +-- + +DROP TABLE IF EXISTS `user_project_role`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `user_project_role` ( + `project_id` int(11) NOT NULL, + `user_id` int(11) NOT NULL, + `role_id` int(11) NOT NULL, + PRIMARY KEY (`user_id`,`role_id`), + KEY `fk_user_project_role_role1_idx` (`role_id`), + CONSTRAINT `fk_user_project_role_role1` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT `fk_user_project_role_user1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `user_project_role` +-- + +LOCK TABLES `user_project_role` WRITE; +/*!40000 ALTER TABLE `user_project_role` DISABLE KEYS */; +INSERT INTO `user_project_role` VALUES (1,1,1),(1,2,2),(1,3,2),(1,4,2),(1,5,2),(1,6,2),(1,7,2),(1,8,2),(1,9,2),(1,10,2),(1,11,2),(1,12,2),(1,13,2),(1,14,2),(1,15,2),(1,16,2),(1,18,2),(1,19,2); +/*!40000 ALTER TABLE `user_project_role` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Dumping routines for database 'userdb' +-- +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2019-12-12 10:24:07 -- GitLab From f5be0bd6d75915d054ce9db7f3359b11733d6912 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Tue, 17 Dec 2019 11:20:36 +0100 Subject: [PATCH 061/161] devel configuration --- config/config.js | 6 ++--- routes/dbconn.js | 2 +- routes/routes.js | 55 ++++++++++++++++++---------------------------- views/profile.pug | 14 ++++++++---- views/security.pug | 12 +++++----- views/services.pug | 6 ++--- 6 files changed, 43 insertions(+), 52 deletions(-) diff --git a/config/config.js b/config/config.js index c0d068db..236e7943 100644 --- a/config/config.js +++ b/config/config.js @@ -1,9 +1,7 @@ module.exports = { development: { app: { - hostname: 'm4lab.hft-stuttgart.de/account', name: 'User Account Management', - hostname: 'm4lab.hft-stuttgart.de/account', port: process.env.PORT || 9989 }, passport: { @@ -11,12 +9,12 @@ module.exports = { saml: { path: process.env.SAML_PATH || '/saml/SSO', entryPoint: process.env.SAML_ENTRY_POINT || 'https://transfer.hft-stuttgart.de/idp/saml2/idp/SSOService.php', - issuer: 'sp-account-testing.m4lab.hft-stuttgart.de', + issuer: 'sp-account.m4lab.hft-stuttgart.de', logoutUrl: 'https://transfer.hft-stuttgart.de/idp/saml2/idp/SingleLogoutService.php' } }, database: { - host: 'transfer.hft-stuttgart.de', // DB host + host: 'localhost', // DB host user: 'DBManager', // DB username password: 'Stuttgart2019', // DB password port: 3306, // MySQL port diff --git a/routes/dbconn.js b/routes/dbconn.js index 4b8f44b6..0c3c67c4 100644 --- a/routes/dbconn.js +++ b/routes/dbconn.js @@ -18,7 +18,7 @@ userConnection.connect(function(err) { }) userConnection.query('USE '+config.database.dbUser) -// db connection test +// user db connection test userConnection.query('SELECT 1 + 5 AS solution', function (err, rows, fields) { if (err) throw err console.log('Solution = ', rows[0].solution) diff --git a/routes/routes.js b/routes/routes.js index 9123d174..a73805eb 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -64,27 +64,16 @@ module.exports = function (app, config, passport) { res.send(JSON.stringify(req.flash('test'))); }); */ - app.get('/', function (req, res) { - res.redirect('/account/profile') - }); - - app.get('/login', - passport.authenticate(config.passport.strategy, - { - successRedirect: '/account/', - failureRedirect: '/account/login' - }) - ); // ============= SAML ============== app.post(config.passport.saml.path, passport.authenticate(config.passport.strategy, { - failureRedirect: '/account/', + failureRedirect: '/', failureFlash: true }), function (req, res) { - res.redirect('/account/'); + res.redirect('/'); } ); @@ -120,14 +109,18 @@ module.exports = function (app, config, passport) { // ======== APP ROUTES ==================== app.get('/', function (req, res) { - res.redirect('/account/profile') + res.redirect('/profile') + }); + + app.get('/error', function (req, res) { + res.render('error') }); app.get('/login', passport.authenticate(config.passport.strategy, { - successRedirect: '/account/', - failureRedirect: '/account/login' + successRedirect: '/', + failureRedirect: '/login' }) ); @@ -153,7 +146,6 @@ module.exports = function (app, config, passport) { }); }); - app.get('/profile', function (req, res) { if (req.isAuthenticated()) { methods.getUserByEmail(req.user.email, function(data, err){ @@ -165,7 +157,7 @@ module.exports = function (app, config, passport) { } }) } else { - res.redirect('/account/login'); + res.redirect('/login'); } }); @@ -229,18 +221,17 @@ module.exports = function (app, config, passport) { } ]) } else { - res.redirect('/account/login'); + res.redirect('/login'); } }); app.get('/security', function (req, res) { if (req.isAuthenticated()) { - console.log(req.user) res.render('security', { user: req.user // useful for view engine, useless for HTML }); } else { - res.redirect('/account/login'); + res.redirect('/login'); } }); @@ -265,11 +256,11 @@ module.exports = function (app, config, passport) { else { req.flash('success', 'Profile updated!'); } - res.redirect('/account/profile'); + res.redirect('/profile'); }) } } else { - res.redirect('/account/login'); + res.redirect('/login'); } }); @@ -284,7 +275,7 @@ module.exports = function (app, config, passport) { // Load hashed passwd from DB dbconn.user.query('SELECT password FROM credential WHERE user_id='+userId, function (err, rows, fields) { if (err) { - res.redirect('/account/500') + res.redirect('/500') throw err } var userPwd = rows[0].password @@ -297,12 +288,12 @@ module.exports = function (app, config, passport) { } else if (!isMatch) { req.flash('error', "Sorry, your password was incorrect. Please double-check your password.") - res.redirect('/account/security') + res.redirect('/security') } else { if ( newPwd != retypePwd ) { req.flash('error', "Passwords do no match. Please make sure you re-type your new password correctly.") - res.redirect('/account/security') + res.redirect('/security') } else { // update password @@ -321,7 +312,7 @@ module.exports = function (app, config, passport) { req.flash('success', "Pasword updated!") console.log('pasword updated!') } - res.redirect('/account/security') + res.redirect('/security') }) }); }); @@ -333,7 +324,7 @@ module.exports = function (app, config, passport) { }) } else { - res.redirect('/account/login'); + res.redirect('/login'); } }); @@ -399,16 +390,15 @@ module.exports = function (app, config, passport) { else { req.flash('success', 'An e-mail has been sent to ' + emailAddress + ' with further instructions.'); } - res.redirect('/account/forgotPwd'); + res.redirect('/forgotPwd'); }); }); app.get('/reset/:token', function(req, res) { methods.checkUserToken(req.params.token, function(err, user){ - //console.log(user); if (!user) { req.flash('error', 'Password reset token is invalid or has expired.'); - res.redirect('/account/forgotPwd'); + res.redirect('/forgotPwd'); } else { res.render('reset'); @@ -494,9 +484,6 @@ module.exports = function (app, config, passport) { }); }) - - - app.get('/email/:email', function(req, res) { methods.checkUserEmail(req.params.email, function(err, user){ diff --git a/views/profile.pug b/views/profile.pug index 94e9500a..7b2691d5 100644 --- a/views/profile.pug +++ b/views/profile.pug @@ -35,8 +35,8 @@ html(lang="en") span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") a(class="nav-link" href="#" aria-selected="true") Profile - a(class="nav-link" href="/account/security" aria-selected="false") Security - a(class="nav-link" href="/account/services" aria-selected="false") Services + a(class="nav-link" href="/security" aria-selected="false") Security + a(class="nav-link" href="/services" aria-selected="false") Services div(class="col-sm-9") if successes for success in successes @@ -50,13 +50,18 @@ html(lang="en") div(class="form-row") div(class='form-group col-md-2') label(for="title") Title - // to read: https://stackoverflow.com/questions/39997579/pug-templates-how-to-mark-option-in-dropdown-list-as-selected select#inputTitle(name="inputTitle", class="form-control", value=user.title) option(value="Frau/Herr") Frau/Herr option(value="Frau") Frau option(value="Herr") Herr option(value="Dr.") Dr. option(value="Prof. Dr.") Prof. Dr. + script. + var titleOptions = document.getElementById('inputTitle').options; + for (i=0; i < titleOptions.length; i++) { + if (titleOptions[i].value == '#{user.title}') + titleOptions[i].selected = true; + } div(class='form-group col-md-3') label(for="firstname") Vorname input#inputFirstname(name="inputFirstname", type="text", class="form-control", placeholder="Vorname", value=user.firstname required) @@ -87,4 +92,5 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="/js/headfoot.js") + script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") + diff --git a/views/security.pug b/views/security.pug index 37c990e9..ff131d73 100644 --- a/views/security.pug +++ b/views/security.pug @@ -37,9 +37,9 @@ html(lang="en") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/account/profile" aria-selected="true") Profile + a(class="nav-link" href="/profile" aria-selected="true") Profile a(class="nav-link" href="#" aria-selected="false") Security - a(class="nav-link" href="/account/services" aria-selected="false") Services + a(class="nav-link" href="/services" aria-selected="false") Services div(class="col-sm-9") if successes for success in successes @@ -49,7 +49,7 @@ html(lang="en") for error, i in errors div.alert.alert-danger.alert-dismissible.fade.show #{ error } a(class="close", href="#", data-dismiss="alert", aria-label="close") × - form(class="needs-validation", method="post", action="/account/changePwd" novalidate) + form(class="needs-validation", method="post", action="/changePwd" novalidate) div(class="form-group row") label(for="currPwd") Current Password input(id="inputCurrPwd", name="inputCurrPwd", type="password", class="form-control" required) @@ -72,9 +72,9 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="/account/js/security.js") - script(src="/account/js/generalFunction.js") - script(src="/js/headfoot.js") + script(src="/js/security.js") + script(src="/js/generalFunction.js") + script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") script. // check input fields 'use strict'; diff --git a/views/services.pug b/views/services.pug index 18e0f8ea..a751c928 100644 --- a/views/services.pug +++ b/views/services.pug @@ -34,8 +34,8 @@ html(lang="en") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/account/profile" aria-selected="true") Profile - a(class="nav-link" href="/account/security" aria-selected="false") Security + a(class="nav-link" href="/profile" aria-selected="true") Profile + a(class="nav-link" href="/security" aria-selected="false") Security a(class="nav-link" href="#" aria-selected="false") Services div(class="col-sm-9") if successes @@ -60,4 +60,4 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="/js/headfoot.js") \ No newline at end of file + script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file -- GitLab From b73769811adfb06c228b093b4ccf608df9922f40 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Tue, 17 Dec 2019 11:32:14 +0100 Subject: [PATCH 062/161] testing pushing to https --- testfile | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 testfile diff --git a/testfile b/testfile new file mode 100644 index 00000000..291c8df5 --- /dev/null +++ b/testfile @@ -0,0 +1,2 @@ +this is a testfile + -- GitLab From 17f32d6d4c06ccf96b68699b1902f0667f8c432d Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Tue, 17 Dec 2019 11:33:51 +0100 Subject: [PATCH 063/161] testing pushing to https --- testfile | 1 + 1 file changed, 1 insertion(+) diff --git a/testfile b/testfile index 291c8df5..5ae3094a 100644 --- a/testfile +++ b/testfile @@ -1,2 +1,3 @@ this is a testfile +and another line goes here -- GitLab From 1efbf25e7040d318e543a1344bfd8c3bc7488f23 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Tue, 17 Dec 2019 11:42:48 +0100 Subject: [PATCH 064/161] removed testing file --- testfile | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 testfile diff --git a/testfile b/testfile deleted file mode 100644 index 5ae3094a..00000000 --- a/testfile +++ /dev/null @@ -1,3 +0,0 @@ -this is a testfile - -and another line goes here -- GitLab From 5c4db62addff5024b4d3f71d75aa49b1a3aea26f Mon Sep 17 00:00:00 2001 From: Rosanny Date: Tue, 17 Dec 2019 15:05:54 +0100 Subject: [PATCH 065/161] devel config --- views/forgotPwd.pug | 4 ++-- views/profile.pug | 5 ++--- views/registration.pug | 6 +++--- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/views/forgotPwd.pug b/views/forgotPwd.pug index 84ea9340..1cde0888 100644 --- a/views/forgotPwd.pug +++ b/views/forgotPwd.pug @@ -40,7 +40,7 @@ html(lang="en") for error, i in errors div.alert.alert-danger.alert-dismissible.fade.show #{ error } a(class="close", href="#", data-dismiss="alert", aria-label="close") × - form#forgotForm(class="form-signin", method="POST", action="/account/forgotPwd") + form#forgotForm(class="form-signin", method="POST") img(src="https://transfer.hft-stuttgart.de/images/demo/m4lab_logo.jpg", class="img-responsive center-block", width="185", height="192") div(class="form-row") input#inputEmail(name="inputEmail", type="email", class="form-control", placeholder="Email" required) @@ -53,4 +53,4 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="/js/headfoot.js") + script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") diff --git a/views/profile.pug b/views/profile.pug index 7b2691d5..2261051a 100644 --- a/views/profile.pug +++ b/views/profile.pug @@ -46,7 +46,7 @@ html(lang="en") for error, i in errors div.alert.alert-danger.alert-dismissible.fade.show #{ error } a(class="close", href="#", data-dismiss="alert", aria-label="close") × - form#profileForm(method="POST",action="/updateProfile") + form#profileForm(method="POST", action="/updateProfile") div(class="form-row") div(class='form-group col-md-2') label(for="title") Title @@ -92,5 +92,4 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") - + script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file diff --git a/views/registration.pug b/views/registration.pug index 8d549496..e1088edf 100644 --- a/views/registration.pug +++ b/views/registration.pug @@ -86,6 +86,6 @@ html(lang="en") // toggle password script(src='https://unpkg.com/bootstrap-show-password@1.2.1/dist/bootstrap-show-password.min.js') // M4_LAB - script(src="/account/js/generalFunction.js") - script(src="/account/js/registration.js") - script(src="/js/headfoot.js") \ No newline at end of file + script(src="/js/generalFunction.js") + script(src="/js/registration.js") + script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file -- GitLab From cddaca293f23f5b0fc3d338fb2cba647fe26e901 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Tue, 17 Dec 2019 15:07:10 +0100 Subject: [PATCH 066/161] delete checkUserToken, add getUserByToken --- routes/methods.js | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/routes/methods.js b/routes/methods.js index cdec75e0..3f3edf54 100644 --- a/routes/methods.js +++ b/routes/methods.js @@ -83,19 +83,22 @@ var methods = { callback(err, user); }); }, - checkUserToken: function(token, callback) { + getUserByToken: function(token, callback) { var user; - dbconn.user.query('SELECT user_id FROM credential WHERE resetPasswordToken = "'+token+'" and resetPasswordExpires > '+Date.now(), function (err, rows, fields) { - if (err) { - throw err; - } - else { - if ( rows.length > 0) { - user = rows[0]; + dbconn.user.query('SELECT t1.user_id, t2.email FROM userdb.credential AS t1 INNER JOIN userdb.user AS t2 ON t1.user_id = t2.id AND t1.resetPasswordToken = "' + +token+'" and resetPasswordExpires > '+Date.now(), function (err, rows, fields) { + if (err) { + throw err; + } + else { + if ( rows.length > 0) { + user = rows[0] + console.log(user) + } } + callback(err, user); } - callback(err, user); - }); + ); }, updateUser: function(userData, callback) { dbconn.user.query('UPDATE user SET ? WHERE email = "' +userData.email+'"', userData, function (err, rows, fields) { -- GitLab From eb68b4cbf5e5843c6cbeb053b938f0d4a621cc61 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Tue, 17 Dec 2019 15:08:35 +0100 Subject: [PATCH 067/161] email notification after update/reset password --- routes/routes.js | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/routes/routes.js b/routes/routes.js index a73805eb..0e136c67 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -106,6 +106,11 @@ module.exports = function (app, config, passport) { subject: "", text: "" }; + + var updatePasswordMailContent = "Hello,\n\n"+ + "We would like to notify that your password has been successfully updated.\n\n"+ + "Thanks,\nM4_LAB Team" + var updatePasswordMailSubject = "Your M4_LAB Password has been updated" // ======== APP ROUTES ==================== app.get('/', function (req, res) { @@ -310,7 +315,14 @@ module.exports = function (app, config, passport) { } else { req.flash('success', "Pasword updated!") - console.log('pasword updated!') + mailOptions.to = req.user.email + mailOptions.subject = "Your M4_LAB Password has been updated" + mailOptions.text = updatePasswordMailContent + smtpTransport.sendMail(mailOptions, function(err) { + if (err) { + console.log(err) + } + }); } res.redirect('/security') }) @@ -357,7 +369,7 @@ module.exports = function (app, config, passport) { emailSubject = "M4_LAB Password Reset"; emailContent = "Hi User,\n\n"+ "we've received a request to reset your password. If you didn't make the request, just ignore this email.\n\n"+ - "Otherwise, you can reset your password using this link: https://" + config.app.hostname + "/reset/" + token + "\n" + + "Otherwise, you can reset your password using this link: http://localhost:9989/reset/" + token + "\n" + "This password reset is only valid for 1 hour.\n\n"+ "Thanks,\nM4_LAB Team" @@ -395,7 +407,7 @@ module.exports = function (app, config, passport) { }); app.get('/reset/:token', function(req, res) { - methods.checkUserToken(req.params.token, function(err, user){ + methods.getUserByToken(req.params.token, function(err, user){ if (!user) { req.flash('error', 'Password reset token is invalid or has expired.'); res.redirect('/forgotPwd'); @@ -408,7 +420,7 @@ module.exports = function (app, config, passport) { app.post('/reset/:token', function(req, res) { var newPwd = req.body.inputNewPwd - methods.checkUserToken(req.params.token, function(err, user){ + methods.getUserByToken(req.params.token, function(err, user){ if (user) { // encrypt password bcrypt.genSalt(saltRounds, function(err, salt) { @@ -425,9 +437,17 @@ module.exports = function (app, config, passport) { } else { req.flash('success', "Your pasword has been updated.") - console.log('pasword updated!') + // send notifiaction email + mailOptions.to = user.email + mailOptions.subject = updatePasswordMailSubject + mailOptions.text = updatePasswordMailContent + smtpTransport.sendMail(mailOptions, function(err) { + if (err) { + console.log(err) + } + }); + // redirect to login page res.redirect('/login') - // todo: send confirmation email } }) }); -- GitLab From a330dbb5e3dda3a80e176bffe05bb72a1c7100ad Mon Sep 17 00:00:00 2001 From: Rosanny Date: Tue, 17 Dec 2019 15:59:10 +0100 Subject: [PATCH 068/161] small improvement --- views/registration.pug | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/views/registration.pug b/views/registration.pug index e1088edf..1060679d 100644 --- a/views/registration.pug +++ b/views/registration.pug @@ -49,10 +49,10 @@ html(lang="en") h5(class="mb-3 font-weight-bold") Login Data div(class='form-row') div(class='form-group col-md-6') - input#inputEmail(name="inputEmail", type="email", class="form-control", placeholder="Email" required) + input#inputEmail(name="inputEmail", type="email", class="form-control", placeholder="Email*" required) span#emailWarning(class='warning') div(class="form-group col-md-6") - input#inputPassword(name="inputPassword", type="password", class="form-control", data-toggle="password", placeholder="Password" required) + input#inputPassword(name="inputPassword", type="password", class="form-control", data-toggle="password", placeholder="Password*" required) span#passwordWarning(class='warning') h5(class="mb-3 font-weight-bold") Profile Data div(class="form-row") @@ -64,18 +64,21 @@ html(lang="en") option(value="Dr.") Dr. option(value="Prof. Dr.") Prof. Dr. div(class='form-group col-md-4') - input#inputFirstname(name="inputFirstname", type="text", class="form-control", placeholder="Vorname" required) + input#inputFirstname(name="inputFirstname", type="text", class="form-control", placeholder="Vorname*" required) div(class='form-group col-md-4') - input#inputLastname(name="inputLastname", type="text", class="form-control", placeholder="Nachname" required) + input#inputLastname(name="inputLastname", type="text", class="form-control", placeholder="Nachname*" required) div(class="form-group") input#inputOrganisation(name="inputOrganisation", type="text", class="form-control", placeholder="Unternehmen") div(class="form-group") input#inputIndustry(name="inputIndustry", type="text", class="form-control", placeholder="Branche") div(class="form-group") - input#inputSpeciality(name="inputSpeciality", type="text", class="form-control", placeholder="Fachgebiete") + input#inputSpeciality(name="inputSpeciality", type="text", class="form-control", placeholder="Fachgebiete") + p + em + small * Mandatory input#submitBtn(type="submit", class="btn btn-outline-dark btn-block", value="Submit" disabled) br - p(class="text-center") Already have an account? Login. + p(class="text-center") Already have an account? Login. // jQuery -- GitLab From 8ef77955a7eee94e7089d92500ce54a7415e49da Mon Sep 17 00:00:00 2001 From: Rosanny Date: Wed, 18 Dec 2019 15:46:03 +0100 Subject: [PATCH 069/161] small update --- views/registration.pug | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/views/registration.pug b/views/registration.pug index 1060679d..88ef5a93 100644 --- a/views/registration.pug +++ b/views/registration.pug @@ -73,9 +73,7 @@ html(lang="en") input#inputIndustry(name="inputIndustry", type="text", class="form-control", placeholder="Branche") div(class="form-group") input#inputSpeciality(name="inputSpeciality", type="text", class="form-control", placeholder="Fachgebiete") - p - em - small * Mandatory + p * Mandatory input#submitBtn(type="submit", class="btn btn-outline-dark btn-block", value="Submit" disabled) br p(class="text-center") Already have an account? Login. -- GitLab From cd83235a09e10337df15f1d08713faa841ff1249 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Wed, 18 Dec 2019 15:46:36 +0100 Subject: [PATCH 070/161] update service page --- routes/routes.js | 4 ++-- views/services.pug | 28 +++++++++++++++++++++------- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/routes/routes.js b/routes/routes.js index 0e136c67..7b71ded6 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -204,9 +204,9 @@ module.exports = function (app, config, passport) { for (var i = 0; i < projectsOverview.length; i++) { // check if projectId is exist in userProjectId[] - var status = "You cannot access this service" + var status = false if (userProjectId.indexOf(projectsOverview[i].id) > -1) { - status = "You can access this service" + status = true } // add data to JSON object allProjects.push({ diff --git a/views/services.pug b/views/services.pug index a751c928..41fe58d3 100644 --- a/views/services.pug +++ b/views/services.pug @@ -46,13 +46,20 @@ html(lang="en") for error, i in errors div.alert.alert-danger.alert-dismissible.fade.show #{ error } a(class="close", href="#", data-dismiss="alert", aria-label="close") × - ul + table for item in project - li= item.title - ul - li= item.summary - li= item.cp - li= item.userStatus + tr + td #{item.title} + if item.userStatus + td + button(type="button", class="btn btn-secondary", onclick="unsubscribe()") Unsubscribe + else + td + button(type="button", class="btn btn-success", onclick="subscribe()") Subscribe + tr + td(colspan="2") #{item.summary} + tr + td(colspan="2") Contact Person: #{item.cp} // jQuery script(src="https://code.jquery.com/jquery-3.3.1.min.js") @@ -60,4 +67,11 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file + script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") + script. + function subscribe() { + alert("To be implemented: Send a request to join/participate/have access to the page of the requested service") + } + function unsubscribe() { + alert("To be implemented: Send a request to withdraw access") + } \ No newline at end of file -- GitLab From cf5f8161c3c088b7060a92f493b44752af301db0 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Wed, 5 Feb 2020 13:52:59 +0100 Subject: [PATCH 071/161] add header for logged-in users --- public/js/headfootLogout.js | 241 ++++++++++++++++++++++++++++++++++++ 1 file changed, 241 insertions(+) create mode 100644 public/js/headfootLogout.js diff --git a/public/js/headfootLogout.js b/public/js/headfootLogout.js new file mode 100644 index 00000000..3de57921 --- /dev/null +++ b/public/js/headfootLogout.js @@ -0,0 +1,241 @@ +var menu = [{'name':'Informationen', 'combos':[{'name':'Projekte', 'link':'/project'}, {'name':'Über das M4_LAB', 'link':'/projectoverview?projectID=1'}], 'type':'dropdown', 'link':'#'},{'name':'Zusammenarbeit', 'combos':[{'name':'Mailinglisten', 'link':'/mailinglists'},{'name':'Videokonferenzen', 'link':'/videoconference.html'},/* {'name':'...', 'link':'#'}*/], 'type':'dropdown', 'link':'#'},{'name':'Events', 'combos':[{'name':'Veranstaltungen der HfT', 'link':'http://www.hft-stuttgart.de/Aktuell/Veranstaltungen/'}/*,{'name':'...', 'link':'#'}*/], 'type':'dropdown', 'link':'#'},/*{'name':'Bürgerbeteiligung', 'combos':[{'name':'...', 'link':'#'}, {'name':'...', 'link':'#'}], 'type':'dropdown', 'link':'#'},*/{'name':'Logout', 'combos':[], 'type':'logoutbutton', 'link':'/logout'}]; + + +var hft_links = [{'url':'http://www.hft-stuttgart.de/Forschung/M4-Lab/Team/index.html/de', 'name':'Kontakt'},{'url':'http://www.hft-stuttgart.de/Hochschule/Impressum.html/de', 'name':'Impressum'},{'url':'http://www.hft-stuttgart.de/Einrichtungen/Datenschutz/Datenschutz-Homepage', 'name':'Datenschutz'}] + +var socialmedias = [{'url':'https://twitter.com/InnolabM4', 'name': 'fa-twitter'}, {'url':'https://www.facebook.com/HfTStuttgart/', 'name': 'fa-facebook-square'}, {'url':'https://www.instagram.com/m4_lab/', 'name': 'fa-instagram'}, {'url':'https://de.linkedin.com/school/hochschule-f%C3%BCr-technik-stuttgart-%E2%80%93-university-of-applied-sciences/', 'name': 'fa-linkedin'}, {'url':'https://www.youtube.com/channel/UCi0_JfF2qMZbOhOnNH5PyHA', 'name': 'fa-youtube'}]; + +var footer_images = [/*{'src':'/images/demo/bbf_logo.png', 'alt':'BMBF'},*/ {'src':'/images/demo/Innovative_Hochschule_Initiative_BMBF_GWK_RGB.jpg', 'alt':'Innovative Hochschule'}] + +function prependChild(parent,child){ + parent.insertBefore(child, parent.childNodes[0]); +} + +function userAuthenticated(){ + let params = new URLSearchParams(window.location.search); + if(params.get('isAuthenticatedUser')){ + return true; + }else if(document.getElementById('loginswitch')){ //relikt login via OAuth + if(document.getElementById('loginswitch').getAttribute('authenticated') == '1'){ + return true; + } + }else{ + return false; + } +} + + +function readCookie(cname) { + var name = cname + "="; + var decodedCookie = decodeURIComponent(document.cookie); + var ca = decodedCookie.split(';'); + for(var i = 0; i Date: Wed, 5 Feb 2020 13:53:40 +0100 Subject: [PATCH 072/161] add Logout button to header --- views/profile.pug | 2 +- views/security.pug | 2 +- views/services.pug | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/views/profile.pug b/views/profile.pug index 2261051a..47c1f7e8 100644 --- a/views/profile.pug +++ b/views/profile.pug @@ -92,4 +92,4 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file + script(src="/js/headfootLogout.js") \ No newline at end of file diff --git a/views/security.pug b/views/security.pug index ff131d73..95cf50ea 100644 --- a/views/security.pug +++ b/views/security.pug @@ -74,7 +74,7 @@ html(lang="en") // M4_LAB script(src="/js/security.js") script(src="/js/generalFunction.js") - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") + script(src="/js/headfootLogout.js") script. // check input fields 'use strict'; diff --git a/views/services.pug b/views/services.pug index 41fe58d3..f095144b 100644 --- a/views/services.pug +++ b/views/services.pug @@ -67,7 +67,7 @@ html(lang="en") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") + script(src="/js/headfootLogout.js") script. function subscribe() { alert("To be implemented: Send a request to join/participate/have access to the page of the requested service") -- GitLab From 001f428fcc72d7b8ca31da84670b9d1e704c7461 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 14 Feb 2020 16:00:44 +0100 Subject: [PATCH 073/161] db Hostname changed from localhost to transfer --- config/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.js b/config/config.js index 236e7943..4787e1c6 100644 --- a/config/config.js +++ b/config/config.js @@ -14,7 +14,7 @@ module.exports = { } }, database: { - host: 'localhost', // DB host + host: 'transfer.hft-stuttgart.de', // DB host user: 'DBManager', // DB username password: 'Stuttgart2019', // DB password port: 3306, // MySQL port -- GitLab From 339ce36f5703868156d2eba8e0220dd7778db108 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 14 Feb 2020 16:27:55 +0100 Subject: [PATCH 074/161] updated URLs to match deployment --- config/config.js | 2 +- routes/routes.js | 40 ++++++++++++++++++++-------------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/config/config.js b/config/config.js index 236e7943..8101d237 100644 --- a/config/config.js +++ b/config/config.js @@ -14,7 +14,7 @@ module.exports = { } }, database: { - host: 'localhost', // DB host + host: 'tranmsfer.hft-stuttgart.de', // DB host user: 'DBManager', // DB username password: 'Stuttgart2019', // DB password port: 3306, // MySQL port diff --git a/routes/routes.js b/routes/routes.js index 7b71ded6..f8bfbc73 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -124,14 +124,14 @@ module.exports = function (app, config, passport) { app.get('/login', passport.authenticate(config.passport.strategy, { - successRedirect: '/', - failureRedirect: '/login' + successRedirect: '/account/', + failureRedirect: '/account/login' }) ); app.get('/logout', function (req, res) { if (req.user == null) { - return res.redirect('/'); + return res.redirect('/account/'); } req.user.nameID = req.user.id; @@ -162,7 +162,7 @@ module.exports = function (app, config, passport) { } }) } else { - res.redirect('/login'); + res.redirect('/account/login'); } }); @@ -226,7 +226,7 @@ module.exports = function (app, config, passport) { } ]) } else { - res.redirect('/login'); + res.redirect('/account/login'); } }); @@ -236,7 +236,7 @@ module.exports = function (app, config, passport) { user: req.user // useful for view engine, useless for HTML }); } else { - res.redirect('/login'); + res.redirect('/account/login'); } }); @@ -261,11 +261,11 @@ module.exports = function (app, config, passport) { else { req.flash('success', 'Profile updated!'); } - res.redirect('/profile'); + res.redirect('/account/profile'); }) } } else { - res.redirect('/login'); + res.redirect('/account/login'); } }); @@ -280,7 +280,7 @@ module.exports = function (app, config, passport) { // Load hashed passwd from DB dbconn.user.query('SELECT password FROM credential WHERE user_id='+userId, function (err, rows, fields) { if (err) { - res.redirect('/500') + res.redirect('/account/500') throw err } var userPwd = rows[0].password @@ -288,17 +288,17 @@ module.exports = function (app, config, passport) { // check if the password is correct bcrypt.compare(currPwd, userPwd, function(err, isMatch) { if (err) { - res.redirect('/500') + res.redirect('/account/500') throw err } else if (!isMatch) { req.flash('error', "Sorry, your password was incorrect. Please double-check your password.") - res.redirect('/security') + res.redirect('/account/security') } else { if ( newPwd != retypePwd ) { req.flash('error', "Passwords do no match. Please make sure you re-type your new password correctly.") - res.redirect('/security') + res.redirect('/account/security') } else { // update password @@ -324,7 +324,7 @@ module.exports = function (app, config, passport) { } }); } - res.redirect('/security') + res.redirect('/account/security') }) }); }); @@ -336,7 +336,7 @@ module.exports = function (app, config, passport) { }) } else { - res.redirect('/login'); + res.redirect('/account/login'); } }); @@ -369,7 +369,7 @@ module.exports = function (app, config, passport) { emailSubject = "M4_LAB Password Reset"; emailContent = "Hi User,\n\n"+ "we've received a request to reset your password. If you didn't make the request, just ignore this email.\n\n"+ - "Otherwise, you can reset your password using this link: http://localhost:9989/reset/" + token + "\n" + + "Otherwise, you can reset your password using this link: http://m4lab.hft-stuttgart.de/account/reset/" + token + "\n" + "This password reset is only valid for 1 hour.\n\n"+ "Thanks,\nM4_LAB Team" @@ -402,7 +402,7 @@ module.exports = function (app, config, passport) { else { req.flash('success', 'An e-mail has been sent to ' + emailAddress + ' with further instructions.'); } - res.redirect('/forgotPwd'); + res.redirect('/account/forgotPwd'); }); }); @@ -410,7 +410,7 @@ module.exports = function (app, config, passport) { methods.getUserByToken(req.params.token, function(err, user){ if (!user) { req.flash('error', 'Password reset token is invalid or has expired.'); - res.redirect('/forgotPwd'); + res.redirect('/account/forgotPwd'); } else { res.render('reset'); @@ -447,7 +447,7 @@ module.exports = function (app, config, passport) { } }); // redirect to login page - res.redirect('/login') + res.redirect('/account/login') } }) }); @@ -455,7 +455,7 @@ module.exports = function (app, config, passport) { } else { req.flash('error', "User not found.") - res.redirect('/login') + res.redirect('/account/login') } }); @@ -498,7 +498,7 @@ module.exports = function (app, config, passport) { else { req.flash('success', 'Your account has been created. Please log in.'); } - res.redirect('/registration'); + res.redirect('/account/registration'); }) }); }); -- GitLab From b9c32470a86c0e122c6259a12ed724ebe569d2c3 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 14 Feb 2020 16:42:50 +0100 Subject: [PATCH 075/161] overseen url change --- routes/routes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/routes.js b/routes/routes.js index f8bfbc73..4908a218 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -114,7 +114,7 @@ module.exports = function (app, config, passport) { // ======== APP ROUTES ==================== app.get('/', function (req, res) { - res.redirect('/profile') + res.redirect('/account/profile') }); app.get('/error', function (req, res) { -- GitLab From a9addad21e7e36efbe1b51d0c3bd94a7fb6398fe Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Mon, 17 Feb 2020 08:00:37 +0100 Subject: [PATCH 076/161] added entity-IDs for different deployments --- config/config.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/config/config.js b/config/config.js index 8101d237..42d1696b 100644 --- a/config/config.js +++ b/config/config.js @@ -9,7 +9,9 @@ module.exports = { saml: { path: process.env.SAML_PATH || '/saml/SSO', entryPoint: process.env.SAML_ENTRY_POINT || 'https://transfer.hft-stuttgart.de/idp/saml2/idp/SSOService.php', - issuer: 'sp-account.m4lab.hft-stuttgart.de', + issuer: 'sp-account.m4lab.hft-stuttgart.de', //local metadata + //issuer: 'sp-account-test.m4lab.hft-stuttgart.de', //testing metadata + //issuer: 'sp-account-prod.m4lab.hft-stuttgart.de', //production metadata logoutUrl: 'https://transfer.hft-stuttgart.de/idp/saml2/idp/SingleLogoutService.php' } }, -- GitLab From 5fa32ab60d34810c26e4bb6c8f2a03a804d0dafe Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Mon, 17 Feb 2020 08:02:51 +0100 Subject: [PATCH 077/161] adjusted sp entity ID to testing --- config/config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/config.js b/config/config.js index 0f96023b..34bf5ccf 100644 --- a/config/config.js +++ b/config/config.js @@ -9,8 +9,8 @@ module.exports = { saml: { path: process.env.SAML_PATH || '/saml/SSO', entryPoint: process.env.SAML_ENTRY_POINT || 'https://transfer.hft-stuttgart.de/idp/saml2/idp/SSOService.php', - issuer: 'sp-account.m4lab.hft-stuttgart.de', //local metadata - //issuer: 'sp-account-test.m4lab.hft-stuttgart.de', //testing metadata + //issuer: 'sp-account.m4lab.hft-stuttgart.de', //local metadata + issuer: 'sp-account-test.m4lab.hft-stuttgart.de', //testing metadata //issuer: 'sp-account-prod.m4lab.hft-stuttgart.de', //production metadata logoutUrl: 'https://transfer.hft-stuttgart.de/idp/saml2/idp/SingleLogoutService.php' } -- GitLab From a30e5e9c5e58a7da677fdcb30186558b80744c8c Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Mon, 17 Feb 2020 08:04:00 +0100 Subject: [PATCH 078/161] adjusted sp entity ID to testing --- config/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.js b/config/config.js index 34bf5ccf..9a37b3a3 100644 --- a/config/config.js +++ b/config/config.js @@ -10,7 +10,7 @@ module.exports = { path: process.env.SAML_PATH || '/saml/SSO', entryPoint: process.env.SAML_ENTRY_POINT || 'https://transfer.hft-stuttgart.de/idp/saml2/idp/SSOService.php', //issuer: 'sp-account.m4lab.hft-stuttgart.de', //local metadata - issuer: 'sp-account-test.m4lab.hft-stuttgart.de', //testing metadata + issuer: 'sp-account-testing.m4lab.hft-stuttgart.de', //testing metadata //issuer: 'sp-account-prod.m4lab.hft-stuttgart.de', //production metadata logoutUrl: 'https://transfer.hft-stuttgart.de/idp/saml2/idp/SingleLogoutService.php' } -- GitLab From ea6a163dcfd000d466013f40a8144d48dd01acab Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Mon, 17 Feb 2020 08:12:30 +0100 Subject: [PATCH 079/161] [update] URLs adapted to have /account as base --- views/profile.pug | 4 ++-- views/security.pug | 4 ++-- views/services.pug | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/views/profile.pug b/views/profile.pug index 47c1f7e8..d6edd221 100644 --- a/views/profile.pug +++ b/views/profile.pug @@ -35,8 +35,8 @@ html(lang="en") span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") a(class="nav-link" href="#" aria-selected="true") Profile - a(class="nav-link" href="/security" aria-selected="false") Security - a(class="nav-link" href="/services" aria-selected="false") Services + a(class="nav-link" href="/account/security" aria-selected="false") Security + a(class="nav-link" href="/account/services" aria-selected="false") Services div(class="col-sm-9") if successes for success in successes diff --git a/views/security.pug b/views/security.pug index 95cf50ea..b968638a 100644 --- a/views/security.pug +++ b/views/security.pug @@ -37,9 +37,9 @@ html(lang="en") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/profile" aria-selected="true") Profile + a(class="nav-link" href="/account/profile" aria-selected="true") Profile a(class="nav-link" href="#" aria-selected="false") Security - a(class="nav-link" href="/services" aria-selected="false") Services + a(class="nav-link" href="/account/services" aria-selected="false") Services div(class="col-sm-9") if successes for success in successes diff --git a/views/services.pug b/views/services.pug index f095144b..a62efed6 100644 --- a/views/services.pug +++ b/views/services.pug @@ -34,8 +34,8 @@ html(lang="en") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/profile" aria-selected="true") Profile - a(class="nav-link" href="/security" aria-selected="false") Security + a(class="nav-link" href="/account/profile" aria-selected="true") Profile + a(class="nav-link" href="/account/security" aria-selected="false") Security a(class="nav-link" href="#" aria-selected="false") Services div(class="col-sm-9") if successes -- GitLab From f129ec55b941235ffc60f1f8b049244035cbe167 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Mon, 17 Feb 2020 09:08:37 +0100 Subject: [PATCH 080/161] url password change /account/changePwd --- views/security.pug | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/security.pug b/views/security.pug index b968638a..cbe435cd 100644 --- a/views/security.pug +++ b/views/security.pug @@ -49,7 +49,7 @@ html(lang="en") for error, i in errors div.alert.alert-danger.alert-dismissible.fade.show #{ error } a(class="close", href="#", data-dismiss="alert", aria-label="close") × - form(class="needs-validation", method="post", action="/changePwd" novalidate) + form(class="needs-validation", method="post", action="/account/changePwd" novalidate) div(class="form-group row") label(for="currPwd") Current Password input(id="inputCurrPwd", name="inputCurrPwd", type="password", class="form-control" required) -- GitLab From 308e642dff13d8b47ba9386285061ba83b95d0da Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Mon, 24 Feb 2020 15:37:47 +0100 Subject: [PATCH 081/161] changed idp to testing IDP --- config/config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/config.js b/config/config.js index 9a37b3a3..c371d3c9 100644 --- a/config/config.js +++ b/config/config.js @@ -8,11 +8,11 @@ module.exports = { strategy: 'saml', saml: { path: process.env.SAML_PATH || '/saml/SSO', - entryPoint: process.env.SAML_ENTRY_POINT || 'https://transfer.hft-stuttgart.de/idp/saml2/idp/SSOService.php', + entryPoint: process.env.SAML_ENTRY_POINT || 'https://m4lab.hft-stuttgart.de/idp/saml2/idp/SSOService.php', //issuer: 'sp-account.m4lab.hft-stuttgart.de', //local metadata issuer: 'sp-account-testing.m4lab.hft-stuttgart.de', //testing metadata //issuer: 'sp-account-prod.m4lab.hft-stuttgart.de', //production metadata - logoutUrl: 'https://transfer.hft-stuttgart.de/idp/saml2/idp/SingleLogoutService.php' + logoutUrl: 'https://m4lab.hft-stuttgart.de/idp/saml2/idp/SingleLogoutService.php' } }, database: { -- GitLab From 5523f3fa71f07e75e08127a1879cf3549f55a6e9 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Fri, 28 Feb 2020 09:39:11 +0100 Subject: [PATCH 082/161] update saml config --- config/config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/config.js b/config/config.js index 236e7943..16e1a3e6 100644 --- a/config/config.js +++ b/config/config.js @@ -8,9 +8,9 @@ module.exports = { strategy: 'saml', saml: { path: process.env.SAML_PATH || '/saml/SSO', - entryPoint: process.env.SAML_ENTRY_POINT || 'https://transfer.hft-stuttgart.de/idp/saml2/idp/SSOService.php', + entryPoint: process.env.SAML_ENTRY_POINT || 'https://m4lab.hft-stuttgart.de/idp/saml2/idp/SSOService.php', issuer: 'sp-account.m4lab.hft-stuttgart.de', - logoutUrl: 'https://transfer.hft-stuttgart.de/idp/saml2/idp/SingleLogoutService.php' + logoutUrl: 'https://m4lab.hft-stuttgart.de/idp/saml2/idp/SingleLogoutService.php' } }, database: { -- GitLab From 49e5a58df82538be0498d5ff13143a3238c547a4 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Fri, 28 Feb 2020 09:40:16 +0100 Subject: [PATCH 083/161] update forgot password email and user feedback --- routes/routes.js | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/routes/routes.js b/routes/routes.js index 7b71ded6..af04837d 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -350,10 +350,10 @@ module.exports = function (app, config, passport) { //methods.currentDate(); var emailAddress = req.body.inputEmail; - var emailContent = "Hi there,\n\n"+ + /* var emailContent = "Hi there,\n\n"+ "we've received a request to reset your password. However, this email address is not on our database of registered users.\n\n"+ "Thanks,\nM4_LAB Team"; - var emailSubject = "Account Access Attempted"; + var emailSubject = "Account Access Attempted"; */ async.waterfall([ function(done) { @@ -366,8 +366,8 @@ module.exports = function (app, config, passport) { methods.checkUserEmail(emailAddress, function(err, user){ if (user) { console.log("email: user found"); - emailSubject = "M4_LAB Password Reset"; - emailContent = "Hi User,\n\n"+ + var emailSubject = "M4_LAB Password Reset"; + var emailContent = "Hi User,\n\n"+ "we've received a request to reset your password. If you didn't make the request, just ignore this email.\n\n"+ "Otherwise, you can reset your password using this link: http://localhost:9989/reset/" + token + "\n" + "This password reset is only valid for 1 hour.\n\n"+ @@ -381,12 +381,22 @@ module.exports = function (app, config, passport) { methods.updateCredential(credentialData, function(err) { done(err, token, user); }); + + // send email + mailOptions.to = emailAddress; + mailOptions.subject = emailSubject; + mailOptions.text = emailContent; + smtpTransport.sendMail(mailOptions, function(err) { + done(err, 'done'); + }); } else { - done(err, null, null); + //done(err, null, null); + done(err, 'no user found'); } }); - }, + } + /*, function(token, user, done) { mailOptions.to = emailAddress; mailOptions.subject = emailSubject; @@ -394,13 +404,13 @@ module.exports = function (app, config, passport) { smtpTransport.sendMail(mailOptions, function(err) { done(err, 'done'); }); - } + } */ ], function(err) { if (err) { req.flash('error', 'An error occured. Please try again.'); } else { - req.flash('success', 'An e-mail has been sent to ' + emailAddress + ' with further instructions.'); + req.flash('success', 'If your email is registered, an e-mail has been sent to ' + emailAddress + ' with further instructions.'); } res.redirect('/forgotPwd'); }); -- GitLab From 5968a7dae9083a95575c19acb0bb8e49a3504f0c Mon Sep 17 00:00:00 2001 From: Rosanny Date: Fri, 28 Feb 2020 14:32:56 +0100 Subject: [PATCH 084/161] add i18n dependency and test --- app.js | 12 +++++++-- locales/de.json | 4 +++ locales/en.json | 4 +++ package-lock.json | 63 +++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + routes/routes.js | 44 +++++++++++++++++++-------------- 6 files changed, 107 insertions(+), 21 deletions(-) create mode 100644 locales/de.json create mode 100644 locales/en.json diff --git a/app.js b/app.js index 0feeba4c..bcbbfbfe 100644 --- a/app.js +++ b/app.js @@ -8,6 +8,7 @@ const bodyParser = require('body-parser'); const session = require('express-session'); const errorhandler = require('errorhandler'); const flash = require('express-flash'); +const i18n = require('i18n'); // internationalization var env = process.env.NODE_ENV || 'development'; const config = require('./config/config')[env]; @@ -47,10 +48,17 @@ app.use(function(req, res, next) { next(); }); -require('./routes/routes')(app, config, passport); +// internationalization (i18n) +i18n.configure({ + locales:['de', 'en'], + directory: './locales' +}); +app.use(i18n.init); + +require('./routes/routes')(app, config, passport, i18n); //require('./routes/dbconn')(app, config); require('./routes/api')(app, config, passport); app.listen(app.get('port'), function () { console.log('Express server listening on port ' + app.get('port')); -}); +}); \ No newline at end of file diff --git a/locales/de.json b/locales/de.json new file mode 100644 index 00000000..13a9c092 --- /dev/null +++ b/locales/de.json @@ -0,0 +1,4 @@ +{ + "Hello World": "Hallo Welt", + "Hello": "Hallo" +} \ No newline at end of file diff --git a/locales/en.json b/locales/en.json new file mode 100644 index 00000000..0873ff89 --- /dev/null +++ b/locales/en.json @@ -0,0 +1,4 @@ +{ + "Hello World": "Hello World", + "Hello": "Hello", +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 7e0b9410..1d68e8a5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -748,6 +748,19 @@ } } }, + "i18n": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/i18n/-/i18n-0.8.5.tgz", + "integrity": "sha512-6UgLbhJGgn4XFeuZc/dDdrrri0ij24EK4hxv4Pbi5hloYAZ1B2+0eQchEryBFezLKYOHhVGV/5+H4i0oxng94w==", + "requires": { + "debug": "*", + "make-plural": "^6.0.1", + "math-interval-parser": "^2.0.1", + "messageformat": "^2.3.0", + "mustache": "*", + "sprintf-js": "^1.1.2" + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -982,6 +995,16 @@ "pify": "^3.0.0" } }, + "make-plural": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-6.0.1.tgz", + "integrity": "sha512-h0uBNi4tpDkiWUyYKrJNj8Kif6q3Ba5zp/8jnfPy3pQE+4XcTj6h3eZM5SYVUyDNX9Zk69Isr/dx0I+78aJUaQ==" + }, + "math-interval-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/math-interval-parser/-/math-interval-parser-2.0.1.tgz", + "integrity": "sha512-VmlAmb0UJwlvMyx8iPhXUDnVW1F9IrGEd9CIOmv+XL8AErCUUuozoDMrgImvnYt2A+53qVX/tPW6YJurMKYsvA==" + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -992,6 +1015,36 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, + "messageformat": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/messageformat/-/messageformat-2.3.0.tgz", + "integrity": "sha512-uTzvsv0lTeQxYI2y1NPa1lItL5VRI8Gb93Y2K2ue5gBPyrbJxfDi/EYWxh2PKv5yO42AJeeqblS9MJSh/IEk4w==", + "requires": { + "make-plural": "^4.3.0", + "messageformat-formatters": "^2.0.1", + "messageformat-parser": "^4.1.2" + }, + "dependencies": { + "make-plural": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-4.3.0.tgz", + "integrity": "sha512-xTYd4JVHpSCW+aqDof6w/MebaMVNTVYBZhbB/vi513xXdiPT92JMVCo0Jq8W2UZnzYRFeVbQiQ+I25l13JuKvA==", + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "messageformat-formatters": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/messageformat-formatters/-/messageformat-formatters-2.0.1.tgz", + "integrity": "sha512-E/lQRXhtHwGuiQjI7qxkLp8AHbMD5r2217XNe/SREbBlSawe0lOqsFb7rflZJmlQFSULNLIqlcjjsCPlB3m3Mg==" + }, + "messageformat-parser": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/messageformat-parser/-/messageformat-parser-4.1.2.tgz", + "integrity": "sha512-7dWuifeyldz7vhEuL96Kwq1fhZXBW+TUfbnHN4UCrCxoXQTYjHnR78eI66Gk9LaLLsAvzPNVJBaa66DRfFNaiA==" + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -1045,6 +1098,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "mustache": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.0.0.tgz", + "integrity": "sha512-FJgjyX/IVkbXBXYUwH+OYwQKqWpFPLaLVESd70yHjSDunwzV2hZOoTBvPf4KLoxesUzzyfTH6F784Uqd7Wm5yA==" + }, "mysql": { "version": "2.17.1", "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.17.1.tgz", @@ -1686,6 +1744,11 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" + }, "sqlstring": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", diff --git a/package.json b/package.json index 93d0dbbf..2c3a2562 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "express-flash": "0.0.2", "express-session": "^1.17.0", "fs": "0.0.1-security", + "i18n": "^0.8.5", "morgan": "^1.9.1", "mysql": "^2.17.1", "nodemailer": "^6.3.1", diff --git a/routes/routes.js b/routes/routes.js index b0e32625..c55b88e1 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -11,7 +11,7 @@ const async = require('async') const crypto = require('crypto') const nodemailer = require('nodemailer') -module.exports = function (app, config, passport) { +module.exports = function (app, config, passport, i18n) { // =========== PASSPORT ======= passport.serializeUser(function (user, done) { @@ -54,17 +54,6 @@ module.exports = function (app, config, passport) { passport.use(samlStrategy); - // ============================ -/* - app.all('/', function(req, res){ - req.flash('test', 'it worked'); - res.redirect('/test') - }); - app.all('/test', function(req, res){ - res.send(JSON.stringify(req.flash('test'))); - }); - */ - // ============= SAML ============== app.post(config.passport.saml.path, passport.authenticate(config.passport.strategy, @@ -111,17 +100,34 @@ module.exports = function (app, config, passport) { "We would like to notify that your password has been successfully updated.\n\n"+ "Thanks,\nM4_LAB Team" var updatePasswordMailSubject = "Your M4_LAB Password has been updated" + + // ================ test i18n ================== + i18n.setLocale('de'); + app.get('/de', function(req, res) { + var greeting = i18n.__('Hello World') + res.send(greeting) + }); // ======== APP ROUTES ==================== - app.get('/', function (req, res) { - res.redirect('/profile') + app.get('/account', function (req, res) { + if (req.isAuthenticated()) { + methods.getUserByEmail(req.user.email, function(data, err){ + if (!err) { + res.render('home', { + greeting: i18n.__('Hello'), + }); + } + }) + } else { + res.redirect('/account/login'); + } }); app.get('/error', function (req, res) { res.render('error') }); - app.get('/login', + app.get('/account/login', passport.authenticate(config.passport.strategy, { successRedirect: '/account/', @@ -131,7 +137,7 @@ module.exports = function (app, config, passport) { app.get('/logout', function (req, res) { if (req.user == null) { - return res.redirect('/account/'); + return res.redirect('https://m4lab.hft-stuttgart.de'); } req.user.nameID = req.user.id; @@ -151,7 +157,7 @@ module.exports = function (app, config, passport) { }); }); - app.get('/profile', function (req, res) { + app.get('/account/profile', function (req, res) { if (req.isAuthenticated()) { methods.getUserByEmail(req.user.email, function(data, err){ if (!err) { @@ -166,7 +172,7 @@ module.exports = function (app, config, passport) { } }); - app.get('/services', function (req, res) { + app.get('/account/services', function (req, res) { if (req.isAuthenticated()) { async.waterfall([ // get userId by email from userdb @@ -230,7 +236,7 @@ module.exports = function (app, config, passport) { } }); - app.get('/security', function (req, res) { + app.get('/account/security', function (req, res) { if (req.isAuthenticated()) { res.render('security', { user: req.user // useful for view engine, useless for HTML -- GitLab From b9cfe96481d094cd51c13e1249b814baa8701a83 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Fri, 28 Feb 2020 14:33:51 +0100 Subject: [PATCH 085/161] Introductory page of User Account --- views/home.pug | 61 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 49 insertions(+), 12 deletions(-) diff --git a/views/home.pug b/views/home.pug index 285666ec..cea90b4e 100644 --- a/views/home.pug +++ b/views/home.pug @@ -1,12 +1,49 @@ -extends layout - -block content - if user !== null - h1 Hello, #{user.firstName} - a(href="/account/profile") Profile - br - a(href="/account/logout") Logout - else - h1 Welcome - br - a(href="/account/login") Login +doctype html +html(lang="en") + head + title= "User Account" + meta(charset="UTF-8") + meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") + style. + .collapse { + display: none; + } + .collapse.in { + display: block; + } + .collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height,visibility; + -o-transition-property: height,visibility; + transition-property: height,visibility; + } + body + div(class="container-fluid") + div(class="row") + div(class="col-3") + h5 + span #{greeting} + div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") + a(class="nav-link" href="#" aria-selected="true") Profile + a(class="nav-link" href="/account/security" aria-selected="false") Security + a(class="nav-link" href="/account/services" aria-selected="false") Services + div(class="col-sm-9") + p content goes here + + // jQuery + script(src="https://code.jquery.com/jquery-3.3.1.min.js") + script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") + // Bootstrap + script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") + // M4_LAB + script(src="/js/headfootLogout.js") \ No newline at end of file -- GitLab From 8ce885d3a532c64ebcf2342a7dcc7c4241566161 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Fri, 28 Feb 2020 17:14:38 +0100 Subject: [PATCH 086/161] delete unused pages --- views/TBD/profile-old.html | 113 ------------------------------------ views/TBD/profile-old.pug | 1 - views/TBD/security-old.html | 111 ----------------------------------- views/TBD/security-old.pug | 1 - 4 files changed, 226 deletions(-) delete mode 100644 views/TBD/profile-old.html delete mode 100644 views/TBD/profile-old.pug delete mode 100644 views/TBD/security-old.html delete mode 100644 views/TBD/security-old.pug diff --git a/views/TBD/profile-old.html b/views/TBD/profile-old.html deleted file mode 100644 index 2b18262f..00000000 --- a/views/TBD/profile-old.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - User Profile - - - - - - - - - - -
-
- -
-
- -
- -
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -

-
-
-
-
- - - - - - - - - - - - - \ No newline at end of file diff --git a/views/TBD/profile-old.pug b/views/TBD/profile-old.pug deleted file mode 100644 index 6f03f645..00000000 --- a/views/TBD/profile-old.pug +++ /dev/null @@ -1 +0,0 @@ -include profile.html \ No newline at end of file diff --git a/views/TBD/security-old.html b/views/TBD/security-old.html deleted file mode 100644 index a47b1e56..00000000 --- a/views/TBD/security-old.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - User Profile - - - - - - - - - - -
-
- -
-
- -
- -
- -
-
-
- - -
Please fill in this field.
-
-
- - -
Please fill in this field.
-
-
- - -
Please fill in this field.
-
- -
-
-
-
- - - - - - - - - - - - - \ No newline at end of file diff --git a/views/TBD/security-old.pug b/views/TBD/security-old.pug deleted file mode 100644 index e7c91985..00000000 --- a/views/TBD/security-old.pug +++ /dev/null @@ -1 +0,0 @@ -include security.html \ No newline at end of file -- GitLab From 0468b335dabfb7750be7345592e79988cbfed428 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Fri, 28 Feb 2020 20:46:23 +0100 Subject: [PATCH 087/161] delete unused pages --- public/views_TBD/404.jade | 4 -- public/views_TBD/500.jade | 8 --- public/views_TBD/error.jade | 6 -- public/views_TBD/home.jade | 12 ---- public/views_TBD/layout.jade | 12 ---- public/views_TBD/profile.html | 105 ---------------------------------- public/views_TBD/profile.jade | 1 - 7 files changed, 148 deletions(-) delete mode 100644 public/views_TBD/404.jade delete mode 100644 public/views_TBD/500.jade delete mode 100644 public/views_TBD/error.jade delete mode 100644 public/views_TBD/home.jade delete mode 100644 public/views_TBD/layout.jade delete mode 100644 public/views_TBD/profile.html delete mode 100644 public/views_TBD/profile.jade diff --git a/public/views_TBD/404.jade b/public/views_TBD/404.jade deleted file mode 100644 index dc9e0a8c..00000000 --- a/public/views_TBD/404.jade +++ /dev/null @@ -1,4 +0,0 @@ -extends error - -block content - h2 Cannot find #{url} \ No newline at end of file diff --git a/public/views_TBD/500.jade b/public/views_TBD/500.jade deleted file mode 100644 index cbc47e79..00000000 --- a/public/views_TBD/500.jade +++ /dev/null @@ -1,8 +0,0 @@ -extends error - -block content - h1 Error: #{error.message} - if settings['verbose errors'] - pre= error.stack - else - p An error ocurred! \ No newline at end of file diff --git a/public/views_TBD/error.jade b/public/views_TBD/error.jade deleted file mode 100644 index bf750c00..00000000 --- a/public/views_TBD/error.jade +++ /dev/null @@ -1,6 +0,0 @@ -html - head - title Error - body - h1 An error occurred! - block content \ No newline at end of file diff --git a/public/views_TBD/home.jade b/public/views_TBD/home.jade deleted file mode 100644 index 2c704c1a..00000000 --- a/public/views_TBD/home.jade +++ /dev/null @@ -1,12 +0,0 @@ -extends layout - -block content - if user !== null - h1 Hello, #{user.firstName} - a(href="/profile") Profile - br - a(href="/logout") Logout - else - h1 Welcome - br - a(href="/login") Login diff --git a/public/views_TBD/layout.jade b/public/views_TBD/layout.jade deleted file mode 100644 index 32d27e01..00000000 --- a/public/views_TBD/layout.jade +++ /dev/null @@ -1,12 +0,0 @@ -doctype html -html - head - title PassportJS SAML example - block links - link(rel='stylesheet', href='bower_components/bootstrap/dist/css/bootstrap.css') - body - div.container - block content - script(src='bower_components/jquery/dist/jquery.min.js') - script(src='bower_components/bootstrap/dist/js/bootstrap.min.js') - block scripts diff --git a/public/views_TBD/profile.html b/public/views_TBD/profile.html deleted file mode 100644 index 723f2815..00000000 --- a/public/views_TBD/profile.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - User Profile - - - - - - - - - - - - - - - -
-
- -
-
- - TODO: Firstname + Lastname -
- -
- -
-
-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -

-
-
-
-
- - - - - \ No newline at end of file diff --git a/public/views_TBD/profile.jade b/public/views_TBD/profile.jade deleted file mode 100644 index 6f03f645..00000000 --- a/public/views_TBD/profile.jade +++ /dev/null @@ -1 +0,0 @@ -include profile.html \ No newline at end of file -- GitLab From 7217413e80193936de9d0edcaf6d3af2255714b4 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Fri, 28 Feb 2020 20:56:41 +0100 Subject: [PATCH 088/161] add DE --- public/js/registration.js | 3 ++- public/js/security.js | 9 ++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/public/js/registration.js b/public/js/registration.js index 1033ce3f..3e6184f9 100644 --- a/public/js/registration.js +++ b/public/js/registration.js @@ -22,7 +22,8 @@ $('#inputPassword').on('keyup', function () { isPasswordValid = checkPasswordReq($('#inputPassword').val()) $('#passwordWarning').empty(); if (!isPasswordValid) { - $('#passwordWarning').html('Must be at least 8 characters') + //$('#passwordWarning').html('Must be at least 8 characters') + $('#passwordWarning').html('Das Passwort muss mindestens 8 Zeichen haben') } switchSubmitButton() }); diff --git a/public/js/security.js b/public/js/security.js index 0f4a8f09..535a95a2 100644 --- a/public/js/security.js +++ b/public/js/security.js @@ -6,15 +6,18 @@ $('#inputNewPwd, #inputConfirm').on('keyup', function () { isBest = checkPasswordReq($('#inputNewPwd').val()) $('#recommendation').empty(); if (!isBest) { - $('#recommendation').html('Must be at least 8 characters').css('color', 'red'); + //$('#recommendation').html('Must be at least 8 characters').css('color', 'red'); + $('#recommendation').html('Das Passwort muss mindestens 8 Zeichen haben').css('color', 'red'); } // match or not? if ($('#inputNewPwd').val() == $('#inputConfirm').val()) { - $('#message').html('Matching').css('color', 'green'); + //$('#message').html('Matching').css('color', 'green'); + $('#message').html('Übereinstimmend').css('color', 'green'); isMatch = true; } else { - $('#message').html('Not Matching').css('color', 'red'); + //$('#message').html('Not Matching').css('color', 'red'); + $('#message').html('Nicht übereinstimmend').css('color', 'red'); isMatch = false; } -- GitLab From 79213a949f2471ae663aa4770b5524f57bb1f32f Mon Sep 17 00:00:00 2001 From: Rosanny Date: Fri, 28 Feb 2020 21:01:45 +0100 Subject: [PATCH 089/161] put DE and EN pages in different folder --- views/{ => DE}/404.pug | 0 views/{ => DE}/500.pug | 0 views/{ => DE}/error.pug | 0 views/DE/forgotPwd.pug | 56 +++++++++++++++++++ views/DE/home.pug | 49 +++++++++++++++++ views/{ => DE}/layout.pug | 0 views/DE/profile.pug | 94 +++++++++++++++++++++++++++++++ views/DE/registration.pug | 98 +++++++++++++++++++++++++++++++++ views/DE/reset.pug | 60 ++++++++++++++++++++ views/DE/security.pug | 94 +++++++++++++++++++++++++++++++ views/DE/services.pug | 77 ++++++++++++++++++++++++++ views/EN/404.pug | 4 ++ views/EN/500.pug | 8 +++ views/EN/error.pug | 6 ++ views/{ => EN}/forgotPwd.pug | 0 views/{ => EN}/home.pug | 2 +- views/EN/layout.pug | 12 ++++ views/{ => EN}/profile.pug | 0 views/{ => EN}/registration.pug | 0 views/{ => EN}/reset.pug | 0 views/{ => EN}/security.pug | 0 views/{ => EN}/services.pug | 0 22 files changed, 559 insertions(+), 1 deletion(-) rename views/{ => DE}/404.pug (100%) rename views/{ => DE}/500.pug (100%) rename views/{ => DE}/error.pug (100%) create mode 100644 views/DE/forgotPwd.pug create mode 100644 views/DE/home.pug rename views/{ => DE}/layout.pug (100%) create mode 100644 views/DE/profile.pug create mode 100644 views/DE/registration.pug create mode 100644 views/DE/reset.pug create mode 100644 views/DE/security.pug create mode 100644 views/DE/services.pug create mode 100644 views/EN/404.pug create mode 100644 views/EN/500.pug create mode 100644 views/EN/error.pug rename views/{ => EN}/forgotPwd.pug (100%) rename views/{ => EN}/home.pug (97%) create mode 100644 views/EN/layout.pug rename views/{ => EN}/profile.pug (100%) rename views/{ => EN}/registration.pug (100%) rename views/{ => EN}/reset.pug (100%) rename views/{ => EN}/security.pug (100%) rename views/{ => EN}/services.pug (100%) diff --git a/views/404.pug b/views/DE/404.pug similarity index 100% rename from views/404.pug rename to views/DE/404.pug diff --git a/views/500.pug b/views/DE/500.pug similarity index 100% rename from views/500.pug rename to views/DE/500.pug diff --git a/views/error.pug b/views/DE/error.pug similarity index 100% rename from views/error.pug rename to views/DE/error.pug diff --git a/views/DE/forgotPwd.pug b/views/DE/forgotPwd.pug new file mode 100644 index 00000000..8a6b8c56 --- /dev/null +++ b/views/DE/forgotPwd.pug @@ -0,0 +1,56 @@ +doctype html +html(lang="de") + head + title= "Forgot Password" + meta(charset="UTF-8") + meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/custom/login.css") + link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") + style. + .collapse { + display: none; + } + .collapse.in { + display: block; + } + .collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height,visibility; + -o-transition-property: height,visibility; + transition-property: height,visibility; + } + body + div(class="container-fluid") + div(class="row") + div(class="col-md-6 offset-md-3") + if successes + for success in successes + div.alert.alert-success.alert-dismissible #{ success } + a(class="close", href="#", data-dismiss="alert", aria-label="close") × + if errors + for error, i in errors + div.alert.alert-danger.alert-dismissible.fade.show #{ error } + a(class="close", href="#", data-dismiss="alert", aria-label="close") × + form#forgotForm(class="form-signin", method="POST") + img(src="https://transfer.hft-stuttgart.de/images/demo/m4lab_logo.jpg", class="img-responsive center-block", width="185", height="192") + div(class="form-row") + input#inputEmail(name="inputEmail", type="email", class="form-control", placeholder="E-Mail-Adresse" required) + br + input(type="submit", class="btn btn-outline-dark btn-block", value="Passwort zurücksetzen") + + // jQuery + script(src="https://code.jquery.com/jquery-3.3.1.min.js") + script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") + // Bootstrap + script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") + // M4_LAB + script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") diff --git a/views/DE/home.pug b/views/DE/home.pug new file mode 100644 index 00000000..53044de1 --- /dev/null +++ b/views/DE/home.pug @@ -0,0 +1,49 @@ +doctype html +html(lang="de") + head + title= "User Account" + meta(charset="UTF-8") + meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") + style. + .collapse { + display: none; + } + .collapse.in { + display: block; + } + .collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height,visibility; + -o-transition-property: height,visibility; + transition-property: height,visibility; + } + body + div(class="container-fluid") + div(class="row") + div(class="col-3") + h5 + span #{user.firstname} #{user.lastname} + div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") + a(class="nav-link" href="#" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste + div(class="col-sm-9") + p content goes here + + // jQuery + script(src="https://code.jquery.com/jquery-3.3.1.min.js") + script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") + // Bootstrap + script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") + // M4_LAB + script(src="/js/headfootLogout.js") \ No newline at end of file diff --git a/views/layout.pug b/views/DE/layout.pug similarity index 100% rename from views/layout.pug rename to views/DE/layout.pug diff --git a/views/DE/profile.pug b/views/DE/profile.pug new file mode 100644 index 00000000..9a3fc46e --- /dev/null +++ b/views/DE/profile.pug @@ -0,0 +1,94 @@ +doctype html +html(lang="de") + head + title= "User Profile" + meta(charset="UTF-8") + meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") + style. + .collapse { + display: none; + } + .collapse.in { + display: block; + } + .collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height,visibility; + -o-transition-property: height,visibility; + transition-property: height,visibility; + } + body + div(class="container-fluid") + div(class="row") + div(class="col-3") + h5 + span #{user.firstname} #{user.lastname} + div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") + a(class="nav-link" href="#" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste + div(class="col-sm-9") + if successes + for success in successes + div.alert.alert-success.alert-dismissible #{ success } + a(class="close", href="#", data-dismiss="alert", aria-label="close") × + if errors + for error, i in errors + div.alert.alert-danger.alert-dismissible.fade.show #{ error } + a(class="close", href="#", data-dismiss="alert", aria-label="close") × + form#profileForm(method="POST", action="/updateProfile") + div(class="form-row") + div(class='form-group col-md-2') + label(for="title") Titel + select#inputTitle(name="inputTitle", class="form-control", value=user.title) + option(value="Prof.") Prof. + option(value="Dr.") Dr. + option(value="Dipl.-Ing.") Dipl.-Ing. + option(value="etc.") etc. + script. + var titleOptions = document.getElementById('inputTitle').options; + for (i=0; i < titleOptions.length; i++) { + if (titleOptions[i].value == '#{user.title}') + titleOptions[i].selected = true; + } + div(class='form-group col-md-3') + label(for="firstname") Vorname + input#inputFirstname(name="inputFirstname", type="text", class="form-control", placeholder="Vorname", value=user.firstname required) + div(class='form-group col-md-3') + label(for="lastname") Nachname + input#inputLastname(name="inputLastname", type="text", class="form-control", placeholder="Nachname", value=user.lastname required) + div(class="form-row") + div(class='form-group col-md-8') + label(for="email") Email + input#inputEmail(name="inputEmail", type="email", class="form-control", placeholder="Email", value=email required) + div(class="form-row") + div(class='form-group col-md-8') + label(for="organisation") Unternehmen + input#inputOrganisation(name="inputOrganisation", type="text", class="form-control", placeholder="Unternehmen", value=user.organisation) + div(class="form-row") + div(class='form-group col-md-8') + label(for="industry") Branche + input#inputIndustry(name="inputIndustry", type="text", class="form-control", placeholder="Branche", value=user.industry) + div(class="form-row") + div(class='form-group col-md-8') + label(for="speciality") Fachgebiete + input#inputSpeciality(name="inputSpeciality", type="text", class="form-control", placeholder="Fachgebiete", value=user.speciality) + input(type="submit", class="btn btn-primary", value="Update") + + // jQuery + script(src="https://code.jquery.com/jquery-3.3.1.min.js") + script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") + // Bootstrap + script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") + // M4_LAB + script(src="/js/headfootLogout.js") \ No newline at end of file diff --git a/views/DE/registration.pug b/views/DE/registration.pug new file mode 100644 index 00000000..d4be0c07 --- /dev/null +++ b/views/DE/registration.pug @@ -0,0 +1,98 @@ +doctype html +html(lang="de") + head + title= "Create New Account" + meta(charset="UTF-8") + meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") + style. + .collapse { + display: none; + } + .collapse.in { + display: block; + } + .collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height,visibility; + -o-transition-property: height,visibility; + transition-property: height,visibility; + } + .warning { + color: red; + font-size: 11px; + } + body + div(class="container-fluid") + div(class="row") + div(class="col-md-6 offset-md-2") + h3(class="mb-3 font-weight-bold") Neues Benutzerkonto anlegen + div(class="col-md-6 offset-md-3") + if successes + for success in successes + div.alert.alert-success.alert-dismissible #{ success } + a(class="close", href="#", data-dismiss="alert", aria-label="close") × + if errors + for error, i in errors + div.alert.alert-danger.alert-dismissible.fade.show #{ error } + a(class="close", href="#", data-dismiss="alert", aria-label="close") × + form(method="POST") + h5(class="mb-3 font-weight-bold") Anmeldedaten + div(class='form-row') + div(class='form-group col-md-6') + input#inputEmail(name="inputEmail", type="email", class="form-control", placeholder="E-Mail-Adresse*" required) + span#emailWarning(class='warning') + div(class="form-group col-md-6") + input#inputPassword(name="inputPassword", type="password", class="form-control", data-toggle="password", placeholder="Passwort*" required) + span#passwordWarning(class='warning') + h5(class="mb-3 font-weight-bold") Benutzerprofil + div(class="form-row") + div(class='form-group col-md-2') + select#inputSalutation(name="inputSalutation", class="form-control") + option(value="") - Anrede - + option(value="Herr") Herr + option(value="Frau") Frau + option(value="Divers") Divers + div(class='form-group col-md-2') + select#inputTitle(name="inputTitle", class="form-control") + option(value="") - Titel - + option(value="Prof.") Prof. + option(value="Dr.") Dr. + option(value="Dipl.-Ing.") Dipl.-Ing. + option(value="etc.") etc. + div(class='form-group col-md-4') + input#inputFirstname(name="inputFirstname", type="text", class="form-control", placeholder="Vorname*" required) + div(class='form-group col-md-4') + input#inputLastname(name="inputLastname", type="text", class="form-control", placeholder="Nachname*" required) + div(class="form-group") + input#inputOrganisation(name="inputOrganisation", type="text", class="form-control", placeholder="Unternehmen") + div(class="form-group") + input#inputIndustry(name="inputIndustry", type="text", class="form-control", placeholder="Branche") + div(class="form-group") + input#inputSpeciality(name="inputSpeciality", type="text", class="form-control", placeholder="Fachgebiete") + p * Pflichtfeld + input#submitBtn(type="submit", class="btn btn-outline-dark btn-block", value="Senden" disabled) + br + p(class="text-center") Sie haben bereits ein Benutzerkonto? Melden Sie sich hier an. + + + // jQuery + script(src="https://code.jquery.com/jquery-3.3.1.min.js") + script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") + // Bootstrap + script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") + // toggle password + script(src='https://unpkg.com/bootstrap-show-password@1.2.1/dist/bootstrap-show-password.min.js') + // M4_LAB + script(src="/js/generalFunction.js") + script(src="/js/registration.js") + script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file diff --git a/views/DE/reset.pug b/views/DE/reset.pug new file mode 100644 index 00000000..8f2d8f4c --- /dev/null +++ b/views/DE/reset.pug @@ -0,0 +1,60 @@ +doctype html +html(lang="de") + head + title= "Reset Password" + meta(charset="UTF-8") + meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/custom/login.css") + link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") + style. + .collapse { + display: none; + } + .collapse.in { + display: block; + } + .collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height,visibility; + -o-transition-property: height,visibility; + transition-property: height,visibility; + } + body + div(class="container-fluid") + div(class="row") + div(class="col-md-6 offset-md-3") + if successes + for success in successes + div.alert.alert-success.alert-dismissible #{ success } + a(class="close", href="#", data-dismiss="alert", aria-label="close") × + if errors + for error, i in errors + div.alert.alert-danger.alert-dismissible.fade.show #{ error } + a(class="close", href="#", data-dismiss="alert", aria-label="close") × + form#forgotForm(method="POST", class="form-signin") + img(src="https://transfer.hft-stuttgart.de/images/demo/m4lab_logo.jpg", class="img-responsive center-block", width="185", height="192") + div(class="form-row") + input#inputNewPwd(name="inputNewPwd", type="password", class="form-control", placeholder="Neues Passwort" required) + span#recommendation(class='warning') + input#inputConfirm(name="inputConfirm", type="password", class="form-control", placeholder="Passwort bestätigen" required) + span#message(class='warning') + input#updateBtn(type="submit", class="btn btn-outline-dark btn-block", value="Passwort ändern" disabled) + + // jQuery + script(src="https://code.jquery.com/jquery-3.3.1.min.js") + script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") + // Bootstrap + script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") + // M4_LAB + script(src="/js/security.js") + script(src="/js/generalFunction.js") + script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") diff --git a/views/DE/security.pug b/views/DE/security.pug new file mode 100644 index 00000000..5d4a214a --- /dev/null +++ b/views/DE/security.pug @@ -0,0 +1,94 @@ +doctype html +html(lang="de") + head + title= "User Profile" + meta(charset="UTF-8") + meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") + style. + .collapse { + display: none; + } + .collapse.in { + display: block; + } + .collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height,visibility; + -o-transition-property: height,visibility; + transition-property: height,visibility; + } + .warning { + font-size: 11px; + } + body + div(class="container-fluid") + div(class="row") + div(class="col-3") + h5 + span #{user.firstName} #{user.lastName} + div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") + a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="#" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste + div(class="col-sm-9") + if successes + for success in successes + div.alert.alert-success.alert-dismissible #{ success } + a(class="close", href="#", data-dismiss="alert", aria-label="close") × + if errors + for error, i in errors + div.alert.alert-danger.alert-dismissible.fade.show #{ error } + a(class="close", href="#", data-dismiss="alert", aria-label="close") × + form(class="needs-validation", method="post", action="/account/changePwd" novalidate) + div(class="form-group row") + label(for="currPwd") Aktuelles Passwort + input(id="inputCurrPwd", name="inputCurrPwd", type="password", class="form-control" required) + div(class="invalid-feedback") Please fill in this field. + div(class="form-group row") + label(for="newPwd") Neues Passwort + input#inputNewPwd(name="inputNewPwd", type="password", class="form-control" required) + span#recommendation + div(class="invalid-feedback") Please fill in this field. + div(class="form-group row") + label(for="confirm") Bestätigen Sie das neue Passwort + input#inputConfirm(name="inputConfirm", type="password", class="form-control" required) + span#message + div(class="invalid-feedback") Please fill in this field. + input#updateBtn(type="submit", class="btn btn-primary", value="Update Password" disabled) + + // jQuery + script(src="https://code.jquery.com/jquery-3.3.1.min.js") + script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") + // Bootstrap + script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") + // M4_LAB + script(src="/js/security.js") + script(src="/js/generalFunction.js") + script(src="/js/headfootLogout.js") + script. + // check input fields + 'use strict'; + window.addEventListener('load', function() { + // Fetch all the forms we want to apply custom Bootstrap validation styles to + var forms = document.getElementsByClassName('needs-validation'); + // Loop over them and prevent submission + var validation = Array.prototype.filter.call(forms, function(form) { + form.addEventListener('submit', function(event) { + if (form.checkValidity() === false) { + event.preventDefault(); + event.stopPropagation(); + } + form.classList.add('was-validated'); + }, false); + }); + }, false); diff --git a/views/DE/services.pug b/views/DE/services.pug new file mode 100644 index 00000000..6ab101f3 --- /dev/null +++ b/views/DE/services.pug @@ -0,0 +1,77 @@ +doctype html +html(lang="de") + head + title= "User Profile" + meta(charset="UTF-8") + meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") + style. + .collapse { + display: none; + } + .collapse.in { + display: block; + } + .collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height,visibility; + -o-transition-property: height,visibility; + transition-property: height,visibility; + } + body + div(class="container-fluid") + div(class="row") + div(class="col-3") + h5 + span #{user.firstName} #{user.lastName} + div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") + a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="#" aria-selected="false") Projekte und Dienste + div(class="col-sm-9") + if successes + for success in successes + div.alert.alert-success.alert-dismissible #{ success } + a(class="close", href="#", data-dismiss="alert", aria-label="close") × + if errors + for error, i in errors + div.alert.alert-danger.alert-dismissible.fade.show #{ error } + a(class="close", href="#", data-dismiss="alert", aria-label="close") × + table + for item in project + tr + td #{item.title} + if item.userStatus + td + button(type="button", class="btn btn-secondary", onclick="unsubscribe()") Projektbeteiligung beenden + else + td + button(type="button", class="btn btn-success", onclick="subscribe()") Am Projekt beteiligen + tr + td(colspan="2") #{item.summary} + tr + td(colspan="2") Ansprechpartner: #{item.cp} + + // jQuery + script(src="https://code.jquery.com/jquery-3.3.1.min.js") + script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") + // Bootstrap + script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") + // M4_LAB + script(src="/js/headfootLogout.js") + script. + function subscribe() { + alert("To be implemented: Ihre Anfrage wird an den zuständigen Projektleiter gesendet.") + } + function unsubscribe() { + alert("To be implemented: Ihre Projektbeteiligung wurde beendet und der zuständige Projektleiter in Kenntnis gesetzt.") + } \ No newline at end of file diff --git a/views/EN/404.pug b/views/EN/404.pug new file mode 100644 index 00000000..dc9e0a8c --- /dev/null +++ b/views/EN/404.pug @@ -0,0 +1,4 @@ +extends error + +block content + h2 Cannot find #{url} \ No newline at end of file diff --git a/views/EN/500.pug b/views/EN/500.pug new file mode 100644 index 00000000..cbc47e79 --- /dev/null +++ b/views/EN/500.pug @@ -0,0 +1,8 @@ +extends error + +block content + h1 Error: #{error.message} + if settings['verbose errors'] + pre= error.stack + else + p An error ocurred! \ No newline at end of file diff --git a/views/EN/error.pug b/views/EN/error.pug new file mode 100644 index 00000000..bf750c00 --- /dev/null +++ b/views/EN/error.pug @@ -0,0 +1,6 @@ +html + head + title Error + body + h1 An error occurred! + block content \ No newline at end of file diff --git a/views/forgotPwd.pug b/views/EN/forgotPwd.pug similarity index 100% rename from views/forgotPwd.pug rename to views/EN/forgotPwd.pug diff --git a/views/home.pug b/views/EN/home.pug similarity index 97% rename from views/home.pug rename to views/EN/home.pug index cea90b4e..050c1bf9 100644 --- a/views/home.pug +++ b/views/EN/home.pug @@ -34,7 +34,7 @@ html(lang="en") h5 span #{greeting} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="#" aria-selected="true") Profile + a(class="nav-link" href="#" aria-selected="true") #{i18n.__(Profile)} a(class="nav-link" href="/account/security" aria-selected="false") Security a(class="nav-link" href="/account/services" aria-selected="false") Services div(class="col-sm-9") diff --git a/views/EN/layout.pug b/views/EN/layout.pug new file mode 100644 index 00000000..32d27e01 --- /dev/null +++ b/views/EN/layout.pug @@ -0,0 +1,12 @@ +doctype html +html + head + title PassportJS SAML example + block links + link(rel='stylesheet', href='bower_components/bootstrap/dist/css/bootstrap.css') + body + div.container + block content + script(src='bower_components/jquery/dist/jquery.min.js') + script(src='bower_components/bootstrap/dist/js/bootstrap.min.js') + block scripts diff --git a/views/profile.pug b/views/EN/profile.pug similarity index 100% rename from views/profile.pug rename to views/EN/profile.pug diff --git a/views/registration.pug b/views/EN/registration.pug similarity index 100% rename from views/registration.pug rename to views/EN/registration.pug diff --git a/views/reset.pug b/views/EN/reset.pug similarity index 100% rename from views/reset.pug rename to views/EN/reset.pug diff --git a/views/security.pug b/views/EN/security.pug similarity index 100% rename from views/security.pug rename to views/EN/security.pug diff --git a/views/services.pug b/views/EN/services.pug similarity index 100% rename from views/services.pug rename to views/EN/services.pug -- GitLab From fcf95f417f3cfad33746b933709841952b6cf65a Mon Sep 17 00:00:00 2001 From: Rosanny Date: Fri, 28 Feb 2020 21:24:24 +0100 Subject: [PATCH 090/161] update wordings --- views/DE/registration.pug | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/DE/registration.pug b/views/DE/registration.pug index d4be0c07..f5e9973e 100644 --- a/views/DE/registration.pug +++ b/views/DE/registration.pug @@ -82,7 +82,7 @@ html(lang="de") p * Pflichtfeld input#submitBtn(type="submit", class="btn btn-outline-dark btn-block", value="Senden" disabled) br - p(class="text-center") Sie haben bereits ein Benutzerkonto? Melden Sie sich hier an. + p(class="text-center") Sie haben bereits ein Benutzerkonto? Melden Sie sich hier an. // jQuery -- GitLab From 276b20fabb33d3fcb5e7e3ee6593750dce2c4192 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Tue, 3 Mar 2020 08:45:11 +0100 Subject: [PATCH 091/161] .idea/ ignored --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 49f8907c..287d7f27 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /node_modules sp-account-metadata.xml +.idea -- GitLab From dfe9016498d3812dfb66324ceeb90f359f914f72 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Wed, 4 Mar 2020 13:55:41 +0100 Subject: [PATCH 092/161] add salutation to user table --- database/alter.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 database/alter.sql diff --git a/database/alter.sql b/database/alter.sql new file mode 100644 index 00000000..80d0ad77 --- /dev/null +++ b/database/alter.sql @@ -0,0 +1,4 @@ +// add `salutation` column and alter `title` to be not mandatory +ALTER TABLE `userdb`.`user` +ADD COLUMN `salutation` VARCHAR(45) NULL DEFAULT NULL AFTER `email`, +CHANGE COLUMN `title` `title` VARCHAR(45) NULL DEFAULT NULL ; \ No newline at end of file -- GitLab From 198aca69f4cfbb54eedd7d8003c800ec452c9e95 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Wed, 4 Mar 2020 13:56:35 +0100 Subject: [PATCH 093/161] get user's salutation --- routes/methods.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/methods.js b/routes/methods.js index 3f3edf54..5a7dc652 100644 --- a/routes/methods.js +++ b/routes/methods.js @@ -57,7 +57,7 @@ var methods = { }) }, getUserByEmail: function(email, callback) { - dbconn.user.query('SELECT title, firstname, lastname, industry, organisation, speciality FROM user WHERE email = "' +email+'"', function (err, rows, fields) { + dbconn.user.query('SELECT salutation, title, firstname, lastname, industry, organisation, speciality FROM user WHERE email = "' +email+'"', function (err, rows, fields) { if (err) { throw err; } -- GitLab From ca5d01c5c589566c2e78b328dac22a706d9179e2 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Wed, 4 Mar 2020 13:58:23 +0100 Subject: [PATCH 094/161] DE --- routes/routes.js | 149 ++++++++++++++++++++++---------------- views/DE/home.pug | 6 +- views/DE/profile.pug | 26 +++++-- views/DE/registration.pug | 2 +- views/DE/security.pug | 12 +-- views/DE/services.pug | 4 +- 6 files changed, 118 insertions(+), 81 deletions(-) diff --git a/routes/routes.js b/routes/routes.js index c55b88e1..09d5fe6b 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -96,11 +96,15 @@ module.exports = function (app, config, passport, i18n) { text: "" }; - var updatePasswordMailContent = "Hello,\n\n"+ - "We would like to notify that your password has been successfully updated.\n\n"+ - "Thanks,\nM4_LAB Team" - var updatePasswordMailSubject = "Your M4_LAB Password has been updated" - + var updatePasswordMailSubject = "Ihr Passwort für das Transferportal wurde gespeichert." + var mailSignature = "Mit den besten Grüßen,\ndas Transferportal-Team der HFT Stuttgart\n\n"+ + "Transferportal der Hochschule für Technik Stuttgart\n"+ + "Schellingstr. 24\n"+ + "70174 Stuttgart\n"+ + "m4lab@hft-stuttgart.de\n"+ + "https://transfer.hft-stuttgart.de" + var updatePasswordMailContent = "Lieber Nutzer,\n\n"+"Ihr Passwort wurde erfolgreich geändert.\n\n"+mailSignature + // ================ test i18n ================== i18n.setLocale('de'); app.get('/de', function(req, res) { @@ -108,30 +112,32 @@ module.exports = function (app, config, passport, i18n) { res.send(greeting) }); + var lang = 'DE' + // ======== APP ROUTES ==================== - app.get('/account', function (req, res) { + app.get('/', function (req, res) { if (req.isAuthenticated()) { methods.getUserByEmail(req.user.email, function(data, err){ if (!err) { - res.render('home', { - greeting: i18n.__('Hello'), + res.render(lang+'/home', { + user: data }); } }) } else { - res.redirect('/account/login'); - } + res.redirect('/login'); // localhost + } }); app.get('/error', function (req, res) { - res.render('error') + res.render(lang+'/error') }); - app.get('/account/login', + app.get('/login', passport.authenticate(config.passport.strategy, { - successRedirect: '/account/', - failureRedirect: '/account/login' + successRedirect: '/', + failureRedirect: '/login' }) ); @@ -157,22 +163,22 @@ module.exports = function (app, config, passport, i18n) { }); }); - app.get('/account/profile', function (req, res) { + app.get('/profile', function (req, res) { if (req.isAuthenticated()) { methods.getUserByEmail(req.user.email, function(data, err){ if (!err) { - res.render('profile', { + res.render(lang+'/profile', { user: data, email: req.user.email }); } }) } else { - res.redirect('/account/login'); + res.redirect('/login'); } }); - app.get('/account/services', function (req, res) { + app.get('/services', function (req, res) { if (req.isAuthenticated()) { async.waterfall([ // get userId by email from userdb @@ -225,29 +231,30 @@ module.exports = function (app, config, passport, i18n) { } // render the page - res.render('services', { + res.render(lang+'/services', { user: req.user, project: allProjects }); } ]) } else { - res.redirect('/account/login'); + res.redirect('/login'); } }); - app.get('/account/security', function (req, res) { + app.get('/security', function (req, res) { if (req.isAuthenticated()) { - res.render('security', { + res.render(lang+'/security', { user: req.user // useful for view engine, useless for HTML }); } else { - res.redirect('/account/login'); + res.redirect('/login'); } }); app.post('/updateProfile', function (req, res) { var userData = { + salutation: req.body.inputSalutation, title: req.body.inputTitle, firstname: req.body.inputFirstname, lastname: req.body.inputLastname, @@ -267,11 +274,11 @@ module.exports = function (app, config, passport, i18n) { else { req.flash('success', 'Profile updated!'); } - res.redirect('/account/profile'); + res.redirect('/profile'); }) } } else { - res.redirect('/account/login'); + res.redirect('/login'); } }); @@ -286,7 +293,7 @@ module.exports = function (app, config, passport, i18n) { // Load hashed passwd from DB dbconn.user.query('SELECT password FROM credential WHERE user_id='+userId, function (err, rows, fields) { if (err) { - res.redirect('/account/500') + res.redirect('/500') throw err } var userPwd = rows[0].password @@ -294,17 +301,21 @@ module.exports = function (app, config, passport, i18n) { // check if the password is correct bcrypt.compare(currPwd, userPwd, function(err, isMatch) { if (err) { - res.redirect('/account/500') + res.redirect('/500') throw err } else if (!isMatch) { - req.flash('error', "Sorry, your password was incorrect. Please double-check your password.") - res.redirect('/account/security') + //req.flash('error', "Sorry, your password was incorrect. Please double-check your password.") + req.flash('error', "Das Passwort ist leider falsch. Bitte überprüfen Sie Ihre Eingabe.") + //res.redirect('/account/security') + res.redirect('/security') } else { if ( newPwd != retypePwd ) { + //req.flash('error', "Passwords do no match. Please make sure you re-type your new password correctly.") req.flash('error', "Passwords do no match. Please make sure you re-type your new password correctly.") - res.redirect('/account/security') + //res.redirect('/account/security') + res.redirect('/security') } else { // update password @@ -316,13 +327,16 @@ module.exports = function (app, config, passport, i18n) { } methods.updateCredential(credentialData, function(err){ if (err) { - req.flash('error', "Database error: Password cannot be modified.") + //req.flash('error', "Database error: Password cannot be modified.") + req.flash('error', "Datenbankfehler: Passwort kann nicht geändert werden.") throw err } else { - req.flash('success', "Pasword updated!") + //req.flash('success', "Pasword updated!") + req.flash('success', "Passwort aktualisiert!") mailOptions.to = req.user.email - mailOptions.subject = "Your M4_LAB Password has been updated" + //mailOptions.subject = "Your M4_LAB Password has been updated." + mailOptions.subject = updatePasswordMailSubject mailOptions.text = updatePasswordMailContent smtpTransport.sendMail(mailOptions, function(err) { if (err) { @@ -330,7 +344,8 @@ module.exports = function (app, config, passport, i18n) { } }); } - res.redirect('/account/security') + //res.redirect('/account/security') + res.redirect('/security') }) }); }); @@ -342,12 +357,12 @@ module.exports = function (app, config, passport, i18n) { }) } else { - res.redirect('/account/login'); + res.redirect('/login'); } }); app.get('/forgotPwd', function (req, res) { - res.render('forgotPwd', { + res.render(lang+'/forgotPwd', { user: req.user }); }); @@ -372,13 +387,19 @@ module.exports = function (app, config, passport, i18n) { methods.checkUserEmail(emailAddress, function(err, user){ if (user) { console.log("email: user found"); - var emailSubject = "M4_LAB Password Reset"; - var emailContent = "Hi User,\n\n"+ + //var emailSubject = "M4_LAB Password Reset"; + var emailSubject = "Ihre Passwort-Anfrage an das Transferportal der HFT Stuttgart"; + /* var emailContent = "Hi User,\n\n"+ "we've received a request to reset your password. If you didn't make the request, just ignore this email.\n\n"+ "Otherwise, you can reset your password using this link: http://m4lab.hft-stuttgart.de/account/reset/" + token + "\n" + "This password reset is only valid for 1 hour.\n\n"+ - "Thanks,\nM4_LAB Team" - + "Thanks,\nM4_LAB Team" */ + var emailContent = "Lieber Nutzer,\n\n"+ + "wir haben Ihre Anfrage zur Erneuerung Ihres Passwortes erhalten. Falls Sie diese Anfrage nicht gesendet haben, ignorieren Sie bitte diese E-Mail.\n\n"+ + //"Sie können Ihr Passwort mit dem Klick auf diesen Link ändern: http://m4lab.hft-stuttgart.de/account/reset/" + token + "\n" + // test server + "Sie können Ihr Passwort mit dem Klick auf diesen Link ändern: http://localhost:9989/reset/" + token + "\n" + // localhost + "Dieser Link ist aus Sicherheitsgründen nur für 1 Stunde gültig.\n\n"+mailSignature + var credentialData = { user_id: user.id, resetPasswordToken: token, @@ -402,34 +423,30 @@ module.exports = function (app, config, passport, i18n) { } }); } - /*, - function(token, user, done) { - mailOptions.to = emailAddress; - mailOptions.subject = emailSubject; - mailOptions.text = emailContent; - smtpTransport.sendMail(mailOptions, function(err) { - done(err, 'done'); - }); - } */ ], function(err) { if (err) { - req.flash('error', 'An error occured. Please try again.'); + //req.flash('error', 'An error occured. Please try again.'); + req.flash('error', 'Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.'); } else { - req.flash('success', 'If your email is registered, an e-mail has been sent to ' + emailAddress + ' with further instructions.'); + //req.flash('success', 'If your email is registered, an e-mail has been sent to ' + emailAddress + ' with further instructions.'); + req.flash('success', 'Wenn Ihre E-Mail-Adresse registriert ist, wurde eine E-Mail mit dem weiteren Vorgehen an ' + emailAddress + ' versendet.'); } - res.redirect('/account/forgotPwd'); + //res.redirect('/account/forgotPwd'); // deployment + res.redirect('/forgotPwd'); // localhost }); }); app.get('/reset/:token', function(req, res) { methods.getUserByToken(req.params.token, function(err, user){ if (!user) { - req.flash('error', 'Password reset token is invalid or has expired.'); - res.redirect('/account/forgotPwd'); + //req.flash('error', 'Password reset token is invalid or has expired.'); + req.flash('error', 'Der Schlüssel zum zurücksetzen des Passworts ist ungültig oder abgelaufen.'); + //res.redirect('/account/forgotPwd'); // deployment + res.redirect('/forgotPwd'); // localhost } else { - res.render('reset'); + res.render(lang+'/reset'); } }); }); @@ -448,11 +465,13 @@ module.exports = function (app, config, passport, i18n) { // update password methods.updateCredential(credentialData, function(err){ if (err) { - req.flash('error', "Database error: Password cannot be modified.") + //req.flash('error', "Database error: Password cannot be modified.") + req.flash('error', "Datenbankfehler: Passwort kann nicht geändert werden.") throw err } else { - req.flash('success', "Your pasword has been updated.") + //req.flash('success', "Your pasword has been updated.") + req.flash('success', "Passwort aktualisiert!") // send notifiaction email mailOptions.to = user.email mailOptions.subject = updatePasswordMailSubject @@ -463,7 +482,7 @@ module.exports = function (app, config, passport, i18n) { } }); // redirect to login page - res.redirect('/account/login') + res.redirect('/login') } }) }); @@ -471,7 +490,7 @@ module.exports = function (app, config, passport, i18n) { } else { req.flash('error', "User not found.") - res.redirect('/account/login') + res.redirect('/login') } }); @@ -479,7 +498,7 @@ module.exports = function (app, config, passport, i18n) { // todo: user registration with captcha app.get('/registration', function(req, res) { - res.render('registration') + res.render(lang+'/registration') }) app.post('/registration', function(req, res) { @@ -490,6 +509,7 @@ module.exports = function (app, config, passport, i18n) { // user data var curDate = new Date() var userData = { + salutation: req.body.inputSalutation, title: req.body.inputTitle, firstname: req.body.inputFirstname, lastname: req.body.inputLastname, @@ -509,12 +529,15 @@ module.exports = function (app, config, passport, i18n) { } methods.registerNewUser(newAccount, function(err){ if (err) { - req.flash('error', "Failed"); + //req.flash('error', "Failed") + req.flash('error', "Fehlgeschlagen") } else { - req.flash('success', 'Your account has been created. Please log in.'); + //req.flash('success', 'Your account has been created. Please log in.') + req.flash('success', 'Ihr Benutzerkonto wurde angelegt. Bitte melden Sie sich an.') } - res.redirect('/account/registration'); + //res.redirect('/account/registration'); // deployment + res.redirect('/registration'); // localhost }) }); }); diff --git a/views/DE/home.pug b/views/DE/home.pug index 53044de1..58b2427c 100644 --- a/views/DE/home.pug +++ b/views/DE/home.pug @@ -34,9 +34,9 @@ html(lang="de") h5 span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="#" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") p content goes here diff --git a/views/DE/profile.pug b/views/DE/profile.pug index 9a3fc46e..32a2aff1 100644 --- a/views/DE/profile.pug +++ b/views/DE/profile.pug @@ -35,8 +35,8 @@ html(lang="de") span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") a(class="nav-link" href="#" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes for success in successes @@ -48,9 +48,23 @@ html(lang="de") a(class="close", href="#", data-dismiss="alert", aria-label="close") × form#profileForm(method="POST", action="/updateProfile") div(class="form-row") + div(class='form-group col-md-2') + label(for="title") Anrede + select#inputSalutation(name="inputSalutation", class="form-control", , value=user.salutation) + option(value="") - Anrede - + option(value="Herr") Herr + option(value="Frau") Frau + option(value="Divers") Divers + script. + var salutationOptions = document.getElementById('inputSalutation').options; + for (i=0; i < salutationOptions.length; i++) { + if (salutationOptions[i].value == '#{user.salutation}') + salutationOptions[i].selected = true; + } div(class='form-group col-md-2') label(for="title") Titel select#inputTitle(name="inputTitle", class="form-control", value=user.title) + option(value="") - Titel - option(value="Prof.") Prof. option(value="Dr.") Dr. option(value="Dipl.-Ing.") Dipl.-Ing. @@ -61,15 +75,15 @@ html(lang="de") if (titleOptions[i].value == '#{user.title}') titleOptions[i].selected = true; } - div(class='form-group col-md-3') + div(class='form-group col-md-2') label(for="firstname") Vorname input#inputFirstname(name="inputFirstname", type="text", class="form-control", placeholder="Vorname", value=user.firstname required) - div(class='form-group col-md-3') + div(class='form-group col-md-2') label(for="lastname") Nachname input#inputLastname(name="inputLastname", type="text", class="form-control", placeholder="Nachname", value=user.lastname required) div(class="form-row") div(class='form-group col-md-8') - label(for="email") Email + label(for="email") E-mail Adresse input#inputEmail(name="inputEmail", type="email", class="form-control", placeholder="Email", value=email required) div(class="form-row") div(class='form-group col-md-8') @@ -83,7 +97,7 @@ html(lang="de") div(class='form-group col-md-8') label(for="speciality") Fachgebiete input#inputSpeciality(name="inputSpeciality", type="text", class="form-control", placeholder="Fachgebiete", value=user.speciality) - input(type="submit", class="btn btn-primary", value="Update") + input(type="submit", class="btn btn-primary", value="Speichern") // jQuery script(src="https://code.jquery.com/jquery-3.3.1.min.js") diff --git a/views/DE/registration.pug b/views/DE/registration.pug index f5e9973e..ab1c7e5a 100644 --- a/views/DE/registration.pug +++ b/views/DE/registration.pug @@ -82,7 +82,7 @@ html(lang="de") p * Pflichtfeld input#submitBtn(type="submit", class="btn btn-outline-dark btn-block", value="Senden" disabled) br - p(class="text-center") Sie haben bereits ein Benutzerkonto? Melden Sie sich hier an. + p(class="text-center") Sie haben bereits ein Benutzerkonto? Melden Sie sich hier an. // jQuery diff --git a/views/DE/security.pug b/views/DE/security.pug index 5d4a214a..560d32bc 100644 --- a/views/DE/security.pug +++ b/views/DE/security.pug @@ -37,9 +37,9 @@ html(lang="de") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil a(class="nav-link" href="#" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes for success in successes @@ -53,18 +53,18 @@ html(lang="de") div(class="form-group row") label(for="currPwd") Aktuelles Passwort input(id="inputCurrPwd", name="inputCurrPwd", type="password", class="form-control" required) - div(class="invalid-feedback") Please fill in this field. + div(class="invalid-feedback") Bitte füllen Sie dieses Feld aus. div(class="form-group row") label(for="newPwd") Neues Passwort input#inputNewPwd(name="inputNewPwd", type="password", class="form-control" required) span#recommendation - div(class="invalid-feedback") Please fill in this field. + div(class="invalid-feedback") Bitte füllen Sie dieses Feld aus. div(class="form-group row") label(for="confirm") Bestätigen Sie das neue Passwort input#inputConfirm(name="inputConfirm", type="password", class="form-control" required) span#message - div(class="invalid-feedback") Please fill in this field. - input#updateBtn(type="submit", class="btn btn-primary", value="Update Password" disabled) + div(class="invalid-feedback") Bitte füllen Sie dieses Feld aus. + input#updateBtn(type="submit", class="btn btn-primary", value="Passwort ändern" disabled) // jQuery script(src="https://code.jquery.com/jquery-3.3.1.min.js") diff --git a/views/DE/services.pug b/views/DE/services.pug index 6ab101f3..55f5a1b6 100644 --- a/views/DE/services.pug +++ b/views/DE/services.pug @@ -34,8 +34,8 @@ html(lang="de") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen a(class="nav-link" href="#" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes -- GitLab From 3fecf9ff3d228f15c67aae9344dcb9b969a56321 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Wed, 4 Mar 2020 14:49:59 +0100 Subject: [PATCH 095/161] put "project-list" and "account-related-pages" on different folder --- views/DE/{ => account}/forgotPwd.pug | 0 views/DE/{ => account}/home.pug | 0 views/DE/{ => account}/profile.pug | 0 views/DE/{ => account}/registration.pug | 0 views/DE/{ => account}/reset.pug | 0 views/DE/{ => account}/security.pug | 0 views/DE/{ => account}/services.pug | 0 views/DE/projectList/projects.pug | 48 +++++++++++++++++++++++++ 8 files changed, 48 insertions(+) rename views/DE/{ => account}/forgotPwd.pug (100%) rename views/DE/{ => account}/home.pug (100%) rename views/DE/{ => account}/profile.pug (100%) rename views/DE/{ => account}/registration.pug (100%) rename views/DE/{ => account}/reset.pug (100%) rename views/DE/{ => account}/security.pug (100%) rename views/DE/{ => account}/services.pug (100%) create mode 100644 views/DE/projectList/projects.pug diff --git a/views/DE/forgotPwd.pug b/views/DE/account/forgotPwd.pug similarity index 100% rename from views/DE/forgotPwd.pug rename to views/DE/account/forgotPwd.pug diff --git a/views/DE/home.pug b/views/DE/account/home.pug similarity index 100% rename from views/DE/home.pug rename to views/DE/account/home.pug diff --git a/views/DE/profile.pug b/views/DE/account/profile.pug similarity index 100% rename from views/DE/profile.pug rename to views/DE/account/profile.pug diff --git a/views/DE/registration.pug b/views/DE/account/registration.pug similarity index 100% rename from views/DE/registration.pug rename to views/DE/account/registration.pug diff --git a/views/DE/reset.pug b/views/DE/account/reset.pug similarity index 100% rename from views/DE/reset.pug rename to views/DE/account/reset.pug diff --git a/views/DE/security.pug b/views/DE/account/security.pug similarity index 100% rename from views/DE/security.pug rename to views/DE/account/security.pug diff --git a/views/DE/services.pug b/views/DE/account/services.pug similarity index 100% rename from views/DE/services.pug rename to views/DE/account/services.pug diff --git a/views/DE/projectList/projects.pug b/views/DE/projectList/projects.pug new file mode 100644 index 00000000..49b656ea --- /dev/null +++ b/views/DE/projectList/projects.pug @@ -0,0 +1,48 @@ +doctype html +html(lang="de") + head + title= "Project List" + meta(charset="UTF-8") + meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") + style. + .collapse { + display: none; + } + .collapse.in { + display: block; + } + .collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height,visibility; + -o-transition-property: height,visibility; + transition-property: height,visibility; + } + .warning { + color: red; + font-size: 11px; + } + body + div(class="container-fluid") + div(class="row") + div(class="col-md-6 offset-md-2") + h3(class="mb-3 font-weight-bold") Hello World + div(class="col-md-6 offset-md-3") + p Content: Project List in a table + + + // jQuery + script(src="https://code.jquery.com/jquery-3.3.1.min.js") + script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") + // Bootstrap + script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") + script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file -- GitLab From a6fa8da93a13a1b895751c72aea5b310cf35b505 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Wed, 4 Mar 2020 14:50:32 +0100 Subject: [PATCH 096/161] add route for project-list --- routes/routes.js | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/routes/routes.js b/routes/routes.js index 09d5fe6b..481e2fb9 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -114,12 +114,12 @@ module.exports = function (app, config, passport, i18n) { var lang = 'DE' - // ======== APP ROUTES ==================== + // ======== APP ROUTES - ACCOUNT ==================== app.get('/', function (req, res) { if (req.isAuthenticated()) { methods.getUserByEmail(req.user.email, function(data, err){ if (!err) { - res.render(lang+'/home', { + res.render(lang+'/account/home', { user: data }); } @@ -167,7 +167,7 @@ module.exports = function (app, config, passport, i18n) { if (req.isAuthenticated()) { methods.getUserByEmail(req.user.email, function(data, err){ if (!err) { - res.render(lang+'/profile', { + res.render(lang+'/account/profile', { user: data, email: req.user.email }); @@ -231,7 +231,7 @@ module.exports = function (app, config, passport, i18n) { } // render the page - res.render(lang+'/services', { + res.render(lang+'/account/services', { user: req.user, project: allProjects }); @@ -244,7 +244,7 @@ module.exports = function (app, config, passport, i18n) { app.get('/security', function (req, res) { if (req.isAuthenticated()) { - res.render(lang+'/security', { + res.render(lang+'/account/security', { user: req.user // useful for view engine, useless for HTML }); } else { @@ -362,7 +362,7 @@ module.exports = function (app, config, passport, i18n) { }); app.get('/forgotPwd', function (req, res) { - res.render(lang+'/forgotPwd', { + res.render(lang+'/account/forgotPwd', { user: req.user }); }); @@ -446,7 +446,7 @@ module.exports = function (app, config, passport, i18n) { res.redirect('/forgotPwd'); // localhost } else { - res.render(lang+'/reset'); + res.render(lang+'/account/reset'); } }); }); @@ -498,7 +498,7 @@ module.exports = function (app, config, passport, i18n) { // todo: user registration with captcha app.get('/registration', function(req, res) { - res.render(lang+'/registration') + res.render(lang+'/account/registration') }) app.post('/registration', function(req, res) { @@ -543,7 +543,6 @@ module.exports = function (app, config, passport, i18n) { }); }) - app.get('/email/:email', function(req, res) { methods.checkUserEmail(req.params.email, function(err, user){ if (!err) { @@ -557,4 +556,20 @@ module.exports = function (app, config, passport, i18n) { }) }) + // ======== APP ROUTES - PROJECT LIST ==================== + app.get('/project', function (req, res) { + if (req.isAuthenticated()) { + console.log("true") + res.render(lang+'/projectList/projects', { + isUserAuthenticated: true + }); + } + else { + console.log("false") + res.render(lang+'/projectList/projects', { + isUserAuthenticated: false + }); + } + }) + }; -- GitLab From 7df3b7a0063fd9dbc81a3593ce3c86207f7fb334 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Wed, 4 Mar 2020 15:06:20 +0100 Subject: [PATCH 097/161] add if-else condition for project-list header --- routes/routes.js | 2 -- views/DE/projectList/projects.pug | 7 +++++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/routes/routes.js b/routes/routes.js index 481e2fb9..1632240d 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -559,13 +559,11 @@ module.exports = function (app, config, passport, i18n) { // ======== APP ROUTES - PROJECT LIST ==================== app.get('/project', function (req, res) { if (req.isAuthenticated()) { - console.log("true") res.render(lang+'/projectList/projects', { isUserAuthenticated: true }); } else { - console.log("false") res.render(lang+'/projectList/projects', { isUserAuthenticated: false }); diff --git a/views/DE/projectList/projects.pug b/views/DE/projectList/projects.pug index 49b656ea..5b1a10a5 100644 --- a/views/DE/projectList/projects.pug +++ b/views/DE/projectList/projects.pug @@ -38,11 +38,14 @@ html(lang="de") h3(class="mb-3 font-weight-bold") Hello World div(class="col-md-6 offset-md-3") p Content: Project List in a table - // jQuery script(src="https://code.jquery.com/jquery-3.3.1.min.js") script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file + // Header + if isUserAuthenticated + script(src="/js/headfootLogout.js") + else + script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file -- GitLab From d625f1f8167cf7544b87947eec35472d2ea33ad6 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Wed, 4 Mar 2020 17:45:35 +0100 Subject: [PATCH 098/161] show project list in a table --- routes/routes.js | 84 +++++++++++++++++++++++++++---- views/DE/projectList/projects.pug | 56 +++++++++++++++++++-- 2 files changed, 125 insertions(+), 15 deletions(-) diff --git a/routes/routes.js b/routes/routes.js index 1632240d..dc24fce6 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -558,16 +558,80 @@ module.exports = function (app, config, passport, i18n) { // ======== APP ROUTES - PROJECT LIST ==================== app.get('/project', function (req, res) { - if (req.isAuthenticated()) { - res.render(lang+'/projectList/projects', { - isUserAuthenticated: true - }); - } - else { - res.render(lang+'/projectList/projects', { - isUserAuthenticated: false - }); - } + async.waterfall([ + // get all projects from projectdb + function(done) { + methods.getAllProjects(function(projectsOverview, err) { + if (!err) { + done(err, projectsOverview) + } + }) + }, + // create JSON object of projects and user status for front-end + function(projectsOverview, done) { + // var allProjects = [] + var activeProjects = [] + var nonActiveProjects = [] +/* + for (var i = 0; i < projectsOverview.length; i++) { + allProjects.push({ + id: projectsOverview[i].id, + status: projectsOverview[i].projectstatus, + logo: projectsOverview[i].logo, + akronym: projectsOverview[i].pname, + title: projectsOverview[i].title, + summary: projectsOverview[i].onelinesummary, + category: projectsOverview[i].category, + cp: projectsOverview[i].contact_email + }) + } +*/ + for (var i = 0; i < projectsOverview.length; i++) { + if (projectsOverview[i].projectstatus == 0) { + nonActiveProjects.push({ + id: projectsOverview[i].id, + logo: projectsOverview[i].logo, + akronym: projectsOverview[i].pname, + title: projectsOverview[i].title, + summary: projectsOverview[i].onelinesummary, + category: projectsOverview[i].category, + cp: projectsOverview[i].contact_email + }) + } + else if (projectsOverview[i].projectstatus == 1) { + activeProjects.push({ + id: projectsOverview[i].id, + logo: projectsOverview[i].logo, + akronym: projectsOverview[i].pname, + title: projectsOverview[i].title, + summary: projectsOverview[i].onelinesummary, + category: projectsOverview[i].category, + cp: projectsOverview[i].contact_email + }) + } + } + + // render the page + if (req.isAuthenticated()) { + res.render(lang+'/projectList/projects', { + isUserAuthenticated: true, + //project: allProjects + nonActive: nonActiveProjects, + active: activeProjects + }); + } + else { + res.render(lang+'/projectList/projects', { + isUserAuthenticated: false, + //project: allProjects + nonActive: nonActiveProjects, + active: activeProjects + }); + } + } + ]) + + }) }; diff --git a/views/DE/projectList/projects.pug b/views/DE/projectList/projects.pug index 5b1a10a5..490ce91b 100644 --- a/views/DE/projectList/projects.pug +++ b/views/DE/projectList/projects.pug @@ -33,11 +33,57 @@ html(lang="de") } body div(class="container-fluid") - div(class="row") - div(class="col-md-6 offset-md-2") - h3(class="mb-3 font-weight-bold") Hello World - div(class="col-md-6 offset-md-3") - p Content: Project List in a table + h3(class="mb-3 font-weight-bold") Aktive Projekte + table(class="table table-striped") + thead + tr + th Logo + th Akronym + th Title + th Kernziel + th Kategorie + th Ansprechpartner + th Projektinhalte + tbody + for item in active + tr + //td #{item.status} + td + img(src=item.logo, width="40", height="40") + td #{item.akronym} + td #{item.title} + td #{item.summary} + td #{item.category} + td + a(class="nav-link", href="mailto:"+ item.cp) #{item.cp} + td + a(class="nav-link", href="https://m4lab.hft-stuttgart.de/projectoverview?projectID="+ item.id) Zur Projektübersicht + br + h3(class="mb-3 font-weight-bold") Abgeschlossene Projekte + table(class="table table-striped") + thead + tr + th Logo + th Akronym + th Title + th Kernziel + th Kategorie + th Ansprechpartner + th Projektinhalte + tbody + for item in nonActive + tr + //td #{item.status} + td + img(src=item.logo, width="40", height="40") + td #{item.akronym} + td #{item.title} + td #{item.summary} + td #{item.category} + td + a(class="nav-link", href="mailto:"+ item.cp) #{item.cp} + td + a(class="nav-link", href="https://m4lab.hft-stuttgart.de/projectoverview?projectID="+ item.id) Zur Projektübersicht // jQuery script(src="https://code.jquery.com/jquery-3.3.1.min.js") -- GitLab From 4dc1bc6097cfe249424e12bf8be97d25a60a2bc8 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Thu, 5 Mar 2020 09:51:36 +0100 Subject: [PATCH 099/161] add gitlab link to project list table --- routes/routes.js | 48 +++++-------------- .../DE/{projectList => project}/projects.pug | 18 ++++++- 2 files changed, 28 insertions(+), 38 deletions(-) rename views/DE/{projectList => project}/projects.pug (75%) diff --git a/routes/routes.js b/routes/routes.js index dc24fce6..930bf3b4 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -556,7 +556,7 @@ module.exports = function (app, config, passport, i18n) { }) }) - // ======== APP ROUTES - PROJECT LIST ==================== + // ======== APP ROUTES - PROJECT ==================== app.get('/project', function (req, res) { async.waterfall([ // get all projects from projectdb @@ -567,71 +567,47 @@ module.exports = function (app, config, passport, i18n) { } }) }, - // create JSON object of projects and user status for front-end + // create JSON object for front-end function(projectsOverview, done) { - // var allProjects = [] var activeProjects = [] var nonActiveProjects = [] -/* + for (var i = 0; i < projectsOverview.length; i++) { - allProjects.push({ + var project = { id: projectsOverview[i].id, - status: projectsOverview[i].projectstatus, logo: projectsOverview[i].logo, akronym: projectsOverview[i].pname, title: projectsOverview[i].title, summary: projectsOverview[i].onelinesummary, category: projectsOverview[i].category, - cp: projectsOverview[i].contact_email - }) - } -*/ - for (var i = 0; i < projectsOverview.length; i++) { + cp: projectsOverview[i].contact_email, + gitlab: projectsOverview[i].gitlab + } if (projectsOverview[i].projectstatus == 0) { - nonActiveProjects.push({ - id: projectsOverview[i].id, - logo: projectsOverview[i].logo, - akronym: projectsOverview[i].pname, - title: projectsOverview[i].title, - summary: projectsOverview[i].onelinesummary, - category: projectsOverview[i].category, - cp: projectsOverview[i].contact_email - }) + nonActiveProjects.push(project) } else if (projectsOverview[i].projectstatus == 1) { - activeProjects.push({ - id: projectsOverview[i].id, - logo: projectsOverview[i].logo, - akronym: projectsOverview[i].pname, - title: projectsOverview[i].title, - summary: projectsOverview[i].onelinesummary, - category: projectsOverview[i].category, - cp: projectsOverview[i].contact_email - }) + activeProjects.push(project) } } // render the page if (req.isAuthenticated()) { - res.render(lang+'/projectList/projects', { + res.render(lang+'/project/projects', { isUserAuthenticated: true, - //project: allProjects nonActive: nonActiveProjects, active: activeProjects }); } else { - res.render(lang+'/projectList/projects', { + res.render(lang+'/project/projects', { isUserAuthenticated: false, - //project: allProjects nonActive: nonActiveProjects, active: activeProjects }); } } ]) - - }) -}; +}; \ No newline at end of file diff --git a/views/DE/projectList/projects.pug b/views/DE/project/projects.pug similarity index 75% rename from views/DE/projectList/projects.pug rename to views/DE/project/projects.pug index 490ce91b..35cd2c92 100644 --- a/views/DE/projectList/projects.pug +++ b/views/DE/project/projects.pug @@ -33,6 +33,7 @@ html(lang="de") } body div(class="container-fluid") + // Active projects h3(class="mb-3 font-weight-bold") Aktive Projekte table(class="table table-striped") thead @@ -57,8 +58,15 @@ html(lang="de") td a(class="nav-link", href="mailto:"+ item.cp) #{item.cp} td - a(class="nav-link", href="https://m4lab.hft-stuttgart.de/projectoverview?projectID="+ item.id) Zur Projektübersicht + a(class="nav-link", href="https://m4lab.hft-stuttgart.de/projectoverview?projectID="+item.id) Zur Projektübersicht + if item.gitlab + a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/tree/master") Projektdateien + a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/wikis/home") Projektwiki + else + a(class="nav-link", href="#") Projektdateien + a(class="nav-link", href="#") Projektwiki br + // Non-active projects h3(class="mb-3 font-weight-bold") Abgeschlossene Projekte table(class="table table-striped") thead @@ -83,7 +91,13 @@ html(lang="de") td a(class="nav-link", href="mailto:"+ item.cp) #{item.cp} td - a(class="nav-link", href="https://m4lab.hft-stuttgart.de/projectoverview?projectID="+ item.id) Zur Projektübersicht + a(class="nav-link", href="https://m4lab.hft-stuttgart.de/projectoverview?projectID="+item.id) Zur Projektübersicht + if item.gitlab + a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/tree/master") Projektdateien + a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/wikis/home") Projektwiki + else + a(class="nav-link", href="#") Projektdateien + a(class="nav-link", href="#") Projektwiki // jQuery script(src="https://code.jquery.com/jquery-3.3.1.min.js") -- GitLab From 2786292c50e2f822e5c08ca9f9af9d5523be2ea6 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Thu, 5 Mar 2020 13:09:10 +0100 Subject: [PATCH 100/161] add project overview: form and skeleton --- routes/routes.js | 14 +++ views/DE/project/addProjectOverview.pug | 113 ++++++++++++++++++++++++ views/DE/project/projects.pug | 18 ++-- 3 files changed, 137 insertions(+), 8 deletions(-) create mode 100644 views/DE/project/addProjectOverview.pug diff --git a/routes/routes.js b/routes/routes.js index 930bf3b4..abd4f03f 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -610,4 +610,18 @@ module.exports = function (app, config, passport, i18n) { ]) }) + app.get('/addprojectoverview', function (req, res) { + //res.render(lang+'/project/addProjectOverview') + if (req.isAuthenticated()) { + res.render(lang+'/project/addProjectOverview') + } + else { + res.redirect('/login') + } + }) + + app.post('/addprojectoverview', function (req, res) { + console.log(req.body) + }) + }; \ No newline at end of file diff --git a/views/DE/project/addProjectOverview.pug b/views/DE/project/addProjectOverview.pug new file mode 100644 index 00000000..a6499a87 --- /dev/null +++ b/views/DE/project/addProjectOverview.pug @@ -0,0 +1,113 @@ +doctype html +html(lang="de") + head + title= "Add Project Overview" + meta(charset="UTF-8") + meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") + style. + .collapse { + display: none; + } + .collapse.in { + display: block; + } + .collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height,visibility; + -o-transition-property: height,visibility; + transition-property: height,visibility; + } + .warning { + color: red; + font-size: 11px; + } + body + div(class="container-fluid") + div(class="row") + div(class="col-md-6 offset-md-2") + h4(class="mb-3 font-weight-bold") Neues Projekt + div(class="col-md-6 offset-md-3") + if successes + for success in successes + div.alert.alert-success.alert-dismissible #{ success } + a(class="close", href="#", data-dismiss="alert", aria-label="close") × + if errors + for error, i in errors + div.alert.alert-danger.alert-dismissible.fade.show #{ error } + a(class="close", href="#", data-dismiss="alert", aria-label="close") × + form(method="POST") + div(class='form-row') + div(class='form-group col-md-12') + input#inputPname(name="pname" class="form-control" type="text" placeholder="human-readable short project name*" required) + div(class="form-group col-md-12") + input#inputTitle(name="title" class="form-control" type="text" placeholder="official title of the project*" required) + div(class="form-group col-md-12") + input#inputSummary(name="summary" class="form-control" type="text" placeholder="one line summery of the project") + div(class="form-group col-md-12") + input#inputCategory(name="category" class="form-control" type="text" placeholder="category of the project") + //div(class="form-group col-md-12") + input#inputLogo(name="logo" class="form-control" type="text" placeholder="official logo of the project") + //div(class="form-group col-md-12") + input#inputWiki(name="wiki" class="form-control" type="text") + h5(class="mb-3 font-weight-bold") Content + div(class='form-row') + div(class='form-group col-md-12') + textarea#inputOverview(name="overview" class="form-control" type="text" rows="5" placeholder="overview") + div(class="form-group col-md-12") + textarea#inputQuestion(name="question" class="form-control" type="text" rows="5" placeholder="question") + div(class='form-group col-md-12') + textarea#inputApproach(name="approach" class="form-control" type="text" rows="5" placeholder="approach") + div(class="form-group col-md-12") + textarea#inputResult(name="result" class="form-control" type="text" rows="5" placeholder="result") + div(class="form-group col-md-12") + input#inputKeywords(name="keywords" class="form-control" type="text" placeholder="keywords") + h5(class="mb-3 font-weight-bold") Info + div(class='form-row') + div(class='form-group col-md-12') + textarea#inputAnnouncement(name="announcement" class="form-control" type="text" rows="5" placeholder="Ausschreibung") + div(class="form-group col-md-12") + input#inputTerm(name="term" class="form-control" type="text" placeholder="Laufzeit") + div(class='form-group col-md-12') + textarea#inputFurtherDetails(name="furtherDetails" class="form-control" type="text" rows="5" placeholder="Mehr informationen") + div(class="form-group col-md-12") + input#inputWebsite(name="website" class="form-control" type="text" placeholder="website") + h5(class="mb-3 font-weight-bold") Images + div(class='form-row') + div(class="form-group col-md-12") + input#inputSrc(name="src" class="form-control" type="text" placeholder="link to the image source") + div(class="form-group col-md-12") + input#inputCaption(name="caption" class="form-control" type="text" placeholder="caption of the image") + h5(class="mb-3 font-weight-bold") Contact + div(class='form-row') + div(class="form-group col-md-4") + input#inputContactFirstname(name="contactFirstname" class="form-control" type="text" placeholder="contact firstname") + div(class="form-group col-md-4") + input#inputContactLastname(name="contactLastname" class="form-control" type="text" placeholder="contact lastname") + div(class="form-group col-md-4") + input#inputContactEmail(name="contactEmail" class="form-control" type="text" placeholder="contact email") + div(class="form-group col-md-4") + input#inputLeaderFirstname(name="leaderFirstname" class="form-control" type="text" placeholder="leader firstname") + div(class="form-group col-md-4") + input#inputLeaderLastname(name="leaderLastname" class="form-control" type="text" placeholder="leader lastname") + div(class="form-group col-md-4") + input#inputLeaderEmail(name="leaderEmail" class="form-control" type="text" placeholder="leader email") + p * Pflichtfeld + input#submitBtn(type="submit", class="btn btn-outline-dark btn-block", value="Projekt Anlegen") + + // jQuery + script(src="https://code.jquery.com/jquery-3.3.1.min.js") + script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") + // Bootstrap + script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") + // Header + script(src="/js/headfootLogout.js") \ No newline at end of file diff --git a/views/DE/project/projects.pug b/views/DE/project/projects.pug index 35cd2c92..a59cdf45 100644 --- a/views/DE/project/projects.pug +++ b/views/DE/project/projects.pug @@ -33,6 +33,12 @@ html(lang="de") } body div(class="container-fluid") + if isUserAuthenticated + p Auf dieser Seite sehen Sie die Liste der über dieses Portal veröffentlichten Projekte. + a(href="/addprojectoverview" class="btn btn-primary" role="button" aria-pressed="true") Projekt anlegen + else + p Auf dieser Seite sehen Sie die Liste der über dieses Portal veröffentlichten Projekte. + p Möchten Sie ein neues Projekt anlegen, dann klicken Sie bitte auf #[a(href="/addprojectoverview") Anmelden und Projekt anlegen] // Active projects h3(class="mb-3 font-weight-bold") Aktive Projekte table(class="table table-striped") @@ -55,10 +61,8 @@ html(lang="de") td #{item.title} td #{item.summary} td #{item.category} - td - a(class="nav-link", href="mailto:"+ item.cp) #{item.cp} - td - a(class="nav-link", href="https://m4lab.hft-stuttgart.de/projectoverview?projectID="+item.id) Zur Projektübersicht + td #[a(class="nav-link", href="mailto:"+ item.cp) #{item.cp}] + td #[a(class="nav-link", href="https://m4lab.hft-stuttgart.de/projectoverview?projectID="+item.id) Zur Projektübersicht] if item.gitlab a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/tree/master") Projektdateien a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/wikis/home") Projektwiki @@ -88,10 +92,8 @@ html(lang="de") td #{item.title} td #{item.summary} td #{item.category} - td - a(class="nav-link", href="mailto:"+ item.cp) #{item.cp} - td - a(class="nav-link", href="https://m4lab.hft-stuttgart.de/projectoverview?projectID="+item.id) Zur Projektübersicht + td #[a(class="nav-link", href="mailto:"+ item.cp) #{item.cp}] + td #[a(class="nav-link", href="https://m4lab.hft-stuttgart.de/projectoverview?projectID="+item.id) Zur Projektübersicht] if item.gitlab a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/tree/master") Projektdateien a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/wikis/home") Projektwiki -- GitLab From f88e6c8a625c6533fe616ffd20f03d6c327576d9 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Thu, 5 Mar 2020 15:36:59 +0100 Subject: [PATCH 101/161] add project overview: insert data to db --- routes/methods.js | 6 +++ routes/routes.js | 50 +++++++++++++++++++++++-- views/DE/project/addProjectOverview.pug | 22 ++++++----- views/DE/project/projects.pug | 4 ++ 4 files changed, 68 insertions(+), 14 deletions(-) diff --git a/routes/methods.js b/routes/methods.js index 5a7dc652..3ffec719 100644 --- a/routes/methods.js +++ b/routes/methods.js @@ -138,6 +138,12 @@ var methods = { if (err) throw err; callback(rows[0], err); }) + }, + addProjectOverview: function(data, callback) { + dbconn.project.query('INSERT INTO project_overview SET ?', data, function (err, rows, fields){ + if (err) throw err; + callback(err); + }) } }; diff --git a/routes/routes.js b/routes/routes.js index abd4f03f..4a757553 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -611,17 +611,59 @@ module.exports = function (app, config, passport, i18n) { }) app.get('/addprojectoverview', function (req, res) { - //res.render(lang+'/project/addProjectOverview') if (req.isAuthenticated()) { res.render(lang+'/project/addProjectOverview') } else { res.redirect('/login') - } + } }) app.post('/addprojectoverview', function (req, res) { - console.log(req.body) + if (req.isAuthenticated()) { + var wiki = 0 + if (req.body.wiki) + wiki = 1 + + var projectOverviewData = { + pname: req.body.pname, + title: req.body.title, + onelinesummary: req.body.summary, + category: req.body.category, + logo: req.body.logo, + gitlab: req.body.gitlabURL, + wiki: wiki, + overview: req.body.overview, + question: req.body.question, + approach: req.body.approach, + result: req.body.result, + keywords: req.body.keywords, + announcement: req.body.announcement, + term: req.body.term, + further_details: req.body.furtherDetails, + website: req.body.website, + src: req.body.src, + caption: req.body.caption, + contact_firstname: req.body.contactFirstname, + contact_lastname: req.body.contactLastname, + contact_email: req.body.contactEmail, + leader_firstname: req.body.leaderFirstname, + leader_lastname: req.body.leaderLastname, + leader_email: req.body.leaderEmail + } + + methods.addProjectOverview(projectOverviewData, function(err){ + if (err) { + //req.flash('error', "Failed") + req.flash('error', "Fehlgeschlagen") + res.redirect('/addProjectOverview'); + } + else { + req.flash('success', 'Your project has been created.') + res.redirect('/project'); + } + }) + } }) - + }; \ No newline at end of file diff --git a/views/DE/project/addProjectOverview.pug b/views/DE/project/addProjectOverview.pug index a6499a87..7b40b54f 100644 --- a/views/DE/project/addProjectOverview.pug +++ b/views/DE/project/addProjectOverview.pug @@ -37,10 +37,6 @@ html(lang="de") div(class="col-md-6 offset-md-2") h4(class="mb-3 font-weight-bold") Neues Projekt div(class="col-md-6 offset-md-3") - if successes - for success in successes - div.alert.alert-success.alert-dismissible #{ success } - a(class="close", href="#", data-dismiss="alert", aria-label="close") × if errors for error, i in errors div.alert.alert-danger.alert-dismissible.fade.show #{ error } @@ -52,13 +48,19 @@ html(lang="de") div(class="form-group col-md-12") input#inputTitle(name="title" class="form-control" type="text" placeholder="official title of the project*" required) div(class="form-group col-md-12") - input#inputSummary(name="summary" class="form-control" type="text" placeholder="one line summery of the project") + input#inputSummary(name="summary" class="form-control" type="text" placeholder="one line summary of the project") div(class="form-group col-md-12") input#inputCategory(name="category" class="form-control" type="text" placeholder="category of the project") - //div(class="form-group col-md-12") + div(class="form-group col-md-12") input#inputLogo(name="logo" class="form-control" type="text" placeholder="official logo of the project") - //div(class="form-group col-md-12") - input#inputWiki(name="wiki" class="form-control" type="text") + div(class="form-group col-md-12") + div(class="input-group mb-3") + input#inputGitlabURL(name="gitlabURL" type="text" class="form-control" placeholder="M4_LAB GitLab Project URL, z.B. https://transfer.hft-stuttgart.de/gitlab/username/projectname") + div(class="input-group-prepend") + div(class="input-group-text") + input#inputWiki(name="wiki" type="checkbox") + |   Wiki + h5(class="mb-3 font-weight-bold") Content div(class='form-row') div(class='form-group col-md-12') @@ -94,13 +96,13 @@ html(lang="de") div(class="form-group col-md-4") input#inputContactLastname(name="contactLastname" class="form-control" type="text" placeholder="contact lastname") div(class="form-group col-md-4") - input#inputContactEmail(name="contactEmail" class="form-control" type="text" placeholder="contact email") + input#inputContactEmail(name="contactEmail" class="form-control" type="email" placeholder="contact email") div(class="form-group col-md-4") input#inputLeaderFirstname(name="leaderFirstname" class="form-control" type="text" placeholder="leader firstname") div(class="form-group col-md-4") input#inputLeaderLastname(name="leaderLastname" class="form-control" type="text" placeholder="leader lastname") div(class="form-group col-md-4") - input#inputLeaderEmail(name="leaderEmail" class="form-control" type="text" placeholder="leader email") + input#inputLeaderEmail(name="leaderEmail" class="form-control" type="email" placeholder="leader email") p * Pflichtfeld input#submitBtn(type="submit", class="btn btn-outline-dark btn-block", value="Projekt Anlegen") diff --git a/views/DE/project/projects.pug b/views/DE/project/projects.pug index a59cdf45..10987e62 100644 --- a/views/DE/project/projects.pug +++ b/views/DE/project/projects.pug @@ -39,6 +39,10 @@ html(lang="de") else p Auf dieser Seite sehen Sie die Liste der über dieses Portal veröffentlichten Projekte. p Möchten Sie ein neues Projekt anlegen, dann klicken Sie bitte auf #[a(href="/addprojectoverview") Anmelden und Projekt anlegen] + if successes + for success in successes + div.alert.alert-success.alert-dismissible #{ success } + a(class="close", href="#", data-dismiss="alert", aria-label="close") × // Active projects h3(class="mb-3 font-weight-bold") Aktive Projekte table(class="table table-striped") -- GitLab From 423eb5c0e9d69705f15ebf6b25882fd6fabff322 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Thu, 5 Mar 2020 15:44:26 +0100 Subject: [PATCH 102/161] update gitlab link --- views/DE/project/projects.pug | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/DE/project/projects.pug b/views/DE/project/projects.pug index 10987e62..56f65c10 100644 --- a/views/DE/project/projects.pug +++ b/views/DE/project/projects.pug @@ -68,8 +68,8 @@ html(lang="de") td #[a(class="nav-link", href="mailto:"+ item.cp) #{item.cp}] td #[a(class="nav-link", href="https://m4lab.hft-stuttgart.de/projectoverview?projectID="+item.id) Zur Projektübersicht] if item.gitlab - a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/tree/master") Projektdateien - a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/wikis/home") Projektwiki + a(class="nav-link", href=item.gitlab+"/tree/master") Projektdateien + a(class="nav-link", href=item.gitlab+"/wikis/home") Projektwiki else a(class="nav-link", href="#") Projektdateien a(class="nav-link", href="#") Projektwiki -- GitLab From 3d24af93a31f446b3b780009545e2d757daace5c Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Mar 2020 08:30:44 +0100 Subject: [PATCH 103/161] merged mailinglist changes --- routes/methods.js | 6 +++++ routes/routes.js | 30 +++++++++++++++++++++- views/mailinglists.pug | 57 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 views/mailinglists.pug diff --git a/routes/methods.js b/routes/methods.js index 3f3edf54..fe3e73e7 100644 --- a/routes/methods.js +++ b/routes/methods.js @@ -138,6 +138,12 @@ var methods = { if (err) throw err; callback(rows[0], err); }) + }, + getAllMailinglists: function(callback) { + dbconn.project.query('CALL getAllLists', function (err, rows, fields){ + if (err) throw err; + callback(rows[0], err); + }) } }; diff --git a/routes/routes.js b/routes/routes.js index 4908a218..329057d1 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -517,5 +517,33 @@ module.exports = function (app, config, passport) { } }) }) - + app.get('/mailinglists', function (req, res) { + async.waterfall([ + function(done) { + methods.getAllMailinglists(function(mailinglistOverview, err) { + if (!err) { + done(err, mailinglistOverview) + } + }) + }, + // create JSON object of mailinglists for front-end + function(mailinglistOverview, done) { + var allMailingLists = [] // JSON object + for (let i = 0; i < mailinglistOverview.length; i++) { + // add data to JSON object + allMailingLists.push({ + id: mailinglistOverview[i].id, + name: mailinglistOverview[i].name, + src: mailinglistOverview[i].src, + projectstatus: mailinglistOverview[i].projectstatus, + project_title: mailinglistOverview[i].project_title + }); + } + res.render('mailinglists', { + user: req.user, + mailinglists: allMailingLists + }); + } + ]) + }); }; diff --git a/views/mailinglists.pug b/views/mailinglists.pug new file mode 100644 index 00000000..5420eaf2 --- /dev/null +++ b/views/mailinglists.pug @@ -0,0 +1,57 @@ +html(lang="de") + head + title= "Mailinglisten" + meta(charset="UTF-8") + meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/custom/login.css") + link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") + style. + .collapse { + display: none; + } + .collapse.in { + display: block; + } + .collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height,visibility; + -o-transition-property: height,visibility; + transition-property: height,visibility; + } + body +
+ div() + h5(align="left") Aktive Mailinglisten + div(class="flex-container" style="align-items:flex-start") + div(class="table") + table(border="0" id="Projektliste") + tr + th Name + th Link + th zugeh. Projekt + for item in mailinglists + if item.projectstatus == '1' + tr + td #{item.name} + td #{item.src} + td #{item.project_title} +
+ div() + h5(align="left") Eintragung in Mailingliste + p() Wenn Sie sich in eine Mailingliste eintragen wollen, folgen Sie folgender Anleitung: + // jQuery + script(src="https://code.jquery.com/jquery-3.3.1.min.js") + script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") + // Bootstrap + script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") + // M4_LAB + script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file -- GitLab From 3acdd9fe7790ddc33939a4054e5f6ce746a20dfe Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Mar 2020 09:20:09 +0100 Subject: [PATCH 104/161] changed structure to reflect only one application on landing page -> needs apache reconfiguration --- routes/routes.js | 44 ++++++++++++------------- views/{ => DE}/mailinglists.pug | 0 views/EN/mailinglists.pug | 57 +++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+), 22 deletions(-) rename views/{ => DE}/mailinglists.pug (100%) create mode 100644 views/EN/mailinglists.pug diff --git a/routes/routes.js b/routes/routes.js index 0a69991c..c8f53687 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -137,13 +137,13 @@ module.exports = function (app, config, passport, i18n) { passport.authenticate(config.passport.strategy, { successRedirect: '/account/', - failureRedirect: '/account/login' + failureRedirect: '/login' }) ); app.get('/logout', function (req, res) { if (req.user == null) { - return res.redirect('/account/'); + return res.redirect('/'); } req.user.nameID = req.user.id; @@ -174,7 +174,7 @@ module.exports = function (app, config, passport, i18n) { } }) } else { - res.redirect('/account/login'); + res.redirect('/login'); } }); @@ -238,7 +238,7 @@ module.exports = function (app, config, passport, i18n) { } ]) } else { - res.redirect('/account/login'); + res.redirect('/login'); } }); @@ -248,7 +248,7 @@ module.exports = function (app, config, passport, i18n) { user: req.user // useful for view engine, useless for HTML }); } else { - res.redirect('/account/login'); + res.redirect('/login'); } }); @@ -274,11 +274,11 @@ module.exports = function (app, config, passport, i18n) { else { req.flash('success', 'Profile updated!'); } - res.redirect('/account/profile'); + res.redirect('lang+/account/profile'); }) } } else { - res.redirect('/account/login'); + res.redirect('/login'); } }); @@ -293,7 +293,7 @@ module.exports = function (app, config, passport, i18n) { // Load hashed passwd from DB dbconn.user.query('SELECT password FROM credential WHERE user_id='+userId, function (err, rows, fields) { if (err) { - res.redirect('/account/500') + res.redirect('/500') throw err } var userPwd = rows[0].password @@ -301,19 +301,19 @@ module.exports = function (app, config, passport, i18n) { // check if the password is correct bcrypt.compare(currPwd, userPwd, function(err, isMatch) { if (err) { - res.redirect('/account/500') + res.redirect('/500') throw err } else if (!isMatch) { //req.flash('error', "Sorry, your password was incorrect. Please double-check your password.") req.flash('error', "Das Passwort ist leider falsch. Bitte überprüfen Sie Ihre Eingabe.") - //res.redirect('/account/security') - res.redirect('/account/security') + //res.redirect('/security') + res.redirect('/security') } else { if ( newPwd != retypePwd ) { req.flash('error', "Passwords do no match. Please make sure you re-type your new password correctly.") - res.redirect('/account/security') + res.redirect(lang+'/account/security') } else { // update password @@ -342,7 +342,7 @@ module.exports = function (app, config, passport, i18n) { } }); } - res.redirect('/account/security') + res.redirect('/security') }) }); }); @@ -354,7 +354,7 @@ module.exports = function (app, config, passport, i18n) { }) } else { - res.redirect('/account/login'); + res.redirect('/login'); } }); @@ -429,8 +429,8 @@ module.exports = function (app, config, passport, i18n) { //req.flash('success', 'If your email is registered, an e-mail has been sent to ' + emailAddress + ' with further instructions.'); req.flash('success', 'Wenn Ihre E-Mail-Adresse registriert ist, wurde eine E-Mail mit dem weiteren Vorgehen an ' + emailAddress + ' versendet.'); } - //res.redirect('/account/forgotPwd'); // deployment - res.redirect('/account/forgotPwd'); // localhost + //res.redirect('/forgotPwd'); // deployment + res.redirect('/forgotPwd'); // localhost }); }); @@ -439,8 +439,8 @@ module.exports = function (app, config, passport, i18n) { if (!user) { //req.flash('error', 'Password reset token is invalid or has expired.'); req.flash('error', 'Der Schlüssel zum zurücksetzen des Passworts ist ungültig oder abgelaufen.'); - //res.redirect('/account/forgotPwd'); // deployment - res.redirect('/account/forgotPwd'); // localhost + //res.redirect('/forgotPwd'); // deployment + res.redirect('/forgotPwd'); // localhost } else { res.render(lang+'/account/reset'); @@ -479,7 +479,7 @@ module.exports = function (app, config, passport, i18n) { } }); // redirect to login page - res.redirect('/account/login') + res.redirect('/login') } }) }); @@ -487,7 +487,7 @@ module.exports = function (app, config, passport, i18n) { } else { req.flash('error', "User not found.") - res.redirect('/account/login') + res.redirect('/login') } }); @@ -533,7 +533,7 @@ module.exports = function (app, config, passport, i18n) { //req.flash('success', 'Your account has been created. Please log in.') req.flash('success', 'Ihr Benutzerkonto wurde angelegt. Bitte melden Sie sich an.') } - res.redirect('/account/registration'); + res.redirect('/registration'); }) }); }); @@ -573,7 +573,7 @@ module.exports = function (app, config, passport, i18n) { project_title: mailinglistOverview[i].project_title }); } - res.render('mailinglists', { + res.render(lang+'mailinglists', { user: req.user, mailinglists: allMailingLists }); diff --git a/views/mailinglists.pug b/views/DE/mailinglists.pug similarity index 100% rename from views/mailinglists.pug rename to views/DE/mailinglists.pug diff --git a/views/EN/mailinglists.pug b/views/EN/mailinglists.pug new file mode 100644 index 00000000..5420eaf2 --- /dev/null +++ b/views/EN/mailinglists.pug @@ -0,0 +1,57 @@ +html(lang="de") + head + title= "Mailinglisten" + meta(charset="UTF-8") + meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/custom/login.css") + link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") + style. + .collapse { + display: none; + } + .collapse.in { + display: block; + } + .collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height,visibility; + -o-transition-property: height,visibility; + transition-property: height,visibility; + } + body +
+ div() + h5(align="left") Aktive Mailinglisten + div(class="flex-container" style="align-items:flex-start") + div(class="table") + table(border="0" id="Projektliste") + tr + th Name + th Link + th zugeh. Projekt + for item in mailinglists + if item.projectstatus == '1' + tr + td #{item.name} + td #{item.src} + td #{item.project_title} +
+ div() + h5(align="left") Eintragung in Mailingliste + p() Wenn Sie sich in eine Mailingliste eintragen wollen, folgen Sie folgender Anleitung: + // jQuery + script(src="https://code.jquery.com/jquery-3.3.1.min.js") + script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") + // Bootstrap + script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") + // M4_LAB + script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file -- GitLab From bd2881c24889c73609c4f22a0ef60587f9673b55 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Mar 2020 09:42:27 +0100 Subject: [PATCH 105/161] reverted to dedicated account url --- routes/routes.js | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/routes/routes.js b/routes/routes.js index c8f53687..4f93fd76 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -62,7 +62,7 @@ module.exports = function (app, config, passport, i18n) { failureFlash: true }), function (req, res) { - res.redirect('/'); + res.redirect('/account/'); } ); @@ -125,7 +125,7 @@ module.exports = function (app, config, passport, i18n) { } }) } else { - res.redirect('/login'); // localhost + res.redirect('/account/login'); // localhost } }); @@ -136,14 +136,14 @@ module.exports = function (app, config, passport, i18n) { app.get('/login', passport.authenticate(config.passport.strategy, { - successRedirect: '/account/', + successRedirect: '/', failureRedirect: '/login' }) ); app.get('/logout', function (req, res) { if (req.user == null) { - return res.redirect('/'); + return res.redirect('/account/'); } req.user.nameID = req.user.id; @@ -174,7 +174,7 @@ module.exports = function (app, config, passport, i18n) { } }) } else { - res.redirect('/login'); + res.redirect('/account/login'); } }); @@ -238,7 +238,7 @@ module.exports = function (app, config, passport, i18n) { } ]) } else { - res.redirect('/login'); + res.redirect('/account/login'); } }); @@ -248,7 +248,7 @@ module.exports = function (app, config, passport, i18n) { user: req.user // useful for view engine, useless for HTML }); } else { - res.redirect('/login'); + res.redirect('/account/login'); } }); @@ -278,7 +278,7 @@ module.exports = function (app, config, passport, i18n) { }) } } else { - res.redirect('/login'); + res.redirect('/account/login'); } }); @@ -293,7 +293,7 @@ module.exports = function (app, config, passport, i18n) { // Load hashed passwd from DB dbconn.user.query('SELECT password FROM credential WHERE user_id='+userId, function (err, rows, fields) { if (err) { - res.redirect('/500') + res.redirect('/account/500') throw err } var userPwd = rows[0].password @@ -301,14 +301,14 @@ module.exports = function (app, config, passport, i18n) { // check if the password is correct bcrypt.compare(currPwd, userPwd, function(err, isMatch) { if (err) { - res.redirect('/500') + res.redirect('/account/500') throw err } else if (!isMatch) { //req.flash('error', "Sorry, your password was incorrect. Please double-check your password.") req.flash('error', "Das Passwort ist leider falsch. Bitte überprüfen Sie Ihre Eingabe.") - //res.redirect('/security') - res.redirect('/security') + //res.redirect('/account/security') + res.redirect('/account/security') } else { if ( newPwd != retypePwd ) { @@ -342,7 +342,7 @@ module.exports = function (app, config, passport, i18n) { } }); } - res.redirect('/security') + res.redirect('/account/security') }) }); }); @@ -354,7 +354,7 @@ module.exports = function (app, config, passport, i18n) { }) } else { - res.redirect('/login'); + res.redirect('/account/login'); } }); @@ -429,8 +429,8 @@ module.exports = function (app, config, passport, i18n) { //req.flash('success', 'If your email is registered, an e-mail has been sent to ' + emailAddress + ' with further instructions.'); req.flash('success', 'Wenn Ihre E-Mail-Adresse registriert ist, wurde eine E-Mail mit dem weiteren Vorgehen an ' + emailAddress + ' versendet.'); } - //res.redirect('/forgotPwd'); // deployment - res.redirect('/forgotPwd'); // localhost + //res.redirect('/account/forgotPwd'); // deployment + res.redirect('/account/forgotPwd'); // localhost }); }); @@ -439,8 +439,8 @@ module.exports = function (app, config, passport, i18n) { if (!user) { //req.flash('error', 'Password reset token is invalid or has expired.'); req.flash('error', 'Der Schlüssel zum zurücksetzen des Passworts ist ungültig oder abgelaufen.'); - //res.redirect('/forgotPwd'); // deployment - res.redirect('/forgotPwd'); // localhost + //res.redirect('/account/forgotPwd'); // deployment + res.redirect('/account/forgotPwd'); // localhost } else { res.render(lang+'/account/reset'); @@ -479,7 +479,7 @@ module.exports = function (app, config, passport, i18n) { } }); // redirect to login page - res.redirect('/login') + res.redirect('/account/login') } }) }); @@ -487,7 +487,7 @@ module.exports = function (app, config, passport, i18n) { } else { req.flash('error', "User not found.") - res.redirect('/login') + res.redirect('/account/login') } }); @@ -533,7 +533,7 @@ module.exports = function (app, config, passport, i18n) { //req.flash('success', 'Your account has been created. Please log in.') req.flash('success', 'Ihr Benutzerkonto wurde angelegt. Bitte melden Sie sich an.') } - res.redirect('/registration'); + res.redirect('/account/registration'); }) }); }); @@ -640,7 +640,7 @@ module.exports = function (app, config, passport, i18n) { res.render(lang+'/project/addProjectOverview') } else { - res.redirect('/login') + res.redirect('/account/login') } }) @@ -681,11 +681,11 @@ module.exports = function (app, config, passport, i18n) { if (err) { //req.flash('error', "Failed") req.flash('error', "Fehlgeschlagen") - res.redirect('/addProjectOverview'); + res.redirect('/account/addProjectOverview'); } else { req.flash('success', 'Your project has been created.') - res.redirect('/project'); + res.redirect('/account/project'); } }) } -- GitLab From d4adfe143d1b697a912e1cd8614df34238ac3606 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Mar 2020 09:54:42 +0100 Subject: [PATCH 106/161] typo in mailinglist render --- routes/routes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/routes.js b/routes/routes.js index 4f93fd76..56d50f30 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -573,7 +573,7 @@ module.exports = function (app, config, passport, i18n) { project_title: mailinglistOverview[i].project_title }); } - res.render(lang+'mailinglists', { + res.render(lang+'/mailinglists', { user: req.user, mailinglists: allMailingLists }); -- GitLab From d3772bae38f2ee9b3efd35f5f9646e1e56f97ed4 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Mar 2020 09:59:07 +0100 Subject: [PATCH 107/161] sidebar links link to /account/* --- views/DE/account/home.pug | 6 +++--- views/DE/account/profile.pug | 4 ++-- views/DE/account/security.pug | 4 ++-- views/DE/account/services.pug | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/views/DE/account/home.pug b/views/DE/account/home.pug index 58b2427c..f08d9ee7 100644 --- a/views/DE/account/home.pug +++ b/views/DE/account/home.pug @@ -34,9 +34,9 @@ html(lang="de") h5 span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") p content goes here diff --git a/views/DE/account/profile.pug b/views/DE/account/profile.pug index 32a2aff1..e4d7e260 100644 --- a/views/DE/account/profile.pug +++ b/views/DE/account/profile.pug @@ -35,8 +35,8 @@ html(lang="de") span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") a(class="nav-link" href="#" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes for success in successes diff --git a/views/DE/account/security.pug b/views/DE/account/security.pug index 560d32bc..6db09112 100644 --- a/views/DE/account/security.pug +++ b/views/DE/account/security.pug @@ -37,9 +37,9 @@ html(lang="de") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil a(class="nav-link" href="#" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes for success in successes diff --git a/views/DE/account/services.pug b/views/DE/account/services.pug index 55f5a1b6..6ab101f3 100644 --- a/views/DE/account/services.pug +++ b/views/DE/account/services.pug @@ -34,8 +34,8 @@ html(lang="de") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen a(class="nav-link" href="#" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes -- GitLab From b32b5696c62187216c35a6895cdd6bf90e54ef04 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Mar 2020 10:02:19 +0100 Subject: [PATCH 108/161] harmonized mailinglists, using accouunt header --- views/DE/mailinglists.pug | 7 +++++-- views/EN/mailinglists.pug | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/views/DE/mailinglists.pug b/views/DE/mailinglists.pug index 5420eaf2..d421b2b8 100644 --- a/views/DE/mailinglists.pug +++ b/views/DE/mailinglists.pug @@ -53,5 +53,8 @@ html(lang="de") script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") - // M4_LAB - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file + // Header + if isUserAuthenticated + script(src="/js/headfootLogout.js") + else + script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file diff --git a/views/EN/mailinglists.pug b/views/EN/mailinglists.pug index 5420eaf2..d421b2b8 100644 --- a/views/EN/mailinglists.pug +++ b/views/EN/mailinglists.pug @@ -53,5 +53,8 @@ html(lang="de") script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") - // M4_LAB - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file + // Header + if isUserAuthenticated + script(src="/js/headfootLogout.js") + else + script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file -- GitLab From 837a0ea9f59eb885f4fff7b570216d1f7dd463b8 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Mar 2020 10:06:42 +0100 Subject: [PATCH 109/161] passing isAuthenticated param to mailinglsts --- routes/routes.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/routes/routes.js b/routes/routes.js index 56d50f30..8ebebc6b 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -573,7 +573,9 @@ module.exports = function (app, config, passport, i18n) { project_title: mailinglistOverview[i].project_title }); } + res.render(lang+'/mailinglists', { + isUserAuthenticated: req.isAuthenticated(), user: req.user, mailinglists: allMailingLists }); -- GitLab From 9fb1193e46c3cc2bc410666f311095e087d1f908 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Mar 2020 10:53:17 +0100 Subject: [PATCH 110/161] change projectDB to testing DB --- config/config.js | 1 + routes/dbconn.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/config/config.js b/config/config.js index c371d3c9..5c0c2cfc 100644 --- a/config/config.js +++ b/config/config.js @@ -21,6 +21,7 @@ module.exports = { password: 'Stuttgart2019', // DB password port: 3306, // MySQL port dbUser: 'userdb', // User DB + host_project: 'm4lab.hft-stuttgart.de', // DB host project db dbProject: 'projectDB' // Project DB }, mailer: { diff --git a/routes/dbconn.js b/routes/dbconn.js index 0c3c67c4..834eb1aa 100644 --- a/routes/dbconn.js +++ b/routes/dbconn.js @@ -51,7 +51,7 @@ var dbconn = function dbconn(query, values, next) { // ==== PROJECT DB CONNECTION ==== var projectConnection = mysql.createConnection({ - host: config.database.host, + host: config.database.host_project, user: config.database.user, password: config.database.password, port: config.database.port, -- GitLab From 3c16ff0cdf1682382beada359f5d4314024d7363 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Mar 2020 13:54:00 +0100 Subject: [PATCH 111/161] mailinglist layout adapted to project lsit layout --- views/DE/mailinglists.pug | 22 ++++++++++++---------- views/EN/mailinglists.pug | 22 ++++++++++++---------- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/views/DE/mailinglists.pug b/views/DE/mailinglists.pug index d421b2b8..5b01de19 100644 --- a/views/DE/mailinglists.pug +++ b/views/DE/mailinglists.pug @@ -34,16 +34,18 @@ html(lang="de") div(class="flex-container" style="align-items:flex-start") div(class="table") table(border="0" id="Projektliste") - tr - th Name - th Link - th zugeh. Projekt - for item in mailinglists - if item.projectstatus == '1' - tr - td #{item.name} - td #{item.src} - td #{item.project_title} + thead + tr + th Name + th Link + th zugeh. Projekt + tbody + for item in mailinglists + if item.projectstatus == '1' + tr + td #{item.name} + td #{item.src} + td #{item.project_title}
div() h5(align="left") Eintragung in Mailingliste diff --git a/views/EN/mailinglists.pug b/views/EN/mailinglists.pug index d421b2b8..5b01de19 100644 --- a/views/EN/mailinglists.pug +++ b/views/EN/mailinglists.pug @@ -34,16 +34,18 @@ html(lang="de") div(class="flex-container" style="align-items:flex-start") div(class="table") table(border="0" id="Projektliste") - tr - th Name - th Link - th zugeh. Projekt - for item in mailinglists - if item.projectstatus == '1' - tr - td #{item.name} - td #{item.src} - td #{item.project_title} + thead + tr + th Name + th Link + th zugeh. Projekt + tbody + for item in mailinglists + if item.projectstatus == '1' + tr + td #{item.name} + td #{item.src} + td #{item.project_title}
div() h5(align="left") Eintragung in Mailingliste -- GitLab From 5b87b1f7b8baca4b6541ab80f82c9391c5e2f719 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Mar 2020 13:55:33 +0100 Subject: [PATCH 112/161] mailinglist layout adapted to project lsit layout --- views/DE/mailinglists.pug | 1 - views/EN/mailinglists.pug | 1 - 2 files changed, 2 deletions(-) diff --git a/views/DE/mailinglists.pug b/views/DE/mailinglists.pug index 5b01de19..adf3b122 100644 --- a/views/DE/mailinglists.pug +++ b/views/DE/mailinglists.pug @@ -4,7 +4,6 @@ html(lang="de") meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/custom/login.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") style. .collapse { diff --git a/views/EN/mailinglists.pug b/views/EN/mailinglists.pug index 5b01de19..adf3b122 100644 --- a/views/EN/mailinglists.pug +++ b/views/EN/mailinglists.pug @@ -4,7 +4,6 @@ html(lang="de") meta(charset="UTF-8") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") - link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/custom/login.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") style. .collapse { -- GitLab From b36d71ed8b22a873a45f9207b55130b8be3c915f Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Mar 2020 13:56:56 +0100 Subject: [PATCH 113/161] mailinglist layout adapted to project lsit layout --- views/DE/mailinglists.pug | 2 +- views/EN/mailinglists.pug | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/views/DE/mailinglists.pug b/views/DE/mailinglists.pug index adf3b122..f558df18 100644 --- a/views/DE/mailinglists.pug +++ b/views/DE/mailinglists.pug @@ -32,7 +32,7 @@ html(lang="de") h5(align="left") Aktive Mailinglisten div(class="flex-container" style="align-items:flex-start") div(class="table") - table(border="0" id="Projektliste") + table(border="0" id="listtable" class="table table-striped") thead tr th Name diff --git a/views/EN/mailinglists.pug b/views/EN/mailinglists.pug index adf3b122..f558df18 100644 --- a/views/EN/mailinglists.pug +++ b/views/EN/mailinglists.pug @@ -32,7 +32,7 @@ html(lang="de") h5(align="left") Aktive Mailinglisten div(class="flex-container" style="align-items:flex-start") div(class="table") - table(border="0" id="Projektliste") + table(border="0" id="listtable" class="table table-striped") thead tr th Name -- GitLab From 5c09471ee4f928dccd9e2e2868b0b91997dc362e Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Mar 2020 13:58:29 +0100 Subject: [PATCH 114/161] mailinglist typo projectoverview link --- views/DE/mailinglists.pug | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/DE/mailinglists.pug b/views/DE/mailinglists.pug index f558df18..677d0f32 100644 --- a/views/DE/mailinglists.pug +++ b/views/DE/mailinglists.pug @@ -44,7 +44,7 @@ html(lang="de") tr td #{item.name} td #{item.src} - td #{item.project_title} + td #{item.project_title}
div() h5(align="left") Eintragung in Mailingliste -- GitLab From fc8084407dd363f3a48ba65f128268d8d9f0d885 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Mar 2020 13:58:44 +0100 Subject: [PATCH 115/161] mailinglist typo projectoverview link --- views/EN/mailinglists.pug | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/EN/mailinglists.pug b/views/EN/mailinglists.pug index f558df18..677d0f32 100644 --- a/views/EN/mailinglists.pug +++ b/views/EN/mailinglists.pug @@ -44,7 +44,7 @@ html(lang="de") tr td #{item.name} td #{item.src} - td #{item.project_title} + td #{item.project_title}
div() h5(align="left") Eintragung in Mailingliste -- GitLab From 5e20b29aa04a69e3087c212c9d091ef2eef39c81 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Fri, 6 Mar 2020 14:00:31 +0100 Subject: [PATCH 116/161] separate router for account and project --- app.js | 21 +-- routes/{routes.js => routes-account.js} | 173 +++--------------------- routes/routes-project.js | 118 ++++++++++++++++ 3 files changed, 152 insertions(+), 160 deletions(-) rename routes/{routes.js => routes-account.js} (79%) create mode 100644 routes/routes-project.js diff --git a/app.js b/app.js index bcbbfbfe..debd5c36 100644 --- a/app.js +++ b/app.js @@ -9,6 +9,10 @@ const session = require('express-session'); const errorhandler = require('errorhandler'); const flash = require('express-flash'); const i18n = require('i18n'); // internationalization +i18n.configure({ + locales:['de', 'en'], + directory: './locales' +}); var env = process.env.NODE_ENV || 'development'; const config = require('./config/config')[env]; @@ -24,6 +28,12 @@ app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: false})); app.use(express.static(path.join(__dirname, 'public'))); +app.use(i18n.init); +app.use((req, res, next) => { + res.setLocale('de'); + next(); +}); + app.use(session( { resave: true, @@ -48,14 +58,9 @@ app.use(function(req, res, next) { next(); }); -// internationalization (i18n) -i18n.configure({ - locales:['de', 'en'], - directory: './locales' -}); -app.use(i18n.init); - -require('./routes/routes')(app, config, passport, i18n); +//require('./routes/routes')(app, config, passport, i18n); +require('./routes/routes-account')(app, config, passport, i18n); +require('./routes/routes-project')(app, config, passport); //require('./routes/dbconn')(app, config); require('./routes/api')(app, config, passport); diff --git a/routes/routes.js b/routes/routes-account.js similarity index 79% rename from routes/routes.js rename to routes/routes-account.js index 4a757553..47437253 100644 --- a/routes/routes.js +++ b/routes/routes-account.js @@ -9,7 +9,7 @@ const salt = 64; // salt length // forgot pwd const async = require('async') const crypto = require('crypto') -const nodemailer = require('nodemailer') +const mailer = require('./mailer') module.exports = function (app, config, passport, i18n) { @@ -74,28 +74,17 @@ module.exports = function (app, config, passport, i18n) { res.status(200).send(spMetadata); } ); - - // ======== NODEMAILER ==================== - var smtpTransport = nodemailer.createTransport({ - host: config.mailer.host, - secureConnection: config.mailer.secureConnection, - port: config.mailer.port, - auth: { - user: config.mailer.authUser, - pass: config.mailer.authPass - }, - tls: { - ciphers: config.mailer.tlsCiphers - } + + // ================ test i18n ================== + i18n.setLocale('de'); + app.get('/de', function(req, res) { + var greeting = i18n.__('Hello World') + res.send(greeting) }); - var mailOptions = { - to: "", - from: config.mailer.from, - subject: "", - text: "" - }; + var lang = 'DE' + // ======== APP ROUTES - ACCOUNT ==================== var updatePasswordMailSubject = "Ihr Passwort für das Transferportal wurde gespeichert." var mailSignature = "Mit den besten Grüßen,\ndas Transferportal-Team der HFT Stuttgart\n\n"+ "Transferportal der Hochschule für Technik Stuttgart\n"+ @@ -104,17 +93,7 @@ module.exports = function (app, config, passport, i18n) { "m4lab@hft-stuttgart.de\n"+ "https://transfer.hft-stuttgart.de" var updatePasswordMailContent = "Lieber Nutzer,\n\n"+"Ihr Passwort wurde erfolgreich geändert.\n\n"+mailSignature - - // ================ test i18n ================== - i18n.setLocale('de'); - app.get('/de', function(req, res) { - var greeting = i18n.__('Hello World') - res.send(greeting) - }); - - var lang = 'DE' - // ======== APP ROUTES - ACCOUNT ==================== app.get('/', function (req, res) { if (req.isAuthenticated()) { methods.getUserByEmail(req.user.email, function(data, err){ @@ -334,11 +313,11 @@ module.exports = function (app, config, passport, i18n) { else { //req.flash('success', "Pasword updated!") req.flash('success', "Passwort aktualisiert!") - mailOptions.to = req.user.email + mailer.options.to = req.user.email //mailOptions.subject = "Your M4_LAB Password has been updated." - mailOptions.subject = updatePasswordMailSubject - mailOptions.text = updatePasswordMailContent - smtpTransport.sendMail(mailOptions, function(err) { + mailer.options.subject = updatePasswordMailSubject + mailer.options.text = updatePasswordMailContent + mailer.transport.sendMail(mailer.options, function(err) { if (err) { console.log(err) } @@ -410,10 +389,10 @@ module.exports = function (app, config, passport, i18n) { }); // send email - mailOptions.to = emailAddress; - mailOptions.subject = emailSubject; - mailOptions.text = emailContent; - smtpTransport.sendMail(mailOptions, function(err) { + mailer.options.to = emailAddress; + mailer.options.subject = emailSubject; + mailer.options.text = emailContent; + mailer.transport.sendMail(mailer.options, function(err) { done(err, 'done'); }); } @@ -473,10 +452,10 @@ module.exports = function (app, config, passport, i18n) { //req.flash('success', "Your pasword has been updated.") req.flash('success', "Passwort aktualisiert!") // send notifiaction email - mailOptions.to = user.email - mailOptions.subject = updatePasswordMailSubject - mailOptions.text = updatePasswordMailContent - smtpTransport.sendMail(mailOptions, function(err) { + mailer.options.to = user.email + mailer.options.subject = updatePasswordMailSubject + mailer.options.text = updatePasswordMailContent + mailer.transport.sendMail(mailer.options, function(err) { if (err) { console.log(err) } @@ -555,115 +534,5 @@ module.exports = function (app, config, passport, i18n) { } }) }) - - // ======== APP ROUTES - PROJECT ==================== - app.get('/project', function (req, res) { - async.waterfall([ - // get all projects from projectdb - function(done) { - methods.getAllProjects(function(projectsOverview, err) { - if (!err) { - done(err, projectsOverview) - } - }) - }, - // create JSON object for front-end - function(projectsOverview, done) { - var activeProjects = [] - var nonActiveProjects = [] - - for (var i = 0; i < projectsOverview.length; i++) { - var project = { - id: projectsOverview[i].id, - logo: projectsOverview[i].logo, - akronym: projectsOverview[i].pname, - title: projectsOverview[i].title, - summary: projectsOverview[i].onelinesummary, - category: projectsOverview[i].category, - cp: projectsOverview[i].contact_email, - gitlab: projectsOverview[i].gitlab - } - if (projectsOverview[i].projectstatus == 0) { - nonActiveProjects.push(project) - } - else if (projectsOverview[i].projectstatus == 1) { - activeProjects.push(project) - } - } - - // render the page - if (req.isAuthenticated()) { - res.render(lang+'/project/projects', { - isUserAuthenticated: true, - nonActive: nonActiveProjects, - active: activeProjects - }); - } - else { - res.render(lang+'/project/projects', { - isUserAuthenticated: false, - nonActive: nonActiveProjects, - active: activeProjects - }); - } - } - ]) - }) - - app.get('/addprojectoverview', function (req, res) { - if (req.isAuthenticated()) { - res.render(lang+'/project/addProjectOverview') - } - else { - res.redirect('/login') - } - }) - - app.post('/addprojectoverview', function (req, res) { - if (req.isAuthenticated()) { - var wiki = 0 - if (req.body.wiki) - wiki = 1 - - var projectOverviewData = { - pname: req.body.pname, - title: req.body.title, - onelinesummary: req.body.summary, - category: req.body.category, - logo: req.body.logo, - gitlab: req.body.gitlabURL, - wiki: wiki, - overview: req.body.overview, - question: req.body.question, - approach: req.body.approach, - result: req.body.result, - keywords: req.body.keywords, - announcement: req.body.announcement, - term: req.body.term, - further_details: req.body.furtherDetails, - website: req.body.website, - src: req.body.src, - caption: req.body.caption, - contact_firstname: req.body.contactFirstname, - contact_lastname: req.body.contactLastname, - contact_email: req.body.contactEmail, - leader_firstname: req.body.leaderFirstname, - leader_lastname: req.body.leaderLastname, - leader_email: req.body.leaderEmail - } - - methods.addProjectOverview(projectOverviewData, function(err){ - if (err) { - //req.flash('error', "Failed") - req.flash('error', "Fehlgeschlagen") - res.redirect('/addProjectOverview'); - } - else { - req.flash('success', 'Your project has been created.') - res.redirect('/project'); - } - }) - } - }) }; \ No newline at end of file diff --git a/routes/routes-project.js b/routes/routes-project.js new file mode 100644 index 00000000..596dd0a3 --- /dev/null +++ b/routes/routes-project.js @@ -0,0 +1,118 @@ +const methods = require('./methods') +const async = require('async') + +module.exports = function (app) { + + // ======== APP ROUTES - PROJECT ==================== + var lang = 'DE' + + app.get('/project', function (req, res) { + async.waterfall([ + // get all projects from projectdb + function(done) { + methods.getAllProjects(function(projectsOverview, err) { + if (!err) { + done(err, projectsOverview) + } + }) + }, + // create JSON object for front-end + function(projectsOverview, done) { + var activeProjects = [] + var nonActiveProjects = [] + + for (var i = 0; i < projectsOverview.length; i++) { + var project = { + id: projectsOverview[i].id, + logo: projectsOverview[i].logo, + akronym: projectsOverview[i].pname, + title: projectsOverview[i].title, + summary: projectsOverview[i].onelinesummary, + category: projectsOverview[i].category, + cp: projectsOverview[i].contact_email, + gitlab: projectsOverview[i].gitlab + } + if (projectsOverview[i].projectstatus == 0) { + nonActiveProjects.push(project) + } + else if (projectsOverview[i].projectstatus == 1) { + activeProjects.push(project) + } + } + + // render the page + if (req.isAuthenticated()) { + res.render(lang+'/project/projects', { + isUserAuthenticated: true, + nonActive: nonActiveProjects, + active: activeProjects + }); + } + else { + res.render(lang+'/project/projects', { + isUserAuthenticated: false, + nonActive: nonActiveProjects, + active: activeProjects + }); + } + } + ]) + }) + + app.get('/addprojectoverview', function (req, res) { + if (req.isAuthenticated()) { + res.render(lang+'/project/addProjectOverview') + } + else { + res.redirect('/login') + } + }) + + app.post('/addprojectoverview', function (req, res) { + if (req.isAuthenticated()) { + var wiki = 0 + if (req.body.wiki) + wiki = 1 + + var projectOverviewData = { + pname: req.body.pname, + title: req.body.title, + onelinesummary: req.body.summary, + category: req.body.category, + logo: req.body.logo, + gitlab: req.body.gitlabURL, + wiki: wiki, + overview: req.body.overview, + question: req.body.question, + approach: req.body.approach, + result: req.body.result, + keywords: req.body.keywords, + announcement: req.body.announcement, + term: req.body.term, + further_details: req.body.furtherDetails, + website: req.body.website, + src: req.body.src, + caption: req.body.caption, + contact_firstname: req.body.contactFirstname, + contact_lastname: req.body.contactLastname, + contact_email: req.body.contactEmail, + leader_firstname: req.body.leaderFirstname, + leader_lastname: req.body.leaderLastname, + leader_email: req.body.leaderEmail + } + + methods.addProjectOverview(projectOverviewData, function(err){ + if (err) { + //req.flash('error', "Failed") + req.flash('error', "Fehlgeschlagen") + res.redirect('/addProjectOverview'); + } + else { + req.flash('success', 'Your project has been created.') + res.redirect('/project'); + } + }) + } + }) + +}; \ No newline at end of file -- GitLab From 3dbc8d040d0e45a7935e7f7447a0bfa7855fd161 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Fri, 6 Mar 2020 14:01:24 +0100 Subject: [PATCH 117/161] separate nodemailer initialization --- routes/mailer.js | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 routes/mailer.js diff --git a/routes/mailer.js b/routes/mailer.js new file mode 100644 index 00000000..510b5bb1 --- /dev/null +++ b/routes/mailer.js @@ -0,0 +1,31 @@ +const nodemailer = require('nodemailer') + +var env = process.env.NODE_ENV || 'development'; +const config = require('../config/config')[env] + +var smtpTransport = nodemailer.createTransport({ + host: config.mailer.host, + secureConnection: config.mailer.secureConnection, + port: config.mailer.port, + auth: { + user: config.mailer.authUser, + pass: config.mailer.authPass + }, + tls: { + ciphers: config.mailer.tlsCiphers + } +}); + +var mailOptions = { + to: "", + from: config.mailer.from, + subject: "", + text: "" +}; + +var mailer = { + transport: smtpTransport, + options: mailOptions +} + +module.exports = mailer \ No newline at end of file -- GitLab From 6028cfdb9a349a15819e969a5219310a96ff6668 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Fri, 6 Mar 2020 14:38:39 +0100 Subject: [PATCH 118/161] merge with testing --- routes/routes-project.js | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/routes/routes-project.js b/routes/routes-project.js index 596dd0a3..a37be3a8 100644 --- a/routes/routes-project.js +++ b/routes/routes-project.js @@ -6,6 +6,38 @@ module.exports = function (app) { // ======== APP ROUTES - PROJECT ==================== var lang = 'DE' + app.get('/mailinglists', function (req, res) { + async.waterfall([ + function(done) { + methods.getAllMailinglists(function(mailinglistOverview, err) { + if (!err) { + done(err, mailinglistOverview) + } + }) + }, + // create JSON object of mailinglists for front-end + function(mailinglistOverview, done) { + var allMailingLists = [] // JSON object + for (let i = 0; i < mailinglistOverview.length; i++) { + // add data to JSON object + allMailingLists.push({ + id: mailinglistOverview[i].id, + name: mailinglistOverview[i].name, + src: mailinglistOverview[i].src, + projectstatus: mailinglistOverview[i].projectstatus, + project_title: mailinglistOverview[i].project_title + }); + } + + res.render(lang+'/project/mailinglists', { + isUserAuthenticated: req.isAuthenticated(), + user: req.user, + mailinglists: allMailingLists + }); + } + ]) + }); + app.get('/project', function (req, res) { async.waterfall([ // get all projects from projectdb -- GitLab From fb991a715f0fddf576ffd2a93ac5b7db93822760 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Fri, 6 Mar 2020 14:43:02 +0100 Subject: [PATCH 119/161] minor updates --- views/DE/account/home.pug | 6 +- views/DE/account/profile.pug | 4 +- views/DE/account/security.pug | 4 +- views/DE/account/services.pug | 4 +- views/DE/{ => project}/mailinglists.pug | 0 views/EN/{ => account}/forgotPwd.pug | 0 views/EN/{ => account}/home.pug | 8 +- views/EN/{ => account}/profile.pug | 4 +- views/EN/{ => account}/registration.pug | 0 views/EN/{ => account}/reset.pug | 0 views/EN/{ => account}/security.pug | 4 +- views/EN/{ => account}/services.pug | 4 +- views/EN/project/addProjectOverview.pug | 115 +++++++++++++++++++++++ views/EN/{ => project}/mailinglists.pug | 2 +- views/EN/project/projects.pug | 117 ++++++++++++++++++++++++ 15 files changed, 252 insertions(+), 20 deletions(-) rename views/DE/{ => project}/mailinglists.pug (100%) rename views/EN/{ => account}/forgotPwd.pug (100%) rename views/EN/{ => account}/home.pug (84%) rename views/EN/{ => account}/profile.pug (96%) rename views/EN/{ => account}/registration.pug (100%) rename views/EN/{ => account}/reset.pug (100%) rename views/EN/{ => account}/security.pug (96%) rename views/EN/{ => account}/services.pug (94%) create mode 100644 views/EN/project/addProjectOverview.pug rename views/EN/{ => project}/mailinglists.pug (99%) create mode 100644 views/EN/project/projects.pug diff --git a/views/DE/account/home.pug b/views/DE/account/home.pug index f08d9ee7..58b2427c 100644 --- a/views/DE/account/home.pug +++ b/views/DE/account/home.pug @@ -34,9 +34,9 @@ html(lang="de") h5 span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") p content goes here diff --git a/views/DE/account/profile.pug b/views/DE/account/profile.pug index e4d7e260..32a2aff1 100644 --- a/views/DE/account/profile.pug +++ b/views/DE/account/profile.pug @@ -35,8 +35,8 @@ html(lang="de") span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") a(class="nav-link" href="#" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes for success in successes diff --git a/views/DE/account/security.pug b/views/DE/account/security.pug index 6db09112..560d32bc 100644 --- a/views/DE/account/security.pug +++ b/views/DE/account/security.pug @@ -37,9 +37,9 @@ html(lang="de") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil a(class="nav-link" href="#" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes for success in successes diff --git a/views/DE/account/services.pug b/views/DE/account/services.pug index 6ab101f3..55f5a1b6 100644 --- a/views/DE/account/services.pug +++ b/views/DE/account/services.pug @@ -34,8 +34,8 @@ html(lang="de") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen a(class="nav-link" href="#" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes diff --git a/views/DE/mailinglists.pug b/views/DE/project/mailinglists.pug similarity index 100% rename from views/DE/mailinglists.pug rename to views/DE/project/mailinglists.pug diff --git a/views/EN/forgotPwd.pug b/views/EN/account/forgotPwd.pug similarity index 100% rename from views/EN/forgotPwd.pug rename to views/EN/account/forgotPwd.pug diff --git a/views/EN/home.pug b/views/EN/account/home.pug similarity index 84% rename from views/EN/home.pug rename to views/EN/account/home.pug index 050c1bf9..d2f3875a 100644 --- a/views/EN/home.pug +++ b/views/EN/account/home.pug @@ -32,11 +32,11 @@ html(lang="en") div(class="row") div(class="col-3") h5 - span #{greeting} + span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="#" aria-selected="true") #{i18n.__(Profile)} - a(class="nav-link" href="/account/security" aria-selected="false") Security - a(class="nav-link" href="/account/services" aria-selected="false") Services + a(class="nav-link" href="/profile" aria-selected="true") Profile + a(class="nav-link" href="/security" aria-selected="false") Security + a(class="nav-link" href="/services" aria-selected="false") Services div(class="col-sm-9") p content goes here diff --git a/views/EN/profile.pug b/views/EN/account/profile.pug similarity index 96% rename from views/EN/profile.pug rename to views/EN/account/profile.pug index d6edd221..47c1f7e8 100644 --- a/views/EN/profile.pug +++ b/views/EN/account/profile.pug @@ -35,8 +35,8 @@ html(lang="en") span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") a(class="nav-link" href="#" aria-selected="true") Profile - a(class="nav-link" href="/account/security" aria-selected="false") Security - a(class="nav-link" href="/account/services" aria-selected="false") Services + a(class="nav-link" href="/security" aria-selected="false") Security + a(class="nav-link" href="/services" aria-selected="false") Services div(class="col-sm-9") if successes for success in successes diff --git a/views/EN/registration.pug b/views/EN/account/registration.pug similarity index 100% rename from views/EN/registration.pug rename to views/EN/account/registration.pug diff --git a/views/EN/reset.pug b/views/EN/account/reset.pug similarity index 100% rename from views/EN/reset.pug rename to views/EN/account/reset.pug diff --git a/views/EN/security.pug b/views/EN/account/security.pug similarity index 96% rename from views/EN/security.pug rename to views/EN/account/security.pug index cbe435cd..2a5c248c 100644 --- a/views/EN/security.pug +++ b/views/EN/account/security.pug @@ -37,9 +37,9 @@ html(lang="en") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/account/profile" aria-selected="true") Profile + a(class="nav-link" href="/profile" aria-selected="true") Profile a(class="nav-link" href="#" aria-selected="false") Security - a(class="nav-link" href="/account/services" aria-selected="false") Services + a(class="nav-link" href="/services" aria-selected="false") Services div(class="col-sm-9") if successes for success in successes diff --git a/views/EN/services.pug b/views/EN/account/services.pug similarity index 94% rename from views/EN/services.pug rename to views/EN/account/services.pug index a62efed6..f095144b 100644 --- a/views/EN/services.pug +++ b/views/EN/account/services.pug @@ -34,8 +34,8 @@ html(lang="en") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/account/profile" aria-selected="true") Profile - a(class="nav-link" href="/account/security" aria-selected="false") Security + a(class="nav-link" href="/profile" aria-selected="true") Profile + a(class="nav-link" href="/security" aria-selected="false") Security a(class="nav-link" href="#" aria-selected="false") Services div(class="col-sm-9") if successes diff --git a/views/EN/project/addProjectOverview.pug b/views/EN/project/addProjectOverview.pug new file mode 100644 index 00000000..7b40b54f --- /dev/null +++ b/views/EN/project/addProjectOverview.pug @@ -0,0 +1,115 @@ +doctype html +html(lang="de") + head + title= "Add Project Overview" + meta(charset="UTF-8") + meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") + style. + .collapse { + display: none; + } + .collapse.in { + display: block; + } + .collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height,visibility; + -o-transition-property: height,visibility; + transition-property: height,visibility; + } + .warning { + color: red; + font-size: 11px; + } + body + div(class="container-fluid") + div(class="row") + div(class="col-md-6 offset-md-2") + h4(class="mb-3 font-weight-bold") Neues Projekt + div(class="col-md-6 offset-md-3") + if errors + for error, i in errors + div.alert.alert-danger.alert-dismissible.fade.show #{ error } + a(class="close", href="#", data-dismiss="alert", aria-label="close") × + form(method="POST") + div(class='form-row') + div(class='form-group col-md-12') + input#inputPname(name="pname" class="form-control" type="text" placeholder="human-readable short project name*" required) + div(class="form-group col-md-12") + input#inputTitle(name="title" class="form-control" type="text" placeholder="official title of the project*" required) + div(class="form-group col-md-12") + input#inputSummary(name="summary" class="form-control" type="text" placeholder="one line summary of the project") + div(class="form-group col-md-12") + input#inputCategory(name="category" class="form-control" type="text" placeholder="category of the project") + div(class="form-group col-md-12") + input#inputLogo(name="logo" class="form-control" type="text" placeholder="official logo of the project") + div(class="form-group col-md-12") + div(class="input-group mb-3") + input#inputGitlabURL(name="gitlabURL" type="text" class="form-control" placeholder="M4_LAB GitLab Project URL, z.B. https://transfer.hft-stuttgart.de/gitlab/username/projectname") + div(class="input-group-prepend") + div(class="input-group-text") + input#inputWiki(name="wiki" type="checkbox") + |   Wiki + + h5(class="mb-3 font-weight-bold") Content + div(class='form-row') + div(class='form-group col-md-12') + textarea#inputOverview(name="overview" class="form-control" type="text" rows="5" placeholder="overview") + div(class="form-group col-md-12") + textarea#inputQuestion(name="question" class="form-control" type="text" rows="5" placeholder="question") + div(class='form-group col-md-12') + textarea#inputApproach(name="approach" class="form-control" type="text" rows="5" placeholder="approach") + div(class="form-group col-md-12") + textarea#inputResult(name="result" class="form-control" type="text" rows="5" placeholder="result") + div(class="form-group col-md-12") + input#inputKeywords(name="keywords" class="form-control" type="text" placeholder="keywords") + h5(class="mb-3 font-weight-bold") Info + div(class='form-row') + div(class='form-group col-md-12') + textarea#inputAnnouncement(name="announcement" class="form-control" type="text" rows="5" placeholder="Ausschreibung") + div(class="form-group col-md-12") + input#inputTerm(name="term" class="form-control" type="text" placeholder="Laufzeit") + div(class='form-group col-md-12') + textarea#inputFurtherDetails(name="furtherDetails" class="form-control" type="text" rows="5" placeholder="Mehr informationen") + div(class="form-group col-md-12") + input#inputWebsite(name="website" class="form-control" type="text" placeholder="website") + h5(class="mb-3 font-weight-bold") Images + div(class='form-row') + div(class="form-group col-md-12") + input#inputSrc(name="src" class="form-control" type="text" placeholder="link to the image source") + div(class="form-group col-md-12") + input#inputCaption(name="caption" class="form-control" type="text" placeholder="caption of the image") + h5(class="mb-3 font-weight-bold") Contact + div(class='form-row') + div(class="form-group col-md-4") + input#inputContactFirstname(name="contactFirstname" class="form-control" type="text" placeholder="contact firstname") + div(class="form-group col-md-4") + input#inputContactLastname(name="contactLastname" class="form-control" type="text" placeholder="contact lastname") + div(class="form-group col-md-4") + input#inputContactEmail(name="contactEmail" class="form-control" type="email" placeholder="contact email") + div(class="form-group col-md-4") + input#inputLeaderFirstname(name="leaderFirstname" class="form-control" type="text" placeholder="leader firstname") + div(class="form-group col-md-4") + input#inputLeaderLastname(name="leaderLastname" class="form-control" type="text" placeholder="leader lastname") + div(class="form-group col-md-4") + input#inputLeaderEmail(name="leaderEmail" class="form-control" type="email" placeholder="leader email") + p * Pflichtfeld + input#submitBtn(type="submit", class="btn btn-outline-dark btn-block", value="Projekt Anlegen") + + // jQuery + script(src="https://code.jquery.com/jquery-3.3.1.min.js") + script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") + // Bootstrap + script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") + // Header + script(src="/js/headfootLogout.js") \ No newline at end of file diff --git a/views/EN/mailinglists.pug b/views/EN/project/mailinglists.pug similarity index 99% rename from views/EN/mailinglists.pug rename to views/EN/project/mailinglists.pug index 677d0f32..f2ddbd8b 100644 --- a/views/EN/mailinglists.pug +++ b/views/EN/project/mailinglists.pug @@ -1,4 +1,4 @@ -html(lang="de") +html(lang="en") head title= "Mailinglisten" meta(charset="UTF-8") diff --git a/views/EN/project/projects.pug b/views/EN/project/projects.pug new file mode 100644 index 00000000..56f65c10 --- /dev/null +++ b/views/EN/project/projects.pug @@ -0,0 +1,117 @@ +doctype html +html(lang="de") + head + title= "Project List" + meta(charset="UTF-8") + meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") + style. + .collapse { + display: none; + } + .collapse.in { + display: block; + } + .collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height,visibility; + -o-transition-property: height,visibility; + transition-property: height,visibility; + } + .warning { + color: red; + font-size: 11px; + } + body + div(class="container-fluid") + if isUserAuthenticated + p Auf dieser Seite sehen Sie die Liste der über dieses Portal veröffentlichten Projekte. + a(href="/addprojectoverview" class="btn btn-primary" role="button" aria-pressed="true") Projekt anlegen + else + p Auf dieser Seite sehen Sie die Liste der über dieses Portal veröffentlichten Projekte. + p Möchten Sie ein neues Projekt anlegen, dann klicken Sie bitte auf #[a(href="/addprojectoverview") Anmelden und Projekt anlegen] + if successes + for success in successes + div.alert.alert-success.alert-dismissible #{ success } + a(class="close", href="#", data-dismiss="alert", aria-label="close") × + // Active projects + h3(class="mb-3 font-weight-bold") Aktive Projekte + table(class="table table-striped") + thead + tr + th Logo + th Akronym + th Title + th Kernziel + th Kategorie + th Ansprechpartner + th Projektinhalte + tbody + for item in active + tr + //td #{item.status} + td + img(src=item.logo, width="40", height="40") + td #{item.akronym} + td #{item.title} + td #{item.summary} + td #{item.category} + td #[a(class="nav-link", href="mailto:"+ item.cp) #{item.cp}] + td #[a(class="nav-link", href="https://m4lab.hft-stuttgart.de/projectoverview?projectID="+item.id) Zur Projektübersicht] + if item.gitlab + a(class="nav-link", href=item.gitlab+"/tree/master") Projektdateien + a(class="nav-link", href=item.gitlab+"/wikis/home") Projektwiki + else + a(class="nav-link", href="#") Projektdateien + a(class="nav-link", href="#") Projektwiki + br + // Non-active projects + h3(class="mb-3 font-weight-bold") Abgeschlossene Projekte + table(class="table table-striped") + thead + tr + th Logo + th Akronym + th Title + th Kernziel + th Kategorie + th Ansprechpartner + th Projektinhalte + tbody + for item in nonActive + tr + //td #{item.status} + td + img(src=item.logo, width="40", height="40") + td #{item.akronym} + td #{item.title} + td #{item.summary} + td #{item.category} + td #[a(class="nav-link", href="mailto:"+ item.cp) #{item.cp}] + td #[a(class="nav-link", href="https://m4lab.hft-stuttgart.de/projectoverview?projectID="+item.id) Zur Projektübersicht] + if item.gitlab + a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/tree/master") Projektdateien + a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/wikis/home") Projektwiki + else + a(class="nav-link", href="#") Projektdateien + a(class="nav-link", href="#") Projektwiki + + // jQuery + script(src="https://code.jquery.com/jquery-3.3.1.min.js") + script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") + // Bootstrap + script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") + // Header + if isUserAuthenticated + script(src="/js/headfootLogout.js") + else + script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file -- GitLab From 9bf3992d5f25fba5df0c162f1d3778b145f76198 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Mar 2020 15:10:59 +0100 Subject: [PATCH 120/161] changes password reset link --- routes/routes.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/routes/routes.js b/routes/routes.js index 8ebebc6b..febd0ccc 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -393,8 +393,8 @@ module.exports = function (app, config, passport, i18n) { "Thanks,\nM4_LAB Team" */ var emailContent = "Lieber Nutzer,\n\n"+ "wir haben Ihre Anfrage zur Erneuerung Ihres Passwortes erhalten. Falls Sie diese Anfrage nicht gesendet haben, ignorieren Sie bitte diese E-Mail.\n\n"+ - //"Sie können Ihr Passwort mit dem Klick auf diesen Link ändern: http://m4lab.hft-stuttgart.de/account/reset/" + token + "\n" + // test server - "Sie können Ihr Passwort mit dem Klick auf diesen Link ändern: http://localhost:9989/reset/" + token + "\n" + // localhost + "Sie können Ihr Passwort mit dem Klick auf diesen Link ändern: http://m4lab.hft-stuttgart.de/account/reset/" + token + "\n" + // test server + //"Sie können Ihr Passwort mit dem Klick auf diesen Link ändern: http://localhost:9989/reset/" + token + "\n" + // localhost "Dieser Link ist aus Sicherheitsgründen nur für 1 Stunde gültig.\n\n"+mailSignature var credentialData = { -- GitLab From 0cfb2befdd86a8132bb55aac1fe4a7cafa4926f0 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Thu, 12 Mar 2020 14:26:55 +0100 Subject: [PATCH 121/161] link registration page login to account --- views/DE/account/registration.pug | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/DE/account/registration.pug b/views/DE/account/registration.pug index ab1c7e5a..077e4138 100644 --- a/views/DE/account/registration.pug +++ b/views/DE/account/registration.pug @@ -82,7 +82,7 @@ html(lang="de") p * Pflichtfeld input#submitBtn(type="submit", class="btn btn-outline-dark btn-block", value="Senden" disabled) br - p(class="text-center") Sie haben bereits ein Benutzerkonto? Melden Sie sich hier an. + p(class="text-center") Sie haben bereits ein Benutzerkonto? Melden Sie sich hier an. // jQuery -- GitLab From 948a3d3569d4f69ac8bcae79b6f3520542dbb247 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Thu, 12 Mar 2020 17:28:38 +0100 Subject: [PATCH 122/161] add jQuery Datepicker DE --- public/js/jquery-ui/i18n/datepicker-de.js | 37 +++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 public/js/jquery-ui/i18n/datepicker-de.js diff --git a/public/js/jquery-ui/i18n/datepicker-de.js b/public/js/jquery-ui/i18n/datepicker-de.js new file mode 100644 index 00000000..e2e61d27 --- /dev/null +++ b/public/js/jquery-ui/i18n/datepicker-de.js @@ -0,0 +1,37 @@ +/* German initialisation for the jQuery UI date picker plugin. */ +/* Written by Milian Wolff (mail@milianw.de). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.de = { + closeText: "Schließen", + prevText: "<Zurück", + nextText: "Vor>", + currentText: "Heute", + monthNames: [ "Januar","Februar","März","April","Mai","Juni", + "Juli","August","September","Oktober","November","Dezember" ], + monthNamesShort: [ "Jan","Feb","Mär","Apr","Mai","Jun", + "Jul","Aug","Sep","Okt","Nov","Dez" ], + dayNames: [ "Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag" ], + dayNamesShort: [ "So","Mo","Di","Mi","Do","Fr","Sa" ], + dayNamesMin: [ "So","Mo","Di","Mi","Do","Fr","Sa" ], + weekHeader: "KW", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.de ); + +return datepicker.regional.de; + +} ) ); \ No newline at end of file -- GitLab From 3305a23c9608b9824a6fc14c2b278a4ae02d4591 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Thu, 12 Mar 2020 17:31:07 +0100 Subject: [PATCH 123/161] update Contact, Term and Category --- routes/routes-project.js | 17 +++++-- views/DE/project/addProjectOverview.pug | 66 +++++++++++++++++-------- 2 files changed, 58 insertions(+), 25 deletions(-) diff --git a/routes/routes-project.js b/routes/routes-project.js index a37be3a8..6b8ac371 100644 --- a/routes/routes-project.js +++ b/routes/routes-project.js @@ -106,6 +106,7 @@ module.exports = function (app) { if (req.body.wiki) wiki = 1 + var projectTerm = req.body.termForm + " - " + req.body.termTo var projectOverviewData = { pname: req.body.pname, title: req.body.title, @@ -120,16 +121,14 @@ module.exports = function (app) { result: req.body.result, keywords: req.body.keywords, announcement: req.body.announcement, - term: req.body.term, + term: projectTerm, further_details: req.body.furtherDetails, website: req.body.website, src: req.body.src, caption: req.body.caption, - contact_firstname: req.body.contactFirstname, - contact_lastname: req.body.contactLastname, + contact_lastname: req.body.contactName, contact_email: req.body.contactEmail, - leader_firstname: req.body.leaderFirstname, - leader_lastname: req.body.leaderLastname, + leader_lastname: req.body.leaderName, leader_email: req.body.leaderEmail } @@ -146,5 +145,13 @@ module.exports = function (app) { }) } }) + + app.get('/updateprojectoverview', function (req, res) { + // only their own project + }) + + app.post('/updateprojectoverview', function (req, res) { + // only their own project + }) }; \ No newline at end of file diff --git a/views/DE/project/addProjectOverview.pug b/views/DE/project/addProjectOverview.pug index 7b40b54f..1d87def1 100644 --- a/views/DE/project/addProjectOverview.pug +++ b/views/DE/project/addProjectOverview.pug @@ -6,6 +6,8 @@ html(lang="de") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") + // jQuery UI - Datepicker + link(rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css") style. .collapse { display: none; @@ -49,8 +51,15 @@ html(lang="de") input#inputTitle(name="title" class="form-control" type="text" placeholder="official title of the project*" required) div(class="form-group col-md-12") input#inputSummary(name="summary" class="form-control" type="text" placeholder="one line summary of the project") - div(class="form-group col-md-12") + //div(class="form-group col-md-12") input#inputCategory(name="category" class="form-control" type="text" placeholder="category of the project") + div(class='form-group col-md-12') + select#inputCategory(name="category", class="form-control") + option(value="") - select a category - + option(value="Experten-Gruppe") Experten-Gruppe + option(value="Student-Projekt") Student-Projekt + option(value="Lehr Projekt") Lehr Projekt + option(value="Transfer-projekt") Transfer-projekt div(class="form-group col-md-12") input#inputLogo(name="logo" class="form-control" type="text" placeholder="official logo of the project") div(class="form-group col-md-12") @@ -64,13 +73,13 @@ html(lang="de") h5(class="mb-3 font-weight-bold") Content div(class='form-row') div(class='form-group col-md-12') - textarea#inputOverview(name="overview" class="form-control" type="text" rows="5" placeholder="overview") + textarea#inputOverview(name="overview" class="form-control" type="text" rows="5" placeholder="Projektüberblick") div(class="form-group col-md-12") - textarea#inputQuestion(name="question" class="form-control" type="text" rows="5" placeholder="question") + textarea#inputQuestion(name="question" class="form-control" type="text" rows="5" placeholder="Fragestellung") div(class='form-group col-md-12') - textarea#inputApproach(name="approach" class="form-control" type="text" rows="5" placeholder="approach") + textarea#inputApproach(name="approach" class="form-control" type="text" rows="5" placeholder="Vorgehensweise") div(class="form-group col-md-12") - textarea#inputResult(name="result" class="form-control" type="text" rows="5" placeholder="result") + textarea#inputResult(name="result" class="form-control" type="text" rows="5" placeholder="Ergebnis und Nutzung") div(class="form-group col-md-12") input#inputKeywords(name="keywords" class="form-control" type="text" placeholder="keywords") h5(class="mb-3 font-weight-bold") Info @@ -78,7 +87,13 @@ html(lang="de") div(class='form-group col-md-12') textarea#inputAnnouncement(name="announcement" class="form-control" type="text" rows="5" placeholder="Ausschreibung") div(class="form-group col-md-12") - input#inputTerm(name="term" class="form-control" type="text" placeholder="Laufzeit") + div(class='form-row') + div(class="form-group col-md-2") +

Laufzeit

+ div(class="form-group col-md-5") + input#inputTermFrom(name="termForm" class="form-control" type="text" placeholder="von (dd.mm.yyyy)") + div(class="form-group col-md-5") + input#inputTermTo(name="termTo" class="form-control" type="text" placeholder="bis (dd.mm.yyyy)") div(class='form-group col-md-12') textarea#inputFurtherDetails(name="furtherDetails" class="form-control" type="text" rows="5" placeholder="Mehr informationen") div(class="form-group col-md-12") @@ -89,27 +104,38 @@ html(lang="de") input#inputSrc(name="src" class="form-control" type="text" placeholder="link to the image source") div(class="form-group col-md-12") input#inputCaption(name="caption" class="form-control" type="text" placeholder="caption of the image") - h5(class="mb-3 font-weight-bold") Contact + h5(class="mb-3 font-weight-bold") Kontakt div(class='form-row') - div(class="form-group col-md-4") - input#inputContactFirstname(name="contactFirstname" class="form-control" type="text" placeholder="contact firstname") - div(class="form-group col-md-4") - input#inputContactLastname(name="contactLastname" class="form-control" type="text" placeholder="contact lastname") - div(class="form-group col-md-4") - input#inputContactEmail(name="contactEmail" class="form-control" type="email" placeholder="contact email") - div(class="form-group col-md-4") - input#inputLeaderFirstname(name="leaderFirstname" class="form-control" type="text" placeholder="leader firstname") - div(class="form-group col-md-4") - input#inputLeaderLastname(name="leaderLastname" class="form-control" type="text" placeholder="leader lastname") - div(class="form-group col-md-4") - input#inputLeaderEmail(name="leaderEmail" class="form-control" type="email" placeholder="leader email") + div(class="form-group col-md-2") +

Ansprechpartner

+ div(class="form-group col-md-5") + input#inputContactName(name="contactName" class="form-control" type="text" placeholder="Titel/Anrede Vorname Nachname") + div(class="form-group col-md-5") + input#inputContactEmail(name="contactEmail" class="form-control" type="email" placeholder="E-mail Adresse") + div(class="form-group col-md-2") +

Projektleitung

+ div(class="form-group col-md-5") + input#inputLeaderName(name="leaderName" class="form-control" type="text" placeholder="Titel/Anrede Vorname Nachname") + div(class="form-group col-md-5") + input#inputLeaderEmail(name="leaderEmail" class="form-control" type="email" placeholder="E-mail Adresse") p * Pflichtfeld input#submitBtn(type="submit", class="btn btn-outline-dark btn-block", value="Projekt Anlegen") // jQuery script(src="https://code.jquery.com/jquery-3.3.1.min.js") script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") + // jQuery UI - Datepicker + script(src="https://code.jquery.com/ui/1.12.1/jquery-ui.js") + script(src="/js/jquery-ui/i18n/datepicker-de.js") + //script(src="i18n/datepicker-de.js") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // Header - script(src="/js/headfootLogout.js") \ No newline at end of file + script(src="/js/headfootLogout.js") + script. + $( function() { + $.datepicker.setDefaults( $.datepicker.regional["de"] ); + $("#inputTermFrom").datepicker(); + //$("#inputTermTo").datepicker(); + $("#inputTermTo").datepicker( $.datepicker.regional["de"] ); + }); \ No newline at end of file -- GitLab From 9a226bc982023a84ad524874b66722d9166b0a50 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Thu, 12 Mar 2020 17:36:47 +0100 Subject: [PATCH 124/161] small fix --- views/DE/project/addProjectOverview.pug | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/views/DE/project/addProjectOverview.pug b/views/DE/project/addProjectOverview.pug index 1d87def1..87e5d469 100644 --- a/views/DE/project/addProjectOverview.pug +++ b/views/DE/project/addProjectOverview.pug @@ -51,8 +51,6 @@ html(lang="de") input#inputTitle(name="title" class="form-control" type="text" placeholder="official title of the project*" required) div(class="form-group col-md-12") input#inputSummary(name="summary" class="form-control" type="text" placeholder="one line summary of the project") - //div(class="form-group col-md-12") - input#inputCategory(name="category" class="form-control" type="text" placeholder="category of the project") div(class='form-group col-md-12') select#inputCategory(name="category", class="form-control") option(value="") - select a category - @@ -136,6 +134,5 @@ html(lang="de") $( function() { $.datepicker.setDefaults( $.datepicker.regional["de"] ); $("#inputTermFrom").datepicker(); - //$("#inputTermTo").datepicker(); - $("#inputTermTo").datepicker( $.datepicker.regional["de"] ); + $("#inputTermTo").datepicker(); }); \ No newline at end of file -- GitLab From dbb4bd3509b9f95e53ca4f31a1d4e5cafcab72cd Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 13 Mar 2020 09:11:05 +0100 Subject: [PATCH 125/161] merged with devel --- app.js | 21 ++- public/js/jquery-ui/i18n/datepicker-de.js | 37 ++++ routes/mailer.js | 31 ++++ routes/{routes.js => routes-account.js} | 204 +++------------------- routes/routes-project.js | 157 +++++++++++++++++ views/DE/account/home.pug | 6 +- views/DE/account/profile.pug | 4 +- views/DE/account/security.pug | 4 +- views/DE/account/services.pug | 4 +- views/DE/project/addProjectOverview.pug | 65 ++++--- views/DE/{ => project}/mailinglists.pug | 0 views/EN/{ => account}/forgotPwd.pug | 0 views/EN/{ => account}/home.pug | 8 +- views/EN/{ => account}/profile.pug | 4 +- views/EN/{ => account}/registration.pug | 0 views/EN/{ => account}/reset.pug | 0 views/EN/{ => account}/security.pug | 4 +- views/EN/{ => account}/services.pug | 4 +- views/EN/project/addProjectOverview.pug | 115 ++++++++++++ views/EN/{ => project}/mailinglists.pug | 2 +- views/EN/project/projects.pug | 117 +++++++++++++ 21 files changed, 555 insertions(+), 232 deletions(-) create mode 100644 public/js/jquery-ui/i18n/datepicker-de.js create mode 100644 routes/mailer.js rename routes/{routes.js => routes-account.js} (74%) create mode 100644 routes/routes-project.js rename views/DE/{ => project}/mailinglists.pug (100%) rename views/EN/{ => account}/forgotPwd.pug (100%) rename views/EN/{ => account}/home.pug (84%) rename views/EN/{ => account}/profile.pug (96%) rename views/EN/{ => account}/registration.pug (100%) rename views/EN/{ => account}/reset.pug (100%) rename views/EN/{ => account}/security.pug (96%) rename views/EN/{ => account}/services.pug (94%) create mode 100644 views/EN/project/addProjectOverview.pug rename views/EN/{ => project}/mailinglists.pug (99%) create mode 100644 views/EN/project/projects.pug diff --git a/app.js b/app.js index bcbbfbfe..debd5c36 100644 --- a/app.js +++ b/app.js @@ -9,6 +9,10 @@ const session = require('express-session'); const errorhandler = require('errorhandler'); const flash = require('express-flash'); const i18n = require('i18n'); // internationalization +i18n.configure({ + locales:['de', 'en'], + directory: './locales' +}); var env = process.env.NODE_ENV || 'development'; const config = require('./config/config')[env]; @@ -24,6 +28,12 @@ app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: false})); app.use(express.static(path.join(__dirname, 'public'))); +app.use(i18n.init); +app.use((req, res, next) => { + res.setLocale('de'); + next(); +}); + app.use(session( { resave: true, @@ -48,14 +58,9 @@ app.use(function(req, res, next) { next(); }); -// internationalization (i18n) -i18n.configure({ - locales:['de', 'en'], - directory: './locales' -}); -app.use(i18n.init); - -require('./routes/routes')(app, config, passport, i18n); +//require('./routes/routes')(app, config, passport, i18n); +require('./routes/routes-account')(app, config, passport, i18n); +require('./routes/routes-project')(app, config, passport); //require('./routes/dbconn')(app, config); require('./routes/api')(app, config, passport); diff --git a/public/js/jquery-ui/i18n/datepicker-de.js b/public/js/jquery-ui/i18n/datepicker-de.js new file mode 100644 index 00000000..e2e61d27 --- /dev/null +++ b/public/js/jquery-ui/i18n/datepicker-de.js @@ -0,0 +1,37 @@ +/* German initialisation for the jQuery UI date picker plugin. */ +/* Written by Milian Wolff (mail@milianw.de). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.de = { + closeText: "Schließen", + prevText: "<Zurück", + nextText: "Vor>", + currentText: "Heute", + monthNames: [ "Januar","Februar","März","April","Mai","Juni", + "Juli","August","September","Oktober","November","Dezember" ], + monthNamesShort: [ "Jan","Feb","Mär","Apr","Mai","Jun", + "Jul","Aug","Sep","Okt","Nov","Dez" ], + dayNames: [ "Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag" ], + dayNamesShort: [ "So","Mo","Di","Mi","Do","Fr","Sa" ], + dayNamesMin: [ "So","Mo","Di","Mi","Do","Fr","Sa" ], + weekHeader: "KW", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.de ); + +return datepicker.regional.de; + +} ) ); \ No newline at end of file diff --git a/routes/mailer.js b/routes/mailer.js new file mode 100644 index 00000000..510b5bb1 --- /dev/null +++ b/routes/mailer.js @@ -0,0 +1,31 @@ +const nodemailer = require('nodemailer') + +var env = process.env.NODE_ENV || 'development'; +const config = require('../config/config')[env] + +var smtpTransport = nodemailer.createTransport({ + host: config.mailer.host, + secureConnection: config.mailer.secureConnection, + port: config.mailer.port, + auth: { + user: config.mailer.authUser, + pass: config.mailer.authPass + }, + tls: { + ciphers: config.mailer.tlsCiphers + } +}); + +var mailOptions = { + to: "", + from: config.mailer.from, + subject: "", + text: "" +}; + +var mailer = { + transport: smtpTransport, + options: mailOptions +} + +module.exports = mailer \ No newline at end of file diff --git a/routes/routes.js b/routes/routes-account.js similarity index 74% rename from routes/routes.js rename to routes/routes-account.js index febd0ccc..edba628a 100644 --- a/routes/routes.js +++ b/routes/routes-account.js @@ -9,7 +9,7 @@ const salt = 64; // salt length // forgot pwd const async = require('async') const crypto = require('crypto') -const nodemailer = require('nodemailer') +const mailer = require('./mailer') module.exports = function (app, config, passport, i18n) { @@ -74,28 +74,17 @@ module.exports = function (app, config, passport, i18n) { res.status(200).send(spMetadata); } ); - - // ======== NODEMAILER ==================== - var smtpTransport = nodemailer.createTransport({ - host: config.mailer.host, - secureConnection: config.mailer.secureConnection, - port: config.mailer.port, - auth: { - user: config.mailer.authUser, - pass: config.mailer.authPass - }, - tls: { - ciphers: config.mailer.tlsCiphers - } + + // ================ test i18n ================== + i18n.setLocale('de'); + app.get('/de', function(req, res) { + var greeting = i18n.__('Hello World') + res.send(greeting) }); - var mailOptions = { - to: "", - from: config.mailer.from, - subject: "", - text: "" - }; + var lang = 'DE' + // ======== APP ROUTES - ACCOUNT ==================== var updatePasswordMailSubject = "Ihr Passwort für das Transferportal wurde gespeichert." var mailSignature = "Mit den besten Grüßen,\ndas Transferportal-Team der HFT Stuttgart\n\n"+ "Transferportal der Hochschule für Technik Stuttgart\n"+ @@ -104,17 +93,7 @@ module.exports = function (app, config, passport, i18n) { "m4lab@hft-stuttgart.de\n"+ "https://transfer.hft-stuttgart.de" var updatePasswordMailContent = "Lieber Nutzer,\n\n"+"Ihr Passwort wurde erfolgreich geändert.\n\n"+mailSignature - - // ================ test i18n ================== - i18n.setLocale('de'); - app.get('/de', function(req, res) { - var greeting = i18n.__('Hello World') - res.send(greeting) - }); - - var lang = 'DE' - // ======== APP ROUTES - ACCOUNT ==================== app.get('/', function (req, res) { if (req.isAuthenticated()) { methods.getUserByEmail(req.user.email, function(data, err){ @@ -332,11 +311,11 @@ module.exports = function (app, config, passport, i18n) { else { //req.flash('success', "Pasword updated!") req.flash('success', "Passwort aktualisiert!") - mailOptions.to = req.user.email + mailer.options.to = req.user.email //mailOptions.subject = "Your M4_LAB Password has been updated." - mailOptions.subject = updatePasswordMailSubject - mailOptions.text = updatePasswordMailContent - smtpTransport.sendMail(mailOptions, function(err) { + mailer.options.subject = updatePasswordMailSubject + mailer.options.text = updatePasswordMailContent + mailer.transport.sendMail(mailer.options, function(err) { if (err) { console.log(err) } @@ -407,10 +386,10 @@ module.exports = function (app, config, passport, i18n) { }); // send email - mailOptions.to = emailAddress; - mailOptions.subject = emailSubject; - mailOptions.text = emailContent; - smtpTransport.sendMail(mailOptions, function(err) { + mailer.options.to = emailAddress; + mailer.options.subject = emailSubject; + mailer.options.text = emailContent; + mailer.transport.sendMail(mailer.options, function(err) { done(err, 'done'); }); } @@ -470,10 +449,10 @@ module.exports = function (app, config, passport, i18n) { //req.flash('success', "Your pasword has been updated.") req.flash('success', "Passwort aktualisiert!") // send notifiaction email - mailOptions.to = user.email - mailOptions.subject = updatePasswordMailSubject - mailOptions.text = updatePasswordMailContent - smtpTransport.sendMail(mailOptions, function(err) { + mailer.options.to = user.email + mailer.options.subject = updatePasswordMailSubject + mailer.options.text = updatePasswordMailContent + mailer.transport.sendMail(mailer.options, function(err) { if (err) { console.log(err) } @@ -551,146 +530,5 @@ module.exports = function (app, config, passport, i18n) { } }) }) - app.get('/mailinglists', function (req, res) { - async.waterfall([ - function(done) { - methods.getAllMailinglists(function(mailinglistOverview, err) { - if (!err) { - done(err, mailinglistOverview) - } - }) - }, - // create JSON object of mailinglists for front-end - function(mailinglistOverview, done) { - var allMailingLists = [] // JSON object - for (let i = 0; i < mailinglistOverview.length; i++) { - // add data to JSON object - allMailingLists.push({ - id: mailinglistOverview[i].id, - name: mailinglistOverview[i].name, - src: mailinglistOverview[i].src, - projectstatus: mailinglistOverview[i].projectstatus, - project_title: mailinglistOverview[i].project_title - }); - } - - res.render(lang+'/mailinglists', { - isUserAuthenticated: req.isAuthenticated(), - user: req.user, - mailinglists: allMailingLists - }); - } - ]) - }); - - // ======== APP ROUTES - PROJECT ==================== - app.get('/project', function (req, res) { - async.waterfall([ - // get all projects from projectdb - function(done) { - methods.getAllProjects(function(projectsOverview, err) { - if (!err) { - done(err, projectsOverview) - } - }) - }, - // create JSON object for front-end - function(projectsOverview, done) { - var activeProjects = [] - var nonActiveProjects = [] - - for (var i = 0; i < projectsOverview.length; i++) { - var project = { - id: projectsOverview[i].id, - logo: projectsOverview[i].logo, - akronym: projectsOverview[i].pname, - title: projectsOverview[i].title, - summary: projectsOverview[i].onelinesummary, - category: projectsOverview[i].category, - cp: projectsOverview[i].contact_email, - gitlab: projectsOverview[i].gitlab - } - if (projectsOverview[i].projectstatus == 0) { - nonActiveProjects.push(project) - } - else if (projectsOverview[i].projectstatus == 1) { - activeProjects.push(project) - } - } - - // render the page - if (req.isAuthenticated()) { - res.render(lang+'/project/projects', { - isUserAuthenticated: true, - nonActive: nonActiveProjects, - active: activeProjects - }); - } - else { - res.render(lang+'/project/projects', { - isUserAuthenticated: false, - nonActive: nonActiveProjects, - active: activeProjects - }); - } - } - ]) - }) - - app.get('/addprojectoverview', function (req, res) { - if (req.isAuthenticated()) { - res.render(lang+'/project/addProjectOverview') - } - else { - res.redirect('/account/login') - } - }) - - app.post('/addprojectoverview', function (req, res) { - if (req.isAuthenticated()) { - var wiki = 0 - if (req.body.wiki) - wiki = 1 - - var projectOverviewData = { - pname: req.body.pname, - title: req.body.title, - onelinesummary: req.body.summary, - category: req.body.category, - logo: req.body.logo, - gitlab: req.body.gitlabURL, - wiki: wiki, - overview: req.body.overview, - question: req.body.question, - approach: req.body.approach, - result: req.body.result, - keywords: req.body.keywords, - announcement: req.body.announcement, - term: req.body.term, - further_details: req.body.furtherDetails, - website: req.body.website, - src: req.body.src, - caption: req.body.caption, - contact_firstname: req.body.contactFirstname, - contact_lastname: req.body.contactLastname, - contact_email: req.body.contactEmail, - leader_firstname: req.body.leaderFirstname, - leader_lastname: req.body.leaderLastname, - leader_email: req.body.leaderEmail - } - - methods.addProjectOverview(projectOverviewData, function(err){ - if (err) { - //req.flash('error', "Failed") - req.flash('error', "Fehlgeschlagen") - res.redirect('/account/addProjectOverview'); - } - else { - req.flash('success', 'Your project has been created.') - res.redirect('/account/project'); - } - }) - } - }) }; \ No newline at end of file diff --git a/routes/routes-project.js b/routes/routes-project.js new file mode 100644 index 00000000..6b8ac371 --- /dev/null +++ b/routes/routes-project.js @@ -0,0 +1,157 @@ +const methods = require('./methods') +const async = require('async') + +module.exports = function (app) { + + // ======== APP ROUTES - PROJECT ==================== + var lang = 'DE' + + app.get('/mailinglists', function (req, res) { + async.waterfall([ + function(done) { + methods.getAllMailinglists(function(mailinglistOverview, err) { + if (!err) { + done(err, mailinglistOverview) + } + }) + }, + // create JSON object of mailinglists for front-end + function(mailinglistOverview, done) { + var allMailingLists = [] // JSON object + for (let i = 0; i < mailinglistOverview.length; i++) { + // add data to JSON object + allMailingLists.push({ + id: mailinglistOverview[i].id, + name: mailinglistOverview[i].name, + src: mailinglistOverview[i].src, + projectstatus: mailinglistOverview[i].projectstatus, + project_title: mailinglistOverview[i].project_title + }); + } + + res.render(lang+'/project/mailinglists', { + isUserAuthenticated: req.isAuthenticated(), + user: req.user, + mailinglists: allMailingLists + }); + } + ]) + }); + + app.get('/project', function (req, res) { + async.waterfall([ + // get all projects from projectdb + function(done) { + methods.getAllProjects(function(projectsOverview, err) { + if (!err) { + done(err, projectsOverview) + } + }) + }, + // create JSON object for front-end + function(projectsOverview, done) { + var activeProjects = [] + var nonActiveProjects = [] + + for (var i = 0; i < projectsOverview.length; i++) { + var project = { + id: projectsOverview[i].id, + logo: projectsOverview[i].logo, + akronym: projectsOverview[i].pname, + title: projectsOverview[i].title, + summary: projectsOverview[i].onelinesummary, + category: projectsOverview[i].category, + cp: projectsOverview[i].contact_email, + gitlab: projectsOverview[i].gitlab + } + if (projectsOverview[i].projectstatus == 0) { + nonActiveProjects.push(project) + } + else if (projectsOverview[i].projectstatus == 1) { + activeProjects.push(project) + } + } + + // render the page + if (req.isAuthenticated()) { + res.render(lang+'/project/projects', { + isUserAuthenticated: true, + nonActive: nonActiveProjects, + active: activeProjects + }); + } + else { + res.render(lang+'/project/projects', { + isUserAuthenticated: false, + nonActive: nonActiveProjects, + active: activeProjects + }); + } + } + ]) + }) + + app.get('/addprojectoverview', function (req, res) { + if (req.isAuthenticated()) { + res.render(lang+'/project/addProjectOverview') + } + else { + res.redirect('/login') + } + }) + + app.post('/addprojectoverview', function (req, res) { + if (req.isAuthenticated()) { + var wiki = 0 + if (req.body.wiki) + wiki = 1 + + var projectTerm = req.body.termForm + " - " + req.body.termTo + var projectOverviewData = { + pname: req.body.pname, + title: req.body.title, + onelinesummary: req.body.summary, + category: req.body.category, + logo: req.body.logo, + gitlab: req.body.gitlabURL, + wiki: wiki, + overview: req.body.overview, + question: req.body.question, + approach: req.body.approach, + result: req.body.result, + keywords: req.body.keywords, + announcement: req.body.announcement, + term: projectTerm, + further_details: req.body.furtherDetails, + website: req.body.website, + src: req.body.src, + caption: req.body.caption, + contact_lastname: req.body.contactName, + contact_email: req.body.contactEmail, + leader_lastname: req.body.leaderName, + leader_email: req.body.leaderEmail + } + + methods.addProjectOverview(projectOverviewData, function(err){ + if (err) { + //req.flash('error', "Failed") + req.flash('error', "Fehlgeschlagen") + res.redirect('/addProjectOverview'); + } + else { + req.flash('success', 'Your project has been created.') + res.redirect('/project'); + } + }) + } + }) + + app.get('/updateprojectoverview', function (req, res) { + // only their own project + }) + + app.post('/updateprojectoverview', function (req, res) { + // only their own project + }) + +}; \ No newline at end of file diff --git a/views/DE/account/home.pug b/views/DE/account/home.pug index f08d9ee7..58b2427c 100644 --- a/views/DE/account/home.pug +++ b/views/DE/account/home.pug @@ -34,9 +34,9 @@ html(lang="de") h5 span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") p content goes here diff --git a/views/DE/account/profile.pug b/views/DE/account/profile.pug index e4d7e260..32a2aff1 100644 --- a/views/DE/account/profile.pug +++ b/views/DE/account/profile.pug @@ -35,8 +35,8 @@ html(lang="de") span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") a(class="nav-link" href="#" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes for success in successes diff --git a/views/DE/account/security.pug b/views/DE/account/security.pug index 6db09112..560d32bc 100644 --- a/views/DE/account/security.pug +++ b/views/DE/account/security.pug @@ -37,9 +37,9 @@ html(lang="de") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil a(class="nav-link" href="#" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes for success in successes diff --git a/views/DE/account/services.pug b/views/DE/account/services.pug index 6ab101f3..55f5a1b6 100644 --- a/views/DE/account/services.pug +++ b/views/DE/account/services.pug @@ -34,8 +34,8 @@ html(lang="de") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen a(class="nav-link" href="#" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes diff --git a/views/DE/project/addProjectOverview.pug b/views/DE/project/addProjectOverview.pug index 7b40b54f..87e5d469 100644 --- a/views/DE/project/addProjectOverview.pug +++ b/views/DE/project/addProjectOverview.pug @@ -6,6 +6,8 @@ html(lang="de") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") + // jQuery UI - Datepicker + link(rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css") style. .collapse { display: none; @@ -49,8 +51,13 @@ html(lang="de") input#inputTitle(name="title" class="form-control" type="text" placeholder="official title of the project*" required) div(class="form-group col-md-12") input#inputSummary(name="summary" class="form-control" type="text" placeholder="one line summary of the project") - div(class="form-group col-md-12") - input#inputCategory(name="category" class="form-control" type="text" placeholder="category of the project") + div(class='form-group col-md-12') + select#inputCategory(name="category", class="form-control") + option(value="") - select a category - + option(value="Experten-Gruppe") Experten-Gruppe + option(value="Student-Projekt") Student-Projekt + option(value="Lehr Projekt") Lehr Projekt + option(value="Transfer-projekt") Transfer-projekt div(class="form-group col-md-12") input#inputLogo(name="logo" class="form-control" type="text" placeholder="official logo of the project") div(class="form-group col-md-12") @@ -64,13 +71,13 @@ html(lang="de") h5(class="mb-3 font-weight-bold") Content div(class='form-row') div(class='form-group col-md-12') - textarea#inputOverview(name="overview" class="form-control" type="text" rows="5" placeholder="overview") + textarea#inputOverview(name="overview" class="form-control" type="text" rows="5" placeholder="Projektüberblick") div(class="form-group col-md-12") - textarea#inputQuestion(name="question" class="form-control" type="text" rows="5" placeholder="question") + textarea#inputQuestion(name="question" class="form-control" type="text" rows="5" placeholder="Fragestellung") div(class='form-group col-md-12') - textarea#inputApproach(name="approach" class="form-control" type="text" rows="5" placeholder="approach") + textarea#inputApproach(name="approach" class="form-control" type="text" rows="5" placeholder="Vorgehensweise") div(class="form-group col-md-12") - textarea#inputResult(name="result" class="form-control" type="text" rows="5" placeholder="result") + textarea#inputResult(name="result" class="form-control" type="text" rows="5" placeholder="Ergebnis und Nutzung") div(class="form-group col-md-12") input#inputKeywords(name="keywords" class="form-control" type="text" placeholder="keywords") h5(class="mb-3 font-weight-bold") Info @@ -78,7 +85,13 @@ html(lang="de") div(class='form-group col-md-12') textarea#inputAnnouncement(name="announcement" class="form-control" type="text" rows="5" placeholder="Ausschreibung") div(class="form-group col-md-12") - input#inputTerm(name="term" class="form-control" type="text" placeholder="Laufzeit") + div(class='form-row') + div(class="form-group col-md-2") +

Laufzeit

+ div(class="form-group col-md-5") + input#inputTermFrom(name="termForm" class="form-control" type="text" placeholder="von (dd.mm.yyyy)") + div(class="form-group col-md-5") + input#inputTermTo(name="termTo" class="form-control" type="text" placeholder="bis (dd.mm.yyyy)") div(class='form-group col-md-12') textarea#inputFurtherDetails(name="furtherDetails" class="form-control" type="text" rows="5" placeholder="Mehr informationen") div(class="form-group col-md-12") @@ -89,27 +102,37 @@ html(lang="de") input#inputSrc(name="src" class="form-control" type="text" placeholder="link to the image source") div(class="form-group col-md-12") input#inputCaption(name="caption" class="form-control" type="text" placeholder="caption of the image") - h5(class="mb-3 font-weight-bold") Contact + h5(class="mb-3 font-weight-bold") Kontakt div(class='form-row') - div(class="form-group col-md-4") - input#inputContactFirstname(name="contactFirstname" class="form-control" type="text" placeholder="contact firstname") - div(class="form-group col-md-4") - input#inputContactLastname(name="contactLastname" class="form-control" type="text" placeholder="contact lastname") - div(class="form-group col-md-4") - input#inputContactEmail(name="contactEmail" class="form-control" type="email" placeholder="contact email") - div(class="form-group col-md-4") - input#inputLeaderFirstname(name="leaderFirstname" class="form-control" type="text" placeholder="leader firstname") - div(class="form-group col-md-4") - input#inputLeaderLastname(name="leaderLastname" class="form-control" type="text" placeholder="leader lastname") - div(class="form-group col-md-4") - input#inputLeaderEmail(name="leaderEmail" class="form-control" type="email" placeholder="leader email") + div(class="form-group col-md-2") +

Ansprechpartner

+ div(class="form-group col-md-5") + input#inputContactName(name="contactName" class="form-control" type="text" placeholder="Titel/Anrede Vorname Nachname") + div(class="form-group col-md-5") + input#inputContactEmail(name="contactEmail" class="form-control" type="email" placeholder="E-mail Adresse") + div(class="form-group col-md-2") +

Projektleitung

+ div(class="form-group col-md-5") + input#inputLeaderName(name="leaderName" class="form-control" type="text" placeholder="Titel/Anrede Vorname Nachname") + div(class="form-group col-md-5") + input#inputLeaderEmail(name="leaderEmail" class="form-control" type="email" placeholder="E-mail Adresse") p * Pflichtfeld input#submitBtn(type="submit", class="btn btn-outline-dark btn-block", value="Projekt Anlegen") // jQuery script(src="https://code.jquery.com/jquery-3.3.1.min.js") script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") + // jQuery UI - Datepicker + script(src="https://code.jquery.com/ui/1.12.1/jquery-ui.js") + script(src="/js/jquery-ui/i18n/datepicker-de.js") + //script(src="i18n/datepicker-de.js") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // Header - script(src="/js/headfootLogout.js") \ No newline at end of file + script(src="/js/headfootLogout.js") + script. + $( function() { + $.datepicker.setDefaults( $.datepicker.regional["de"] ); + $("#inputTermFrom").datepicker(); + $("#inputTermTo").datepicker(); + }); \ No newline at end of file diff --git a/views/DE/mailinglists.pug b/views/DE/project/mailinglists.pug similarity index 100% rename from views/DE/mailinglists.pug rename to views/DE/project/mailinglists.pug diff --git a/views/EN/forgotPwd.pug b/views/EN/account/forgotPwd.pug similarity index 100% rename from views/EN/forgotPwd.pug rename to views/EN/account/forgotPwd.pug diff --git a/views/EN/home.pug b/views/EN/account/home.pug similarity index 84% rename from views/EN/home.pug rename to views/EN/account/home.pug index 050c1bf9..d2f3875a 100644 --- a/views/EN/home.pug +++ b/views/EN/account/home.pug @@ -32,11 +32,11 @@ html(lang="en") div(class="row") div(class="col-3") h5 - span #{greeting} + span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="#" aria-selected="true") #{i18n.__(Profile)} - a(class="nav-link" href="/account/security" aria-selected="false") Security - a(class="nav-link" href="/account/services" aria-selected="false") Services + a(class="nav-link" href="/profile" aria-selected="true") Profile + a(class="nav-link" href="/security" aria-selected="false") Security + a(class="nav-link" href="/services" aria-selected="false") Services div(class="col-sm-9") p content goes here diff --git a/views/EN/profile.pug b/views/EN/account/profile.pug similarity index 96% rename from views/EN/profile.pug rename to views/EN/account/profile.pug index d6edd221..47c1f7e8 100644 --- a/views/EN/profile.pug +++ b/views/EN/account/profile.pug @@ -35,8 +35,8 @@ html(lang="en") span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") a(class="nav-link" href="#" aria-selected="true") Profile - a(class="nav-link" href="/account/security" aria-selected="false") Security - a(class="nav-link" href="/account/services" aria-selected="false") Services + a(class="nav-link" href="/security" aria-selected="false") Security + a(class="nav-link" href="/services" aria-selected="false") Services div(class="col-sm-9") if successes for success in successes diff --git a/views/EN/registration.pug b/views/EN/account/registration.pug similarity index 100% rename from views/EN/registration.pug rename to views/EN/account/registration.pug diff --git a/views/EN/reset.pug b/views/EN/account/reset.pug similarity index 100% rename from views/EN/reset.pug rename to views/EN/account/reset.pug diff --git a/views/EN/security.pug b/views/EN/account/security.pug similarity index 96% rename from views/EN/security.pug rename to views/EN/account/security.pug index cbe435cd..2a5c248c 100644 --- a/views/EN/security.pug +++ b/views/EN/account/security.pug @@ -37,9 +37,9 @@ html(lang="en") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/account/profile" aria-selected="true") Profile + a(class="nav-link" href="/profile" aria-selected="true") Profile a(class="nav-link" href="#" aria-selected="false") Security - a(class="nav-link" href="/account/services" aria-selected="false") Services + a(class="nav-link" href="/services" aria-selected="false") Services div(class="col-sm-9") if successes for success in successes diff --git a/views/EN/services.pug b/views/EN/account/services.pug similarity index 94% rename from views/EN/services.pug rename to views/EN/account/services.pug index a62efed6..f095144b 100644 --- a/views/EN/services.pug +++ b/views/EN/account/services.pug @@ -34,8 +34,8 @@ html(lang="en") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/account/profile" aria-selected="true") Profile - a(class="nav-link" href="/account/security" aria-selected="false") Security + a(class="nav-link" href="/profile" aria-selected="true") Profile + a(class="nav-link" href="/security" aria-selected="false") Security a(class="nav-link" href="#" aria-selected="false") Services div(class="col-sm-9") if successes diff --git a/views/EN/project/addProjectOverview.pug b/views/EN/project/addProjectOverview.pug new file mode 100644 index 00000000..7b40b54f --- /dev/null +++ b/views/EN/project/addProjectOverview.pug @@ -0,0 +1,115 @@ +doctype html +html(lang="de") + head + title= "Add Project Overview" + meta(charset="UTF-8") + meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") + style. + .collapse { + display: none; + } + .collapse.in { + display: block; + } + .collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height,visibility; + -o-transition-property: height,visibility; + transition-property: height,visibility; + } + .warning { + color: red; + font-size: 11px; + } + body + div(class="container-fluid") + div(class="row") + div(class="col-md-6 offset-md-2") + h4(class="mb-3 font-weight-bold") Neues Projekt + div(class="col-md-6 offset-md-3") + if errors + for error, i in errors + div.alert.alert-danger.alert-dismissible.fade.show #{ error } + a(class="close", href="#", data-dismiss="alert", aria-label="close") × + form(method="POST") + div(class='form-row') + div(class='form-group col-md-12') + input#inputPname(name="pname" class="form-control" type="text" placeholder="human-readable short project name*" required) + div(class="form-group col-md-12") + input#inputTitle(name="title" class="form-control" type="text" placeholder="official title of the project*" required) + div(class="form-group col-md-12") + input#inputSummary(name="summary" class="form-control" type="text" placeholder="one line summary of the project") + div(class="form-group col-md-12") + input#inputCategory(name="category" class="form-control" type="text" placeholder="category of the project") + div(class="form-group col-md-12") + input#inputLogo(name="logo" class="form-control" type="text" placeholder="official logo of the project") + div(class="form-group col-md-12") + div(class="input-group mb-3") + input#inputGitlabURL(name="gitlabURL" type="text" class="form-control" placeholder="M4_LAB GitLab Project URL, z.B. https://transfer.hft-stuttgart.de/gitlab/username/projectname") + div(class="input-group-prepend") + div(class="input-group-text") + input#inputWiki(name="wiki" type="checkbox") + |   Wiki + + h5(class="mb-3 font-weight-bold") Content + div(class='form-row') + div(class='form-group col-md-12') + textarea#inputOverview(name="overview" class="form-control" type="text" rows="5" placeholder="overview") + div(class="form-group col-md-12") + textarea#inputQuestion(name="question" class="form-control" type="text" rows="5" placeholder="question") + div(class='form-group col-md-12') + textarea#inputApproach(name="approach" class="form-control" type="text" rows="5" placeholder="approach") + div(class="form-group col-md-12") + textarea#inputResult(name="result" class="form-control" type="text" rows="5" placeholder="result") + div(class="form-group col-md-12") + input#inputKeywords(name="keywords" class="form-control" type="text" placeholder="keywords") + h5(class="mb-3 font-weight-bold") Info + div(class='form-row') + div(class='form-group col-md-12') + textarea#inputAnnouncement(name="announcement" class="form-control" type="text" rows="5" placeholder="Ausschreibung") + div(class="form-group col-md-12") + input#inputTerm(name="term" class="form-control" type="text" placeholder="Laufzeit") + div(class='form-group col-md-12') + textarea#inputFurtherDetails(name="furtherDetails" class="form-control" type="text" rows="5" placeholder="Mehr informationen") + div(class="form-group col-md-12") + input#inputWebsite(name="website" class="form-control" type="text" placeholder="website") + h5(class="mb-3 font-weight-bold") Images + div(class='form-row') + div(class="form-group col-md-12") + input#inputSrc(name="src" class="form-control" type="text" placeholder="link to the image source") + div(class="form-group col-md-12") + input#inputCaption(name="caption" class="form-control" type="text" placeholder="caption of the image") + h5(class="mb-3 font-weight-bold") Contact + div(class='form-row') + div(class="form-group col-md-4") + input#inputContactFirstname(name="contactFirstname" class="form-control" type="text" placeholder="contact firstname") + div(class="form-group col-md-4") + input#inputContactLastname(name="contactLastname" class="form-control" type="text" placeholder="contact lastname") + div(class="form-group col-md-4") + input#inputContactEmail(name="contactEmail" class="form-control" type="email" placeholder="contact email") + div(class="form-group col-md-4") + input#inputLeaderFirstname(name="leaderFirstname" class="form-control" type="text" placeholder="leader firstname") + div(class="form-group col-md-4") + input#inputLeaderLastname(name="leaderLastname" class="form-control" type="text" placeholder="leader lastname") + div(class="form-group col-md-4") + input#inputLeaderEmail(name="leaderEmail" class="form-control" type="email" placeholder="leader email") + p * Pflichtfeld + input#submitBtn(type="submit", class="btn btn-outline-dark btn-block", value="Projekt Anlegen") + + // jQuery + script(src="https://code.jquery.com/jquery-3.3.1.min.js") + script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") + // Bootstrap + script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") + // Header + script(src="/js/headfootLogout.js") \ No newline at end of file diff --git a/views/EN/mailinglists.pug b/views/EN/project/mailinglists.pug similarity index 99% rename from views/EN/mailinglists.pug rename to views/EN/project/mailinglists.pug index 677d0f32..f2ddbd8b 100644 --- a/views/EN/mailinglists.pug +++ b/views/EN/project/mailinglists.pug @@ -1,4 +1,4 @@ -html(lang="de") +html(lang="en") head title= "Mailinglisten" meta(charset="UTF-8") diff --git a/views/EN/project/projects.pug b/views/EN/project/projects.pug new file mode 100644 index 00000000..56f65c10 --- /dev/null +++ b/views/EN/project/projects.pug @@ -0,0 +1,117 @@ +doctype html +html(lang="de") + head + title= "Project List" + meta(charset="UTF-8") + meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") + style. + .collapse { + display: none; + } + .collapse.in { + display: block; + } + .collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height,visibility; + -o-transition-property: height,visibility; + transition-property: height,visibility; + } + .warning { + color: red; + font-size: 11px; + } + body + div(class="container-fluid") + if isUserAuthenticated + p Auf dieser Seite sehen Sie die Liste der über dieses Portal veröffentlichten Projekte. + a(href="/addprojectoverview" class="btn btn-primary" role="button" aria-pressed="true") Projekt anlegen + else + p Auf dieser Seite sehen Sie die Liste der über dieses Portal veröffentlichten Projekte. + p Möchten Sie ein neues Projekt anlegen, dann klicken Sie bitte auf #[a(href="/addprojectoverview") Anmelden und Projekt anlegen] + if successes + for success in successes + div.alert.alert-success.alert-dismissible #{ success } + a(class="close", href="#", data-dismiss="alert", aria-label="close") × + // Active projects + h3(class="mb-3 font-weight-bold") Aktive Projekte + table(class="table table-striped") + thead + tr + th Logo + th Akronym + th Title + th Kernziel + th Kategorie + th Ansprechpartner + th Projektinhalte + tbody + for item in active + tr + //td #{item.status} + td + img(src=item.logo, width="40", height="40") + td #{item.akronym} + td #{item.title} + td #{item.summary} + td #{item.category} + td #[a(class="nav-link", href="mailto:"+ item.cp) #{item.cp}] + td #[a(class="nav-link", href="https://m4lab.hft-stuttgart.de/projectoverview?projectID="+item.id) Zur Projektübersicht] + if item.gitlab + a(class="nav-link", href=item.gitlab+"/tree/master") Projektdateien + a(class="nav-link", href=item.gitlab+"/wikis/home") Projektwiki + else + a(class="nav-link", href="#") Projektdateien + a(class="nav-link", href="#") Projektwiki + br + // Non-active projects + h3(class="mb-3 font-weight-bold") Abgeschlossene Projekte + table(class="table table-striped") + thead + tr + th Logo + th Akronym + th Title + th Kernziel + th Kategorie + th Ansprechpartner + th Projektinhalte + tbody + for item in nonActive + tr + //td #{item.status} + td + img(src=item.logo, width="40", height="40") + td #{item.akronym} + td #{item.title} + td #{item.summary} + td #{item.category} + td #[a(class="nav-link", href="mailto:"+ item.cp) #{item.cp}] + td #[a(class="nav-link", href="https://m4lab.hft-stuttgart.de/projectoverview?projectID="+item.id) Zur Projektübersicht] + if item.gitlab + a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/tree/master") Projektdateien + a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/wikis/home") Projektwiki + else + a(class="nav-link", href="#") Projektdateien + a(class="nav-link", href="#") Projektwiki + + // jQuery + script(src="https://code.jquery.com/jquery-3.3.1.min.js") + script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") + // Bootstrap + script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") + // Header + if isUserAuthenticated + script(src="/js/headfootLogout.js") + else + script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file -- GitLab From 7fc346ea9bcaf8d37cb377d47a276b7b4dc795c4 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 6 Mar 2020 09:59:07 +0100 Subject: [PATCH 126/161] sidebar links link to /account/* --- views/DE/account/home.pug | 6 +++--- views/DE/account/profile.pug | 4 ++-- views/DE/account/security.pug | 4 ++-- views/DE/account/services.pug | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/views/DE/account/home.pug b/views/DE/account/home.pug index 58b2427c..f08d9ee7 100644 --- a/views/DE/account/home.pug +++ b/views/DE/account/home.pug @@ -34,9 +34,9 @@ html(lang="de") h5 span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") p content goes here diff --git a/views/DE/account/profile.pug b/views/DE/account/profile.pug index 32a2aff1..e4d7e260 100644 --- a/views/DE/account/profile.pug +++ b/views/DE/account/profile.pug @@ -35,8 +35,8 @@ html(lang="de") span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") a(class="nav-link" href="#" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes for success in successes diff --git a/views/DE/account/security.pug b/views/DE/account/security.pug index 560d32bc..6db09112 100644 --- a/views/DE/account/security.pug +++ b/views/DE/account/security.pug @@ -37,9 +37,9 @@ html(lang="de") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil a(class="nav-link" href="#" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes for success in successes diff --git a/views/DE/account/services.pug b/views/DE/account/services.pug index 55f5a1b6..6ab101f3 100644 --- a/views/DE/account/services.pug +++ b/views/DE/account/services.pug @@ -34,8 +34,8 @@ html(lang="de") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen a(class="nav-link" href="#" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes -- GitLab From 62bd96352a3fdf3dfb984798c1170f20b49bfaf6 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 13 Mar 2020 09:45:32 +0100 Subject: [PATCH 127/161] addprojectoverview redirect unauth to account/login --- routes/routes-project.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/routes-project.js b/routes/routes-project.js index 6b8ac371..f05c4c06 100644 --- a/routes/routes-project.js +++ b/routes/routes-project.js @@ -96,7 +96,7 @@ module.exports = function (app) { res.render(lang+'/project/addProjectOverview') } else { - res.redirect('/login') + res.redirect('/account/login') } }) -- GitLab From 025f0560ea23e6aa6f712187bf593266ac03a231 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Fri, 13 Mar 2020 17:46:38 +0100 Subject: [PATCH 128/161] add character limitation, which is taken from DB --- views/DE/account/registration.pug | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/views/DE/account/registration.pug b/views/DE/account/registration.pug index ab1c7e5a..6d88857a 100644 --- a/views/DE/account/registration.pug +++ b/views/DE/account/registration.pug @@ -49,10 +49,10 @@ html(lang="de") h5(class="mb-3 font-weight-bold") Anmeldedaten div(class='form-row') div(class='form-group col-md-6') - input#inputEmail(name="inputEmail", type="email", class="form-control", placeholder="E-Mail-Adresse*" required) + input#inputEmail(name="inputEmail", type="email", class="form-control", placeholder="E-Mail-Adresse*", maxlength="45" required) span#emailWarning(class='warning') div(class="form-group col-md-6") - input#inputPassword(name="inputPassword", type="password", class="form-control", data-toggle="password", placeholder="Passwort*" required) + input#inputPassword(name="inputPassword", type="password", class="form-control", data-toggle="password", placeholder="Passwort*", maxlength="45" required) span#passwordWarning(class='warning') h5(class="mb-3 font-weight-bold") Benutzerprofil div(class="form-row") @@ -70,15 +70,15 @@ html(lang="de") option(value="Dipl.-Ing.") Dipl.-Ing. option(value="etc.") etc. div(class='form-group col-md-4') - input#inputFirstname(name="inputFirstname", type="text", class="form-control", placeholder="Vorname*" required) + input#inputFirstname(name="inputFirstname", type="text", class="form-control", placeholder="Vorname*", maxlength="45" required) div(class='form-group col-md-4') - input#inputLastname(name="inputLastname", type="text", class="form-control", placeholder="Nachname*" required) + input#inputLastname(name="inputLastname", type="text", class="form-control", placeholder="Nachname*", maxlength="45" required) div(class="form-group") - input#inputOrganisation(name="inputOrganisation", type="text", class="form-control", placeholder="Unternehmen") + input#inputOrganisation(name="inputOrganisation", type="text", class="form-control", placeholder="Unternehmen", maxlength="45") div(class="form-group") - input#inputIndustry(name="inputIndustry", type="text", class="form-control", placeholder="Branche") + input#inputIndustry(name="inputIndustry", type="text", class="form-control", placeholder="Branche", maxlength="45") div(class="form-group") - input#inputSpeciality(name="inputSpeciality", type="text", class="form-control", placeholder="Fachgebiete") + input#inputSpeciality(name="inputSpeciality", type="text", class="form-control", placeholder="Fachgebiete", maxlength="100") p * Pflichtfeld input#submitBtn(type="submit", class="btn btn-outline-dark btn-block", value="Senden" disabled) br -- GitLab From c7da7f76798fd94e0a0bd8b56d485c30a139023b Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Wed, 18 Mar 2020 09:10:28 +0100 Subject: [PATCH 129/161] redirect URL reset to local devel URLs --- routes/routes-account.js | 72 ++++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/routes/routes-account.js b/routes/routes-account.js index 0feeb905..612dffa0 100644 --- a/routes/routes-account.js +++ b/routes/routes-account.js @@ -62,26 +62,26 @@ module.exports = function (app, config, passport, i18n) { failureFlash: true }), function (req, res) { - res.redirect('/account/'); + res.redirect('/'); } ); // to generate Service Provider's XML metadata - app.get('/saml/metadata', + app.get('/saml/metadata', function(req, res) { res.type('application/xml'); var spMetadata = samlStrategy.generateServiceProviderMetadata(fs.readFileSync(__dirname + '/cert/cert.pem', 'utf8')); res.status(200).send(spMetadata); } ); - + // ================ test i18n ================== i18n.setLocale('de'); app.get('/de', function(req, res) { var greeting = i18n.__('Hello World') res.send(greeting) }); - + var lang = 'DE' // ======== APP ROUTES - ACCOUNT ==================== @@ -104,8 +104,8 @@ module.exports = function (app, config, passport, i18n) { } }) } else { - res.redirect('/account/login'); // localhost - } + res.redirect('/login'); // localhost + } }); app.get('/error', function (req, res) { @@ -122,14 +122,14 @@ module.exports = function (app, config, passport, i18n) { app.get('/logout', function (req, res) { if (req.user == null) { - return res.redirect('/account/'); + return res.redirect('/'); } - + req.user.nameID = req.user.id; req.user.nameIDFormat = req.user.idFormat; return samlStrategy.logout(req, function(err, uri) { req.logout(); - + if ( req.session ) { req.session.destroy((err) => { if(err) { @@ -137,7 +137,7 @@ module.exports = function (app, config, passport, i18n) { } }); } - + return res.redirect(uri); }); }); @@ -153,7 +153,7 @@ module.exports = function (app, config, passport, i18n) { } }) } else { - res.redirect('/account/login'); + res.redirect('/login'); } }); @@ -187,7 +187,7 @@ module.exports = function (app, config, passport, i18n) { // create JSON object of projects and user status for front-end function(userProjects, projectsOverview, done) { var allProjects = [] // JSON object - + var userProjectId = [] // array of user's project_id for (var i = 0; i < userProjects.length; i++) { userProjectId.push(userProjects[i].project_id) @@ -217,7 +217,7 @@ module.exports = function (app, config, passport, i18n) { } ]) } else { - res.redirect('/account/login'); + res.redirect('/login'); } }); @@ -227,7 +227,7 @@ module.exports = function (app, config, passport, i18n) { user: req.user // useful for view engine, useless for HTML }); } else { - res.redirect('/account/login'); + res.redirect('/login'); } }); @@ -242,7 +242,7 @@ module.exports = function (app, config, passport, i18n) { industry: req.body.inputIndustry, speciality: req.body.inputSpeciality, } - + if (req.isAuthenticated()) { if (userData.email) { dbconn.user.query('UPDATE user SET ? WHERE email = "' +userData.email+'"', userData, function (err, rows, fields) { @@ -257,10 +257,10 @@ module.exports = function (app, config, passport, i18n) { }) } } else { - res.redirect('/account/login'); + res.redirect('/login'); } }); - + app.post('/changePwd', function (req, res) { if (req.isAuthenticated()) { var currPwd = req.body.inputCurrPwd @@ -272,7 +272,7 @@ module.exports = function (app, config, passport, i18n) { // Load hashed passwd from DB dbconn.user.query('SELECT password FROM credential WHERE user_id='+userId, function (err, rows, fields) { if (err) { - res.redirect('/account/500') + res.redirect('/500') throw err } var userPwd = rows[0].password @@ -280,14 +280,14 @@ module.exports = function (app, config, passport, i18n) { // check if the password is correct bcrypt.compare(currPwd, userPwd, function(err, isMatch) { if (err) { - res.redirect('/account/500') + res.redirect('/500') throw err } else if (!isMatch) { //req.flash('error', "Sorry, your password was incorrect. Please double-check your password.") req.flash('error', "Das Passwort ist leider falsch. Bitte überprüfen Sie Ihre Eingabe.") - //res.redirect('/account/security') - res.redirect('/account/security') + //res.redirect('/security') + res.redirect('/security') } else { if ( newPwd != retypePwd ) { @@ -321,19 +321,19 @@ module.exports = function (app, config, passport, i18n) { } }); } - res.redirect('/account/security') + res.redirect('/security') }) }); }); } } - }) + }) }) } - }) + }) } else { - res.redirect('/account/login'); + res.redirect('/login'); } }); @@ -351,7 +351,7 @@ module.exports = function (app, config, passport, i18n) { "we've received a request to reset your password. However, this email address is not on our database of registered users.\n\n"+ "Thanks,\nM4_LAB Team"; var emailSubject = "Account Access Attempted"; */ - + async.waterfall([ function(done) { crypto.randomBytes(20, function(err, buf) { @@ -408,8 +408,8 @@ module.exports = function (app, config, passport, i18n) { //req.flash('success', 'If your email is registered, an e-mail has been sent to ' + emailAddress + ' with further instructions.'); req.flash('success', 'Wenn Ihre E-Mail-Adresse registriert ist, wurde eine E-Mail mit dem weiteren Vorgehen an ' + emailAddress + ' versendet.'); } - //res.redirect('/account/forgotPwd'); // deployment - res.redirect('/account/forgotPwd'); // localhost + //res.redirect('/forgotPwd'); // deployment + res.redirect('/forgotPwd'); // localhost }); }); @@ -418,8 +418,8 @@ module.exports = function (app, config, passport, i18n) { if (!user) { //req.flash('error', 'Password reset token is invalid or has expired.'); req.flash('error', 'Der Schlüssel zum zurücksetzen des Passworts ist ungültig oder abgelaufen.'); - //res.redirect('/account/forgotPwd'); // deployment - res.redirect('/account/forgotPwd'); // localhost + //res.redirect('/forgotPwd'); // deployment + res.redirect('/forgotPwd'); // localhost } else { res.render(lang+'/account/reset'); @@ -428,7 +428,7 @@ module.exports = function (app, config, passport, i18n) { }); app.post('/reset/:token', function(req, res) { - var newPwd = req.body.inputNewPwd + var newPwd = req.body.inputNewPwd methods.getUserByToken(req.params.token, function(err, user){ if (user) { // encrypt password @@ -458,7 +458,7 @@ module.exports = function (app, config, passport, i18n) { } }); // redirect to login page - res.redirect('/account/login') + res.redirect('/login') } }) }); @@ -466,10 +466,10 @@ module.exports = function (app, config, passport, i18n) { } else { req.flash('error', "User not found.") - res.redirect('/account/login') + res.redirect('/login') } }); - + }); // todo: user registration with captcha @@ -510,9 +510,9 @@ module.exports = function (app, config, passport, i18n) { } else { //req.flash('success', 'Your account has been created. Please log in.') - req.flash('success', 'Ihr Benutzerkonto wurde angelegt. Bitte melden Sie sich an.') + req.flash('success', 'Ihr Benutzerkonto wurde angelegt. Bitte melden Sie sich an.') } - res.redirect('/account/registration'); + res.redirect('/registration'); }) }); }); -- GitLab From 8149ba8afe11b656341d5abbc0c34c8f899f3589 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Wed, 18 Mar 2020 14:51:05 +0100 Subject: [PATCH 130/161] merge devel_wolfgang --- views/DE/project/projects.pug | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/DE/project/projects.pug b/views/DE/project/projects.pug index 56f65c10..9875780b 100644 --- a/views/DE/project/projects.pug +++ b/views/DE/project/projects.pug @@ -68,8 +68,8 @@ html(lang="de") td #[a(class="nav-link", href="mailto:"+ item.cp) #{item.cp}] td #[a(class="nav-link", href="https://m4lab.hft-stuttgart.de/projectoverview?projectID="+item.id) Zur Projektübersicht] if item.gitlab - a(class="nav-link", href=item.gitlab+"/tree/master") Projektdateien - a(class="nav-link", href=item.gitlab+"/wikis/home") Projektwiki + a(class="nav-link", href="https://transfer.hft-stuttgart.de/"+item.gitlab+"/tree/master") Projektdateien + a(class="nav-link", href="https://transfer.hft-stuttgart.de/"+item.gitlab+"/wikis/home") Projektwiki else a(class="nav-link", href="#") Projektdateien a(class="nav-link", href="#") Projektwiki -- GitLab From 7981e2a1ea6c8ae9f75810452bdeeaa42fe2167e Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Wed, 18 Mar 2020 14:54:43 +0100 Subject: [PATCH 131/161] gitlab typo --- views/DE/project/projects.pug | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/DE/project/projects.pug b/views/DE/project/projects.pug index 9875780b..10987e62 100644 --- a/views/DE/project/projects.pug +++ b/views/DE/project/projects.pug @@ -68,8 +68,8 @@ html(lang="de") td #[a(class="nav-link", href="mailto:"+ item.cp) #{item.cp}] td #[a(class="nav-link", href="https://m4lab.hft-stuttgart.de/projectoverview?projectID="+item.id) Zur Projektübersicht] if item.gitlab - a(class="nav-link", href="https://transfer.hft-stuttgart.de/"+item.gitlab+"/tree/master") Projektdateien - a(class="nav-link", href="https://transfer.hft-stuttgart.de/"+item.gitlab+"/wikis/home") Projektwiki + a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/tree/master") Projektdateien + a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/wikis/home") Projektwiki else a(class="nav-link", href="#") Projektdateien a(class="nav-link", href="#") Projektwiki -- GitLab From adcfe447b91e1796b199cba4701738ef7ba44619 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Thu, 19 Mar 2020 09:02:41 +0100 Subject: [PATCH 132/161] small update --- routes/api.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/routes/api.js b/routes/api.js index ddedf46c..5a6ee24d 100644 --- a/routes/api.js +++ b/routes/api.js @@ -7,13 +7,13 @@ module.exports = function (app) { app.get('/api/v1/profile', function (req, res) { if (req.isAuthenticated()) { - // read data based on ID - dbconn.user.query('SELECT title, firstname, lastname, email, industry, organisation, speciality FROM user WHERE email="'+req.user.email+'"', function (err, rows, fields) { + // read data based on email + dbconn.user.query('SELECT * FROM user WHERE email="'+req.user.email+'"', function (err, rows, fields) { if (err) throw err res.send(rows[0]) }) } else { - res.redirect('/account/'); + res.send('authentication required'); } }); -- GitLab From c68f576a4b184a32dfffa97d17f781f4baa4dd01 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Thu, 19 Mar 2020 09:08:08 +0100 Subject: [PATCH 133/161] addUserProjectRole --- routes/methods.js | 11 +++++- routes/routes-project.js | 79 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 87 insertions(+), 3 deletions(-) diff --git a/routes/methods.js b/routes/methods.js index d377d61c..59709d7d 100644 --- a/routes/methods.js +++ b/routes/methods.js @@ -132,6 +132,12 @@ var methods = { callback(rows, err); }); }, + addUserProjectRole: function(data, callback) { + dbconn.user.query('INSERT INTO user_project_role SET ?', data, function (err, results, fields){ + if (err) throw err; + callback(err); + }) + }, // ======================= project db ======================= getAllProjects: function(callback) { dbconn.project.query('CALL getAllprojects', function (err, rows, fields){ @@ -146,9 +152,10 @@ var methods = { }) }, addProjectOverview: function(data, callback) { - dbconn.project.query('INSERT INTO project_overview SET ?', data, function (err, rows, fields){ + dbconn.project.query('INSERT INTO project_overview SET ?', data, function (err, results, fields){ if (err) throw err; - callback(err); + //console.log(results.insertId) + callback(results.insertId, err); }) } }; diff --git a/routes/routes-project.js b/routes/routes-project.js index 6b8ac371..ad713a24 100644 --- a/routes/routes-project.js +++ b/routes/routes-project.js @@ -100,7 +100,7 @@ module.exports = function (app) { } }) - app.post('/addprojectoverview', function (req, res) { + app.post('/addprojectoverview__', function (req, res) { if (req.isAuthenticated()) { var wiki = 0 if (req.body.wiki) @@ -146,6 +146,83 @@ module.exports = function (app) { } }) + app.post('/addprojectoverview', function (req, res) { + if (req.isAuthenticated()) { + var wiki = 0 + if (req.body.wiki) + wiki = 1 + + var projectTerm = req.body.termForm + " - " + req.body.termTo + var projectOverviewData = { + pname: req.body.pname, + title: req.body.title, + onelinesummary: req.body.summary, + category: req.body.category, + logo: req.body.logo, + gitlab: req.body.gitlabURL, + wiki: wiki, + overview: req.body.overview, + question: req.body.question, + approach: req.body.approach, + result: req.body.result, + keywords: req.body.keywords, + announcement: req.body.announcement, + term: projectTerm, + further_details: req.body.furtherDetails, + website: req.body.website, + src: req.body.src, + caption: req.body.caption, + contact_lastname: req.body.contactName, + contact_email: req.body.contactEmail, + leader_lastname: req.body.leaderName, + leader_email: req.body.leaderEmail + } + + /* RS: Temporary solution while Project DB is still in early phase. + When User DB and Project DB are integrated and quite stabil, this operation should be done in 1 transaction. + */ + var userId // todo: make this global variable? + async.waterfall([ + // get userId by email from userdb + function(done) { + methods.getUserIdByEmail(req.user.email, function(id, err) { + if (!err) { + userId = id + done(err) + } + }) + }, + // add project overview + function(done) { + methods.addProjectOverview(projectOverviewData, function(projectOverviewId, err){ + if (!err) { + done(err, projectOverviewId) + } + }) + }, + // assign the created overview to logged-in user + function(projectOverviewId, done) { + var userProjectRoleData = { + project_id: projectOverviewId, + user_id: userId, + role_id: 3 // OVERVIEW_CREATOR + } + methods.addUserProjectRole(userProjectRoleData, function(userProjects, err) { + if (err) { + //req.flash('error', "Failed") + req.flash('error', "Fehlgeschlagen") + res.redirect('/addProjectOverview'); + } + else { + req.flash('success', 'Your project has been created.') + res.redirect('/project'); + } + }) + } + ]) + } + }) + app.get('/updateprojectoverview', function (req, res) { // only their own project }) -- GitLab From 6f3640540e649c85ac578a47ec22eb50045b5e6c Mon Sep 17 00:00:00 2001 From: Rosanny Date: Thu, 19 Mar 2020 09:23:18 +0100 Subject: [PATCH 134/161] add new role --- database/userdb_role.sql | 51 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 database/userdb_role.sql diff --git a/database/userdb_role.sql b/database/userdb_role.sql new file mode 100644 index 00000000..be18e685 --- /dev/null +++ b/database/userdb_role.sql @@ -0,0 +1,51 @@ +-- MySQL dump 10.13 Distrib 8.0.15, for Win64 (x86_64) +-- +-- Host: localhost Database: userdb +-- ------------------------------------------------------ +-- Server version 8.0.15 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; + SET NAMES utf8 ; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `role` +-- + +DROP TABLE IF EXISTS `role`; +/*!40101 SET @saved_cs_client = @@character_set_client */; + SET character_set_client = utf8mb4 ; +CREATE TABLE `role` ( + `id` int(11) NOT NULL, + `name` varchar(45) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `role` +-- + +LOCK TABLES `role` WRITE; +/*!40000 ALTER TABLE `role` DISABLE KEYS */; +INSERT INTO `role` VALUES (1,'ADMIN'),(2,'USER'),(3,'OVERVIEW_CREATOR'); +/*!40000 ALTER TABLE `role` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2020-03-19 9:21:39 -- GitLab From 8bc104d8aa5d064c4266a0f74f650c28a8c5e11e Mon Sep 17 00:00:00 2001 From: Rosanny Date: Thu, 19 Mar 2020 09:32:41 +0100 Subject: [PATCH 135/161] remove some scripts --- database/alter.sql | 4 - database/userdb.mwb | Bin 10178 -> 0 bytes database/userdb.png | Bin 26606 -> 0 bytes database/userdb.sql | 89 ------------------- database/userdb_121219.sql | 169 ------------------------------------- 5 files changed, 262 deletions(-) delete mode 100644 database/alter.sql delete mode 100644 database/userdb.mwb delete mode 100644 database/userdb.png delete mode 100644 database/userdb.sql delete mode 100644 database/userdb_121219.sql diff --git a/database/alter.sql b/database/alter.sql deleted file mode 100644 index 80d0ad77..00000000 --- a/database/alter.sql +++ /dev/null @@ -1,4 +0,0 @@ -// add `salutation` column and alter `title` to be not mandatory -ALTER TABLE `userdb`.`user` -ADD COLUMN `salutation` VARCHAR(45) NULL DEFAULT NULL AFTER `email`, -CHANGE COLUMN `title` `title` VARCHAR(45) NULL DEFAULT NULL ; \ No newline at end of file diff --git a/database/userdb.mwb b/database/userdb.mwb deleted file mode 100644 index 6cb9b9285114f37d969bc9d563909cf62cb71fe5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10178 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 diff --git a/database/userdb.png b/database/userdb.png deleted file mode 100644 index 917f4596421b323f05ba15b5a7d03fcc524b7cb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26606 zcma%j1zc6%y6sjJ6a*wyK)PGpbgFbJ-QC?G4IM#2-3@cK3Qa$pA ze=k_W;)HxS?ofSWvAna$m_QqKxAU=OSW9)z>cPe0xAmUGHDd!U%VwQey`1brqUR3- zR~H@5h$Kd#w~g%Odxc2Lkcw4-mf(eq?(>jt5@4HUGzxQ*^G8 z(b3TqViAvKi3VeG7=tS)>F(R`417t+GtV)DmVMd#95}wbw3JgX2Ch~>O2wOcJ)AAZ zqO+bjaGzo-fJ~v3JeQm!B|$pHQd!iY?G3!OruPYpdcCt%o%=lqB+9WTTyb`)-Uj-V zILSeW%fk6!)+jGIH)4R~OkvjYuoGP_r=A5|x+lKfiJrvcblz0FDM2Tg)yO^oZeKc3 zK=klq1TlZgP7`{7Ei4bMe1vz@e1!>Izl1!Dx@)a440VTBN|aX&o;Z&nU(o zg1uTV15-oUfYS1fPzQL0xW2o$st+ZWnai~zyUZx9cj@|X*c*n4@%T6v8Tq-q@ELfB zG$(Uj{S(kOiMV3%4oV3+J!sx6DL3R-;H3~H{wXxT1&-q>+bjmS@ zjTOtvcjd*F)2Xy3*gzmj<1zRJh7ut;I`=5druTv_d&Z*6vy!FNL>!Ed&?5qjtX{pd zp8ICXTCCQK7GLhcvOD9s)R;abaMhic-*o8zWH&e6@!7L2k_KDq1*yY?*-TEG&#GCH zQ&VcU4_}u@YQtXTN=9)EDv}K=CwN3RHI+x?aBTV(y;t2!weh*)o0h%3HB&BJN#jH| zE$ewdK`(o1M|W`*>kNfTSEZ6t*00I7po?rmlJNDSkgPAb31gp%16u9HhyC=Jp2qlB z;6Ez(Y-`F$%V2-0R5O}n*vow3H=wG0d|xBsVf`1-giZ;woGe;;jijtEltnJ%dEKZ1 zcrk9l#lj8M7v1hde9A{Fku@-s;=Saq!c*@FX07j9_S+-(uQyT!XA^!7ak#B8X+?8- zN2|u@XbRY@hd3UgfJYrJ&zncy7a|!V3cd;h*kzhy2D_2e0`}z{{E9S5>`BO0cBRxp|7FG7sDh4P36k=UgDvWFDVL| z3A5K=Tyvx(69u~UsES8S#WC*t+b2MIIPg)C+w5H(f8e5`#FrB(L#cYVFcp-|!c_+i zu#SBUkXZYd9j<#$AJfTScZdZtr&DEBpp57LSxIKG)8Zn^hHA-H^3YgG?4J3z&Izxn zWiSFO;EHC-30X0D?IDU;U*GQ&VKHeN569cMt&gQRDICZO@-~0@eLc4Is_x=;L2%He zUq!dgtHCSq@m5*rnHe)wqEb^8)HUDMeIm7ywKlWUGqZ~}WV0wt5m$)xh6e`;@T?ih zP5CQfdM2w(o^Iy{cVCd)^k!(+JL;h_6&m3ymuaXrG9wy6pT+azA__csSU2{sB=j_V zpfU;|tSK2pQiVgw37$Wso}32H%u)x_{d|G&Lb5mUSf>I0r8>uBJ=A7v<`{wA&qYDUpqysTduje!P-Ifs4oxoo&{LH);KgR<%8_jb( z0evG?ljq5k=V~@wp02AkIbT{@!5d_ekVym$BaO|4$|t9%21aAwHd9kl<;QKb4MY3) za7tyDE_qh+vd4l5oHX_`6rm^a{5^a)B$%1g={wWp$?Hsq1o;O2I7I@^|7Q@6-wcC?kji9S85aG>k{~2DyK~+vD(9XcR5m-jQByo^^uOP6Bp_29s5B@jgxFmLZ(LC z=;>f;Dz2oYO&0x0xGt36`KxAeS_hOPRpy*g8;l$zFYAX0JzT2UrT)f`prHgoKuk<1 z;M5p=pXld&Ti_zc!pVh&g~gP(w3SuK%r?foyZUG;dHXymdEDuP5;vsa3Q=qYTJKVC zJbR$-zsH4KZt6sg7(zlqDk`pj-Vw;desFIxC}_+)95FjyqT#YN8QqS71U4>pFw`$n z2PmUoPrX@b)~Itdd-clKS~UQsUP2rh7#`7X{oT3-CwgL2M)J=SM#vKsl-E*95vFr; zHh=m=I^CH$J*|%KN10VsRaH`AHB$Egv?ZAmJ$VjFCzaZO7{(9H1sg+Akwpc;?b!53 zkBC#5%%6za{6<76udb}5NavZ3c?ghb(4^{K&O7pGsH;<#+)jh27xMghS#cz>Pi`)< zL_+(G9V&TkM|QnD^91{jkE4`R$Yj=^BZy^RtJk@n zUtN?7rulQsvS#LN1V6MRru(A_xOBG%*XPIJ^?$cR|Bu`E-zRf<FMqT|mcZAa6`S1iU{jW0=E&ycQA+p6l{)frxv&f_FN)gnpyxO~d;vS7d%XZIY;8xJMyJ#+1{ z#3vP#uN&GYy?!DGcQ4zI{rIsp+nAbYIopt|^QFFbaUaUgjyU857iT@np_TtC0R4U3 z6RYIpL?K)gWSt@%ASZA(I+{O3C8!EhWfX4Dx_3;&FfZ4E0v=~do>|Ju$wi4W1J+kf z=D@bk2)v6%Y_ljca9CL_%Z2+hTs~*Q4@Fqhke5yHUdv&EyHw@U%AXy5e$z+n<(jmH zJe)7A!fut+-C#bZ(G`J?jt=9o*L_UXF#P>?^37h;r9ADEo=lJ9a3&{MZ3udk3o?9GN|XiOe@Py-;VK=GV8XFx8|JTAg&Z6<*Xegy>^3Nr+byyVZ(n;YBV3y0)$4Ry{QUgxD(8ca z$vEt}dy_u?6**;#(R3( zBmy2u&1D$g@l|biv+oi90AmI^nwuNIUo~YJh)J?CDjh>PHZh^Wh+i}|jX*p<$H+`(b(<@TrZ~9rbXq0 zu;$y5pFg*b-dmWPyGp32JRu>_lXIi+YMxs?gqaIuvb1<|KIHh)wt%hN^>kp5t7rEl zG#v!eBr^G$lP*gR76t|jwXYSwCt+oCE;=HAj(6{(dkjOIAChprV7_2IIP-Whp2h)% zauG#*{D`c*02VYcW~LVQss$r{XxF0N9Wi(Jdah<1106d*bnJIZO7V8@gAU&}Zu#H4 zdq?2p$IOg|me%t_G%)g@iz#v)mK-Vx@$6+fHdX42AL)b@6%^V&(qgM+&7WL6$3Q7! z*}*ZMY{0&V-5LC`m+xG!#p$eHGXsvPB{cVMC{pB-4J|^Xx*ke~Rq9hHf5k|=I)t@d z06JLhkH|U@ZoDsMYHYl(&sJlH4}Sl$|N8#@d;ML?g$8XK4GoQUBj(eLI}qLXZC?e~ zL9DB5M>-TNEu!cz%h34+^AvfJaS0+`PKOej<;lz;3@!D*fi z_zmaDq>dnNqn@F}0#E$e;VMm;oh~vm@?XECY~2E@5n{+JOb=e7zCJDhFG4G?b8dIi zWCjO{_~pLDiSco;d$Ay%OBB2`8T@^GOg=^kPRG^}RrMvZ=+xShx%2Vyd2IYBh-*B; zW#i#_ztA2WOCu+6`pZA_;^(StrtZ-h3UL5rDbI{`wJcM z@$umN6Bg|sN~7%E8~H0pv-NU8i?-g?hZPQ%dHw))-uA9Ho85i7<&5pD6-%t zLo3V6CEATCL9*#Q9Shi6?BfCqX(9U|loFXYm#ZYMzkH|QCVwNrsOuN;_e8>8PWHds zGB+?Vu$25#QNhN-5{cd^{cw4C*eR&BqE&$B!uvf5hJv=*|gmX?;qu1L`FIuKgo)4*WY*4BRdYVf?eIvxfFxSu!}>dL5?I73S?x?ED+_rWydu$qqB(FTpCMDwx( ztNNdF^uJGflESO{gB1@VsVjoRTlU0MN-(fZS%=vsS_Wej3B@&^`Vp;--^sK zgU7)r*)jSVjihB{c>uigc@$kNZq)KKi+ld_?TNI#@H2;KYXI8v-~ji5F-*rJ?ktx) zNQxic+ADF|9M7$%0Jpl$2&q_DZ1l`}E{6q;%Sq;$^Z|AOP1Jv^VIc;EkCTV}Yb_^L}; z&uZA)Vg2dhOS1~KX9MV%1E_QKIt`}V(^cy`SYWx0Q1Q!?Wr1uNQ;?4h%Eu@npCGIj z6Sw7(=A|g3z&--Cveuh#!xa1=k@@54vuE7)OWnT)<{2;7j0@{;EWS5nwFVNa2i~wl z@-h{L=@kMf=VyEb+iZU+`p%2`tfQZ-2)@a=`;*uGBpkU7$zcc0WI)zMhx8r%2keZ( zyEoNpwst=FHY2A-AH2Hr{o+>}rr4WLu>4FWZ&8nS2_U+y>wI+F!TvOC~OWtZ6pC zfU@PkR#83b_^PHx32PLzWQrBeL7XX!L1nTpzvhj0VU%cUsK_@#$I?Fz)$tc~J1*+i zx!-}rB3X#vJYq2S4e~n7Y;IK6Ricblt*xy*uo#;X&N0vVvLz?;PGVeKSzNg)N*ZM- ztYJU)X8(Ka+?VoVafP{gj9BU?m?#8I$77Bz_aM}FIu#)TZE;j|Ft6!+k@ z0TLT`?;(xiX^`Zd4`ON?#&^W*Q0#7d9IuOU@E-{wJ_7b*fH^H0&;oWx{rl0r3=Ndc zwH~wb#i)0aR#@}yKF*~7Z-{|KjePrGiO)f{Uj&kVKnXORb_&!Hj`CHk7l0cR*6^KN zXVhR^R`@G5c?>omPUX|w_{-46P%0I>Y1X-)$52WvV+zpEvr_x4V??70c@&Zd;-NC& zD#w)<_p$}x#^AA27FA^RhTtnhjnbke=guHlo{rz8gsGOLngLOB@~@o0l2a16r^$g2 z>dXAvV$If{@^-Hc8do;V2?h*1pi; zV$kbx7n@4PO=X&LcwMZYoHRIr!80K)BG2k%8iLu|Z7m&e3!-WE(wD@ZnB`R;un6!t zt}|lA^Op-CJn#4@3gv(?Vq~Z&?&qLOk)R4*vZdvfB8#OCd^4q12xX9ZC!x^!q#!Pi z1y7~O!|{7xYcvx}qdI(N=;Rl85;8j`$s5M2PvU2rQ~1Tf7E6l9dV%yflL%udCBEtl zm-jn6z5NEipFh(^7W_u;-*W`@ln7ojs%A=!1JKn-drBSqb#1lwN~LM49zuZn9>(o={bW z{Jr6*g2a`kf?_o{jTaRpi8%_8x=}JDL8f4nNj%t{zyqYkJYf4QA5eabImqQYp?MSc ze+h&?D|dk*O{c=%3ZXi%F*#;$e~7x8n3D&P)XRJ1cs{3qX4K2M2O(uD&%y_r!G9)u zdg-V>+JHb<-vOBDr?2?^UoQnflv>U77C7NXO?b2O{5WSuVlaNP^d$T1+K$RtGMkVs@g=fo8qp7J=Z; z^%Lt8owxoqRT^z=25tGJoG>4MUXN4TpQ4vu-d0vjguw+RB~JASUm+n&kostgjY9KB zxz|bVL3HT>G>r1O+?C3k%C14KyO?02*LbI>7#DxEdgF4M1kz7k3UcKlc4v2u8fyg1 zKn$Dr5rkEX6x?^nk|S0a)d(~B#(I4u7XZ6DJ-klys`q@v96Z?duj&!9AXnq017I~t z^tNkV3o(pVj^ZWlB_5eIR@$PQ}sby}B z6UZoS^R~BmgVq0baCiS3`oQsocEFNjW@R81r+`jEp7gP}vo}PS0DytVT}PikyU1oV zG?y|PvN6rn?pG<~4@SOJ{XxyA={*j5 zGBX4`t+OZ?Kzd26;u+fUTA1;zu6GF4fd|L_zTsWH?#v}TEX3$M-iI}NDx~vYWn{(jli7P$94Qo3M5tv3b8}0v6MZ__AnTV zM9is1c^6<*79hx2fIM(^a>9z9+qJQ@Gz`$v(h3g`XJ=>MqQXKmdRjBHeR6T8U`N_c ztDdUw|NrI_NRa_Hf_bzV^HzJ`_+)9))D@a>8l8>DGdTVdLipX!&dx557+p7f^ME+g z1fU{eL--UQF(yOh%r;;WEInG+9V?_#Qd6f`{UIgOn>YS5+v7*c_i?shL#sH8kCa>AklW=@ih@QqHa7C9+keÐNIM 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 LL!ne275sky+YGN` diff --git a/database/userdb.sql b/database/userdb.sql deleted file mode 100644 index 88d6a99a..00000000 --- a/database/userdb.sql +++ /dev/null @@ -1,89 +0,0 @@ --- MySQL Workbench Forward Engineering - -SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; -SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; -SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; - --- ----------------------------------------------------- --- Schema userdb --- ----------------------------------------------------- - --- ----------------------------------------------------- --- Schema userdb --- ----------------------------------------------------- -CREATE SCHEMA IF NOT EXISTS `userdb` DEFAULT CHARACTER SET utf8 ; --- ----------------------------------------------------- --- Schema userdb --- ----------------------------------------------------- -USE `userdb` ; - --- ----------------------------------------------------- --- Table `userdb`.`user` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `userdb`.`user` ( - `id` INT NOT NULL AUTO_INCREMENT, - `active` VARCHAR(45) NOT NULL DEFAULT '1', - `email` VARCHAR(45) NOT NULL, - `title` VARCHAR(45) NOT NULL, - `firstname` VARCHAR(45) NOT NULL, - `lastname` VARCHAR(45) NOT NULL, - `industry` VARCHAR(45) NULL, - `organisation` VARCHAR(45) NULL, - `speciality` VARCHAR(100) NULL, - `createdDate` DATE NOT NULL, - PRIMARY KEY (`id`)) -ENGINE = InnoDB; - - --- ----------------------------------------------------- --- Table `userdb`.`credential` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `userdb`.`credential` ( - `password` VARCHAR(255) NOT NULL, - `resetPasswordToken` VARCHAR(255) NULL, - `resetPasswordExpires` BIGINT(11) NULL, - `user_id` INT NOT NULL, - PRIMARY KEY (`user_id`), - CONSTRAINT `fk_credential_user` - FOREIGN KEY (`user_id`) - REFERENCES `userdb`.`user` (`id`) - ON DELETE NO ACTION - ON UPDATE NO ACTION) -ENGINE = InnoDB; - - --- ----------------------------------------------------- --- Table `userdb`.`role` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `userdb`.`role` ( - `id` INT NOT NULL, - `name` VARCHAR(45) NOT NULL, - PRIMARY KEY (`id`)) -ENGINE = InnoDB; - - --- ----------------------------------------------------- --- Table `userdb`.`user_project_role` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `userdb`.`user_project_role` ( - `project_id` INT NOT NULL, - `user_id` INT NOT NULL, - `role_id` INT NOT NULL, - PRIMARY KEY (`user_id`, `role_id`), - INDEX `fk_user_project_role_role1_idx` (`role_id` ASC) VISIBLE, - CONSTRAINT `fk_user_project_role_user1` - FOREIGN KEY (`user_id`) - REFERENCES `userdb`.`user` (`id`) - ON DELETE NO ACTION - ON UPDATE NO ACTION, - CONSTRAINT `fk_user_project_role_role1` - FOREIGN KEY (`role_id`) - REFERENCES `userdb`.`role` (`id`) - ON DELETE NO ACTION - ON UPDATE NO ACTION) -ENGINE = InnoDB; - - -SET SQL_MODE=@OLD_SQL_MODE; -SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; -SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; diff --git a/database/userdb_121219.sql b/database/userdb_121219.sql deleted file mode 100644 index 17182485..00000000 --- a/database/userdb_121219.sql +++ /dev/null @@ -1,169 +0,0 @@ --- MySQL dump 10.13 Distrib 5.7.28, for Linux (x86_64) --- --- Host: localhost Database: userdb --- ------------------------------------------------------ --- Server version 5.7.28-0ubuntu0.16.04.2 - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; - --- --- Table structure for table `credential` --- - -DROP TABLE IF EXISTS `credential`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `credential` ( - `password` varchar(255) NOT NULL, - `resetPasswordToken` varchar(255) DEFAULT NULL, - `resetPasswordExpires` bigint(11) DEFAULT NULL, - `user_id` int(11) NOT NULL, - PRIMARY KEY (`user_id`), - CONSTRAINT `fk_credential_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `credential` --- - -LOCK TABLES `credential` WRITE; -/*!40000 ALTER TABLE `credential` DISABLE KEYS */; -INSERT INTO `credential` VALUES ('$2a$10$aaazJI39YqSX4E4IioZLyeij7PNVJOftflRoyR8cnEsJcnfiCEkJG',NULL,NULL,1),('$2a$10$mwSQgaevI6TMlADnNV4wXOHSbU0vMPFk0gXvF7k8uO7rq2nlq4i1m',NULL,NULL,2),('$2a$10$HdtI166dTpiDJ0DJ3iUdN.egdlVISeqKTdiVjK0pO3YCka4leCMqa',NULL,NULL,3),('$2a$10$.B64LLuZjih.N7mIiECfrOJreHS2wl/Tuq8Y3dQBR0Ibo7Qiyu46G',NULL,NULL,4),('$2a$10$9nr4ZPwwIFCmI9ui3cMSYOOm/4A87zEuXjUKITWrednzVgN9TkSdC',NULL,NULL,5),('$2a$10$jbh/nfxvQd.38I/7xjoPG..ouy5IEBHx/IXXKeDJRB7gyeLIXYgzS',NULL,NULL,6),('$2a$10$q.Az8ugqSV/pIJJUFL6zsuKNeOyRqkJ5VwETX5qgTrw87GFkJe.oa',NULL,NULL,7),('$2a$10$.2F7VAwc1coUEqApy0WKxOS3aa469IA/HS/5.55k9KSETXGNzHzc2',NULL,NULL,8),('$2a$10$N/pEeFf09M4JleRr7nWoqOgFE9BJ9CrCqmMwD6WVA0PIq9sn7TKzO',NULL,NULL,9),('$2a$10$aaazJI39YqSX4E4IioZLyeij7PNVJOftflRoyR8cnEsJcnfiCEkJG','4492472ebff697897f79b90221eed62c92daf4ce',1576064194107,10),('$2a$10$1IOasn3XS80V49A4R5c3terXZ.U9cw6tnulwvpH0hojFRiLDOaiGS',NULL,NULL,11),('$2a$10$PRScebJjV45CCkn0E2x0.OCasH131Mbu1.K.o.6TO3.SnAZKpGXS2',NULL,NULL,12),('$2a$10$79/hpCUI3pe7w4uKqntdC.6uvxXPj3/pqxgrE5Q8QRp7mFeeOeHeG',NULL,NULL,13),('$2a$10$AjfyBato1aDfZmRVQky24.6xHspwxmDg0OuauTlU2QE6.W/0.Nfj6',NULL,NULL,14),('$2a$10$dyJeMvCcwfFLs0T0z2aXSeQPVkXzltQhA5zzFzUUEAddjG.5bvwUW',NULL,NULL,15),('$2a$10$.B64LLuZjih.N7mIiECfrOJreHS2wl/Tuq8Y3dQBR0Ibo7Qiyu46G',NULL,NULL,16),('$2a$10$jGcRXSLA0l4cOb7Y1/c6Wehml/8O3b9J17zJbfQLfv6PCOQF3/rYq',NULL,NULL,18),('$2a$10$JIMQ7fHiQWpbEijzvViVMeSFcprSFNjQFdfPjtgZCEGtOHv.NTL/i',NULL,NULL,19); -/*!40000 ALTER TABLE `credential` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `role` --- - -DROP TABLE IF EXISTS `role`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `role` ( - `id` int(11) NOT NULL, - `name` varchar(45) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `role` --- - -LOCK TABLES `role` WRITE; -/*!40000 ALTER TABLE `role` DISABLE KEYS */; -INSERT INTO `role` VALUES (1,'ADMIN'),(2,'USER'); -/*!40000 ALTER TABLE `role` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `user` --- - -DROP TABLE IF EXISTS `user`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `user` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `active` varchar(45) NOT NULL DEFAULT '1', - `email` varchar(45) NOT NULL, - `title` varchar(45) NOT NULL, - `firstname` varchar(45) NOT NULL, - `lastname` varchar(45) NOT NULL, - `industry` varchar(45) DEFAULT NULL, - `organisation` varchar(45) DEFAULT NULL, - `speciality` varchar(100) DEFAULT NULL, - `createdDate` date NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `user` --- - -LOCK TABLES `user` WRITE; -/*!40000 ALTER TABLE `user` DISABLE KEYS */; -INSERT INTO `user` VALUES (1,'1','testi@testmann.de','Herr','Testi','Testmann','testing','HFT Stuttgart','test-driven testing','2019-12-11'),(2,'1','test@email.de','Frau','Test','Lastname','','','','2019-12-11'),(3,'1','christine.kraus@hft-stuttgart.de','Frau','Christine','Kraus','Bildung','HFT','Innovationslabor M4_LAB','2019-12-11'),(4,'1','volker.coors@hft-stuttgart.de','Prof. Dr.','Volker','Coors','Bildung','HfT Stuttgart','3D-Geodateninfrastrukturen, Visualisierung raumbezogener Daten','2019-12-11'),(5,'1','uta.bronner@hft-stuttgart.de','Prof. Dr.','Uta','Bronner','Bildung','HfT Stuttgart','Human Resources Management','2019-12-11'),(6,'1','michael.bossert@hft-stuttgart.de','Herr','Michael','Bossert','Bildung','HfT Stuttgart','m4_lab','2019-12-11'),(7,'1','patrick.wuerstle@hft-stuttgart.de','Herr','Patrick','Würstle','Bildung','HfT Stuttgart','Geoinformatik','2019-12-11'),(8,'1','thunyathep.santhanavanich@hft-stuttgart.de','Herr','Joe Thunyathep','Santhanavanich','Bildung','HfT Stuttgart','Geoinformatik','2019-12-11'),(9,'1','janto.skowronek@hft-stuttgart.de','Herr','Janto','Skowronek','','','','2019-12-11'),(10,'1','wolfgang.knopki@hft-stuttgart.de','Herr','Wolfgang','Knopki','Bildung','HfT Stuttgart','Administration','2019-12-11'),(11,'1','muddsairsharif@gmail.com','Herr','Muddsair','Sharif','','','','2019-12-11'),(12,'1','hans.mueller@hft-stuttgart.de','Herr','hans','Müller','Bildung','HfT Stuttgart','keines','2019-12-11'),(13,'1','rosanny.sihombing@hft-stuttgart.de','Frau','Rosanny','Sihombing','','','','2019-12-11'),(14,'1','82shhi1mst@hft-stuttgart.de','Frau','Himanshi','Sharma','Software Technology','HFT','','2019-12-11'),(15,'1','hft_gitlab@ericduminil.com','Herr','Eric','Duminil','zafh.net','HfT Stuttgart','urbane simulation','2019-12-11'),(16,'1','volker.coors@arcor.de','Prof. Dr.','Volker','Coors','','Herr','','2019-12-11'),(18,'1','matthias.betz@hft-stuttgart.de','Herr','Matthias','Betz','','HFT','','2019-12-11'),(19,'1','mail@khbrassel.de','Herr','Kai-Holger','Brassel','','','','2019-12-11'); -/*!40000 ALTER TABLE `user` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `user_groups` --- - -DROP TABLE IF EXISTS `user_groups`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `user_groups` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `groups_string` longtext, - `user_id` int(11) DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `user_id` (`user_id`), - CONSTRAINT `user_groups_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE -) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `user_groups` --- - -LOCK TABLES `user_groups` WRITE; -/*!40000 ALTER TABLE `user_groups` DISABLE KEYS */; -INSERT INTO `user_groups` VALUES (1,'jira-software-users,confluence-users,jira-administrators,confluence-administrators',10),(2,'jira-software-users,confluence-users',9),(3,'jira-software-users,confluence-users',1); -/*!40000 ALTER TABLE `user_groups` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `user_project_role` --- - -DROP TABLE IF EXISTS `user_project_role`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `user_project_role` ( - `project_id` int(11) NOT NULL, - `user_id` int(11) NOT NULL, - `role_id` int(11) NOT NULL, - PRIMARY KEY (`user_id`,`role_id`), - KEY `fk_user_project_role_role1_idx` (`role_id`), - CONSTRAINT `fk_user_project_role_role1` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, - CONSTRAINT `fk_user_project_role_user1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `user_project_role` --- - -LOCK TABLES `user_project_role` WRITE; -/*!40000 ALTER TABLE `user_project_role` DISABLE KEYS */; -INSERT INTO `user_project_role` VALUES (1,1,1),(1,2,2),(1,3,2),(1,4,2),(1,5,2),(1,6,2),(1,7,2),(1,8,2),(1,9,2),(1,10,2),(1,11,2),(1,12,2),(1,13,2),(1,14,2),(1,15,2),(1,16,2),(1,18,2),(1,19,2); -/*!40000 ALTER TABLE `user_project_role` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Dumping routines for database 'userdb' --- -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; - -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; - --- Dump completed on 2019-12-12 10:24:07 -- GitLab From 9a611a58e7cd33cd2ca7c713f07088668b9ed341 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Thu, 19 Mar 2020 10:22:02 +0100 Subject: [PATCH 136/161] fix routing mistake --- routes/routes-account.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/routes/routes-account.js b/routes/routes-account.js index 612dffa0..84ddbec3 100644 --- a/routes/routes-account.js +++ b/routes/routes-account.js @@ -253,7 +253,7 @@ module.exports = function (app, config, passport, i18n) { else { req.flash('success', 'Profile updated!'); } - res.redirect('lang+/account/profile'); + res.redirect('/profile'); }) } } else { @@ -292,7 +292,7 @@ module.exports = function (app, config, passport, i18n) { else { if ( newPwd != retypePwd ) { req.flash('error', "Passwords do no match. Please make sure you re-type your new password correctly.") - res.redirect(lang+'/account/security') + res.redirect('/security') } else { // update password -- GitLab From 7b175bf40149c5e571fca5de1a5b71a6cfa8eee6 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Thu, 19 Mar 2020 11:02:34 +0100 Subject: [PATCH 137/161] merged devel to testing --- database/alter.sql | 4 - database/userdb.mwb | Bin 10178 -> 0 bytes database/userdb.png | Bin 26606 -> 0 bytes database/userdb.sql | 89 ------------- database/userdb_121219.sql | 169 ------------------------ database/userdb_role.sql | 51 ++++++++ routes/api.js | 6 +- routes/methods.js | 11 +- routes/routes-account.js | 206 ++++++++++++++++++++++++++---- routes/routes-project.js | 77 +++++++++++ views/DE/account/home.pug | 6 +- views/DE/account/profile.pug | 4 +- views/DE/account/registration.pug | 14 +- views/DE/account/security.pug | 4 +- views/DE/account/services.pug | 4 +- 15 files changed, 340 insertions(+), 305 deletions(-) delete mode 100644 database/alter.sql delete mode 100644 database/userdb.mwb delete mode 100644 database/userdb.png delete mode 100644 database/userdb.sql delete mode 100644 database/userdb_121219.sql create mode 100644 database/userdb_role.sql diff --git a/database/alter.sql b/database/alter.sql deleted file mode 100644 index 80d0ad77..00000000 --- a/database/alter.sql +++ /dev/null @@ -1,4 +0,0 @@ -// add `salutation` column and alter `title` to be not mandatory -ALTER TABLE `userdb`.`user` -ADD COLUMN `salutation` VARCHAR(45) NULL DEFAULT NULL AFTER `email`, -CHANGE COLUMN `title` `title` VARCHAR(45) NULL DEFAULT NULL ; \ No newline at end of file diff --git a/database/userdb.mwb b/database/userdb.mwb deleted file mode 100644 index 6cb9b9285114f37d969bc9d563909cf62cb71fe5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10178 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 diff --git a/database/userdb.png b/database/userdb.png deleted file mode 100644 index 917f4596421b323f05ba15b5a7d03fcc524b7cb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26606 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ÐNIM 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 LL!ne275sky+YGN` diff --git a/database/userdb.sql b/database/userdb.sql deleted file mode 100644 index 88d6a99a..00000000 --- a/database/userdb.sql +++ /dev/null @@ -1,89 +0,0 @@ --- MySQL Workbench Forward Engineering - -SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; -SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; -SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; - --- ----------------------------------------------------- --- Schema userdb --- ----------------------------------------------------- - --- ----------------------------------------------------- --- Schema userdb --- ----------------------------------------------------- -CREATE SCHEMA IF NOT EXISTS `userdb` DEFAULT CHARACTER SET utf8 ; --- ----------------------------------------------------- --- Schema userdb --- ----------------------------------------------------- -USE `userdb` ; - --- ----------------------------------------------------- --- Table `userdb`.`user` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `userdb`.`user` ( - `id` INT NOT NULL AUTO_INCREMENT, - `active` VARCHAR(45) NOT NULL DEFAULT '1', - `email` VARCHAR(45) NOT NULL, - `title` VARCHAR(45) NOT NULL, - `firstname` VARCHAR(45) NOT NULL, - `lastname` VARCHAR(45) NOT NULL, - `industry` VARCHAR(45) NULL, - `organisation` VARCHAR(45) NULL, - `speciality` VARCHAR(100) NULL, - `createdDate` DATE NOT NULL, - PRIMARY KEY (`id`)) -ENGINE = InnoDB; - - --- ----------------------------------------------------- --- Table `userdb`.`credential` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `userdb`.`credential` ( - `password` VARCHAR(255) NOT NULL, - `resetPasswordToken` VARCHAR(255) NULL, - `resetPasswordExpires` BIGINT(11) NULL, - `user_id` INT NOT NULL, - PRIMARY KEY (`user_id`), - CONSTRAINT `fk_credential_user` - FOREIGN KEY (`user_id`) - REFERENCES `userdb`.`user` (`id`) - ON DELETE NO ACTION - ON UPDATE NO ACTION) -ENGINE = InnoDB; - - --- ----------------------------------------------------- --- Table `userdb`.`role` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `userdb`.`role` ( - `id` INT NOT NULL, - `name` VARCHAR(45) NOT NULL, - PRIMARY KEY (`id`)) -ENGINE = InnoDB; - - --- ----------------------------------------------------- --- Table `userdb`.`user_project_role` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `userdb`.`user_project_role` ( - `project_id` INT NOT NULL, - `user_id` INT NOT NULL, - `role_id` INT NOT NULL, - PRIMARY KEY (`user_id`, `role_id`), - INDEX `fk_user_project_role_role1_idx` (`role_id` ASC) VISIBLE, - CONSTRAINT `fk_user_project_role_user1` - FOREIGN KEY (`user_id`) - REFERENCES `userdb`.`user` (`id`) - ON DELETE NO ACTION - ON UPDATE NO ACTION, - CONSTRAINT `fk_user_project_role_role1` - FOREIGN KEY (`role_id`) - REFERENCES `userdb`.`role` (`id`) - ON DELETE NO ACTION - ON UPDATE NO ACTION) -ENGINE = InnoDB; - - -SET SQL_MODE=@OLD_SQL_MODE; -SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; -SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; diff --git a/database/userdb_121219.sql b/database/userdb_121219.sql deleted file mode 100644 index 17182485..00000000 --- a/database/userdb_121219.sql +++ /dev/null @@ -1,169 +0,0 @@ --- MySQL dump 10.13 Distrib 5.7.28, for Linux (x86_64) --- --- Host: localhost Database: userdb --- ------------------------------------------------------ --- Server version 5.7.28-0ubuntu0.16.04.2 - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; - --- --- Table structure for table `credential` --- - -DROP TABLE IF EXISTS `credential`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `credential` ( - `password` varchar(255) NOT NULL, - `resetPasswordToken` varchar(255) DEFAULT NULL, - `resetPasswordExpires` bigint(11) DEFAULT NULL, - `user_id` int(11) NOT NULL, - PRIMARY KEY (`user_id`), - CONSTRAINT `fk_credential_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `credential` --- - -LOCK TABLES `credential` WRITE; -/*!40000 ALTER TABLE `credential` DISABLE KEYS */; -INSERT INTO `credential` VALUES ('$2a$10$aaazJI39YqSX4E4IioZLyeij7PNVJOftflRoyR8cnEsJcnfiCEkJG',NULL,NULL,1),('$2a$10$mwSQgaevI6TMlADnNV4wXOHSbU0vMPFk0gXvF7k8uO7rq2nlq4i1m',NULL,NULL,2),('$2a$10$HdtI166dTpiDJ0DJ3iUdN.egdlVISeqKTdiVjK0pO3YCka4leCMqa',NULL,NULL,3),('$2a$10$.B64LLuZjih.N7mIiECfrOJreHS2wl/Tuq8Y3dQBR0Ibo7Qiyu46G',NULL,NULL,4),('$2a$10$9nr4ZPwwIFCmI9ui3cMSYOOm/4A87zEuXjUKITWrednzVgN9TkSdC',NULL,NULL,5),('$2a$10$jbh/nfxvQd.38I/7xjoPG..ouy5IEBHx/IXXKeDJRB7gyeLIXYgzS',NULL,NULL,6),('$2a$10$q.Az8ugqSV/pIJJUFL6zsuKNeOyRqkJ5VwETX5qgTrw87GFkJe.oa',NULL,NULL,7),('$2a$10$.2F7VAwc1coUEqApy0WKxOS3aa469IA/HS/5.55k9KSETXGNzHzc2',NULL,NULL,8),('$2a$10$N/pEeFf09M4JleRr7nWoqOgFE9BJ9CrCqmMwD6WVA0PIq9sn7TKzO',NULL,NULL,9),('$2a$10$aaazJI39YqSX4E4IioZLyeij7PNVJOftflRoyR8cnEsJcnfiCEkJG','4492472ebff697897f79b90221eed62c92daf4ce',1576064194107,10),('$2a$10$1IOasn3XS80V49A4R5c3terXZ.U9cw6tnulwvpH0hojFRiLDOaiGS',NULL,NULL,11),('$2a$10$PRScebJjV45CCkn0E2x0.OCasH131Mbu1.K.o.6TO3.SnAZKpGXS2',NULL,NULL,12),('$2a$10$79/hpCUI3pe7w4uKqntdC.6uvxXPj3/pqxgrE5Q8QRp7mFeeOeHeG',NULL,NULL,13),('$2a$10$AjfyBato1aDfZmRVQky24.6xHspwxmDg0OuauTlU2QE6.W/0.Nfj6',NULL,NULL,14),('$2a$10$dyJeMvCcwfFLs0T0z2aXSeQPVkXzltQhA5zzFzUUEAddjG.5bvwUW',NULL,NULL,15),('$2a$10$.B64LLuZjih.N7mIiECfrOJreHS2wl/Tuq8Y3dQBR0Ibo7Qiyu46G',NULL,NULL,16),('$2a$10$jGcRXSLA0l4cOb7Y1/c6Wehml/8O3b9J17zJbfQLfv6PCOQF3/rYq',NULL,NULL,18),('$2a$10$JIMQ7fHiQWpbEijzvViVMeSFcprSFNjQFdfPjtgZCEGtOHv.NTL/i',NULL,NULL,19); -/*!40000 ALTER TABLE `credential` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `role` --- - -DROP TABLE IF EXISTS `role`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `role` ( - `id` int(11) NOT NULL, - `name` varchar(45) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `role` --- - -LOCK TABLES `role` WRITE; -/*!40000 ALTER TABLE `role` DISABLE KEYS */; -INSERT INTO `role` VALUES (1,'ADMIN'),(2,'USER'); -/*!40000 ALTER TABLE `role` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `user` --- - -DROP TABLE IF EXISTS `user`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `user` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `active` varchar(45) NOT NULL DEFAULT '1', - `email` varchar(45) NOT NULL, - `title` varchar(45) NOT NULL, - `firstname` varchar(45) NOT NULL, - `lastname` varchar(45) NOT NULL, - `industry` varchar(45) DEFAULT NULL, - `organisation` varchar(45) DEFAULT NULL, - `speciality` varchar(100) DEFAULT NULL, - `createdDate` date NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `user` --- - -LOCK TABLES `user` WRITE; -/*!40000 ALTER TABLE `user` DISABLE KEYS */; -INSERT INTO `user` VALUES (1,'1','testi@testmann.de','Herr','Testi','Testmann','testing','HFT Stuttgart','test-driven testing','2019-12-11'),(2,'1','test@email.de','Frau','Test','Lastname','','','','2019-12-11'),(3,'1','christine.kraus@hft-stuttgart.de','Frau','Christine','Kraus','Bildung','HFT','Innovationslabor M4_LAB','2019-12-11'),(4,'1','volker.coors@hft-stuttgart.de','Prof. Dr.','Volker','Coors','Bildung','HfT Stuttgart','3D-Geodateninfrastrukturen, Visualisierung raumbezogener Daten','2019-12-11'),(5,'1','uta.bronner@hft-stuttgart.de','Prof. Dr.','Uta','Bronner','Bildung','HfT Stuttgart','Human Resources Management','2019-12-11'),(6,'1','michael.bossert@hft-stuttgart.de','Herr','Michael','Bossert','Bildung','HfT Stuttgart','m4_lab','2019-12-11'),(7,'1','patrick.wuerstle@hft-stuttgart.de','Herr','Patrick','Würstle','Bildung','HfT Stuttgart','Geoinformatik','2019-12-11'),(8,'1','thunyathep.santhanavanich@hft-stuttgart.de','Herr','Joe Thunyathep','Santhanavanich','Bildung','HfT Stuttgart','Geoinformatik','2019-12-11'),(9,'1','janto.skowronek@hft-stuttgart.de','Herr','Janto','Skowronek','','','','2019-12-11'),(10,'1','wolfgang.knopki@hft-stuttgart.de','Herr','Wolfgang','Knopki','Bildung','HfT Stuttgart','Administration','2019-12-11'),(11,'1','muddsairsharif@gmail.com','Herr','Muddsair','Sharif','','','','2019-12-11'),(12,'1','hans.mueller@hft-stuttgart.de','Herr','hans','Müller','Bildung','HfT Stuttgart','keines','2019-12-11'),(13,'1','rosanny.sihombing@hft-stuttgart.de','Frau','Rosanny','Sihombing','','','','2019-12-11'),(14,'1','82shhi1mst@hft-stuttgart.de','Frau','Himanshi','Sharma','Software Technology','HFT','','2019-12-11'),(15,'1','hft_gitlab@ericduminil.com','Herr','Eric','Duminil','zafh.net','HfT Stuttgart','urbane simulation','2019-12-11'),(16,'1','volker.coors@arcor.de','Prof. Dr.','Volker','Coors','','Herr','','2019-12-11'),(18,'1','matthias.betz@hft-stuttgart.de','Herr','Matthias','Betz','','HFT','','2019-12-11'),(19,'1','mail@khbrassel.de','Herr','Kai-Holger','Brassel','','','','2019-12-11'); -/*!40000 ALTER TABLE `user` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `user_groups` --- - -DROP TABLE IF EXISTS `user_groups`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `user_groups` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `groups_string` longtext, - `user_id` int(11) DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `user_id` (`user_id`), - CONSTRAINT `user_groups_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE -) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `user_groups` --- - -LOCK TABLES `user_groups` WRITE; -/*!40000 ALTER TABLE `user_groups` DISABLE KEYS */; -INSERT INTO `user_groups` VALUES (1,'jira-software-users,confluence-users,jira-administrators,confluence-administrators',10),(2,'jira-software-users,confluence-users',9),(3,'jira-software-users,confluence-users',1); -/*!40000 ALTER TABLE `user_groups` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `user_project_role` --- - -DROP TABLE IF EXISTS `user_project_role`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `user_project_role` ( - `project_id` int(11) NOT NULL, - `user_id` int(11) NOT NULL, - `role_id` int(11) NOT NULL, - PRIMARY KEY (`user_id`,`role_id`), - KEY `fk_user_project_role_role1_idx` (`role_id`), - CONSTRAINT `fk_user_project_role_role1` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, - CONSTRAINT `fk_user_project_role_user1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `user_project_role` --- - -LOCK TABLES `user_project_role` WRITE; -/*!40000 ALTER TABLE `user_project_role` DISABLE KEYS */; -INSERT INTO `user_project_role` VALUES (1,1,1),(1,2,2),(1,3,2),(1,4,2),(1,5,2),(1,6,2),(1,7,2),(1,8,2),(1,9,2),(1,10,2),(1,11,2),(1,12,2),(1,13,2),(1,14,2),(1,15,2),(1,16,2),(1,18,2),(1,19,2); -/*!40000 ALTER TABLE `user_project_role` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Dumping routines for database 'userdb' --- -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; - -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; - --- Dump completed on 2019-12-12 10:24:07 diff --git a/database/userdb_role.sql b/database/userdb_role.sql new file mode 100644 index 00000000..be18e685 --- /dev/null +++ b/database/userdb_role.sql @@ -0,0 +1,51 @@ +-- MySQL dump 10.13 Distrib 8.0.15, for Win64 (x86_64) +-- +-- Host: localhost Database: userdb +-- ------------------------------------------------------ +-- Server version 8.0.15 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; + SET NAMES utf8 ; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `role` +-- + +DROP TABLE IF EXISTS `role`; +/*!40101 SET @saved_cs_client = @@character_set_client */; + SET character_set_client = utf8mb4 ; +CREATE TABLE `role` ( + `id` int(11) NOT NULL, + `name` varchar(45) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `role` +-- + +LOCK TABLES `role` WRITE; +/*!40000 ALTER TABLE `role` DISABLE KEYS */; +INSERT INTO `role` VALUES (1,'ADMIN'),(2,'USER'),(3,'OVERVIEW_CREATOR'); +/*!40000 ALTER TABLE `role` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2020-03-19 9:21:39 diff --git a/routes/api.js b/routes/api.js index ddedf46c..5a6ee24d 100644 --- a/routes/api.js +++ b/routes/api.js @@ -7,13 +7,13 @@ module.exports = function (app) { app.get('/api/v1/profile', function (req, res) { if (req.isAuthenticated()) { - // read data based on ID - dbconn.user.query('SELECT title, firstname, lastname, email, industry, organisation, speciality FROM user WHERE email="'+req.user.email+'"', function (err, rows, fields) { + // read data based on email + dbconn.user.query('SELECT * FROM user WHERE email="'+req.user.email+'"', function (err, rows, fields) { if (err) throw err res.send(rows[0]) }) } else { - res.redirect('/account/'); + res.send('authentication required'); } }); diff --git a/routes/methods.js b/routes/methods.js index d377d61c..59709d7d 100644 --- a/routes/methods.js +++ b/routes/methods.js @@ -132,6 +132,12 @@ var methods = { callback(rows, err); }); }, + addUserProjectRole: function(data, callback) { + dbconn.user.query('INSERT INTO user_project_role SET ?', data, function (err, results, fields){ + if (err) throw err; + callback(err); + }) + }, // ======================= project db ======================= getAllProjects: function(callback) { dbconn.project.query('CALL getAllprojects', function (err, rows, fields){ @@ -146,9 +152,10 @@ var methods = { }) }, addProjectOverview: function(data, callback) { - dbconn.project.query('INSERT INTO project_overview SET ?', data, function (err, rows, fields){ + dbconn.project.query('INSERT INTO project_overview SET ?', data, function (err, results, fields){ if (err) throw err; - callback(err); + //console.log(results.insertId) + callback(results.insertId, err); }) } }; diff --git a/routes/routes-account.js b/routes/routes-account.js index edba628a..7984d39e 100644 --- a/routes/routes-account.js +++ b/routes/routes-account.js @@ -9,7 +9,7 @@ const salt = 64; // salt length // forgot pwd const async = require('async') const crypto = require('crypto') -const mailer = require('./mailer') +const nodemailer = require('nodemailer') module.exports = function (app, config, passport, i18n) { @@ -74,17 +74,28 @@ module.exports = function (app, config, passport, i18n) { res.status(200).send(spMetadata); } ); - - // ================ test i18n ================== - i18n.setLocale('de'); - app.get('/de', function(req, res) { - var greeting = i18n.__('Hello World') - res.send(greeting) + + // ======== NODEMAILER ==================== + var smtpTransport = nodemailer.createTransport({ + host: config.mailer.host, + secureConnection: config.mailer.secureConnection, + port: config.mailer.port, + auth: { + user: config.mailer.authUser, + pass: config.mailer.authPass + }, + tls: { + ciphers: config.mailer.tlsCiphers + } }); - var lang = 'DE' + var mailOptions = { + to: "", + from: config.mailer.from, + subject: "", + text: "" + }; - // ======== APP ROUTES - ACCOUNT ==================== var updatePasswordMailSubject = "Ihr Passwort für das Transferportal wurde gespeichert." var mailSignature = "Mit den besten Grüßen,\ndas Transferportal-Team der HFT Stuttgart\n\n"+ "Transferportal der Hochschule für Technik Stuttgart\n"+ @@ -93,7 +104,17 @@ module.exports = function (app, config, passport, i18n) { "m4lab@hft-stuttgart.de\n"+ "https://transfer.hft-stuttgart.de" var updatePasswordMailContent = "Lieber Nutzer,\n\n"+"Ihr Passwort wurde erfolgreich geändert.\n\n"+mailSignature + + // ================ test i18n ================== + i18n.setLocale('de'); + app.get('/de', function(req, res) { + var greeting = i18n.__('Hello World') + res.send(greeting) + }); + + var lang = 'DE' + // ======== APP ROUTES - ACCOUNT ==================== app.get('/', function (req, res) { if (req.isAuthenticated()) { methods.getUserByEmail(req.user.email, function(data, err){ @@ -124,7 +145,7 @@ module.exports = function (app, config, passport, i18n) { if (req.user == null) { return res.redirect('/account/'); } - + req.user.nameID = req.user.id; req.user.nameIDFormat = req.user.idFormat; return samlStrategy.logout(req, function(err, uri) { @@ -311,11 +332,11 @@ module.exports = function (app, config, passport, i18n) { else { //req.flash('success', "Pasword updated!") req.flash('success', "Passwort aktualisiert!") - mailer.options.to = req.user.email + mailOptions.to = req.user.email //mailOptions.subject = "Your M4_LAB Password has been updated." - mailer.options.subject = updatePasswordMailSubject - mailer.options.text = updatePasswordMailContent - mailer.transport.sendMail(mailer.options, function(err) { + mailOptions.subject = updatePasswordMailSubject + mailOptions.text = updatePasswordMailContent + smtpTransport.sendMail(mailOptions, function(err) { if (err) { console.log(err) } @@ -386,10 +407,10 @@ module.exports = function (app, config, passport, i18n) { }); // send email - mailer.options.to = emailAddress; - mailer.options.subject = emailSubject; - mailer.options.text = emailContent; - mailer.transport.sendMail(mailer.options, function(err) { + mailOptions.to = emailAddress; + mailOptions.subject = emailSubject; + mailOptions.text = emailContent; + smtpTransport.sendMail(mailOptions, function(err) { done(err, 'done'); }); } @@ -449,10 +470,10 @@ module.exports = function (app, config, passport, i18n) { //req.flash('success', "Your pasword has been updated.") req.flash('success', "Passwort aktualisiert!") // send notifiaction email - mailer.options.to = user.email - mailer.options.subject = updatePasswordMailSubject - mailer.options.text = updatePasswordMailContent - mailer.transport.sendMail(mailer.options, function(err) { + mailOptions.to = user.email + mailOptions.subject = updatePasswordMailSubject + mailOptions.text = updatePasswordMailContent + smtpTransport.sendMail(mailOptions, function(err) { if (err) { console.log(err) } @@ -530,5 +551,146 @@ module.exports = function (app, config, passport, i18n) { } }) }) + app.get('/mailinglists', function (req, res) { + async.waterfall([ + function(done) { + methods.getAllMailinglists(function(mailinglistOverview, err) { + if (!err) { + done(err, mailinglistOverview) + } + }) + }, + // create JSON object of mailinglists for front-end + function(mailinglistOverview, done) { + var allMailingLists = [] // JSON object + for (let i = 0; i < mailinglistOverview.length; i++) { + // add data to JSON object + allMailingLists.push({ + id: mailinglistOverview[i].id, + name: mailinglistOverview[i].name, + src: mailinglistOverview[i].src, + projectstatus: mailinglistOverview[i].projectstatus, + project_title: mailinglistOverview[i].project_title + }); + } + + res.render(lang+'/mailinglists', { + isUserAuthenticated: req.isAuthenticated(), + user: req.user, + mailinglists: allMailingLists + }); + } + ]) + }); + + // ======== APP ROUTES - PROJECT ==================== + app.get('/project', function (req, res) { + async.waterfall([ + // get all projects from projectdb + function(done) { + methods.getAllProjects(function(projectsOverview, err) { + if (!err) { + done(err, projectsOverview) + } + }) + }, + // create JSON object for front-end + function(projectsOverview, done) { + var activeProjects = [] + var nonActiveProjects = [] + + for (var i = 0; i < projectsOverview.length; i++) { + var project = { + id: projectsOverview[i].id, + logo: projectsOverview[i].logo, + akronym: projectsOverview[i].pname, + title: projectsOverview[i].title, + summary: projectsOverview[i].onelinesummary, + category: projectsOverview[i].category, + cp: projectsOverview[i].contact_email, + gitlab: projectsOverview[i].gitlab + } + if (projectsOverview[i].projectstatus == 0) { + nonActiveProjects.push(project) + } + else if (projectsOverview[i].projectstatus == 1) { + activeProjects.push(project) + } + } + + // render the page + if (req.isAuthenticated()) { + res.render(lang+'/project/projects', { + isUserAuthenticated: true, + nonActive: nonActiveProjects, + active: activeProjects + }); + } + else { + res.render(lang+'/project/projects', { + isUserAuthenticated: false, + nonActive: nonActiveProjects, + active: activeProjects + }); + } + } + ]) + }) + + app.get('/addprojectoverview', function (req, res) { + if (req.isAuthenticated()) { + res.render(lang+'/project/addProjectOverview') + } + else { + res.redirect('/account/login') + } + }) + + app.post('/addprojectoverview', function (req, res) { + if (req.isAuthenticated()) { + var wiki = 0 + if (req.body.wiki) + wiki = 1 + + var projectOverviewData = { + pname: req.body.pname, + title: req.body.title, + onelinesummary: req.body.summary, + category: req.body.category, + logo: req.body.logo, + gitlab: req.body.gitlabURL, + wiki: wiki, + overview: req.body.overview, + question: req.body.question, + approach: req.body.approach, + result: req.body.result, + keywords: req.body.keywords, + announcement: req.body.announcement, + term: req.body.term, + further_details: req.body.furtherDetails, + website: req.body.website, + src: req.body.src, + caption: req.body.caption, + contact_firstname: req.body.contactFirstname, + contact_lastname: req.body.contactLastname, + contact_email: req.body.contactEmail, + leader_firstname: req.body.leaderFirstname, + leader_lastname: req.body.leaderLastname, + leader_email: req.body.leaderEmail + } + + methods.addProjectOverview(projectOverviewData, function(err){ + if (err) { + //req.flash('error', "Failed") + req.flash('error', "Fehlgeschlagen") + res.redirect('/account/addProjectOverview'); + } + else { + req.flash('success', 'Your project has been created.') + res.redirect('/account/project'); + } + }) + } + }) }; \ No newline at end of file diff --git a/routes/routes-project.js b/routes/routes-project.js index f05c4c06..f68aecdc 100644 --- a/routes/routes-project.js +++ b/routes/routes-project.js @@ -146,6 +146,83 @@ module.exports = function (app) { } }) + app.post('/addprojectoverview', function (req, res) { + if (req.isAuthenticated()) { + var wiki = 0 + if (req.body.wiki) + wiki = 1 + + var projectTerm = req.body.termForm + " - " + req.body.termTo + var projectOverviewData = { + pname: req.body.pname, + title: req.body.title, + onelinesummary: req.body.summary, + category: req.body.category, + logo: req.body.logo, + gitlab: req.body.gitlabURL, + wiki: wiki, + overview: req.body.overview, + question: req.body.question, + approach: req.body.approach, + result: req.body.result, + keywords: req.body.keywords, + announcement: req.body.announcement, + term: projectTerm, + further_details: req.body.furtherDetails, + website: req.body.website, + src: req.body.src, + caption: req.body.caption, + contact_lastname: req.body.contactName, + contact_email: req.body.contactEmail, + leader_lastname: req.body.leaderName, + leader_email: req.body.leaderEmail + } + + /* RS: Temporary solution while Project DB is still in early phase. + When User DB and Project DB are integrated and quite stabil, this operation should be done in 1 transaction. + */ + var userId // todo: make this global variable? + async.waterfall([ + // get userId by email from userdb + function(done) { + methods.getUserIdByEmail(req.user.email, function(id, err) { + if (!err) { + userId = id + done(err) + } + }) + }, + // add project overview + function(done) { + methods.addProjectOverview(projectOverviewData, function(projectOverviewId, err){ + if (!err) { + done(err, projectOverviewId) + } + }) + }, + // assign the created overview to logged-in user + function(projectOverviewId, done) { + var userProjectRoleData = { + project_id: projectOverviewId, + user_id: userId, + role_id: 3 // OVERVIEW_CREATOR + } + methods.addUserProjectRole(userProjectRoleData, function(userProjects, err) { + if (err) { + //req.flash('error', "Failed") + req.flash('error', "Fehlgeschlagen") + res.redirect('/addProjectOverview'); + } + else { + req.flash('success', 'Your project has been created.') + res.redirect('/project'); + } + }) + } + ]) + } + }) + app.get('/updateprojectoverview', function (req, res) { // only their own project }) diff --git a/views/DE/account/home.pug b/views/DE/account/home.pug index f08d9ee7..58b2427c 100644 --- a/views/DE/account/home.pug +++ b/views/DE/account/home.pug @@ -34,9 +34,9 @@ html(lang="de") h5 span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") p content goes here diff --git a/views/DE/account/profile.pug b/views/DE/account/profile.pug index e4d7e260..32a2aff1 100644 --- a/views/DE/account/profile.pug +++ b/views/DE/account/profile.pug @@ -35,8 +35,8 @@ html(lang="de") span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") a(class="nav-link" href="#" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes for success in successes diff --git a/views/DE/account/registration.pug b/views/DE/account/registration.pug index 077e4138..108afdef 100644 --- a/views/DE/account/registration.pug +++ b/views/DE/account/registration.pug @@ -49,10 +49,10 @@ html(lang="de") h5(class="mb-3 font-weight-bold") Anmeldedaten div(class='form-row') div(class='form-group col-md-6') - input#inputEmail(name="inputEmail", type="email", class="form-control", placeholder="E-Mail-Adresse*" required) + input#inputEmail(name="inputEmail", type="email", class="form-control", placeholder="E-Mail-Adresse*", maxlength="45" required) span#emailWarning(class='warning') div(class="form-group col-md-6") - input#inputPassword(name="inputPassword", type="password", class="form-control", data-toggle="password", placeholder="Passwort*" required) + input#inputPassword(name="inputPassword", type="password", class="form-control", data-toggle="password", placeholder="Passwort*", maxlength="45" required) span#passwordWarning(class='warning') h5(class="mb-3 font-weight-bold") Benutzerprofil div(class="form-row") @@ -70,15 +70,15 @@ html(lang="de") option(value="Dipl.-Ing.") Dipl.-Ing. option(value="etc.") etc. div(class='form-group col-md-4') - input#inputFirstname(name="inputFirstname", type="text", class="form-control", placeholder="Vorname*" required) + input#inputFirstname(name="inputFirstname", type="text", class="form-control", placeholder="Vorname*", maxlength="45" required) div(class='form-group col-md-4') - input#inputLastname(name="inputLastname", type="text", class="form-control", placeholder="Nachname*" required) + input#inputLastname(name="inputLastname", type="text", class="form-control", placeholder="Nachname*", maxlength="45" required) div(class="form-group") - input#inputOrganisation(name="inputOrganisation", type="text", class="form-control", placeholder="Unternehmen") + input#inputOrganisation(name="inputOrganisation", type="text", class="form-control", placeholder="Unternehmen", maxlength="45") div(class="form-group") - input#inputIndustry(name="inputIndustry", type="text", class="form-control", placeholder="Branche") + input#inputIndustry(name="inputIndustry", type="text", class="form-control", placeholder="Branche", maxlength="45") div(class="form-group") - input#inputSpeciality(name="inputSpeciality", type="text", class="form-control", placeholder="Fachgebiete") + input#inputSpeciality(name="inputSpeciality", type="text", class="form-control", placeholder="Fachgebiete", maxlength="100") p * Pflichtfeld input#submitBtn(type="submit", class="btn btn-outline-dark btn-block", value="Senden" disabled) br diff --git a/views/DE/account/security.pug b/views/DE/account/security.pug index 6db09112..560d32bc 100644 --- a/views/DE/account/security.pug +++ b/views/DE/account/security.pug @@ -37,9 +37,9 @@ html(lang="de") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil a(class="nav-link" href="#" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes for success in successes diff --git a/views/DE/account/services.pug b/views/DE/account/services.pug index 6ab101f3..55f5a1b6 100644 --- a/views/DE/account/services.pug +++ b/views/DE/account/services.pug @@ -34,8 +34,8 @@ html(lang="de") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen a(class="nav-link" href="#" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes -- GitLab From 8bedc51ff337d4e00d3a5c4114e196626c9c901e Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Thu, 19 Mar 2020 11:19:16 +0100 Subject: [PATCH 138/161] cleanup merge --- routes/routes-account.js | 168 +-------------------------------------- routes/routes-project.js | 6 +- 2 files changed, 6 insertions(+), 168 deletions(-) diff --git a/routes/routes-account.js b/routes/routes-account.js index 7984d39e..16bf5c8c 100644 --- a/routes/routes-account.js +++ b/routes/routes-account.js @@ -9,7 +9,7 @@ const salt = 64; // salt length // forgot pwd const async = require('async') const crypto = require('crypto') -const nodemailer = require('nodemailer') +const nodemailer = require('./mailer') module.exports = function (app, config, passport, i18n) { @@ -75,27 +75,6 @@ module.exports = function (app, config, passport, i18n) { } ); - // ======== NODEMAILER ==================== - var smtpTransport = nodemailer.createTransport({ - host: config.mailer.host, - secureConnection: config.mailer.secureConnection, - port: config.mailer.port, - auth: { - user: config.mailer.authUser, - pass: config.mailer.authPass - }, - tls: { - ciphers: config.mailer.tlsCiphers - } - }); - - var mailOptions = { - to: "", - from: config.mailer.from, - subject: "", - text: "" - }; - var updatePasswordMailSubject = "Ihr Passwort für das Transferportal wurde gespeichert." var mailSignature = "Mit den besten Grüßen,\ndas Transferportal-Team der HFT Stuttgart\n\n"+ "Transferportal der Hochschule für Technik Stuttgart\n"+ @@ -274,7 +253,7 @@ module.exports = function (app, config, passport, i18n) { else { req.flash('success', 'Profile updated!'); } - res.redirect('lang+/account/profile'); + res.redirect('/account/profile'); }) } } else { @@ -313,7 +292,7 @@ module.exports = function (app, config, passport, i18n) { else { if ( newPwd != retypePwd ) { req.flash('error', "Passwords do no match. Please make sure you re-type your new password correctly.") - res.redirect(lang+'/account/security') + res.redirect('/account/security') } else { // update password @@ -551,146 +530,5 @@ module.exports = function (app, config, passport, i18n) { } }) }) - app.get('/mailinglists', function (req, res) { - async.waterfall([ - function(done) { - methods.getAllMailinglists(function(mailinglistOverview, err) { - if (!err) { - done(err, mailinglistOverview) - } - }) - }, - // create JSON object of mailinglists for front-end - function(mailinglistOverview, done) { - var allMailingLists = [] // JSON object - for (let i = 0; i < mailinglistOverview.length; i++) { - // add data to JSON object - allMailingLists.push({ - id: mailinglistOverview[i].id, - name: mailinglistOverview[i].name, - src: mailinglistOverview[i].src, - projectstatus: mailinglistOverview[i].projectstatus, - project_title: mailinglistOverview[i].project_title - }); - } - - res.render(lang+'/mailinglists', { - isUserAuthenticated: req.isAuthenticated(), - user: req.user, - mailinglists: allMailingLists - }); - } - ]) - }); - - // ======== APP ROUTES - PROJECT ==================== - app.get('/project', function (req, res) { - async.waterfall([ - // get all projects from projectdb - function(done) { - methods.getAllProjects(function(projectsOverview, err) { - if (!err) { - done(err, projectsOverview) - } - }) - }, - // create JSON object for front-end - function(projectsOverview, done) { - var activeProjects = [] - var nonActiveProjects = [] - - for (var i = 0; i < projectsOverview.length; i++) { - var project = { - id: projectsOverview[i].id, - logo: projectsOverview[i].logo, - akronym: projectsOverview[i].pname, - title: projectsOverview[i].title, - summary: projectsOverview[i].onelinesummary, - category: projectsOverview[i].category, - cp: projectsOverview[i].contact_email, - gitlab: projectsOverview[i].gitlab - } - if (projectsOverview[i].projectstatus == 0) { - nonActiveProjects.push(project) - } - else if (projectsOverview[i].projectstatus == 1) { - activeProjects.push(project) - } - } - - // render the page - if (req.isAuthenticated()) { - res.render(lang+'/project/projects', { - isUserAuthenticated: true, - nonActive: nonActiveProjects, - active: activeProjects - }); - } - else { - res.render(lang+'/project/projects', { - isUserAuthenticated: false, - nonActive: nonActiveProjects, - active: activeProjects - }); - } - } - ]) - }) - - app.get('/addprojectoverview', function (req, res) { - if (req.isAuthenticated()) { - res.render(lang+'/project/addProjectOverview') - } - else { - res.redirect('/account/login') - } - }) - - app.post('/addprojectoverview', function (req, res) { - if (req.isAuthenticated()) { - var wiki = 0 - if (req.body.wiki) - wiki = 1 - - var projectOverviewData = { - pname: req.body.pname, - title: req.body.title, - onelinesummary: req.body.summary, - category: req.body.category, - logo: req.body.logo, - gitlab: req.body.gitlabURL, - wiki: wiki, - overview: req.body.overview, - question: req.body.question, - approach: req.body.approach, - result: req.body.result, - keywords: req.body.keywords, - announcement: req.body.announcement, - term: req.body.term, - further_details: req.body.furtherDetails, - website: req.body.website, - src: req.body.src, - caption: req.body.caption, - contact_firstname: req.body.contactFirstname, - contact_lastname: req.body.contactLastname, - contact_email: req.body.contactEmail, - leader_firstname: req.body.leaderFirstname, - leader_lastname: req.body.leaderLastname, - leader_email: req.body.leaderEmail - } - - methods.addProjectOverview(projectOverviewData, function(err){ - if (err) { - //req.flash('error', "Failed") - req.flash('error', "Fehlgeschlagen") - res.redirect('/account/addProjectOverview'); - } - else { - req.flash('success', 'Your project has been created.') - res.redirect('/account/project'); - } - }) - } - }) }; \ No newline at end of file diff --git a/routes/routes-project.js b/routes/routes-project.js index f68aecdc..bea8584c 100644 --- a/routes/routes-project.js +++ b/routes/routes-project.js @@ -100,7 +100,7 @@ module.exports = function (app) { } }) - app.post('/addprojectoverview', function (req, res) { + app.post('/addprojectoverview__', function (req, res) { if (req.isAuthenticated()) { var wiki = 0 if (req.body.wiki) @@ -136,7 +136,7 @@ module.exports = function (app) { if (err) { //req.flash('error', "Failed") req.flash('error', "Fehlgeschlagen") - res.redirect('/addProjectOverview'); + res.redirect('/account/addProjectOverview'); } else { req.flash('success', 'Your project has been created.') @@ -211,7 +211,7 @@ module.exports = function (app) { if (err) { //req.flash('error', "Failed") req.flash('error', "Fehlgeschlagen") - res.redirect('/addProjectOverview'); + res.redirect('/account/addProjectOverview'); } else { req.flash('success', 'Your project has been created.') -- GitLab From 731ca04c0975063dae2cdbd728db8dd1c4a36d60 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Thu, 19 Mar 2020 11:22:45 +0100 Subject: [PATCH 139/161] menu links adapted account --- views/DE/account/home.pug | 6 +++--- views/DE/account/profile.pug | 4 ++-- views/DE/account/security.pug | 4 ++-- views/DE/account/services.pug | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/views/DE/account/home.pug b/views/DE/account/home.pug index 58b2427c..f08d9ee7 100644 --- a/views/DE/account/home.pug +++ b/views/DE/account/home.pug @@ -34,9 +34,9 @@ html(lang="de") h5 span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") p content goes here diff --git a/views/DE/account/profile.pug b/views/DE/account/profile.pug index 32a2aff1..e4d7e260 100644 --- a/views/DE/account/profile.pug +++ b/views/DE/account/profile.pug @@ -35,8 +35,8 @@ html(lang="de") span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") a(class="nav-link" href="#" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes for success in successes diff --git a/views/DE/account/security.pug b/views/DE/account/security.pug index 560d32bc..6db09112 100644 --- a/views/DE/account/security.pug +++ b/views/DE/account/security.pug @@ -37,9 +37,9 @@ html(lang="de") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil a(class="nav-link" href="#" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes for success in successes diff --git a/views/DE/account/services.pug b/views/DE/account/services.pug index 55f5a1b6..6ab101f3 100644 --- a/views/DE/account/services.pug +++ b/views/DE/account/services.pug @@ -34,8 +34,8 @@ html(lang="de") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen a(class="nav-link" href="#" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes -- GitLab From 6fb8ecd44738bf5bf19a01953caa30635d38e952 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Thu, 19 Mar 2020 13:39:58 +0100 Subject: [PATCH 140/161] handle 404 and 500 pages --- app.js | 16 ++++++++++++++-- routes/routes-account.js | 14 ++++++++------ views/DE/404.pug | 34 ++++++++++++++++++++++++++++++---- views/DE/500.pug | 39 +++++++++++++++++++++++++++++++-------- views/DE/error.pug | 6 ------ 5 files changed, 83 insertions(+), 26 deletions(-) delete mode 100644 views/DE/error.pug diff --git a/app.js b/app.js index debd5c36..f3ed756b 100644 --- a/app.js +++ b/app.js @@ -58,12 +58,24 @@ app.use(function(req, res, next) { next(); }); -//require('./routes/routes')(app, config, passport, i18n); require('./routes/routes-account')(app, config, passport, i18n); require('./routes/routes-project')(app, config, passport); -//require('./routes/dbconn')(app, config); require('./routes/api')(app, config, passport); +// Handle 404 +app.use(function (req, res, next) { + //res.status(404).send('404: Page not Found', 404) + res.status(404).render('./DE/404') +}) + +// Handle 500 - any server error +app.use(function (err, req, res, next) { + console.error(err.stack) + res.status(500).render('./DE/500', { + error: err + }) +}) + app.listen(app.get('port'), function () { console.log('Express server listening on port ' + app.get('port')); }); \ No newline at end of file diff --git a/routes/routes-account.js b/routes/routes-account.js index 84ddbec3..b3bbc5e8 100644 --- a/routes/routes-account.js +++ b/routes/routes-account.js @@ -108,10 +108,6 @@ module.exports = function (app, config, passport, i18n) { } }); - app.get('/error', function (req, res) { - res.render(lang+'/error') - }); - app.get('/login', passport.authenticate(config.passport.strategy, { @@ -272,7 +268,10 @@ module.exports = function (app, config, passport, i18n) { // Load hashed passwd from DB dbconn.user.query('SELECT password FROM credential WHERE user_id='+userId, function (err, rows, fields) { if (err) { - res.redirect('/500') + //res.redirect('/500') + res.status(500).render(lang+'/500', { + error: err + }) throw err } var userPwd = rows[0].password @@ -280,7 +279,10 @@ module.exports = function (app, config, passport, i18n) { // check if the password is correct bcrypt.compare(currPwd, userPwd, function(err, isMatch) { if (err) { - res.redirect('/500') + //res.redirect('/500') + res.status(500).render(lang+'/500', { + error: err + }) throw err } else if (!isMatch) { diff --git a/views/DE/404.pug b/views/DE/404.pug index dc9e0a8c..a0a6044a 100644 --- a/views/DE/404.pug +++ b/views/DE/404.pug @@ -1,4 +1,30 @@ -extends error - -block content - h2 Cannot find #{url} \ No newline at end of file +doctype html +html(lang="de") + head + title= "404 - Page not found" + meta(charset="UTF-8") + meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + style. + .container { + height: 400px; + position: relative; + } + .center { + margin: 0; + position: absolute; + top: 50%; + left: 50%; + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + } + body + div(class="container") + div(class="center", align="center") + a(href="https://m4lab.hft-stuttgart.de") + img(src="https://transfer.hft-stuttgart.de/images/demo/m4lab_logo.jpg", class="img-responsive center-block", width="185", height="192") + br + br + p 404. The requested URL was not found. + // Bootstrap + script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") \ No newline at end of file diff --git a/views/DE/500.pug b/views/DE/500.pug index cbc47e79..9614b9ed 100644 --- a/views/DE/500.pug +++ b/views/DE/500.pug @@ -1,8 +1,31 @@ -extends error - -block content - h1 Error: #{error.message} - if settings['verbose errors'] - pre= error.stack - else - p An error ocurred! \ No newline at end of file +doctype html +html(lang="de") + head + title= "500 - Internal Server Error" + meta(charset="UTF-8") + meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + style. + .container { + height: 400px; + position: relative; + } + .center { + margin: 0; + position: absolute; + top: 50%; + left: 50%; + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + } + body + div(class="container") + div(class="center", align="center") + a(href="https://m4lab.hft-stuttgart.de") + img(src="https://transfer.hft-stuttgart.de/images/demo/m4lab_logo.jpg", class="img-responsive center-block", width="185", height="192") + br + br + p 500. Unexpected Error :( + p #{ error } + // Bootstrap + script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") \ No newline at end of file diff --git a/views/DE/error.pug b/views/DE/error.pug deleted file mode 100644 index bf750c00..00000000 --- a/views/DE/error.pug +++ /dev/null @@ -1,6 +0,0 @@ -html - head - title Error - body - h1 An error occurred! - block content \ No newline at end of file -- GitLab From 5adf6bedcdde8dedec5a1c8b9edbcf89f30e5bb7 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Thu, 19 Mar 2020 13:40:33 +0100 Subject: [PATCH 141/161] fix action link for local development --- views/DE/account/security.pug | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/DE/account/security.pug b/views/DE/account/security.pug index 560d32bc..7df0964e 100644 --- a/views/DE/account/security.pug +++ b/views/DE/account/security.pug @@ -49,7 +49,7 @@ html(lang="de") for error, i in errors div.alert.alert-danger.alert-dismissible.fade.show #{ error } a(class="close", href="#", data-dismiss="alert", aria-label="close") × - form(class="needs-validation", method="post", action="/account/changePwd" novalidate) + form(class="needs-validation", method="post", action="/changePwd" novalidate) div(class="form-group row") label(for="currPwd") Aktuelles Passwort input(id="inputCurrPwd", name="inputCurrPwd", type="password", class="form-control" required) -- GitLab From 517644a58cdd60b8ec3dba0a25fbacd81868f867 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Fri, 20 Mar 2020 14:34:33 +0100 Subject: [PATCH 142/161] simplified project page --- routes/routes-project.js | 17 +++-- views/DE/project/project-simplified.pug | 1 + views/DE/project/project.html | 95 +++++++++++++++++++++++++ 3 files changed, 109 insertions(+), 4 deletions(-) create mode 100644 views/DE/project/project-simplified.pug create mode 100644 views/DE/project/project.html diff --git a/routes/routes-project.js b/routes/routes-project.js index ad713a24..95534ff5 100644 --- a/routes/routes-project.js +++ b/routes/routes-project.js @@ -38,7 +38,7 @@ module.exports = function (app) { ]) }); - app.get('/project', function (req, res) { + app.get('/project_', function (req, res) { async.waterfall([ // get all projects from projectdb function(done) { @@ -91,6 +91,10 @@ module.exports = function (app) { ]) }) + app.get('/project', function (req, res) { + res.render(lang+'/project/project-simplified'); + }) + app.get('/addprojectoverview', function (req, res) { if (req.isAuthenticated()) { res.render(lang+'/project/addProjectOverview') @@ -194,9 +198,14 @@ module.exports = function (app) { }, // add project overview function(done) { - methods.addProjectOverview(projectOverviewData, function(projectOverviewId, err){ - if (!err) { - done(err, projectOverviewId) + methods.addProjectOverview(projectOverviewData, function(data, err){ + if (err) { + res.status(500).render(lang+'/500', { + error: err + }) + } + else { + done(err, data.insertId) } }) }, diff --git a/views/DE/project/project-simplified.pug b/views/DE/project/project-simplified.pug new file mode 100644 index 00000000..0e16cae0 --- /dev/null +++ b/views/DE/project/project-simplified.pug @@ -0,0 +1 @@ +include project.html \ No newline at end of file diff --git a/views/DE/project/project.html b/views/DE/project/project.html new file mode 100644 index 00000000..6c25dbe8 --- /dev/null +++ b/views/DE/project/project.html @@ -0,0 +1,95 @@ + + + + Project List + + + + + + + + + + + + + + + + + + \ No newline at end of file -- GitLab From 86701a6781b1cbfb42aa93ea64f44f28e6c6b77e Mon Sep 17 00:00:00 2001 From: Rosanny Date: Fri, 20 Mar 2020 14:35:18 +0100 Subject: [PATCH 143/161] handle error pages --- routes/routes-account.js | 6 ++---- views/DE/404.pug | 2 +- views/DE/500.pug | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/routes/routes-account.js b/routes/routes-account.js index b3bbc5e8..48de0f0f 100644 --- a/routes/routes-account.js +++ b/routes/routes-account.js @@ -268,22 +268,20 @@ module.exports = function (app, config, passport, i18n) { // Load hashed passwd from DB dbconn.user.query('SELECT password FROM credential WHERE user_id='+userId, function (err, rows, fields) { if (err) { - //res.redirect('/500') + console.error(err) res.status(500).render(lang+'/500', { error: err }) - throw err } var userPwd = rows[0].password // check if the password is correct bcrypt.compare(currPwd, userPwd, function(err, isMatch) { if (err) { - //res.redirect('/500') + console.error(err) res.status(500).render(lang+'/500', { error: err }) - throw err } else if (!isMatch) { //req.flash('error', "Sorry, your password was incorrect. Please double-check your password.") diff --git a/views/DE/404.pug b/views/DE/404.pug index a0a6044a..c4178253 100644 --- a/views/DE/404.pug +++ b/views/DE/404.pug @@ -25,6 +25,6 @@ html(lang="de") img(src="https://transfer.hft-stuttgart.de/images/demo/m4lab_logo.jpg", class="img-responsive center-block", width="185", height="192") br br - p 404. The requested URL was not found. + p(class="h5") 404. The requested URL was not found. // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") \ No newline at end of file diff --git a/views/DE/500.pug b/views/DE/500.pug index 9614b9ed..70457339 100644 --- a/views/DE/500.pug +++ b/views/DE/500.pug @@ -25,7 +25,7 @@ html(lang="de") img(src="https://transfer.hft-stuttgart.de/images/demo/m4lab_logo.jpg", class="img-responsive center-block", width="185", height="192") br br - p 500. Unexpected Error :( + p(class="h5") 500. Unexpected Error :( p #{ error } // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") \ No newline at end of file -- GitLab From 1bb8aa73c6c3dcc11a23d74484281839bbeb5f9f Mon Sep 17 00:00:00 2001 From: Rosanny Date: Fri, 20 Mar 2020 14:35:47 +0100 Subject: [PATCH 144/161] handle error result --- routes/methods.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/routes/methods.js b/routes/methods.js index 59709d7d..af8cad75 100644 --- a/routes/methods.js +++ b/routes/methods.js @@ -153,9 +153,10 @@ var methods = { }, addProjectOverview: function(data, callback) { dbconn.project.query('INSERT INTO project_overview SET ?', data, function (err, results, fields){ - if (err) throw err; - //console.log(results.insertId) - callback(results.insertId, err); + if (err) { + console.error(err); + } + callback(results, err); }) } }; -- GitLab From c74a2fff72df4ffa09071c61fcf5bae6853ed663 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Fri, 20 Mar 2020 16:00:33 +0100 Subject: [PATCH 145/161] fix bug MLAB-146 --- routes/routes-account.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/routes/routes-account.js b/routes/routes-account.js index 48de0f0f..41af5110 100644 --- a/routes/routes-account.js +++ b/routes/routes-account.js @@ -247,7 +247,8 @@ module.exports = function (app, config, passport, i18n) { req.flash('error', "Failed"); } else { - req.flash('success', 'Profile updated!'); + //req.flash('success', 'Profile updated!'); + req.flash('success', 'Ihr Benutzerprofil wurde aktualisiert!'); } res.redirect('/profile'); }) -- GitLab From c302e88cd3e46a09cbc4bf64f423a5b248e1da3c Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 20 Mar 2020 16:32:35 +0100 Subject: [PATCH 146/161] project_overview ported --- routes/methods.js | 14 +++++++++++- routes/routes-project.js | 47 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/routes/methods.js b/routes/methods.js index 59709d7d..cefda4b7 100644 --- a/routes/methods.js +++ b/routes/methods.js @@ -149,7 +149,19 @@ var methods = { dbconn.project.query('CALL getAllLists', function (err, rows, fields){ if (err) throw err; callback(rows[0], err); - }) + }) + }, + getProjectOverviewById: function(projectId, callback) { + dbconn.project.query('CALL GetProjectInformationByProjectID(' + projectId+ ')', function (err, rows, fields){ + if (err) throw err; + callback(rows[0], err); + }) + }, + getProjectImagesById: function(projectId, callback) { + dbconn.project.query('CALL getImagesByProjectID(' + projectId+ ')', function (err, rows, fields){ + if (err) throw err; + callback(rows[0], err); + }) }, addProjectOverview: function(data, callback) { dbconn.project.query('INSERT INTO project_overview SET ?', data, function (err, results, fields){ diff --git a/routes/routes-project.js b/routes/routes-project.js index bea8584c..0c92d98f 100644 --- a/routes/routes-project.js +++ b/routes/routes-project.js @@ -1,5 +1,6 @@ const methods = require('./methods') const async = require('async') +const helpers = require('./helpers') module.exports = function (app) { @@ -230,5 +231,49 @@ module.exports = function (app) { app.post('/updateprojectoverview', function (req, res) { // only their own project }) - + + app.get('/projectoverview', function(req, res){ + async.waterfall([ + function(done) { + methods.getProjectOverviewById(req.query.projectID, function(projectOverview, err) { + if (!err) { + done(err, projectOverview) + } + }) + }, + function(projectOverview,done){ + methods.getProjectImagesById(req.query.projectID, function(projectImages, err) { + if (!err) { + done(err, projectImages, projectOverview) + } + }) + }, + // render projectOverview page + function(projectImages, projectOverview, done) { + + console.log(projectImages); + partnerWebsites = helpers.stringToArray(projectOverview[0].partner_website); + partnerNames = helpers.stringToArray(projectOverview[0].partner_name); + awardSites = helpers.stringToArray(projectOverview[0].award_website); + awardNames = helpers.stringToArray(projectOverview[0].award_name); + sponsorWebsites = helpers.stringToArray(projectOverview[0].sponsor_website); + sponsorImgs = helpers.stringToArray(projectOverview[0].sponsor_img); + sponsorNames = helpers.stringToArray(projectOverview[0].sponsor_name); + + res.render(lang+'/project/projectOverview', { + isUserAuthenticated: req.isAuthenticated(), + user: req.user, + projectOV: projectOverview, + projectImgs: projectImages, + partnerWS: partnerWebsites, + partnerN: partnerNames, + awardWS: awardSites, + awardN: awardNames, + sponsorWS: sponsorWebsites, + sponsorIMG: sponsorImgs, + sponsorN: sponsorNames + }); + } + ]) + }) }; \ No newline at end of file -- GitLab From 31690d1b4751dae9106a94a0e3acf362701de044 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Fri, 20 Mar 2020 16:34:25 +0100 Subject: [PATCH 147/161] delete etc. from Title option --- views/DE/account/profile.pug | 1 - views/DE/account/registration.pug | 1 - 2 files changed, 2 deletions(-) diff --git a/views/DE/account/profile.pug b/views/DE/account/profile.pug index 32a2aff1..1f732748 100644 --- a/views/DE/account/profile.pug +++ b/views/DE/account/profile.pug @@ -68,7 +68,6 @@ html(lang="de") option(value="Prof.") Prof. option(value="Dr.") Dr. option(value="Dipl.-Ing.") Dipl.-Ing. - option(value="etc.") etc. script. var titleOptions = document.getElementById('inputTitle').options; for (i=0; i < titleOptions.length; i++) { diff --git a/views/DE/account/registration.pug b/views/DE/account/registration.pug index 6d88857a..b50a6aff 100644 --- a/views/DE/account/registration.pug +++ b/views/DE/account/registration.pug @@ -68,7 +68,6 @@ html(lang="de") option(value="Prof.") Prof. option(value="Dr.") Dr. option(value="Dipl.-Ing.") Dipl.-Ing. - option(value="etc.") etc. div(class='form-group col-md-4') input#inputFirstname(name="inputFirstname", type="text", class="form-control", placeholder="Vorname*", maxlength="45" required) div(class='form-group col-md-4') -- GitLab From b4d292f222d8fc712345598db61a375ab568d710 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 20 Mar 2020 16:40:02 +0100 Subject: [PATCH 148/161] projectOverview added --- routes/helpers.js | 11 ++ views/DE/project/projectOverview.pug | 168 +++++++++++++++++++++++++++ 2 files changed, 179 insertions(+) create mode 100644 routes/helpers.js create mode 100644 views/DE/project/projectOverview.pug diff --git a/routes/helpers.js b/routes/helpers.js new file mode 100644 index 00000000..4645aec7 --- /dev/null +++ b/routes/helpers.js @@ -0,0 +1,11 @@ +var helpers = { + stringToArray: function (input){ + if(input != null){ + return input.split(','); + }else{ + return null; + } + } +}; + +module.exports = helpers; \ No newline at end of file diff --git a/views/DE/project/projectOverview.pug b/views/DE/project/projectOverview.pug new file mode 100644 index 00000000..f3659ab4 --- /dev/null +++ b/views/DE/project/projectOverview.pug @@ -0,0 +1,168 @@ +doctype html +html(lang="de") + head + title= "Project List" + meta(charset="UTF-8") + meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") + style. + .collapse { + display: none; + } + .collapse.in { + display: block; + } + .collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height,visibility; + -o-transition-property: height,visibility; + transition-property: height,visibility; + } + .warning { + color: red; + font-size: 11px; + } + body + div + for project in projectOV + div(class="flex-container") + div(class="main") + h1 #{project.title} + div(style="float:right; margin-left:30px; margin-bottom:0px; width:50%;") + img(src=project.src, width="100%") + p(style="text-align:right") #{project.caption} + + h2 Projektüberblick + p !{project.overview} + br + b keywords: + span #{project.keywords} + br + h2 Fragestellung + p !{project.question} + p + h2 Vorgehensweise + p !{project.approach} + br + br + h2 Ergebnis und Nutzung + p !{project.result} + div(class="side") + for image in projectImgs + if image.pos == '2' || image.pos == '3' + div(class="projectimg") + + if image.caption + span #{image.caption} + + + div(class="fakeimg") + if project.leader_lastname + p + b Projektleitung HfT:   + #{project.leader_lastname} + div(class="fakeimg") + if project.contact_lastname + p + b Ansprechperson:   + #{project.contact_lastname} + div(class="fakeimg") + if project.announcement + p + b Ausschreibung:   + span !{project.announcement} + + div(class="fakeimg") + if project.partner_name + p + b Projektpartner: + br + for website, i in partnerWS + if website + #{partnerN[i]} + br + else + #{partnerN[i]} + br + + div(class="fakeimg") + if project.term + p + b Projektlaufzeit:   + span #{project.term} + + div(class="fakeimg") + if project.award_name + p + b Preise: + br + for awardsite, i in awardWS + if awardsite + #{awardN[i]} + br + else + #{awardN[i]} + br + + div(class="fakeimg") + if project.administrator + p + b Projektträger:   + span #{project.administrator} + + div(class="fakeimg") + if project.sponsor_name + p + b Geldgeber: + br + for website, i in sponsorWS + if website + #{sponsorN[i]} + br + else + #{sponsorN[i]} + br + + div(class="fakeimg") + if project.website || project.further_details + p + b Mehr Informationen:   + if project.website + #{project.website} + br + span !{project.further_details} + + div(class="Downloads" style="height:200px;") + h5 Downloads + p + i(class="fas fa-file-download") + a(href="./images/M4_LAB_Projekt/transferstrategie.pdf" download target="_blank") Transferstrategie der HfT Stuttgart + + div(class="Projektlogos") + img(src="./images/M4_LAB_Projekt/WRS_Logo.jpg" width="32%") + img(src="./images/M4_LAB_Projekt/IBA2027_Logo.jpg" width="32%") + img(src="./images/M4_LAB_Projekt/GWK_Logo.jpg" width="32%") + br + br + img(src="./images/M4_LAB_Projekt/bbf_logo.png" width="32%") + img(src="./images/M4_LAB_Projekt/ihs_logo.jpg" width="32%") + + //jQuery + script(src="https://code.jquery.com/jquery-3.3.1.min.js") + script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") + // Bootstrap + script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") + // Header + if isUserAuthenticated + script(src="/js/headfootLogout.js") + else + script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file -- GitLab From 24d826266e4327f6598da65f1e41df83880820a3 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Thu, 19 Mar 2020 11:22:45 +0100 Subject: [PATCH 149/161] menu links adapted account --- views/DE/account/home.pug | 6 +++--- views/DE/account/profile.pug | 4 ++-- views/DE/account/security.pug | 4 ++-- views/DE/account/services.pug | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/views/DE/account/home.pug b/views/DE/account/home.pug index 58b2427c..f08d9ee7 100644 --- a/views/DE/account/home.pug +++ b/views/DE/account/home.pug @@ -34,9 +34,9 @@ html(lang="de") h5 span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") p content goes here diff --git a/views/DE/account/profile.pug b/views/DE/account/profile.pug index 1f732748..562304ee 100644 --- a/views/DE/account/profile.pug +++ b/views/DE/account/profile.pug @@ -35,8 +35,8 @@ html(lang="de") span #{user.firstname} #{user.lastname} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") a(class="nav-link" href="#" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes for success in successes diff --git a/views/DE/account/security.pug b/views/DE/account/security.pug index 7df0964e..1277f03e 100644 --- a/views/DE/account/security.pug +++ b/views/DE/account/security.pug @@ -37,9 +37,9 @@ html(lang="de") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil a(class="nav-link" href="#" aria-selected="false") Sicherheitseinstellungen - a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes for success in successes diff --git a/views/DE/account/services.pug b/views/DE/account/services.pug index 55f5a1b6..6ab101f3 100644 --- a/views/DE/account/services.pug +++ b/views/DE/account/services.pug @@ -34,8 +34,8 @@ html(lang="de") h5 span #{user.firstName} #{user.lastName} div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical") - a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil - a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen + a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil + a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen a(class="nav-link" href="#" aria-selected="false") Projekte und Dienste div(class="col-sm-9") if successes -- GitLab From 1847e683038667a7fa1ab49516bcef1f210db6f7 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 20 Mar 2020 17:03:10 +0100 Subject: [PATCH 150/161] changed body of projects.pug to static html --- views/DE/project/projects.pug | 143 +++++++++++++++++----------------- 1 file changed, 71 insertions(+), 72 deletions(-) diff --git a/views/DE/project/projects.pug b/views/DE/project/projects.pug index 10987e62..32cb1921 100644 --- a/views/DE/project/projects.pug +++ b/views/DE/project/projects.pug @@ -32,78 +32,77 @@ html(lang="de") font-size: 11px; } body - div(class="container-fluid") - if isUserAuthenticated - p Auf dieser Seite sehen Sie die Liste der über dieses Portal veröffentlichten Projekte. - a(href="/addprojectoverview" class="btn btn-primary" role="button" aria-pressed="true") Projekt anlegen - else - p Auf dieser Seite sehen Sie die Liste der über dieses Portal veröffentlichten Projekte. - p Möchten Sie ein neues Projekt anlegen, dann klicken Sie bitte auf #[a(href="/addprojectoverview") Anmelden und Projekt anlegen] - if successes - for success in successes - div.alert.alert-success.alert-dismissible #{ success } - a(class="close", href="#", data-dismiss="alert", aria-label="close") × - // Active projects - h3(class="mb-3 font-weight-bold") Aktive Projekte - table(class="table table-striped") - thead - tr - th Logo - th Akronym - th Title - th Kernziel - th Kategorie - th Ansprechpartner - th Projektinhalte - tbody - for item in active - tr - //td #{item.status} - td - img(src=item.logo, width="40", height="40") - td #{item.akronym} - td #{item.title} - td #{item.summary} - td #{item.category} - td #[a(class="nav-link", href="mailto:"+ item.cp) #{item.cp}] - td #[a(class="nav-link", href="https://m4lab.hft-stuttgart.de/projectoverview?projectID="+item.id) Zur Projektübersicht] - if item.gitlab - a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/tree/master") Projektdateien - a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/wikis/home") Projektwiki - else - a(class="nav-link", href="#") Projektdateien - a(class="nav-link", href="#") Projektwiki - br - // Non-active projects - h3(class="mb-3 font-weight-bold") Abgeschlossene Projekte - table(class="table table-striped") - thead - tr - th Logo - th Akronym - th Title - th Kernziel - th Kategorie - th Ansprechpartner - th Projektinhalte - tbody - for item in nonActive - tr - //td #{item.status} - td - img(src=item.logo, width="40", height="40") - td #{item.akronym} - td #{item.title} - td #{item.summary} - td #{item.category} - td #[a(class="nav-link", href="mailto:"+ item.cp) #{item.cp}] - td #[a(class="nav-link", href="https://m4lab.hft-stuttgart.de/projectoverview?projectID="+item.id) Zur Projektübersicht] - if item.gitlab - a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/tree/master") Projektdateien - a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/wikis/home") Projektwiki - else - a(class="nav-link", href="#") Projektdateien - a(class="nav-link", href="#") Projektwiki +
+
+ + Diese Seite bietet den Einstieg zu den unterschiedlichen Projekten, die in unserem Portal für die Öffentlichkeit bereitgestellt werden. + Für diesen Zweck steht zur Zeit ein Dienst bereit: eine von der HFT selbst verwaltete Gitlab-Instanz. + Alle der in diesem Gitlab erfassten Projektinhalte unterliegen einer Open Source bzw. Open Data Lizenz. +

Hinweis: Die Nutzeroberfläche von GitLab ist in Englisch.

+ + +

Direkteinstieg

+ Gitlab Projects + + +
+

Hilfestellung zu GitLab

+ +

Möchten Sie die Projektinhalte ansehen oder herunterladen?

+

+ Dann klicken Sie auf diesen Link zu den Gitlab-Projekten um die Liste aller im Gitlab erfassten Projekte zu sehen. + Vor dort können Sie dann auf die einzelnen Projekte zugreifen. + Ein Anmelden am Portal ist dazu nicht nötig. +

+ +

Möchten Sie zu einem Projekt beitragen?

+

+ Wenn Sie dem Projekteigentümer eine Rückmeldung bzw. einen Fehler melden wollen, navigieren Sie im Gitlab zunächst zum entsprechenden Projekt. + Anschließend können Sie dann dort die Möglichkeit nutzen, ein neues "Issues" einzureichen. + Ein Anmelden am Portal ist dazu nicht nötig. +

+

+ Wenn Sie darüberhinaus beitragen wollen, befolgen Sie bitte folgende Schritte: +

+
    +
  1. + Melden Sie sich bitte im Portal an.
    + Sofern Sie noch nicht als Nutzer im Portal eingetragen sind, wird das System Sie durch die Registrierung leiten.
    + Zur Anmeldung bzw. Registrierung gelangen Sie entweder über das Menü am oberen Seitenrand oder durch Klicken auf diesen Link zum Benutzerkonto. +
  2. +
  3. + Folgen Sie dem Link zu den Gitlab-Projekten, um zum Gitlab zu gelangen. +
  4. +
  5. + Fragen Sie beim Projekteigentümer um Zugang, indem Sie im Gitlab bei der entsprechende Projektseite auf den Link Request Access klicken. Solbald dieser ihre Anfrage bestätigt hat, können Sie loslegen. +
  6. +
+ +

Möchten Sie selbst ein Projekt anlegen, um es der Öffentlichkeit bereitzustellen?

+ +

+ Vorraussetzung dazu ist, dass Sie aktives oder ehemaliges Mitglied der Hochschule für Technik sind, d.h. eine (noch) gültige HFT-Emailadresse haben. + Dann befolgen Sie bitte folgende Schritte: +

+ +
    +
  1. + Melden Sie sich bitte im Portal an.
    + Sofern Sie noch nicht als Nutzer im Portal eingetragen sind, wird das System Sie durch die Registrierung leiten.
    + Zur Anmeldung bzw. Registrierung gelangen Sie entweder über das Menü am oberen Seitenrand oder durch Klicken auf diesen Link zum Benutzerkonto. +
  2. +
  3. + Folgen Sie dem Link zu den Gitlab-Projekten, um zum Gitlab zu gelangen. +
  4. +
  5. + Erstellen Sie dann in Gitlab ein neues Projekt durch Klicken auf den grünen New Project-Knopf und anschließendem Befolgen der Eingabemaske von Gitlab.
    + Weitere Hilfestellung zum Anlegen von Projekten in Gitlab finden Sie in der Gitlab-Dokumentation. +
  6. +
+ + +
+ // jQuery script(src="https://code.jquery.com/jquery-3.3.1.min.js") -- GitLab From 732e30a1083e3855007b5dc94500e24f7346a274 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 20 Mar 2020 17:05:50 +0100 Subject: [PATCH 151/161] Revert "changed body of projects.pug to static html" This reverts commit 1847e683038667a7fa1ab49516bcef1f210db6f7. --- views/DE/project/projects.pug | 143 +++++++++++++++++----------------- 1 file changed, 72 insertions(+), 71 deletions(-) diff --git a/views/DE/project/projects.pug b/views/DE/project/projects.pug index 32cb1921..10987e62 100644 --- a/views/DE/project/projects.pug +++ b/views/DE/project/projects.pug @@ -32,77 +32,78 @@ html(lang="de") font-size: 11px; } body -
-
- - Diese Seite bietet den Einstieg zu den unterschiedlichen Projekten, die in unserem Portal für die Öffentlichkeit bereitgestellt werden. - Für diesen Zweck steht zur Zeit ein Dienst bereit: eine von der HFT selbst verwaltete Gitlab-Instanz. - Alle der in diesem Gitlab erfassten Projektinhalte unterliegen einer Open Source bzw. Open Data Lizenz. -

Hinweis: Die Nutzeroberfläche von GitLab ist in Englisch.

- - -

Direkteinstieg

- Gitlab Projects - - -
-

Hilfestellung zu GitLab

- -

Möchten Sie die Projektinhalte ansehen oder herunterladen?

-

- Dann klicken Sie auf diesen Link zu den Gitlab-Projekten um die Liste aller im Gitlab erfassten Projekte zu sehen. - Vor dort können Sie dann auf die einzelnen Projekte zugreifen. - Ein Anmelden am Portal ist dazu nicht nötig. -

- -

Möchten Sie zu einem Projekt beitragen?

-

- Wenn Sie dem Projekteigentümer eine Rückmeldung bzw. einen Fehler melden wollen, navigieren Sie im Gitlab zunächst zum entsprechenden Projekt. - Anschließend können Sie dann dort die Möglichkeit nutzen, ein neues "Issues" einzureichen. - Ein Anmelden am Portal ist dazu nicht nötig. -

-

- Wenn Sie darüberhinaus beitragen wollen, befolgen Sie bitte folgende Schritte: -

-
    -
  1. - Melden Sie sich bitte im Portal an.
    - Sofern Sie noch nicht als Nutzer im Portal eingetragen sind, wird das System Sie durch die Registrierung leiten.
    - Zur Anmeldung bzw. Registrierung gelangen Sie entweder über das Menü am oberen Seitenrand oder durch Klicken auf diesen Link zum Benutzerkonto. -
  2. -
  3. - Folgen Sie dem Link zu den Gitlab-Projekten, um zum Gitlab zu gelangen. -
  4. -
  5. - Fragen Sie beim Projekteigentümer um Zugang, indem Sie im Gitlab bei der entsprechende Projektseite auf den Link Request Access klicken. Solbald dieser ihre Anfrage bestätigt hat, können Sie loslegen. -
  6. -
- -

Möchten Sie selbst ein Projekt anlegen, um es der Öffentlichkeit bereitzustellen?

- -

- Vorraussetzung dazu ist, dass Sie aktives oder ehemaliges Mitglied der Hochschule für Technik sind, d.h. eine (noch) gültige HFT-Emailadresse haben. - Dann befolgen Sie bitte folgende Schritte: -

- -
    -
  1. - Melden Sie sich bitte im Portal an.
    - Sofern Sie noch nicht als Nutzer im Portal eingetragen sind, wird das System Sie durch die Registrierung leiten.
    - Zur Anmeldung bzw. Registrierung gelangen Sie entweder über das Menü am oberen Seitenrand oder durch Klicken auf diesen Link zum Benutzerkonto. -
  2. -
  3. - Folgen Sie dem Link zu den Gitlab-Projekten, um zum Gitlab zu gelangen. -
  4. -
  5. - Erstellen Sie dann in Gitlab ein neues Projekt durch Klicken auf den grünen New Project-Knopf und anschließendem Befolgen der Eingabemaske von Gitlab.
    - Weitere Hilfestellung zum Anlegen von Projekten in Gitlab finden Sie in der Gitlab-Dokumentation. -
  6. -
- - -
- + div(class="container-fluid") + if isUserAuthenticated + p Auf dieser Seite sehen Sie die Liste der über dieses Portal veröffentlichten Projekte. + a(href="/addprojectoverview" class="btn btn-primary" role="button" aria-pressed="true") Projekt anlegen + else + p Auf dieser Seite sehen Sie die Liste der über dieses Portal veröffentlichten Projekte. + p Möchten Sie ein neues Projekt anlegen, dann klicken Sie bitte auf #[a(href="/addprojectoverview") Anmelden und Projekt anlegen] + if successes + for success in successes + div.alert.alert-success.alert-dismissible #{ success } + a(class="close", href="#", data-dismiss="alert", aria-label="close") × + // Active projects + h3(class="mb-3 font-weight-bold") Aktive Projekte + table(class="table table-striped") + thead + tr + th Logo + th Akronym + th Title + th Kernziel + th Kategorie + th Ansprechpartner + th Projektinhalte + tbody + for item in active + tr + //td #{item.status} + td + img(src=item.logo, width="40", height="40") + td #{item.akronym} + td #{item.title} + td #{item.summary} + td #{item.category} + td #[a(class="nav-link", href="mailto:"+ item.cp) #{item.cp}] + td #[a(class="nav-link", href="https://m4lab.hft-stuttgart.de/projectoverview?projectID="+item.id) Zur Projektübersicht] + if item.gitlab + a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/tree/master") Projektdateien + a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/wikis/home") Projektwiki + else + a(class="nav-link", href="#") Projektdateien + a(class="nav-link", href="#") Projektwiki + br + // Non-active projects + h3(class="mb-3 font-weight-bold") Abgeschlossene Projekte + table(class="table table-striped") + thead + tr + th Logo + th Akronym + th Title + th Kernziel + th Kategorie + th Ansprechpartner + th Projektinhalte + tbody + for item in nonActive + tr + //td #{item.status} + td + img(src=item.logo, width="40", height="40") + td #{item.akronym} + td #{item.title} + td #{item.summary} + td #{item.category} + td #[a(class="nav-link", href="mailto:"+ item.cp) #{item.cp}] + td #[a(class="nav-link", href="https://m4lab.hft-stuttgart.de/projectoverview?projectID="+item.id) Zur Projektübersicht] + if item.gitlab + a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/tree/master") Projektdateien + a(class="nav-link", href="https://transfer.hft-stuttgart.de/gitlab/"+item.gitlab+"/wikis/home") Projektwiki + else + a(class="nav-link", href="#") Projektdateien + a(class="nav-link", href="#") Projektwiki // jQuery script(src="https://code.jquery.com/jquery-3.3.1.min.js") -- GitLab From 75d355117b3c867297f5f95fb8591fff542493c5 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Fri, 20 Mar 2020 17:15:12 +0100 Subject: [PATCH 152/161] simplified project list with dynamic header --- routes/routes-project.js | 5 ++- views/DE/project/project-simplified.pug | 48 ++++++++++++++++++++++++- views/DE/project/project.html | 27 +------------- 3 files changed, 52 insertions(+), 28 deletions(-) diff --git a/routes/routes-project.js b/routes/routes-project.js index 3816d36f..6536e77d 100644 --- a/routes/routes-project.js +++ b/routes/routes-project.js @@ -93,7 +93,10 @@ module.exports = function (app) { }) app.get('/project', function (req, res) { - res.render(lang+'/project/project-simplified'); + res.render(lang+'/project/project-simplified', { + isUserAuthenticated: req.isAuthenticated(), + user: req.user + }); }) app.get('/addprojectoverview', function (req, res) { diff --git a/views/DE/project/project-simplified.pug b/views/DE/project/project-simplified.pug index 0e16cae0..5fa716cf 100644 --- a/views/DE/project/project-simplified.pug +++ b/views/DE/project/project-simplified.pug @@ -1 +1,47 @@ -include project.html \ No newline at end of file +doctype html +html(lang="de") + head + title= "Project List" + meta(charset="UTF-8") + meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") + style. + .collapse { + display: none; + } + .collapse.in { + display: block; + } + .collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height,visibility; + -o-transition-property: height,visibility; + transition-property: height,visibility; + } + .warning { + color: red; + font-size: 11px; + } + body + include project.html + + + // jQuery + script(src="https://code.jquery.com/jquery-3.3.1.min.js") + script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") + // Bootstrap + script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") + // Header + if isUserAuthenticated + script(src="/js/headfootLogout.js") + else + script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file diff --git a/views/DE/project/project.html b/views/DE/project/project.html index 6c25dbe8..df461962 100644 --- a/views/DE/project/project.html +++ b/views/DE/project/project.html @@ -1,19 +1,3 @@ - - - - Project List - - - - - - - -

@@ -83,13 +67,4 @@ -
- - - - - - - - - \ No newline at end of file + \ No newline at end of file -- GitLab From d5f387ceebe3f8583f4e555da06e663a4ebddfa6 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Mon, 23 Mar 2020 11:04:57 +0100 Subject: [PATCH 153/161] added videoconferences page --- routes/routes-project.js | 7 +++ views/DE/project/videoconferences.pug | 70 +++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 views/DE/project/videoconferences.pug diff --git a/routes/routes-project.js b/routes/routes-project.js index 6536e77d..1d92ab90 100644 --- a/routes/routes-project.js +++ b/routes/routes-project.js @@ -288,4 +288,11 @@ module.exports = function (app) { } ]) }) + + app.get('/videoconferences', function(req, res){ + res.render(lang+'/project/videoconferences', { + isUserAuthenticated: req.isAuthenticated(), + user: req.user, + }); + }) }; \ No newline at end of file diff --git a/views/DE/project/videoconferences.pug b/views/DE/project/videoconferences.pug new file mode 100644 index 00000000..1f9336d0 --- /dev/null +++ b/views/DE/project/videoconferences.pug @@ -0,0 +1,70 @@ +doctype html +html(lang="de") + head + title= "Project List" + meta(charset="UTF-8") + meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") + style. + .collapse { + display: none; + } + .collapse.in { + display: block; + } + .collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height,visibility; + -o-transition-property: height,visibility; + transition-property: height,visibility; + } + .warning { + color: red; + font-size: 11px; + } + body + div(class="flex-container") + div(class="main") + h1 Videokonferenzen + + p Wir bieten grundsätzlich zwei Möglichkeiten an, Viodeokonferenzen abzuhalten: + + h2 Jitsi + + p + Jitsi ist ein Opensource Videokonferenz-System, welches es ermöglicht, direkt über den Browser Videokonferenzen abzuhalten. + br + span Da die Hauptlast bei diesem System Clientseitig getragen wird, raten wir zu einer Nutzung auf Desktopsystemen bzw. Laptops. + + p Um eine Videokonferenz starten zu können, muss sich zunächst ein Organisator am Portal anmelden und die Videokonferenz eröffnen. Weitere Teilnehmer können dann ohne Anmeldung einfach über einen Link hinzugefügt werden. + + p Der Zugang zu Jitsi findet sich hier + + h2 GoToMeeting + + p Eine weitere Option, die wir anbieten werden, ist die Organisation von Videokonferenzen via GoToMeeting + + p Mehr Informationen darüber erhalten Sie zu gegebener Zeit an dieser Stelle + + + + + //jQuery + script(src="https://code.jquery.com/jquery-3.3.1.min.js") + script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") + // Bootstrap + script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") + // Header + if isUserAuthenticated + script(src="/js/headfootLogout.js") + else + script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file -- GitLab From d10fdd236fa50faa082ea55393c7c9cbed8a1952 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Mon, 23 Mar 2020 11:26:31 +0100 Subject: [PATCH 154/161] changed static links to headfoot.js --- views/DE/project/mailinglists.pug | 2 +- views/DE/project/project-simplified.pug | 2 +- views/DE/project/projectOverview.pug | 2 +- views/DE/project/projects.pug | 2 +- views/DE/project/videoconferences.pug | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/views/DE/project/mailinglists.pug b/views/DE/project/mailinglists.pug index 677d0f32..1bc8f5c2 100644 --- a/views/DE/project/mailinglists.pug +++ b/views/DE/project/mailinglists.pug @@ -58,4 +58,4 @@ html(lang="de") if isUserAuthenticated script(src="/js/headfootLogout.js") else - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file + script(src="/js/headfoot.js") \ No newline at end of file diff --git a/views/DE/project/project-simplified.pug b/views/DE/project/project-simplified.pug index 5fa716cf..6dead87f 100644 --- a/views/DE/project/project-simplified.pug +++ b/views/DE/project/project-simplified.pug @@ -44,4 +44,4 @@ html(lang="de") if isUserAuthenticated script(src="/js/headfootLogout.js") else - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file + script(src="/js/headfoot.js") \ No newline at end of file diff --git a/views/DE/project/projectOverview.pug b/views/DE/project/projectOverview.pug index f3659ab4..7cf545fb 100644 --- a/views/DE/project/projectOverview.pug +++ b/views/DE/project/projectOverview.pug @@ -165,4 +165,4 @@ html(lang="de") if isUserAuthenticated script(src="/js/headfootLogout.js") else - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file + script(src="/js/headfoot.js") \ No newline at end of file diff --git a/views/DE/project/projects.pug b/views/DE/project/projects.pug index 10987e62..78a12ecf 100644 --- a/views/DE/project/projects.pug +++ b/views/DE/project/projects.pug @@ -114,4 +114,4 @@ html(lang="de") if isUserAuthenticated script(src="/js/headfootLogout.js") else - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file + script(src="/js/headfoot.js") \ No newline at end of file diff --git a/views/DE/project/videoconferences.pug b/views/DE/project/videoconferences.pug index 1f9336d0..12fc17a9 100644 --- a/views/DE/project/videoconferences.pug +++ b/views/DE/project/videoconferences.pug @@ -67,4 +67,4 @@ html(lang="de") if isUserAuthenticated script(src="/js/headfootLogout.js") else - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file + script(src="/js/headfoot.js") \ No newline at end of file -- GitLab From 84e22d54fee9a0a3c970322821c73861c99d39f3 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Mon, 23 Mar 2020 16:03:41 +0100 Subject: [PATCH 155/161] changed static links to headfoot.js --- views/DE/account/forgotPwd.pug | 2 +- views/DE/account/registration.pug | 2 +- views/DE/account/reset.pug | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/views/DE/account/forgotPwd.pug b/views/DE/account/forgotPwd.pug index 8a6b8c56..46210a02 100644 --- a/views/DE/account/forgotPwd.pug +++ b/views/DE/account/forgotPwd.pug @@ -53,4 +53,4 @@ html(lang="de") // Bootstrap script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") // M4_LAB - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") + script(src="/js/headfoot.js") diff --git a/views/DE/account/registration.pug b/views/DE/account/registration.pug index f3a4e51f..3de3ed5a 100644 --- a/views/DE/account/registration.pug +++ b/views/DE/account/registration.pug @@ -94,4 +94,4 @@ html(lang="de") // M4_LAB script(src="/js/generalFunction.js") script(src="/js/registration.js") - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") \ No newline at end of file + script(src="/js/headfoot.js") \ No newline at end of file diff --git a/views/DE/account/reset.pug b/views/DE/account/reset.pug index 8f2d8f4c..56aa2d92 100644 --- a/views/DE/account/reset.pug +++ b/views/DE/account/reset.pug @@ -57,4 +57,4 @@ html(lang="de") // M4_LAB script(src="/js/security.js") script(src="/js/generalFunction.js") - script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") + script(src="/js/headfoot.js") -- GitLab From ebeabd222344b89215085e01ba9cc0a07634b135 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Mon, 23 Mar 2020 16:06:39 +0100 Subject: [PATCH 156/161] changed password change request to account/ --- views/DE/account/security.pug | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/DE/account/security.pug b/views/DE/account/security.pug index 1277f03e..6db09112 100644 --- a/views/DE/account/security.pug +++ b/views/DE/account/security.pug @@ -49,7 +49,7 @@ html(lang="de") for error, i in errors div.alert.alert-danger.alert-dismissible.fade.show #{ error } a(class="close", href="#", data-dismiss="alert", aria-label="close") × - form(class="needs-validation", method="post", action="/changePwd" novalidate) + form(class="needs-validation", method="post", action="/account/changePwd" novalidate) div(class="form-group row") label(for="currPwd") Aktuelles Passwort input(id="inputCurrPwd", name="inputCurrPwd", type="password", class="form-control" required) -- GitLab From 4abbc5ebbf0f0fa618d842a250f5ecba2b8b2c63 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Mon, 23 Mar 2020 16:08:52 +0100 Subject: [PATCH 157/161] changed password change request to account/ --- views/DE/account/profile.pug | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/DE/account/profile.pug b/views/DE/account/profile.pug index 562304ee..9b0ee692 100644 --- a/views/DE/account/profile.pug +++ b/views/DE/account/profile.pug @@ -46,7 +46,7 @@ html(lang="de") for error, i in errors div.alert.alert-danger.alert-dismissible.fade.show #{ error } a(class="close", href="#", data-dismiss="alert", aria-label="close") × - form#profileForm(method="POST", action="/updateProfile") + form#profileForm(method="POST", action="/account/updateProfile") div(class="form-row") div(class='form-group col-md-2') label(for="title") Anrede -- GitLab From e28dd2ecacae086390e2c146d364377361d1dcbb Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Tue, 24 Mar 2020 08:49:59 +0100 Subject: [PATCH 158/161] merged devel_wolfgang, added landingpage --- routes/routes-project.js | 7 ++++ views/DE/project/landingpage.html | 68 +++++++++++++++++++++++++++++++ views/DE/project/landingpage.pug | 47 +++++++++++++++++++++ 3 files changed, 122 insertions(+) create mode 100644 views/DE/project/landingpage.html create mode 100644 views/DE/project/landingpage.pug diff --git a/routes/routes-project.js b/routes/routes-project.js index 1d92ab90..a85058ff 100644 --- a/routes/routes-project.js +++ b/routes/routes-project.js @@ -295,4 +295,11 @@ module.exports = function (app) { user: req.user, }); }) + + app.get('/landingpage', function(req, res){ + res.render(lang+'/project/landingpage', { + isUserAuthenticated: req.isAuthenticated(), + user: req.user, + }); + }) }; \ No newline at end of file diff --git a/views/DE/project/landingpage.html b/views/DE/project/landingpage.html new file mode 100644 index 00000000..d9c19d49 --- /dev/null +++ b/views/DE/project/landingpage.html @@ -0,0 +1,68 @@ + + +
+ +
+
+

+

Als innovative Hochschule wollen wir den Wandel in der Gesellschaft zukunftsfähig und verantwortungsvoll mitgestalten.

+
+

Unser Ziel ist die Beantwortung gesellschaftlich relevanter Zukunftsfragen.

+ + Diese bearbeiten wir durch Forschungs-, Innovations- und Transferprojekte und entwickeln dabei anwendungsbezogene Lösungen. + Als Impulsgeber ermöglichen wir den Transfer innovativer Ideen, indem wir Kooperationen fördern und Räume für kreativen Austausch schaffen. +
+ Dabei verknüpfen wir unsere Expertise mit Partnern innerhalb und außerhalb der Region Stuttgart. Wir informieren und involvieren Interessierte und Beteiligte durch die unterschiedlichsten Events und Formate. +
+

Willst du dabei sein?

+ + Dann findest du unter Informationen mehr über unsere Expertise, Projekte, Publikationen und Lösungen. +
+ Erfahre mehr über unsere Events und über die Möglichkeiten zur Zusammenarbeit. +

+
+
+ + + + +
\ No newline at end of file diff --git a/views/DE/project/landingpage.pug b/views/DE/project/landingpage.pug new file mode 100644 index 00000000..a835ec04 --- /dev/null +++ b/views/DE/project/landingpage.pug @@ -0,0 +1,47 @@ +doctype html +html(lang="de") + head + title= "Project List" + meta(charset="UTF-8") + meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") + link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap/bootstrap.css") + link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") + style. + .collapse { + display: none; + } + .collapse.in { + display: block; + } + .collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height,visibility; + -o-transition-property: height,visibility; + transition-property: height,visibility; + } + .warning { + color: red; + font-size: 11px; + } + body + include landingpage.html + + + // jQuery + script(src="https://code.jquery.com/jquery-3.3.1.min.js") + script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous") + // Bootstrap + script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") + // Header + if isUserAuthenticated + script(src="/js/headfootLogout.js") + else + script(src="/js/headfoot.js") \ No newline at end of file -- GitLab From 3eaf228d0b4b4217fd7b4ab2c1a877b911daa551 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Wed, 25 Mar 2020 09:32:50 +0100 Subject: [PATCH 159/161] test: logoutbutton in account menu --- .gitlab-ci.yml | 3 ++- views/DE/account/home.pug | 1 + views/DE/account/profile.pug | 1 + views/DE/account/security.pug | 1 + views/DE/account/services.pug | 1 + 5 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a22bda54..273c37c2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -8,4 +8,5 @@ pages-devel: tags: - testing only: - - testing \ No newline at end of file + - testing + - test_logoutbutton \ No newline at end of file diff --git a/views/DE/account/home.pug b/views/DE/account/home.pug index f08d9ee7..dc4e1c83 100644 --- a/views/DE/account/home.pug +++ b/views/DE/account/home.pug @@ -37,6 +37,7 @@ html(lang="de") a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/logout" aria-selected="false") Logout div(class="col-sm-9") p content goes here diff --git a/views/DE/account/profile.pug b/views/DE/account/profile.pug index 9b0ee692..eba579b3 100644 --- a/views/DE/account/profile.pug +++ b/views/DE/account/profile.pug @@ -37,6 +37,7 @@ html(lang="de") a(class="nav-link" href="#" aria-selected="true") Benutzerprofil a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/logout" aria-selected="false") Logout div(class="col-sm-9") if successes for success in successes diff --git a/views/DE/account/security.pug b/views/DE/account/security.pug index 6db09112..7d81edee 100644 --- a/views/DE/account/security.pug +++ b/views/DE/account/security.pug @@ -40,6 +40,7 @@ html(lang="de") a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil a(class="nav-link" href="#" aria-selected="false") Sicherheitseinstellungen a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/logout" aria-selected="false") Logout div(class="col-sm-9") if successes for success in successes diff --git a/views/DE/account/services.pug b/views/DE/account/services.pug index 6ab101f3..525041ef 100644 --- a/views/DE/account/services.pug +++ b/views/DE/account/services.pug @@ -37,6 +37,7 @@ html(lang="de") a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen a(class="nav-link" href="#" aria-selected="false") Projekte und Dienste + a(class="nav-link" href="/logout" aria-selected="false") Logout div(class="col-sm-9") if successes for success in successes -- GitLab From 7706cfd814d75b1b4d3e4d522327b484b43ce9e3 Mon Sep 17 00:00:00 2001 From: Rosanny Date: Wed, 25 Mar 2020 15:08:37 +0100 Subject: [PATCH 160/161] fix (part of) MLAB-147 --- views/DE/project/addProjectOverview.pug | 36 ++++++++++++------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/views/DE/project/addProjectOverview.pug b/views/DE/project/addProjectOverview.pug index 87e5d469..08a39171 100644 --- a/views/DE/project/addProjectOverview.pug +++ b/views/DE/project/addProjectOverview.pug @@ -46,20 +46,20 @@ html(lang="de") form(method="POST") div(class='form-row') div(class='form-group col-md-12') - input#inputPname(name="pname" class="form-control" type="text" placeholder="human-readable short project name*" required) + input#inputPname(name="pname" class="form-control" type="text" placeholder="Projekttitel*" required) div(class="form-group col-md-12") - input#inputTitle(name="title" class="form-control" type="text" placeholder="official title of the project*" required) + input#inputTitle(name="title" class="form-control" type="text" placeholder="Akronym*" required) div(class="form-group col-md-12") - input#inputSummary(name="summary" class="form-control" type="text" placeholder="one line summary of the project") + input#inputSummary(name="summary" class="form-control" type="text" placeholder="Kurzbeschreibung") div(class='form-group col-md-12') select#inputCategory(name="category", class="form-control") - option(value="") - select a category - + option(value="") - Projektkategorie - option(value="Experten-Gruppe") Experten-Gruppe option(value="Student-Projekt") Student-Projekt option(value="Lehr Projekt") Lehr Projekt option(value="Transfer-projekt") Transfer-projekt div(class="form-group col-md-12") - input#inputLogo(name="logo" class="form-control" type="text" placeholder="official logo of the project") + input#inputLogo(name="logo" class="form-control" type="text" placeholder="Projektlogo, to be implemented: upload picture") div(class="form-group col-md-12") div(class="input-group mb-3") input#inputGitlabURL(name="gitlabURL" type="text" class="form-control" placeholder="M4_LAB GitLab Project URL, z.B. https://transfer.hft-stuttgart.de/gitlab/username/projectname") @@ -68,7 +68,7 @@ html(lang="de") input#inputWiki(name="wiki" type="checkbox") |   Wiki - h5(class="mb-3 font-weight-bold") Content + h5(class="mb-3 font-weight-bold") Inhalte div(class='form-row') div(class='form-group col-md-12') textarea#inputOverview(name="overview" class="form-control" type="text" rows="5" placeholder="Projektüberblick") @@ -80,10 +80,10 @@ html(lang="de") textarea#inputResult(name="result" class="form-control" type="text" rows="5" placeholder="Ergebnis und Nutzung") div(class="form-group col-md-12") input#inputKeywords(name="keywords" class="form-control" type="text" placeholder="keywords") - h5(class="mb-3 font-weight-bold") Info + h5(class="mb-3 font-weight-bold") Projektinformationen div(class='form-row') div(class='form-group col-md-12') - textarea#inputAnnouncement(name="announcement" class="form-control" type="text" rows="5" placeholder="Ausschreibung") + input#inputAnnouncement(name="announcement" class="form-control" type="text" rows="5" placeholder="Ausschreibung") div(class="form-group col-md-12") div(class='form-row') div(class="form-group col-md-2") @@ -93,29 +93,29 @@ html(lang="de") div(class="form-group col-md-5") input#inputTermTo(name="termTo" class="form-control" type="text" placeholder="bis (dd.mm.yyyy)") div(class='form-group col-md-12') - textarea#inputFurtherDetails(name="furtherDetails" class="form-control" type="text" rows="5" placeholder="Mehr informationen") + textarea#inputFurtherDetails(name="furtherDetails" class="form-control" type="text" rows="5" placeholder="Weitere Informationen (bspw. Links zu Berichten)") div(class="form-group col-md-12") - input#inputWebsite(name="website" class="form-control" type="text" placeholder="website") - h5(class="mb-3 font-weight-bold") Images + input#inputWebsite(name="website" class="form-control" type="text" placeholder="Projekt-Website") + h5(class="mb-3 font-weight-bold") Bilder div(class='form-row') div(class="form-group col-md-12") - input#inputSrc(name="src" class="form-control" type="text" placeholder="link to the image source") + input#inputSrc(name="src" class="form-control" type="text" placeholder="To be implemented: upload picture") div(class="form-group col-md-12") - input#inputCaption(name="caption" class="form-control" type="text" placeholder="caption of the image") + input#inputCaption(name="caption" class="form-control" type="text" placeholder="Bildunterschrift/Bildquelle") h5(class="mb-3 font-weight-bold") Kontakt div(class='form-row') div(class="form-group col-md-2") -

Ansprechpartner

+

Ansprechperson

div(class="form-group col-md-5") - input#inputContactName(name="contactName" class="form-control" type="text" placeholder="Titel/Anrede Vorname Nachname") + input#inputContactName(name="contactName" class="form-control" type="text" placeholder="Anrede, Titel, Vorname, Nachname") div(class="form-group col-md-5") - input#inputContactEmail(name="contactEmail" class="form-control" type="email" placeholder="E-mail Adresse") + input#inputContactEmail(name="contactEmail" class="form-control" type="email" placeholder="E-Mail-Adresse") div(class="form-group col-md-2")

Projektleitung

div(class="form-group col-md-5") - input#inputLeaderName(name="leaderName" class="form-control" type="text" placeholder="Titel/Anrede Vorname Nachname") + input#inputLeaderName(name="leaderName" class="form-control" type="text" placeholder="Anrede, Titel, Vorname, Nachname") div(class="form-group col-md-5") - input#inputLeaderEmail(name="leaderEmail" class="form-control" type="email" placeholder="E-mail Adresse") + input#inputLeaderEmail(name="leaderEmail" class="form-control" type="email" placeholder="E-Mail-Adresse") p * Pflichtfeld input#submitBtn(type="submit", class="btn btn-outline-dark btn-block", value="Projekt Anlegen") -- GitLab From 0ac2db14286890524c6965b25d0ba3a72bf8ee10 Mon Sep 17 00:00:00 2001 From: Wolfgang Knopki Date: Mon, 6 Apr 2020 15:04:54 +0200 Subject: [PATCH 161/161] added contact page --- package-lock.json | 224 +++++++++++++++++++-------------------- routes/routes-account.js | 38 ++++++- 2 files changed, 149 insertions(+), 113 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1d68e8a5..23c18b89 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,12 +7,12 @@ "@types/babel-types": { "version": "7.0.7", "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.7.tgz", - "integrity": "sha512-dBtBbrc+qTHy1WdfHYjBwRln4+LWqASWakLHsWHR2NWHIFkv4W3O070IGoGLEBrJBvct3r0L1BUPuvURi7kYUQ==" + "integrity": "sha1-Zn6xZA6AOUNgKAVXN9K5mG7jNuM=" }, "@types/babylon": { "version": "6.16.5", "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.5.tgz", - "integrity": "sha512-xH2e58elpj1X4ynnKp9qSnWlsRTIs6n3tgLGNfwAGHwePw0mulHQllV34n0T25uYSu1k0hRKkWXF890B1yS47w==", + "integrity": "sha1-HFZB22nrjN83jt0ltL53VL7rSLQ=", "requires": { "@types/babel-types": "*" } @@ -20,12 +20,12 @@ "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=" }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=", "requires": { "mime-types": "~2.1.24", "negotiator": "0.6.2" @@ -57,7 +57,7 @@ "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "requires": { "color-convert": "^1.9.0" } @@ -65,7 +65,7 @@ "anymatch": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "integrity": "sha1-xV7PAhheJGklk5kxDBc84xIzsUI=", "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -111,7 +111,7 @@ "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=" }, "balanced-match": { "version": "1.0.0", @@ -121,7 +121,7 @@ "basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "integrity": "sha1-uZgnm/R844NEtPPPkW1Gebv1Hjo=", "requires": { "safe-buffer": "5.1.2" } @@ -139,12 +139,12 @@ "binary-extensions": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==" + "integrity": "sha1-I8DfFPaogHf1+YbA0WfsA8PVU3w=" }, "body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "integrity": "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io=", "requires": { "bytes": "3.1.0", "content-type": "~1.0.4", @@ -161,7 +161,7 @@ "boxen": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "integrity": "sha1-VcbDmouljZxhrSLNh3Uy3rZlogs=", "requires": { "ansi-align": "^2.0.0", "camelcase": "^4.0.0", @@ -182,7 +182,7 @@ "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -191,7 +191,7 @@ "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=", "requires": { "fill-range": "^7.0.1" } @@ -199,7 +199,7 @@ "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY=" }, "camelcase": { "version": "1.2.1", @@ -209,7 +209,7 @@ "capture-stack-trace": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" + "integrity": "sha1-psC74fOPOqC5Ijjstv9Cw0TUE10=" }, "center-align": { "version": "0.1.3", @@ -223,7 +223,7 @@ "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -248,7 +248,7 @@ "ci-info": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + "integrity": "sha1-LKINu5zrMtRSSmgzAzE/AwSx5Jc=" }, "cli-boxes": { "version": "1.0.0", @@ -275,7 +275,7 @@ "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", "requires": { "color-name": "1.1.3" } @@ -293,7 +293,7 @@ "configstore": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "integrity": "sha1-xvJd767vJt8S3TNBSwAf6BpUP48=", "requires": { "dot-prop": "^4.1.0", "graceful-fs": "^4.1.2", @@ -311,7 +311,7 @@ "constantinople": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz", - "integrity": "sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==", + "integrity": "sha1-1F7XJPV9PRBQABen06iJwTga5kc=", "requires": { "@types/babel-types": "^7.0.0", "@types/babylon": "^6.16.2", @@ -322,7 +322,7 @@ "content-disposition": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "integrity": "sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70=", "requires": { "safe-buffer": "5.1.2" } @@ -330,7 +330,7 @@ "content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=" }, "cookie": { "version": "0.3.1", @@ -382,7 +382,7 @@ "crypto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", - "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==" + "integrity": "sha1-KvG3ytgXXSTIobB3glV5SiGAMDc=" }, "crypto-random-string": { "version": "1.0.0", @@ -392,7 +392,7 @@ "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "requires": { "ms": "2.0.0" }, @@ -412,7 +412,7 @@ "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "integrity": "sha1-xPp8lUBKF6nD6Mp+FTcxK3NjMKw=" }, "define-properties": { "version": "1.1.3", @@ -440,7 +440,7 @@ "dot-prop": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "integrity": "sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc=", "requires": { "is-obj": "^1.0.0" } @@ -514,7 +514,7 @@ "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=" }, "etag": { "version": "1.8.1", @@ -538,7 +538,7 @@ "express": { "version": "4.17.1", "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "integrity": "sha1-RJH8OGBc9R+GKdOcK10Cb5ikwTQ=", "requires": { "accepts": "~1.3.7", "array-flatten": "1.1.1", @@ -575,7 +575,7 @@ "cookie": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + "integrity": "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo=" } } }, @@ -590,7 +590,7 @@ "express-session": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.0.tgz", - "integrity": "sha512-t4oX2z7uoSqATbMfsxWMbNjAL0T5zpvcJCk3Z9wnPPN7ibddhnmDZXHfEcoBMG2ojKXZoCyPMc5FbtK+G7SoDg==", + "integrity": "sha1-m1DbteigPDU3NoE48HJzYVC3+bM=", "requires": { "cookie": "0.4.0", "cookie-signature": "1.0.6", @@ -605,24 +605,24 @@ "cookie": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + "integrity": "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo=" }, "depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + "integrity": "sha1-tpYWPMdXVg0JzyLMj60Vcbeedt8=" }, "safe-buffer": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + "integrity": "sha1-t02uxJsRSPiMZLaNSbHoFcHy9Rk=" } } }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=", "requires": { "to-regex-range": "^5.0.1" } @@ -630,7 +630,7 @@ "finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "integrity": "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=", "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -665,7 +665,7 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=" }, "get-stream": { "version": "3.0.0", @@ -675,7 +675,7 @@ "glob-parent": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "integrity": "sha1-X0wdHnSNMM1zrSlEs1d6gbCB6MI=", "requires": { "is-glob": "^4.0.1" } @@ -709,12 +709,12 @@ "graceful-fs": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" + "integrity": "sha1-ShL/G2A3bvCYYsIJPt2Qgyi+hCM=" }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", "requires": { "function-bind": "^1.1.1" } @@ -732,7 +732,7 @@ "http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=", "requires": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -764,7 +764,7 @@ "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -787,7 +787,7 @@ "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=" }, "ipaddr.js": { "version": "1.9.0", @@ -797,7 +797,7 @@ "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=", "requires": { "binary-extensions": "^2.0.0" } @@ -805,7 +805,7 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" }, "is-callable": { "version": "1.1.4", @@ -815,7 +815,7 @@ "is-ci": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "integrity": "sha1-43ecjuF/zPQoSI9uKBGH8uYyhBw=", "requires": { "ci-info": "^1.5.0" } @@ -854,7 +854,7 @@ "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=", "requires": { "is-extglob": "^2.1.1" } @@ -876,7 +876,7 @@ "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=" }, "is-obj": { "version": "1.0.1", @@ -912,7 +912,7 @@ "is-retry-allowed": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" + "integrity": "sha1-13hIi9CkZmo76KFIK58rqv7eqLQ=" }, "is-stream": { "version": "1.1.0", @@ -966,7 +966,7 @@ "lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + "integrity": "sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg=" }, "longest": { "version": "1.0.1", @@ -976,12 +976,12 @@ "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + "integrity": "sha1-b54wtHCE2XGnyCD/FabFFnt0wm8=" }, "lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", "requires": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -990,7 +990,7 @@ "make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "integrity": "sha1-ecEDO4BRW9bSTsmTPoYMp17ifww=", "requires": { "pify": "^3.0.0" } @@ -1003,7 +1003,7 @@ "math-interval-parser": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/math-interval-parser/-/math-interval-parser-2.0.1.tgz", - "integrity": "sha512-VmlAmb0UJwlvMyx8iPhXUDnVW1F9IrGEd9CIOmv+XL8AErCUUuozoDMrgImvnYt2A+53qVX/tPW6YJurMKYsvA==" + "integrity": "sha1-4izW0VoKf0wDrsVg23ZRPaYVvtQ=" }, "media-typer": { "version": "0.3.0", @@ -1018,7 +1018,7 @@ "messageformat": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/messageformat/-/messageformat-2.3.0.tgz", - "integrity": "sha512-uTzvsv0lTeQxYI2y1NPa1lItL5VRI8Gb93Y2K2ue5gBPyrbJxfDi/EYWxh2PKv5yO42AJeeqblS9MJSh/IEk4w==", + "integrity": "sha1-3iY8SQKdXq5l1+4l4HVPV/QlrZE=", "requires": { "make-plural": "^4.3.0", "messageformat-formatters": "^2.0.1", @@ -1028,7 +1028,7 @@ "make-plural": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-4.3.0.tgz", - "integrity": "sha512-xTYd4JVHpSCW+aqDof6w/MebaMVNTVYBZhbB/vi513xXdiPT92JMVCo0Jq8W2UZnzYRFeVbQiQ+I25l13JuKvA==", + "integrity": "sha1-8j3gjv2wysLgybqfMVsN/2tMJzU=", "requires": { "minimist": "^1.2.0" } @@ -1038,12 +1038,12 @@ "messageformat-formatters": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/messageformat-formatters/-/messageformat-formatters-2.0.1.tgz", - "integrity": "sha512-E/lQRXhtHwGuiQjI7qxkLp8AHbMD5r2217XNe/SREbBlSawe0lOqsFb7rflZJmlQFSULNLIqlcjjsCPlB3m3Mg==" + "integrity": "sha1-BJLBQCpId191HJsXwDVOkr4BKwg=" }, "messageformat-parser": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/messageformat-parser/-/messageformat-parser-4.1.2.tgz", - "integrity": "sha512-7dWuifeyldz7vhEuL96Kwq1fhZXBW+TUfbnHN4UCrCxoXQTYjHnR78eI66Gk9LaLLsAvzPNVJBaa66DRfFNaiA==" + "integrity": "sha1-/TTsOZEqFIaKFZXq63QkhauKs3I=" }, "methods": { "version": "1.1.2", @@ -1053,7 +1053,7 @@ "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=" }, "mime-db": { "version": "1.40.0", @@ -1071,7 +1071,7 @@ "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "requires": { "brace-expansion": "^1.1.7" } @@ -1084,7 +1084,7 @@ "morgan": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", - "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", + "integrity": "sha1-Co0Wc0odmvvIJLmd+H5zjlji2lk=", "requires": { "basic-auth": "~2.0.0", "debug": "2.6.9", @@ -1117,12 +1117,12 @@ "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=" }, "node-forge": { "version": "0.7.6", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz", - "integrity": "sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw==" + "integrity": "sha1-/fO0GK7h+U8O9kLNY0hsd8qXJKw=" }, "nodemailer": { "version": "6.3.1", @@ -1149,7 +1149,7 @@ "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", "requires": { "ms": "^2.1.1" } @@ -1167,7 +1167,7 @@ "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=" }, "npm-run-path": { "version": "2.0.2", @@ -1212,7 +1212,7 @@ "on-headers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + "integrity": "sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8=" }, "p-finally": { "version": "1.0.0", @@ -1233,7 +1233,7 @@ "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=" }, "passport": { "version": "0.3.2", @@ -1262,7 +1262,7 @@ "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", "requires": { "ms": "^2.1.1" } @@ -1287,7 +1287,7 @@ "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=" }, "path-to-regexp": { "version": "0.1.7", @@ -1317,7 +1317,7 @@ "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=" }, "proxy-addr": { "version": "2.0.5", @@ -1336,12 +1336,12 @@ "pstree.remy": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.7.tgz", - "integrity": "sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A==" + "integrity": "sha1-x2ljooBH7WFULcNhqibuVaf6FfM=" }, "pug": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.4.tgz", - "integrity": "sha512-XhoaDlvi6NIzL49nu094R2NA6P37ijtgMDuWE+ofekDChvfKnzFal60bhSdiy8y2PBO6fmz3oMEIcfpBVRUdvw==", + "integrity": "sha1-7naC7ApgSUs41IqI8F87CskxN30=", "requires": { "pug-code-gen": "^2.0.2", "pug-filters": "^3.1.1", @@ -1356,7 +1356,7 @@ "pug-attrs": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.4.tgz", - "integrity": "sha512-TaZ4Z2TWUPDJcV3wjU3RtUXMrd3kM4Wzjbe3EWnSsZPsJ3LDI0F3yCnf2/W7PPFF+edUFQ0HgDL1IoxSz5K8EQ==", + "integrity": "sha1-svRMQ55OtK1dTvJcrCDRitKMwzY=", "requires": { "constantinople": "^3.0.1", "js-stringify": "^1.0.1", @@ -1366,7 +1366,7 @@ "pug-code-gen": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.2.tgz", - "integrity": "sha512-kROFWv/AHx/9CRgoGJeRSm+4mLWchbgpRzTEn8XCiwwOy6Vh0gAClS8Vh5TEJ9DBjaP8wCjS3J6HKsEsYdvaCw==", + "integrity": "sha1-rQlnFirqB33PeHg42U7RSssCF8I=", "requires": { "constantinople": "^3.1.2", "doctypes": "^1.1.0", @@ -1423,12 +1423,12 @@ "pug-error": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.3.tgz", - "integrity": "sha512-qE3YhESP2mRAWMFJgKdtT5D7ckThRScXRwkfo+Erqga7dyJdY3ZquspprMCj/9sJ2ijm5hXFWQE/A3l4poMWiQ==" + "integrity": "sha1-80L7AIdS1YA0wYXeA2At2f/hX6Y=" }, "pug-filters": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-3.1.1.tgz", - "integrity": "sha512-lFfjNyGEyVWC4BwX0WyvkoWLapI5xHSM3xZJFUhx4JM4XyyRdO8Aucc6pCygnqV2uSgJFaJWW3Ft1wCWSoQkQg==", + "integrity": "sha1-qyzILbnuzPV4vaiRMOJSoNsCaqc=", "requires": { "clean-css": "^4.1.11", "constantinople": "^3.0.1", @@ -1479,7 +1479,7 @@ "pug-lexer": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-4.1.0.tgz", - "integrity": "sha512-i55yzEBtjm0mlplW4LoANq7k3S8gDdfC6+LThGEvsK4FuobcKfDAwt6V4jKPH9RtiE3a2Akfg5UpafZ1OksaPA==", + "integrity": "sha1-UxzeSMfAsfy7wrhUhchmXjFInP0=", "requires": { "character-parser": "^2.1.1", "is-expression": "^3.0.0", @@ -1499,7 +1499,7 @@ "pug-linker": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-3.0.6.tgz", - "integrity": "sha512-bagfuHttfQOpANGy1Y6NJ+0mNb7dD2MswFG2ZKj22s8g0wVsojpRlqveEQHmgXXcfROB2RT6oqbPYr9EN2ZWzg==", + "integrity": "sha1-9b8hiw79Zc5mcPevxRZY0Pgpifs=", "requires": { "pug-error": "^1.3.3", "pug-walk": "^1.1.8" @@ -1508,7 +1508,7 @@ "pug-load": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.12.tgz", - "integrity": "sha512-UqpgGpyyXRYgJs/X60sE6SIf8UBsmcHYKNaOccyVLEuT6OPBIMo6xMPhoJnqtB3Q3BbO4Z3Bjz5qDsUWh4rXsg==", + "integrity": "sha1-04yF64X24vcE3qFNzKlBRNNdPns=", "requires": { "object-assign": "^4.1.0", "pug-walk": "^1.1.8" @@ -1517,7 +1517,7 @@ "pug-parser": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-5.0.1.tgz", - "integrity": "sha512-nGHqK+w07p5/PsPIyzkTQfzlYfuqoiGjaoqHv1LjOv2ZLXmGX1O+4Vcvps+P4LhxZ3drYSljjq4b+Naid126wA==", + "integrity": "sha1-A+etpItoQL04Ivhn19kPhC0P/ck=", "requires": { "pug-error": "^1.3.3", "token-stream": "0.0.1" @@ -1526,12 +1526,12 @@ "pug-runtime": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.5.tgz", - "integrity": "sha512-P+rXKn9un4fQY77wtpcuFyvFaBww7/91f3jHa154qU26qFAnOe6SW1CbIDcxiG5lLK9HazYrMCCuDvNgDQNptw==" + "integrity": "sha1-baeXbDa/IvaOczw1kkDYrnoylTo=" }, "pug-strip-comments": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.4.tgz", - "integrity": "sha512-i5j/9CS4yFhSxHp5iKPHwigaig/VV9g+FgReLJWWHEHbvKsbqL0oP/K5ubuLco6Wu3Kan5p7u7qk8A4oLLh6vw==", + "integrity": "sha1-zBtt4fbo9ZMc8C7GbN/9P1Dq+Kg=", "requires": { "pug-error": "^1.3.3" } @@ -1539,7 +1539,7 @@ "pug-walk": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.8.tgz", - "integrity": "sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA==" + "integrity": "sha1-tAj2fyeRL4wh2i9FtyMMS9Kl6no=" }, "q": { "version": "1.5.1", @@ -1549,7 +1549,7 @@ "qs": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=" }, "random-bytes": { "version": "1.0.0", @@ -1559,12 +1559,12 @@ "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=" }, "raw-body": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "integrity": "sha1-oc5vucm8NWylLoklarWQWeE9AzI=", "requires": { "bytes": "3.1.0", "http-errors": "1.7.2", @@ -1575,7 +1575,7 @@ "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "integrity": "sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0=", "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -1615,12 +1615,12 @@ "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=" }, "registry-auth-token": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", - "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", + "integrity": "sha1-10RoFUM/XV7WQxzV3KIQSPZrOX4=", "requires": { "rc": "^1.1.6", "safe-buffer": "^5.0.1" @@ -1658,22 +1658,22 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=" }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=" }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=" }, "semver-diff": { "version": "2.1.0", @@ -1686,7 +1686,7 @@ "send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "integrity": "sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg=", "requires": { "debug": "2.6.9", "depd": "~1.1.2", @@ -1706,14 +1706,14 @@ "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=" } } }, "serve-static": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "integrity": "sha1-Zm5jbcTwEPfvKZcKiKZ0MgiYsvk=", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -1724,7 +1724,7 @@ "setprototypeof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM=" }, "shebang-command": { "version": "1.2.0", @@ -1747,7 +1747,7 @@ "sprintf-js": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" + "integrity": "sha1-2hdlJiv4wPVxdJ8q1sJjACB65nM=" }, "sqlstring": { "version": "2.3.1", @@ -1762,7 +1762,7 @@ "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -1789,7 +1789,7 @@ "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", "requires": { "safe-buffer": "~5.1.0" } @@ -1815,7 +1815,7 @@ "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", "requires": { "has-flag": "^3.0.0" } @@ -1841,7 +1841,7 @@ "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=", "requires": { "is-number": "^7.0.0" } @@ -1849,7 +1849,7 @@ "toidentifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM=" }, "token-stream": { "version": "0.0.1", @@ -1859,7 +1859,7 @@ "touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "integrity": "sha1-/jZfX3XsntTlaCXgu3bSSrdK+Ds=", "requires": { "nopt": "~1.0.10" } @@ -1867,7 +1867,7 @@ "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=", "requires": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -1899,7 +1899,7 @@ "uid-safe": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", - "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "integrity": "sha1-Kz1cckDo/C5Y+Komnl7knAhXvTo=", "requires": { "random-bytes": "~1.0.0" } @@ -1933,7 +1933,7 @@ "update-notifier": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "integrity": "sha1-0HRFk+E/Fh5AassdlAi3LK0Ir/Y=", "requires": { "boxen": "^1.2.1", "chalk": "^2.0.1", @@ -1987,7 +1987,7 @@ "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", "requires": { "isexe": "^2.0.0" } @@ -1995,7 +1995,7 @@ "widest-line": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "integrity": "sha1-dDh2RzDsfvQ4HOTfgvuYpTFCo/w=", "requires": { "string-width": "^2.1.1" } @@ -2008,7 +2008,7 @@ "write-file-atomic": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "integrity": "sha1-H9Lprh3z51uNjDZ0Q8aS1MqB9IE=", "requires": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", @@ -2023,7 +2023,7 @@ "xml-crypto": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/xml-crypto/-/xml-crypto-1.4.0.tgz", - "integrity": "sha512-K8FRdRxICVulK4WhiTUcJrRyAIJFPVOqxfurA3x/JlmXBTxy+SkEENF6GeRt7p/rB6WSOUS9g0gXNQw5n+407g==", + "integrity": "sha1-3hzsjNMcvWic2Q09boon1K6Afec=", "requires": { "xmldom": "0.1.27", "xpath": "0.0.27" @@ -2064,7 +2064,7 @@ "xmlbuilder": { "version": "11.0.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + "integrity": "sha1-vpuuHIoEbnazESdyY0fQrXACvrM=" }, "xmldom": { "version": "0.1.27", @@ -2074,7 +2074,7 @@ "xpath": { "version": "0.0.27", "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz", - "integrity": "sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==" + "integrity": "sha1-3TQh+9zFZGrDLEhTG01+nQws+pI=" }, "yallist": { "version": "2.1.2", diff --git a/routes/routes-account.js b/routes/routes-account.js index e6343816..5c84648e 100644 --- a/routes/routes-account.js +++ b/routes/routes-account.js @@ -527,5 +527,41 @@ module.exports = function (app, config, passport, i18n) { } }) }) - + + app.get('/contact', function (req, res) { + res.render(lang+'/account/contact', { + user: req.user + }); + }); + + app.post('/contact', function(req, res, next) { + //methods.currentDate(); + let emailAddress = req.body.inputEmail; + let supportAddress = "support-transfer@hft-stuttgart.de"; + let inputName = req.body.name; + let inputContent = req.body.message; + let emailContent = "Es wurde eine Anfrage an das Transferportal gestellt: \n\n NAME: " + inputName + "\n NACHRICHT:\n "+ inputContent; + let emailSubject = "Ihre Anfrage an das Transferportal"; + async.waterfall([ + function(done) { + // send email + mailer.options.to = supportAddress; + mailer.options.cc = emailAddress; + mailer.options.subject = emailSubject; + mailer.options.text = emailContent; + mailer.transport.sendMail(mailer.options, function(err) { + done(err, 'done'); + }); + } + ], function(err) { + if (err) { + req.flash('error', 'Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.'); + } + else { + req.flash('success', 'Vielen Dank für Ihre Anfrage. Wir melden uns baldmöglichst bei Ihnen. Eine Kopie Ihrer Anfrage wurde an ' + emailAddress + ' versandt.'); + } + //res.redirect('/forgotPwd'); // deployment + res.redirect('/account/contact'); // localhost + }); + }); }; \ No newline at end of file -- GitLab
+
+ + Diese Seite bietet den Einstieg zu den unterschiedlichen Projekten, die in unserem Portal für die Öffentlichkeit bereitgestellt werden. + Für diesen Zweck steht zur Zeit ein Dienst bereit: eine von der HFT selbst verwaltete Gitlab-Instanz. + Alle der in diesem Gitlab erfassten Projektinhalte unterliegen einer Open Source bzw. Open Data Lizenz. +

Hinweis: Die Nutzeroberfläche von GitLab ist in Englisch.

+ + +

Direkteinstieg

+
Gitlab Projects + + +
+

Hilfestellung zu GitLab

+ +

Möchten Sie die Projektinhalte ansehen oder herunterladen?

+

+ Dann klicken Sie auf diesen Link zu den Gitlab-Projekten um die Liste aller im Gitlab erfassten Projekte zu sehen. + Vor dort können Sie dann auf die einzelnen Projekte zugreifen. + Ein Anmelden am Portal ist dazu nicht nötig. +

+ +

Möchten Sie zu einem Projekt beitragen?

+

+ Wenn Sie dem Projekteigentümer eine Rückmeldung bzw. einen Fehler melden wollen, navigieren Sie im Gitlab zunächst zum entsprechenden Projekt. + Anschließend können Sie dann dort die Möglichkeit nutzen, ein neues "Issues" einzureichen. + Ein Anmelden am Portal ist dazu nicht nötig. +

+

+ Wenn Sie darüberhinaus beitragen wollen, befolgen Sie bitte folgende Schritte: +

+
    +
  1. + Melden Sie sich bitte im Portal an.
    + Sofern Sie noch nicht als Nutzer im Portal eingetragen sind, wird das System Sie durch die Registrierung leiten.
    + Zur Anmeldung bzw. Registrierung gelangen Sie entweder über das Menü am oberen Seitenrand oder durch Klicken auf diesen Link zum Benutzerkonto. +
  2. +
  3. + Folgen Sie dem Link zu den Gitlab-Projekten, um zum Gitlab zu gelangen. +
  4. +
  5. + Fragen Sie beim Projekteigentümer um Zugang, indem Sie im Gitlab bei der entsprechende Projektseite auf den Link Request Access klicken. Solbald dieser ihre Anfrage bestätigt hat, können Sie loslegen. +
  6. +
+ +

Möchten Sie selbst ein Projekt anlegen, um es der Öffentlichkeit bereitzustellen?

+ +

+ Vorraussetzung dazu ist, dass Sie aktives oder ehemaliges Mitglied der Hochschule für Technik sind, d.h. eine (noch) gültige HFT-Emailadresse haben. + Dann befolgen Sie bitte folgende Schritte: +

+ +
    +
  1. + Melden Sie sich bitte im Portal an.
    + Sofern Sie noch nicht als Nutzer im Portal eingetragen sind, wird das System Sie durch die Registrierung leiten.
    + Zur Anmeldung bzw. Registrierung gelangen Sie entweder über das Menü am oberen Seitenrand oder durch Klicken auf diesen Link zum Benutzerkonto. +
  2. +
  3. + Folgen Sie dem Link zu den Gitlab-Projekten, um zum Gitlab zu gelangen. +
  4. +
  5. + Erstellen Sie dann in Gitlab ein neues Projekt durch Klicken auf den grünen New Project-Knopf und anschließendem Befolgen der Eingabemaske von Gitlab.
    + Weitere Hilfestellung zum Anlegen von Projekten in Gitlab finden Sie in der Gitlab-Dokumentation. +
  6. +
+ + +