Files
freeplanet_serverside/src/server/router/subscribe_router.js

104 lines
2.8 KiB
JavaScript
Raw Normal View History

2019-02-05 03:40:22 +01:00
const express = require('express');
const router = express.Router();
const mongoose = require('mongoose').set('debug', process.env.DEBUG);
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');
var {authenticate} = require('../middleware/authenticate');
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',
message: 'Subscription must have an endpoint',
},
}));
return false;
}
return true;
} catch (e) {
return false;
}
};
router.post('/', authenticate, async (req, res) => {
// console.log('req.body.others', req.body.others);
if (!isValidSaveRequest(req, res)) {
return;
}
2019-02-06 18:48:32 +01:00
let subscriptionModel = new Subscription(req.body.subs);
subscriptionModel.userId = req.body.others.userId;
subscriptionModel.access = req.body.others.access;
subscriptionModel.browser = req.get('User-Agent');
// Find if already exist
await Subscription.findOne({
userId: subscriptionModel.userId,
access: subscriptionModel.access,
browser: subscriptionModel.browser,
}).then(itemsub => {
return itemsub;
}).catch(err => {
// Not found
return null;
}).then(async (myitem) => {
if (myitem === null) {
myitem = subscriptionModel;
tools.mylogshow('Subscription NOT EXISTED IN DB, so I use this created!')
} else {
myitem.endpoint = subscriptionModel.endpoint;
myitem.keys = subscriptionModel.keys;
myitem.createDate = new Date();
}
2019-02-06 18:48:32 +01:00
return await 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.' });
2021-10-28 00:38:10 +02:00
// console.log('New Subscription id=', subscriptionModel.userId);
// console.log('req.body', req.body)
if (req.body.options !== null) {
tools.sendBackNotif(subscription, req.body.options);
}
return res.send({data: 'Subscription saved.'});
}
});
});
2019-02-05 03:40:22 +01:00
});
router.delete('/del', authenticate, (req, res) => {
// tools.mylog("TOKENREM = " + req.token);
const browser = req.get('User-Agent');
Subscription.findOneAndRemove(
{userId: req.user._id, access: req.access, browser}).then(() => {
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({
data: 'Invalid Request Bad',
2019-02-06 18:48:32 +01:00
});
2019-02-05 03:40:22 +01:00
});
module.exports = router;