diff --git a/express-server/db-connect/db-connect.js b/express-server/db-connect/db-connect.js index be8b96ee..6d2f9677 100644 --- a/express-server/db-connect/db-connect.js +++ b/express-server/db-connect/db-connect.js @@ -13,12 +13,26 @@ const stringSimilarity = require('string-similarity'); async function updateUser(uid, mid, name, picture, email) { try { await nonQuery('INSERT INTO "User" (username, name, picture, email, message_id) VALUES ($1, $2, $3, $4, $5);', [uid, name, picture, email, mid]); - + return 'done' } catch (error) { console.error(error); + return error } } +async function realUpdateUser(uid, mid, name, picture, email){ + console.log("DBCONNECT UPDATE PIC: ", picture) + try { + await nonQuery('Update "User" set message_id = $1, name = $2, picture = $3, email = $4 WHERE username = $5', [mid, name, picture, email, uid]); + return 'done' + } catch (error){ + console.error(error); + return error + } +} + + + async function getmessageids(sl_id) { try { let members = await query('SELECT row_to_json("User") AS obj FROM "Shoppinglist_member" JOIN "User" USING (username) WHERE sl_id = $1;', [sl_id]); @@ -643,6 +657,10 @@ module.exports = { removeMember, moveDoneItemMan, getUser, +<<<<<<< HEAD getUserDB, deleteDonePurchase +======= + realUpdateUser +>>>>>>> 3ab823a0258758dd48a687eaafed77ee36832b61 } \ No newline at end of file diff --git a/express-server/public/javascripts/user.js b/express-server/public/javascripts/user.js index fc75628b..353dd349 100644 --- a/express-server/public/javascripts/user.js +++ b/express-server/public/javascripts/user.js @@ -9,6 +9,12 @@ var config = { }; firebase.initializeApp(config); +var storage = firebase.storage(); + +var msg = firebase.messaging(); +// import postgres from "./../db-connect/db-connect"; + + var vue = new Vue({ el: '#vue-app', prop: { @@ -16,35 +22,249 @@ var vue = new Vue({ getpic: '' }, data: { - dataPic: '' + dataPic: '', + image: '', + idToken: '', + mid: '', + showUploadButtons: '' + }, methods: { - updateUser(){ - + backToDash(){ + window.location.href = "/"; }, - fotoChoose(){ + fertig() { + if(!this.image){ + this.image = this.dataPic + var currentUser = firebase.auth().currentUser; + var vm = this; + currentUser.getIdToken( /* forceRefresh */ true).then(function (idToken) { + console.log("Vor Replace"); + msg.requestPermission() + .then(function () { + return msg.getToken(); + }) + .then(token => { + console.log("Zugriff auf msg", token, this.name, vm.dataPic); + vm.idToken = idToken; + vm.mid = token; + console.log("IMAGE befor dbuserupdate: ", vm.image) + vm.dbUserUpdate(vm.idToken, name, vm.image, vm.mid); + vm.image = ''; + vm.startGetUser(); + }) + .catch(err => { + console.error("Msg Error: ", err); + vm.idToken = idToken; + vm.mid = ""; + console.log("IMAGE befor dbuserupdate: ", vm.image) + vm.dbUserUpdate(vm.idToken, name, vm.image, vm.mid); + vm.image = ''; + vm.startGetUser(); + }) + + }).catch(function (error) { + console.error("Get id token client error: ", error) + }); + }else{ + console.log("IMAGE befor dbuserupdate: ", this.image) + this.dbUserUpdate(this.idToken, name, this.image, this.mid); + this.image = ''; + this.startGetUser(); + } + }, - getPicUrl(){ + updateUser() { + console.log("updateuser") + var currentUser = firebase.auth().currentUser; + var vm = this; + currentUser.getIdToken( /* forceRefresh */ true).then(function (idToken) { + console.log("Vor Replace"); + msg.requestPermission() + .then(function () { + + return msg.getToken(); + }) + .then(token => { + console.log("Zugriff auf msg", token, this.name, vm.dataPic); + vm.idToken = idToken; + vm.mid = token; + }) + .catch(err => { + console.error("Msg Error: ", err); + vm.idToken = idToken; + vm.mid = ""; + }) + + + }).catch(function (error) { + console.error("Get id token client error: ", error) + }); + this.showUploadButtons = ''; + }, + dbUserUpdate(token, name, pic, mid) { + console.log("dbuserupdate: ", token, "\nname", name, "\npic: ", pic, "\nMId: ", mid) + var vm = this; + var user = firebase.auth().currentUser; + user.updateProfile({ + displayName: name, + photoURL: "https://example.com/jane-q-user/profile.jpg" + }).then(async function () { + + }).catch(function (error) { + console.error(error) + }); + + console.log('Pic for upload: ', vm.image) + + // let req = { + // url: '/userbearbeiten/'+vm.idToken+'/'+name+'/'+vm.dataPic+'/'+vm.mid, + // method: 'POST', + // } + // axios(req).then(response => { + // resolve(response.data.content) + // console.log("POST result: ", response) + // vm.startGetUser(); + // }, response => { + // this.handleEditError(response) + // }) + + + // axios.post('/userbearbeiten/'+vm.idToken+'/'+name+'/'+vm.dataPic+'/'+vm.mid).then(result => { + // console.log("POST result: ", result.data) + // vm.startGetUser(); + // }).catch(err => console.error("Axios error: ", err)); + + + $.ajax({ + type: "POST", + url: '/userbearbeiten', + data: { + token: vm.idToken, + mid: vm.mid, + pic: vm.image, + name: name + }, + success(result) { + console.log("POST result: ", result) + vm.startGetUser(); + }, + error(err) { + console.error("Error: " + err); + } + }); + }, + fotoChoose() { + console.log("fotochoose") + var vm = this; + var currentUser = firebase.auth().currentUser; + var uid = currentUser.uid; + this.dataPic = this.image; + var uploadTask = storage.ref('/').child(uid).putString(this.image, 'data_url', { + contentType: 'image/jpeg' + }); + uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED, // or 'state_changed' + function (snapshot) { + // Get task progress, including the number of bytes uploaded and the total number of bytes to be uploaded + var progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100; + console.log('Upload is ' + progress + '% done'); + switch (snapshot.state) { + case firebase.storage.TaskState.PAUSED: // or 'paused' + console.log('Upload is paused'); + break; + case firebase.storage.TaskState.RUNNING: // or 'running' + console.log('Upload is running'); + break; + } + }, + function (error) { + console.log(error); + }, + function () { + // Upload completed successfully, now we can get the download URL + var downloadURL = uploadTask.snapshot.downloadURL; + if (!downloadURL) { + downloadURL = 'https://firebasestorage.googleapis.com/v0/b/test-667ca.appspot.com/o/' + uid + '?alt=media&token=7e5f49c8-0e1f-4073-be30-5feaa691a770'; + } + console.log("download Url", downloadURL) + vm.image = downloadURL; + vm.updateUser(); + }); + }, + getPicUrl() { return this.picUrl; }, - getUser(uid){ + getUser(uid) { axios.get('/getUser/' + uid).then(result => { name = result.data[0].name; this.dataPic = result.data[0].picture + ""; console.log("Created: ", this.dataPic, name) }).catch(err => console.error(err)); + }, + onFileChange(e) { + var files = e.target.files || e.dataTransfer.files; + if (!files.length) + return; + this.createImage(files[0]); + }, + createImage(file) { + var image = new Image(); + var reader = new FileReader(); + var vm = this; + + reader.onload = (e) => { + + var tempImg = new Image(); + tempImg.src = reader.result; + tempImg.onload = function () { + + var MAX_WIDTH = 350; + var MAX_HEIGHT = 350; + var tempW = tempImg.width; + var tempH = tempImg.height; + if (tempW > tempH) { + if (tempW > MAX_WIDTH) { + tempH *= MAX_WIDTH / tempW; + tempW = MAX_WIDTH; + } + } else { + if (tempH > MAX_HEIGHT) { + tempW *= MAX_HEIGHT / tempH; + tempH = MAX_HEIGHT; + } + } + + var canvas = document.createElement('canvas'); + canvas.width = tempW; + canvas.height = tempH; + var ctx = canvas.getContext("2d"); + ctx.drawImage(this, 0, 0, tempW, tempH); + var dataURL = canvas.toDataURL("image/jpeg"); + + vm.dataPic = dataURL; + vm.image = dataURL; + vm.showUploadButtons = 'true'; + } + }; + reader.readAsDataURL(file); + }, + startGetUser() { + firebase.auth().onAuthStateChanged(user => { + if (user) { + //GetUser + this.getUser(user.uid); + } else { + window.location("/"); + } + }); + }, + removeImage: function (e) { + this.image = ''; + this.startGetUser(); } }, created() { - firebase.auth().onAuthStateChanged(user => { - if (user) { - //GetUser - this.getUser(user.uid); - } else { - window.location("/"); - } - }); - + this.startGetUser(); } }); \ No newline at end of file diff --git a/express-server/routes/index.js b/express-server/routes/index.js index 5ed77065..fe0f6eb7 100644 --- a/express-server/routes/index.js +++ b/express-server/routes/index.js @@ -19,6 +19,27 @@ var firebaseAdmin = admin.initializeApp({ res.status(200).render('user'); }); + router.post('/userbearbeiten', function(req, res, next){ + var mid = req.body.mid; + var token = req.body.token; + var name = req.body.name; + var pic = req.body.pic; + var vm = this; + firebaseAdmin.auth().verifyIdToken(token) + .then(async function (decodedToken) { + console.log("UID: ", decodedToken.uid); + console.log("Name: ", name, ' \nPic: ', pic, ' \nToken: ', token, ' \nMID: ' , mid, "\nDecoded token: ", decodedToken.uid, decodedToken.email); + try { + + res.status(200).send(await postgres.realUpdateUser(decodedToken.uid, mid, name, pic, decodedToken.email)); + } catch (err) { + res.status(400).send(await err); + } + }).catch(async function (error) { + console.error(await error); + }); + + }); router.get('/getuser/:uid', async function(req, res){ try { var sender = await postgres.getUser(req.params.uid); diff --git a/express-server/views/dash.ejs b/express-server/views/dash.ejs index 1cd85e2a..8335a441 100644 --- a/express-server/views/dash.ejs +++ b/express-server/views/dash.ejs @@ -6,8 +6,8 @@ - + @@ -28,9 +28,21 @@ + + + - + +
@@ -60,8 +72,8 @@ -