diff --git a/backend/app.py b/backend/app.py index e03fb3c..57ec79a 100644 --- a/backend/app.py +++ b/backend/app.py @@ -72,6 +72,35 @@ def serve_react(path): else: return send_from_directory(dist_dir, 'index.html') +@app.route('/api/login', methods=['POST']) +def login(): + from mysql.connector import connect, Error + data = request.get_json() + username = data.get('username') + password = data.get('password') + + try: + config = lade_db_config() + conn = connect(**config) + cursor = conn.cursor(dictionary=True) + cursor.execute("SELECT * FROM users WHERE username = %s AND password = %s", (username, password)) + user = cursor.fetchone() + cursor.close() + conn.close() + + if user: + return jsonify({ + "token": "mock-token", # später JWT etc. + "role": user['role'] + }) + else: + return jsonify({"message": "Login fehlgeschlagen"}), 401 + + except Error as e: + print("[Fehler bei /api/login]:", e) + return jsonify({"message": "Serverfehler"}), 500 + + if __name__ == '__main__': os.makedirs("config", exist_ok=True) app.run(host='127.0.0.1', port=5000) diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index e104182..4c6a7e2 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -2,7 +2,8 @@ import { BrowserRouter, Navigate, Route, Routes } from 'react-router-dom'; //import AdminDashboard from './components/AdminDashboard'; import LoginForm from './components/LoginForm'; //import RegisterForm from './components/RegisterForm'; -import Home from './components/Home'; +import Md5Tool from './components/Md5Tool'; +import ToolOverview from './components/ToolOverview'; function App() { const isLoggedIn = localStorage.getItem('token') !== null; @@ -11,12 +12,11 @@ function App() { return ( - : } /> + : } /> } /> {/*} />*/} : } /> {/* : } />*/} - } /> ); diff --git a/frontend/src/components/LoginForm.jsx b/frontend/src/components/LoginForm.jsx index 0211d33..d20d781 100644 --- a/frontend/src/components/LoginForm.jsx +++ b/frontend/src/components/LoginForm.jsx @@ -1,4 +1,3 @@ -// src/components/LoginForm.jsx import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import axios from '../services/api'; @@ -10,7 +9,7 @@ function LoginForm() { const login = async () => { try { - const res = await axios.post('/login', { username, password }); + const res = await axios.post('/login', { username, password }); // ruft POST /api/login auf localStorage.setItem('token', res.data.token); localStorage.setItem('role', res.data.role); navigate('/'); @@ -22,8 +21,17 @@ function LoginForm() { return (

Login

- setUsername(e.target.value)} placeholder="Benutzername" /> - setPassword(e.target.value)} placeholder="Passwort" /> + setUsername(e.target.value)} + placeholder="Benutzername" + /> + setPassword(e.target.value)} + placeholder="Passwort" + />
); diff --git a/frontend/src/components/ToolsOverview.jsx b/frontend/src/components/ToolOverview.jsx similarity index 100% rename from frontend/src/components/ToolsOverview.jsx rename to frontend/src/components/ToolOverview.jsx diff --git a/frontend/src/services/api.js b/frontend/src/services/api.js index 95e022d..f33ee14 100644 --- a/frontend/src/services/api.js +++ b/frontend/src/services/api.js @@ -1,12 +1,14 @@ import axios from 'axios'; const instance = axios.create({ - baseURL: import.meta.env.VITE_API_URL || 'http://localhost:5000/api', + baseURL: import.meta.env.VITE_API_URL || 'http://127.0.0.1:5000/api', }); instance.interceptors.request.use(config => { const token = localStorage.getItem('token'); - if (token) config.headers.Authorization = `Bearer ${token}`; + if (token) { + config.headers.Authorization = `Bearer ${token}`; + } return config; });