Fixed passport login

This commit is contained in:
misabiko 2020-07-18 20:47:58 -04:00
parent f653cd3714
commit af3ccbebf1
16 changed files with 347 additions and 40 deletions

3
.gitignore vendored
View File

@ -2,5 +2,6 @@ vendor/
node_modules/ node_modules/
npm-debug.log npm-debug.log
.idea/
**/config.json
dist/ dist/

32
.idea/$CACHE_FILE$ generated Normal file
View File

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectInspectionProfilesVisibleTreeState">
<entry key="Project Default">
<profile-state>
<expanded-state>
<State />
<State>
<id>EditorConfig</id>
</State>
<State>
<id>Flow type checkerJavaScript</id>
</State>
<State>
<id>General</id>
</State>
<State>
<id>Internationalization</id>
</State>
<State>
<id>JavaScript</id>
</State>
</expanded-state>
<selected-state>
<State>
<id>CSS</id>
</State>
</selected-state>
</profile-state>
</entry>
</component>
</project>

6
.idea/jsLibraryMappings.xml generated Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptLibraryMappings">
<file url="PROJECT" libraries="{jquery}" />
</component>
</project>

6
.idea/misc.xml generated Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
</project>

6
.idea/vcs.xml generated Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

4
.idea/watcherTasks.xml generated Normal file
View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectTasksOptions" suppressed-tasks="Pug/Jade" />
</project>

203
package-lock.json generated
View File

