From 5a806b08c202c8db1504a7983a4ea1066921e5be Mon Sep 17 00:00:00 2001 From: Max Hunt Date: Thu, 7 May 2020 13:44:59 +0100 Subject: [PATCH] Update --- functions/index.js | 50 +++++++++++++++++++++++++++++++++ functions/views/css/style.css | 42 +++++++++++++++++++++++++++ functions/views/js/fAuth.js | 50 +++++++++++++++++++++++++++++---- functions/views/js/fdb.js | 29 ++++++++++++++++++- functions/views/my-products.ejs | 7 +++++ server.js | 31 +++++++++++++++++--- 6 files changed, 199 insertions(+), 10 deletions(-) diff --git a/functions/index.js b/functions/index.js index bd47c9f..dc85662 100644 --- a/functions/index.js +++ b/functions/index.js @@ -23,6 +23,14 @@ app.use(express.static('views')) app.set('view engine', 'ejs') app.set('views', __dirname + '/views') +let nodemailer = require('nodemailer') +let transporter = nodemailer.createTransport({ + service: 'gmail', + auth: { + user: 'noreply.projectgg@gmail.com', + pass: 'kynpef-5paqha-xaVxip' + } +}); app.get("/", function(request, responce) { @@ -205,6 +213,7 @@ app.post('/ship-api', function(request, responce){ var productRef = database.ref("/products/"+product) productRef.update({status:"shipped"}) .then(function(){ + processItemShipEmail(product, uid) responce.send({success:true, error:null}) }) .catch(e => {console.log(e)}) @@ -218,6 +227,47 @@ app.post('/ship-api', function(request, responce){ } }) +function processItemShipEmail(itemID, buyerID){ + let productRef = database.ref("/products/"+itemID) + productRef.once('value',function(snapshot){ + let item = snapshot.val() + let itemName = item.name + let itemHolder = item.holder + let usersRef = database.ref("/users") + usersRef.orderByChild("UID").equalTo(itemHolder).once('value', function(snapshot){ + vals = snapshot.val() + var keys = Object.keys(vals) + uData = vals[keys[0]] + let holderEmail = uData.email + let clientRef = database.ref("/users") + usersRef.orderByChild("UID").equalTo(buyerID).once('value', function(snapshot){ + cvals = snapshot.val() + var ckeys = Object.keys(cvals) + cData = cvals[ckeys[0]] + let clientAddress = cData.address + let emailContent = "Please ship Item: " + itemName + " (ItemID: " + itemID + ")\nShipping address: " + clientAddress + sendEmail(holderEmail, emailContent) + }) + }) + }) +} + +function sendEmail(address, content){ + var mailOptions = { + from: 'noreply.projectgg@gmail.com', + to: address, + subject: 'Your Item has been requested', + text: content + } + transporter.sendMail(mailOptions, function(error, info){ + if (error) { + console.log(error); + } else { + console.log('Email sent: ' + info.response); + } + }) +} + app.get('*', function(request, responce){ responce.render('404.ejs') }) diff --git a/functions/views/css/style.css b/functions/views/css/style.css index ed08667..00d2e39 100644 --- a/functions/views/css/style.css +++ b/functions/views/css/style.css @@ -614,4 +614,46 @@ footer a { .e404 svg { width: 100%; +} + +.ship-adress { + height: 50px; + width: 100%; +} + +.ship-adress button { + position: relative; + border: 0; + height: 40px; + width: 350px; + background-color: salmon; + font-family: osl; + font-size: 20px; + left: 50%; + transform: translate(-50%, 0); + transition: 0.3s; + color: white; + box-shadow: 0px 2px 3px #A5A5A5; +} +.ship-adress button:hover { + background-color: pink; + color: black; + transition: 0.1s; +} +.ship-adress button:active { + background-color: white; +} +.ship-adress input { + position: relative; + border: 0; + height: 40px; + width: 600px; + background-color: #EEEEEE; + font-family: osl; + font-size: 20px; + left: 50%; + transform: translate(-50%, 0); + color: black; + box-shadow: 0px 2px 3px #A5A5A5; + padding-left: 10px; } \ No newline at end of file diff --git a/functions/views/js/fAuth.js b/functions/views/js/fAuth.js index b727458..f52c8c1 100644 --- a/functions/views/js/fAuth.js +++ b/functions/views/js/fAuth.js @@ -1,9 +1,20 @@ function checkAuth(){ firebase.auth().onAuthStateChanged(function(user){ if (user) { + document.getElementById('uname-dom').innerHTML = "Loading..." + let database = firebase.database() + var uid = user.uid + var dbRef = database.ref("/users") + dbRef.orderByChild("UID").equalTo(uid).once('value', function(snapshot){ + vals = snapshot.val() + var keys = Object.keys(vals) + uData = vals[keys[0]] + document.getElementById('uname-dom').innerHTML = "Hello, " + uData.fName + }) + document.getElementById('uname-field').setAttribute("style", "display: block;") document.getElementById('login-field').setAttribute("style", "display: none;") - document.getElementById('uname-dom').innerHTML = "Hello, " + user.displayName + document.getElementById('uname-field').setAttribute("style", "display: block;") document.getElementById('login-field').setAttribute("style", "display: none;") try {document.getElementById('uAuthMsg').setAttribute("style", "display: none;")} @@ -23,14 +34,14 @@ function checkAuth(){ }) } -window.onload = function(){ - checkAuth() -} +checkAuth() + function signinwithgoogle(){ var googleAuthProvider = new firebase.auth.GoogleAuthProvider() firebase.auth().signInWithPopup(googleAuthProvider) .then(function(data){ + checkNewUser(data) console.log('User signed in...') }) .catch(function(error){ @@ -38,10 +49,38 @@ function signinwithgoogle(){ }) } +function checkNewUser(credential){ + let database = firebase.database() + var uid = credential.user.uid + var dbRef = database.ref("/users") + dbRef.orderByChild("UID").equalTo(uid).once('value', function(snapshot){ + if (snapshot.exists()){ + let uData = snapshot.val() + console.log(uData) + console.log("Logged in User: " + uData.fName + " " + uData.lName) + } + else { + console.log("Creating new user") + let uData = { + fName:credential.user.displayName, + lName:"", + UID:credential.user.uid, + email:credential.user.email, + address:"" + } + let itemRef = database.ref('/users') + itemRef.push(uData) + .then(function(){console.log("Added "+credential.displayName+" to user database")}) + .catch(function(error){console.log(error)}) + } + }) +} + function signinwithfb(){ var fbAuthProvider = new firebase.auth.FacebookAuthProvider() firebase.auth().signInWithPopup(fbAuthProvider) .then(function(data){ + checkNewUser(data) console.log('User signed in...') }) .catch(function(error){ @@ -59,7 +98,8 @@ function signinwithemail(){ auth.signInWithEmailAndPassword(email, pass) .catch(e => console.log(e.message)) - .then(function(){ + .then(function(data){ + checkNewUser(data) txtPassword.value = '' txtEmail.value = '' }) diff --git a/functions/views/js/fdb.js b/functions/views/js/fdb.js index 4a966a2..17005f1 100644 --- a/functions/views/js/fdb.js +++ b/functions/views/js/fdb.js @@ -282,4 +282,31 @@ function my_products() { window.location.replace("my-products?uToken=" + idToken) }) .catch(e => {console.log(e)}) -} \ No newline at end of file +} + +function showShipField(){ + document.getElementById('shippingaddressbutton').setAttribute("style", "display:none;") + document.getElementById('shippingaddressinput').setAttribute("style", "display:block;") +} + +function addShippingAddress(){ + let database = firebase.database() + var usersRef = database.ref("/users") + usersRef.orderByChild("UID").equalTo(firebase.auth().currentUser.uid).once('value', function(snapshot){ + vals = snapshot.val() + var keys = Object.keys(vals) + userKey = keys[0] + userRef = database.ref("/users/"+userKey) + userRef.update({address:document.getElementById('shippingaddressinput').value}) + .then(document.getElementById("shippingaddressinput").value = "Success!") + .catch(e => {console.log(e)}) + }) +} + +var addressField = document.getElementById("shippingaddressinput") +addressField.addEventListener("keyup", function(event) { + if (event.keyCode === 13) { + event.preventDefault() + addShippingAddress() + } +}); \ No newline at end of file diff --git a/functions/views/my-products.ejs b/functions/views/my-products.ejs index 1caca4e..c094291 100644 --- a/functions/views/my-products.ejs +++ b/functions/views/my-products.ejs @@ -60,6 +60,13 @@
+
+ + +
+ +
+

My products:

diff --git a/server.js b/server.js index 13e3e22..7f65ae3 100644 --- a/server.js +++ b/server.js @@ -219,7 +219,7 @@ app.post('/ship-api', function(request, responce){ var productRef = database.ref("/products/"+product) productRef.update({status:"shipped"}) .then(function(){ - sendEmail("maxdebaoli@gmail.com", "Please ship item "+product) + processItemShipEmail(product, uid) responce.send({success:true, error:null}) }) .catch(e => {console.log(e)}) @@ -233,6 +233,31 @@ app.post('/ship-api', function(request, responce){ } }) +function processItemShipEmail(itemID, buyerID){ + let productRef = database.ref("/products/"+itemID) + productRef.once('value',function(snapshot){ + let item = snapshot.val() + let itemName = item.name + let itemHolder = item.holder + let usersRef = database.ref("/users") + usersRef.orderByChild("UID").equalTo(itemHolder).once('value', function(snapshot){ + vals = snapshot.val() + var keys = Object.keys(vals) + uData = vals[keys[0]] + let holderEmail = uData.email + let clientRef = database.ref("/users") + usersRef.orderByChild("UID").equalTo(buyerID).once('value', function(snapshot){ + cvals = snapshot.val() + var ckeys = Object.keys(cvals) + cData = cvals[ckeys[0]] + let clientAddress = cData.address + let emailContent = "Please ship Item: " + itemName + " (ItemID: " + itemID + ")\nShipping address: " + clientAddress + sendEmail(holderEmail, emailContent) + }) + }) + }) +} + function sendEmail(address, content){ var mailOptions = { from: 'noreply.projectgg@gmail.com', @@ -246,11 +271,9 @@ function sendEmail(address, content){ } else { console.log('Email sent: ' + info.response); } - }); - + }) } - app.get('*', function(request, responce){ responce.render('404.ejs') })