| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- import express from 'express';
- import {mongoose} from 'mongoose';
- import bcrypt from "bcrypt";
- import jwt from "jsonwebtoken";
- import {SECRET_KEY} from "../passport.js";
- const router = express.Router();
- const saltRounds = 10;
- const userSchema = new mongoose.Schema({
- username: {
- type: String,
- required: true
- },
- password: {
- type: String,
- required: true
- }
- })
- const User = mongoose.model('User', userSchema, 'users');
- // TODO split into different routes (/auth)
- function generateToken(user) {
- const payload = { id: user._id };
- return jwt.sign(payload, SECRET_KEY, {expiresIn: '1h'});
- }
- router.post('/login', function (req, res) {
- const username = req.body.username;
- const password = req.body.password;
- console.log(password);
- console.log(password);
- if (!password || !username) {
- return res.status(400).json({ message: 'parameters invalid' });
- }
- User.findOne({ username: username })
- .then(user => {
- if (!user) {
- return res.status(422).json({ message: 'no user found' });
- }
- bcrypt.compare(password, user.password, function (err, result) {
- if (result) {
- res.json({ token: generateToken(user) });
- } else {
- res.status(401).json({ error: "Wrong password" });
- }
- });
- })
- .catch(err => {
- console.log(err);
- res.status(500).json({ error: err.message }); // Ensure you send the error message
- });
- });
- router.post('/register', async function (req, res) {
- const username = req.body.username;
- const password = req.body.password;
- if (!password || !username) {
- return res.status(400).json({ message: 'parameters invalid' });
- }
- try {
- // Check if user already exists
- const existingUser = await User.findOne({ username: username });
- if (existingUser) {
- return res.status(403).json({ message: 'user already exists' });
- }
- // Hash the password
- bcrypt.hash(password, saltRounds, async function (err, hash) {
- if (err) {
- 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 });
- return res.json({ token: generateToken(user) });
- }
- });
- } catch (err) {
- // Handle errors
- console.error(err);
- return res.status(500).json({ error: 'Internal Server Error' });
- }
- });
- export { router, User };
|