UIAngular/Server/src/routes/api/share.js

176 lines
6.5 KiB
JavaScript

var express = require('express');
var router = express.Router();
var dbSermons = require('../../database/sermons');
var dbEvents = require('../../database/events');
const calendarImageUrl = '/api2/cim/';
const eventUrl = '/api2/share/e';
const sermonImageUrl = '/assets/images/facebookplay.png';
const sermonUrl = '/api2/share/s';
router.get("/:shareCode",function(req,res){
var fullUrl = req.protocol + '://' + req.hostname + req.originalUrl;
console.log("Full");
console.log(fullUrl);
var sharecode = req.params.shareCode;
var type = sharecode.substring(0,1);
var param = sharecode.substring(1);
console.log("type: " + type + "; param: " + param);
switch(type){
case "s":
return getSermon(req, res, param);
case "e":
return getEvent(req,res,param);
}
});
function getSermon(req, res, id){
console.log(req.headers);
var userAgent = req.headers['user-agent'];
var userAgentOverride = req.headers['user-agent-override'];
var referrer = req.headers['referer'] || "";
userAgent = userAgentOverride || userAgent;
if (userAgent.startsWith('facebookexternalhit/1.1') ||
userAgent === 'Facebot' ||
userAgent.startsWith('Twitterbot') ||
referrer.startsWith('http://opengraphcheck.com')) {
getSermonMeta(req, res, id);
} else {
var url = req.protocol + "://" + req.hostname + "/sermons/" + id;
res.redirect(url);
}
}
function getSermonMeta(req, res, id){
dbSermons.getSermon(id,function(error,sermon){
if (error){
res.status(404).json({"status":404,"message":"Error processing request"});
return;
}
if (sermon == null){
res.status(404).json({"status":404,"message":"Sermon does not exist"});
return;
}
var port = req.socket.localPort;
var imageUrl = req.protocol + "://" + req.hostname + sermonImageUrl;
var srmnUrl = req.protocol + "://" + req.hostname + sermonUrl + sermon.id;
var result = `<html>
<head>
<title>Old Fashion Baptist Church</title>
<!-- You can use Open Graph tags to customize link previews.
Learn more: https://developers.facebook.com/docs/sharing/webmasters -->
<meta property="og:url" content="`+ srmnUrl +`"/>
<meta property="og:type" content="website" />
<meta property="og:title" content="` + sermon.title + `" />
<meta property="og:description" content="` + sermon.description + `" />
<meta property="og:image" content="` + imageUrl + `" />
<meta property="og:image:width" content="200" />
<meta property="og:image:height" content="200" />
</head>
<body>
</body>
</html>`;
res.set('Content-Type', 'text/html');
res.send(new Buffer(result));
});
}
function getEvent(req, res, id){
var userAgent = req.headers['user-agent'];
var userAgentOverride = req.headers['user-agent-override'];
var referrer = req.headers['referer'] || "";
userAgent = userAgentOverride || userAgent;
if (userAgent.startsWith('facebookexternalhit/1.1') ||
userAgent === 'Facebot' ||
userAgent.startsWith('Twitterbot' ||
referrer.startsWith('http://opengraphcheck.com'))) {
getEventMeta(req, res, id);
} else {
var url = req.protocol + "://" + req.hostname + "/events/" + id;
res.redirect(url);
}
}
function getEventMeta(req, res, id){
dbEvents.getEvent(id,function(error,event){
if (error){
res.status(404).json({"status":404,"message":"Error processing request"});
return;
}
if (event == null){
res.status(404).json({"status":404,"message":"Event does not exist"});
return;
}
console.log("Start");
console.log(event.startDate.toString());
console.log(event.startDate.getTimezoneOffset());
var monthNum = event.startDate.getMonth();
var monthName = MONTHS_FULL[monthNum];
var day = event.startDate.getDate();
var year = event.startDate.getYear();
var hour = event.startDate.getHours();
var minutes = event.startDate.getMinutes();
var time = event.startDate.getTime();
var utc = event.startDate.getTime() + (event.startDate.getTimezoneOffset() * 60000);
//mountain time zone offset
var nd = new Date(utc + (3600000*-6));
var port = req.socket.localPort;
var imageUrl = req.protocol + "://" + req.hostname + calendarImageUrl + monthName + "/" + day;
var evntUrl = req.protocol + "://" + req.hostname + eventUrl + event.id;
var result = `<html>
<head>
<title>Old Fashion Baptist Church</title>
<!-- You can use Open Graph tags to customize link previews.
Learn more: https://developers.facebook.com/docs/sharing/webmasters -->
<meta property="og:url" content="`+ evntUrl +`"/>
<meta property="og:type" content="website" />
<meta property="og:title" content="` + event.title + `" />
<meta property="og:description" content="` + dateToString(nd) + ` | ` + event.description + `" />
<meta property="og:image" content="` + imageUrl + `"/>
<meta property="og:image:width" content="200" />
<meta property="og:image:height" content="200" />
</head>
<body>
</body>
</html>`;
res.set('Content-Type', 'text/html');
res.send(new Buffer(result));
});
}
function dateToString(dte){
var val = dte.toLocaleString([],{ day: 'numeric', month: 'numeric', year: 'numeric', hour: 'numeric', minute:'2-digit'});
console.log(val);
return val;
}
const MONTHS_FULL = {
0: "JANUARY",
1: "FEBRUARY",
2: "MARCH",
3: "APRIL",
4: "MAY",
5: "JUNE",
6: "JULY",
7: "AUGUST",
8: "SEPTEMBER",
9: "OCTOBER",
10: "NOVEMBER",
11: "DECEMBER"
};
module.exports = router;