2019-02-05 03:40:22 +01:00
|
|
|
const express = require('express');
|
|
|
|
|
const router = express.Router();
|
2021-10-05 15:39:44 +02:00
|
|
|
const mongoose = require('mongoose').set('debug', false);
|
2019-02-05 03:40:22 +01:00
|
|
|
const Subscription = mongoose.model('subscribers');
|
|
|
|
|
|
2019-02-13 18:47:58 +01:00
|
|
|
const tools = require('../tools/general');
|
|
|
|
|
|
2021-10-05 15:39:44 +02:00
|
|
|
var {authenticate} = require('../middleware/authenticate');
|
2019-02-12 12:06:25 +01:00
|
|
|
|
|
|
|
|
const isValidSaveRequest = (req, res) => {
|
|
|
|
|
try {
|
|
|
|
|
if (!req.body || !req.body.subs.endpoint) {
|
|
|
|
|
res.status(400);
|
|
|
|
|
res.setHeader('Content-Type', 'application/json');
|
|
|
|
|
res.send(JSON.stringify({
|
|
|
|
|
error: {
|
|
|
|
|
id: 'no-endpoint',
|
2021-10-05 15:39:44 +02:00
|
|
|
message: 'Subscription must have an endpoint',
|
|
|
|
|
},
|
2019-02-12 12:06:25 +01:00
|
|
|
}));
|
2021-10-05 15:39:44 +02:00
|
|
|
return false;
|
2019-02-12 12:06:25 +01:00
|
|
|
}
|
2021-10-05 15:39:44 +02:00
|
|
|
return true;
|
2019-02-12 12:06:25 +01:00
|
|
|
} catch (e) {
|
2021-10-05 15:39:44 +02:00
|
|
|
return false;
|
2019-02-12 12:06:25 +01:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
2019-02-14 19:01:41 +01:00
|
|
|
router.post('/', authenticate, (req, res) => {
|
2019-02-22 10:23:39 +01:00
|
|
|
// console.log('req.body.others', req.body.others);
|
2019-02-12 12:06:25 +01:00
|
|
|
|
|
|
|
|
if (!isValidSaveRequest(req, res)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2019-02-06 18:48:32 +01:00
|
|
|
let subscriptionModel = new Subscription(req.body.subs);
|
2019-02-12 12:06:25 +01:00
|
|
|
subscriptionModel.userId = req.body.others.userId;
|
|
|
|
|
subscriptionModel.access = req.body.others.access;
|
2019-02-14 19:01:41 +01:00
|
|
|
subscriptionModel.browser = req.get('User-Agent');
|
2019-02-12 12:06:25 +01:00
|
|
|
|
|
|
|
|
// Find if already exist
|
2021-10-05 15:39:44 +02:00
|
|
|
Subscription.findOne({
|
|
|
|
|
userId: subscriptionModel.userId,
|
|
|
|
|
access: subscriptionModel.access,
|
|
|
|
|
browser: subscriptionModel.browser,
|
|
|
|
|
}).then(itemsub => {
|
|
|
|
|
return itemsub;
|
|
|
|
|
}).catch(err => {
|
|
|
|
|
// Not found
|
|
|
|
|
return null;
|
|
|
|
|
}).then(myitem => {
|
|
|
|
|
|
|
|
|
|
if (myitem === null) {
|
|
|
|
|
myitem = subscriptionModel;
|
2022-03-08 01:01:20 +01:00
|
|
|
tools.mylogshow('Subscription NOT EXISTED IN DB, so I use this created!')
|
2021-10-05 15:39:44 +02:00
|
|
|
} else {
|
|
|
|
|
myitem.endpoint = subscriptionModel.endpoint;
|
|
|
|
|
myitem.keys = subscriptionModel.keys;
|
2022-07-23 17:48:33 +02:00
|
|
|
myitem.createDate = new Date();
|
2021-10-05 15:39:44 +02:00
|
|
|
}
|
2019-02-06 18:48:32 +01:00
|
|
|
|
2021-10-05 15:39:44 +02:00
|
|
|
return myitem.save((err, subscription) => {
|
|
|
|
|
if (err) {
|
|
|
|
|
console.error(`Error occurred while saving subscription. Err: ${err}`);
|
|
|
|
|
return res.status(500).json({
|
|
|
|
|
error: 'Technical error occurred',
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
// Send 201 - resource created
|
|
|
|
|
// res.status(201).json({ data: 'Subscription saved.' });
|
2019-02-12 12:06:25 +01:00
|
|
|
|
2021-10-28 00:38:10 +02:00
|
|
|
// console.log('New Subscription id=', subscriptionModel.userId);
|
2021-10-05 00:20:12 +02:00
|
|
|
|
2021-10-05 15:39:44 +02:00
|
|
|
// console.log('req.body', req.body)
|
2021-09-22 01:13:41 +02:00
|
|
|
|
2021-10-05 15:39:44 +02:00
|
|
|
if (req.body.options !== null) {
|
|
|
|
|
tools.sendBackNotif(subscription, req.body.options);
|
2019-02-12 12:06:25 +01:00
|
|
|
}
|
2021-10-05 15:39:44 +02:00
|
|
|
return res.send({data: 'Subscription saved.'});
|
|
|
|
|
}
|
2019-02-12 12:06:25 +01:00
|
|
|
});
|
2021-10-05 15:39:44 +02:00
|
|
|
});
|
2019-02-12 12:06:25 +01:00
|
|
|
|
2019-02-05 03:40:22 +01:00
|
|
|
});
|
|
|
|
|
|
2019-02-12 12:06:25 +01:00
|
|
|
router.delete('/del', authenticate, (req, res) => {
|
|
|
|
|
// tools.mylog("TOKENREM = " + req.token);
|
2019-02-14 19:01:41 +01:00
|
|
|
const browser = req.get('User-Agent');
|
2021-10-05 15:39:44 +02:00
|
|
|
Subscription.findOneAndRemove(
|
|
|
|
|
{userId: req.user._id, access: req.access, browser}).then(() => {
|
2019-02-12 12:06:25 +01:00
|
|
|
res.status(200).send();
|
|
|
|
|
}, () => {
|
|
|
|
|
res.status(400).send();
|
|
|
|
|
});
|
|
|
|
|
});
|
2019-02-05 03:40:22 +01:00
|
|
|
|
|
|
|
|
router.get('/', (req, res) => {
|
2019-02-06 18:48:32 +01:00
|
|
|
res.json({
|
2021-10-05 15:39:44 +02:00
|
|
|
data: 'Invalid Request Bad',
|
2019-02-06 18:48:32 +01:00
|
|
|
});
|
2019-02-05 03:40:22 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
module.exports = router;
|