diff --git a/backend/api.js b/backend/api.js deleted file mode 100644 index 5ea914e..0000000 --- a/backend/api.js +++ /dev/null @@ -1,143 +0,0 @@ -/* -** This code is part of Blink -** licensed under GPLv3 -*/ - -// require() always returns a function -const express = require('express'); -const bcrypt = require('bcrypt'); -const { Pool } = require('pg'); -const crypto = require('crypto'); - -// We can do express() because the express -// module exports a function. Exporting a function -// means making a JavaScript function defined in one -// module available for use in another module. -const app = express(); -const port = 3000; - -// Middleware which parses JSON for POST requests -app.use(express.json()); - -const pool = new Pool({ - user: 'postgres', - host: 'localhost', - database: 'Blink', - password: 'postgres', - port: 5432, - max: 10, - idleTimeoutMillis: 30000, -}); - -// Define a route to get all items -app.get('/api/items', (req, res) => { - res.json(items); -}); - -// POST - Register an account - -// (req, res) => { ... } is a callback which usually indicates that the -// execution of the code contained between brackets will continue -// asynchronously. -app.post('/api/register', (req, res) => { - const userData = req.body; - - // Ensure that the required fields are present before proceeding - if (!userData.display_name || !userData.email || !userData.password) { - return res.status(400).json("Invalid request"); - } - - // The callback denoted by the arrow function is executed - // when hash() has finished its execution. - bcrypt.hash(userData.password, 10, (err, hashedPassword) => { - - if (err) { - console.error('Error hashing password:', err); - } - - else { - - // Generate activation link token - const activationLink = crypto.randomBytes(16).toString('hex'); - - // Acquire a connection from the pool - pool.connect() - .then((client) => { - // SQL query with placeholders for parameters - const insertQuery = ` - INSERT INTO "User" (display_name, date_of_birth, place_of_living, is_looking_for_job, email, password) - VALUES ($1, $2, $3, $4, $5, $6) - RETURNING *`; // Return the inserted row - - return client.query(insertQuery, [ - userData.display_name, - userData.date_of_birth, - userData.place_of_living, - userData.is_looking_for_job, - userData.email, - hashedPassword - ]) - .then((result) => { - // Respond with the inserted user data - res.status(200).json(result.rows[0]); - }) - .catch((error) => { - console.error('Error inserting data:', error); - res.status(500).json("Internal server error"); - }) - .finally(() => { - // Release the connection back to the pool - client.release(); - }); - }) - .catch((error) => { - console.error('Error acquiring a connection from the pool:', error); - res.status(500).json("Internal server error"); - }); - } - - }); -}); - -app.post('/api/registerv2', async (req, res) => { - const userData = req.body; - - // Ensure that the required fields are present before proceeding - if (!userData.display_name || !userData.email || !userData.password) { - return res.status(400).json("Invalid request"); - } - - const hashPasswordPromise = bcrypt.hash(userData.password, 10); - var client; - try{ - client = await pool.connect(); - const insertQuery = ` - INSERT INTO "User" (display_name, date_of_birth, place_of_living, is_looking_for_job, email, password) - VALUES ($1, $2, $3, $4, $5, $6) - RETURNING *`; - const result = await client.query(insertQuery, [ - userData.display_name, - userData.date_of_birth, - userData.place_of_living, - userData.is_looking_for_job, - userData.email, - await hashPasswordPromise - ]); - res.status(200).json(result.rows[0]); - } - catch (error){ - console.error('Error inserting data:', error); - res.status(500).json("Internal server error"); - } - finally { - if (client) { - client.release(); - } - } -}); - - -// Start the server -app.listen(port, () => { - console.log(`Blink API server is running on port ${port}`); -}); \ No newline at end of file diff --git a/backend/apis/nodejs/api.js b/backend/apis/nodejs/api.js new file mode 100644 index 0000000..9f4abff --- /dev/null +++ b/backend/apis/nodejs/api.js @@ -0,0 +1,26 @@ +/* +** This code is part of Blink +** licensed under GPLv3 +*/ + +// require() always returns a function +const express = require('express'); +const api_controller = require('./api_controller.js'); + +// We can do express() because the express +// module exports a function. Exporting a function +// means making a JavaScript function defined in one +// module available for use in another module. +const app = express(); +const port = 3000; + +// Middleware which parses JSON for POST requests +app.use(express.json()); + +app.post('/blinkapi/register', api_controller.register_async); +app.post('blinkapi/login', api_controller.login); + +// Start the server +app.listen(port, () => { + console.log(`Blink API server is running on port ${port}`); +}); \ No newline at end of file diff --git a/backend/apis/nodejs/api_controller.js b/backend/apis/nodejs/api_controller.js new file mode 100644 index 0000000..a96005a --- /dev/null +++ b/backend/apis/nodejs/api_controller.js @@ -0,0 +1,121 @@ +const bcrypt = require('bcrypt'); +const { Pool } = require('pg'); +const crypto = require('crypto'); + +const pool = new Pool({ + user: 'postgres', + host: 'localhost', + database: 'Blink', + password: 'postgres', + port: 5432, + max: 10, + idleTimeoutMillis: 30000, +}); + +function register(req, res){ + const userData = req.body; + + // Ensure that the required fields are present before proceeding + if (!userData.display_name || !userData.email || !userData.password) { + return res.status(400).json("Invalid request"); + } + + // The callback denoted by the arrow function is executed + // when hash() has finished its execution. + bcrypt.hash(userData.password, 10, (err, hashedPassword) => { + + if (err) { + console.error('Error hashing password:', err); + } + + else { + + // Generate activation link token + const activationLink = crypto.randomBytes(16).toString('hex'); + + // Acquire a connection from the pool + pool.connect() + .then((client) => { + // SQL query with placeholders for parameters + const insertQuery = ` + INSERT INTO "User" (display_name, date_of_birth, place_of_living, is_looking_for_job, email, password) + VALUES ($1, $2, $3, $4, $5, $6) + RETURNING *`; // Return the inserted row + + return client.query(insertQuery, [ + userData.display_name, + userData.date_of_birth, + userData.place_of_living, + userData.is_looking_for_job, + userData.email, + hashedPassword + ]) + .then((result) => { + // Respond with the inserted user data + res.status(200).json(result.rows[0]); + }) + .catch((error) => { + console.error('Error inserting data:', error); + res.status(500).json("Internal server error"); + }) + .finally(() => { + // Release the connection back to the pool + client.release(); + }); + }) + .catch((error) => { + console.error('Error acquiring a connection from the pool:', error); + res.status(500).json("Internal server error"); + }); + } + }); +} + +async function register_async(req, res){ + const userData = req.body; + + // Ensure that the required fields are present before proceeding + if (!userData.display_name || !userData.email || !userData.password) { + return res.status(400).json("Invalid request"); + } + + // Generate activation link token + const activationLink = crypto.randomBytes(16).toString('hex'); + + const hashPasswordPromise = bcrypt.hash(userData.password, 10); + var client; + try{ + client = await pool.connect(); + const insertQuery = ` + INSERT INTO "User" (display_name, date_of_birth, place_of_living, is_looking_for_job, email, password) + VALUES ($1, $2, $3, $4, $5, $6) + RETURNING *`; + const result = await client.query(insertQuery, [ + userData.display_name, + userData.date_of_birth, + userData.place_of_living, + userData.is_looking_for_job, + userData.email, + await hashPasswordPromise + ]); + res.status(200).json(result.rows[0]); + } + catch (error){ + console.error('Error inserting data:', error); + res.status(500).json("Internal server error"); + } + finally { + if (client) { + client.release(); + } + } +} + +function login(req, res){ + +} + +module.exports = { + register_async, + login +}; \ No newline at end of file diff --git a/demoimages/blink_banner.jpg b/demoimages/blink_banner.jpg deleted file mode 100644 index 355d963..0000000 Binary files a/demoimages/blink_banner.jpg and /dev/null differ diff --git a/frontend/http/css/login.css b/frontend/html/css/login.css similarity index 90% rename from frontend/http/css/login.css rename to frontend/html/css/login.css index 335c38e..7cce9d5 100644 --- a/frontend/http/css/login.css +++ b/frontend/html/css/login.css @@ -59,6 +59,7 @@ input { } input[type="text"], +input[type="password"], input[type="email"] { width: 100%; padding: 0 0 0 10px; @@ -75,26 +76,31 @@ input[type="email"] { background: none; } input[type="text"]:focus, +input[type="password"]:focus, input[type="email"]:focus { border-color: #3ca9e2; } input[type="text"]:focus:invalid, +input[type="password"]:focus:invalid, input[type="email"]:focus:invalid { color: #cc1e2b; border-color: #cc1e2b; } input[type="text"]:valid ~ .validation, +input[type="password"]:valid ~ .validation, input[type="email"]:valid ~ .validation { display: block; border-color: #0C0; } input[type="text"]:valid ~ .validation span, +input[type="password"]:valid ~ .validation span, input[type="email"]:valid ~ .validation span { background: #0C0; position: absolute; border-radius: 6px; } input[type="text"]:valid ~ .validation span:first-child, +input[type="password"]:valid ~ .validation span:first-child, input[type="email"]:valid ~ .validation span:first-child { top: 30px; left: 14px; @@ -104,6 +110,7 @@ input[type="email"]:valid ~ .validation span:first-child { transform: rotate(-45deg); } input[type="text"]:valid ~ .validation span:last-child, +input[type="password"]:valid ~ .validation span:last-child, input[type="email"]:valid ~ .validation span:last-child { top: 35px; left: 8px; diff --git a/frontend/http/html/login.html b/frontend/html/html/login.html similarity index 67% rename from frontend/http/html/login.html rename to frontend/html/html/login.html index 97acb41..2af5964 100644 --- a/frontend/http/html/login.html +++ b/frontend/html/html/login.html @@ -11,13 +11,16 @@