Update
This commit is contained in:
parent
5e5adf20a3
commit
ab8eaf2698
@ -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"]}
|
||||
@ -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')
|
||||
|
||||
@ -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") %>
|
||||
@ -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") %>
|
||||
@ -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;
|
||||
}
|
||||
@ -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") %>
|
||||
@ -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) {}
|
||||
|
||||
@ -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)}
|
||||
BIN
functions/views/media/profile.png
Normal file
BIN
functions/views/media/profile.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 40 KiB |
@ -39,10 +39,14 @@
|
||||
</div>
|
||||
<div class="user-info">
|
||||
<div class="notifications">
|
||||
🔔 | <%= 0%>
|
||||
<a href="#" id="notifications">
|
||||
🔔 | <%= 0%>
|
||||
</a>
|
||||
</div>
|
||||
<div class="cart">
|
||||
🛒 | <%= 0%>
|
||||
<a href="#" id="cart">
|
||||
🛒 | <%= 0%>
|
||||
</a>
|
||||
</div>
|
||||
<div class="add-item">
|
||||
<a href="additmpage">⊕</a>
|
||||
|
||||
74
functions/views/user-registration.ejs
Normal file
74
functions/views/user-registration.ejs
Normal 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">➤</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">
|
||||
🔔 | <%= 0%>
|
||||
</div>
|
||||
<div class="cart">
|
||||
🛒 | <%= 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") %>
|
||||
78
server.js
78
server.js
@ -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')
|
||||
|
||||
Loading…
Reference in New Issue
Block a user