From aa34aea154c4bf9c7595d492b693ad2c89add3cd Mon Sep 17 00:00:00 2001 From: Reimar <mail@reim.ar> Date: Fri, 21 Mar 2025 11:02:56 +0100 Subject: [PATCH] Make login and register work in frontend --- frontend/login/index.html | 38 ++++++++-------- frontend/register/index.html | 46 +++++++++---------- frontend/scripts/login.js | 16 ++++++- frontend/scripts/register.js | 18 ++++++-- frontend/scripts/services/users.service.js | 33 +++++++------- frontend/styles/auth.css | 51 ++++++++++++++++++++++ frontend/styles/common.css | 3 ++ frontend/styles/login.css | 41 ----------------- frontend/styles/register.css | 41 ----------------- 9 files changed, 142 insertions(+), 145 deletions(-) create mode 100644 frontend/styles/auth.css create mode 100644 frontend/styles/common.css delete mode 100644 frontend/styles/login.css delete mode 100644 frontend/styles/register.css diff --git a/frontend/login/index.html b/frontend/login/index.html index 2f7f0f0..4b22dea 100644 --- a/frontend/login/index.html +++ b/frontend/login/index.html @@ -4,33 +4,33 @@ <meta charset="UTF-8" /> <title>Login - Temperature alarm</title> <meta name="viewport" content="width=device-width, initial-scale=1"> - <link rel="stylesheet" href="/styles/login.css"> + <link rel="stylesheet" href="/styles/auth.css"> <script defer type="module" src="/scripts/login.js"></script> </head> <body> - <div class="container"> - <form id="loginForm"> - <div class="form-container"> - <h1>Login</h1> + <form id="loginForm"> + <div class="form-container"> + <h1>Login</h1> - <label for="emailorusn"><b>Email or Username</b></label> - <input type="text" placeholder="Enter email or username" id="emailorusn" required> + <label for="emailorusn"><b>Email or Username</b></label> + <input type="text" placeholder="Enter email or username" id="emailorusn" required> - <label for="psw"><b>Password</b></label> - <input type="password" placeholder="Enter password" id="psw" required> + <label for="psw"><b>Password</b></label> + <input type="password" placeholder="Enter password" id="psw" required> - <button type="submit">Login</button> - <div class="registerText"> - <label> - <input type="checkbox" name="remember"> Remember me - </label> - <p> + <button type="submit">Login</button> + <div class="details"> + <label> + <input type="checkbox" name="remember"> Remember me + </label> + <span> Dont have an account? <a href="/register">Register</a> - </p> - </div> + </span> </div> - </form> - </div> + + <div id="form-error"></div> + </div> + </form> </body> </html> diff --git a/frontend/register/index.html b/frontend/register/index.html index 0427296..666fe02 100644 --- a/frontend/register/index.html +++ b/frontend/register/index.html @@ -4,36 +4,38 @@ <meta charset="UTF-8" /> <title>Register - Temperature Alarm</title> <meta name="viewport" content="width=device-width, initial-scale=1"> - <link rel="stylesheet" href="/styles/register.css"> - <script type="module" src="/scripts/register.js"></script> + <link rel="stylesheet" href="/styles/auth.css"> + <script defer type="module" src="/scripts/register.js"></script> </head> <body> - <div class="container"> - <form id="registerForm"> - <div class="form-container"> - <h1>Create Account</h1> + <form id="registerForm"> + <div class="form-container"> + <h1>Create Account</h1> - <label for="email"><b>Email</b></label> - <input type="email" placeholder="Enter email "id="email" required> + <label for="email"><b>Email</b></label> + <input type="email" placeholder="Enter email "id="email" required> - <label for="uname"><b>Username</b></label> - <input type="text" placeholder="Enter username" id="uname" required> + <label for="uname"><b>Username</b></label> + <input type="text" placeholder="Enter username" id="uname" required> - <label for="psw"><b>Password</b></label> - <input type="password" placeholder="Enter password" id="psw" required> + <label for="psw"><b>Password</b></label> + <input type="password" placeholder="Enter password" id="psw" required> - <label for="rpsw"><b>Repeat Password</b></label> - <input type="password" placeholder="Enter password again" id="rpsw" required> + <label for="rpsw"><b>Repeat Password</b></label> + <input type="password" placeholder="Enter password again" id="rpsw" required> - <button type="submit">Register</button> - <div class="loginText"> - <label> - Already have an account? <a href="./home.html">Login</a> - </label> - </div> + <button type="submit">Register</button> + <div class="details"> + <div></div> + + <label> + Already have an account? <a href="/login">Login</a> + </label> </div> - </form> - </div> + + <div id="form-error"></div> + </div> + </form> </body> </html> diff --git a/frontend/scripts/login.js b/frontend/scripts/login.js index 6160bca..e264a10 100644 --- a/frontend/scripts/login.js +++ b/frontend/scripts/login.js @@ -3,8 +3,20 @@ import { login } from "./services/users.service.js"; document.getElementById("loginForm").addEventListener("submit", function(event) { event.preventDefault(); + document.getElementById("form-error").style.display = "none"; + const emailOrUsername = document.getElementById("emailorusn").value; const password = document.getElementById("psw").value; - login(emailOrUsername, password); -}); \ No newline at end of file + login(emailOrUsername, password) + .then(response => { + if (response.error) { + document.getElementById("form-error").innerText = response.error; + document.getElementById("form-error").style.display = "block"; + + return; + } + + location.href = "/home"; + }); +}); diff --git a/frontend/scripts/register.js b/frontend/scripts/register.js index c61efa6..56bc5ee 100644 --- a/frontend/scripts/register.js +++ b/frontend/scripts/register.js @@ -1,8 +1,10 @@ -import { create } from "../../services/users.service.js"; +import { create } from "./services/users.service.js"; document.getElementById("registerForm").addEventListener("submit", function(event) { event.preventDefault(); // Prevents default form submission + document.getElementById("form-error").style.display = "none"; + // Get form values const email = document.getElementById("email").value; const username = document.getElementById("uname").value; @@ -10,5 +12,15 @@ document.getElementById("registerForm").addEventListener("submit", function(even const repeatPassword = document.getElementById("rpsw").value; // Call function with form values - create(email, username, password, repeatPassword); -}); \ No newline at end of file + create(email, username, password, repeatPassword) + .then(response => { + if (response?.error) { + document.getElementById("form-error").innerText = response.error; + document.getElementById("form-error").style.display = "block"; + + return; + } + + location.href = "/login"; + }); +}); diff --git a/frontend/scripts/services/users.service.js b/frontend/scripts/services/users.service.js index 58fddd7..f95a076 100644 --- a/frontend/scripts/services/users.service.js +++ b/frontend/scripts/services/users.service.js @@ -1,43 +1,42 @@ import { address } from "../../shared/constants.js"; +import { handleResponse } from "../../shared/utils.js"; export function login(usernameOrEmail, password) { - console.log(usernameOrEmail); - console.log(password); - - fetch(`${address}/user/login`, { + return fetch(`${address}/user/login`, { method: "POST", headers: { "Content-Type": "application/json" }, - body: JSON.stringify({usernameOrEmail: usernameOrEmail, password: password}) + body: JSON.stringify({ + EmailOrUsrn: usernameOrEmail, + Password: password, + }), }) - .then(response => response.json()) - .then(data => console.log("Success:", data)) - .catch(error => console.error("Error:", error)); + .then(handleResponse) + .catch(err => { error: err.message }); } export function create(email, username, password, repeatPassword){ - fetch(`${address}/user/create`, { + return fetch(`${address}/user/create`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({email: email, username: username, password: password, repeatPassword: repeatPassword}) }) - .then(response => response.json()) - .then(data => console.log("Success:", data)) - .catch(error => console.error("Error:", error)); + .then(handleResponse) + .catch(err => { error: err.message }); } - function update(email, username, password){ - fetch(`${address}/user/update`, { +function update(email, username, password){ + return fetch(`${address}/user/update`, { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify({email: email, username: username, password: password}) }) - .then(response => response.json()) - .then(data => console.log("Success:", data)) - .catch(error => console.error("Error:", error)); + .then(handleResponse) + .catch(err => { error: err.message }); } + diff --git a/frontend/styles/auth.css b/frontend/styles/auth.css new file mode 100644 index 0000000..1074997 --- /dev/null +++ b/frontend/styles/auth.css @@ -0,0 +1,51 @@ +body { + font-family: Arial, Helvetica, sans-serif; +} + +/* Full-width input fields */ +input[type=text], input[type=password], input[type=email] { + width: 100%; + padding: 12px 20px; + margin: 8px 0; + display: inline-block; + border: 1px solid #ccc; + box-sizing: border-box; +} + +/* Set a style for all buttons */ +button { + background-color: #04AA6D; + color: white; + padding: 14px 20px; + margin: 8px 0; + border: none; + cursor: pointer; + width: 100%; +} + +button:hover { + opacity: 0.8; +} + +.form-container { + width: 800px; + padding: 16px; + margin: auto; +} + +.details { + display: flex; + justify-content: space-between; + margin-top: 0.5rem; +} + +#form-error { + display: none; + background-color: #FFCDD2; + color: #C62828; + border: 1px solid #C62828; + border-radius: 4px; + padding: 1rem 2rem; + margin-top: 1rem; +} + diff --git a/frontend/styles/common.css b/frontend/styles/common.css new file mode 100644 index 0000000..a4742c3 --- /dev/null +++ b/frontend/styles/common.css @@ -0,0 +1,3 @@ +.error { + background-color: #EF9A9A; +} diff --git a/frontend/styles/login.css b/frontend/styles/login.css deleted file mode 100644 index ad00dbe..0000000 --- a/frontend/styles/login.css +++ /dev/null @@ -1,41 +0,0 @@ -body {font-family: Arial, Helvetica, sans-serif;} - -.container{ - display: flex; - justify-content: center; -} - -/* Full-width input fields */ -input[type=text], input[type=password], input[type=email] { - width: 100%; - padding: 12px 20px; - margin: 8px 0; - display: inline-block; - border: 1px solid #ccc; - box-sizing: border-box; -} - -/* Set a style for all buttons */ -button { - background-color: #04AA6D; - color: white; - padding: 14px 20px; - margin: 8px 0; - border: none; - cursor: pointer; - width: 100%; -} - -button:hover { - opacity: 0.8; -} - -.form-container { - width: 800px; - padding: 16px; -} - -.registerText{ -display: flex; -justify-content: space-between; -} \ No newline at end of file diff --git a/frontend/styles/register.css b/frontend/styles/register.css deleted file mode 100644 index ed7bcfc..0000000 --- a/frontend/styles/register.css +++ /dev/null @@ -1,41 +0,0 @@ -body {font-family: Arial, Helvetica, sans-serif;} - -.container{ - display: flex; - justify-content: center; -} - -/* Full-width input fields */ -input[type=text], input[type=password], input[type=email] { - width: 100%; - padding: 12px 20px; - margin: 8px 0; - display: inline-block; - border: 1px solid #ccc; - box-sizing: border-box; -} - -/* Set a style for all buttons */ -button { - background-color: #04AA6D; - color: white; - padding: 14px 20px; - margin: 8px 0; - border: none; - cursor: pointer; - width: 100%; -} - -button:hover { - opacity: 0.8; -} - -.form-container { - width: 800px; - padding: 16px; -} - -.loginText{ -display: flex; -justify-content: flex-end; -} \ No newline at end of file