From 4f08ca3be130ff951dbc37d921aa49b4054a0fc8 Mon Sep 17 00:00:00 2001 From: Lucas Patenaude Date: Tue, 12 Mar 2024 01:56:44 -0600 Subject: [PATCH] CSS hookups added and docker-compose compatibility changes made --- ProjectSourceCode/docker-compose.yaml | 15 +++- ProjectSourceCode/src/index.js | 87 ++++++++++++++++++- .../src/resources/css/home-screen.css | 3 + .../resources/css/login_and_registration.css | 19 ++++ ProjectSourceCode/src/resources/css/style.css | 0 ProjectSourceCode/src/views/layouts/main.hbs | 18 ++++ ProjectSourceCode/src/views/pages/home.hbs | 41 +++++++++ ProjectSourceCode/src/views/pages/login.hbs | 31 +++++++ .../src/views/pages/register.hbs | 24 +++++ .../src/views/partials/event_card.hbs | 10 +++ .../src/views/partials/footer.hbs | 8 ++ ProjectSourceCode/src/views/partials/head.hbs | 17 ++++ .../src/views/partials/header.hbs | 0 .../src/views/partials/message.hbs | 5 ++ ProjectSourceCode/src/views/partials/nav.hbs | 27 ++++++ .../src/views/partials/title.hbs | 5 ++ 16 files changed, 305 insertions(+), 5 deletions(-) create mode 100644 ProjectSourceCode/src/resources/css/home-screen.css create mode 100644 ProjectSourceCode/src/resources/css/login_and_registration.css delete mode 100644 ProjectSourceCode/src/resources/css/style.css create mode 100644 ProjectSourceCode/src/views/partials/event_card.hbs create mode 100644 ProjectSourceCode/src/views/partials/head.hbs delete mode 100644 ProjectSourceCode/src/views/partials/header.hbs create mode 100644 ProjectSourceCode/src/views/partials/message.hbs create mode 100644 ProjectSourceCode/src/views/partials/nav.hbs create mode 100644 ProjectSourceCode/src/views/partials/title.hbs diff --git a/ProjectSourceCode/docker-compose.yaml b/ProjectSourceCode/docker-compose.yaml index 80522db..5638dd7 100644 --- a/ProjectSourceCode/docker-compose.yaml +++ b/ProjectSourceCode/docker-compose.yaml @@ -1,14 +1,25 @@ version: '3.9' + +############################################################ +# To Give the container a project related name run: # +# # +# docker-compose -p final-project up # +# # +# ⚠️ Make sure current directory is: /ProjectSourceCode ⚠️ # +############################################################ + services: db: + container_name: postgres-db image: postgres:14 env_file: .env ports: - - '5433:5433' + - '5432:5432' volumes: - group-project:/var/lib/postgresql/data - ./src/init_data:/docker-entrypoint-initdb.d web: + container_name: node-web-interface image: node:lts user: 'node' working_dir: /home/node/app @@ -18,7 +29,7 @@ services: depends_on: - db ports: - - '3001:3001' + - '3000:3000' volumes: - ./src:/home/node/app command: 'npm start' diff --git a/ProjectSourceCode/src/index.js b/ProjectSourceCode/src/index.js index a016940..1be8699 100644 --- a/ProjectSourceCode/src/index.js +++ b/ProjectSourceCode/src/index.js @@ -27,7 +27,7 @@ const hbs = handlebars.create({ // database configuration const dbConfig = { host: 'db', // the database server - port: 5433, // the database port + port: 5432, // the database port database: process.env.POSTGRES_DB, // the database name user: process.env.POSTGRES_USER, // the user account to connect with password: process.env.POSTGRES_PASSWORD, // the password of the user account @@ -71,13 +71,94 @@ app.use( ); // Serve static files from the 'public' directory -app.use(express.static(path.join(__dirname, 'public'))); +app.use(express.static(path.join(__dirname, 'resources'))); // ***************************************************** // // ***************************************************** -// TODO - Include your API routes here +/************************ + Login Page Routes +*************************/ + +// Redirect to the /login endpoint +app.get('/', (req, res) => { + res.redirect('/login'); + }); + + // Render login page for /login route + app.get('/login', (req, res) => { + res.render('pages/login'); + }); + + // Trigger login form to check database for matching username and password + app.post('/login', async (req, res) => { + try { + + // Check if username exists in DB + const user = await db.oneOrNone('SELECT * FROM users WHERE username = $1', req.body.username); + + if (!user) { + // Redirect user to login screen if no user is found with the provided username + return res.redirect('/register'); + } + + // Check if password from request matches with password in DB + const match = await bcrypt.compare(req.body.password, user.password); + + // Check if mathc returns no data + if (!match) { + // Render the login page with the message parameter + return res.render('pages/login', { message: 'Password does not match' }); + } + + // Save user information in the session variable + req.session.user = user; + req.session.save(); + + // Redirect user to the home page + res.redirect('/home'); + + } catch (error) { + // Direct user to login screen if no user is found with matching password + res.redirect('/register'); + } + }); + + /************************ + Registration Page Routes + *************************/ + + // Render registration page for /register route + app.get('/register', (req, res) => { + res.render('pages/register'); + }); + + // Trigger Registration Form to Post + app.post('/register', async (req, res) => { + try { + // Hash the password using bcrypt library + const hash = await bcrypt.hash(req.body.password, 10); + + // Insert username and hashed password into the 'users' table + await db.none('INSERT INTO users (username, password) VALUES ($1, $2)', [req.body.username, hash]); + + // Direct user to login screen after data has been inserted successfully + res.redirect('/login'); + } catch (error) { + // If the insert fails, redirect to GET /register route + res.redirect('/register'); + } + }); + + /************************ + Discover Page Routes + *************************/ + + // Render registration page for /register route + app.get('/home', (req, res) => { + res.render('pages/home'); + }); // ***************************************************** diff --git a/ProjectSourceCode/src/resources/css/home-screen.css b/ProjectSourceCode/src/resources/css/home-screen.css new file mode 100644 index 0000000..9f7ef93 --- /dev/null +++ b/ProjectSourceCode/src/resources/css/home-screen.css @@ -0,0 +1,3 @@ +.card-container { + margin-bottom: 35px; +} \ No newline at end of file diff --git a/ProjectSourceCode/src/resources/css/login_and_registration.css b/ProjectSourceCode/src/resources/css/login_and_registration.css new file mode 100644 index 0000000..2882c43 --- /dev/null +++ b/ProjectSourceCode/src/resources/css/login_and_registration.css @@ -0,0 +1,19 @@ +/* Styling to center login page items */ +.login-page { + height: 50%; + display: flex; + justify-content: center; /* Center items horizontally */ + align-items: center; /* Center items vertically */ +} + +.form-container { + width: 40%; +} + +/* Styling to center register page items */ +.register-page { + height: 50%; + display: flex; + justify-content: center; /* Center items horizontally */ + align-items: center; /* Center items vertically */ +} \ No newline at end of file diff --git a/ProjectSourceCode/src/resources/css/style.css b/ProjectSourceCode/src/resources/css/style.css deleted file mode 100644 index e69de29..0000000 diff --git a/ProjectSourceCode/src/views/layouts/main.hbs b/ProjectSourceCode/src/views/layouts/main.hbs index e69de29..1bdc16d 100644 --- a/ProjectSourceCode/src/views/layouts/main.hbs +++ b/ProjectSourceCode/src/views/layouts/main.hbs @@ -0,0 +1,18 @@ + + + + + {{> head}} + + + + {{> nav}} + + + {{{body}}} + + + + {{> footer}} + + \ No newline at end of file diff --git a/ProjectSourceCode/src/views/pages/home.hbs b/ProjectSourceCode/src/views/pages/home.hbs index e69de29..bbe309e 100644 --- a/ProjectSourceCode/src/views/pages/home.hbs +++ b/ProjectSourceCode/src/views/pages/home.hbs @@ -0,0 +1,41 @@ + +
+

