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')