This commit is contained in:
Max Hunt 2020-05-15 18:24:51 +01:00
parent 5e5adf20a3
commit ab8eaf2698
12 changed files with 404 additions and 241 deletions

View File

@ -1,16 +0,0 @@
[debug] [2020-05-14T19:57:05.341Z] ----------------------------------------------------------------------
[debug] [2020-05-14T19:57:05.343Z] Command: /usr/local/bin/node /usr/local/bin/firebase deploy
[debug] [2020-05-14T19:57:05.343Z] CLI Version: 8.2.0
[debug] [2020-05-14T19:57:05.343Z] Platform: darwin
[debug] [2020-05-14T19:57:05.343Z] Node Version: v12.16.2
[debug] [2020-05-14T19:57:05.344Z] Time: Thu May 14 2020 20:57:05 GMT+0100 (British Summer Time)
[debug] [2020-05-14T19:57:05.344Z] ----------------------------------------------------------------------
[debug] [2020-05-14T19:57:05.344Z]
[debug] [2020-05-14T19:57:05.353Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
[debug] [2020-05-14T19:57:05.354Z] > authorizing via signed-in user
[debug] [2020-05-14T19:57:05.354Z] [iam] checking project project-gg-3b754 for permissions ["cloudfunctions.functions.create","cloudfunctions.functions.delete","cloudfunctions.functions.get","cloudfunctions.functions.list","cloudfunctions.functions.update","cloudfunctions.operations.get","firebase.projects.get","firebasehosting.sites.update"]
[debug] [2020-05-14T19:57:05.356Z] >>> HTTP REQUEST POST https://cloudresourcemanager.googleapis.com/v1/projects/project-gg-3b754:testIamPermissions
{"permissions":["cloudfunctions.functions.create","cloudfunctions.functions.delete","cloudfunctions.functions.get","cloudfunctions.functions.list","cloudfunctions.functions.update","cloudfunctions.operations.get","firebase.projects.get","firebasehosting.sites.update"]}
[debug] [2020-05-14T19:57:06.307Z] <<< HTTP RESPONSE 200 {"content-type":"application/json; charset=UTF-8","vary":"X-Origin, Referer, Origin,Accept-Encoding","date":"Thu, 14 May 2020 19:57:05 GMT","server":"ESF","cache-control":"private","x-xss-protection":"0","x-frame-options":"SAMEORIGIN","x-content-type-options":"nosniff","server-timing":"gfet4t7; dur=669","alt-svc":"h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"","accept-ranges":"none","transfer-encoding":"chunked"}
[debug] [2020-05-14T19:57:06.308Z] >>> HTTP REQUEST POST https://iam.googleapis.com/v1/projects/project-gg-3b754/serviceAccounts/project-gg-3b754@appspot.gserviceaccount.com:testIamPermissions
{"permissions":["iam.serviceAccounts.actAs"]}

View File

@ -48,6 +48,7 @@ function homePage(request, responce) {
if (request.query.itemAdded == "true") {
x = 'block'
}
console.log(data)
responce.render('home.ejs', {products: data, message: x})
})
}
@ -111,7 +112,7 @@ app.get('/my-products', function(request, responce){
}
else {
dbRef.orderByChild('owner').equalTo(uid).once('value', function(snapshot){
var data = {'x': {desc: '', holder: '', id: 999, img: '', location: '', name: 'No products listed 😢', owner: '', price: '', public: '', stock: ''}}
var data = {'x': {holder: '',id: 999,img: '',location: '',name: 'No products listed 😢',owner: '',price: '',stock: ''}}
if (snapshot.val()) {data = snapshot.val()}
responce.render('my-products.ejs', {products: data})
})
@ -120,7 +121,7 @@ app.get('/my-products', function(request, responce){
.catch(function(error) {
console.log(error)
responce.send("<h1>Bad Auth Token</h1><a href='home'>Home</a>")
});
})
}
else {
responce.send("<h1>No Auth Token Provided</h1><a href='home'>Home</a>")
@ -131,7 +132,7 @@ app.get('/my-product', function(request, responce){
if (request.query.uToken && request.query.productid) {
admin.auth().verifyIdToken(request.query.uToken)
.then(async function(decodedToken) {
let uid = decodedToken.uid;
let uid = decodedToken.uid
let pid = request.query.productid
if (await verifyExists(pid)){
if (await verifyOwner(uid, pid)) {
@ -220,6 +221,53 @@ app.get('/product', function(request, responce){
}
})
app.get('/registration', function(request, responce){
responce.render('user-registration.ejs')
})
app.post('/register-new-user-api', async function(request, responce){
let rBody = request.body
if (rBody.authToken && rBody.data.fName && rBody.data.lName && rBody.data.address && rBody.data.pPic) {
let uid = false
decodedToken = await admin.auth().verifyIdToken(rBody.authToken).catch(e=>{console.log(e)})
uid = decodedToken.uid
email = decodedToken.email
if (uid) {
if (await checkUserExists(uid) == false) {
let fName = rBody.data.fName
let lName = rBody.data.lName
let address = rBody.data.address
let pPic = rBody.data.pPic
let uData = {
fName:fName,
lName:lName,
UID:uid,
email:email,
address:address,
pPic:"x"
}
let usersRef = database.ref('/users')
let result = await usersRef.push(uData)
let key = result.key
let imgPath = key + '/' + pPic
let imgRootPath = "/user-img/" + imgPath
let userRef = database.ref('/users/' + key)
userRef.update({pPic:imgPath})
.then(responce.send({success:true, error:null, imgRef:imgRootPath}))
.catch(e=>{
responce.send({success:false, error:e})
})
} else {
responce.send({success:false, error:'user exists'})
}
} else {
responce.send({success:false, error:'invalid auth token'})
}
} else {
responce.send({success:false, error:'invalid data'})
}
})
app.post('/request-api', async function(request, responce){
if (request.body.prodID && request.body.authToken && request.body.usrMsg) {
@ -397,7 +445,7 @@ app.post('/new-product-api', function(request, responce){
let imageName = image.name
let newProductRef = database.ref('/products')
let key = await newProductRef.push(product).then(key => {
newProductRef.push(product).then(key => {
let productKey = key.key
let imgPath = productKey + '/' + imageName
let productRef = database.ref('/products/' + productKey)
@ -478,21 +526,15 @@ async function checkNewUser(user){
let snapshot = await checkUserExists(user.uid)
if (snapshot){
let users = snapshot.val()
var keys = Object.keys(users)
uData = users[keys[0]]
let retData = {success:true, userName:uData.fName + " " + uData.lName, address:uData.address}
let keys = Object.keys(users)
let uData = users[keys[0]]
let uName = uData.fName
let retData = {success:true, registered:true, name:uName}
return retData
}
else {
console.log("Creating new user")
let uData = {
fName:user.displayName,
lName:"",
UID:user.uid,
email:user.email,
address:""
}
return await createNewUser(uData)
let retData = {success:true, registered:false}
return retData
}
}
@ -503,16 +545,6 @@ async function checkUserExists(uid){
else {return false}
}
async function createNewUser(uData){
let userRef = database.ref('/users')
let x = await userRef.push(uData)
return {success:true, userName:uData.fName + " " + uData.lName, address:uData.address}
}
async function authorisedToPurchase(uid, pid){
return true
}
async function verifyExists(pid) {
let productRef = database.ref("/products/"+pid)
let snapshot = await productRef.once('value')

View File

@ -8,26 +8,4 @@
</div>
</main>
<footer>
<div class="links">
<a href="#">Help</a>
<a href="#">Contact</a>
<a href="#">Legal</a>
</div>
<div class="legal">
<a>© GG Sales 2019-2020. All Rights Reserved. </a>
<a class="link" href="#">User Agreement</a>
<a> ,</a>
<a class="link" href="#">Privacy</a>
<a> ,</a>
<a class="link" href="#">Cookies</a>
</div>
<div class="location">
GG Sales US 🇺🇸
</div>
</footer>
<script src="js/fAuth.js"></script>
<script src="js/fdb.js"></script>
</body>
</html>
<%- include("partials/footer") %>

View File

@ -52,7 +52,7 @@
<div class="user-auth-message" id="uAuthMsg" style="display: block;"><p>Please log in to continue</p></div>
<div class="new-product-field" id="npf" style="display: none;">
<div class="new-product-field" id="authField" style="display: none;">
<p>Add product</p>
<div class="npf-short">
<input required autofocus type="text" id="pName" placeholder="Product Name">
@ -80,26 +80,4 @@
</div>
</main>
<footer>
<div class="links">
<a href="#">Help</a>
<a href="#">Contact</a>
<a href="#">Legal</a>
</div>
<div class="legal">
<a>© GG Sales 2019-2020. All Rights Reserved. </a>
<a class="link" href="#">User Agreement</a>
<a> ,</a>
<a class="link" href="#">Privacy</a>
<a> ,</a>
<a class="link" href="#">Cookies</a>
</div>
<div class="location">
GG Sales US 🇺🇸
</div>
</footer>
<script src="js/fAuth.js"></script>
<script src="js/fdb.js"></script>
</body>
</html>
<%- include("partials/footer") %>

View File

@ -197,11 +197,12 @@ footer a {
.notifications {
padding-right: 15px;
color: #898989;
transition: 0.3s;
}
.cart {
color: #898989;
transition: 0.3s;
}
.sbar {
@ -690,3 +691,94 @@ footer a {
box-shadow: 0px 2px 3px #A5A5A5;
padding-left: 10px;
}
.big-box {
height: 35px;
background-color: #d8d8d8d8;
margin-top: 10px;
width: 100%;
}
.sub-page {
width: 85%;
margin: 10px auto;
}
.small-box {
height: 35px;
background-color: #d8d8d8d8;
}
.u-r-title {
font-family: osl;
font-size: 32px;
text-align: center;
margin-top: 20px;
}
.u-r-cols {
display: inline-flex;
}
.u-r-left {
width: 50%;
}
.u-r-subtitle{
font-family: osl;
font-size: 25px;
margin-top: 10px;
margin-bottom: 20px;
}
.u-r-left input{
height: 40px;
display: block;
font-size: 15px;
width: 250px;
padding-left: 10px;
margin: 15px 0;
border-radius: 0;
border: 0.5px solid grey;
}
.u-r-left .u-r-i-location input {
width: 100% !important;
}
.u-r-right {
float: right;
width: 50%;
text-align: end;
}
.u-r-right img{
width: 57%;
}
.u-r-right .u-r-subtitle{
font-family: osl;
font-size: 25px;
margin-top: 10px;
margin-bottom: 10px;
}
.u-r-btn button {
width: 120px;
height: 40px;
border: 0;
display: block;
font-size: 19px;
font-family: osl;
box-shadow: 0px 2px 3px #A5A5A5;
border-radius: 0;
transition: 0.3s;
margin: 10px auto;
background-color: #A2FF9B;
color: #727272;
}
.u-r-btn button:hover {
background-color: rgb(0, 255, 221);
}
.u-r-btn button:active {
background-color: #11FF00;
color: white;
transition: 0.1s;
}

View File

@ -78,26 +78,4 @@
</div>
</main>
<footer>
<div class="links">
<a href="#">Help</a>
<a href="#">Contact</a>
<a href="#">Legal</a>
</div>
<div class="legal">
<a>© GG Sales 2019-2020. All Rights Reserved. </a>
<a class="link" href="#">User Agreement</a>
<a> ,</a>
<a class="link" href="#">Privacy</a>
<a> ,</a>
<a class="link" href="#">Cookies</a>
</div>
<div class="location">
GG Sales US 🇺🇸
</div>
</footer>
<script src="js/fAuth.js"></script>
<script src="js/fdb.js"></script>
</body>
</html>
<%- include("partials/footer") %>

View File

@ -1,7 +1,9 @@
function checkAuth(){
firebase.auth().onAuthStateChanged(function(user){
if (user) {
document.getElementById('uname-dom').innerHTML = "Loading..."
try {document.getElementById('uname-dom').innerHTML = "Loading..."}
catch(error){}
firebase.auth().currentUser.getIdToken().then(function(idToken) {
let url = 'login-user-api'
@ -11,38 +13,49 @@ function checkAuth(){
.then(response => response.json())
.then(function(result){
if (result.success == true) {
document.getElementById('uname-dom').innerHTML = "Hello, " + result.userName
if (!result.address) {
document.getElementsByClassName("notifications")[0].innerHTML = "🔔 | Update shipping address"
document.getElementsByClassName("notifications")[0].setAttribute("style", "color: red;")
if (result.registered) {
document.getElementById('uname-dom').innerHTML = "Hello, " + result.name
} else {
try {
document.getElementById('uname-dom').innerHTML = "Unregistered!"
document.getElementById("notifications").innerHTML = "🔔 | Register your account"
document.getElementById("notifications").setAttribute("href", "registration")
document.getElementById("notifications").setAttribute("style", "color: red;")
}
catch(error){}
if (window.location.href.split('/').pop() != 'registration') {
window.location.replace('registration')
}
}
}
else {
console.log(result.error)
document.getElementsByClassName("notifications")[0].innerHTML = "🔔 | What the fuck just happened....."
document.getElementsByClassName("notifications")[0].setAttribute("style", "color: pink;")
document.getElementById("notifications").innerHTML = "🔔 | What the fuck just happened....."
document.getElementById("notifications").setAttribute("style", "color: pink;")
}
})
})
try {
document.getElementById('uname-field').setAttribute("style", "display: block;")
document.getElementById('login-field').setAttribute("style", "display: none;")
document.getElementById('uname-field').setAttribute("style", "display: block;")
document.getElementById('login-field').setAttribute("style", "display: none;")
document.getElementById('uname-field').setAttribute("style", "display: block;")
document.getElementById('login-field').setAttribute("style", "display: none;")
document.getElementById('uname-field').setAttribute("style", "display: block;")
document.getElementById('login-field').setAttribute("style", "display: none;")
}
catch(error) {}
try {document.getElementById('uAuthMsg').setAttribute("style", "display: none;")}
catch(error) {console.log(error)}
try{document.getElementById('npf').setAttribute("style", "display: block;")}
catch(error) {console.log(error)}
catch(error) {}
try{document.getElementById('authField').setAttribute("style", "display: block;")}
catch(error) {}
}
else {
document.getElementById('uname-field').setAttribute("style", "display: none;")
document.getElementById('login-field').setAttribute("style", "display: block;")
document.getElementById('uname-dom').innerHTML = "Unregistered"
try{document.getElementById('uAuthMsg').setAttribute("style", "display: block;")}
catch(error) {console.log(error)}
try{document.getElementById('npf').setAttribute("style", "display: none;")}
catch(error) {console.log(error)}
catch(error) {}
try{document.getElementById('authField').setAttribute("style", "display: none;")}
catch(error) {}
}
})
}
@ -94,11 +107,13 @@ function signout(){
// window.location.replace(window.location.href.split("?")[0])
}
var pwField = document.getElementById("fpwd");
pwField.addEventListener("keyup", function(event) {
if (event.keyCode === 13) {
event.preventDefault()
document.getElementById("blogin").click()
}
})
try {
var pwField = document.getElementById("fpwd");
pwField.addEventListener("keyup", function(event) {
if (event.keyCode === 13) {
event.preventDefault()
document.getElementById("blogin").click()
}
})
}
catch(error) {}

View File

@ -1,23 +1,5 @@
const toBase64 = file => new Promise((resolve, reject) => {
const reader = new FileReader()
reader.readAsDataURL(file)
reader.onload = () => resolve(reader.result)
reader.onerror = error => reject(error)
})
async function productSubmitEventHandler(){
let newProduct = {
id: 1,
name: "",
desc: "",
img: "default.png",
location: "",
stock: 1,
status: "on-sale",
price: 0,
owner: "",
holder: ""
}
let newProduct = {id: 1,name: "",desc: "",img: "default.png",location: "",stock: 1,status: "on-sale",price: 0,owner: "",holder: ""}
const nameField = document.getElementById('pName')
const descField = document.getElementById('pDesc')
@ -42,7 +24,6 @@ async function productSubmitEventHandler(){
let image = imgBtn.files[0]
imageName = image.name
// imageB64 = await toBase64(image)
let imagePackage = {name:imageName, b64:null}
const submitBtn = document.getElementById('pSend')
@ -83,21 +64,13 @@ function productUpdateEventHandler() {
const stockField = document.getElementById('pStock')
const priceField = document.getElementById('pPrice')
// const imgBtn = document.getElementById('pImg')
const item_id_element = document.getElementById("productID")
const item_id = item_id_element.getAttribute("product_id")
submitBtn.innerHTML = "Updating..."
submitBtn.disabled = true
updates = {
name: nameField.value,
desc: descField.value,
location: locField.value,
stock: stockField.value,
price: priceField.value
}
updates = {name: nameField.value, desc: descField.value, location: locField.value, stock: stockField.value, price: priceField.value}
firebase.auth().currentUser.getIdToken().then(function(idToken){
let url = 'update-product-api'
@ -125,16 +98,21 @@ function productUpdateEventHandler() {
function updateImgs() {
const storage = firebase.storage()
const rootReference = storage.ref('/product-img')
const productImgRef = storage.ref('/product-img')
const profileImgRef = storage.ref('/user-img')
var images = document.getElementsByClassName('dyn-img')
var pImages = document.getElementsByClassName('profile-img')
// console.log(images)
Array.from(images).forEach((image) => {
var pathReference = rootReference.child(image.title)
var pathReference = productImgRef.child(image.title)
pathReference.getDownloadURL().then(function(url) {image.src = url}).catch(e => {console.log(e.message)})
})
Array.from(pImages).forEach((image) => {
var pathReference = profileImgRef.child(image.title)
pathReference.getDownloadURL().then(function(url) {image.src = url}).catch(e => {console.log(e.message)})
})
}
updateImgs()
function requestItem(){
@ -187,7 +165,6 @@ function requestItem(){
}
}
function edit_item() {
firebase.auth().currentUser.getIdToken().then(function(idToken) {
var item_id_element = document.getElementById("productID")
@ -224,7 +201,6 @@ function toggle_sale() {
toggle_sale_btn.innerHTML = "ERROR"
document.getElementById("api-response").innerHTML = "Error: " + result.error
document.getElementById("api-response").setAttribute("style", "display: block")
}
})
.catch (e=>{
@ -271,47 +247,6 @@ function mark_as_sold(){
})
}
function ship_item() {
firebase.auth().currentUser.getIdToken().then(function(idToken) {
var item_id_element = document.getElementById("productID")
var item_id = item_id_element.getAttribute("product_id")
var ship_button = document.getElementById("shipBtn")
const url = 'ship-api'
let data = {
item: item_id,
user: idToken
}
let postData = {
method: 'POST',
body: JSON.stringify(data),
headers: {'Content-Type': 'application/json'}
}
fetch(url, postData)
.then(response => response.json())
.then(function(result){
console.log(result)
if (result.success == true) {
ship_button.setAttribute("style", "background: #00DD00; width:200px;")
ship_button.innerHTML = "Item shipped!"
ship_button.disabled = true
var sell_button = document.getElementById("sellBtn")
var edit_button = document.getElementById("editBtn")
sell_button.disabled = true
edit_button.disabled = true
}
else {
ship_button.setAttribute("style", "background: red;")
ship_button.disabled = true
ship_button.innerHTML = "ERROR"
console.log(result.error)
}
})
})
.catch(e => {console.log(e)})
}
function my_product(productID) {
firebase.auth().currentUser.getIdToken().then(function(idToken) {
window.location.replace("my-product?uToken=" + idToken + '&productid=' + productID)
@ -356,6 +291,58 @@ function search(keywords){
window.location.replace('search?search='+keywords)
}
function u_r_submit(){
let submitBtn = document.getElementById('u-r-btn')
if (submitBtn.innerHTML == "Submit!") {
submitBtn.disabled = true
if (firebase.auth().currentUser) {
firebase.auth().currentUser.getIdToken().then(function(idToken){
let firstNameField = document.getElementById('f-name')
let lastNameField = document.getElementById('l-name')
let addressField = document.getElementById('u-address')
let fName = firstNameField.value
let lName = lastNameField.value
let address = addressField.value
let picName = "todo.png"
let userData = {fName:fName, lName:lName, address:address, pPic:picName}
let url = 'register-new-user-api'
let data = {authToken: idToken, data: userData}
let postData = {method: 'POST', body: JSON.stringify(data), headers: {'Content-Type': 'application/json'}}
fetch(url, postData)
.then(response => response.json())
.then(function(result){
if (result.success) {
submitBtn.setAttribute("style", "background: #00FF00; width: 100%; transition: 0.5s;")
submitBtn.innerHTML = "Success! Go Home..."
submitBtn.disabled = false
}
else {
submitBtn.setAttribute("style", "background: red;")
submitBtn.innerHTML = "ERROR"
submitBtn.disabled = false
document.getElementById("api-response").innerHTML = "Error: " + result.error
document.getElementById("api-response").setAttribute("style", "display: block")
}
})
})
.catch(e=>{
submitBtn.setAttribute("style", "background: red;")
submitBtn.innerHTML = "AUTH!!!"
document.getElementById("api-response").innerHTML = "Error: " + e
document.getElementById("api-response").setAttribute("style", "display: block")
})
} else {
submitBtn.setAttribute("style", "background: red;")
submitBtn.disabled = false
submitBtn.innerHTML = "ERROR!"
document.getElementById("api-response").innerHTML = "Error: Please log in"
document.getElementById("api-response").setAttribute("style", "display: block")
}
} else {
window.location.replace('home')
}
}
try {
var addressField = document.getElementById("shippingaddressinput")
@ -401,3 +388,14 @@ try {
})
}
catch(error) {console.log(error)}
try {
let searchField = document.getElementById("u-address")
searchField.addEventListener("keyup", function(event) {
if (event.keyCode === 13) {
event.preventDefault()
document.getElementById("u-r-btn").click()
}
})
}
catch(error) {console.log(error)}

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

View File

@ -39,10 +39,14 @@
</div>
<div class="user-info">
<div class="notifications">
&#x1F514; | <%= 0%>
<a href="#" id="notifications">
&#x1F514; | <%= 0%>
</a>
</div>
<div class="cart">
&#x1F6d2; | <%= 0%>
<a href="#" id="cart">
&#x1F6d2; | <%= 0%>
</a>
</div>
<div class="add-item">
<a href="additmpage">⊕</a>

View File

@ -0,0 +1,74 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>GG Prototype</title>
<meta name="description" content="GG Prototype Web">
<meta name="author" content="Max">
<link rel="stylesheet" href="css/style.css">
<script src="https://www.gstatic.com/firebasejs/7.14.1/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.14.1/firebase-analytics.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.14.1/firebase-auth.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.14.1/firebase-storage.js"></script>
<script defer src="https://www.gstatic.com/firebasejs/7.14.1/firebase-database.js"></script>
<script src="js/fInit.js"></script>
</head>
<body>
<main>
<div class="page">
<div class="navbar">
<div class="logon-crumbs">
<div id="uname-field" style="display: none;">
<a id="uname-dom" class="user-name" href="javascript:;" onclick="my_products();">Unregistered user</a>
<div class="user-logout">
<a onclick={signout()}>Log out</a>
</div>
</div>
<div id="login-field" style="display: block;">
<input id="fuid" type="text" placeholder="Username">
<input id="fpwd" type="password" placeholder="Password">
<button id="blogin" onclick={signinwithemail()} class="btn-login">&#x27a4;</button>
<button id="blogin_g" onclick={signinwithgoogle()} class="btn-g-login"><img src="media/g_logon.png" class="img-g-login" alt="img"></button>
<button id="blogin_g" onclick={signinwithfb()} class="btn-fb-login"><img src="media/fb_logon.png" class="img-g-login" alt="img"></button>
</div>
</div>
<div class="user-info">
<div class="notifications">
&#x1F514; | <%= 0%>
</div>
<div class="cart">
&#x1F6d2; | <%= 0%>
</div>
</div>
</div>
<div class="user-auth-message" id="uAuthMsg" style="display: block;"><p>Please log in to continue</p></div>
<div class="sub-page" id="authField" style="display: none;">
<div class="small-box"></div>
<div id="api-response" class="error-message" style="display: none;"></div>
<div class="u-r-title">User Registration</div>
<div class="u-r-cols">
<div class="u-r-left">
<div class="u-r-subtitle">About</div>
<input id="f-name" type="text" class="u-r-i-default" placeholder="First Name">
<input id="l-name" type="text" class="u-r-i-default" placeholder="Last Name">
<div class="u-r-subtitle">Location</div>
<div class="u-r-i-location"><input id="u-address" type="text" class="u-r-i-location" placeholder="Address"></div>
</div>
<div class="u-r-right">
<div class="u-r-subtitle">Add a Profile Photo</div>
<img src="media/profile.png" alt="profile Pic">
</div>
</div>
<div class="u-r-btn"><button id="u-r-btn" onclick={u_r_submit()}>Submit!</button></div>
</div>
</div>
</main>
<%- include("partials/footer") %>

View File

@ -219,6 +219,53 @@ app.get('/product', function(request, responce){
}
})
app.get('/registration', function(request, responce){
responce.render('user-registration.ejs')
})
app.post('/register-new-user-api', async function(request, responce){
let rBody = request.body
if (rBody.authToken && rBody.data.fName && rBody.data.lName && rBody.data.address && rBody.data.pPic) {
let uid = false
decodedToken = await admin.auth().verifyIdToken(rBody.authToken).catch(e=>{console.log(e)})
uid = decodedToken.uid
email = decodedToken.email
if (uid) {
if (await checkUserExists(uid) == false) {
let fName = rBody.data.fName
let lName = rBody.data.lName
let address = rBody.data.address
let pPic = rBody.data.pPic
let uData = {
fName:fName,
lName:lName,
UID:uid,
email:email,
address:address,
pPic:"x"
}
let usersRef = database.ref('/users')
let result = await usersRef.push(uData)
let key = result.key
let imgPath = key + '/' + pPic
let imgRootPath = "/user-img/" + imgPath
let userRef = database.ref('/users/' + key)
userRef.update({pPic:imgPath})
.then(responce.send({success:true, error:null, imgRef:imgRootPath}))
.catch(e=>{
responce.send({success:false, error:e})
})
} else {
responce.send({success:false, error:'user exists'})
}
} else {
responce.send({success:false, error:'invalid auth token'})
}
} else {
responce.send({success:false, error:'invalid data'})
}
})
app.post('/request-api', async function(request, responce){
if (request.body.prodID && request.body.authToken && request.body.usrMsg) {
@ -396,7 +443,7 @@ app.post('/new-product-api', function(request, responce){
let imageName = image.name
let newProductRef = database.ref('/products')
let key = await newProductRef.push(product).then(key => {
newProductRef.push(product).then(key => {
let productKey = key.key
let imgPath = productKey + '/' + imageName
let productRef = database.ref('/products/' + productKey)
@ -477,21 +524,15 @@ async function checkNewUser(user){
let snapshot = await checkUserExists(user.uid)
if (snapshot){
let users = snapshot.val()
var keys = Object.keys(users)
uData = users[keys[0]]
let retData = {success:true, userName:uData.fName + " " + uData.lName, address:uData.address}
let keys = Object.keys(users)
let uData = users[keys[0]]
let uName = uData.fName
let retData = {success:true, registered:true, name:uName}
return retData
}
else {
console.log("Creating new user")
let uData = {
fName:user.displayName,
lName:"",
UID:user.uid,
email:user.email,
address:""
}
return await createNewUser(uData)
let retData = {success:true, registered:false}
return retData
}
}
@ -502,17 +543,6 @@ async function checkUserExists(uid){
else {return false}
}
async function createNewUser(uData){
let userRef = database.ref('/users')
let x = await userRef.push(uData)
return {success:true, userName:uData.fName + " " + uData.lName, address:uData.address}
}
async function authorisedToPurchase(uid, pid){
return true
}
async function verifyExists(pid) {
let productRef = database.ref("/products/"+pid)
let snapshot = await productRef.once('value')