├── .gitignore
├── README.md
├── client
├── .eslintcache
├── .gitignore
├── package-lock.json
├── package.json
├── public
│ ├── favicon.ico
│ ├── index.html
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── robots.txt
└── src
│ ├── App.css
│ ├── App.js
│ ├── App.test.js
│ ├── components
│ ├── Auth.css
│ ├── Home
│ │ └── index.js
│ ├── Login
│ │ └── index.js
│ ├── Register
│ │ └── index.js
│ ├── assets
│ │ └── img.jpg
│ └── index.js
│ ├── index.css
│ ├── index.js
│ ├── logo.svg
│ ├── reportWebVitals.js
│ └── setupTests.js
├── package-lock.json
├── package.json
└── server
├── .env
├── Auth
├── LoginStrategy.js
├── RegisterStrategy.js
└── index.js
├── index.js
├── models
└── user.js
└── routes
├── Auth
├── index.js
├── login.js
└── register.js
└── User
├── getDetails.js
└── index.js
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## Available Scripts
2 |
3 | In the project directory, you can run:
4 |
5 | ### `npm run dev`
6 |
7 | Runs the app in the development mode.
8 |
--------------------------------------------------------------------------------
/client/.eslintcache:
--------------------------------------------------------------------------------
1 | [{"C:\\Users\\music\\OneDrive\\Υπολογιστής\\MERN Auth\\client\\src\\index.js":"1","C:\\Users\\music\\OneDrive\\Υπολογιστής\\MERN Auth\\client\\src\\App.js":"2","C:\\Users\\music\\OneDrive\\Υπολογιστής\\MERN Auth\\client\\src\\reportWebVitals.js":"3","C:\\Users\\music\\OneDrive\\Υπολογιστής\\MERN Auth\\client\\src\\components\\index.js":"4","C:\\Users\\music\\OneDrive\\Υπολογιστής\\MERN Auth\\client\\src\\components\\Home\\index.js":"5","C:\\Users\\music\\OneDrive\\Υπολογιστής\\MERN Auth\\client\\src\\components\\Register\\index.js":"6","C:\\Users\\music\\OneDrive\\Υπολογιστής\\MERN Auth\\client\\src\\components\\Login\\index.js":"7"},{"size":500,"mtime":499162500000,"results":"8","hashOfConfig":"9"},{"size":484,"mtime":1609609341138,"results":"10","hashOfConfig":"9"},{"size":362,"mtime":499162500000,"results":"11","hashOfConfig":"9"},{"size":155,"mtime":1609601594366,"results":"12","hashOfConfig":"9"},{"size":642,"mtime":1609601982374,"results":"13","hashOfConfig":"9"},{"size":3907,"mtime":1609610926622,"results":"14","hashOfConfig":"9"},{"size":2976,"mtime":1609610911498,"results":"15","hashOfConfig":"9"},{"filePath":"16","messages":"17","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"18"},"1dyks1o",{"filePath":"19","messages":"20","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"18"},{"filePath":"21","messages":"22","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"18"},{"filePath":"23","messages":"24","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"18"},{"filePath":"25","messages":"26","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"18"},{"filePath":"27","messages":"28","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"18"},{"filePath":"29","messages":"30","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"C:\\Users\\music\\OneDrive\\Υπολογιστής\\MERN Auth\\client\\src\\index.js",[],["31","32"],"C:\\Users\\music\\OneDrive\\Υπολογιστής\\MERN Auth\\client\\src\\App.js",[],"C:\\Users\\music\\OneDrive\\Υπολογιστής\\MERN Auth\\client\\src\\reportWebVitals.js",[],"C:\\Users\\music\\OneDrive\\Υπολογιστής\\MERN Auth\\client\\src\\components\\index.js",[],"C:\\Users\\music\\OneDrive\\Υπολογιστής\\MERN Auth\\client\\src\\components\\Home\\index.js",[],"C:\\Users\\music\\OneDrive\\Υπολογιστής\\MERN Auth\\client\\src\\components\\Register\\index.js",[],"C:\\Users\\music\\OneDrive\\Υπολογιστής\\MERN Auth\\client\\src\\components\\Login\\index.js",[],{"ruleId":"33","replacedBy":"34"},{"ruleId":"35","replacedBy":"36"},"no-native-reassign",["37"],"no-negated-in-lhs",["38"],"no-global-assign","no-unsafe-negation"]
--------------------------------------------------------------------------------
/client/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/client/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "client",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@material-ui/core": "^4.11.2",
7 | "@testing-library/jest-dom": "^5.11.8",
8 | "@testing-library/react": "^11.2.2",
9 | "@testing-library/user-event": "^12.6.0",
10 | "axios": "^0.21.1",
11 | "react": "^17.0.1",
12 | "react-dom": "^17.0.1",
13 | "react-router-dom": "^5.2.0",
14 | "react-scripts": "4.0.1",
15 | "web-vitals": "^0.2.4"
16 | },
17 | "scripts": {
18 | "start": "react-scripts start",
19 | "build": "react-scripts build",
20 | "test": "react-scripts test",
21 | "eject": "react-scripts eject"
22 | },
23 | "eslintConfig": {
24 | "extends": [
25 | "react-app",
26 | "react-app/jest"
27 | ]
28 | },
29 | "browserslist": {
30 | "production": [
31 | ">0.2%",
32 | "not dead",
33 | "not op_mini all"
34 | ],
35 | "development": [
36 | "last 1 chrome version",
37 | "last 1 firefox version",
38 | "last 1 safari version"
39 | ]
40 | },
41 | "proxy": "http://localhost:5000"
42 | }
43 |
--------------------------------------------------------------------------------
/client/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michaelkitas/MERN-Passport-Authentication/3123311e211067e48791e1b5ecf02b83bff946c5/client/public/favicon.ico
--------------------------------------------------------------------------------
/client/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | React App
15 |
17 |
18 |
19 |
20 |
21 |
22 |
25 |
28 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/client/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michaelkitas/MERN-Passport-Authentication/3123311e211067e48791e1b5ecf02b83bff946c5/client/public/logo192.png
--------------------------------------------------------------------------------
/client/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michaelkitas/MERN-Passport-Authentication/3123311e211067e48791e1b5ecf02b83bff946c5/client/public/logo512.png
--------------------------------------------------------------------------------
/client/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/client/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/client/src/App.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michaelkitas/MERN-Passport-Authentication/3123311e211067e48791e1b5ecf02b83bff946c5/client/src/App.css
--------------------------------------------------------------------------------
/client/src/App.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import { BrowserRouter as Router, Route, Switch } from "react-router-dom";
3 |
4 | import { Register, Login, Home } from "./components";
5 | export default class App extends Component {
6 | render() {
7 | return (
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | );
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/client/src/App.test.js:
--------------------------------------------------------------------------------
1 | import { render, screen } from '@testing-library/react';
2 | import App from './App';
3 |
4 | test('renders learn react link', () => {
5 | render();
6 | const linkElement = screen.getByText(/learn react/i);
7 | expect(linkElement).toBeInTheDocument();
8 | });
9 |
--------------------------------------------------------------------------------
/client/src/components/Auth.css:
--------------------------------------------------------------------------------
1 | .auth-background {
2 | background: url("./assets/img.jpg") no-repeat center center fixed;
3 | -webkit-background-size: cover;
4 | -moz-background-size: cover;
5 | -o-background-size: cover;
6 | background-size: cover;
7 | height: 100vh;
8 | padding: 70px;
9 | }
10 |
11 | @media (max-width: 500px) {
12 | .auth-background {
13 | padding: 0px;
14 | }
15 | .auth-box {
16 | height: 100vh;
17 | }
18 | .auth-box {
19 | min-width: 0px !important;
20 | }
21 | }
22 |
23 | .auth-box {
24 | background-color: white;
25 | max-width: 500px;
26 | border-radius: 2%;
27 | padding: 30px;
28 | }
29 |
30 | .auth-box {
31 | background-color: white;
32 | min-width: 500px;
33 | max-width: 500px;
34 | border-radius: 2%;
35 | padding: 30px;
36 | }
37 |
38 | .auth-subtitle {
39 | color: #4e4e4e;
40 | font-weight: bold;
41 | font-size: 15px;
42 | }
43 |
44 | .auth-field {
45 | margin-top: 30px !important;
46 | }
47 |
48 | .auth-flex {
49 | display: -webkit-box !important;
50 | display: -ms-flexbox !important;
51 | display: flex !important;
52 | }
53 |
54 | .auth-inputs {
55 | margin-bottom: 30px;
56 | }
57 |
58 | .submit-button {
59 | background-color: blue !important;
60 | color: white !important;
61 | }
62 |
--------------------------------------------------------------------------------
/client/src/components/Home/index.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import axios from "axios";
3 |
4 | export class index extends Component {
5 | state = {
6 | first_name: "",
7 | last_name: "",
8 | };
9 |
10 | componentDidMount() {
11 | axios
12 | .get("/user/getDetails")
13 | .then(({ data: { first_name, last_name } }) => {
14 | this.setState({ first_name, last_name });
15 | })
16 | .catch((err) => console.log(err));
17 | }
18 |
19 | render() {
20 | const { first_name, last_name } = this.state;
21 | return (
22 |
23 |
first_name {first_name}
24 |
last_name {last_name}
25 |
26 | );
27 | }
28 | }
29 |
30 | export default index;
31 |
--------------------------------------------------------------------------------
/client/src/components/Login/index.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import { Link } from "react-router-dom";
3 | import axios from "axios";
4 |
5 | //UI
6 | import { Box, Button, TextField, Typography } from "@material-ui/core";
7 |
8 | export class LoginScreen extends Component {
9 | state = { first_name: "", last_name: "", success: false, error: false };
10 |
11 | onLogin = (e) => {
12 | e.preventDefault();
13 |
14 | const { email, password } = this.state;
15 |
16 | axios({
17 | url: "/auth/login",
18 | method: "POST",
19 | data: { email, password },
20 | })
21 | .then((res) => {
22 | window.localStorage.setItem("isAuthenticated", true);
23 | if (res.status === 200) {
24 | this.setState({ success: true, error: false });
25 | this.props.history.push("/");
26 | }
27 | })
28 | .catch(({ response }) => {
29 | this.setState({ error: response.data.message, success: false });
30 | });
31 | };
32 |
33 | onChange = (e) => {
34 | const { name, value } = e.target;
35 | this.setState({
36 | [name]: value,
37 | error: false,
38 | success: false,
39 | });
40 | };
41 |
42 | render() {
43 | const { error, success } = this.state;
44 | return (
45 |
94 | );
95 | }
96 | }
97 |
98 | export default LoginScreen;
99 |
--------------------------------------------------------------------------------
/client/src/components/Register/index.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import { Link } from "react-router-dom";
3 | import axios from "axios";
4 |
5 | //UI
6 | import { Box, Button, TextField, Typography } from "@material-ui/core";
7 |
8 | export class RegisterScreen extends Component {
9 | state = {
10 | email: "",
11 | password: "",
12 | first_name: "",
13 | last_name: "",
14 | success: false,
15 | error: false,
16 | };
17 |
18 | onSignup = (e) => {
19 | e.preventDefault();
20 |
21 | const { email, password, first_name, last_name } = this.state;
22 |
23 | axios({
24 | url: "/auth/register",
25 | method: "POST",
26 | data: { email, password, first_name, last_name },
27 | })
28 | .then((res) => {
29 | window.localStorage.setItem("isAuthenticated", true);
30 | if (res.status === 200) {
31 | this.setState({ success: true, error: false });
32 | this.props.history.push("/");
33 | }
34 | })
35 | .catch(({ response }) => {
36 | this.setState({ error: response.data.message, success: false });
37 | });
38 | };
39 |
40 | onChange = (e) => {
41 | const { name, value } = e.target;
42 | this.setState({
43 | [name]: value,
44 | error: false,
45 | success: false,
46 | });
47 | };
48 |
49 | render() {
50 | const { error, success } = this.state;
51 | return (
52 |
124 | );
125 | }
126 | }
127 |
128 | export default RegisterScreen;
129 |
--------------------------------------------------------------------------------
/client/src/components/assets/img.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michaelkitas/MERN-Passport-Authentication/3123311e211067e48791e1b5ecf02b83bff946c5/client/src/components/assets/img.jpg
--------------------------------------------------------------------------------
/client/src/components/index.js:
--------------------------------------------------------------------------------
1 | import Login from "./Login";
2 | import Register from "./Register";
3 | import Home from "./Home";
4 |
5 | import "./Auth.css";
6 |
7 | export { Login, Register, Home };
8 |
--------------------------------------------------------------------------------
/client/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
5 | sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | }
9 |
10 | code {
11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
12 | monospace;
13 | }
14 |
--------------------------------------------------------------------------------
/client/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import './index.css';
4 | import App from './App';
5 | import reportWebVitals from './reportWebVitals';
6 |
7 | ReactDOM.render(
8 |
9 |
10 | ,
11 | document.getElementById('root')
12 | );
13 |
14 | // If you want to start measuring performance in your app, pass a function
15 | // to log results (for example: reportWebVitals(console.log))
16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
17 | reportWebVitals();
18 |
--------------------------------------------------------------------------------
/client/src/logo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/client/src/reportWebVitals.js:
--------------------------------------------------------------------------------
1 | const reportWebVitals = onPerfEntry => {
2 | if (onPerfEntry && onPerfEntry instanceof Function) {
3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
4 | getCLS(onPerfEntry);
5 | getFID(onPerfEntry);
6 | getFCP(onPerfEntry);
7 | getLCP(onPerfEntry);
8 | getTTFB(onPerfEntry);
9 | });
10 | }
11 | };
12 |
13 | export default reportWebVitals;
14 |
--------------------------------------------------------------------------------
/client/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "mern-auth",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@types/bson": {
8 | "version": "4.0.3",
9 | "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.3.tgz",
10 | "integrity": "sha512-mVRvYnTOZJz3ccpxhr3wgxVmSeiYinW+zlzQz3SXWaJmD1DuL05Jeq7nKw3SnbKmbleW5qrLG5vdyWe/A9sXhw==",
11 | "requires": {
12 | "@types/node": "*"
13 | }
14 | },
15 | "@types/mongodb": {
16 | "version": "3.6.3",
17 | "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.3.tgz",
18 | "integrity": "sha512-6YNqGP1hk5bjUFaim+QoFFuI61WjHiHE1BNeB41TA00Xd2K7zG4lcWyLLq/XtIp36uMavvS5hoAUJ+1u/GcX2Q==",
19 | "requires": {
20 | "@types/bson": "*",
21 | "@types/node": "*"
22 | }
23 | },
24 | "@types/node": {
25 | "version": "14.14.19",
26 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.19.tgz",
27 | "integrity": "sha512-4nhBPStMK04rruRVtVc6cDqhu7S9GZai0fpXgPXrFpcPX6Xul8xnrjSdGB4KPBVYG/R5+fXWdCM8qBoiULWGPQ=="
28 | },
29 | "accepts": {
30 | "version": "1.3.7",
31 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
32 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
33 | "requires": {
34 | "mime-types": "~2.1.24",
35 | "negotiator": "0.6.2"
36 | }
37 | },
38 | "ansi-regex": {
39 | "version": "4.1.0",
40 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
41 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
42 | },
43 | "ansi-styles": {
44 | "version": "3.2.1",
45 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
46 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
47 | "requires": {
48 | "color-convert": "^1.9.0"
49 | }
50 | },
51 | "array-flatten": {
52 | "version": "1.1.1",
53 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
54 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
55 | },
56 | "basic-auth": {
57 | "version": "2.0.1",
58 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
59 | "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
60 | "requires": {
61 | "safe-buffer": "5.1.2"
62 | },
63 | "dependencies": {
64 | "safe-buffer": {
65 | "version": "5.1.2",
66 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
67 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
68 | }
69 | }
70 | },
71 | "bcryptjs": {
72 | "version": "2.4.3",
73 | "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
74 | "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms="
75 | },
76 | "bl": {
77 | "version": "2.2.1",
78 | "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz",
79 | "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==",
80 | "requires": {
81 | "readable-stream": "^2.3.5",
82 | "safe-buffer": "^5.1.1"
83 | }
84 | },
85 | "bluebird": {
86 | "version": "3.5.1",
87 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
88 | "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
89 | },
90 | "body-parser": {
91 | "version": "1.19.0",
92 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
93 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
94 | "requires": {
95 | "bytes": "3.1.0",
96 | "content-type": "~1.0.4",
97 | "debug": "2.6.9",
98 | "depd": "~1.1.2",
99 | "http-errors": "1.7.2",
100 | "iconv-lite": "0.4.24",
101 | "on-finished": "~2.3.0",
102 | "qs": "6.7.0",
103 | "raw-body": "2.4.0",
104 | "type-is": "~1.6.17"
105 | }
106 | },
107 | "bson": {
108 | "version": "1.1.5",
109 | "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz",
110 | "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg=="
111 | },
112 | "bytes": {
113 | "version": "3.1.0",
114 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
115 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
116 | },
117 | "camelcase": {
118 | "version": "5.3.1",
119 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
120 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
121 | },
122 | "chalk": {
123 | "version": "2.4.2",
124 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
125 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
126 | "requires": {
127 | "ansi-styles": "^3.2.1",
128 | "escape-string-regexp": "^1.0.5",
129 | "supports-color": "^5.3.0"
130 | },
131 | "dependencies": {
132 | "supports-color": {
133 | "version": "5.5.0",
134 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
135 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
136 | "requires": {
137 | "has-flag": "^3.0.0"
138 | }
139 | }
140 | }
141 | },
142 | "cliui": {
143 | "version": "5.0.0",
144 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
145 | "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
146 | "requires": {
147 | "string-width": "^3.1.0",
148 | "strip-ansi": "^5.2.0",
149 | "wrap-ansi": "^5.1.0"
150 | }
151 | },
152 | "color-convert": {
153 | "version": "1.9.3",
154 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
155 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
156 | "requires": {
157 | "color-name": "1.1.3"
158 | }
159 | },
160 | "color-name": {
161 | "version": "1.1.3",
162 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
163 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
164 | },
165 | "concurrently": {
166 | "version": "5.3.0",
167 | "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.3.0.tgz",
168 | "integrity": "sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ==",
169 | "requires": {
170 | "chalk": "^2.4.2",
171 | "date-fns": "^2.0.1",
172 | "lodash": "^4.17.15",
173 | "read-pkg": "^4.0.1",
174 | "rxjs": "^6.5.2",
175 | "spawn-command": "^0.0.2-1",
176 | "supports-color": "^6.1.0",
177 | "tree-kill": "^1.2.2",
178 | "yargs": "^13.3.0"
179 | }
180 | },
181 | "connect-mongo": {
182 | "version": "3.2.0",
183 | "resolved": "https://registry.npmjs.org/connect-mongo/-/connect-mongo-3.2.0.tgz",
184 | "integrity": "sha512-0Mx88079Z20CG909wCFlR3UxhMYGg6Ibn1hkIje1hwsqOLWtL9HJV+XD0DAjUvQScK6WqY/FA8tSVQM9rR64Rw==",
185 | "requires": {
186 | "mongodb": "^3.1.0"
187 | }
188 | },
189 | "content-disposition": {
190 | "version": "0.5.3",
191 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
192 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
193 | "requires": {
194 | "safe-buffer": "5.1.2"
195 | },
196 | "dependencies": {
197 | "safe-buffer": {
198 | "version": "5.1.2",
199 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
200 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
201 | }
202 | }
203 | },
204 | "content-type": {
205 | "version": "1.0.4",
206 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
207 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
208 | },
209 | "cookie": {
210 | "version": "0.4.0",
211 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
212 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
213 | },
214 | "cookie-signature": {
215 | "version": "1.0.6",
216 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
217 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
218 | },
219 | "core-util-is": {
220 | "version": "1.0.2",
221 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
222 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
223 | },
224 | "cors": {
225 | "version": "2.8.5",
226 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
227 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
228 | "requires": {
229 | "object-assign": "^4",
230 | "vary": "^1"
231 | }
232 | },
233 | "date-fns": {
234 | "version": "2.16.1",
235 | "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.16.1.tgz",
236 | "integrity": "sha512-sAJVKx/FqrLYHAQeN7VpJrPhagZc9R4ImZIWYRFZaaohR3KzmuK88touwsSwSVT8Qcbd4zoDsnGfX4GFB4imyQ=="
237 | },
238 | "debug": {
239 | "version": "2.6.9",
240 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
241 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
242 | "requires": {
243 | "ms": "2.0.0"
244 | }
245 | },
246 | "decamelize": {
247 | "version": "1.2.0",
248 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
249 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
250 | },
251 | "denque": {
252 | "version": "1.4.1",
253 | "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz",
254 | "integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ=="
255 | },
256 | "depd": {
257 | "version": "1.1.2",
258 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
259 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
260 | },
261 | "destroy": {
262 | "version": "1.0.4",
263 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
264 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
265 | },
266 | "dotenv": {
267 | "version": "8.2.0",
268 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
269 | "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw=="
270 | },
271 | "ee-first": {
272 | "version": "1.1.1",
273 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
274 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
275 | },
276 | "emoji-regex": {
277 | "version": "7.0.3",
278 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
279 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
280 | },
281 | "encodeurl": {
282 | "version": "1.0.2",
283 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
284 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
285 | },
286 | "error-ex": {
287 | "version": "1.3.2",
288 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
289 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
290 | "requires": {
291 | "is-arrayish": "^0.2.1"
292 | }
293 | },
294 | "escape-html": {
295 | "version": "1.0.3",
296 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
297 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
298 | },
299 | "escape-string-regexp": {
300 | "version": "1.0.5",
301 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
302 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
303 | },
304 | "etag": {
305 | "version": "1.8.1",
306 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
307 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
308 | },
309 | "express": {
310 | "version": "4.17.1",
311 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
312 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
313 | "requires": {
314 | "accepts": "~1.3.7",
315 | "array-flatten": "1.1.1",
316 | "body-parser": "1.19.0",
317 | "content-disposition": "0.5.3",
318 | "content-type": "~1.0.4",
319 | "cookie": "0.4.0",
320 | "cookie-signature": "1.0.6",
321 | "debug": "2.6.9",
322 | "depd": "~1.1.2",
323 | "encodeurl": "~1.0.2",
324 | "escape-html": "~1.0.3",
325 | "etag": "~1.8.1",
326 | "finalhandler": "~1.1.2",
327 | "fresh": "0.5.2",
328 | "merge-descriptors": "1.0.1",
329 | "methods": "~1.1.2",
330 | "on-finished": "~2.3.0",
331 | "parseurl": "~1.3.3",
332 | "path-to-regexp": "0.1.7",
333 | "proxy-addr": "~2.0.5",
334 | "qs": "6.7.0",
335 | "range-parser": "~1.2.1",
336 | "safe-buffer": "5.1.2",
337 | "send": "0.17.1",
338 | "serve-static": "1.14.1",
339 | "setprototypeof": "1.1.1",
340 | "statuses": "~1.5.0",
341 | "type-is": "~1.6.18",
342 | "utils-merge": "1.0.1",
343 | "vary": "~1.1.2"
344 | },
345 | "dependencies": {
346 | "safe-buffer": {
347 | "version": "5.1.2",
348 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
349 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
350 | }
351 | }
352 | },
353 | "express-session": {
354 | "version": "1.17.1",
355 | "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.1.tgz",
356 | "integrity": "sha512-UbHwgqjxQZJiWRTMyhvWGvjBQduGCSBDhhZXYenziMFjxst5rMV+aJZ6hKPHZnPyHGsrqRICxtX8jtEbm/z36Q==",
357 | "requires": {
358 | "cookie": "0.4.0",
359 | "cookie-signature": "1.0.6",
360 | "debug": "2.6.9",
361 | "depd": "~2.0.0",
362 | "on-headers": "~1.0.2",
363 | "parseurl": "~1.3.3",
364 | "safe-buffer": "5.2.0",
365 | "uid-safe": "~2.1.5"
366 | },
367 | "dependencies": {
368 | "depd": {
369 | "version": "2.0.0",
370 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
371 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
372 | },
373 | "safe-buffer": {
374 | "version": "5.2.0",
375 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
376 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
377 | }
378 | }
379 | },
380 | "finalhandler": {
381 | "version": "1.1.2",
382 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
383 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
384 | "requires": {
385 | "debug": "2.6.9",
386 | "encodeurl": "~1.0.2",
387 | "escape-html": "~1.0.3",
388 | "on-finished": "~2.3.0",
389 | "parseurl": "~1.3.3",
390 | "statuses": "~1.5.0",
391 | "unpipe": "~1.0.0"
392 | }
393 | },
394 | "find-up": {
395 | "version": "3.0.0",
396 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
397 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
398 | "requires": {
399 | "locate-path": "^3.0.0"
400 | }
401 | },
402 | "forwarded": {
403 | "version": "0.1.2",
404 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
405 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
406 | },
407 | "fresh": {
408 | "version": "0.5.2",
409 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
410 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
411 | },
412 | "function-bind": {
413 | "version": "1.1.1",
414 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
415 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
416 | },
417 | "get-caller-file": {
418 | "version": "2.0.5",
419 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
420 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
421 | },
422 | "has": {
423 | "version": "1.0.3",
424 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
425 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
426 | "requires": {
427 | "function-bind": "^1.1.1"
428 | }
429 | },
430 | "has-flag": {
431 | "version": "3.0.0",
432 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
433 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
434 | },
435 | "hosted-git-info": {
436 | "version": "2.8.8",
437 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
438 | "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg=="
439 | },
440 | "http-errors": {
441 | "version": "1.7.2",
442 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
443 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
444 | "requires": {
445 | "depd": "~1.1.2",
446 | "inherits": "2.0.3",
447 | "setprototypeof": "1.1.1",
448 | "statuses": ">= 1.5.0 < 2",
449 | "toidentifier": "1.0.0"
450 | },
451 | "dependencies": {
452 | "inherits": {
453 | "version": "2.0.3",
454 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
455 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
456 | }
457 | }
458 | },
459 | "iconv-lite": {
460 | "version": "0.4.24",
461 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
462 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
463 | "requires": {
464 | "safer-buffer": ">= 2.1.2 < 3"
465 | }
466 | },
467 | "inherits": {
468 | "version": "2.0.4",
469 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
470 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
471 | },
472 | "ipaddr.js": {
473 | "version": "1.9.1",
474 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
475 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
476 | },
477 | "is-arrayish": {
478 | "version": "0.2.1",
479 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
480 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
481 | },
482 | "is-core-module": {
483 | "version": "2.2.0",
484 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
485 | "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
486 | "requires": {
487 | "has": "^1.0.3"
488 | }
489 | },
490 | "is-fullwidth-code-point": {
491 | "version": "2.0.0",
492 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
493 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
494 | },
495 | "isarray": {
496 | "version": "1.0.0",
497 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
498 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
499 | },
500 | "json-parse-better-errors": {
501 | "version": "1.0.2",
502 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
503 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
504 | },
505 | "kareem": {
506 | "version": "2.3.2",
507 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz",
508 | "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ=="
509 | },
510 | "locate-path": {
511 | "version": "3.0.0",
512 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
513 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
514 | "requires": {
515 | "p-locate": "^3.0.0",
516 | "path-exists": "^3.0.0"
517 | }
518 | },
519 | "lodash": {
520 | "version": "4.17.20",
521 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
522 | "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
523 | },
524 | "media-typer": {
525 | "version": "0.3.0",
526 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
527 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
528 | },
529 | "memory-pager": {
530 | "version": "1.5.0",
531 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
532 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
533 | "optional": true
534 | },
535 | "merge-descriptors": {
536 | "version": "1.0.1",
537 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
538 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
539 | },
540 | "methods": {
541 | "version": "1.1.2",
542 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
543 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
544 | },
545 | "mime": {
546 | "version": "1.6.0",
547 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
548 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
549 | },
550 | "mime-db": {
551 | "version": "1.45.0",
552 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz",
553 | "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w=="
554 | },
555 | "mime-types": {
556 | "version": "2.1.28",
557 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz",
558 | "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==",
559 | "requires": {
560 | "mime-db": "1.45.0"
561 | }
562 | },
563 | "mongodb": {
564 | "version": "3.6.3",
565 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.3.tgz",
566 | "integrity": "sha512-rOZuR0QkodZiM+UbQE5kDsJykBqWi0CL4Ec2i1nrGrUI3KO11r6Fbxskqmq3JK2NH7aW4dcccBuUujAP0ERl5w==",
567 | "requires": {
568 | "bl": "^2.2.1",
569 | "bson": "^1.1.4",
570 | "denque": "^1.4.1",
571 | "require_optional": "^1.0.1",
572 | "safe-buffer": "^5.1.2",
573 | "saslprep": "^1.0.0"
574 | }
575 | },
576 | "mongoose": {
577 | "version": "5.11.9",
578 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.11.9.tgz",
579 | "integrity": "sha512-lmG6R64jtGGxqtn88BkkY+v470LUfGgyTKUyjswQ5c01GNgQvxA0kQd8h+tm0hZb639hKNRxL9ZBQlLleUpuIQ==",
580 | "requires": {
581 | "@types/mongodb": "^3.5.27",
582 | "bson": "^1.1.4",
583 | "kareem": "2.3.2",
584 | "mongodb": "3.6.3",
585 | "mongoose-legacy-pluralize": "1.0.2",
586 | "mpath": "0.8.1",
587 | "mquery": "3.2.3",
588 | "ms": "2.1.2",
589 | "regexp-clone": "1.0.0",
590 | "safe-buffer": "5.2.1",
591 | "sift": "7.0.1",
592 | "sliced": "1.0.1"
593 | },
594 | "dependencies": {
595 | "ms": {
596 | "version": "2.1.2",
597 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
598 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
599 | }
600 | }
601 | },
602 | "mongoose-legacy-pluralize": {
603 | "version": "1.0.2",
604 | "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz",
605 | "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ=="
606 | },
607 | "morgan": {
608 | "version": "1.10.0",
609 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
610 | "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==",
611 | "requires": {
612 | "basic-auth": "~2.0.1",
613 | "debug": "2.6.9",
614 | "depd": "~2.0.0",
615 | "on-finished": "~2.3.0",
616 | "on-headers": "~1.0.2"
617 | },
618 | "dependencies": {
619 | "depd": {
620 | "version": "2.0.0",
621 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
622 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
623 | }
624 | }
625 | },
626 | "mpath": {
627 | "version": "0.8.1",
628 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.1.tgz",
629 | "integrity": "sha512-norEinle9aFc05McBawVPwqgFZ7npkts9yu17ztIVLwPwO9rq0OTp89kGVTqvv5rNLMz96E5iWHpVORjI411vA=="
630 | },
631 | "mquery": {
632 | "version": "3.2.3",
633 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.3.tgz",
634 | "integrity": "sha512-cIfbP4TyMYX+SkaQ2MntD+F2XbqaBHUYWk3j+kqdDztPWok3tgyssOZxMHMtzbV1w9DaSlvEea0Iocuro41A4g==",
635 | "requires": {
636 | "bluebird": "3.5.1",
637 | "debug": "3.1.0",
638 | "regexp-clone": "^1.0.0",
639 | "safe-buffer": "5.1.2",
640 | "sliced": "1.0.1"
641 | },
642 | "dependencies": {
643 | "debug": {
644 | "version": "3.1.0",
645 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
646 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
647 | "requires": {
648 | "ms": "2.0.0"
649 | }
650 | },
651 | "safe-buffer": {
652 | "version": "5.1.2",
653 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
654 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
655 | }
656 | }
657 | },
658 | "ms": {
659 | "version": "2.0.0",
660 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
661 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
662 | },
663 | "negotiator": {
664 | "version": "0.6.2",
665 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
666 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
667 | },
668 | "normalize-package-data": {
669 | "version": "2.5.0",
670 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
671 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
672 | "requires": {
673 | "hosted-git-info": "^2.1.4",
674 | "resolve": "^1.10.0",
675 | "semver": "2 || 3 || 4 || 5",
676 | "validate-npm-package-license": "^3.0.1"
677 | }
678 | },
679 | "object-assign": {
680 | "version": "4.1.1",
681 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
682 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
683 | },
684 | "on-finished": {
685 | "version": "2.3.0",
686 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
687 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
688 | "requires": {
689 | "ee-first": "1.1.1"
690 | }
691 | },
692 | "on-headers": {
693 | "version": "1.0.2",
694 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
695 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
696 | },
697 | "p-limit": {
698 | "version": "2.3.0",
699 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
700 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
701 | "requires": {
702 | "p-try": "^2.0.0"
703 | }
704 | },
705 | "p-locate": {
706 | "version": "3.0.0",
707 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
708 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
709 | "requires": {
710 | "p-limit": "^2.0.0"
711 | }
712 | },
713 | "p-try": {
714 | "version": "2.2.0",
715 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
716 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
717 | },
718 | "parse-json": {
719 | "version": "4.0.0",
720 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
721 | "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
722 | "requires": {
723 | "error-ex": "^1.3.1",
724 | "json-parse-better-errors": "^1.0.1"
725 | }
726 | },
727 | "parseurl": {
728 | "version": "1.3.3",
729 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
730 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
731 | },
732 | "passport": {
733 | "version": "0.4.1",
734 | "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz",
735 | "integrity": "sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg==",
736 | "requires": {
737 | "passport-strategy": "1.x.x",
738 | "pause": "0.0.1"
739 | }
740 | },
741 | "passport-local": {
742 | "version": "1.0.0",
743 | "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz",
744 | "integrity": "sha1-H+YyaMkudWBmJkN+O5BmYsFbpu4=",
745 | "requires": {
746 | "passport-strategy": "1.x.x"
747 | }
748 | },
749 | "passport-strategy": {
750 | "version": "1.0.0",
751 | "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz",
752 | "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ="
753 | },
754 | "path-exists": {
755 | "version": "3.0.0",
756 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
757 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
758 | },
759 | "path-parse": {
760 | "version": "1.0.6",
761 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
762 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
763 | },
764 | "path-to-regexp": {
765 | "version": "0.1.7",
766 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
767 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
768 | },
769 | "pause": {
770 | "version": "0.0.1",
771 | "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
772 | "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10="
773 | },
774 | "pify": {
775 | "version": "3.0.0",
776 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
777 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
778 | },
779 | "process-nextick-args": {
780 | "version": "2.0.1",
781 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
782 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
783 | },
784 | "proxy-addr": {
785 | "version": "2.0.6",
786 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
787 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
788 | "requires": {
789 | "forwarded": "~0.1.2",
790 | "ipaddr.js": "1.9.1"
791 | }
792 | },
793 | "qs": {
794 | "version": "6.7.0",
795 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
796 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
797 | },
798 | "random-bytes": {
799 | "version": "1.0.0",
800 | "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
801 | "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs="
802 | },
803 | "range-parser": {
804 | "version": "1.2.1",
805 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
806 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
807 | },
808 | "raw-body": {
809 | "version": "2.4.0",
810 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
811 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
812 | "requires": {
813 | "bytes": "3.1.0",
814 | "http-errors": "1.7.2",
815 | "iconv-lite": "0.4.24",
816 | "unpipe": "1.0.0"
817 | }
818 | },
819 | "read-pkg": {
820 | "version": "4.0.1",
821 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz",
822 | "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=",
823 | "requires": {
824 | "normalize-package-data": "^2.3.2",
825 | "parse-json": "^4.0.0",
826 | "pify": "^3.0.0"
827 | }
828 | },
829 | "readable-stream": {
830 | "version": "2.3.7",
831 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
832 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
833 | "requires": {
834 | "core-util-is": "~1.0.0",
835 | "inherits": "~2.0.3",
836 | "isarray": "~1.0.0",
837 | "process-nextick-args": "~2.0.0",
838 | "safe-buffer": "~5.1.1",
839 | "string_decoder": "~1.1.1",
840 | "util-deprecate": "~1.0.1"
841 | },
842 | "dependencies": {
843 | "safe-buffer": {
844 | "version": "5.1.2",
845 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
846 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
847 | }
848 | }
849 | },
850 | "regexp-clone": {
851 | "version": "1.0.0",
852 | "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz",
853 | "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw=="
854 | },
855 | "require-directory": {
856 | "version": "2.1.1",
857 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
858 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
859 | },
860 | "require-main-filename": {
861 | "version": "2.0.0",
862 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
863 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
864 | },
865 | "require_optional": {
866 | "version": "1.0.1",
867 | "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
868 | "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==",
869 | "requires": {
870 | "resolve-from": "^2.0.0",
871 | "semver": "^5.1.0"
872 | }
873 | },
874 | "resolve": {
875 | "version": "1.19.0",
876 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz",
877 | "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==",
878 | "requires": {
879 | "is-core-module": "^2.1.0",
880 | "path-parse": "^1.0.6"
881 | }
882 | },
883 | "resolve-from": {
884 | "version": "2.0.0",
885 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
886 | "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c="
887 | },
888 | "rxjs": {
889 | "version": "6.6.3",
890 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz",
891 | "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==",
892 | "requires": {
893 | "tslib": "^1.9.0"
894 | }
895 | },
896 | "safe-buffer": {
897 | "version": "5.2.1",
898 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
899 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
900 | },
901 | "safer-buffer": {
902 | "version": "2.1.2",
903 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
904 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
905 | },
906 | "saslprep": {
907 | "version": "1.0.3",
908 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
909 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
910 | "optional": true,
911 | "requires": {
912 | "sparse-bitfield": "^3.0.3"
913 | }
914 | },
915 | "semver": {
916 | "version": "5.7.1",
917 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
918 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
919 | },
920 | "send": {
921 | "version": "0.17.1",
922 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
923 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
924 | "requires": {
925 | "debug": "2.6.9",
926 | "depd": "~1.1.2",
927 | "destroy": "~1.0.4",
928 | "encodeurl": "~1.0.2",
929 | "escape-html": "~1.0.3",
930 | "etag": "~1.8.1",
931 | "fresh": "0.5.2",
932 | "http-errors": "~1.7.2",
933 | "mime": "1.6.0",
934 | "ms": "2.1.1",
935 | "on-finished": "~2.3.0",
936 | "range-parser": "~1.2.1",
937 | "statuses": "~1.5.0"
938 | },
939 | "dependencies": {
940 | "ms": {
941 | "version": "2.1.1",
942 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
943 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
944 | }
945 | }
946 | },
947 | "serve-static": {
948 | "version": "1.14.1",
949 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
950 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
951 | "requires": {
952 | "encodeurl": "~1.0.2",
953 | "escape-html": "~1.0.3",
954 | "parseurl": "~1.3.3",
955 | "send": "0.17.1"
956 | }
957 | },
958 | "set-blocking": {
959 | "version": "2.0.0",
960 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
961 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
962 | },
963 | "setprototypeof": {
964 | "version": "1.1.1",
965 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
966 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
967 | },
968 | "sift": {
969 | "version": "7.0.1",
970 | "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz",
971 | "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g=="
972 | },
973 | "sliced": {
974 | "version": "1.0.1",
975 | "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
976 | "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E="
977 | },
978 | "sparse-bitfield": {
979 | "version": "3.0.3",
980 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
981 | "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
982 | "optional": true,
983 | "requires": {
984 | "memory-pager": "^1.0.2"
985 | }
986 | },
987 | "spawn-command": {
988 | "version": "0.0.2-1",
989 | "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz",
990 | "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A="
991 | },
992 | "spdx-correct": {
993 | "version": "3.1.1",
994 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
995 | "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
996 | "requires": {
997 | "spdx-expression-parse": "^3.0.0",
998 | "spdx-license-ids": "^3.0.0"
999 | }
1000 | },
1001 | "spdx-exceptions": {
1002 | "version": "2.3.0",
1003 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
1004 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A=="
1005 | },
1006 | "spdx-expression-parse": {
1007 | "version": "3.0.1",
1008 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
1009 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
1010 | "requires": {
1011 | "spdx-exceptions": "^2.1.0",
1012 | "spdx-license-ids": "^3.0.0"
1013 | }
1014 | },
1015 | "spdx-license-ids": {
1016 | "version": "3.0.7",
1017 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz",
1018 | "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ=="
1019 | },
1020 | "statuses": {
1021 | "version": "1.5.0",
1022 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
1023 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
1024 | },
1025 | "string-width": {
1026 | "version": "3.1.0",
1027 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
1028 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
1029 | "requires": {
1030 | "emoji-regex": "^7.0.1",
1031 | "is-fullwidth-code-point": "^2.0.0",
1032 | "strip-ansi": "^5.1.0"
1033 | }
1034 | },
1035 | "string_decoder": {
1036 | "version": "1.1.1",
1037 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
1038 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
1039 | "requires": {
1040 | "safe-buffer": "~5.1.0"
1041 | },
1042 | "dependencies": {
1043 | "safe-buffer": {
1044 | "version": "5.1.2",
1045 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1046 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
1047 | }
1048 | }
1049 | },
1050 | "strip-ansi": {
1051 | "version": "5.2.0",
1052 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
1053 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
1054 | "requires": {
1055 | "ansi-regex": "^4.1.0"
1056 | }
1057 | },
1058 | "supports-color": {
1059 | "version": "6.1.0",
1060 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
1061 | "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
1062 | "requires": {
1063 | "has-flag": "^3.0.0"
1064 | }
1065 | },
1066 | "toidentifier": {
1067 | "version": "1.0.0",
1068 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
1069 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
1070 | },
1071 | "tree-kill": {
1072 | "version": "1.2.2",
1073 | "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
1074 | "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="
1075 | },
1076 | "tslib": {
1077 | "version": "1.14.1",
1078 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
1079 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
1080 | },
1081 | "type-is": {
1082 | "version": "1.6.18",
1083 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1084 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1085 | "requires": {
1086 | "media-typer": "0.3.0",
1087 | "mime-types": "~2.1.24"
1088 | }
1089 | },
1090 | "uid-safe": {
1091 | "version": "2.1.5",
1092 | "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
1093 | "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
1094 | "requires": {
1095 | "random-bytes": "~1.0.0"
1096 | }
1097 | },
1098 | "unpipe": {
1099 | "version": "1.0.0",
1100 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1101 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
1102 | },
1103 | "util-deprecate": {
1104 | "version": "1.0.2",
1105 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1106 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
1107 | },
1108 | "utils-merge": {
1109 | "version": "1.0.1",
1110 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1111 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
1112 | },
1113 | "validate-npm-package-license": {
1114 | "version": "3.0.4",
1115 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
1116 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
1117 | "requires": {
1118 | "spdx-correct": "^3.0.0",
1119 | "spdx-expression-parse": "^3.0.0"
1120 | }
1121 | },
1122 | "vary": {
1123 | "version": "1.1.2",
1124 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1125 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
1126 | },
1127 | "which-module": {
1128 | "version": "2.0.0",
1129 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
1130 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
1131 | },
1132 | "wrap-ansi": {
1133 | "version": "5.1.0",
1134 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
1135 | "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
1136 | "requires": {
1137 | "ansi-styles": "^3.2.0",
1138 | "string-width": "^3.0.0",
1139 | "strip-ansi": "^5.0.0"
1140 | }
1141 | },
1142 | "y18n": {
1143 | "version": "4.0.1",
1144 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz",
1145 | "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ=="
1146 | },
1147 | "yargs": {
1148 | "version": "13.3.2",
1149 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
1150 | "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
1151 | "requires": {
1152 | "cliui": "^5.0.0",
1153 | "find-up": "^3.0.0",
1154 | "get-caller-file": "^2.0.1",
1155 | "require-directory": "^2.1.1",
1156 | "require-main-filename": "^2.0.0",
1157 | "set-blocking": "^2.0.0",
1158 | "string-width": "^3.0.0",
1159 | "which-module": "^2.0.0",
1160 | "y18n": "^4.0.0",
1161 | "yargs-parser": "^13.1.2"
1162 | }
1163 | },
1164 | "yargs-parser": {
1165 | "version": "13.1.2",
1166 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
1167 | "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
1168 | "requires": {
1169 | "camelcase": "^5.0.0",
1170 | "decamelize": "^1.2.0"
1171 | }
1172 | }
1173 | }
1174 | }
1175 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "mern-auth",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "server": "cd server && nodemon index.js",
8 | "client": "npm start --prefix client",
9 | "dev": "concurrently \"npm run server\" \"npm run client\""
10 | },
11 | "author": "",
12 | "license": "ISC",
13 | "dependencies": {
14 | "bcryptjs": "^2.4.3",
15 | "concurrently": "^5.3.0",
16 | "connect-mongo": "^3.2.0",
17 | "cors": "^2.8.5",
18 | "dotenv": "^8.2.0",
19 | "express": "^4.17.1",
20 | "express-session": "^1.17.1",
21 | "mongoose": "^5.11.9",
22 | "morgan": "^1.10.0",
23 | "passport": "^0.4.1",
24 | "passport-local": "^1.0.0"
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/server/.env:
--------------------------------------------------------------------------------
1 | mongoDB = "mongodb+srv://test:test@cluster0.ahvgu.mongodb.net/test?retryWrites=true&w=majority"
2 | mongoDB_secret = "sfdgsfdgdfgsdfgsd"
--------------------------------------------------------------------------------
/server/Auth/LoginStrategy.js:
--------------------------------------------------------------------------------
1 | const Strategy = require("passport-local").Strategy;
2 | const User = require("../models/user");
3 | const bcrypt = require("bcryptjs");
4 |
5 | const LoginStrategy = new Strategy(
6 | { usernameField: "email" },
7 | function (email, password, done) {
8 | User.findOne({ email })
9 | .lean()
10 | .exec((err, user) => {
11 | if (err) {
12 | return done(err, null);
13 | }
14 |
15 | if (!user) {
16 | return done("No user found", null);
17 | }
18 |
19 | const isPasswordValid = bcrypt.compareSync(password, user.password);
20 |
21 | if (!isPasswordValid) {
22 | return done("Email or Password not valid", null);
23 | }
24 |
25 | return done(null, user);
26 | });
27 | }
28 | );
29 |
30 | module.exports = LoginStrategy;
31 |
--------------------------------------------------------------------------------
/server/Auth/RegisterStrategy.js:
--------------------------------------------------------------------------------
1 | const Strategy = require("passport-local").Strategy;
2 | const User = require("../models/user");
3 | const bcrypt = require("bcryptjs");
4 | const salt = bcrypt.genSaltSync(10);
5 |
6 | const SignupStrategy = new Strategy(
7 | { passReqToCallback: true, usernameField: "email" },
8 | function (req, email, password, done) {
9 | User.findOne({ email })
10 | .lean()
11 | .exec((err, user) => {
12 | if (err) {
13 | return done(err, null);
14 | }
15 |
16 | if (!user) {
17 | const encryptedPassword = bcrypt.hashSync(password, salt);
18 | const { first_name, last_name } = req.body;
19 |
20 | let newUser = new User({
21 | email,
22 | password: encryptedPassword,
23 | first_name,
24 | last_name,
25 | });
26 |
27 | newUser.save((error, inserted) => {
28 | if (error) {
29 | return done(error, null);
30 | }
31 |
32 | return done(null, inserted);
33 | });
34 | }
35 | if (user) {
36 | return done("User already exist. Please login!", null);
37 | }
38 | });
39 | }
40 | );
41 |
42 | module.exports = SignupStrategy;
43 |
--------------------------------------------------------------------------------
/server/Auth/index.js:
--------------------------------------------------------------------------------
1 | const passport = require("passport");
2 | const User = require("../models/user");
3 |
4 | //Serialize user with passport using hes/her email
5 | passport.serializeUser(function (email, done) {
6 | done(null, email);
7 | });
8 |
9 | //Deserialize user with passport using hes/her email
10 | passport.deserializeUser(function (email, done) {
11 | done(null, email);
12 | });
13 |
14 | //Requiring Login - Register strategy files
15 | const LoginStrategy = require("./LoginStrategy");
16 | const RegisterStrategy = require("./RegisterStrategy");
17 | //Using the above
18 | passport.use("local-login", LoginStrategy);
19 | passport.use("local-register", RegisterStrategy);
20 |
21 | module.exports = passport;
22 |
--------------------------------------------------------------------------------
/server/index.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const app = express();
3 |
4 | const logger = require("morgan");
5 | const mongoose = require("mongoose");
6 | const cors = require("cors");
7 | const session = require("express-session");
8 | const MongoStore = require("connect-mongo")(session);
9 |
10 | const passport = require("./Auth");
11 |
12 | process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
13 | require("dotenv").config();
14 |
15 | //Connect with our db
16 | mongoose.connect(process.env.mongoDB, { useNewUrlParser: true });
17 | mongoose.set("useFindAndModify", false);
18 |
19 | app.use(passport.initialize());
20 | app.use(passport.session());
21 | app.use(
22 | session({
23 | resave: false,
24 | saveUninitialized: false,
25 | secret: process.env.mongoDB_secret,
26 | store: new MongoStore({
27 | mongooseConnection: mongoose.connection,
28 | }),
29 | })
30 | );
31 | app.use(logger("dev"));
32 | app.use(express.json());
33 | app.use(express.urlencoded({ extended: false }));
34 |
35 | app.use(cors());
36 |
37 | const Authentication = require("./routes/Auth");
38 | const User = require("./routes/User");
39 |
40 | //Using routers
41 | app.use("/auth", Authentication);
42 | app.use("/user", User);
43 |
44 | //Define port for server
45 | const port = process.env.PORT || 5000;
46 | app.listen(port, () => console.log(`Example app listening on port ${port}!`));
47 |
--------------------------------------------------------------------------------
/server/models/user.js:
--------------------------------------------------------------------------------
1 | const mongoose = require("mongoose");
2 | const Schema = mongoose.Schema;
3 |
4 | const UserSchema = new Schema(
5 | {
6 | id: String,
7 |
8 | email: String,
9 | password: String,
10 | first_name: String,
11 | last_name: String,
12 | },
13 | {
14 | collection: "users",
15 | }
16 | );
17 |
18 | const User = mongoose.model("users", UserSchema);
19 |
20 | module.exports = User;
21 |
--------------------------------------------------------------------------------
/server/routes/Auth/index.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const Authentication = express.Router();
3 |
4 | const Login = require("./login");
5 | const Register = require("./register");
6 |
7 | Authentication.use("", Login, Register);
8 |
9 | module.exports = Authentication;
10 |
--------------------------------------------------------------------------------
/server/routes/Auth/login.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const login = express.Router();
3 |
4 | //Passport file for login/register
5 | const passport = require("../../Auth");
6 |
7 | //Login passport authentication
8 | login.post("/login", function (req, res) {
9 | passport.authenticate("local-login", function (error, user, info) {
10 | if (error) {
11 | return res.status(500).json({
12 | message: error || "Something happend",
13 | error: error.message || "Server error",
14 | });
15 | }
16 |
17 | req.logIn(user, function (error, data) {
18 | if (error) {
19 | return res.status(500).json({
20 | message: error || "Something happend",
21 | error: error.message || "Server error",
22 | });
23 | }
24 | });
25 |
26 | user.isAuthenticated = true;
27 | return res.json(user);
28 | })(req, res);
29 | });
30 |
31 | module.exports = login;
32 |
--------------------------------------------------------------------------------
/server/routes/Auth/register.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const register = express.Router();
3 |
4 | //Passport file for login/register
5 | const passport = require("../../Auth");
6 |
7 | //Register passport authentication
8 | register.post("/register", (req, res) => {
9 | passport.authenticate("local-register", function (error, user, info) {
10 | if (error) {
11 | return res.status(500).json({
12 | message: error || "Something happend",
13 | error: error.message || "Server error",
14 | });
15 | }
16 | req.logIn(user, function (error, data) {
17 | if (error) {
18 | return res.status(500).json({
19 | message: error || "Something happend",
20 | error: error.message || "Server error",
21 | });
22 | }
23 | return res.json(user);
24 | });
25 | })(req, res);
26 | });
27 |
28 | module.exports = register;
29 |
--------------------------------------------------------------------------------
/server/routes/User/getDetails.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const getDetails = express.Router();
3 |
4 | const User = require("../../models/user");
5 |
6 | getDetails.get("/getDetails", (req, res) => {
7 | User.findOne(
8 | { email: req.session.passport.user.email },
9 | function (err, user) {
10 | if (err) console.log(err);
11 |
12 | const { first_name, last_name } = user;
13 |
14 | res.status(200).send({
15 | first_name,
16 | last_name,
17 | });
18 | }
19 | );
20 | });
21 |
22 | module.exports = getDetails;
23 |
--------------------------------------------------------------------------------
/server/routes/User/index.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const User = express.Router();
3 |
4 | const getDetails = require("./getDetails");
5 |
6 | User.use("", getDetails);
7 |
8 | module.exports = User;
9 |
--------------------------------------------------------------------------------