From 772d6aab1e2dc85cbca3ecc7a517490d1f954c7b Mon Sep 17 00:00:00 2001 From: Evert Date: Thu, 24 Aug 2017 19:23:03 +0300 Subject: [PATCH] lint everything using standard --- migrations/20170801231334_initial.js | 4 +- package-lock.json | 344 +++++++++++++----- package.json | 6 +- scripts/http.js | 14 +- server/api/emailer.js | 1 - server/api/external.js | 13 +- server/api/index.js | 3 +- server/api/news.js | 10 +- server/api/oauth2/controller/code/code.js | 2 +- server/api/oauth2/controller/code/implicit.js | 2 +- server/api/oauth2/controller/introspection.js | 2 +- server/api/oauth2/controller/token.js | 4 +- .../oauth2/controller/tokens/refreshToken.js | 4 +- server/api/oauth2/model.js | 16 +- server/routes/api.js | 8 +- server/routes/index.js | 23 +- server/server.js | 3 - src/script/main.js | 52 +-- 18 files changed, 323 insertions(+), 188 deletions(-) diff --git a/migrations/20170801231334_initial.js b/migrations/20170801231334_initial.js index 5f82847..8d63fb6 100644 --- a/migrations/20170801231334_initial.js +++ b/migrations/20170801231334_initial.js @@ -1,5 +1,5 @@ -exports.up = function(knex, Promise) { +exports.up = function (knex, Promise) { return Promise.all([ knex.schema.createTable('users', (table) => { table.increments('id').primary() @@ -162,7 +162,7 @@ exports.up = function(knex, Promise) { ]) } -exports.down = function(knex, Promise) { +exports.down = function (knex, Promise) { return Promise.all([ knex.schema.dropTable('sessions'), knex.schema.dropTable('users'), diff --git a/package-lock.json b/package-lock.json index 74837cc..0291319 100644 --- a/package-lock.json +++ b/package-lock.json @@ -60,6 +60,12 @@ "json-stable-stringify": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz" } }, + "ajv-keywords": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", + "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", + "dev": true + }, "align-text": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", @@ -167,7 +173,7 @@ "dev": true, "requires": { "define-properties": "1.1.2", - "es-abstract": "1.7.0" + "es-abstract": "1.8.0" } }, "arrify": { @@ -863,9 +869,9 @@ } }, "circular-json": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.1.tgz", - "integrity": "sha1-vos2rvzN6LPKeqLWr8B6NyQsDS0=", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", "dev": true }, "clean-css": { @@ -905,9 +911,9 @@ } }, "cli-width": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz", - "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, "cliui": { @@ -1292,7 +1298,7 @@ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { - "es5-ext": "0.10.24" + "es5-ext": "0.10.29" } }, "dashdash": { @@ -1665,13 +1671,14 @@ } }, "es-abstract": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.7.0.tgz", - "integrity": "sha1-363ndOAb/Nl/lhgCmMRJyGI/uUw=", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.8.0.tgz", + "integrity": "sha512-Cf9/h5MrXtExM20gSS55YFrGKCyPrRBjIVBtVyy8vmlsDfe0NPKMWj65tPLgzyfPuapWxh5whpXCtW4+AW5mRg==", "dev": true, "requires": { "es-to-primitive": "1.1.1", "function-bind": "1.1.0", + "has": "1.0.1", "is-callable": "1.1.3", "is-regex": "1.0.4" } @@ -1688,9 +1695,9 @@ } }, "es5-ext": { - "version": "0.10.24", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.24.tgz", - "integrity": "sha1-pVh3yZJLwMjZvTwsvhdJWsFwmxQ=", + "version": "0.10.29", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.29.tgz", + "integrity": "sha512-KXla9NXo5sdaEkGSmbFPYgjH6m75kxsthL6GDRSug/Y2OiMoYm0I9giL39j4cgmaFmAbkIFJ6gG+SGKnLSmOvA==", "dev": true, "requires": { "es6-iterator": "2.0.1", @@ -1704,7 +1711,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.24", + "es5-ext": "0.10.29", "es6-symbol": "3.1.1" } }, @@ -1715,7 +1722,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.24", + "es5-ext": "0.10.29", "es6-iterator": "2.0.1", "es6-set": "0.1.5", "es6-symbol": "3.1.1", @@ -1729,7 +1736,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.24", + "es5-ext": "0.10.29", "es6-iterator": "2.0.1", "es6-symbol": "3.1.1", "event-emitter": "0.3.5" @@ -1742,7 +1749,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.24" + "es5-ext": "0.10.29" } }, "es6-weak-map": { @@ -1752,7 +1759,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.24", + "es5-ext": "0.10.29", "es6-iterator": "2.0.1", "es6-symbol": "3.1.1" } @@ -1789,7 +1796,7 @@ "debug": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", "doctrine": "2.0.0", "escope": "3.6.0", - "espree": "3.4.3", + "espree": "3.5.0", "esquery": "1.0.0", "estraverse": "4.2.0", "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", @@ -1799,9 +1806,9 @@ "ignore": "3.3.3", "imurmurhash": "0.1.4", "inquirer": "0.12.0", - "is-my-json-valid": "2.16.0", + "is-my-json-valid": "2.16.1", "is-resolvable": "1.0.0", - "js-yaml": "3.9.0", + "js-yaml": "3.9.1", "json-stable-stringify": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", "levn": "0.3.0", "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", @@ -1831,14 +1838,25 @@ } } }, + "eslint-config-standard": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz", + "integrity": "sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE=", + "dev": true + }, + "eslint-config-standard-jsx": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.2.tgz", + "integrity": "sha512-F8fRh2WFnTek7dZH9ZaE0PCBwdVGkwVWZmizla/DDNOmg7Tx6B/IlK5+oYpiX29jpu73LszeJj5i1axEZv6VMw==", + "dev": true + }, "eslint-import-resolver-node": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz", - "integrity": "sha1-Wt2BBujJKNssuiMrzZ76hG49oWw=", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz", + "integrity": "sha512-yUtXS15gIcij68NmXmP9Ni77AQuCN0itXbCc/jWd8C6/yKZaSNXicpC8cgvjnxVdmfsosIXrjpzFq7GcDryb6A==", "dev": true, "requires": { "debug": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "object-assign": "4.1.1", "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz" } }, @@ -1852,16 +1870,90 @@ "pkg-dir": "1.0.0" } }, + "eslint-plugin-import": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.7.0.tgz", + "integrity": "sha512-HGYmpU9f/zJaQiKNQOVfHUh2oLWW3STBrCgH0sHTX1xtsxYlH1zjLh8FlQGEIdZSdTbUMaV36WaZ6ImXkenGxQ==", + "dev": true, + "requires": { + "builtin-modules": "1.1.1", + "contains-path": "0.1.0", + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "0.3.1", + "eslint-module-utils": "2.1.1", + "has": "1.0.1", + "lodash.cond": "4.5.2", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "read-pkg-up": "2.0.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + } + } + } + }, + "eslint-plugin-node": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-4.2.3.tgz", + "integrity": "sha512-vIUQPuwbVYdz/CYnlTLsJrRy7iXHQjdEe5wz0XhhdTym3IInM/zZLlPf9nZ2mThsH0QcsieCOWs2vOeCy/22LQ==", + "dev": true, + "requires": { + "ignore": "3.3.3", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "object-assign": "4.1.1", + "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz", + "semver": "5.3.0" + } + }, "eslint-plugin-promise": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz", "integrity": "sha1-ePu2/+BHIBYnVp6FpsU3OvKmj8o=", "dev": true }, + "eslint-plugin-react": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz", + "integrity": "sha1-xUNb6wZ3ThLH2y9qut3L+QDNP3g=", + "dev": true, + "requires": { + "array.prototype.find": "2.0.4", + "doctrine": "1.5.0", + "has": "1.0.1", + "jsx-ast-utils": "1.4.1", + "object.assign": "4.0.4" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + } + } + } + }, + "eslint-plugin-standard": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz", + "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=", + "dev": true + }, "espree": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.4.3.tgz", - "integrity": "sha1-KRC1zNSc6JPC//+qtP2LOjG4I3Q=", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.0.tgz", + "integrity": "sha1-mDWGJb3QVYYeon4oZ+pyn69GPY0=", "dev": true, "requires": { "acorn": "5.1.1", @@ -1914,7 +2006,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.24" + "es5-ext": "0.10.29" } }, "events": { @@ -2153,7 +2245,7 @@ "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", "dev": true, "requires": { - "circular-json": "0.3.1", + "circular-json": "0.3.3", "del": "2.2.2", "graceful-fs": "4.1.11", "write": "0.2.1" @@ -2435,6 +2527,12 @@ "parse-passwd": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" } }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "dev": true + }, "htmlescape": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", @@ -2573,7 +2671,7 @@ "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "cli-cursor": "1.0.2", - "cli-width": "2.1.0", + "cli-width": "2.2.0", "figures": "1.7.0", "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", "readline2": "1.0.1", @@ -2661,6 +2759,15 @@ "version": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=" }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, "is-callable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", @@ -2732,9 +2839,9 @@ } }, "is-my-json-valid": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz", - "integrity": "sha1-8Hndm/2uZe4gOKrorLyGqxCeNpM=", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", + "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==", "dev": true, "requires": { "generate-function": "2.0.0", @@ -2861,9 +2968,9 @@ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" }, "js-yaml": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.0.tgz", - "integrity": "sha512-0LoUNELX4S+iofCT8f4uEHIiRBR+c2AINyC8qRWfC6QNruLtxVZRJaPcu/xwMgFIgDxF25tGHaDjvxzJCNE9yw==", + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.1.tgz", + "integrity": "sha512-CbcG379L1e+mWBnLvHWWeLs8GyV/EMw862uLI3c+GxVyDHWZcjZinwuBd3iW2pgxgIlksW/1vNJa4to+RvDOww==", "dev": true, "requires": { "argparse": "1.0.9", @@ -3432,6 +3539,18 @@ "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.0.1.tgz", "integrity": "sha1-uVhksH+s7oKH6CMu/9bx1W7HWrI=" }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.3.0", + "validate-npm-package-license": "3.0.1" + } + }, "normalize-path": { "version": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", @@ -3682,6 +3801,15 @@ "version": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "2.3.0" + } + }, "pbkdf2": { "version": "3.0.13", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.13.tgz", @@ -4103,6 +4231,38 @@ } } }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + } + } + }, "readable-stream": { "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", @@ -4526,6 +4686,27 @@ "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", "dev": true }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -4559,16 +4740,16 @@ } }, "standard": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/standard/-/standard-10.0.2.tgz", - "integrity": "sha1-l0wcU8yGWwdaS1dueEQeFpXar3s=", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/standard/-/standard-10.0.3.tgz", + "integrity": "sha512-JURZ+85ExKLQULckDFijdX5WHzN6RC7fgiZNSV4jFQVo+3tPoQGHyBrGekye/yf0aOfb4210EM5qPNlc2cRh4w==", "dev": true, "requires": { "eslint": "3.19.0", "eslint-config-standard": "10.2.1", - "eslint-config-standard-jsx": "4.0.1", + "eslint-config-standard-jsx": "4.0.2", "eslint-plugin-import": "2.2.0", - "eslint-plugin-node": "4.2.2", + "eslint-plugin-node": "4.2.3", "eslint-plugin-promise": "3.5.0", "eslint-plugin-react": "6.10.3", "eslint-plugin-standard": "3.0.1", @@ -4585,17 +4766,16 @@ "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" } }, - "eslint-config-standard": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz", - "integrity": "sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE=", - "dev": true - }, - "eslint-config-standard-jsx": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.1.tgz", - "integrity": "sha1-zU5GPQJo4tnnB/YfQvc/WzMzxkI=", - "dev": true + "eslint-import-resolver-node": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz", + "integrity": "sha1-Wt2BBujJKNssuiMrzZ76hG49oWw=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "object-assign": "4.1.1", + "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz" + } }, "eslint-plugin-import": { "version": "2.2.0", @@ -4614,38 +4794,6 @@ "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "pkg-up": "1.0.0" } - }, - "eslint-plugin-node": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-4.2.2.tgz", - "integrity": "sha1-gpWcqa7Xn8vSi7GxiNBcrAT7M2M=", - "dev": true, - "requires": { - "ignore": "3.3.3", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "object-assign": "4.1.1", - "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz", - "semver": "5.3.0" - } - }, - "eslint-plugin-react": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz", - "integrity": "sha1-xUNb6wZ3ThLH2y9qut3L+QDNP3g=", - "dev": true, - "requires": { - "array.prototype.find": "2.0.4", - "doctrine": "1.5.0", - "has": "1.0.1", - "jsx-ast-utils": "1.4.1", - "object.assign": "4.0.4" - } - }, - "eslint-plugin-standard": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz", - "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=", - "dev": true } } }, @@ -4944,7 +5092,7 @@ "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", "slice-ansi": "0.0.4", - "string-width": "2.1.0" + "string-width": "2.1.1" }, "dependencies": { "ajv": { @@ -4957,12 +5105,6 @@ "json-stable-stringify": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz" } }, - "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", - "dev": true - }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", @@ -4976,9 +5118,9 @@ "dev": true }, "string-width": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.0.tgz", - "integrity": "sha1-AwZkVh/BRslCPsfZeP4kV0N/5tA=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { "is-fullwidth-code-point": "2.0.0", @@ -5245,6 +5387,16 @@ "user-home": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz" } }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } + }, "vary": { "version": "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz", "integrity": "sha1-Z1Neu2lMHVIldFeYRmUyP1h+jTc=" diff --git a/package.json b/package.json index b53d732..dd76b36 100644 --- a/package.json +++ b/package.json @@ -55,15 +55,17 @@ "devDependencies": { "browserify": "^14.4.0", "concurrently": "^3.5.0", + "eslint-plugin-import": "^2.7.0", "jquery": "^3.2.1", - "standard": "^10.0.2", + "standard": "^10.0.3", "uglify-js": "^1.3.5", "watchify": "^3.9.0" }, "standard": { "env": { "browser": true, - "node": true + "node": true, + "jquery": true } } } diff --git a/scripts/http.js b/scripts/http.js index 3c4c4fb..2f1a5c7 100644 --- a/scripts/http.js +++ b/scripts/http.js @@ -2,7 +2,7 @@ import url from 'url' import qs from 'querystring' function HTTP_GET (link, headers = {}, lback) { - if(lback && lback >= 4) throw new Error('infinite loop!') // Prevent infinite loop requests + if (lback && lback >= 4) throw new Error('infinite loop!') // Prevent infinite loop requests let parsed = url.parse(link) let opts = { host: parsed.hostname, @@ -15,7 +15,7 @@ function HTTP_GET (link, headers = {}, lback) { } } - if(headers) { + if (headers) { opts.headers = Object.assign(opts.headers, headers) } @@ -25,7 +25,7 @@ function HTTP_GET (link, headers = {}, lback) { return new Promise((resolve, reject) => { let req = httpModule.get(opts, (res) => { if (res.statusCode === 302 || res.statusCode === 301) { - if(!lback) { + if (!lback) { lback = 1 } else { lback += 1 @@ -61,7 +61,7 @@ function HTTP_GET (link, headers = {}, lback) { function HTTP_POST (link, headers = {}, data) { let parsed = url.parse(link) - let post_data = qs.stringify(data) + let postData = qs.stringify(data) let opts = { host: parsed.host, @@ -70,7 +70,7 @@ function HTTP_POST (link, headers = {}, data) { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', - 'Content-Length': Buffer.byteLength(post_data), + 'Content-Length': Buffer.byteLength(postData), 'User-Agent': 'Squeebot/Commons-2.0.0' } } @@ -80,7 +80,7 @@ function HTTP_POST (link, headers = {}, data) { } if (opts.headers['Content-Type'] === 'application/json') { - post_data = JSON.stringify(data) + postData = JSON.stringify(data) } return new Promise((resolve, reject) => { @@ -100,7 +100,7 @@ function HTTP_POST (link, headers = {}, data) { reject(new Error(e)) }) - req.write(post_data) + req.write(postData) req.end() }) } diff --git a/server/api/emailer.js b/server/api/emailer.js index 785a258..800e0a0 100644 --- a/server/api/emailer.js +++ b/server/api/emailer.js @@ -1,6 +1,5 @@ import {EmailTemplate} from 'email-templates' import path from 'path' -import bluebird from 'bluebird' import nodemailer from 'nodemailer' import config from '../../scripts/load-config' diff --git a/server/api/external.js b/server/api/external.js index 1595830..1eb78f8 100644 --- a/server/api/external.js +++ b/server/api/external.js @@ -1,5 +1,4 @@ import config from '../../scripts/load-config' -import database from '../../scripts/load-database' import http from '../../scripts/http' import models from './models' import UAPI from './index' @@ -84,7 +83,7 @@ const API = { // Determine profile picture let profilepic = '' if (fbdata.picture) { - if (fbdata.picture.is_silhouette == false && fbdata.picture.url) { + if (fbdata.picture.is_silhouette === false && fbdata.picture.url) { // TODO: Download the profile image and save it locally profilepic = fbdata.picture.url } @@ -141,7 +140,7 @@ const API = { getRequestToken: async function () { if (!twitterApp) API.Twitter.oauthApp() let tokens - + try { tokens = await twitterApp.getOAuthRequestToken() } catch (e) { @@ -149,7 +148,7 @@ const API = { return {error: 'No tokens returned'} } - if (tokens[2].oauth_callback_confirmed !== "true") return {error: 'No tokens returned.'} + if (tokens[2].oauth_callback_confirmed !== 'true') return {error: 'No tokens returned.'} return {error: null, token: tokens[0], token_secret: tokens[1]} }, @@ -172,8 +171,8 @@ const API = { if (!twitterApp) API.Twitter.oauthApp() let twdata try { - let resp = await twitterApp.get('https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true', accessTokens.access_token, - accessTokens.access_token_secret) + let resp = await twitterApp.get('https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true', + accessTokens.access_token, accessTokens.access_token_secret) twdata = JSON.parse(resp[0]) } catch (e) { console.error(e) @@ -236,7 +235,7 @@ const API = { } }, Discord: { - oauth2App: function() { + oauth2App: function () { if (discordApp) return discordApp = new oauth.PromiseOAuth2( config.discord.api, diff --git a/server/api/index.js b/server/api/index.js index 6c3b515..78f5ae5 100644 --- a/server/api/index.js +++ b/server/api/index.js @@ -1,7 +1,6 @@ import path from 'path' import cprog from 'child_process' import config from '../../scripts/load-config' -import database from '../../scripts/load-database' import models from './models' import crypto from 'crypto' import notp from 'notp' @@ -78,7 +77,7 @@ const API = { }, ensureObject: async function (user, fieldsPresent = ['id']) { if (typeof user !== 'object' || !keysAvailable(user, fieldsPresent)) { - return await API.User.get(user) + return API.User.get(user) } if (user.id) { diff --git a/server/api/news.js b/server/api/news.js index f191ab0..8856db2 100644 --- a/server/api/news.js +++ b/server/api/news.js @@ -1,7 +1,5 @@ import API from './index' import Models from './models' -import config from '../../scripts/load-config' -import database from '../../scripts/load-database' const perPage = 8 @@ -9,7 +7,7 @@ function slugify (title) { return title.toLowerCase().replace(/\W/g, '-').substring(0, 16) } -//** ppp - Posts Per Page; dcount - Post Count; page - number of current page +/* ppp - Posts Per Page; dcount - Post Count; page - number of current page */ function Pagination (ppp, dcount, page) { if (!ppp) ppp = 5 if (!dcount) return null @@ -18,7 +16,7 @@ function Pagination (ppp, dcount, page) { if (page > pageCount) page = pageCount let offset = (page - 1) * ppp - + return { page: page, perPage: ppp, @@ -98,9 +96,7 @@ const News = { if (!article.length) return {} article = article[0] - let poster = await API.User.get(article.user_id) - - return await cleanArticle(article) + return cleanArticle(article) } } diff --git a/server/api/oauth2/controller/code/code.js b/server/api/oauth2/controller/code/code.js index 0da45d5..cc2a00a 100644 --- a/server/api/oauth2/controller/code/code.js +++ b/server/api/oauth2/controller/code/code.js @@ -9,7 +9,7 @@ module.exports = async (req, res, client, scope, user, redirectUri, createAllowF } if (createAllowFuture) { - if (!req.body || (typeof req.body['decision']) === undefined) { + if (!req.body || (typeof req.body['decision']) === 'undefined') { throw new error.InvalidRequest('No decision parameter passed') } else if (req.body['decision'] === '0') { throw new error.AccessDenied('User denied access to the resource') diff --git a/server/api/oauth2/controller/code/implicit.js b/server/api/oauth2/controller/code/implicit.js index f00a497..4a2442b 100644 --- a/server/api/oauth2/controller/code/implicit.js +++ b/server/api/oauth2/controller/code/implicit.js @@ -9,7 +9,7 @@ module.exports = async (req, res, client, scope, user, redirectUri, createAllowF } if (createAllowFuture) { - if (!req.body || (typeof req.body['decision']) === undefined) { + if (!req.body || (typeof req.body['decision']) === 'undefined') { throw new error.InvalidRequest('No decision parameter passed') } else if (req.body['decision'] === '0') { throw new error.AccessDenied('User denied access to the resource') diff --git a/server/api/oauth2/controller/introspection.js b/server/api/oauth2/controller/introspection.js index 2b71463..8e5d443 100644 --- a/server/api/oauth2/controller/introspection.js +++ b/server/api/oauth2/controller/introspection.js @@ -24,7 +24,7 @@ module.exports = wrap(async function (req, res) { return response.error(req, res, new error.InvalidRequest('Unsupported authorization method:', pieces[0])) } - pieces = new Buffer(pieces[1], 'base64').toString('ascii').split(':', 2) + pieces = Buffer.from(pieces[1], 'base64').toString('ascii').split(':', 2) if (!pieces || pieces.length !== 2) { return response.error(req, res, new error.InvalidRequest('Authorization header has corrupted data')) } diff --git a/server/api/oauth2/controller/token.js b/server/api/oauth2/controller/token.js index d42108f..3d97903 100644 --- a/server/api/oauth2/controller/token.js +++ b/server/api/oauth2/controller/token.js @@ -26,7 +26,7 @@ module.exports = wrap(async (req, res) => { return response.error(req, res, new error.InvalidRequest('Unsupported authorization method:', pieces[0])) } - pieces = new Buffer(pieces[1], 'base64').toString('ascii').split(':', 2) + pieces = Buffer.from(pieces[1], 'base64').toString('ascii').split(':', 2) if (!pieces || pieces.length !== 2) { return response.error(req, res, new error.InvalidRequest('Authorization header has corrupted data')) } @@ -44,7 +44,7 @@ module.exports = wrap(async (req, res) => { console.debug('Parameter grant_type is', grantType) let client = await req.oauth2.model.client.fetchById(clientId) - + if (!client) { return response.error(req, res, new error.InvalidClient('Client not found')) } diff --git a/server/api/oauth2/controller/tokens/refreshToken.js b/server/api/oauth2/controller/tokens/refreshToken.js index 6b8ed9e..f8ff948 100644 --- a/server/api/oauth2/controller/tokens/refreshToken.js +++ b/server/api/oauth2/controller/tokens/refreshToken.js @@ -25,7 +25,7 @@ module.exports = async (oauth2, client, pRefreshToken, scope) => { } if (oauth2.model.refreshToken.getClientId(refreshToken) !== oauth2.model.client.getId(client)) { - console.warn('Client "' + oauth2.model.client.getId(client) + '" tried to fetch a refresh token which belongs to client"' + + console.warn('Client "' + oauth2.model.client.getId(client) + '" tried to fetch a refresh token which belongs to client"' + oauth2.model.refreshToken.getClientId(refreshToken) + '"') throw new error.InvalidGrant('Refresh token not found') } @@ -59,7 +59,7 @@ module.exports = async (oauth2, client, pRefreshToken, scope) => { if (!accessToken) { try { - resObj.access_token = await oauth2.model.accessToken.create(oauth2.model.user.getId(user), + resObj.access_token = await oauth2.model.accessToken.create(oauth2.model.user.getId(user), oauth2.model.client.getId(client), oauth2.model.refreshToken.getScope(refreshToken), oauth2.model.accessToken.ttl) } catch (err) { throw new error.ServerError('Failed to call accessToken.create function') diff --git a/server/api/oauth2/model.js b/server/api/oauth2/model.js index c996e5e..fa47bfc 100644 --- a/server/api/oauth2/model.js +++ b/server/api/oauth2/model.js @@ -1,8 +1,6 @@ import config from '../../../scripts/load-config' -import database from '../../../scripts/load-database' import Models from '../models' import Users from '../index' - import crypto from 'crypto' const OAuthDB = { @@ -62,7 +60,7 @@ const OAuthDB = { }, fetchById: async (id) => { let client = await Models.OAuth2Client.query().where('id', id) - + if (!client.length) return null return client[0] @@ -91,7 +89,7 @@ const OAuthDB = { } scope = scope.trim() - if (scope.indexOf(',') != -1) { + if (scope.indexOf(',') !== -1) { scope = scope.split(',') } else { scope = scope.split(' ') @@ -141,7 +139,7 @@ const OAuthDB = { code = await Models.OAuth2Code.query().where('code', code) if (!code.length) return null - + return code[0] }, removeByCode: async (code) => { @@ -149,7 +147,7 @@ const OAuthDB = { code = code.code } - return await Models.OAuth2Code.query().delete().where('code', code) + return Models.OAuth2Code.query().delete().where('code', code) }, getUserId: (code) => { return code.user_id @@ -182,15 +180,15 @@ const OAuthDB = { token = await Models.OAuth2RefreshToken.query().where('token', token) if (!token.length) return null - + return token[0] }, removeByUserIdClientId: async (userId, clientId) => { - return await Models.OAuth2RefreshToken.query().delete().where('user_id', userId) + return Models.OAuth2RefreshToken.query().delete().where('user_id', userId) .andWhere('client_id', clientId) }, removeByRefreshToken: async (token) => { - return await Models.OAuth2RefreshToken.query().delete().where('token', token) + return Models.OAuth2RefreshToken.query().delete().where('token', token) }, getUserId: (refreshToken) => { return refreshToken.user_id diff --git a/server/routes/api.js b/server/routes/api.js index 7770d57..a236db6 100644 --- a/server/routes/api.js +++ b/server/routes/api.js @@ -1,9 +1,7 @@ import express from 'express' -import parseurl from 'parseurl' import RateLimit from 'express-rate-limit' import config from '../../scripts/load-config' import wrap from '../../scripts/asyncRoute' -import API from '../api' import APIExtern from '../api/external' import News from '../api/news' @@ -63,8 +61,8 @@ function createSession (req, user) { } // Either give JSON or make a redirect -function JsonData (req, res, error, redirect='/') { - if (req.headers['content-type'] == 'application/json') { +function JsonData (req, res, error, redirect = '/') { + if (req.headers['content-type'] === 'application/json') { return res.jsonp({error: error, redirect: redirect}) } @@ -155,7 +153,7 @@ router.get('/external/twitter/callback', wrap(async (req, res) => { */ router.get('/external/discord/login', wrap(async (req, res) => { if (!config.discord || !config.discord.api) return res.redirect('/') - + let infos = APIExtern.Discord.getAuthorizeURL() req.session.discord_auth = { diff --git a/server/routes/index.js b/server/routes/index.js index 8f49a54..71b5e48 100644 --- a/server/routes/index.js +++ b/server/routes/index.js @@ -8,7 +8,6 @@ import wrap from '../../scripts/asyncRoute' import http from '../../scripts/http' import API from '../api' import News from '../api/news' -import email from '../api/emailer' import apiRouter from './api' import oauthRouter from './oauth2' @@ -102,9 +101,8 @@ router.get('/user/two-factor', wrap(async (req, res) => { let newToken = await API.User.Login.totpAquire(req.session.user) if (!newToken) return res.redirect('/') - - res.locals.uri = newToken - res.render('totp') + + res.render('totp', { uri: newToken }) })) router.get('/user/two-factor/disable', wrap(async (req, res) => { @@ -133,7 +131,7 @@ function formError (req, res, error, redirect) { delete req.body.password_repeat } } - + req.flash('formkeep', req.body || {}) req.flash('message', {error: true, text: error}) res.redirect(redirect || parseurl(req).path) @@ -279,8 +277,8 @@ router.post('/register', accountLimiter, wrap(async (req, res) => { } // 2nd Check: Display Name - let display_name = req.body.display_name - if (!display_name || !display_name.match(/^([^\\`]{3,32})$/i)) { + let displayName = req.body.display_name + if (!displayName || !displayName.match(/^([^\\`]{3,32})$/i)) { return formError(req, res, 'Invalid display name!') } @@ -305,7 +303,7 @@ router.post('/register', accountLimiter, wrap(async (req, res) => { // 6th Check: reCAPTCHA (if configuration contains key) if (config.security.recaptcha && config.security.recaptcha.site_key) { if (!req.body['g-recaptcha-response']) return formError(req, res, 'Please complete the reCAPTCHA!') - + try { let data = await http.POST('https://www.google.com/recaptcha/api/siteverify', {}, { secret: config.security.recaptcha.secret_key, @@ -328,7 +326,7 @@ router.post('/register', accountLimiter, wrap(async (req, res) => { // Attempt to create the user let newUser = await API.User.Register.newAccount({ username: username, - display_name: display_name, + display_name: displayName, password: hash, email: email, ip_address: req.realIP @@ -381,7 +379,7 @@ router.get('/news/', wrap(async (req, res) => { } let news = await News.listNews(page) - + res.render('news', {news: news}) })) @@ -412,11 +410,6 @@ router.get('/activate/:token', wrap(async (req, res) => { router.use('/api', apiRouter) -/*router.get('/test', (req, res, next) => { - email.pushMail('test', req.session.user.email, req.session.user).catch((e) => {next(e)}) - res.jsonp({}) -})*/ - router.use((err, req, res, next) => { console.error(err) next() diff --git a/server/server.js b/server/server.js index 99dfd5d..e253dcb 100644 --- a/server/server.js +++ b/server/server.js @@ -5,12 +5,9 @@ import connectSession from 'connect-redis' import path from 'path' import crypto from 'crypto' -import fs from 'fs' - import routes from './routes' import flash from '../scripts/flash' import config from '../scripts/load-config' -import database from '../scripts/load-database' import email from './api/emailer' let app = express() diff --git a/src/script/main.js b/src/script/main.js index 7453877..422a2d6 100644 --- a/src/script/main.js +++ b/src/script/main.js @@ -1,15 +1,29 @@ window.$ = require('jquery') $(document).ready(function () { + function pwcheck (e) { + var pw = $('#password').val() + var pwa = $('#password_repeat').val() + if (pwa !== pw) { + $('#password_repeat').addClass('invalid') + $('#repeatcheck').show() + $('#repeatcheck').html('The passwords do not match.') + } else { + $('#password_repeat').removeClass('invalid') + $('#repeatcheck').hide() + $('#repeatcheck').html('') + } + } + if (window.location.hash) { - var locha = window.location.hash + var locha = window.location.hash if ($(locha).length) { $(window).scrollTop($(locha).offset().top - $('.navigator').innerHeight() * 2) } } - $(window).on('scroll', function() { - if($(window).scrollTop() >= $('.banner').innerHeight()) { + $(window).on('scroll', function () { + if ($(window).scrollTop() >= $('.banner').innerHeight()) { $('.anchor').css('height', $('.navigator').innerHeight() + 'px') $('#navlogo').removeClass('hidden') $('.navigator').addClass('fix') @@ -20,7 +34,7 @@ $(document).ready(function () { } }) - if($(window).scrollTop() >= $('.banner').innerHeight()) { + if ($(window).scrollTop() >= $('.banner').innerHeight()) { $('#navlogo').removeClass('hidden') $('.navigator').addClass('fix') $('.anchor').css('height', $('.navigator').innerHeight() + 'px') @@ -32,13 +46,13 @@ $(document).ready(function () { var dest = 0 if ($(this.hash).offset().top > $(document).height() - $(window).height()) { - dest = $(document).height() - $(window).height() + dest = $(document).height() - $(window).height() } else { - dest = $(this.hash).offset().top + dest = $(this.hash).offset().top } $('html,body').animate({ - scrollTop: dest - $('.navigator').innerHeight() + scrollTop: dest - $('.navigator').innerHeight() }, 1000, 'swing') }) @@ -47,27 +61,13 @@ $(document).ready(function () { $('.flexview').toggleClass('extended') }) - $('body').click(function(e) { + $('body').click(function (e) { if (!$(e.target).is('#mobile') && !$(e.target).is('#mobile i') && $('.flexview').hasClass('extended')) { $('.flexview').removeClass('extended') } }) if ($('#repeatcheck').length) { - function pwcheck (e) { - var pw = $('#password').val() - var pwa = $('#password_repeat').val() - if (pwa !== pw) { - $('#password_repeat').addClass('invalid') - $('#repeatcheck').show() - $('#repeatcheck').html('The passwords do not match.') - } else { - $('#password_repeat').removeClass('invalid') - $('#repeatcheck').hide() - $('#repeatcheck').html('') - } - } - $('#password_repeat').on('keyup', pwcheck) $('#password').on('keyup', function (e) { if ($('#password_repeat').val()) { @@ -101,7 +101,8 @@ $(document).ready(function () { } window.checkLoginState = function () { - FB.getLoginStatus(function(response) { + var FB = window.FB + FB.getLoginStatus(function (response) { $.ajax({ type: 'post', url: '/api/external/facebook/callback', @@ -115,12 +116,13 @@ $(document).ready(function () { } if (data.redirect) { - return window.location.href = data.redirect + window.location.href = data.redirect + return } window.location.reload() } - }).fail(function() { + }).fail(function () { $('.message').addClass('error') $('.message span').text('An error occured.') })