commit 61956b562c48d8602450f95f48713a4674693716 Author: Klaas Börgmann Date: Tue Sep 24 11:44:20 2024 +0200 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cba610b --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +.env +.DS_STORE +.DS_Store +server/node_modules/* +app/node_modules/* +package-lock.json +package.json diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..e69de29 diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/server/.env_default b/server/.env_default new file mode 100644 index 0000000..5fb3675 --- /dev/null +++ b/server/.env_default @@ -0,0 +1,6 @@ +PORT=3000 +DB_HOST=localhost +DB_USER=postgres +DB_PASSWORD=your_db_password +DB_NAME=your_database_name +JWT_SECRET=your_jwt_secret \ No newline at end of file diff --git a/server/app.js b/server/app.js new file mode 100644 index 0000000..139c47e --- /dev/null +++ b/server/app.js @@ -0,0 +1,17 @@ +require("dotenv").config(); +const express = require("express"); +const app = express(); +const authRoutes = require("./routes/auth"); +const bodyParser = require("body-parser"); + +// Middleware +app.use(bodyParser.json()); + +// Routes +app.use("/auth", authRoutes); + +// Server starten +const PORT = process.env.PORT || 3000; +app.listen(PORT, () => { + console.log(`Server läuft auf Port ${PORT}`); +}); diff --git a/server/controllers/userController.js b/server/controllers/userController.js new file mode 100644 index 0000000..4f37f28 --- /dev/null +++ b/server/controllers/userController.js @@ -0,0 +1,81 @@ +const bcrypt = require("bcryptjs"); +const jwt = require("jsonwebtoken"); +const { Pool } = require("pg"); + +// Datenbankverbindung +const pool = new Pool({ + user: process.env.DB_USER, + host: process.env.DB_HOST, + database: process.env.DB_NAME, + password: process.env.DB_PASSWORD, + port: 5432, +}); + +// Registrierungsfunktion +const registerUser = async (req, res) => { + const { username, password, email, role } = req.body; + + try { + // Überprüfen, ob der Benutzer bereits existiert + const userExists = await pool.query( + "SELECT * FROM Users WHERE email = $1", + [email] + ); + if (userExists.rows.length > 0) { + return res.status(400).json({ message: "Benutzer existiert bereits" }); + } + + // Passwort hashen + const hashedPassword = await bcrypt.hash(password, 10); + + // Neuen Benutzer einfügen + const newUser = await pool.query( + "INSERT INTO Users (username, password, email, role, is_active) VALUES ($1, $2, $3, $4, $5) RETURNING *", + [username, hashedPassword, email, role, true] + ); + + res + .status(201) + .json({ message: "Benutzer registriert", user: newUser.rows[0] }); + } catch (err) { + res + .status(500) + .json({ message: "Fehler beim Registrieren", error: err.message }); + } +}; + +// Loginfunktion +const loginUser = async (req, res) => { + const { email, password } = req.body; + + try { + // Überprüfen, ob der Benutzer existiert + const user = await pool.query("SELECT * FROM Users WHERE email = $1", [ + email, + ]); + if (user.rows.length === 0) { + return res.status(400).json({ message: "Benutzer nicht gefunden" }); + } + + // Passwort vergleichen + const validPassword = await bcrypt.compare(password, user.rows[0].password); + if (!validPassword) { + return res.status(400).json({ message: "Ungültiges Passwort" }); + } + + // JWT Token erstellen + const token = jwt.sign( + { id: user.rows[0].id, role: user.rows[0].role }, + process.env.JWT_SECRET, + { + expiresIn: "1h", + } + ); + + res.status(200).json({ message: "Login erfolgreich", token }); + } catch (err) { + res.status(500).json({ message: "Fehler beim Login", error: err.message }); + } +}; + +module.exports = { registerUser, loginUser }; diff --git a/server/routes/auth.js b/server/routes/auth.js new file mode 100644 index 0000000..d76794a --- /dev/null +++ b/server/routes/auth.js @@ -0,0 +1,11 @@ +const express = require("express"); +const { loginUser, registerUser } = require("../controllers/userController"); +const router = express.Router(); + +// Registrierungsroute +router.post("/register", registerUser); + +// Loginroute +router.post("/login", loginUser); + +module.exports = router;