Merge pull request #873 from mozilla/fix-v2-emails
Resurrect emails and update breach alert with new FAQs.
This commit is contained in:
Коммит
856d840348
|
@ -1,7 +1,5 @@
|
|||
"use strict";
|
||||
|
||||
const HBSHelpers = require("../template-helpers/hbs-helpers");
|
||||
|
||||
|
||||
function getEmailMockUps(req, res) {
|
||||
const unsafeBreachesForEmail = [];
|
||||
|
@ -44,7 +42,6 @@ function getEmailMockUps(req, res) {
|
|||
unsafeBreachesForEmail: unsafeBreachesForEmail,
|
||||
supportedLocales: req.supportedLocales,
|
||||
whichPartial: `email_partials/${req.query.partial}`,
|
||||
date: HBSHelpers.prettyDate(req.supportedLocales, new Date()),
|
||||
buttonValue,
|
||||
breachAlert,
|
||||
emailSubject,
|
||||
|
|
|
@ -7,7 +7,6 @@ const DB = require("../db/DB");
|
|||
const EmailUtils = require("../email-utils");
|
||||
const HIBP = require("../hibp");
|
||||
const { LocaleUtils } = require ("../locale-utils");
|
||||
const HBSHelpers = require("../template-helpers/hbs-helpers");
|
||||
const mozlog = require("../log");
|
||||
|
||||
|
||||
|
@ -74,7 +73,6 @@ async function notify (req, res) {
|
|||
{
|
||||
email,
|
||||
supportedLocales,
|
||||
date: HBSHelpers.prettyDate(supportedLocales, new Date()),
|
||||
breachAlert,
|
||||
SERVER_URL: req.app.locals.SERVER_URL,
|
||||
scanAnotherEmailHref: scanAnotherEmailHref,
|
||||
|
|
|
@ -8,7 +8,6 @@ const DB = require("../db/DB");
|
|||
const EmailUtils = require("../email-utils");
|
||||
const { FluentError } = require("../locale-utils");
|
||||
const FXA = require("../lib/fxa");
|
||||
const HBSHelpers = require("../template-helpers/emails");
|
||||
const HIBP = require("../hibp");
|
||||
const sha1 = require("../sha1-utils");
|
||||
|
||||
|
@ -160,7 +159,6 @@ async function _verify(req) {
|
|||
{
|
||||
email: verifiedEmailHash.email,
|
||||
supportedLocales: req.supportedLocales,
|
||||
date: HBSHelpers.e_prettyDate(req.supportedLocales, new Date()),
|
||||
unsafeBreachesForEmail: unsafeBreachesForEmail,
|
||||
scanAnotherEmailHref: EmailUtils.getScanAnotherEmailUrl(utmID),
|
||||
unsubscribeUrl: EmailUtils.getUnsubscribeUrl(verifiedEmailHash, utmID),
|
||||
|
|
|
@ -27,8 +27,6 @@ error-hibp-throttled = Too many connections to {-brand-HIBP}.
|
|||
error-hibp-connect = Error connecting to {-brand-HIBP}.
|
||||
error-hibp-load-breaches = Could not load breaches.
|
||||
|
||||
hibp-notify-email-subject = {-product-name} Alert: Your account was involved in a breach.
|
||||
|
||||
home-title = {-product-name}
|
||||
home-not-found = Page not found.
|
||||
|
||||
|
@ -432,8 +430,8 @@ what-data= What data was compromised:
|
|||
overview= Overview:
|
||||
|
||||
|
||||
sensitive-sites= How does Firefox Monitor treat sensitive sites?
|
||||
sensitive-sites-copy= Firefox Monitor reveals accounts associated with these
|
||||
sensitive-sites= How does {-product-name} treat sensitive sites?
|
||||
sensitive-sites-copy= {-product-name} reveals accounts associated with these
|
||||
types of breaches after an email address has been verified. This means you're
|
||||
the only person who can see if your information was in this breach.
|
||||
|
||||
|
@ -509,3 +507,35 @@ manage-email-addresses= Manage Email Addresses
|
|||
latest-breach-link= See if you were in this breach
|
||||
|
||||
welcome-back= Welcome back { $userName }!
|
||||
|
||||
|
||||
breach-alert-subject= {-product-name} found your email in a new data breach.
|
||||
|
||||
your-info-was-discovered-headline=Your information was discovered in a new data breach.
|
||||
|
||||
your-info-was-discovered-blurb=You’re signed up to receive {-product-name} alerts
|
||||
when your email appears in a data breach. Here’s what we know about this breach.
|
||||
|
||||
what-to-do-after-breach=What to do after a data breach
|
||||
|
||||
ba-next-step-1= Change your password to a strong, unique password.
|
||||
ba-next-step-blurb-1=
|
||||
A strong password uses a combination of upper and lowercase letters,
|
||||
special characters, and numbers. It doesn’t contain personal info like
|
||||
your address, birthday, or family names.
|
||||
|
||||
ba-next-step-2= Stop using that exposed password entirely.
|
||||
ba-next-step-blurb-2=
|
||||
Cyber criminals could find your password on the dark web and use it
|
||||
to log in to your other accounts. The best way to protect your accounts
|
||||
is to use unique passwords for each one.
|
||||
|
||||
|
||||
ba-next-step-3= Get help creating better passwords and keeping them safe.
|
||||
ba-next-step-blurb-3=
|
||||
Use a password manager to create strong, unique passwords. Password managers securely store all your
|
||||
logins so you can access them across all your devices.
|
||||
|
||||
faq1= I don’t recognize this company or website. Why am I in this breach?
|
||||
faq2= Why did it take so long to notify me of this breach?
|
||||
faq3= How do I know this is a legitimate email from {-product-name}?
|
||||
|
|
|
@ -1,19 +0,0 @@
|
|||
"use strict";
|
||||
|
||||
// Mapping for Password Tips & What To Do Next string IDs
|
||||
// that have been updated with FxA integration.
|
||||
|
||||
|
||||
const modifiedStrings = {
|
||||
"pwt-summary-2" : "fxa-pwt-summary-2",
|
||||
"pwt-summary-4" : "fxa-pwt-summary-4",
|
||||
"pwt-summary-6" : "fxa-pwt-summary-6",
|
||||
"what-to-do-subhead-2" : "fxa-what-to-do-subhead-2",
|
||||
"what-to-do-subhead-4" : "fxa-what-to-do-subhead-4",
|
||||
"what-to-do-blurb-1" : "fxa-what-to-do-blurb-1",
|
||||
"what-to-do-blurb-2" : "fxa-wtd-blurb-2",
|
||||
"what-to-do-blurb-3" : "fxa-what-to-do-blurb-3",
|
||||
"what-to-do-blurb-4" : "fxa-what-to-do-blurb-4",
|
||||
};
|
||||
|
||||
module.exports = modifiedStrings;
|
|
@ -175,3 +175,25 @@ p.body-copy.medium span,
|
|||
p.body-copy.medium a {
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.email-faq-link a {
|
||||
color: var(--blue60);
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.email-faq-link a:hover {
|
||||
color: var(--blue70);
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
tr.email-faq-link {
|
||||
margin-top: 10px !important;
|
||||
}
|
||||
|
||||
tr.email-faq {
|
||||
padding-top: 30px;
|
||||
}
|
||||
|
||||
p.body-copy {
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
|
|
@ -1,25 +1,157 @@
|
|||
"use strict";
|
||||
|
||||
const e_localeString = (locales, string) => {
|
||||
// console.log(`localeString ${string}`);
|
||||
};
|
||||
const { URL } = require("url");
|
||||
|
||||
const e_localizedBreachDataClasses = (locales, string) => {
|
||||
// console.log(`localizedBreachDataClasses ${string}`);
|
||||
};
|
||||
const { LocaleUtils } = require("./../locale-utils");
|
||||
|
||||
const e_prettyDate = (locales, string) => {
|
||||
// console.log(`prettyDate ${string}`);
|
||||
const { makeBreachCards } = require("./breaches");
|
||||
const { prettyDate } = require("./hbs-helpers");
|
||||
|
||||
|
||||
|
||||
const modifiedStrings = {
|
||||
"pwt-summary-2" : "fxa-pwt-summary-2",
|
||||
"pwt-summary-4" : "fxa-pwt-summary-4",
|
||||
"pwt-summary-6" : "fxa-pwt-summary-6",
|
||||
"what-to-do-subhead-2" : "fxa-what-to-do-subhead-2",
|
||||
"what-to-do-subhead-4" : "fxa-what-to-do-subhead-4",
|
||||
"what-to-do-blurb-1" : "fxa-what-to-do-blurb-1",
|
||||
"what-to-do-blurb-2" : "fxa-wtd-blurb-2",
|
||||
"what-to-do-blurb-3" : "fxa-what-to-do-blurb-3",
|
||||
"what-to-do-blurb-4" : "fxa-what-to-do-blurb-4",
|
||||
};
|
||||
|
||||
|
||||
const getEmailString = (locales, stringId) => {
|
||||
// console.log(stringId);
|
||||
};
|
||||
function getUnsafeBreachesForEmailReport(args) {
|
||||
const locales = args.data.root.supportedLocales;
|
||||
const foundBreaches = args.data.root.unsafeBreachesForEmail;
|
||||
return makeBreachCards(foundBreaches, locales);
|
||||
}
|
||||
|
||||
|
||||
function makeFaqLink(target, campaign) {
|
||||
const url = new URL(`https://support.mozilla.org/kb/firefox-monitor-faq${target}`);
|
||||
const utmParameters = {
|
||||
utm_source: "fx-monitor-email",
|
||||
utm_medium: "email",
|
||||
utm_campaign: campaign,
|
||||
};
|
||||
|
||||
for (const param in utmParameters) {
|
||||
url.searchParams.append(param, utmParameters[param]);
|
||||
}
|
||||
return url;
|
||||
}
|
||||
|
||||
|
||||
function getBreachAlertFaqs(args) {
|
||||
const supportedLocales = args.data.root.supportedLocales;
|
||||
const faqs = [
|
||||
{
|
||||
"linkTitle" : LocaleUtils.fluentFormat(supportedLocales, "faq1", args),
|
||||
"stringDescription": "I don't recognize this website. Why am I in this breach?",
|
||||
"href": makeFaqLink("#w_i-donaot-recognize-this-company-or-website-why-am-i-receiving-notifications-about-this-breach", "faq1"),
|
||||
},
|
||||
{
|
||||
"linkTitle" : LocaleUtils.fluentFormat(supportedLocales, "faq2", args),
|
||||
"stringDescription": "Why did it take so long to notify me of this breach?",
|
||||
"href": makeFaqLink("#w_why-did-it-take-so-long-to-notify-me-of-this-breach", "faq2"),
|
||||
},
|
||||
{
|
||||
"linkTitle" : LocaleUtils.fluentFormat(supportedLocales, "faq3", args),
|
||||
"stringDescription": "How do I know this is a legitimate email from Firefox Monitor?",
|
||||
"href": makeFaqLink("#w_how-do-i-know-these-emails-are-really-from-firefox-and-not-from-a-hacker", "faq3"),
|
||||
},
|
||||
];
|
||||
|
||||
const functionedFaqs = faqs.map(faq => args.fn(faq));
|
||||
return "".concat(...functionedFaqs);
|
||||
}
|
||||
|
||||
function getReportHeader(args) {
|
||||
const locales = args.data.root.supportedLocales;
|
||||
const reportHeader = {
|
||||
date: prettyDate(new Date(), locales),
|
||||
strings: {
|
||||
"email": "email-address",
|
||||
"reportDate": "report-date",
|
||||
"fxmReport" : "firefox-monitor-report",
|
||||
},
|
||||
};
|
||||
for (const stringId in reportHeader.strings) {
|
||||
const newString = LocaleUtils.fluentFormat(locales, reportHeader.strings[stringId]);
|
||||
reportHeader.strings[stringId] = newString;
|
||||
}
|
||||
return args.fn(reportHeader);
|
||||
}
|
||||
|
||||
|
||||
function getWhatToDos(args) {
|
||||
const locales = args.data.root.supportedLocales;
|
||||
|
||||
let headlineId = "what-to-do-next";
|
||||
let subheadId = "what-to-do-subhead";
|
||||
let blurbId = "what-to-do-blurb";
|
||||
let numTips = 4;
|
||||
|
||||
// grab different strings for breach alert emails
|
||||
if (args.data.root.breachAlert) {
|
||||
headlineId = "what-to-do-after";
|
||||
subheadId = "ba-next-step";
|
||||
blurbId = "ba-next-step-blurb";
|
||||
numTips = 3;
|
||||
}
|
||||
|
||||
const whatToDoNext = {
|
||||
headline: LocaleUtils.fluentFormat(locales, headlineId),
|
||||
steps: createTips(numTips, subheadId, blurbId, locales),
|
||||
};
|
||||
return args.fn(whatToDoNext);
|
||||
}
|
||||
|
||||
|
||||
function getPasswordTips(args) {
|
||||
const locales = args.data.root.supportedLocales;
|
||||
const passwordTips = createTips(4, "report-pwt-headline", "report-pwt-summary", locales);
|
||||
return passwordTips;
|
||||
}
|
||||
|
||||
|
||||
function checkForNewStringId(locales, stringId) {
|
||||
if (modifiedStrings[stringId]) {
|
||||
stringId = modifiedStrings[stringId];
|
||||
}
|
||||
return LocaleUtils.fluentFormat(locales, stringId);
|
||||
}
|
||||
|
||||
|
||||
function createTips(numTips, subheadIdPrefix, blurbIdPrefix, locales) {
|
||||
const tips = [];
|
||||
let x = 0;
|
||||
while (x < numTips) {
|
||||
tips.push({
|
||||
idx: x + 1,
|
||||
subhead: checkForNewStringId(locales, `${subheadIdPrefix}-${x+1}`),
|
||||
blurb: checkForNewStringId(locales, `${blurbIdPrefix}-${x+1}`),
|
||||
});
|
||||
x++;
|
||||
}
|
||||
return tips;
|
||||
}
|
||||
|
||||
function getBreachAlert(args) {
|
||||
const locales = args.data.root.supportedLocales;
|
||||
const breachAlert = [args.data.root.breachAlert];
|
||||
const breachAlertCard = makeBreachCards(breachAlert, locales);
|
||||
return args.fn(breachAlertCard[0]);
|
||||
}
|
||||
|
||||
|
||||
module.exports = {
|
||||
e_localeString,
|
||||
e_localizedBreachDataClasses,
|
||||
e_prettyDate,
|
||||
getEmailString,
|
||||
getBreachAlert,
|
||||
getBreachAlertFaqs,
|
||||
getPasswordTips,
|
||||
getReportHeader,
|
||||
getUnsafeBreachesForEmailReport,
|
||||
getWhatToDos,
|
||||
};
|
||||
|
|
|
@ -9,6 +9,9 @@ const log = mozlog("template-helpers/hbs-helpers");
|
|||
|
||||
function getSupportedLocales(args) {
|
||||
if (args.data) {
|
||||
if (args.data.root.supportedLocales) {
|
||||
return args.data.root.supportedLocales;
|
||||
}
|
||||
return args.data.root.req.supportedLocales;
|
||||
}
|
||||
if (args.this) {
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
body {
|
||||
text-align: center;
|
||||
font-family: 'Fira Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
||||
font-family: sans-serif;
|
||||
font-weight: 400;
|
||||
color: #333333;
|
||||
background: #ededf0;
|
||||
|
@ -54,6 +54,11 @@
|
|||
border-width: 0px;
|
||||
}
|
||||
|
||||
p,
|
||||
a {
|
||||
font-family: sans-serif;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 500px) {
|
||||
br.break-line {
|
||||
display: none;
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
<html lang="{{ locale }}">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="stylesheet" href="/dist/app.min.css">
|
||||
<link rel="stylesheet" href="/dist/email_l10n_testing.min.css">
|
||||
<link rel="stylesheet" href="/css/legacy/app.css">
|
||||
<link rel="stylesheet" href="/css/legacy/email_l10n_testing.css">
|
||||
<link rel="stylesheet" href="https://code.cdn.mozilla.net/fonts/fira.css">
|
||||
<meta name="partialport" content="width=device-width, initial-scale=1.0, partialport-fit=cover" />
|
||||
<title>Firefox Monitor: Email L10n</title>
|
||||
|
|
|
@ -1,14 +0,0 @@
|
|||
<tr>
|
||||
<td class="email-breach-image" valign="top" style="padding-top: 3px; padding-bottom: 10px; width: 55px;">
|
||||
<img src="{{ SERVER_URL }}/img/email_images/missing-logo-icon.png" width="40" style="width: 40px;" />
|
||||
</td>
|
||||
<td valign="top" style="vertical-align: top; padding-top: 0px; padding-right: 20px; padding-bottom: 10px;">
|
||||
<p class="body-copy medium" style="padding: 0px; margin: 0px; color: #333333; margin: 0px; font-weight: 500; font-size: 16px;">{{ breachAlert.Title }}</p>
|
||||
<p class="body-copy medium" style="padding: 2px 0px 2px 0px; margin: 0px; color: #333333; font-weight: 400; font-size: 14px;">{{getEmailString supportedLocales "breach-date"}}<span class="body-copy" style="font-weight:300; padding-left: 6px; color: #333333">{{e_prettyDate supportedLocales breachAlert.BreachDate }}</span></p>
|
||||
<p class="body-copy medium" style="padding: 2px 0px 2px 0px; margin: 0px; color: #333333; font-weight: 400; font-size: 14px;">{{getEmailString supportedLocales "compromised-accounts"}}<span class="body-copy" style="font-weight:300; padding-left: 6px; color: #333333">{{e_localeString supportedLocales breachAlert.PwnCount }}</span></p>
|
||||
{{#if breachAlert.DataClasses }}
|
||||
<p class="body-copy medium" style="padding: 2px 0px 2px 0px; margin: 0px; color: #333333; font-weight: 400; font-size: 14px;">{{getEmailString supportedLocales "compromised-data"}}<span class="body-copy" style="font-weight:300; padding-left: 6px; color: #333333">{{e_localizedBreachDataClasses supportedLocales breachAlert.DataClasses }}</span></p>
|
||||
{{/if}}
|
||||
</td>
|
||||
</tr>
|
||||
|
|
@ -4,9 +4,9 @@
|
|||
<td>
|
||||
<table>
|
||||
<tr>
|
||||
<td class="email-button-wrapper" align="center" bgcolor="#0060df" style="width: 100%; max-width: 530px; border-radius: 2px;">
|
||||
<td class="email-button-wrapper" align="center" bgcolor="#0060df" style="width: 100%; max-width: 530px; border-radius: 2px; font-family: sans-serif;">
|
||||
<a class="email-button" href="{{ href }}" rel="noopener" style="text-align: center; text-decoration: none; color: #ffffff; padding-top: 12px; padding-right: 30px; padding-left: 30px; padding-bottom: 12px; border: 1px solid #0060df; display: inline-block; font-size: 13px;">
|
||||
{{getEmailString supportedLocales fluentStringID}}
|
||||
{{ getString fluentStringID }}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
<tr class="email-faq" style="padding-top: 15px; font-family: sans-serif;">
|
||||
<td colspan="2" valign="top" style="padding-top: 10px;">
|
||||
<p class="body-copy email-sub-head" style="color: #333333; font-weight: 300; font-size: 22px; padding-top: 30px; margin: 0px; ">
|
||||
{{ getString "frequently-asked-questions" }}
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
{{#getBreachAlertFaqs}}
|
||||
<tr class="email-faq-link">
|
||||
<td valign="top" style="width: 60px;">
|
||||
</td>
|
||||
<td valign="top" style="padding-top: 10px;">
|
||||
<a href="{{ href }}" style="color: #0060df; font-weight: 400; font-size: 14px; padding: 0px; margin: 0px; ">
|
||||
{{ linkTitle }}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{{/getBreachAlertFaqs}}
|
||||
<tr style="padding-top: 30px;"></tr>
|
|
@ -1,15 +1,15 @@
|
|||
<table class="footer" align="center" width="100%" border="0" cellspacing="0" cellpadding="0" style="text-align: center; max-width: 603px; font-size: 13px; padding: 0px 15px; margin: 0px;">
|
||||
<tr>
|
||||
<td>
|
||||
<td style="font-family: sans-serif;">
|
||||
<p class="footer-copy legal-copy" style="margin-top: 0px; font-weight: 300; color: #738597;">
|
||||
{{getEmailString supportedLocales "automated-message"}}
|
||||
{{ getString "automated-message" }}
|
||||
</p>
|
||||
<p class="footer-copy" style="margin-top: 0px; font-weight: 300; color: #738597;">
|
||||
{{{getEmailString supportedLocales "we-sent-this-alert" userEmail=email}}}
|
||||
{{{ getString "we-sent-this-alert" userEmail=email }}}
|
||||
</p>
|
||||
<p class="footer-copy" style="padding: 0px 0px 3px 0px; margin: 0px; font-weight: 300; color: #738597 ;">
|
||||
<a class="footer-link" style="color: #0060df;" href="{{ unsubscribeUrl }}" rel="noreferrer noopener">
|
||||
{{getEmailString supportedLocales "unsubscribe-email-link"}}
|
||||
{{ getString "unsubscribe-email-link" }}
|
||||
</a>
|
||||
</p>
|
||||
</td>
|
||||
|
@ -22,11 +22,11 @@
|
|||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top">
|
||||
<td valign="top" style="font-family: sans-serif;">
|
||||
<p class="footer-copy" style="padding: 0px 0px 3px 0px; margin: 0px; font-weight: 300; color: #738597;">Mozilla</p>
|
||||
<p class="footer-copy" style="padding: 0px 0px 3px 0px; margin: 0px; font-weight: 300; color: #738597 ;">331 E. Evelyn Avenue Mountain View CA 94041</p>
|
||||
<p class="footer-copy" style="padding: 0px; margin: 0px;">
|
||||
<a class="footer-link" href="https://www.mozilla.org/about/legal/{{> email_partials/utm_email_footer }}" rel="noopener" style="color: #0060df;">{{getEmailString supportedLocales "legal"}}</a><span style="color:#738597;"> •</span> <a class="footer-link" href="https://www.mozilla.org/privacy/firefox-monitor/{{> email_partials/utm_email_footer }}" rel="noopener" style="color: #0060df;">{{getEmailString supportedLocales "terms-and-privacy"}}</a>
|
||||
<a class="footer-link" href="https://www.mozilla.org/about/legal/{{> email_partials/utm_email_footer }}" rel="noopener" style="color: #0060df;">{{ getString "legal" }}</a><span style="color:#738597;"> •</span> <a class="footer-link" href="https://www.mozilla.org/privacy/firefox-monitor/{{> email_partials/utm_email_footer }}" rel="noopener" style="color: #0060df;">{{ getString "terms-and-privacy" }}</a>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<tr>
|
||||
<td><!--empty cell to align HIBP attribution with other table items--></td>
|
||||
<td>
|
||||
<span class="source-info">{{{getEmailString supportedLocales "hibp-attribution" hibp-link='<a id="hibp-link" href="https://www.haveibeenpwned.com" target="_blank" rel="noopener noreferrer">Have I Been Pwned</a>'}}}</span>
|
||||
<td style="font-family: sans-serif;">
|
||||
<span class="source-info">{{{ getString "hibp-attribution" hibp-link='<a id="hibp-link" href="https://www.haveibeenpwned.com" target="_blank" rel="noopener noreferrer">Have I Been Pwned</a>' }}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<td class="logomark-wrapper" valign="top" style="text-align: left; padding-top: 5px; width: 70px;">
|
||||
<img class="firefox-monitor-logomark" width="60" style="width: 60px;" src="{{ SERVER_URL }}/img/firefox-monitor-logo.png" />
|
||||
</td>
|
||||
<td valign="center" style="text-align: left;">
|
||||
<td valign="center" style="text-align: left; font-family: sans-serif;">
|
||||
<h1 class="firefox-monitor-logotype" style="color: #ffffff; padding: 0px; margin: 0px; font-size: 30px; font-weight: 400;">Firefox <span style="color:#ffffff; font-weight: 300;">Monitor</span></h1>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{{!-- <tr class="email-breach-listing">
|
||||
<tr class="email-breach-listing">
|
||||
<td class="email-breach-image" valign="top" style="padding-top: 13px; padding-bottom: 10px; width: 55px;">
|
||||
<img src="{{ SERVER_URL }}/img/logos/{{ this.LogoPath }}" width="40" style="width: 40px" />
|
||||
<img src="{{ SERVER_URL }}/img/logos/{{ LogoPath }}" width="40" style="width: 40px" />
|
||||
</td>
|
||||
<td valign="top" style="vertical-align: top; padding-top: 7px; padding-right: 20px; padding-bottom: 10px;">
|
||||
<p class="body-copy medium" style="padding: 0px; margin: 0px; color: #333333; margin: 0px; font-weight: 500; font-size: 16px;">{{ this.Title }}</p>
|
||||
<p class="body-copy medium" style="padding: 2px 0px 2px 0px; margin: 0px; color: #333333; font-weight: 400; font-size: 14px;">{{getString supportedLocales "breach-date"}}<span class="body-copy" style="font-weight:300; padding-left: 6px; color: #333333">{{prettyDate supportedLocales this.BreachDate }}</span></p>
|
||||
<p class="body-copy medium" style="padding: 2px 0px 2px 0px; margin: 0px; color: #333333; font-weight: 400; font-size: 14px;">{{getString supportedLocales "compromised-accounts"}}<span class="body-copy" style="font-weight:300; padding-left: 6px; color: #333333">{{localeString supportedLocales this.PwnCount }}</span></p>
|
||||
{{#if this.DataClasses }}
|
||||
<p class="body-copy medium" style="padding: 2px 0px 2px 0px; margin: 0px; color: #333333; font-weight: 400; font-size: 14px;">{{getString supportedLocales "compromised-data"}}<span class="body-copy" style="font-weight:300; padding-left: 6px; color: #333333">{{localizedBreachDataClasses supportedLocales this.DataClasses }}</span></p>
|
||||
<td valign="top" style="vertical-align: top; padding-top: 7px; padding-right: 20px; padding-bottom: 10px; font-family: sans-serif;">
|
||||
<p class="body-copy medium" style="padding: 0px; margin: 0px; color: #333333; margin: 0px; font-weight: 500; font-size: 16px;">{{ Title }}</p>
|
||||
<p class="body-copy medium" style="padding: 2px 0px 2px 0px; margin: 0px; color: #333333; font-weight: 400; font-size: 14px;">{{ String.AddedDate }}<span class="body-copy" style="font-weight:300; padding-left: 6px; color: #333333">{{ AddedDate }}</span></p>
|
||||
<p class="body-copy medium" style="padding: 2px 0px 2px 0px; margin: 0px; color: #333333; font-weight: 400; font-size: 14px;">{{ String.CompromisedAccounts }}<span class="body-copy" style="font-weight:300; padding-left: 6px; color: #333333">{{ PwnCount }}</span></p>
|
||||
{{#if DataClasses }}
|
||||
<p class="body-copy medium" style="padding: 2px 0px 2px 0px; margin: 0px; color: #333333; font-weight: 400; font-size: 14px;">{{ String.CompromisedData }}<span class="body-copy" style="font-weight:300; padding-left: 6px; color: #333333">{{ DataClasses }}</span></p>
|
||||
{{/if}}
|
||||
</td>
|
||||
</tr> --}}
|
||||
</tr>
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
|
||||
<table align="center" class="verify-email" border="0" cellspacing="0" cellpadding="0" width="100%" style="text-align: center; margin: 0px; outline: none; border-width: 0px;">
|
||||
<tr>
|
||||
<td valign="top" style="padding-top: 30px; padding-bottom: 10px;">
|
||||
<td valign="top" style="padding-top: 30px; padding-bottom: 10px; font-family: sans-serif;">
|
||||
<p class="body-copy" style="font-weight: 300; width: 100%; font-size: 17px; margin: 0px; color: #333333;">
|
||||
{{getEmailString supportedLocales "click-to-verify"}}
|
||||
{{ getString "click-to-verify" }}
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
|
@ -12,7 +12,7 @@
|
|||
<table border="0" cellspacing="0" cellpadding="0" width="100%" style="width: 100%; padding-top: 30px; padding-bottom: 30px;">
|
||||
<tr>
|
||||
<td>
|
||||
{{>email_partials/email_button href=verificationHref fluentStringID="verify-my-email"}}
|
||||
{{> email_partials/email_button href=verificationHref fluentStringID="verify-my-email" }}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -1,35 +1,38 @@
|
|||
{{!-- {{!< default_email}}
|
||||
{{!< default_email}}
|
||||
|
||||
|
||||
<div style="width: 100%; max-width: 603px;">
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="text-align: left; width: 100%;">
|
||||
<tr>
|
||||
<td>
|
||||
{{> email_partials/report_header_details}}
|
||||
<td style="font-family: sans-serif">
|
||||
{{> email_partials/report_header_details }}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table class="email-headline-copy" border="0" cellpadding="0" cellspacing="0" style="text-align: left; padding-top: 10px; width: 100%;">
|
||||
<tr>
|
||||
<td>
|
||||
{{> email_partials/report_list_headline}}
|
||||
{{> email_partials/report_list_headline }}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table class="email-main-copy" border="0" cellpadding="0" cellspacing="0" style="text-align: left; padding-top: 10px;">
|
||||
{{#if breachAlert}}
|
||||
{{> email_partials/breach_alert supportedLocales=supportedLocales}}
|
||||
{{> email_partials/email_hibp_attribution}}
|
||||
{{> email_partials/report_what_to_do_next}}
|
||||
{{#getBreachAlert}}
|
||||
{{> email_partials/email_single_breach SERVER_URL=../SERVER_URL}}
|
||||
{{/getBreachAlert}}
|
||||
{{> email_partials/email_hibp_attribution }}
|
||||
{{> email_partials/email_faqs}}
|
||||
{{> email_partials/report_what_to_do_next }}
|
||||
{{else}}
|
||||
{{#ifCompare unsafeBreachesForEmail.length ">" 0}}
|
||||
{{#each unsafeBreachesForEmail}}
|
||||
{{> email_partials/email_single_breach SERVER_URL=../SERVER_URL supportedLocales=../supportedLocales}}
|
||||
{{#each (getUnsafeBreachesForEmailReport)}}
|
||||
{{> email_partials/email_single_breach SERVER_URL=../SERVER_URL}}
|
||||
{{/each}}
|
||||
{{> email_partials/email_hibp_attribution}}
|
||||
{{> email_partials/report_what_to_do_next}}
|
||||
{{> email_partials/email_hibp_attribution }}
|
||||
{{> email_partials/report_what_to_do_next }}
|
||||
{{else}}
|
||||
{{> email_partials/report_password_tips}}
|
||||
{{> email_partials/report_password_tips }}
|
||||
{{/ifCompare}}
|
||||
|
||||
{{/if}}<!--breachAlert-->
|
||||
|
@ -37,8 +40,8 @@
|
|||
<table class="table-button" border="0" cellpadding="0" cellspacing="0" width="100%" style="padding-top: 20px; padding-bottom: 20px; margin: 0px;">
|
||||
<tr>
|
||||
<td>
|
||||
{{> email_partials/email_button href=scanAnotherEmailHref fluentStringID="report-scan-another-email"}}
|
||||
{{> email_partials/email_button href=scanAnotherEmailHref fluentStringID="report-scan-another-email" }}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div> --}}
|
||||
</div>
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
|
||||
<div style="width: 100%; padding-bottom: 20px;">
|
||||
<p class="body-copy medium" style="color:#333333; padding: 0px; margin: 0px; font-weight: 500; font-size: 14px;">{{getEmailString supportedLocales "firefox-monitor-report"}}</p>
|
||||
<p class="body-copy medium" style="color:#333333; padding: 2px 0px; margin: 0px; font-weight: 500; font-size: 14px;">{{getEmailString supportedLocales "report-date"}} <span class="body-copy" style="font-weight:300; color: #333333;">{{ date }}</span></p>
|
||||
<p class="body-copy medium" style="color:#333333; padding: 2px 0px; margin: 0px; font-weight: 500; font-size: 14px;">{{getEmailString supportedLocales "email-address"}} <a class="body-copy" href="mailto:{{ email }}" style="font-weight: 300; color: #333333;">{{ email }}</a></p>
|
||||
</div>
|
||||
{{#getReportHeader}}
|
||||
<div style="width: 100%; padding-bottom: 20px;">
|
||||
<p class="body-copy medium" style="color:#333333; padding: 0px; margin: 0px; font-weight: 500; font-size: 14px;">{{ strings.fxmReport }}</p>
|
||||
<p class="body-copy medium" style="color:#333333; padding: 2px 0px; margin: 0px; font-weight: 500; font-size: 14px;">{{ strings.reportDate }} <span class="body-copy" style="font-weight:300; color: #333333;">{{ date }}</span></p>
|
||||
<p class="body-copy medium" style="color:#333333; padding: 2px 0px; margin: 0px; font-weight: 500; font-size: 14px;">{{ strings.email }} <a class="body-copy" href="mailto:{{ ./../email }}" style="font-weight: 300; color: #333333;">{{ ./../email }}</a></p>
|
||||
</div>
|
||||
{{/getReportHeader}}
|
||||
|
|
|
@ -1,26 +1,26 @@
|
|||
|
||||
<h2 class="body-copy" style="color: #333333; font-size: 22px; font-weight: 300;">
|
||||
{{#if breachAlert}}
|
||||
{{getEmailString supportedLocales "breach-alert-headline"}}
|
||||
{{ getString "your-info-was-discovered-headline" }}
|
||||
{{else}}
|
||||
{{getEmailString supportedLocales "report-headline" breachCount=unsafeBreachesForEmail.length}}
|
||||
{{ getString "report-headline" breachCount=unsafeBreachesForEmail.length }}
|
||||
{{/if}}
|
||||
</h2>
|
||||
<p class="body-copy" style="color: #333333; font-size: 15px; font-weight: 300;">
|
||||
{{#if breachAlert}}
|
||||
{{getEmailString supportedLocales "breach-alert-subhead"}}
|
||||
{{ getString "your-info-was-discovered-blurb" }}
|
||||
{{else}}
|
||||
{{#ifCompare unsafeBreachesForEmail.length "===" 0}}
|
||||
{{getEmailString supportedLocales "report-subhead-no-breaches"}}
|
||||
{{ getString "report-subhead-no-breaches" }}
|
||||
{{else}}
|
||||
{{getEmailString supportedLocales "report-subhead-found-breaches" breachCount=unsafeBreachesForEmail.length}}
|
||||
{{ getString "report-subhead-found-breaches" breachCount=unsafeBreachesForEmail.length }}
|
||||
{{/ifCompare}}
|
||||
</p>
|
||||
{{#ifCompare unsafeBreachesForEmail.length "===" 0}}
|
||||
<h2 class="body-copy" style="color: #333333; font-size: 22px; font-weight: 300;">
|
||||
{{getEmailString supportedLocales "pwt-section-headline"}}
|
||||
{{ getString "pwt-section-headline" }}
|
||||
</h2>
|
||||
<p class="body-copy" style="color: #333333; font-size: 15px; font-weight: 300;">{{getEmailString supportedLocales "report-pwt-blurb"}}</p>
|
||||
<p class="body-copy" style="color: #333333; font-size: 15px; font-weight: 300;">{{ getString "report-pwt-blurb" }}</p>
|
||||
{{/ifCompare}}
|
||||
{{/if}} <!--breachAlert-->
|
||||
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
{{#loop 1 4 1}}
|
||||
{{#each (getPasswordTips 4)}}
|
||||
<tr class="email-wtd-step">
|
||||
<td class="email-pwt-image" valign="top" style="width: 80px; padding-top: 10px;">
|
||||
<img src="{{ ../SERVER_URL }}/img/password_tip_icons/password-tip-{{ this }}.png" alt="" width="60" style="width: 60px;" />
|
||||
<img src="{{ ../SERVER_URL }}/img/password_tip_icons/password-tip-{{ idx }}.png" alt="" width="60" style="width: 60px;" />
|
||||
</td>
|
||||
<td valign="top" style="padding-top: 10px;">
|
||||
<p class="body-copy" style="color: #333333; font-weight: 500; font-size: 16px; padding: 0px; margin: 0px; ">{{{getStringID "report-pwt-headline-" this}}}</p>
|
||||
<p class="body-copy" style="color: #333333; font-weight: 300; font-size: 14px; padding: 3px 0px 10px 0px; margin-top: 0px; ">{{{getStringID "report-pwt-summary-" this}}}</p>
|
||||
<td valign="top" style="padding-top: 10px; font-family: sans-serif;">
|
||||
<p class="body-copy" style="color: #333333; font-weight: 500; font-size: 16px; padding: 0px; margin: 0px; ">{{ subhead }}</p>
|
||||
<p class="body-copy" style="color: #333333; font-weight: 300; font-size: 14px; padding: 3px 0px 10px 0px; margin-top: 0px; ">{{ blurb }}</p>
|
||||
</td>
|
||||
</tr>
|
||||
{{/loop}}
|
||||
{{/each}}
|
||||
|
||||
|
|
|
@ -1,23 +1,25 @@
|
|||
{{#getWhatToDos}}
|
||||
<tr class="email-wtd">
|
||||
<td colspan="2" valign="top" style="padding-top: 10px;">
|
||||
<td colspan="2" valign="top" style="padding-top: 10px; font-family: sans-serif;">
|
||||
<p class="body-copy email-sub-head" style="color: #333333; font-weight: 300; font-size: 22px; padding-top: 30px; margin: 0px; ">
|
||||
{{getEmailString supportedLocales "what-to-do-next"}}
|
||||
{{ headline }}
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
{{!--
|
||||
{{#loop 1 4 1 this}}
|
||||
|
||||
{{#each steps }}
|
||||
<tr class="email-wtd">
|
||||
<td valign="top" width="60" style="width: 60px; padding-top: 15px;">
|
||||
<img width="45" src="{{ ../SERVER_URL }}/img/email_images/wtd-{{ this }}.png" alt="{{ this }}" />
|
||||
<img width="45" src="{{ ../SERVER_URL }}/img/email_images/wtd-{{ idx }}.png" alt="{{ idx }}" />
|
||||
</td>
|
||||
<td valign="top" style="padding-top: 10px;">
|
||||
<td valign="top" style="padding-top: 10px; font-family: sans-serif;">
|
||||
<p class="body-copy medium" style="color: #333333; font-weight: 400; font-size: 16px; padding: 0px; margin: 0px; ">
|
||||
{{getStringID ../supportedLocales "what-to-do-subhead-" this}}
|
||||
{{ subhead }}
|
||||
</p>
|
||||
<p class="body-copy" style="color: #333333; font-weight: 300; font-size: 14px; padding: 3px 0px 10px 0px; margin-top: 0px; ">
|
||||
{{getStringID ../supportedLocales "what-to-do-blurb-" this}}
|
||||
{{ blurb }}
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
{{/loop}} --}}
|
||||
{{/each}}
|
||||
{{/getWhatToDos}}
|
||||
|
|
Загрузка…
Ссылка в новой задаче