Discover Events

+
+
+ + + {{> event_card imageURL="https://via.placeholder.com/300" eventName="Event Name" eventDateTime="Date and Time"}} + + + {{> event_card imageURL="https://via.placeholder.com/300" eventName="Event Name" eventDateTime="Date and Time"}} + + + {{> event_card imageURL="https://via.placeholder.com/300" eventName="Event Name" eventDateTime="Date and Time"}} + + + {{> event_card imageURL="https://via.placeholder.com/300" eventName="Event Name" eventDateTime="Date and Time"}} + + + {{> event_card imageURL="https://via.placeholder.com/300" eventName="Event Name" eventDateTime="Date and Time"}} + + + {{> event_card imageURL="https://via.placeholder.com/300" eventName="Event Name" eventDateTime="Date and Time"}} + + + {{> event_card imageURL="https://via.placeholder.com/300" eventName="Event Name" eventDateTime="Date and Time"}} + + + {{> event_card imageURL="https://via.placeholder.com/300" eventName="Event Name" eventDateTime="Date and Time"}} + + + {{> event_card imageURL="https://via.placeholder.com/300" eventName="Event Name" eventDateTime="Date and Time"}} + + + {{> event_card imageURL="https://via.placeholder.com/300" eventName="Event Name" eventDateTime="Date and Time"}} + +
+
+
+ + diff --git a/ProjectSourceCode/src/views/pages/login.hbs b/ProjectSourceCode/src/views/pages/login.hbs index e69de29..0c92121 100644 --- a/ProjectSourceCode/src/views/pages/login.hbs +++ b/ProjectSourceCode/src/views/pages/login.hbs @@ -0,0 +1,31 @@ + + +
+
+

