File: //volume1/@appstore/SynologyApplicationService/node_libs/VapidSendServer.js
const webpush = require('/var/packages/SynologyApplicationService/target/node_modules/web-push/src/index');
const net = require('net');
const fs = require('fs');
const SOCK_FILE_PATH = '/var/run/vapid_send_server.sock';
/*
TODO: get public key and private key from daemon
const PUBLIC_KEY_FILE_PATH = '/usr/syno/etc/packages/SynologyApplicationService/vapid/public.key';
const PRIVATE_KEY_FILE_PATH = '/usr/syno/etc/packages/SynologyApplicationService/vapid/private.key';
fs.readFile(PUBLIC_KEY_FILE_PATH, 'utf-8', function (err, publickey) {
if (err) {
}
fs.readFile(PRIVATE_KEY_FILE_PATH, 'utf-8', function (error, privatekey) {
if (error) {
}
webpush.setVapidDetails('mailto:pm@synology.com', publickey, privatekey);
});
});
*/
var unixServer = net.createServer(function(client) {
var buffer = null;
var curLen = -1;
var totalLen = -1;
client.on('data', function(data) {
if (-1 === totalLen) {
totalLen = data.readUInt32BE(0);
curLen = 0;
data = data.slice(4);
buffer = new Buffer(totalLen);
}
var remainLen = totalLen - curLen;
curLen += data.copy(buffer, curLen, 0, remainLen);
data = data.slice(remainLen);
if (curLen === totalLen) {
try {
var obj = JSON.parse(buffer.toString());
webpush.setVapidDetails('mailto:pm@synology.com', obj['publickey'], obj['privatekey']);
const pushSubscription = {
endpoint: obj['endpoint'],
keys: {
auth: obj['auth'],
p256dh: obj['p256dh']
}
};
webpush.sendNotification(pushSubscription, JSON.stringify(obj['data']));
// TODO: error response and handling
} catch (e) {
}
totalLen = -1;
curLen = -1;
buffer = null;
}
});
});
unixServer.listen(SOCK_FILE_PATH);