Browse Source

auth added

Liontix 11 months ago
parent
commit
2a99879ab1
8 changed files with 78 additions and 33 deletions
  1. 30 11
      app.js
  2. 4 3
      bin/www
  3. 2 0
      package.json
  4. 9 0
      routes/appointments.js
  5. 17 10
      routes/auth.js
  6. 0 9
      routes/index.js
  7. 9 0
      routes/members.js
  8. 7 0
      utils.js

+ 30 - 11
app.js

@@ -1,14 +1,29 @@
-const createError = require('http-errors');
-const express = require('express');
-const path = require('path');
-const cookieParser = require('cookie-parser');
-const logger = require('morgan');
-
-const indexRouter = require('./routes/index');
-const usersRouter = require('./routes/users');
+import createError from "http-errors";
+import express from 'express';
+import path from 'path';
+import cookieParser from 'cookie-parser';
+import logger from 'morgan';
+import mongoose from "mongoose";
+import {passport} from "./passport.js";
+
+import {router as authRouter} from "./routes/auth.js";
+import {router as memberRouter} from "./routes/members.js";
+import {router as appointmentsRouter} from "./routes/appointments.js";
+import {fileURLToPath} from "url";
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
 
 const app = express();
 
+const DB_CONNECTION_STRING = process.env.DB_CONNECTION.toString();
+
+async function connect() {
+  await mongoose.connect(DB_CONNECTION_STRING)
+      .then(() => console.log('Connected to the database'))
+      .catch(err => console.error('Database connection error:', err));
+}
+
 // view engine setup
 app.set('views', path.join(__dirname, 'views'));
 app.set('view engine', 'pug');
@@ -18,9 +33,11 @@ app.use(express.json());
 app.use(express.urlencoded({ extended: false }));
 app.use(cookieParser());
 app.use(express.static(path.join(__dirname, 'public')));
+app.use(passport.initialize());
 
-app.use('/', indexRouter);
-app.use('/users', usersRouter);
+app.use('/api/users', memberRouter);
+app.use('/api/schedule', appointmentsRouter);
+app.use('/api/auth', authRouter);
 
 // catch 404 and forward to error handler
 app.use(function(req, res, next) {
@@ -38,4 +55,6 @@ app.use(function(err, req, res, next) {
   res.render('error');
 });
 
-module.exports = app;
+connect();
+
+export {app};

+ 4 - 3
bin/www

@@ -4,9 +4,9 @@
  * Module dependencies.
  */
 
-const app = require('../app');
-const debug = require('debug')('scheduler:server');
-const http = require('http');
+import {app} from '../app.js';
+import debug from 'debug';
+import http from 'http';
 
 /**
  * Get port from environment and store in Express.
@@ -86,5 +86,6 @@ function onListening() {
   const bind = typeof addr === 'string'
     ? 'pipe ' + addr
     : 'port ' + addr.port;
+  console.log('Listening on ' + bind);
   debug('Listening on ' + bind);
 }

+ 2 - 0
package.json

@@ -2,6 +2,7 @@
   "name": "scheduler",
   "version": "0.0.0",
   "private": true,
+  "type": "module",
   "scripts": {
     "start": "node ./bin/www",
     "dev": "nodemon ./bin/www"
@@ -10,6 +11,7 @@
     "bcrypt": "^5.1.1",
     "cookie-parser": "~1.4.4",
     "debug": "~2.6.9",
+    "dotenv": "^16.4.7",
     "eslinter": "^3.1.0",
     "express": "^4.21.2",
     "http-errors": "~1.6.3",

+ 9 - 0
routes/appointments.js

@@ -0,0 +1,9 @@
+import express from 'express';
+const router = express.Router();
+
+/* GET home page. */
+router.get('/', function(req, res, next) {
+    res.render('index', { title: 'Express' });
+});
+
+export { router };

+ 17 - 10
routes/auth.js

@@ -3,6 +3,7 @@ import {mongoose} from 'mongoose';
 import bcrypt from "bcrypt";
 import jwt from "jsonwebtoken";
 import {SECRET_KEY} from "../passport.js";
+import {isValidEmail} from "../utils.js";
 
 const router = express.Router();
 
@@ -10,7 +11,7 @@ const router = express.Router();
 const saltRounds = 10;
 
 const userSchema = new mongoose.Schema({
-    username: {
+    email: {
         type: String,
         required: true
     },
@@ -29,16 +30,18 @@ function generateToken(user) {
 }
 
 router.post('/login', function (req, res) {
-    const username = req.body.username;
+    const email = req.body.email;
     const password = req.body.password;
-    console.log(password);
-    console.log(password);
 
-    if (!password || !username) {
+    if (!password || !email) {
         return res.status(400).json({ message: 'parameters invalid' });
     }
 
-    User.findOne({ username: username })
+    if (!isValidEmail(email)) {
+        return res.status(400).json({ message: 'email is invalid' });
+    }
+
+    User.findOne({ email: email })
         .then(user => {
             if (!user) {
                 return res.status(422).json({ message: 'no user found' });
@@ -60,16 +63,20 @@ router.post('/login', function (req, res) {
 
 
 router.post('/register', async function (req, res) {
-    const username = req.body.username;
+    const email = req.body.email;
     const password = req.body.password;
 
-    if (!password || !username) {
+    if (!password || !email) {
         return res.status(400).json({ message: 'parameters invalid' });
     }
 
+    if (!isValidEmail(email)) {
+        return res.status(400).json({ message: 'email is invalid' });
+    }
+
     try {
         // Check if user already exists
-        const existingUser = await User.findOne({ username: username });
+        const existingUser = await User.findOne({ email: email });
         if (existingUser) {
             return res.status(403).json({ message: 'user already exists' });
         }
@@ -80,7 +87,7 @@ router.post('/register', async function (req, res) {
                 return res.status(500).json({ error: err.message });
             } else if (hash) {
                 // Insert user into database and generate token
-                const user = await User.collection.insertOne({ username: username, password: hash });
+                const user = await User.collection.insertOne({ email: email, password: hash });
                 return res.json({ token: generateToken(user) });
             }
         });

+ 0 - 9
routes/index.js

@@ -1,9 +0,0 @@
-const express = require('express');
-const router = express.Router();
-
-/* GET home page. */
-router.get('/', function(req, res, next) {
-  res.render('index', { title: 'Express' });
-});
-
-module.exports = router;

+ 9 - 0
routes/members.js

@@ -0,0 +1,9 @@
+import express from 'express';
+const router = express.Router();
+
+/* GET home page. */
+router.get('/', function(req, res, next) {
+    res.render('index', { title: 'Express' });
+});
+
+export { router };

+ 7 - 0
utils.js

@@ -0,0 +1,7 @@
+
+function isValidEmail(email) {
+    const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
+    return emailRegex.test(email);
+}
+
+export {isValidEmail};