Fixed WebPush Notification error subscription

This commit is contained in:
Paolo Arena
2021-10-05 15:39:44 +02:00
parent 3d7471f2d2
commit 87739a5847
3 changed files with 669 additions and 469 deletions

View File

@@ -1,6 +1,6 @@
const express = require('express'); const express = require('express');
const router = express.Router(); const router = express.Router();
const mongoose = require('mongoose').set('debug', false) const mongoose = require('mongoose').set('debug', false);
const Subscription = mongoose.model('subscribers'); const Subscription = mongoose.model('subscribers');
const tools = require('../tools/general'); const tools = require('../tools/general');
@@ -15,14 +15,14 @@ const isValidSaveRequest = (req, res) => {
res.send(JSON.stringify({ res.send(JSON.stringify({
error: { error: {
id: 'no-endpoint', id: 'no-endpoint',
message: 'Subscription must have an endpoint' message: 'Subscription must have an endpoint',
} },
})); }));
return false return false;
} }
return true return true;
} catch (e) { } catch (e) {
return false return false;
} }
}; };
@@ -39,65 +39,63 @@ router.post('/', authenticate, (req, res) => {
subscriptionModel.browser = req.get('User-Agent'); subscriptionModel.browser = req.get('User-Agent');
// Find if already exist // Find if already exist
Subscription.findOne( {userId: subscriptionModel.userId, access: subscriptionModel.access, browser: subscriptionModel.browser}) Subscription.findOne({
.then(itemsub => { userId: subscriptionModel.userId,
return itemsub access: subscriptionModel.access,
}) browser: subscriptionModel.browser,
.catch(err => { }).then(itemsub => {
return itemsub;
}).catch(err => {
// Not found // Not found
return null return null;
}) }).then(myitem => {
.then(myitem => {
if (myitem === null) { if (myitem === null) {
myitem = subscriptionModel; myitem = subscriptionModel;
tools.mylogshow('Subscription NOT EXISTED IN DB, so I use this created!', myitem) tools.mylogshow('Subscription NOT EXISTED IN DB, so I use this created!', myitem)
} else {
myitem.endpoint = subscriptionModel.endpoint;
myitem.keys = subscriptionModel.keys;
} }
// else return myitem.save((err, subscription) => {
// tools.mylogshow('Subscription already Existed!');
myitem.save((err, subscription) => {
if (err) { if (err) {
console.error(`Error occurred while saving subscription. Err: ${err}`); console.error(`Error occurred while saving subscription. Err: ${err}`);
res.status(500).json({ return res.status(500).json({
error: 'Technical error occurred' error: 'Technical error occurred',
}); });
} else { } else {
// Send 201 - resource created // Send 201 - resource created
// res.status(201).json({ data: 'Subscription saved.' }); // res.status(201).json({ data: 'Subscription saved.' });
res.send({ data: 'Subscription saved.' });
console.log('New Subscription id=', subscriptionModel.userId); console.log('New Subscription id=', subscriptionModel.userId);
// console.log('req.body', req.body) // console.log('req.body', req.body)
if (req.body.options !== null) { if (req.body.options !== null) {
tools.sendBackNotif(subscription, req.body.options) tools.sendBackNotif(subscription, req.body.options);
} }
return res.send({data: 'Subscription saved.'});
} }
}); });
}); });
}); });
router.delete('/del', authenticate, (req, res) => { router.delete('/del', authenticate, (req, res) => {
// tools.mylog("TOKENREM = " + req.token); // tools.mylog("TOKENREM = " + req.token);
const browser = req.get('User-Agent'); const browser = req.get('User-Agent');
Subscription.findOneAndRemove( { userId: req.user._id, access: req.access, browser } ).then(() => { Subscription.findOneAndRemove(
{userId: req.user._id, access: req.access, browser}).then(() => {
res.status(200).send(); res.status(200).send();
}, () => { }, () => {
res.status(400).send(); res.status(400).send();
}); });
}); });
router.get('/', (req, res) => { router.get('/', (req, res) => {
res.json({ res.json({
data: 'Invalid Request Bad' data: 'Invalid Request Bad',
}); });
}); });

View File

@@ -352,7 +352,7 @@ router.post('/login', (req, res) => {
.then(user => { .then(user => {
if (user) { if (user) {
return user.generateAuthToken(req).then((token) => { return user.generateAuthToken(req).then((token) => {
var usertosend = User(); var usertosend = new User();
shared_consts.fieldsUserToChange().forEach((field) => { shared_consts.fieldsUserToChange().forEach((field) => {
usertosend[field] = user[field] usertosend[field] = user[field]

File diff suppressed because it is too large Load Diff