From f06348e9c9d0c84a0160e792bf4435b9a1043447 Mon Sep 17 00:00:00 2001 From: Joseph-Fossey Date: Thu, 16 Jan 2025 10:30:39 +0000 Subject: [PATCH 1/8] login service and routes --- login.json | 12 ++++++++++++ routes/login.js | 14 ++++++++++++++ services/loginService.js | 27 +++++++++++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 login.json create mode 100644 routes/login.js create mode 100644 services/loginService.js diff --git a/login.json b/login.json new file mode 100644 index 0000000..c6f3f48 --- /dev/null +++ b/login.json @@ -0,0 +1,12 @@ +[ + { + "email": "shaun@test.com", + "password": "12345678", + "access": "Admin" + }, + { + "email": "joemfossey@gmail.com", + "password": "12345678", + "access": "User" + } + ] \ No newline at end of file diff --git a/routes/login.js b/routes/login.js new file mode 100644 index 0000000..14fe74f --- /dev/null +++ b/routes/login.js @@ -0,0 +1,14 @@ +const express = require('express'); +const router = express.Router(); +const LoginService = require('../services/loginService'); +const loginService = new LoginService(); + +// Route to read all employees +router.get('/', (req, res) => { + const logins = loginService.getAllLogins(); + res.render('logins', { logins: logins }); +}); + +module.exports = router; + + diff --git a/services/loginService.js b/services/loginService.js new file mode 100644 index 0000000..e49ca3f --- /dev/null +++ b/services/loginService.js @@ -0,0 +1,27 @@ +const fs = require('fs'); + +class LoginService { + constructor() { + this.filePath = "login.json"; + } + + // Helper function to read logins from JSON file + readLogins() { + try { + const data = fs.readFileSync(this.filePath, 'utf8'); + return JSON.parse(data); + } catch (err) { + console.error('Error reading logins:', err); + return []; + } + } + + // Get all Logins + getAllLogins() { + return this.readLogins(); + } + + +} + +module.exports = LoginService; From efa394848f3a21ec7abc7c6315d6272ca6607927 Mon Sep 17 00:00:00 2001 From: tblackledge97 <129543913+tblackledge97@users.noreply.github.com> Date: Thu, 16 Jan 2025 10:42:46 +0000 Subject: [PATCH 2/8] login front end --- views/index.ejs | 7 ++++--- views/login.ejs | 30 ++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 views/login.ejs diff --git a/views/index.ejs b/views/index.ejs index 4d2f850..a892999 100644 --- a/views/index.ejs +++ b/views/index.ejs @@ -9,13 +9,14 @@ + <%- include('./header.ejs') %>

Kainos Employee App

Welcome to The Kainos Employee App

- - - View Employees + + + Log in diff --git a/views/login.ejs b/views/login.ejs new file mode 100644 index 0000000..418e902 --- /dev/null +++ b/views/login.ejs @@ -0,0 +1,30 @@ + + + + Log In Page + + + + + + + <%- include('./header.ejs') %> + +

Log In

+ +
+ + +
+ +
+ + +
+ + + + + <%- include('./footer.ejs') %> + + From f4eb24110d29b228173f127f56998df9638dc974 Mon Sep 17 00:00:00 2001 From: Joseph-Fossey Date: Thu, 16 Jan 2025 10:47:11 +0000 Subject: [PATCH 3/8] Fixed, I think? --- app.js | 4 +++- routes/login.js | 4 ++-- views/login.ejs | 15 +++++++++++++++ 3 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 views/login.ejs diff --git a/app.js b/app.js index 77d2966..9c0d31e 100644 --- a/app.js +++ b/app.js @@ -6,7 +6,8 @@ require('dotenv').config(); var indexRouter = require('./routes/index'); var usersRouter = require('./routes/users'); -var employeesRouter = require('./routes/employees'); // Renamed +var employeesRouter = require('./routes/employees'); +var loginRouter = require('./routes/login'); var app = express(); @@ -23,6 +24,7 @@ app.use(express.static(path.join(__dirname, 'public'))); app.use('/', indexRouter); app.use('/users', usersRouter); // Users route app.use('/employees', employeesRouter); // Employees route +app.use('/login', loginRouter); // Login route // catch 404 and forward to error handler app.use(function(req, res, next) { diff --git a/routes/login.js b/routes/login.js index 14fe74f..ab29c67 100644 --- a/routes/login.js +++ b/routes/login.js @@ -3,10 +3,10 @@ const router = express.Router(); const LoginService = require('../services/loginService'); const loginService = new LoginService(); -// Route to read all employees +// Route to read all logins router.get('/', (req, res) => { const logins = loginService.getAllLogins(); - res.render('logins', { logins: logins }); + res.render('login', { logins: logins }); }); module.exports = router; diff --git a/views/login.ejs b/views/login.ejs new file mode 100644 index 0000000..8af8ee5 --- /dev/null +++ b/views/login.ejs @@ -0,0 +1,15 @@ + + + + Login + + + + + + <%- include('./header.ejs') %> +

Login Page

