From f9f7e656a74a5e110967462990d30bbabf9e30a0 Mon Sep 17 00:00:00 2001 From: Georg Reisinger <43533139+GeorgReisinger@users.noreply.github.com> Date: Thu, 17 Jan 2019 19:56:50 +0100 Subject: [PATCH 1/7] Push v1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wenn /dash aufgerufen wird, wird in der Konsole ein MSG TOKEN ausgegeben, dieser muss kopiert werden. Wenn localhost:7000/push/ aufgerufen wird, bekommt der user dem der MSG TOKEN gehört eine push notification, sollange er den Browser offen hat --- .../public/firebase-messaging-sw.js | 25 +++++++++++++++ express-server/public/javascripts/ajax.js | 4 ++- .../public/javascripts/firebase-app.js | 32 +++++++++++++++++++ express-server/routes/index.js | 31 ++++++++++++++++-- express-server/views/dash.ejs | 2 ++ 5 files changed, 90 insertions(+), 4 deletions(-) create mode 100644 express-server/public/firebase-messaging-sw.js create mode 100644 express-server/public/javascripts/firebase-app.js diff --git a/express-server/public/firebase-messaging-sw.js b/express-server/public/firebase-messaging-sw.js new file mode 100644 index 00000000..a8ace617 --- /dev/null +++ b/express-server/public/firebase-messaging-sw.js @@ -0,0 +1,25 @@ +// Give the service worker access to Firebase Messaging. +// Note that you can only use Firebase Messaging here, other Firebase libraries +// are not available in the service worker. +importScripts('https://www.gstatic.com/firebasejs/4.8.1/firebase-app.js'); +importScripts('https://www.gstatic.com/firebasejs/4.8.1/firebase-messaging.js'); + +// Initialize the Firebase app in the service worker by passing in the +// messagingSenderId. +firebase.initializeApp({ + 'messagingSenderId': 'YOUR-SENDER-ID' +}); + +// Retrieve an instance of Firebase Messaging so that it can handle background +// messages. +const messaging = firebase.messaging(); + + + +messaging.setBackgroundMessageHandler(payload => { + const title = payload.data.title + const options = { + body: payload.data.text + } + return self.registration.showNotification(title, options) +}) \ No newline at end of file diff --git a/express-server/public/javascripts/ajax.js b/express-server/public/javascripts/ajax.js index d542eafb..6d20e964 100644 --- a/express-server/public/javascripts/ajax.js +++ b/express-server/public/javascripts/ajax.js @@ -6,11 +6,13 @@ var config = { projectId: "test-667ca", storageBucket: "test-667ca.appspot.com", messagingSenderId: "221332577314" -}; + }; + firebase.initializeApp(config); + $(document).ready(function() { firebase.auth().onAuthStateChanged(async function(user){if(user){firebase.auth().currentUser.getIdToken(/* forceRefresh */ true).then(function(idtoken) { console.log("/shoppinglistx idtoken:", idtoken); diff --git a/express-server/public/javascripts/firebase-app.js b/express-server/public/javascripts/firebase-app.js new file mode 100644 index 00000000..8c278144 --- /dev/null +++ b/express-server/public/javascripts/firebase-app.js @@ -0,0 +1,32 @@ + +// Initialize Firebase +// const firebaseconfig = { +// apiKey: "AIzaSyCuvwf78cmSDoZ2yS4XxHZhnjUn7yIHYfw", +// authDomain: "test-667ca.firebaseapp.com", +// databaseURL: "https://test-667ca.firebaseio.com", +// projectId: "test-667ca", +// storageBucket: "test-667ca.appspot.com", +// messagingSenderId: "221332577314" +// }; +// firebase.initializeApp(firebaseconfig); + + + +var msg = firebase.messaging(); +msg.requestPermission() +.then(function(){ + console.log("Zugriff auf msg") + return msg.getToken(); +}) +.then(token => { + console.log("MSG TOKEN: ", token) + +}) +.catch(err => { + console.error("Msg Error: ", err) +}) + +msg.onMessage(payload => { + const title = payload.data.title + new Notification(title, { body: payload.data.text}); + }) \ No newline at end of file diff --git a/express-server/routes/index.js b/express-server/routes/index.js index e7938501..152e1771 100644 --- a/express-server/routes/index.js +++ b/express-server/routes/index.js @@ -27,6 +27,29 @@ var firebaseAdmin = admin.initializeApp({ databaseURL: 'https://test-667ca.firebaseio.com' }); +//Push +router.get('/push/:msgtoken', function (req, res, next) { + var message = { + data: { + title: 'Nachricht', + text: 'Die Einkaufsliste wurde geupdated' + } + }; + + const token = req.params.msgtoken + firebaseAdmin.messaging().sendToDevice(token, message) + .then(function(response) { + // See the MessagingDevicesResponse reference documentation for + // the contents of response. + console.log('Successfully sent message:', response); + }) + .catch(function(error) { + console.log('Error sending message:', error); + }); + + +}); + // Login und Dash router.get('/', function(req, res, next) { @@ -35,8 +58,8 @@ router.get('/', function(req, res, next) { router.get('/dash/:idtoken', function(req, res, next) { - - var token = req.params.idtoken; + // const msgtoken = req.params.msgtoken; + const token = req.params.idtoken; var uid; firebaseAdmin.auth().verifyIdToken(token) .then(function(decodedToken) { @@ -48,7 +71,9 @@ router.get('/dash/:idtoken', function(req, res, next) { }).catch(function(error) { console.log(error) }); - + + + res.render('dash'); }); diff --git a/express-server/views/dash.ejs b/express-server/views/dash.ejs index 52c499d0..88069439 100644 --- a/express-server/views/dash.ejs +++ b/express-server/views/dash.ejs @@ -6,6 +6,7 @@ + @@ -112,5 +113,6 @@ + \ No newline at end of file From faf16fb1c35ca8b63e611cb97b04e49aa5965269 Mon Sep 17 00:00:00 2001 From: Georg Reisinger <43533139+GeorgReisinger@users.noreply.github.com> Date: Thu, 17 Jan 2019 20:02:26 +0100 Subject: [PATCH 2/7] Push v2 Push geht jetzt auch wenn das Tab von SmartShopper nicht im Vordergrund ist --- express-server/public/firebase-messaging-sw.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/express-server/public/firebase-messaging-sw.js b/express-server/public/firebase-messaging-sw.js index a8ace617..9225721b 100644 --- a/express-server/public/firebase-messaging-sw.js +++ b/express-server/public/firebase-messaging-sw.js @@ -17,9 +17,11 @@ const messaging = firebase.messaging(); messaging.setBackgroundMessageHandler(payload => { + // const title = payload.data.title + // const options = { + // body: payload.data.text + // } + // return self.registration.showNotification(title, options) const title = payload.data.title - const options = { - body: payload.data.text - } - return self.registration.showNotification(title, options) + new Notification(title, { body: payload.data.text}); }) \ No newline at end of file From a150e078a1f7cb42dea36a8945ee7aa2bc2c9502 Mon Sep 17 00:00:00 2001 From: Georg Reisinger <43533139+GeorgReisinger@users.noreply.github.com> Date: Thu, 17 Jan 2019 20:20:20 +0100 Subject: [PATCH 3/7] Push v3 sendPush(MSGTOKEN, title, text) um eine push vom server zu senden --- express-server/routes/index.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/express-server/routes/index.js b/express-server/routes/index.js index 152e1771..0ca9d392 100644 --- a/express-server/routes/index.js +++ b/express-server/routes/index.js @@ -27,17 +27,15 @@ var firebaseAdmin = admin.initializeApp({ databaseURL: 'https://test-667ca.firebaseio.com' }); -//Push -router.get('/push/:msgtoken', function (req, res, next) { +function sendPush(msgtoken, title, text){ var message = { data: { - title: 'Nachricht', - text: 'Die Einkaufsliste wurde geupdated' + title: title, + text: text } }; - const token = req.params.msgtoken - firebaseAdmin.messaging().sendToDevice(token, message) + firebaseAdmin.messaging().sendToDevice(msgtoken, message) .then(function(response) { // See the MessagingDevicesResponse reference documentation for // the contents of response. @@ -47,6 +45,12 @@ router.get('/push/:msgtoken', function (req, res, next) { console.log('Error sending message:', error); }); +} + +//Push +router.get('/push/:msgtoken', function (req, res, next) { + sendPush(req.params.msgtoken, "Update", "Einkaufsliste wurde geändert") + res.status(200) }); @@ -151,6 +155,7 @@ router.post("/shoppinglist", async function(req, res, next) { try { res.status(200).send(await postgres.newShoppinglist(req.body.name, req.body.description, uid, req.body.color)); + sendPush("enG4tJ6LyyU:APA91bEYjUEs7Sdzvu2ivgfqtpzlg42BZLlujDSRg0WLBvfZ_oD4V7cTx2o6MVr4oAdeHaK0wttPMQ85GMMOkgM7xvbHFcwXUG4MCr8JXX16S-OV2CS4ikQ286DOHPtBotbM7pqFTvIM", "Einkaufsliste " + req.body.name + " wurde erstellt!", req.body.description) } catch(err) { From 1ab12fc746041b5a52ce15ab6f6c4e8b85b93ecd Mon Sep 17 00:00:00 2001 From: Georg Reisinger <43533139+GeorgReisinger@users.noreply.github.com> Date: Thu, 17 Jan 2019 20:44:28 +0100 Subject: [PATCH 4/7] Push, Firebase MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Push jetzt auch bei delete Firebase Username ist jetzt die Überschrift von der Shoppinglist --- express-server/public/javascripts/ajax.js | 6 ++++-- express-server/routes/index.js | 6 +----- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/express-server/public/javascripts/ajax.js b/express-server/public/javascripts/ajax.js index 6d20e964..ecb90118 100644 --- a/express-server/public/javascripts/ajax.js +++ b/express-server/public/javascripts/ajax.js @@ -111,6 +111,9 @@ function eigeneEinkaufslisten(){ success(res){ firebase.auth().onAuthStateChanged(async function(user){if(user){firebase.auth().currentUser.getIdToken(/* forceRefresh */ true).then(function(idtoken) { console.log("/userinfo_json idtoken: ",idtoken) + // user = firebase.auth().currentUser; + var userinfo = user.displayName; + console.log(userinfo); $.ajax({ type: "GET", url: "/userinfo_json", @@ -118,8 +121,7 @@ function eigeneEinkaufslisten(){ idtoken: idtoken }, success(data){ - let userinfo = "jhsbdjhf"; - // console.log(userinfo); + for(let i = 0; i < res.length; i++){ const el = res[i]; diff --git a/express-server/routes/index.js b/express-server/routes/index.js index 0ca9d392..6f6e10c8 100644 --- a/express-server/routes/index.js +++ b/express-server/routes/index.js @@ -82,11 +82,6 @@ router.get('/dash/:idtoken', function(req, res, next) { res.render('dash'); }); -router.get('/logout', (req, res, next) => { - - -}); - // SmartShopper @@ -192,6 +187,7 @@ router.get("/shoppinglist_json/:sl_id", async (req, res) => { router.delete("/shoppinglist", async (req, res) => { try { res.status(200).send(await postgres.deleteShoppinglist(req.body.sl_id)); + sendPush("enG4tJ6LyyU:APA91bEYjUEs7Sdzvu2ivgfqtpzlg42BZLlujDSRg0WLBvfZ_oD4V7cTx2o6MVr4oAdeHaK0wttPMQ85GMMOkgM7xvbHFcwXUG4MCr8JXX16S-OV2CS4ikQ286DOHPtBotbM7pqFTvIM", "Die Einkaufsliste " + req.body.sl_id + " wurde gelöscht!", "Einkaufsliste wurde geändert") } catch(err) { From 2d3bd9c92f6f51de976e28eec63429c6678fb692 Mon Sep 17 00:00:00 2001 From: Georg Reisinger <43533139+GeorgReisinger@users.noreply.github.com> Date: Thu, 17 Jan 2019 20:47:05 +0100 Subject: [PATCH 5/7] Username update --- express-server/public/javascripts/ajax.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/express-server/public/javascripts/ajax.js b/express-server/public/javascripts/ajax.js index ecb90118..abaa3f82 100644 --- a/express-server/public/javascripts/ajax.js +++ b/express-server/public/javascripts/ajax.js @@ -110,10 +110,7 @@ function eigeneEinkaufslisten(){ }, success(res){ firebase.auth().onAuthStateChanged(async function(user){if(user){firebase.auth().currentUser.getIdToken(/* forceRefresh */ true).then(function(idtoken) { - console.log("/userinfo_json idtoken: ",idtoken) - // user = firebase.auth().currentUser; - var userinfo = user.displayName; - console.log(userinfo); + console.log("/userinfo_json idtoken: ",idtoken) $.ajax({ type: "GET", url: "/userinfo_json", @@ -121,7 +118,7 @@ function eigeneEinkaufslisten(){ idtoken: idtoken }, success(data){ - + var userinfo = data.name; for(let i = 0; i < res.length; i++){ const el = res[i]; From b7384c96befbff09f715e7ed3ab7d83753d88d84 Mon Sep 17 00:00:00 2001 From: Georg Reisinger <43533139+GeorgReisinger@users.noreply.github.com> Date: Thu, 17 Jan 2019 20:51:44 +0100 Subject: [PATCH 6/7] Userbild --- express-server/public/javascripts/ajax.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/express-server/public/javascripts/ajax.js b/express-server/public/javascripts/ajax.js index abaa3f82..1226f3e2 100644 --- a/express-server/public/javascripts/ajax.js +++ b/express-server/public/javascripts/ajax.js @@ -118,15 +118,18 @@ function eigeneEinkaufslisten(){ idtoken: idtoken }, success(data){ - var userinfo = data.name; - + const userinfo = data.name; + const picture = data.picture; + console.log(data) for(let i = 0; i < res.length; i++){ const el = res[i]; $(".listen-ausgabe").append(`
- ${userinfo} + + Avatar + ${userinfo} From 78a6106ad66703391ded7c8d74fe43743a05d4c1 Mon Sep 17 00:00:00 2001 From: Georg Reisinger <43533139+GeorgReisinger@users.noreply.github.com> Date: Thu, 17 Jan 2019 21:36:12 +0100 Subject: [PATCH 7/7] =?UTF-8?q?Zur=C3=BCck=20Button,=20Icon=20Change?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Zurück Button in Shoppinglist. Wegen einem Error hab ich den add Item knopf auskommentiert --- express-server/public/javascripts/ajax.js | 25 +++++++++++++++++++++-- express-server/views/dash.ejs | 5 ++--- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/express-server/public/javascripts/ajax.js b/express-server/public/javascripts/ajax.js index 1226f3e2..e759e10c 100644 --- a/express-server/public/javascripts/ajax.js +++ b/express-server/public/javascripts/ajax.js @@ -130,7 +130,7 @@ function eigeneEinkaufslisten(){ Avatar ${userinfo} - +
@@ -250,7 +250,28 @@ function Detail(){ const neu = result.filter(obj => obj.sl_id === id); - $(".card-header").append(`

${neu[0].name}

+ var link = "/dash/"+idtoken; + + //ITEM ADD + // von Card Header Kopiert + + // + // + // + + $(".card-header").append(` + + + + + + +

+ ${neu[0].name} +

+ + + `); for (let i = 0; i < res.length; i++) { const el = res[i]; diff --git a/express-server/views/dash.ejs b/express-server/views/dash.ejs index 88069439..f187b070 100644 --- a/express-server/views/dash.ejs +++ b/express-server/views/dash.ejs @@ -41,11 +41,10 @@
-
+
-
-

+