-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathnotifications.js
63 lines (54 loc) · 1.88 KB
/
notifications.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
var express = require('express');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const jwt = require('jsonwebtoken');
const Notifications = require('../models/notifications');
const config = require('../config/config');
const authenticate = require('../authenticate');
const webpush = require("web-push");
const vapidKeys = {
privateKey: config.privateVapidKey,
publicKey: config.publicVapidKey
};
webpush.setVapidDetails("mailto:destructerdavid@gmail.com", vapidKeys.publicKey, vapidKeys.privateKey);
var router = express.Router();
router.use(bodyParser.json());
router.post('/subscription', authenticate.verifyUser, (req, res, next) => {
const subscriptionRequest = req.body;
const userId = req.user._id;
Notifications.create({userId: userId, subscription: subscriptionRequest})
.then((subscription) => {
console.log("Subscribed Successfully");
res.statusCode = 201;
res.setHeader('Content-Type', 'application/json');
res.json({message: "Subscribed Successfully"});
}, (err) => next(err)).catch((err) => next(err));
});
router.post('/subscription/:id', (req, res, next) => {
const userId = req.params.id;
Notifications.find({userId: userId})
.then((subscriptions) => {
if (!subscriptions) {
return res.status(202).json({});
}
subscriptions.map(subscription => {
console.log(subscription);
webpush
.sendNotification(
subscription.subscription,
JSON.stringify({
title: req.body.title,
image: req.body.image,
url: req.body.url,
text: req.body.text,
tag: req.body.tag,
})
)
.catch(err => {
console.log(err);
});
});
res.status(202).json({message: "Push Notification received Successfully"});
}, (err) => next(err)).catch((err) => next(err));
});
module.exports = router;