+ + <%- include('./footer.ejs') %> + + \ No newline at end of file From 6b174cd59f8745a403bcbf23f961e8905e516c2c Mon Sep 17 00:00:00 2001 From: Joseph-Fossey Date: Thu, 16 Jan 2025 10:50:08 +0000 Subject: [PATCH 4/8] without ejs --- views/login.ejs | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 views/login.ejs diff --git a/views/login.ejs b/views/login.ejs deleted file mode 100644 index 8af8ee5..0000000 --- a/views/login.ejs +++ /dev/null @@ -1,15 +0,0 @@ - - - - Login - - - - - - <%- include('./header.ejs') %> -

Login Page

- - <%- include('./footer.ejs') %> - - \ No newline at end of file From 5f5c39ee885fc0c58ffa164a54b6a4e54c8c7997 Mon Sep 17 00:00:00 2001 From: tblackledge97 <129543913+tblackledge97@users.noreply.github.com> Date: Thu, 16 Jan 2025 11:39:56 +0000 Subject: [PATCH 5/8] fully styled login page --- public/stylesheets/style.css | 31 +++++++++++++++++++++++++++++++ views/login.ejs | 17 ++++++++++++++++- 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css index b79728f..3da3a83 100644 --- a/public/stylesheets/style.css +++ b/public/stylesheets/style.css @@ -55,3 +55,34 @@ img { } +h2 { + font: 24px, "Galano Grotessque"; + color: #252d4F; +} + + +.logIn { + color: #252d4f; + font: 16px "Galano Grotessque"; +} + +.logIn label, .password label{ + display: block; + margin-bottom: 8px; +} + +.password { + color: #252d4f; + font: 16px "Galano Grotessque"; +} + +button[type="submit"] { + background-color: #1b2db5; + color: white; + margin-top: 8px; + padding: 10px 20px; + border: none; + font: 16px "Galano Grotessque"; + cursor: pointer; +} + diff --git a/views/login.ejs b/views/login.ejs index 8af8ee5..76f167f 100644 --- a/views/login.ejs +++ b/views/login.ejs @@ -4,11 +4,26 @@ Login + <%- include('./header.ejs') %> -

Login Page

+

Login Page

+ + + +
+ + +
+ +
+ +
<%- include('./footer.ejs') %> From c40a54c66caa56a3926efc7c893babdbdf726547 Mon Sep 17 00:00:00 2001 From: Joseph-Fossey Date: Thu, 16 Jan 2025 13:35:41 +0000 Subject: [PATCH 6/8] Backend Login Validation Attempt --- routes/login.js | 12 ++++++++++++ services/loginService.js | 5 +++++ views/employees.ejs | 3 +-- views/login.ejs | 18 +++++++++--------- 4 files changed, 27 insertions(+), 11 deletions(-) diff --git a/routes/login.js b/routes/login.js index ab29c67..2fd7689 100644 --- a/routes/login.js +++ b/routes/login.js @@ -9,6 +9,18 @@ router.get('/', (req, res) => { res.render('login', { logins: logins }); }); +// Route to handle login form submission +router.post('/', (req, res) => { + const { email, password } = req.body; + const user = loginService.validateLogin(email, password); + + if (user) { + res.redirect('/employees.html'); + } else { + res.send('Invalid email or password'); + } +}); + module.exports = router; diff --git a/services/loginService.js b/services/loginService.js index e49ca3f..9582c77 100644 --- a/services/loginService.js +++ b/services/loginService.js @@ -21,6 +21,11 @@ class LoginService { return this.readLogins(); } + validateLogin(email, password) { + const logins = this.getAllLogins(); + return logins.find(login => login.email === email && login.password === password); + } + } diff --git a/views/employees.ejs b/views/employees.ejs index 786b444..664d6f7 100644 --- a/views/employees.ejs +++ b/views/employees.ejs @@ -12,7 +12,7 @@ <% if (employees && employees.length > 0) { %> - +
@@ -20,7 +20,6 @@ - diff --git a/views/login.ejs b/views/login.ejs index 76f167f..1bd945c 100644 --- a/views/login.ejs +++ b/views/login.ejs @@ -11,17 +11,17 @@ <%- include('./header.ejs') %>

Login Page

- + + -
- - -
+
+ + +
- From 1e87e07c1b2fd159af0d84704b890d406bf47b9e Mon Sep 17 00:00:00 2001 From: tblackledge97 <129543913+tblackledge97@users.noreply.github.com> Date: Thu, 16 Jan 2025 14:09:07 +0000 Subject: [PATCH 7/8] login page working with validation --- routes/login.js | 4 ++-- views/login.ejs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/routes/login.js b/routes/login.js index 2fd7689..af23a57 100644 --- a/routes/login.js +++ b/routes/login.js @@ -15,9 +15,9 @@ router.post('/', (req, res) => { const user = loginService.validateLogin(email, password); if (user) { - res.redirect('/employees.html'); + res.redirect('./employee'); } else { - res.send('Invalid email or password'); + res.redirect('/login'); } }); diff --git a/views/login.ejs b/views/login.ejs index 1bd945c..997ea0c 100644 --- a/views/login.ejs +++ b/views/login.ejs @@ -11,7 +11,7 @@ <%- include('./header.ejs') %>

Login Page

- +
NameSalary Role Employee Number