Skip to content

Commit

Permalink
fix #1191: ping fxa on email visits
Browse files Browse the repository at this point in the history
  • Loading branch information
groovecoder committed Nov 22, 2019
1 parent 740f789 commit 0ba2cdb
Show file tree
Hide file tree
Showing 7 changed files with 45 additions and 7 deletions.
6 changes: 5 additions & 1 deletion controllers/hibp.js
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,9 @@ async function notify (req, res) {

for (const recipient of recipients) {
log.info("notify", {recipient});
// Get subscriber ID from "subscriber_id" property (if email_addresses record)
// or from "id" property (if subscribers record)
const subscriberId = recipient.subscriber_id || recipient.id;
const { recipientEmail, breachedEmail, signupLanguage, preFxaSubscriber } = getAddressesAndLanguageForEmail(recipient);
const campaignId = (preFxaSubscriber) ? "preFXA-see-all-breaches" : "see-all-breaches";
const ctaHref = EmailUtils.getEmailCtaHref(utmID, campaignId);
Expand All @@ -104,9 +107,10 @@ async function notify (req, res) {
{
breachedEmail,
recipientEmail,
subscriberId,
supportedLocales,
breachAlert,
SERVER_URL: req.app.locals.SERVER_URL,
SERVER_URL: AppConstants.SERVER_URL,
unsubscribeUrl: EmailUtils.getUnsubscribeUrl(recipient, utmID),
ctaHref: ctaHref,
whichPartial: "email_partials/report",
Expand Down
15 changes: 15 additions & 0 deletions lib/fxa.js
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,21 @@ const FXA = {
return data.body;
},

async sendMetricsFlowPing(path) {
const fxaMetricsFlowUrl = new URL(path, AppConstants.FXA_SETTINGS_URL);
const fxaMetricsFlowOptions = {
method: "GET",
headers: { Origin: AppConstants.SERVER_URL },
};
try {
const resp = await got(fxaMetricsFlowUrl, fxaMetricsFlowOptions);
log.info("pinged FXA metrics flow.");
return resp;
} catch (e) {
log.error("sendMetricsFlowPing", {stack: e.stack});
}
},

};


Expand Down
15 changes: 15 additions & 0 deletions middleware.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,20 @@ function pickLanguage (req, res, next) {
}


async function recordVisitFromEmail (req, res, next) {
if (req.query.utm_source && req.query.utm_source !== "fx-monitor-email") {
next();
}
if (!req.query.subscriber_id || !Number.isInteger(req.query.subscriber_id)) {
next();
}
const subscriber = await DB.getSubscriberById(req.query.subscriber_id);
const fxaMetricsFlowPath = `metrics-flow?event_type=engage&uid=${subscriber.fxa_uid}&service=${AppConstants.OAUTH_CLIENT_ID}`;
await FXA.sendMetricsFlowPing(fxaMetricsFlowPath);
next();
}


// Helps handle errors for all async route controllers
// See https://medium.com/@Abazhenov/using-async-await-in-express-with-node-8-b8af872c0016
function asyncMiddleware (fn) {
Expand Down Expand Up @@ -122,6 +136,7 @@ async function requireSessionUser(req, res, next) {
module.exports = {
addRequestToResponse,
pickLanguage,
recordVisitFromEmail,
asyncMiddleware,
logErrors,
localizeErrorMessages,
Expand Down
6 changes: 5 additions & 1 deletion server.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,10 @@ const { URL } = require("url");
const EmailUtils = require("./email-utils");
const HBSHelpers = require("./template-helpers/");
const HIBP = require("./hibp");
const {addRequestToResponse, pickLanguage, logErrors, localizeErrorMessages, clientErrorHandler, errorHandler} = require("./middleware");
const {
addRequestToResponse, pickLanguage, logErrors, localizeErrorMessages,
clientErrorHandler, errorHandler, recordVisitFromEmail,
} = require("./middleware");
const { LocaleUtils } = require("./locale-utils");
const mozlog = require("./log");

Expand Down Expand Up @@ -162,6 +165,7 @@ app.use(sessions({

app.use(pickLanguage);
app.use(addRequestToResponse);
app.use(recordVisitFromEmail);

app.use("/", DockerflowRoutes);
app.use("/hibp", HibpRoutes);
Expand Down
4 changes: 2 additions & 2 deletions template-helpers/emails.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ function emailBreachStats(args) {
function getPreFxaUtmParams(serverUrl, content, userEmail) {
const url = new URL(`${serverUrl}/oauth/init`);
const utmParams = {
utm_source: "fx-monitor",
utm_medium: "fx-monitor-email",
utm_source: "fx-monitor-email",
utm_medium: "email",
utm_content: content,
utm_campaign: "pre-fxa-subscribers",
email: userEmail,
Expand Down
2 changes: 1 addition & 1 deletion views/partials/email_partials/email_single_breach.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<p class="text-light" style="font-weight: 300; color: #5e5e72; font-size: 13px; font-family: sans-serif; margin: 0px; padding-bottom: 4px;">{{ LocalizedBreachCardStrings.CompromisedData }}</p>
<span class="text-medium" style="font-weight:600; font-size: 15px; font-family: sans-serif; margin: 0px; color: #20123a;">{{ DataClasses }}</span>
{{/if}}
<p class="more-info-link-wrap" style="padding-top: 20px; margin: 0;"><a class="more-info-link" target="_blank" rel="noopener noreferrer" style="color: #0060df; font-family: sans-serif; font-weight: 500; text-decoration: none;" href="https://monitor.firefox.com/breach-details/{{ Name }}?utm_source=fx-monitor-email&utm_medium=email&utm_campaign=more-about-this-breach-link">{{ LocalizedBreachCardStrings.MoreInfoLink }}</a></p>
<p class="more-info-link-wrap" style="padding-top: 20px; margin: 0;"><a class="more-info-link" target="_blank" rel="noopener noreferrer" style="color: #0060df; font-family: sans-serif; font-weight: 500; text-decoration: none;" href="{{ SERVER_URL }}/breach-details/{{ Name }}?utm_source=fx-monitor-email&utm_medium=email&utm_campaign=more-about-this-breach-link&subscriber_id={{ subscriberId }}">{{ LocalizedBreachCardStrings.MoreInfoLink }}</a></p>
</td>
</tr>
</table>
4 changes: 2 additions & 2 deletions views/partials/email_partials/report.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
<tr>
<td align="center" style="padding-bottom: 20px;">
{{#getBreachAlert}}
{{> email_partials/email_single_breach SERVER_URL=../SERVER_URL breachAlert=../breachAlert}}
{{> email_partials/email_single_breach SERVER_URL=../SERVER_URL breachAlert=../breachAlert subscriberId=../subscriberId}}
{{/getBreachAlert}}
</td>
</tr>
Expand Down Expand Up @@ -58,7 +58,7 @@
{{#each (getUnsafeBreachesForEmailReport)}}
<tr>
<td width="100%" style="padding-bottom: 20px;">
{{> email_partials/email_single_breach SERVER_URL=../SERVER_URL}}
{{> email_partials/email_single_breach SERVER_URL=../SERVER_URL subscriberId=../subscriberId}}
</td>
</tr>
{{/each}}
Expand Down

0 comments on commit 0ba2cdb

Please sign in to comment.