diff --git a/loaders/express.js b/loaders/express.js new file mode 100644 index 0000000..9d340c5 --- /dev/null +++ b/loaders/express.js @@ -0,0 +1,27 @@ +require('dotenv').config(); +const cors = require('cors'); +const session = require('express-session'); +const { json, urlencoded } = require('express'); + +module.exports = (app) => { + app.use(cors()); + + app.use(json()); + + app.use(urlencoded({ + extended: true + })); + + app.use(require('../routes/API')); + + app.use(session({ + secret: process.env.EXPRESS_SECRET, + cookie: { maxAge: 8*60*60*1000, secure: false }, + resave: false, + saveUninitialized: true, + store: new (require('connect-pg-simple')(session))({ + conString: process.env.CONNECTION, + createTableIfMissing: true, + }) + })); +} \ No newline at end of file diff --git a/loaders/index.js b/loaders/index.js new file mode 100644 index 0000000..7bab957 --- /dev/null +++ b/loaders/index.js @@ -0,0 +1,7 @@ +const passportLoader = require('./passport'); +const expressLoader = require('./express'); + +module.exports = async (app) => { + const passport = await passportLoader(app); + const express = await expressLoader(app); +} \ No newline at end of file diff --git a/loaders/passport.js b/loaders/passport.js new file mode 100644 index 0000000..9cbb96d --- /dev/null +++ b/loaders/passport.js @@ -0,0 +1,26 @@ +const passport = require('passport'); +const LocalStrategy = require('passport-local'); +const client = require('../db/Client'); + +module.exports = (app) => { + app.use(passport.initialize()); + app.use(passport.session()); + + passport.serializeUser((user, done) => { + done(null, user.id); + }); + + passport.deserializeUser((id, done) => { + done(null, { id }); + }); + + /*** + ** TO DO: FINISH CONFIGURING LOCAL STRATEGY + + app.use(new LocalStrategy(async (email, password, done) => { + const newClient = client(); + const account = await newClient.query("SELECT * FROM users WHERE email = ($1)", [email]) + })); + + ***/ +} \ No newline at end of file diff --git a/swagger/swagger.js b/loaders/swagger.js similarity index 100% rename from swagger/swagger.js rename to loaders/swagger.js diff --git a/package-lock.json b/package-lock.json index f0dda60..3e961a9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "bcrypt": "^5.0.1", "body-parser": "^1.20.0", + "connect-pg-simple": "^7.0.0", "cors": "^2.8.5", "dotenv": "^16.0.0", "express": "^4.17.3", @@ -72,6 +73,21 @@ "node": ">=6" } }, + "node_modules/@types/node": { + "version": "18.0.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.1.tgz", + "integrity": "sha512-CmR8+Tsy95hhwtZBKJBs0/FFq4XX7sDZHlGGf+0q+BRZfMbOTkzkj0AFAuTyXbObDIoanaBBW0+KEW+m3N16Wg==" + }, + "node_modules/@types/pg": { + "version": "8.6.5", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.5.tgz", + "integrity": "sha512-tOkGtAqRVkHa/PVZicq67zuujI4Oorfglsr2IbKofDwBSysnaqSx7W1mDqFqdkGE6Fbgh+PZAl0r/BWON/mozw==", + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, "node_modules/@types/uuid": { "version": "8.3.4", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", @@ -567,6 +583,18 @@ "node": ">=8" } }, + "node_modules/connect-pg-simple": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/connect-pg-simple/-/connect-pg-simple-7.0.0.tgz", + "integrity": "sha512-fbNZUkxz8m+FRbctoxAU18DzRKp8GQSL+9gTJ0+LgSCElXLon2q8tDE8V74jUzf+w2ARZX8HKKyV0laX1NUZ/Q==", + "dependencies": { + "@types/pg": "^8.6.1", + "pg": "^8.7.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -2825,6 +2853,21 @@ "defer-to-connect": "^1.0.1" } }, + "@types/node": { + "version": "18.0.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.1.tgz", + "integrity": "sha512-CmR8+Tsy95hhwtZBKJBs0/FFq4XX7sDZHlGGf+0q+BRZfMbOTkzkj0AFAuTyXbObDIoanaBBW0+KEW+m3N16Wg==" + }, + "@types/pg": { + "version": "8.6.5", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.5.tgz", + "integrity": "sha512-tOkGtAqRVkHa/PVZicq67zuujI4Oorfglsr2IbKofDwBSysnaqSx7W1mDqFqdkGE6Fbgh+PZAl0r/BWON/mozw==", + "requires": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, "@types/uuid": { "version": "8.3.4", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", @@ -3204,6 +3247,15 @@ "xdg-basedir": "^4.0.0" } }, + "connect-pg-simple": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/connect-pg-simple/-/connect-pg-simple-7.0.0.tgz", + "integrity": "sha512-fbNZUkxz8m+FRbctoxAU18DzRKp8GQSL+9gTJ0+LgSCElXLon2q8tDE8V74jUzf+w2ARZX8HKKyV0laX1NUZ/Q==", + "requires": { + "@types/pg": "^8.6.1", + "pg": "^8.7.1" + } + }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", diff --git a/package.json b/package.json index 9f0444e..6a8afc7 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "dependencies": { "bcrypt": "^5.0.1", "body-parser": "^1.20.0", + "connect-pg-simple": "^7.0.0", "cors": "^2.8.5", "dotenv": "^16.0.0", "express": "^4.17.3", diff --git a/server.js b/server.js index 844802b..f284372 100644 --- a/server.js +++ b/server.js @@ -1,33 +1,18 @@ const express = require('express'); -const cors = require('cors'); const app = express(); - -const session = require('express-session'); - require('dotenv').config(); const PORT = process.env.PORT || 8088; -app.use(cors()); -app.use(express.json()); +const loaders = require('./loaders'); -app.use(express.urlencoded({ - extended: true -})); +async function start() { + loaders(app); -const store = new session.MemoryStore(); -app.use(session({ - secret: process.env.EXPRESS_SECRET, - cookie: { maxAge: 300000000, secure: false }, - resave: false, - saveUninitialized: false, - store, -})); + app.listen(PORT, () => { + console.log(`Listening on port ${PORT}`); + }); +} -const apiRouter = require('./routes/API'); -app.use(apiRouter); - -app.listen(PORT, () => { - console.log(`Listening on port ${PORT}`); -}); +start(); module.exports = app; \ No newline at end of file diff --git a/swagger.yml b/swagger.yml deleted file mode 100644 index e69de29..0000000 diff --git a/swagger/swagger.json b/swagger/swagger.json deleted file mode 100644 index 513b8ba..0000000 --- a/swagger/swagger.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "openapi": "3.0.3", - "info": { - "title": "E-Commerce Project", - "description": "Full Stack Portfolio project built using Postgres, Express, React and TypeScript", - "version": "0.0.1" - }, - "paths": {} - } \ No newline at end of file