Skip to content

Commit

Permalink
Merge pull request #2 from jsbrn/dev
Browse files Browse the repository at this point in the history
Merge dev into master
  • Loading branch information
jsbrn authored Dec 8, 2019
2 parents 7f3fdab + 725b32c commit 688ce3d
Show file tree
Hide file tree
Showing 16 changed files with 261 additions and 56 deletions.
2 changes: 1 addition & 1 deletion app/validator.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ function isValidPhone(number) {
}

function findOnPage(needle, url, callback) {

const agent = new https.Agent({
rejectUnauthorized: false
});
Expand Down
149 changes: 109 additions & 40 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ const cleanup = require('./app/cleanup.js');
const utilities = require('./app/utilities.js');
const mailer = require('./app/mailer.js');
const validator = require('./app/validator.js');
const moment = require('moment');

/*Set the Handlebars options, including the Helpers*/
app.engine('.hbs', exphbs({
Expand All @@ -29,10 +30,18 @@ app.use('/scripts',express.static(path.join(__dirname, 'views/assets/scripts')))

/*HTTP REQUEST HANDLERS*/

//post all requests to the console
//post all requests to the console or redirect if maintenance
app.all("*", (request, response, next) => {
console.log(request.method, request.url, request.params, request.query, request.body);
next();
if (process.env.MAINTENANCE=="true") {
response.render("maintenance", {
layout: "noheader.hbs",
message: process.env.MESSAGE,
submessage: process.env.SUBMESSAGE
})
} else {
next();
}
});

app.get('/', (request, response, next) => {
Expand Down Expand Up @@ -65,39 +74,33 @@ app.get('/', (request, response, next) => {

app.get('/referral/:url', (request, response, next) => {

database.get("codes", {url: request.params.url}, {}, 1, function (results) {
if (results.length == 0) { next(); return; } //404
var code = results[0];
database.get("codes", {url: request.params.url}, {}, 1, function (matching_codes) {
if (matching_codes.length == 0) { next(); return; } //404
var code = matching_codes[0];
database.get("carriers", {id: code.carrier}, {}, -1, (carriers) => {
if (carriers.length == 0) { next(); return; }
var selectedCarrier = carriers[0];
validator.findOnPage(selectedCarrier.activation_needle, selectedCarrier.activation_url.replace("{{code}}", code.value), (validator_results) => {
mailer.sendRaw(
process.env.ADMIN_EMAIL,
"["+process.env.MONGODB_DATABASE+"] PMReferral code viewed",
code.value+" ("+selectedCarrier.name+"): " + JSON.stringify(validator_results),
(info) => {
if (validator_results.error || !validator_results.valid) {
database.remove("codes", {url: request.params.url, carrier: code.carrier}, (results) => {
mailer.sendRaw(
process.env.ADMIN_EMAIL,
"["+process.env.MONGODB_DATABASE+"] PMReferral code deleted",
code.value+" ("+selectedCarrier.name+"): " + JSON.stringify(validator_results),
(info) => {
response.redirect("/?carrier="+code.carrier+"&redirect=true&bad_code="+code.value);
}
);
}, (err) => {});
} else {
response.render("referral", {
layout: "main.hbs",
title: request.params.code,
url: carriers[0].activation_url.replace("{{code}}", results[0].value),
code: results[0]
});
}
}
);
validator.findOnPage(selectedCarrier.activation_needle, selectedCarrier.activation_url.replace("{{code}}", code.value), (validator_results) => {
if (validator_results.error || !validator_results.valid) {
database.remove("codes", {url: request.params.url, carrier: code.carrier}, (deleted_codes) => {
database.insert("logs", [
{event_type: "delete", code: code.value, date: new Date()}
], (inserted_logs) => {
response.redirect("/?carrier="+code.carrier+"&redirect=true&bad_code="+code.value);
});
}, (err) => {});
} else {
database.insert("logs", [
{event_type: "view", code: code.value, date: new Date()}
], (inserted_logs) => {
response.render("referral", {
layout: "main.hbs",
title: request.params.code,
url: carriers[0].activation_url.replace("{{code}}", code.value),
code: code
});
});
}
});
});
}, (err) => response.send(err));
Expand Down Expand Up @@ -125,14 +128,12 @@ app.get('/submit', (request, response, next) => {
url: Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15),
carrier: selectedCarrier.id
}
], (results) => {
mailer.sendRaw(
process.env.ADMIN_EMAIL,
"["+process.env.MONGODB_DATABASE+"] New PMReferral code received",
request.query.code+" ("+selectedCarrier.name+"): " + JSON.stringify(validator_results),
(info) => {
response.redirect("/?success=true&carrier="+selectedCarrier.id);
});
], (inserted_codes) => {
database.insert("logs", [
{event_type: "submit", code: request.query.code, date: new Date()}
], (results) => {
response.redirect("/?success=true&carrier="+selectedCarrier.id);
});
}, (err) => {});
}
}, (err) => response.send(err));
Expand Down Expand Up @@ -160,6 +161,74 @@ app.get('/faq', (request, response) => {
});
});

app.get('/stats', (request, response) => {
database.get('logs', {}, {}, -1, (logs) => {

var totalViewCount = logs.filter((l) => {
return l.event_type === "view"
&& l.date < moment().subtract(1, 'hour');
}).length;
var weeklyViewCount = logs.filter((l) => {
return l.event_type === "view"
&& l.date < moment().subtract(1, 'hour')
&& l.date > moment().subtract(7, 'days');
}).length;
var dailyViewCount = logs.filter((l) => {
return l.event_type === "view"
&& l.date < moment().subtract(1, 'hour')
&& l.date > moment().subtract(1, 'day');
}).length;

var viewCounts = new Array();
var submissionCounts = new Array();
var dayLabels = new Array();

var days = request.query.days ? parseInt(request.query.days) : 14;

if (days > 180) {
response.redirect("/statistics?days=180");
return;
}

for (var d = moment('2019-11-18'); d.isBefore(moment()); d.add(1, 'day')) {
viewCounts.push(
logs.filter((l) => {
return l.event_type === "view"
&& l.date < moment().subtract(1, 'hour')
&& d.isSame(l.date, 'day')
}).length
);
submissionCounts.push(
logs.filter((l) => {
return l.event_type === "submit"
&& l.date < moment().subtract(1, 'hour')
&& d.isSame(l.date, 'day')
}).length
);
dayLabels.push(
d.format("YYYY-MM-DD")
);
}

response.render("stats", {
layout: "main.hbs",
title: "Statistics",
days: days,
totalViewCount: totalViewCount,
weeklyViewCount: weeklyViewCount,
dailyViewCount: dailyViewCount,
dailyViewsHot: dailyViewCount > 20,
weeklyViewsHot: weeklyViewCount > 200,
chartData: {
"labels": dayLabels,
"views": viewCounts,
"submissions": submissionCounts
}
});

});
});

//catchall and 404
app.get('*', (request, response) => {
response.render("404", {
Expand Down
5 changes: 5 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
"express": "^4.16.3",
"express-handlebars": "^3.0.0",
"https": "^1.0.0",
"moment": "^2.24.0",
"mongodb": "^3.3.4",
"nodemailer": "^4.6.8",
"nodemailer-direct-transport": "^3.3.2",
Expand Down
Binary file modified views/assets/images/favicon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added views/assets/images/fire.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed views/assets/images/logo2.png
Binary file not shown.
Binary file added views/assets/images/maintenance.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 8 additions & 0 deletions views/assets/stylesheets/custom.css
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,14 @@
font-weight: bold;
}

.xlarge {
font-size: 48px;
}

.pmblue {
color: #034045;
}

.censored {
color: #444;
background: rgb(129, 116, 100);
Expand Down
7 changes: 1 addition & 6 deletions views/faq.hbs
Original file line number Diff line number Diff line change
@@ -1,9 +1,4 @@
<div class = "container large-top-space bottom-space">
<div class = "row">
<a href = "/" class = "button">Back to home page</a>
</div>
</div>
<div class = "container">
<div class = "container large-top-space">
<div class = "row bottom-space">
<span class = "large title">What is this website for?</span>
</div>
Expand Down
15 changes: 13 additions & 2 deletions views/home.hbs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
<div class = "container large-top-space">

{{#if successful_addition}}
<div class = "row bottom-space success-panel">
<center>
Expand All @@ -16,7 +15,7 @@
{{/if}}

<div class = "row bottom-space">
<span class = "large title">Get a referral code for your next phone plan</span>
<span class = "large title">Get $10 off your first month with {{carrier.name}}</span>
</div>
<div class = "row bottom-space">
Many cellular providers offer signup rewards if you provide a code during registration.
Expand Down Expand Up @@ -71,4 +70,16 @@
function clickOnReferral() {
}
</script>

<!-- Hotjar Tracking Code for https://pmreferrals.ca -->
<script>
(function(h,o,t,j,a,r){
h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};
h._hjSettings={hjid:1580734,hjsv:6};
a=o.getElementsByTagName('head')[0];
r=o.createElement('script');r.async=1;
r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;
a.appendChild(r);
})(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');
</script>
20 changes: 15 additions & 5 deletions views/layouts/main.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -11,24 +11,34 @@
<link rel="stylesheet" href="/css/normalize.css">
<link rel="stylesheet" href="/css/skeleton.css">
<link rel="stylesheet" href="/css/custom.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
</head>

<body class = "bg-color">
<div class = "container">
<div class = "row top-space">
<div class = "two-thirds column">
<a title = "Go to home page" href = "/"><img class = "u-max-full-width" src = "/images/logo2.png"></img></a>
<br>
<span class = "u-full-width left-space large title">MOBILE REFERRALS</span>
<a title = "Go to home page" href = "/"><img src = "/images/favicon.png"></img></a>
<span style = "position: relative; bottom: 10px; text-decoration: none;">
<a href = "/" class = "left-space pmblue title">Get a referral</a>
<a href = "/stats" class = "left-space pmblue title">Statistics</a>
<a href = "/faq" class = "left-space pmblue title">FAQ</a>
</span>
</div>
</div>
</div>
<div id = "nojs" class = "container top-space failure-panel">
<center>
<b>This website requires Javascript. Please make sure it's enabled!</b>
</center>
</div>
<script>
document.getElementById('nojs').style.display = "none";
</script>
{{{body}}}
<div class = "container large-top-space bottom-space">
<i>
PMReferrals.ca is a third-party tool and is not affiliated with Public Mobile.
If you have any questions or concerns, please read the <a href = "/faq">FAQ</a> or email <a href = "mailto:[email protected]">[email protected]</a>.
If you have any questions or concerns, email <a href = "mailto:[email protected]">[email protected]</a>.
</i>
</div>
</body>
Expand Down
20 changes: 20 additions & 0 deletions views/layouts/noheader.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<html>
<head>
<meta charset="utf-8">
<title>{{title}}{{#if title}} - {{/if}}Public Mobile Referrals</title>
<meta name="Public Mobile Referrals">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" type="image/png" href="/images/favicon.png"/>
<link rel="stylesheet" href="/css/stylesheet.css">
<link href="https://fonts.googleapis.com/css?family=Anton&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=PT+Mono&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/css/normalize.css">
<link rel="stylesheet" href="/css/skeleton.css">
<link rel="stylesheet" href="/css/custom.css">
</head>

<body class = "bg-color">
{{{body}}}
</body>

</html>
13 changes: 13 additions & 0 deletions views/maintenance.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<div class = "container large-top-space">
<center>
<div class = "row bottom-space">
<img width = "200px" src = "/images/maintenance.png"></img>
</div>
<div class = "row bottom-space">
<span class = "large title center">{{message}}</span>
</div>
<div class = "row bottom-space">
<span class = "code">{{submessage}}</span>
</div>
</center>
</div>
Loading

0 comments on commit 688ce3d

Please sign in to comment.