From 20dba29f9c01e6ff4142fc8dd73d7e7c33a42034 Mon Sep 17 00:00:00 2001 From: RossTheRoss Date: Tue, 13 Apr 2021 14:22:16 -0500 Subject: start hw6 --- csci4131/hw6/strap012_hw6/README.txt | 2 + csci4131/hw6/strap012_hw6/api/utilities.js | 10 +++ csci4131/hw6/strap012_hw6/create_accounts_table.js | 41 ++++++++++++ csci4131/hw6/strap012_hw6/create_contacts_table.js | 44 +++++++++++++ csci4131/hw6/strap012_hw6/index.js | 75 ++++++++++++++++++++++ .../hw6/strap012_hw6/insert_into_accounts_table.js | 45 +++++++++++++ csci4131/hw6/strap012_hw6/package.json | 14 ++++ csci4131/hw6/strap012_hw6/public/welcome.html | 54 ++++++++++++++++ 8 files changed, 285 insertions(+) create mode 100644 csci4131/hw6/strap012_hw6/README.txt create mode 100644 csci4131/hw6/strap012_hw6/api/utilities.js create mode 100644 csci4131/hw6/strap012_hw6/create_accounts_table.js create mode 100644 csci4131/hw6/strap012_hw6/create_contacts_table.js create mode 100644 csci4131/hw6/strap012_hw6/index.js create mode 100644 csci4131/hw6/strap012_hw6/insert_into_accounts_table.js create mode 100644 csci4131/hw6/strap012_hw6/package.json create mode 100644 csci4131/hw6/strap012_hw6/public/welcome.html diff --git a/csci4131/hw6/strap012_hw6/README.txt b/csci4131/hw6/strap012_hw6/README.txt new file mode 100644 index 0000000..e056441 --- /dev/null +++ b/csci4131/hw6/strap012_hw6/README.txt @@ -0,0 +1,2 @@ +username: charlie +password: tango \ No newline at end of file diff --git a/csci4131/hw6/strap012_hw6/api/utilities.js b/csci4131/hw6/strap012_hw6/api/utilities.js new file mode 100644 index 0000000..6b6cec6 --- /dev/null +++ b/csci4131/hw6/strap012_hw6/api/utilities.js @@ -0,0 +1,10 @@ +const express = require('express') +const router = express.Router() + +router.get('/contacts', function (req, res) { + // TODO: Implement code to fetch contacts from the database +}); + +// TODO: Add implementation for other necessary end-points + +module.exports = router; \ No newline at end of file diff --git a/csci4131/hw6/strap012_hw6/create_accounts_table.js b/csci4131/hw6/strap012_hw6/create_accounts_table.js new file mode 100644 index 0000000..61b2602 --- /dev/null +++ b/csci4131/hw6/strap012_hw6/create_accounts_table.js @@ -0,0 +1,41 @@ +/* +TO DO: +----- +READ ALL COMMENTS AND REPLACE VALUES ACCORDINGLY +*/ + +const mysql = require("mysql"); + +const dbCon = mysql.createConnection({ + host: "cse-mysql-classes-01.cse.umn.edu", + user: "C4131S21U83", // replace with the database user provided to you + password: "6919", // replace with the database password provided to you + database: "C4131S21U83", // replace with the database user provided to you + port: 3306 +}); + +console.log("Attempting database connection"); +dbCon.connect(function (err) { + if (err) { + throw err; + } + console.log("Connected to database!"); + + const sql = `CREATE TABLE tbl_accounts ( + acc_id INT NOT NULL AUTO_INCREMENT, + acc_name VARCHAR(20), + acc_login VARCHAR(20), + acc_password VARCHAR(200), + PRIMARY KEY (acc_id) + )`; + + console.log("Attempting to create table: tbl_accounts"); + dbCon.query(sql, function (err, result) { + if (err) { + throw err; + } + console.log("Table tbl_accounts created"); + }); + + dbCon.end(); +}); diff --git a/csci4131/hw6/strap012_hw6/create_contacts_table.js b/csci4131/hw6/strap012_hw6/create_contacts_table.js new file mode 100644 index 0000000..bcad389 --- /dev/null +++ b/csci4131/hw6/strap012_hw6/create_contacts_table.js @@ -0,0 +1,44 @@ +/* +TO DO: +----- +READ ALL COMMENTS AND REPLACE VALUES ACCORDINGLY +*/ + +const mysql = require("mysql"); + +const dbCon = mysql.createConnection({ + host: "cse-mysql-classes-01.cse.umn.edu", + user: "C4131S21U83", // replace with the database user provided to you + password: "6919", // replace with the database password provided to you + database: "C4131S21U83", // replace with the database user provided to you + port: 3306 +}); + +console.log("Attempting database connection"); +dbCon.connect(function (err) { + if (err) { + throw err; + } + console.log("Connected to database!"); + + const sql = `CREATE TABLE tbl_contacts ( + contact_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, + name VARCHAR(30), + category VARCHAR(40), + location VARCHAR(300), + contact_info VARCHAR(200), + email VARCHAR(30), + website VARCHAR(300), + website_url VARCHAR(300) + )`; + + console.log("Attempting to create table: tbl_contacts"); + dbCon.query(sql, function (err, result) { + if (err) { + throw err; + } + console.log("Table tbl_accounts created"); + }); + + dbCon.end(); +}); diff --git a/csci4131/hw6/strap012_hw6/index.js b/csci4131/hw6/strap012_hw6/index.js new file mode 100644 index 0000000..a81fbd1 --- /dev/null +++ b/csci4131/hw6/strap012_hw6/index.js @@ -0,0 +1,75 @@ +// YOU CAN USE THIS FILE AS REFERENCE FOR SERVER DEVELOPMENT +const createError = require('http-errors'); + +// Include the express module +const express = require('express'); + +// helps in extracting the body portion of an incoming request stream +var bodyparser = require('body-parser'); + +// Path module - provides utilities for working with file and directory paths. +const path = require('path'); + +// Helps in managing user sessions +const session = require('express-session'); + +// include the mysql module +var mysql = require('mysql'); + +// Bcrypt library for comparing password hashes +const bcrypt = require('bcrypt'); + +// Include the express router. +const utilities = require('./api/utilities'); + +const port = 9001; + +// create an express application +const app = express(); + +// Use express-session +// In-memory session is sufficient for this assignment +app.use(session({ + secret: "csci4131secretkey", + saveUninitialized: true, + resave: false + } +)); + +// middle ware to serve static files +app.use(express.static(path.join(__dirname, 'public'))); + +// server listens on port 9002 for incoming connections +app.listen(port, () => console.log('Listening on port', port)); + +app.get('/', function (req, res) { + res.sendFile(path.join(__dirname, 'public/welcome.html')); +}); + +// GET method route for the contacts page. +// It serves contact.html present in public folder +app.get('/contacts', function(req, res) { + // TODO: Add Implementation +}); + +// TODO: Add implementation for other necessary end-points + +// Makes Express use a router called utilities +app.use('/api', utilities); + +// function to return the 404 message and error to client +app.use(function (req, res, next) { + next(createError(404)); +}); + +// error handler +app.use(function (err, req, res, next) { + // set locals, only providing error in development + res.locals.message = err.message; + res.locals.error = req.app.get('env') === 'development' ? err : {}; + + // render the error page + res.status(err.status || 500); + // res.render('error'); + res.send(); +}); \ No newline at end of file diff --git a/csci4131/hw6/strap012_hw6/insert_into_accounts_table.js b/csci4131/hw6/strap012_hw6/insert_into_accounts_table.js new file mode 100644 index 0000000..3157ce3 --- /dev/null +++ b/csci4131/hw6/strap012_hw6/insert_into_accounts_table.js @@ -0,0 +1,45 @@ +/* +TO DO: +----- +READ ALL COMMENTS AND REPLACE VALUES ACCORDINGLY +*/ + +const mysql = require("mysql"); +const bcrypt = require('bcrypt'); + +const dbCon = mysql.createConnection({ + host: "cse-mysql-classes-01.cse.umn.edu", + user: "C4131S21U83", // replace with the database user provided to you + password: "6919", // replace with the database password provided to you + database: "C4131S21U83", // replace with the database user provided to you + port: 3306 +}); + +console.log("Attempting database connection"); +dbCon.connect(function (err) { + if (err) { + throw err; + } + + console.log("Connected to database!"); + + const saltRounds = 10; + const myPlaintextPassword = 'tango'; // replace with password chosen by you OR retain the same value + const passwordHash = bcrypt.hashSync(myPlaintextPassword, saltRounds); + + const rowToBeInserted = { + acc_name: 'charlie', // replace with acc_name chosen by you OR retain the same value + acc_login: 'charlie', // replace with acc_login chosen by you OR retain the same value + acc_password: passwordHash + }; + + console.log("Attempting to insert record into tbl_accounts"); + dbCon.query('INSERT tbl_accounts SET ?', rowToBeInserted, function (err, result) { + if (err) { + throw err; + } + console.log("Table record inserted!"); + }); + + dbCon.end(); +}); diff --git a/csci4131/hw6/strap012_hw6/package.json b/csci4131/hw6/strap012_hw6/package.json new file mode 100644 index 0000000..fb99a59 --- /dev/null +++ b/csci4131/hw6/strap012_hw6/package.json @@ -0,0 +1,14 @@ +{ + "name": "strap012_hw6", + "version": "1.0.0", + "description": "Assignment 6", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "strap012", + "license": "ISC", + "dependencies": { + "express": "^4.17.1" + } +} diff --git a/csci4131/hw6/strap012_hw6/public/welcome.html b/csci4131/hw6/strap012_hw6/public/welcome.html new file mode 100644 index 0000000..50ae883 --- /dev/null +++ b/csci4131/hw6/strap012_hw6/public/welcome.html @@ -0,0 +1,54 @@ + + + + + + + + + + Welcome to Node.js + + + + +
+

Welcome to Express (Node.js)

+

The objective of this assignment is to develop a basic website with:

+

Express which is a Node.js web application framework.

+
+

Following are some useful resources:

+ + + +
+
+ +
+ +
+
+
+ +
+
+
+ + -- cgit v1.2.3