Login

+ + + {{#if message}} + {{> message}} + {{/if}} + +
+ +
+ + +
+ +
+ + +
+ + + +
+ +

Don't have an account? Register

+
+
+ diff --git a/ProjectSourceCode/src/views/pages/register.hbs b/ProjectSourceCode/src/views/pages/register.hbs index e69de29..f8faaef 100644 --- a/ProjectSourceCode/src/views/pages/register.hbs +++ b/ProjectSourceCode/src/views/pages/register.hbs @@ -0,0 +1,24 @@ + +
+
+

Register

+ +
+ +
+ + +
+ +
+ + +
+ + +
+ +

Already have an account? Login

+
+
+ diff --git a/ProjectSourceCode/src/views/partials/event_card.hbs b/ProjectSourceCode/src/views/partials/event_card.hbs new file mode 100644 index 0000000..d071d14 --- /dev/null +++ b/ProjectSourceCode/src/views/partials/event_card.hbs @@ -0,0 +1,10 @@ +
+
+ Event Image +
+
{{eventName}}
+

Date and Time: {{eventDateTime}}

+ Book Now +
+
+
diff --git a/ProjectSourceCode/src/views/partials/footer.hbs b/ProjectSourceCode/src/views/partials/footer.hbs index e69de29..c5e5e7d 100644 --- a/ProjectSourceCode/src/views/partials/footer.hbs +++ b/ProjectSourceCode/src/views/partials/footer.hbs @@ -0,0 +1,8 @@ + diff --git a/ProjectSourceCode/src/views/partials/head.hbs b/ProjectSourceCode/src/views/partials/head.hbs new file mode 100644 index 0000000..9104923 --- /dev/null +++ b/ProjectSourceCode/src/views/partials/head.hbs @@ -0,0 +1,17 @@ + + + + + + + + + + + {{> title}} + + + + + + diff --git a/ProjectSourceCode/src/views/partials/header.hbs b/ProjectSourceCode/src/views/partials/header.hbs deleted file mode 100644 index e69de29..0000000 diff --git a/ProjectSourceCode/src/views/partials/message.hbs b/ProjectSourceCode/src/views/partials/message.hbs new file mode 100644 index 0000000..bccc0f8 --- /dev/null +++ b/ProjectSourceCode/src/views/partials/message.hbs @@ -0,0 +1,5 @@ +{{#if message}} + +{{/if}} \ No newline at end of file diff --git a/ProjectSourceCode/src/views/partials/nav.hbs b/ProjectSourceCode/src/views/partials/nav.hbs new file mode 100644 index 0000000..fd87df0 --- /dev/null +++ b/ProjectSourceCode/src/views/partials/nav.hbs @@ -0,0 +1,27 @@ + + diff --git a/ProjectSourceCode/src/views/partials/title.hbs b/ProjectSourceCode/src/views/partials/title.hbs new file mode 100644 index 0000000..810e89f --- /dev/null +++ b/ProjectSourceCode/src/views/partials/title.hbs @@ -0,0 +1,5 @@ +{{#if first_name}} + {{first_name}} - CSCI 3308 Lab 8 + {{else}} + CSCI 3308 Lab 8 +{{/if}} \ No newline at end of file