From af3ccbebf1d14d2c4549ac1365c176f13c118f02 Mon Sep 17 00:00:00 2001 From: misabiko Date: Sat, 18 Jul 2020 20:47:58 -0400 Subject: [PATCH] Fixed passport login --- .gitignore | 3 +- .idea/$CACHE_FILE$ | 32 +++ .idea/jsLibraryMappings.xml | 6 + .idea/misc.xml | 6 + .idea/vcs.xml | 6 + .idea/watcherTasks.xml | 4 + package-lock.json | 203 ++++++++++++++++++ package.json | 6 +- public/main.js | 11 + src/App.ts | 69 ++++-- src/server.ts | 7 +- tsconfig.json | 5 +- views/login.pug | 1 + views/sb-admin-2/pug_inc/header/user-info.pug | 2 +- views/sb-admin-2/pug_inc/mixins/mixins.pug | 25 +-- views/sb-admin-2/pug_inc/scripts.pug | 1 + 16 files changed, 347 insertions(+), 40 deletions(-) create mode 100644 .idea/$CACHE_FILE$ create mode 100644 .idea/jsLibraryMappings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml create mode 100644 .idea/watcherTasks.xml create mode 100644 public/main.js create mode 100644 views/login.pug diff --git a/.gitignore b/.gitignore index 365034f..9217784 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,6 @@ vendor/ node_modules/ npm-debug.log -.idea/ + +**/config.json dist/ \ No newline at end of file diff --git a/.idea/$CACHE_FILE$ b/.idea/$CACHE_FILE$ new file mode 100644 index 0000000..30d7da5 --- /dev/null +++ b/.idea/$CACHE_FILE$ @@ -0,0 +1,32 @@ + + + + + + + + + EditorConfig + + + Flow type checkerJavaScript + + + General + + + Internationalization + + + JavaScript + + + + + CSS + + + + + + \ No newline at end of file diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml new file mode 100644 index 0000000..9f737c1 --- /dev/null +++ b/.idea/jsLibraryMappings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..28a804d --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/watcherTasks.xml b/.idea/watcherTasks.xml new file mode 100644 index 0000000..afc2f4e --- /dev/null +++ b/.idea/watcherTasks.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 18a0480..ba2e1c9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,18 @@ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" }, + "@babel/register": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.10.5.tgz", + "integrity": "sha512-eYHdLv43nyvmPn9bfNfrcC4+iYNwdQ8Pxk1MFJuU/U5LpSYl/PH4dFMazCYZDFVi8ueG3shvO+AQfLrxpYulQw==", + "requires": { + "find-cache-dir": "^2.0.0", + "lodash": "^4.17.19", + "make-dir": "^2.1.0", + "pirates": "^4.0.0", + "source-map-support": "^0.5.16" + } + }, "@babel/types": { "version": "7.10.5", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", @@ -29,6 +41,18 @@ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.13.1.tgz", "integrity": "sha512-D819f34FLHeBN/4xvw0HR0u7U2G7RqjPSggXqf7LktsxWQ48VAfGwvMrhcVuaZV2fF069c/619RdgCCms0DHhw==" }, + "@natlibfi/passport-atlassian-crowd": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@natlibfi/passport-atlassian-crowd/-/passport-atlassian-crowd-2.0.3.tgz", + "integrity": "sha512-GGFcZixy2CwkS/H2+z+3k9Jp+doo4rcey7x6i5kdr81uZ94GN1aIDuzoENAxUpvpfKmefDkDOf+U3uo8ySnbcw==", + "requires": { + "@babel/register": "^7.0.0", + "http-status": "^1.3.1", + "moment": "^2.24.0", + "node-fetch": "^2.3.0", + "passport-strategy": "^1.0.0" + } + }, "@types/babel-types": { "version": "7.0.8", "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.8.tgz", @@ -254,6 +278,11 @@ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", @@ -416,6 +445,11 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -448,6 +482,15 @@ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" }, + "cookie-parser": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.5.tgz", + "integrity": "sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw==", + "requires": { + "cookie": "0.4.0", + "cookie-signature": "1.0.6" + } + }, "cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", @@ -648,6 +691,33 @@ "vary": "~1.1.2" } }, + "express-session": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.1.tgz", + "integrity": "sha512-UbHwgqjxQZJiWRTMyhvWGvjBQduGCSBDhhZXYenziMFjxst5rMV+aJZ6hKPHZnPyHGsrqRICxtX8jtEbm/z36Q==", + "requires": { + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "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": { + "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==" + } + } + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -670,6 +740,16 @@ "unpipe": "~1.0.0" } }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -784,6 +864,11 @@ "toidentifier": "1.0.0" } }, + "http-status": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/http-status/-/http-status-1.4.2.tgz", + "integrity": "sha512-mBnIohUwRw9NyXMEMMv8/GANnzEYUj0Y8d3uL01zDWFkxUjYyZ6rgCaAI2zZ1Wb34Oqtbx/nFZolPRDc8Xlm5A==" + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -1010,6 +1095,15 @@ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -1132,6 +1226,16 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, + "node-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -1210,6 +1314,20 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "passport": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz", + "integrity": "sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg==", + "requires": { + "passport-strategy": "1.x.x", + "pause": "0.0.1" + } + }, + "passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -1235,11 +1353,69 @@ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" }, + "pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" + }, "picomatch": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + } + } + }, "promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", @@ -1561,6 +1737,11 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" }, + "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.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -1631,6 +1812,11 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, "send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", @@ -1689,6 +1875,15 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -1858,6 +2053,14 @@ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", "optional": true }, + "uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "requires": { + "random-bytes": "~1.0.0" + } + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", diff --git a/package.json b/package.json index f63624c..b3ecd6e 100644 --- a/package.json +++ b/package.json @@ -5,18 +5,22 @@ "scripts": { "start": "node dist/server.js", "test": "mocha --reporter spec --require ts-node/register 'test/**/*.ts' --exit", - "build": "tsc", + "build": "tsc --project tsconfig.json", "coverage": "nyc npm run test", "coverage:coveralls": "nyc --reporter=lcov --reporter=text-lcov npm run test | coveralls", "build-start": "npm run build && npm start" }, "license": "ISC", "dependencies": { + "@natlibfi/passport-atlassian-crowd": "^2.0.3", "@types/node": "^14.0.23", "chai": "^4.2.0", + "cookie-parser": "^1.4.5", "express": "^4.17.1", + "express-session": "^1.17.1", "mocha": "^8.0.1", "morgan": "^1.10.0", + "passport": "^0.4.1", "pug": "^3.0.0", "pug-bootstrap": "0.0.16", "startbootstrap-sb-admin-2": "^4.1.1", diff --git a/public/main.js b/public/main.js new file mode 100644 index 0000000..ace6ea7 --- /dev/null +++ b/public/main.js @@ -0,0 +1,11 @@ +$(function () { + $('form.user button').click(function() { + fetch('/login', { + method:'POST', + headers: {'Authorization': 'Basic ' + btoa($('#usernameInput').val() + ':' + $('#passwordInput').val())}, + credentials: 'include', + }).then(() => location.href = '/'); + + return false; + }); +}); \ No newline at end of file diff --git a/src/App.ts b/src/App.ts index 5184f16..1055edc 100644 --- a/src/App.ts +++ b/src/App.ts @@ -1,42 +1,73 @@ -import * as express from 'express'; -import * as logger from 'morgan'; -import * as bodyParser from 'body-parser'; -//import * as ExpressSession from 'express-session'; +import express from 'express'; +import session from 'express-session'; +import cookieParser from 'cookie-parser'; +import logger from 'morgan'; +import bodyParser from 'body-parser'; +import passport from 'passport'; +import { BasicStrategy } from '@natlibfi/passport-atlassian-crowd'; + +import config from './config.json'; -// Creates and configures an ExpressJS web server. class App { - public expressApp : express.Application; + expressApp = express(); - //Run configuration methods on the Express instance. constructor() { - this.expressApp = express(); this.middleware(); this.routes(); + this.expressApp.set('view engine', 'pug'); + + this.expressApp.use(express.static(__dirname + '/../public')); this.expressApp.use('/sb-admin-2/css', express.static(__dirname + '/../node_modules/startbootstrap-sb-admin-2/css')); this.expressApp.use('/sb-admin-2/js', express.static(__dirname + '/../node_modules/startbootstrap-sb-admin-2/js')); } - // Configure Express middleware. private middleware() : void { this.expressApp.use(logger('dev')); + this.expressApp.use(bodyParser.json()); this.expressApp.use(bodyParser.urlencoded({extended: false})); - /*this.expressApp.use(ExpressSession( - { - secret: 'My Secret Key', - resave: false, - saveUninitialized: true - }));*/ + + const secret = '1JuNvRoLNFORzHsfF1T816Ums'; + this.expressApp.use(cookieParser(secret)); + + this.expressApp.use(session({ + secret, + resave: false, + saveUninitialized: false, + cookie: {secure: false} + })) + + this.expressApp.use(passport.initialize()); + this.expressApp.use(passport.session()); + + passport.use(new BasicStrategy(config.crowd)); + + passport.serializeUser((user, done) => done(null, user)); + passport.deserializeUser((user, done) => done(null, user)); } - // Configure API endpoints. private routes() : void { - let router = express.Router(); + this.expressApp.get('/', + App.checkLogin, + (req, res) => res.render('index') + ); - router.get('/', (req, res) => res.render('index')); + this.expressApp.get('/login', + (req, res) => res.render('login') + ); + this.expressApp.post('/login', + passport.authenticate('atlassian-crowd-basic'), + (req, res) => res.redirect('/') + ); + } - this.expressApp.use('/', router); + private static checkLogin(req, res, next) { + if (req.isAuthenticated()) { + res.locals.user = {name: req.user.name}; + next(); + }else + res.redirect('/login'); } } diff --git a/src/server.ts b/src/server.ts index d62bdc0..1aaec8f 100644 --- a/src/server.ts +++ b/src/server.ts @@ -1,10 +1,7 @@ -import * as http from 'http'; -import * as debug from 'debug'; +import http from 'http'; import App from './App'; -debug('ts-express:server'); - const port = normalizePort(process.env.PORT || 3000); App.set('port', port); @@ -41,5 +38,5 @@ function onError(error: NodeJS.ErrnoException): void { function onListening(): void { let addr = server.address(); let bind = (typeof addr === 'string') ? `pipe ${addr}` : `port ${addr.port}`; - debug(`Listening on ${bind}`); + console.log(`Listening on ${bind}`); } diff --git a/tsconfig.json b/tsconfig.json index eb08a2e..3182a05 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,7 +3,10 @@ "target": "esnext", "module": "commonjs", "outDir": "dist", - "sourceMap": true + "rootDir": "src", + "sourceMap": true, + "esModuleInterop": true, + "resolveJsonModule": true }, "include": [ "src/**/*.ts" diff --git a/views/login.pug b/views/login.pug new file mode 100644 index 0000000..5394e6f --- /dev/null +++ b/views/login.pug @@ -0,0 +1 @@ +extends sb-admin-2/login \ No newline at end of file diff --git a/views/sb-admin-2/pug_inc/header/user-info.pug b/views/sb-admin-2/pug_inc/header/user-info.pug index ae79358..3e8449b 100644 --- a/views/sb-admin-2/pug_inc/header/user-info.pug +++ b/views/sb-admin-2/pug_inc/header/user-info.pug @@ -1,6 +1,6 @@ li.nav-item.dropdown.no-arrow a#userDropdown.nav-link.dropdown-toggle(href='#' role='button' data-toggle='dropdown' aria-haspopup='true' aria-expanded='false') - span.mr-2.d-none.d-lg-inline.text-gray-600.small William Tremblay + span.mr-2.d-none.d-lg-inline.text-gray-600.small #{user.name.givenName} #{user.name.familyName} img.img-profile.rounded-circle(src='https://source.unsplash.com/QAB-WJcbgJk/60x60') // Dropdown - User Information .dropdown-menu.dropdown-menu-right.shadow.animated--grow-in(aria-labelledby='userDropdown') diff --git a/views/sb-admin-2/pug_inc/mixins/mixins.pug b/views/sb-admin-2/pug_inc/mixins/mixins.pug index ef7b62c..8d49753 100644 --- a/views/sb-admin-2/pug_inc/mixins/mixins.pug +++ b/views/sb-admin-2/pug_inc/mixins/mixins.pug @@ -16,10 +16,10 @@ mixin tick_box(text) label(class="custom-control-label" for="customCheck")= text mixin username_textbox(text_placeholder) - input(type="email" class="form-control form-control-user" id="exampleInputEmail" aria-describedby="emailHelp" placeholder!= text_placeholder name="username" required) + input(type="text" class="form-control form-control-user" id="usernameInput" aria-describedby="emailHelp" placeholder!= text_placeholder name="username" required) mixin password_textbox(text_placeholder) - input(type="password" class="form-control form-control-user" id="exampleInputPassword" placeholder!= text_placeholder name="password" required) + input(type="password" class="form-control form-control-user" id="passwordInput" placeholder!= text_placeholder name="password" required) mixin login_btn(login_text, login_href) a(href!= login_href class="btn btn-primary btn-user btn-block")= login_text @@ -218,24 +218,25 @@ mixin login_card_body div(class="text-center") h1(class="h4 text-gray-900 mb-4") Welcome Back! - form.user(action="/", method="post") + form.user .form-group - +username_textbox("Enter Email Address...") + +username_textbox("Username") .form-group +password_textbox("Password") - //.form-group - // +tick_box("Remember Me") + //-.form-group + //- +tick_box("Remember Me") - +login_submit_btn("Login", "/") + //-+login_submit_btn("Login", "/") + button.btn.btn-primary.btn-user.btn-block(type='button') Login - //+social_login_btn("fa-google","Login with Google","index.html") - //+social_login_btn("fa-facebook-f","Login with Facebook","index.html") + //-+social_login_btn("fa-google","Login with Google","index.html") + //-+social_login_btn("fa-facebook-f","Login with Facebook","index.html") - //
- //+link_btn("Forgot Password?","forgot-password.html") - //+link_btn("Create an Account!","register.html") + //-
+ //-+link_btn("Forgot Password?","forgot-password.html") + //-+link_btn("Create an Account!","register.html") mixin register_google_btn a(href="index.html" class="btn btn-google btn-user btn-block") diff --git a/views/sb-admin-2/pug_inc/scripts.pug b/views/sb-admin-2/pug_inc/scripts.pug index 50a6af6..f65170a 100644 --- a/views/sb-admin-2/pug_inc/scripts.pug +++ b/views/sb-admin-2/pug_inc/scripts.pug @@ -8,3 +8,4 @@ script(src="//cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.4.1/jquery.easing.m script(src="sb-admin-2/js/sb-admin-2.min.js") +script(src='main.js')