@ -14,6 +14,18 @@
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz",
"integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" "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": { "@babel/types": {
"version": "7.10.5", "version": "7.10.5",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", "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", "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.13.1.tgz",
"integrity": "sha512-D819f34FLHeBN/4xvw0HR0u7U2G7RqjPSggXqf7LktsxWQ48VAfGwvMrhcVuaZV2fF069c/619RdgCCms0DHhw==" "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": { "@types/babel-types": {
"version": "7.0.8", "version": "7.0.8",
"resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.8.tgz", "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", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" "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": { "bytes": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "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", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
}, },
"commondir": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
"integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
},
"concat-map": { "concat-map": {
"version": "0.0.1", "version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "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", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
"integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" "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": { "cookie-signature": {
"version": "1.0.6", "version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
@ -648,6 +691,33 @@
"vary": "~1.1.2" "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": { "fill-range": {
"version": "7.0.1", "version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
@ -670,6 +740,16 @@
"unpipe": "~1.0.0" "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": { "find-up": {
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
@ -784,6 +864,11 @@
"toidentifier": "1.0.0" "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": { "iconv-lite": {
"version": "0.4.24", "version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "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", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
"integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" "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": { "media-typer": {
"version": "0.3.0", "version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "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", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
"integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" "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": { "normalize-path": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "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", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" "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": { "path-exists": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "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", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
"integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA="
}, },
"pause": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
"integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10="
},
"picomatch": { "picomatch": {
"version": "2.2.2", "version": "2.2.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
"integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" "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": { "promise": {
"version": "7.3.1", "version": "7.3.1",
"resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "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", "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" "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": { "range-parser": {
"version": "1.2.1", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "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", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
}, },
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
},
"send": { "send": {
"version": "0.17.1", "version": "0.17.1",
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", "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", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" "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": { "sprintf-js": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@ -1858,6 +2053,14 @@
"integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
"optional": true "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": { "unpipe": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",

View File

@ -5,18 +5,22 @@
"scripts": { "scripts": {
"start": "node dist/server.js", "start": "node dist/server.js",
"test": "mocha --reporter spec --require ts-node/register 'test/**/*.ts' --exit", "test": "mocha --reporter spec --require ts-node/register 'test/**/*.ts' --exit",
"build": "tsc", "build": "tsc --project tsconfig.json",
"coverage": "nyc npm run test", "coverage": "nyc npm run test",
"coverage:coveralls": "nyc --reporter=lcov --reporter=text-lcov npm run test | coveralls", "coverage:coveralls": "nyc --reporter=lcov --reporter=text-lcov npm run test | coveralls",
"build-start": "npm run build && npm start" "build-start": "npm run build && npm start"
}, },
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@natlibfi/passport-atlassian-crowd": "^2.0.3",
"@types/node": "^14.0.23", "@types/node": "^14.0.23",
"chai": "^4.2.0", "chai": "^4.2.0",
"cookie-parser": "^1.4.5",
"express": "^4.17.1", "express": "^4.17.1",
"express-session": "^1.17.1",
"mocha": "^8.0.1", "mocha": "^8.0.1",
"morgan": "^1.10.0", "morgan": "^1.10.0",
"passport": "^0.4.1",
"pug": "^3.0.0", "pug": "^3.0.0",
"pug-bootstrap": "0.0.16", "pug-bootstrap": "0.0.16",
"startbootstrap-sb-admin-2": "^4.1.1", "startbootstrap-sb-admin-2": "^4.1.1",

11
public/main.js Normal file
View File

@ -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;
});
});

View File

@ -1,42 +1,73 @@
import * as express from 'express'; import express from 'express';
import * as logger from 'morgan'; import session from 'express-session';
import * as bodyParser from 'body-parser'; import cookieParser from 'cookie-parser';
//import * as ExpressSession from 'express-session'; 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 { class App {
public expressApp : express.Application; expressApp = express();
//Run configuration methods on the Express instance.
constructor() { constructor() {
this.expressApp = express();
this.middleware(); this.middleware();
this.routes(); this.routes();
this.expressApp.set('view engine', 'pug'); 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/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')); this.expressApp.use('/sb-admin-2/js', express.static(__dirname + '/../node_modules/startbootstrap-sb-admin-2/js'));
} }
// Configure Express middleware.
private middleware() : void { private middleware() : void {
this.expressApp.use(logger('dev')); this.expressApp.use(logger('dev'));
this.expressApp.use(bodyParser.json()); this.expressApp.use(bodyParser.json());
this.expressApp.use(bodyParser.urlencoded({extended: false})); this.expressApp.use(bodyParser.urlencoded({extended: false}));
/*this.expressApp.use(ExpressSession(
{ const secret = '1JuNvRoLNFORzHsfF1T816Ums';
secret: 'My Secret Key', this.expressApp.use(cookieParser(secret));
resave: false,
saveUninitialized: true 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 { 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');
} }
} }

View File

@ -1,10 +1,7 @@
import * as http from 'http'; import http from 'http';
import * as debug from 'debug';
import App from './App'; import App from './App';
debug('ts-express:server');
const port = normalizePort(process.env.PORT || 3000); const port = normalizePort(process.env.PORT || 3000);
App.set('port', port); App.set('port', port);
@ -41,5 +38,5 @@ function onError(error: NodeJS.ErrnoException): void {
function onListening(): void { function onListening(): void {
let addr = server.address(); let addr = server.address();
let bind = (typeof addr === 'string') ? `pipe ${addr}` : `port ${addr.port}`; let bind = (typeof addr === 'string') ? `pipe ${addr}` : `port ${addr.port}`;
debug(`Listening on ${bind}`); console.log(`Listening on ${bind}`);
} }

View File

@ -3,7 +3,10 @@
"target": "esnext", "target": "esnext",
"module": "commonjs", "module": "commonjs",
"outDir": "dist", "outDir": "dist",
"sourceMap": true "rootDir": "src",
"sourceMap": true,
"esModuleInterop": true,
"resolveJsonModule": true
}, },
"include": [ "include": [
"src/**/*.ts" "src/**/*.ts"

1
views/login.pug Normal file
View File

@ -0,0 +1 @@
extends sb-admin-2/login

View File

@ -1,6 +1,6 @@
li.nav-item.dropdown.no-arrow li.nav-item.dropdown.no-arrow
a#userDropdown.nav-link.dropdown-toggle(href='#' role='button' data-toggle='dropdown' aria-haspopup='true' aria-expanded='false') 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') img.img-profile.rounded-circle(src='https://source.unsplash.com/QAB-WJcbgJk/60x60')
// Dropdown - User Information // Dropdown - User Information
.dropdown-menu.dropdown-menu-right.shadow.animated--grow-in(aria-labelledby='userDropdown') .dropdown-menu.dropdown-menu-right.shadow.animated--grow-in(aria-labelledby='userDropdown')

View File

@ -16,10 +16,10 @@ mixin tick_box(text)
label(class="custom-control-label" for="customCheck")= text label(class="custom-control-label" for="customCheck")= text
mixin username_textbox(text_placeholder) 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) 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) mixin login_btn(login_text, login_href)
a(href!= login_href class="btn btn-primary btn-user btn-block")= login_text 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") div(class="text-center")
h1(class="h4 text-gray-900 mb-4") Welcome Back! h1(class="h4 text-gray-900 mb-4") Welcome Back!
form.user(action="/", method="post") form.user
.form-group .form-group
+username_textbox("Enter Email Address...") +username_textbox("Username")
.form-group .form-group
+password_textbox("Password") +password_textbox("Password")
//.form-group //-.form-group
// +tick_box("Remember Me") //- +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-google","Login with Google","index.html")
//+social_login_btn("fa-facebook-f","Login with Facebook","index.html") //-+social_login_btn("fa-facebook-f","Login with Facebook","index.html")
//<hr> //-<hr>
//+link_btn("Forgot Password?","forgot-password.html") //-+link_btn("Forgot Password?","forgot-password.html")
//+link_btn("Create an Account!","register.html") //-+link_btn("Create an Account!","register.html")
mixin register_google_btn mixin register_google_btn
a(href="index.html" class="btn btn-google btn-user btn-block") a(href="index.html" class="btn btn-google btn-user btn-block")

View File

@ -8,3 +8,4 @@ script(src="//cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.4.1/jquery.easing.m
<!-- Custom scripts for all pages--> <!-- Custom scripts for all pages-->
script(src="sb-admin-2/js/sb-admin-2.min.js") script(src="sb-admin-2/js/sb-admin-2.min.js")
script(src='main.js')