Merge branch 'master' into update-dashboard-and-preferences
|
@ -27,7 +27,7 @@ function getEmailMockUps(req, res) {
|
|||
emailSubject = req.fluentFormat("user-verify-email-report-subject");
|
||||
if(emailType === "breachAlert") {
|
||||
breachAlert = unsafeBreachesForEmail[0];
|
||||
emailSubject = req.fluentFormat("hibp-notify-email-subject");
|
||||
emailSubject = req.fluentFormat("breach-alert-subject");
|
||||
}
|
||||
} else if (emailType === "multipleBreaches") {
|
||||
const breachArray = ["Experian", "Dropbox", "Apollo"];
|
||||
|
|
|
@ -90,13 +90,14 @@ async function notify (req, res) {
|
|||
{defaultLocale: "en"}
|
||||
);
|
||||
|
||||
const subject = LocaleUtils.fluentFormat(supportedLocales, "hibp-notify-email-subject");
|
||||
const subject = LocaleUtils.fluentFormat(supportedLocales, "breach-alert-subject");
|
||||
const template = "default_email";
|
||||
if (!notifiedRecipients.includes(breachedEmail)) {
|
||||
await EmailUtils.sendEmail(
|
||||
recipientEmail, subject, template,
|
||||
{
|
||||
breachedEmail,
|
||||
recipientEmail,
|
||||
supportedLocales,
|
||||
breachAlert,
|
||||
SERVER_URL: req.app.locals.SERVER_URL,
|
||||
|
|
|
@ -80,7 +80,7 @@ async function confirmed(req, res, next, client = FxAOAuthClient) {
|
|||
// req.session.newUser determines whether or not we show "fxa_new_user_bar" in template
|
||||
req.session.newUser = true;
|
||||
const signupLanguage = req.headers["accept-language"];
|
||||
const verifiedSubscriber = await DB.addSubscriber(email, signupLanguage, fxaUser.refreshToken, data.body);
|
||||
const verifiedSubscriber = await DB.addSubscriber(email, signupLanguage, fxaUser.accessToken, fxaUser.refreshToken, data.body);
|
||||
|
||||
// duping some of user/verify for now
|
||||
let unsafeBreachesForEmail = [];
|
||||
|
@ -101,6 +101,7 @@ async function confirmed(req, res, next, client = FxAOAuthClient) {
|
|||
{
|
||||
supportedLocales: req.supportedLocales,
|
||||
breachedEmail: email,
|
||||
recipientEmail: email,
|
||||
date: req.fluentFormat(new Date()),
|
||||
unsafeBreachesForEmail: unsafeBreachesForEmail,
|
||||
scanAnotherEmailHref: EmailUtils.getScanAnotherEmailUrl(utmID),
|
||||
|
@ -110,7 +111,10 @@ async function confirmed(req, res, next, client = FxAOAuthClient) {
|
|||
}
|
||||
);
|
||||
req.session.user = verifiedSubscriber;
|
||||
return res.redirect("/user/dashboard");
|
||||
}
|
||||
// Update existing user's FxA data
|
||||
await DB._updateFxAData(existingUser, fxaUser.accessToken, fxaUser.refreshToken, data.body);
|
||||
res.redirect("/user/dashboard");
|
||||
}
|
||||
|
||||
|
|
|
@ -91,7 +91,7 @@ async function handleComplaintMessage(message) {
|
|||
|
||||
async function removeSubscribersFromDB(recipients) {
|
||||
for (const recipient of recipients) {
|
||||
await DB.removeSubscriberByEmail(recipient.emailAddress);
|
||||
await DB.removeEmail(recipient.emailAddress);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -11,17 +11,19 @@ const HIBP = require("../hibp");
|
|||
const sha1 = require("../sha1-utils");
|
||||
|
||||
|
||||
function _requireSessionUser(req,res) {
|
||||
async function _requireSessionUser(req,res) {
|
||||
if (!req.session || !req.session.user) {
|
||||
// TODO: can we do a nice redirect to sign in instead of an error?
|
||||
throw new FluentError("must-be-signed-in");
|
||||
throw new FluentError("error-must-be-signed-in");
|
||||
}
|
||||
return req.session.user;
|
||||
// make sure the user object has all subscribers and email_addresses properties
|
||||
const sessionUser = await DB.getSubscriberById(req.session.user.id);
|
||||
return sessionUser;
|
||||
}
|
||||
|
||||
async function removeEmail(req, res) {
|
||||
const emailId = req.body.emailId;
|
||||
const sessionUser = _requireSessionUser(req);
|
||||
const sessionUser = await _requireSessionUser(req);
|
||||
const existingEmail = await DB.getEmailById(emailId);
|
||||
if (existingEmail.subscriber_id !== sessionUser.id) {
|
||||
throw new FluentError("error-not-subscribed");
|
||||
|
@ -33,7 +35,7 @@ async function removeEmail(req, res) {
|
|||
|
||||
async function resendEmail(req, res) {
|
||||
const emailId = req.body.emailId;
|
||||
const sessionUser = _requireSessionUser(req);
|
||||
const sessionUser = await _requireSessionUser(req);
|
||||
const existingEmail = await DB.getEmailById(emailId);
|
||||
|
||||
if (!existingEmail || !existingEmail.subscriber_id) {
|
||||
|
@ -52,7 +54,7 @@ async function resendEmail(req, res) {
|
|||
email,
|
||||
req.fluentFormat("user-add-email-verify-subject"),
|
||||
"default_email",
|
||||
{ email,
|
||||
{ recipientEmail: email,
|
||||
supportedLocales: req.supportedLocales,
|
||||
verificationHref: EmailUtils.getVerificationUrl(unverifiedEmailAddressRecord),
|
||||
unsubscribeUrl: EmailUtils.getUnsubscribeUrl(unverifiedEmailAddressRecord, "account-verification-email"),
|
||||
|
@ -65,7 +67,7 @@ async function resendEmail(req, res) {
|
|||
}
|
||||
|
||||
async function updateCommunicationOptions(req, res) {
|
||||
const sessionUser = _requireSessionUser(req);
|
||||
const sessionUser = await _requireSessionUser(req);
|
||||
// 0 = Send breach alerts to the email address found in brew breach.
|
||||
// 1 = Send all breach alerts to user's primary email address.
|
||||
const allEmailsToPrimary = (Number(req.body.communicationOption) === 1) ? true : false;
|
||||
|
@ -89,9 +91,8 @@ function _checkForDuplicateEmail(sessionUser, email) {
|
|||
|
||||
|
||||
async function add(req, res) {
|
||||
const sessionUser = _requireSessionUser(req);
|
||||
const sessionUser = await _requireSessionUser(req);
|
||||
const email = req.body.email;
|
||||
|
||||
if (!email || !isemail.validate(email)) {
|
||||
throw new FluentError("user-add-invalid-email");
|
||||
}
|
||||
|
@ -108,6 +109,7 @@ async function add(req, res) {
|
|||
req.fluentFormat("user-add-email-verify-subject"),
|
||||
"default_email",
|
||||
{ breachedEmail: email,
|
||||
recipientEmail: email,
|
||||
supportedLocales: req.supportedLocales,
|
||||
verificationHref: EmailUtils.getVerificationUrl(unverifiedSubscriber),
|
||||
unsubscribeUrl: EmailUtils.getUnsubscribeUrl(unverifiedSubscriber, "account-verification-email"),
|
||||
|
@ -171,7 +173,7 @@ function getNewBreachesForEmailEntriesSinceDate(emailEntries, date) {
|
|||
|
||||
|
||||
async function getDashboard(req, res) {
|
||||
const user = _requireSessionUser(req, res);
|
||||
const user = await _requireSessionUser(req);
|
||||
const allBreaches = req.app.locals.breaches;
|
||||
const { verifiedEmails, unverifiedEmails } = await getAllEmailsAndBreaches(user, allBreaches);
|
||||
let lastAddedEmail = null;
|
||||
|
@ -210,6 +212,7 @@ async function _verify(req) {
|
|||
"default_email",
|
||||
{
|
||||
breachedEmail: verifiedEmailHash.email,
|
||||
recipientEmail: verifiedEmailHash.email,
|
||||
supportedLocales: req.supportedLocales,
|
||||
unsafeBreachesForEmail: unsafeBreachesForEmail,
|
||||
scanAnotherEmailHref: EmailUtils.getScanAnotherEmailUrl(utmID),
|
||||
|
@ -221,7 +224,7 @@ async function _verify(req) {
|
|||
|
||||
|
||||
async function verify(req, res) {
|
||||
const sessionUser = _requireSessionUser(req, res);
|
||||
const sessionUser = await _requireSessionUser(req);
|
||||
if (!req.query.token) {
|
||||
throw new FluentError("user-verify-token-error");
|
||||
}
|
||||
|
@ -276,7 +279,7 @@ async function getUnsubscribe(req, res) {
|
|||
|
||||
|
||||
async function getRemoveFxm(req, res) {
|
||||
const sessionUser = _requireSessionUser(req);
|
||||
const sessionUser = await _requireSessionUser(req);
|
||||
|
||||
res.render("subpage", {
|
||||
title: req.fluentFormat("remove-fxm"),
|
||||
|
@ -288,9 +291,9 @@ async function getRemoveFxm(req, res) {
|
|||
|
||||
|
||||
async function postRemoveFxm(req, res) {
|
||||
const sessionUser = _requireSessionUser(req);
|
||||
const sessionUser = await _requireSessionUser(req);
|
||||
await DB.removeSubscriber(sessionUser);
|
||||
await FXA.revokeOAuthToken(sessionUser.fxa_refresh_token);
|
||||
await FXA.revokeOAuthTokens(sessionUser);
|
||||
|
||||
req.session.reset();
|
||||
res.redirect("/");
|
||||
|
@ -314,14 +317,14 @@ async function postUnsubscribe(req, res) {
|
|||
await DB.removeOneSecondaryEmail(emailAddress.id);
|
||||
return res.redirect("/user/preferences");
|
||||
}
|
||||
await FXA.revokeOAuthToken(unsubscribedUser.fxa_refresh_token);
|
||||
await FXA.revokeOAuthTokens(unsubscribedUser);
|
||||
req.session.reset();
|
||||
res.redirect("/");
|
||||
}
|
||||
|
||||
|
||||
async function getPreferences(req, res) {
|
||||
const user = _requireSessionUser(req);
|
||||
const user = await _requireSessionUser(req);
|
||||
const allBreaches = req.app.locals.breaches;
|
||||
const { verifiedEmails, unverifiedEmails } = await getAllEmailsAndBreaches(user, allBreaches);
|
||||
|
||||
|
|
74
db/DB.js
|
@ -50,6 +50,18 @@ const DB = {
|
|||
return res;
|
||||
},
|
||||
|
||||
async getSubscriberById(id) {
|
||||
const [subscriber] = await knex("subscribers").where({
|
||||
"id": id,
|
||||
});
|
||||
if (subscriber) {
|
||||
subscriber.email_addresses = await knex("email_addresses").where({
|
||||
"subscriber_id": subscriber.id,
|
||||
});
|
||||
}
|
||||
return subscriber;
|
||||
},
|
||||
|
||||
async getSubscriberByEmail(email) {
|
||||
const [subscriber] = await knex("subscribers").where({
|
||||
"primary_email": email,
|
||||
|
@ -63,6 +75,21 @@ const DB = {
|
|||
return subscriber;
|
||||
},
|
||||
|
||||
async getEmailAddressRecordByEmail(email) {
|
||||
const emailAddresses = await knex("email_addresses").where({
|
||||
"email": email, verified: true,
|
||||
});
|
||||
if (!emailAddresses) {
|
||||
return null;
|
||||
}
|
||||
if (emailAddresses.length > 1) {
|
||||
// TODO: handle multiple emails in separate(?) subscriber accounts?
|
||||
log.warn("getEmailAddressRecordByEmail", {msg: "found the same email multiple times"});
|
||||
}
|
||||
return emailAddresses[0];
|
||||
},
|
||||
|
||||
|
||||
async addSubscriberUnverifiedEmailHash(user, email) {
|
||||
const res = await knex("email_addresses").insert({
|
||||
subscriber_id: user.id,
|
||||
|
@ -148,16 +175,18 @@ const DB = {
|
|||
* 3. For FxA subscriber, add refresh token and profile data
|
||||
*
|
||||
* @param {string} email to add
|
||||
* @param {string} signupLanguage from Accept-Language
|
||||
* @param {string} fxaAccessToken from Firefox Account Oauth
|
||||
* @param {string} fxaRefreshToken from Firefox Account Oauth
|
||||
* @param {string} fxaProfileData from Firefox Account
|
||||
* @returns {object} subscriber knex object added to DB
|
||||
*/
|
||||
async addSubscriber(email, signupLanguage, fxaRefreshToken=null, fxaProfileData=null) {
|
||||
async addSubscriber(email, signupLanguage, fxaAccessToken=null, fxaRefreshToken=null, fxaProfileData=null) {
|
||||
const emailHash = await this._addEmailHash(getSha1(email), email, signupLanguage, true);
|
||||
const verified = await this._verifySubscriber(emailHash);
|
||||
const verifiedSubscriber = Array.isArray(verified) ? verified[0] : null;
|
||||
if (fxaRefreshToken || fxaProfileData) {
|
||||
return this._updateFxAData(verifiedSubscriber, fxaRefreshToken, fxaProfileData);
|
||||
return this._updateFxAData(verifiedSubscriber, fxaAccessToken, fxaRefreshToken, fxaProfileData);
|
||||
}
|
||||
return verifiedSubscriber;
|
||||
},
|
||||
|
@ -218,16 +247,18 @@ const DB = {
|
|||
* Update fxa_refresh_token and fxa_profile_json for subscriber
|
||||
*
|
||||
* @param {object} subscriber knex object in DB
|
||||
* @param {string} fxaAccessToken from Firefox Account Oauth
|
||||
* @param {string} fxaRefreshToken from Firefox Account Oauth
|
||||
* @param {string} fxaProfileData from Firefox Account
|
||||
* @returns {object} updated subscriber knex object in DB
|
||||
*/
|
||||
async _updateFxAData(subscriber, fxaRefreshToken, fxaProfileData) {
|
||||
async _updateFxAData(subscriber, fxaAccessToken, fxaRefreshToken, fxaProfileData) {
|
||||
const fxaUID = JSON.parse(fxaProfileData).uid;
|
||||
const updated = await knex("subscribers")
|
||||
.where("id", "=", subscriber.id)
|
||||
.update({
|
||||
fxa_uid: fxaUID,
|
||||
fxa_access_token: fxaAccessToken,
|
||||
fxa_refresh_token: fxaRefreshToken,
|
||||
fxa_profile_json: fxaProfileData,
|
||||
})
|
||||
|
@ -264,18 +295,35 @@ const DB = {
|
|||
await knex("subscribers").where({"id": subscriber.id}).del();
|
||||
},
|
||||
|
||||
async removeSubscriberByEmail(email) {
|
||||
const sha1 = getSha1(email);
|
||||
return await this._getSha1EntryAndDo(sha1, async aEntry => {
|
||||
await knex("subscribers")
|
||||
.where("id", "=", aEntry.id)
|
||||
// This is used by SES callbacks to remove email addresses when recipients
|
||||
// perma-bounce or mark our emails as spam
|
||||
// Removes from either subscribers or email_addresses as necessary
|
||||
async removeEmail(email) {
|
||||
const subscriber = await this.getSubscriberByEmail(email);
|
||||
if (!subscriber) {
|
||||
const emailAddress = await this.getEmailAddressRecordByEmail(email);
|
||||
if (!emailAddress) {
|
||||
log.warn("removed-subscriber-not-found");
|
||||
return;
|
||||
}
|
||||
await knex("email_addresses")
|
||||
.where({
|
||||
"email": email,
|
||||
"verified": true,
|
||||
})
|
||||
.del();
|
||||
log.info("removed-subscriber", { id: aEntry.id });
|
||||
return aEntry;
|
||||
}, async () => {
|
||||
log.warn("removed-subscriber-not-found");
|
||||
return;
|
||||
});
|
||||
}
|
||||
// This can fail if a subscriber has more email_addresses and marks
|
||||
// a primary email as spam, but we should let it fail so we can see it
|
||||
// in the logs
|
||||
await knex("subscribers")
|
||||
.where({
|
||||
"primary_verification_token": subscriber.primary_verification_token,
|
||||
"primary_sha1": subscriber.primary_sha1,
|
||||
})
|
||||
.del();
|
||||
return;
|
||||
},
|
||||
|
||||
async removeSubscriberByToken(token, emailSha1) {
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
"use strict";
|
||||
|
||||
exports.up = function(knex, Promise) {
|
||||
return knex.schema.table("subscribers", table => {
|
||||
table.string("fxa_access_token");
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function(knex, Promise) {
|
||||
return knex.schema.table("subscribers", table => {
|
||||
table.dropColumn("fxa_access_token");
|
||||
});
|
||||
};
|
|
@ -10,6 +10,7 @@ exports.TEST_SUBSCRIBERS = {
|
|||
primary_email: "firefoxaccount@test.com",
|
||||
primary_verification_token: "0e2cb147-2041-4e5b-8ca9-494e773b2cf1",
|
||||
primary_verified: true,
|
||||
fxa_access_token: "4a4792b89434153f1a6262fbd6a4510c00834ff842585fc4f4d972da158f0fc0",
|
||||
fxa_refresh_token: "4a4792b89434153f1a6262fbd6a4510c00834ff842585fc4f4d972da158f0fc1",
|
||||
fxa_uid: 12345,
|
||||
fxa_profile_json: {},
|
||||
|
@ -42,6 +43,7 @@ exports.TEST_SUBSCRIBERS = {
|
|||
|
||||
exports.TEST_EMAIL_ADDRESSES = {
|
||||
firefox_account: {
|
||||
id: 11111,
|
||||
subscriber_id: 12345,
|
||||
sha1: getSha1("firefoxaccount-secondary@test.com"),
|
||||
email: "firefoxaccount-secondary@test.com",
|
||||
|
|
11
lib/fxa.js
|
@ -11,10 +11,10 @@ const log = mozlog("fxa");
|
|||
|
||||
const FXA = {
|
||||
|
||||
async revokeOAuthToken(fxaRefreshToken) {
|
||||
async destroyOAuthToken(token) {
|
||||
const fxaTokenOrigin = new URL(AppConstants.OAUTH_TOKEN_URI).origin;
|
||||
const tokenDestroyUrl = `${fxaTokenOrigin}/v1/destroy`;
|
||||
const tokenDestroyParams = { refresh_token: fxaRefreshToken };
|
||||
const tokenDestroyParams = token;
|
||||
const tokenDestroyOptions = {
|
||||
method: "POST",
|
||||
headers: {"Authorization": `Bearer ${AppConstants.OAUTH_CLIENT_SECRET}`},
|
||||
|
@ -25,10 +25,15 @@ const FXA = {
|
|||
try {
|
||||
return await got(tokenDestroyUrl, tokenDestroyOptions);
|
||||
} catch (e) {
|
||||
log.error("revokeOAuthToken", {stack: e.stack});
|
||||
log.error("destroyOAuthToken", {stack: e.stack});
|
||||
}
|
||||
},
|
||||
|
||||
async revokeOAuthTokens(subscriber) {
|
||||
await this.destroyOAuthToken({ token: subscriber.fxa_access_token });
|
||||
await this.destroyOAuthToken({ refresh_token: subscriber.fxa_refresh_token });
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -634,3 +634,7 @@ filter-by = Tichayüx achi'el Ruwäch:
|
|||
# Title that appears in the mobile menu bar and opens the mobile menu when clicked.
|
||||
menu = K'utsamaj
|
||||
to-affected-email = Ketaq taq kitzijol tz'ilanem pa ri taqoya'l xtz'iläx
|
||||
# This string appears in a banner at the top of each page and is followed by a "Learn More" link.
|
||||
join-firefox = K'o jun rub'anikil richin nachajij awichinanem. Tatunu' awi' { -brand-name }.
|
||||
# Link title
|
||||
learn-more-link = Tetamäx ch'aqa' chik.
|
||||
|
|
|
@ -98,6 +98,7 @@ error-not-subscribed = Tato e-mailová adresa není přihlášena k odběru zpr
|
|||
error-hibp-throttled = Příliš mnoho spojení ke službě { -brand-HIBP }.
|
||||
error-hibp-connect = Chyba při připojování k { -brand-HIBP }.
|
||||
error-hibp-load-breaches = Nepodařilo se načíst informace o únicích.
|
||||
error-must-be-signed-in = Musíte být přihlášeni do svého { -brand-fxa(case: "gen") }.
|
||||
hibp-notify-email-subject = { -product-name } - upozornění, váš účet byl součástí úniku dat.
|
||||
home-title = { -product-name }
|
||||
home-not-found = Stránka nenalezena.
|
||||
|
@ -138,7 +139,7 @@ pwt-summary-3 =
|
|||
pwt-headline-4 = Získejte pomoc s pamatováním si svých hesel.
|
||||
pwt-summary-4 =
|
||||
Správci hesel jako 1Password, LastPass, Dashlane a Bitwarden umí vygenerovat silná a unikátní hesla.
|
||||
Navíc umí hesla bezpečně uložit a automaticky je za vás na webových stránkách vyplnit.
|
||||
Navíc si umí hesla bezpečně uložit a automaticky je za vás na webových stránkách vyplnit.
|
||||
pwt-headline-5 = Využívejte přidaného zabezpečení pomocí dvoufázového ověřování
|
||||
pwt-summary-5 =
|
||||
Dvoufázové ověřování vyžaduje pro úspěšné přihlášení zadat nějakou dodatečnou informaci (většinou jednorázový kód poslaný přes SMS).
|
||||
|
@ -208,12 +209,12 @@ scan-results =
|
|||
*[other] Účty s vaší e-mailovou adresou byly nalezeny v { $breachCount } dalších únicích.
|
||||
}
|
||||
show-more-breaches = Zobrazit více
|
||||
what-to-do-headline = Co udělat když jsou vaše data součástí nějakého úniku
|
||||
what-to-do-subhead-1 = Změňte svá hesla i pro staré účty
|
||||
what-to-do-headline = Co dělat když jsou vaše údaje součástí nějakého úniku.
|
||||
what-to-do-subhead-1 = Změňte svá hesla i u starých účtů
|
||||
what-to-do-blurb-1 =
|
||||
Pokud se nemůžete přihlásit, kontaktujte správce webové stránky a zeptejte se, jak můžete obnovit přístup ke svému účtu, nebo účet zcela zrušit.
|
||||
Vidíte účet, o kterém vůbec nevíte? Stránka mohla změnit svůj název nebo účet někdo vytvořil za vás.
|
||||
what-to-do-subhead-2 = Pokud používáte stejné heslo, jako o uniklého účtu, změňte ho
|
||||
Pokud se nemůžete přihlásit, kontaktujte správce webu a zeptejte se, jak můžete obnovit přístup do svého účtu, případně jak účet zcela zrušit.
|
||||
Vidíte účet, který vám nic neříká? Web mohl změnit svůj název nebo někdo účet vytvořil za vás.
|
||||
what-to-do-subhead-2 = Pokud vyzrazené heslo používáte i u jiného účtu, změňte ho tam.
|
||||
what-to-do-blurb-2 =
|
||||
Hackeři mohou použít získaná hesla a dostat se s nimi do dalších vašich účtů.
|
||||
Používejte pro každou webovou stránku jiné heslo, hlavně pokud jde o internetové
|
||||
|
@ -223,7 +224,7 @@ what-to-do-blurb-3 =
|
|||
Většina úniků obsahuje vaši e-mailovou adresu a hesla, ale mohou v nich být také citlivé finanční informace.
|
||||
Pokud bylo součástí úniku číslo vašeho účtu nebo karty, informujte svou banku a sledujte, jestli nedochází k nečekaným změnám stavu na vašem účtu.
|
||||
what-to-do-subhead-4 = Nechte si pomoci s vytvářením dobrých hesel a jejich bezpečným uložením.
|
||||
what-to-do-blurb-4 = Správci hesel jako 1Password, LastPass, Dashlane a Bitwarden umí vygenerovat silná hesla, bezpečně je uložit a automaticky je pro vás na webových stránkách vyplnit.
|
||||
what-to-do-blurb-4 = Správci hesel jako 1Password, LastPass, Dashlane a Bitwarden umí vygenerovat silná hesla, bezpečně si je uložit a automaticky je za vás na webových stránkách vyplnit.
|
||||
# breach-date = the calendar date a particular data theft occurred.
|
||||
breach-date = Datum úniku:
|
||||
# compromised accounts = the total number of user accounts exposed in data breach
|
||||
|
@ -376,21 +377,21 @@ signup-banner-sensitive-blurb =
|
|||
Odhalte, co už o vás hackeři vědí, a zůstaňte o krok před nimi.
|
||||
Nechte si posílat upozornění, pokud se váš účet objeví v novém úniku.
|
||||
fxa-pwt-section-blurb =
|
||||
Hesla chrání všechny vaše osobní údaje a online účty. Hackeři spoléhají
|
||||
Hesla chrání všechny vaše osobní údaje a internetové účty. Hackeři spoléhají
|
||||
na špatné zvyky jako je používání stejného hesla na více místech, nebo
|
||||
příliš běžného a lehce uhodnutého hesla (h3sl0). Takže pokud se jim podaří
|
||||
prolomit jeden váš účet, dostanou se velmi rychle dostat i k ostatním.
|
||||
prolomit jeden váš účet, mohou se velmi rychle dostat i k ostatním.
|
||||
fxa-pwt-summary-2 =
|
||||
Krátké jednoslovné heslo je velmi snadné uhodnout. Používejte alespoň
|
||||
dvouslovná hesla s kombinací malých a velkých písmen, čísel a speciálních znaků.
|
||||
fxa-pwt-summary-4 = Správci hesel jako 1Password, LastPass, Dashlane a Bitwarden umí vaše hesla bezpečně uložit a automaticky je pro vás na webových stránkách vyplnit. Pomohou vám i s vytvořením silného hesla.
|
||||
fxa-pwt-summary-6 = Počet úniků dat z webových stránek stoupá. Kdykoliv je nový únik přidán do databáze, { -product-name } vám pošle upozornění, abyste mohli co nejrychleji zareagovat a ochránit svůj účet.
|
||||
fxa-what-to-do-blurb-1 = Pokud se nemůžete přihlásit, kontaktujte správce webové stránky a zeptejte se, jak můžete své heslo změnit. Vidíte účet, o kterém vůbec nevíte? Stránka mohla změnit svůj název nebo jste na nepoužívaný účet už zapomněli.
|
||||
fxa-what-to-do-subhead-2 = Přestaňte používat uniklé heslo a změňte ho všude, kde jste ho použili.
|
||||
fxa-wtd-blurb-2 = Hackeři mohou použít stejné heslo a e-mail a dostat se i do dalších účtů. Pro každý účet používejte jiné heslo, zejména pro internetové bankovnictví a další stránky, které mají vaše citlivé osobní údaje.
|
||||
fxa-what-to-do-blurb-3 = Většina úniků obsahuje jen e-mailové adresy a hesla. V některých ale mohou být citlivé bankovní údaje. Pokud bylo v úniku číslo vašeho účtu nebo platební karty, informujte neprodleně svou banku o možném zneužití. Sledujte také stav svého účtu, jestli se nečekaně nezměnil.
|
||||
fxa-what-to-do-subhead-4 = Nemusíte si sami pamatovat všechna svá hesla.
|
||||
fxa-what-to-do-blurb-4 = Správci hesel jako 1Password, LastPass, Dashlane a Bitwarden umí vaše hesla bezpečně uložit a automaticky je pro vás na webových stránkách vyplnit. Používejte správce hesel na mobilu i počítači a už si svá hesla nebudete muset pamatovat.
|
||||
fxa-pwt-summary-4 = Správci hesel jako 1Password, LastPass, Dashlane a Bitwarden si umí vaše hesla bezpečně uložit a automaticky je za vás na webových stránkách vyplnit. Pomohou vám i s vytvořením silného hesla.
|
||||
fxa-pwt-summary-6 = Počet úniků dat z webových stránek stoupá. Když se vaše osobní údaje objeví v novém úniku dat, { -product-name } vám pošle upozornění, abyste mohli co nejrychleji zareagovat a ochránit svůj účet.
|
||||
fxa-what-to-do-blurb-1 = Pokud se nemůžete přihlásit, kontaktujte správce webu a zeptejte se, jak můžete své heslo změnit. Vidíte účet, který vám nic neříká? Web mohl změnit svůj název nebo jste na nepoužívaný účet už zapomněli.
|
||||
fxa-what-to-do-subhead-2 = Přestaňte uniklé heslo používat a změňte ho všude, kde jste ho použili.
|
||||
fxa-wtd-blurb-2 = Hackeři se mohou pokusit použít toto heslo a vaši e-mailovou adresu k získání přístupu i do dalších vašich účtů. U každého účtu používejte jiné heslo, zejména u internetového bankovnictví a dalších účtů, které obsahují vaše citlivé osobní údaje.
|
||||
fxa-what-to-do-blurb-3 = Většina úniků vyzrazuje jen e-mailové adresy a hesla, ovšem některé obsahují i citlivé finanční údaje. Pokud bylo vyzrazeno číslo vašeho bankovního účtu nebo platební karty, informujte neprodleně svou banku o možném zneužití. Pravidelně také kontrolujte stav svého účtu kvůli podezřelé aktivitě.
|
||||
fxa-what-to-do-subhead-4 = Získejte pomoc s pamatováním si svých hesel a jejich uchováváním v bezpečí.
|
||||
fxa-what-to-do-blurb-4 = Správci hesel jako 1Password, LastPass, Dashlane a Bitwarden si umí vaše hesla bezpečně uložit a automaticky je za vás na webových stránkách vyplnit. Používejte správce hesel na mobilu i počítači a už si svá hesla nebudete muset pamatovat.
|
||||
fb-landing-headline = Byly vaše údaje součástí úniku dat - { $breachName }?
|
||||
copyright = Části tohoto obsahu jsou © 1999-{ $year } jednotlivými přispěvateli mozilla.org.
|
||||
content-available = Obsah je dostupný pod licencí Creative Commons.
|
||||
|
|
|
@ -40,80 +40,82 @@ education-levels = Úrovně vzdělání
|
|||
email-addresses = E-mailové adresy
|
||||
email-messages = E-mailové zprávy
|
||||
employers = Zaměstnavatelé
|
||||
ethnicities = Informace o etnicitě
|
||||
employment-statuses = Zaměstnanecké statusy
|
||||
ethnicities = Etnické příslušnosti
|
||||
family-members-names = Jména rodinných příslušníků
|
||||
family-plans = Rodinné plány
|
||||
family-structure = Struktury rodin
|
||||
family-structure = Rodinné uspořádání
|
||||
financial-investments = Finanční investice
|
||||
financial-transactions = Finanční transakce
|
||||
fitness-levels = Informace o zdraví
|
||||
fitness-levels = Úrovně tělesné zdatnosti
|
||||
genders = Pohlaví
|
||||
geographic-locations = Geografické polohy
|
||||
government-issued-ids = Státem spravované identifikátory
|
||||
geographic-locations = Zeměpisné polohy
|
||||
government-issued-ids = Státem vydané průkazy totožnosti
|
||||
health-insurance-information = Informace o zdravotním pojištění
|
||||
historical-passwords = Stará hesla
|
||||
home-loan-information = Informace o úvěrech na bydlení
|
||||
home-ownership-statuses = Informace o vlastnictví nemovitostí
|
||||
homepage-urls = URL adresy domovských stránek
|
||||
home-ownership-statuses = Stavy vlastnického bydlení
|
||||
homepage-urls = URL domovských stránek
|
||||
imei-numbers = Čísla IMEI
|
||||
imsi-numbers = Čísla IMSI
|
||||
income-levels = Úrovně příjmů
|
||||
instant-messenger-identities = Identity z chatovacích služeb
|
||||
instant-messenger-identities = Identity z instant messengerů
|
||||
ip-addresses = IP adresy
|
||||
job-titles = Názvy pracovních pozic
|
||||
mac-addresses = MAC adresy
|
||||
marital-statuses = Informace o rodinném stavu
|
||||
marital-statuses = Rodinné stavy
|
||||
names = Jména
|
||||
nationalities = Národnosti
|
||||
net-worths = Čisté příjmy
|
||||
net-worths = Čisté jmění
|
||||
nicknames = Přezdívky
|
||||
occupations = Zaměstnání
|
||||
occupations = Povolání
|
||||
parenting-plans = Plány rodičovství
|
||||
partial-credit-card-data = Částečné údaje o platebních kartách
|
||||
passport-numbers = Čísla cestovních pasů
|
||||
password-hints = Nápovědy k heslům
|
||||
passwords = Hesla
|
||||
payment-histories = Historie plateb
|
||||
payment-methods = Platební metody
|
||||
payment-histories = Platební historie
|
||||
payment-methods = Způsoby platby
|
||||
personal-descriptions = Osobní popisy
|
||||
personal-health-data = Osobní zdravotní údaje
|
||||
personal-interests = Osobní zájmy
|
||||
phone-numbers = Telefonní čísla
|
||||
photos = Fotografie
|
||||
physical-addresses = Poštovní dresy
|
||||
physical-attributes = Fyzické vlastnosti
|
||||
pins = Čísla PIN
|
||||
political-donations = Politické dary
|
||||
physical-addresses = Fyzické adresy
|
||||
physical-attributes = Fyziologické rysy
|
||||
pins = PIN kódy
|
||||
political-donations = Dary politickým stranám
|
||||
political-views = Politické názory
|
||||
private-messages = Soukromé zprávy
|
||||
professional-skills = Profesní zkušenosti
|
||||
profile-photos = Profilové fotografie
|
||||
purchases = Nákupy
|
||||
purchasing-habits = Nákupní návyky
|
||||
races = Informace o rasové příslušnosti
|
||||
races = Rasové příslušnosti
|
||||
recovery-email-addresses = Sekundární e-mailové adresy
|
||||
relationship-statuses = Stavy vztahů
|
||||
religions = Informace o náboženství
|
||||
reward-program-balances = Stavy odměn
|
||||
relationship-statuses = Příbuzenské stavy
|
||||
religions = Náboženská vyznání
|
||||
reward-program-balances = Zůstatky ve věrnostních programech
|
||||
salutations = Pozdravy
|
||||
school-grades-class-levels = Stupně školního vzdělání
|
||||
security-questions-and-answers = Bezpečnostní otázky a odpovědi
|
||||
sexual-fetishes = Informace o sexuálních úchylkách
|
||||
sexual-orientations = Informace o sexuální orientaci
|
||||
smoking-habits = Informace o návyku kouření
|
||||
sexual-fetishes = Sexuální fetiše
|
||||
sexual-orientations = Sexuální orientace
|
||||
smoking-habits = Míra kouření cigaret
|
||||
sms-messages = SMS zprávy
|
||||
social-connections = Sociální spojení
|
||||
social-connections = Společenské vztahy
|
||||
social-media-profiles = Profily ze sociálních sítí
|
||||
spoken-languages = Mluvené jazyky
|
||||
support-tickets = Tickety ze stránky podpory
|
||||
social-security-numbers = Čísla sociálního zabezpečení (USA)
|
||||
spoken-languages = Znalosti cizích jazyků
|
||||
support-tickets = Tickety technické podpory
|
||||
survey-results = Výsledky průzkumů
|
||||
time-zones = Časová pásma
|
||||
travel-habits = Cestovní návyky
|
||||
user-statuses = Stavy uživatelů
|
||||
user-website-urls = URL adresy webových stránek uživatelů
|
||||
user-website-urls = URL webových stránek uživatelů
|
||||
usernames = Uživatelská jména
|
||||
utility-bills = Účty
|
||||
vehicle-details = Informace o vozidlech
|
||||
utility-bills = Inkasa (poplatky k nájmu)
|
||||
vehicle-details = Údaje o vozidlech
|
||||
website-activity = Záznamy aktivit na webových stránkách
|
||||
work-habits = Pracovní návyky
|
||||
years-of-birth = Roky narození
|
||||
|
|
|
@ -3,62 +3,62 @@
|
|||
# Firefox is a brand name and should not be translated.
|
||||
-brand-name = Firefox
|
||||
click-to-verify =
|
||||
Potvrďte své přihlášení k Firefox Monitoru do 24 hodin od odeslání tohoto e-mailu.
|
||||
Hlášení o vašich účtech vám pak pošleme co nejdříve.
|
||||
Potvrďte své přihlášení k zasílání upozornění od Firefox Monitoru klepnutím na tlačítko níže do 24 hodin od odeslání tohoto e-mailu.
|
||||
Vaše hlášení vám pak pošleme co nejdříve.
|
||||
verify-my-email = Ověřit e-mailovou adresu
|
||||
report-scan-another-email = Vyhledat další e-mailovou adresu ve { -product-name(case: "loc") }
|
||||
automated-message = Toto je automaticky zaslaný e-mail - pokud jste si ho nevyžádali, můžete ho ignorovat.
|
||||
automated-message = Toto je automaticky zaslaný e-mail – pokud jste si ho nevyžádali, můžete ho ignorovat.
|
||||
# Without HTML markup reads: We sent this message to [user’s email address] because the email address opted into alerts from Firefox Monitor.
|
||||
we-sent-this-alert = Tuto zprávu jsme poslali na adresu { $userEmail }, protože jste ji vy nebo někdo jiný přihlásil k zasílání upozornění z { -product-name(case: "gen") }.
|
||||
unsubscribe-email-link = Pokud už nechcete upozornění z { -product-name(case: "gen") } dostávat, odhlaste se.
|
||||
we-sent-this-alert = Tuto zprávu jsme poslali na adresu { $userEmail }, protože byla přihlášena k dostávání upozornění od { -product-name(case: "gen") }.
|
||||
unsubscribe-email-link = Pokud již nechcete upozornění od { -product-name(case: "gen") } dostávat, odhlaste se.
|
||||
# A Firefox Monitor Report is an emailed statement from Firefox Monitor containing a list of known data breaches where the user’s email address was found amongst the stolen data.
|
||||
firefox-monitor-report = Hlášení { -product-name(case: "gen") }
|
||||
report-date = Datum nahlášení:
|
||||
report-date = Datum:
|
||||
email-address = E-mailová adresa:
|
||||
# "full report" should be understood to mean the "complete report" or, the complete list of known data breaches that included the user’s information.
|
||||
your-full-report = Toto je kompletní hlášení z { -product-name(case: "gen") }, které obsahuje všechny známé úniky dat s touto e-mailovou adresou.
|
||||
your-full-report = Toto je kompletní hlášení z { -product-name(case: "gen") }, které obsahuje všechny známé úniky dat, v nichž se vyskytuje tato e-mailová adresa.
|
||||
report-no-breaches =
|
||||
Vaše e-mailová adresa není v naší databázi známých úniků dat.
|
||||
K dalšímu úniku dat ale může dojít kdykoliv. Zabezpečte svá osobní data na internetu.
|
||||
Vaše e-mailová adresa se nevyskytuje v naší databázi známých úniků dat.
|
||||
K dalšímu úniku ale může dojít kdykoliv. Podnikněte tyto kroky, které vám pomohou ochránit své osobní údaje na internetu.
|
||||
# A list of next steps someone should take if their information has been involved in a data breach.
|
||||
what-to-do-next = Co dál
|
||||
what-to-do-next = Co teď dělat?
|
||||
report-headline =
|
||||
{ $breachCount ->
|
||||
[0] Zatím jde všechno dobře.
|
||||
[one] Váš účet byl nalezen v jednom úniku dat.
|
||||
[few] Váš účet byl nalezen ve { $breachCount } únicích dat.
|
||||
*[other] Váš účet byl nalezen v { $breachCount } únicích dat.
|
||||
[one] Váš účet se objevil v jednom úniku dat.
|
||||
[few] Váš účet se objevil ve { $breachCount } únicích dat.
|
||||
*[other] Váš účet se objevil v { $breachCount } únicích dat.
|
||||
}
|
||||
report-subhead-no-breaches =
|
||||
Váš účet nebyl součástí naší databáze úniků dat.
|
||||
Váš účet se nevyskytuje v našem kompletním hlášení o únicích dat.
|
||||
To je dobrá zpráva, ale pořád ještě můžete něco zlepšovat.
|
||||
K dalšímu úniku dat může dojít kdykoliv. Přečtěte si, jak můžete ochránit svá hesla.
|
||||
report-subhead-found-breaches = Toto je vaše kompletní hlášení z Firefox Monitoru, které obsahuje všechny známé úniky dat s touto e-mailovou adresou.
|
||||
report-subhead-found-breaches = Toto je vaše kompletní hlášení z Firefox Monitoru, které obsahuje všechny známé úniky dat, v nichž se vyskytuje tato e-mailová adresa.
|
||||
breach-alert-headline = Váš účet byl součástí úniku dat.
|
||||
breach-alert-subhead = Nedávno nahlášený únik dat obsahuje vaši e-mailovou adresu a následující data
|
||||
report-pwt-blurb =
|
||||
Hesla jsou velmi cenná a proto jich jsou denně ukradeny tisíce a tisíce a směňovány nebo prodávány na černém trhu.
|
||||
Hesla jsou velmi cenná a proto jich jsou denně ukradeny tisíce, načež jsou pak směňovány nebo prodávány na černém trhu.
|
||||
Silnější hesla lépe chrání vaše účty a všechna osobní data, která v nich máte uložena.
|
||||
report-pwt-headline-1 = Používejte rozdílná hesla pro každý účet
|
||||
report-pwt-headline-1 = Používejte u každého účtu jiné heslo
|
||||
report-pwt-summary-1 =
|
||||
Používáním stejného hesla necháváte hackerům otevřené dveře.
|
||||
I oni mohou použít stejné heslo pro přihlášení ke všem vašim účtům.
|
||||
Opakovaným používáním jednoho hesla necháváte hackerům otevřené dveře.
|
||||
Mohou ho totiž použít k přihlášení se i do jiných vašich účtů.
|
||||
report-pwt-headline-2 = Vytvářejte silná a unikátní hesla
|
||||
report-pwt-summary-2 = Hackeři používají seznam běžně používaných hesel, aby se pokusili uhodnout to vaše. Čím delší a náhodnější je vaše heslo, tím těžší ho bude uhádnout.
|
||||
report-pwt-headline-3 = Považujte bezpečnostní otázky jako hesla
|
||||
report-pwt-summary-2 = Hackeři při pokusu o uhodnutí vašeho hesla užívají seznam běžně používaných hesel. Čím delší a náhodnější je vaše heslo, tím těžší ho bude uhádnout.
|
||||
report-pwt-headline-3 = Bezpečnostní otázky berte jako přídavná hesla
|
||||
report-pwt-summary-3 =
|
||||
Webové stránky nekontrolují, jestli jsou vaše odpovědi správně, jenom jestli jsou pokaždé stejné.
|
||||
Webové stránky nekontrolují, jestli jsou vaše odpovědi správně, nýbrž jenom jestli jsou pokaždé stejné.
|
||||
Připravte si dlouhé a náhodné odpovědi a někam si je bezpečně uložte.
|
||||
report-pwt-headline-4 = Používejte správce hesel
|
||||
report-pwt-summary-4 = Správci hesel jako 1Password, LastPass, Dashlane a Bitwarden umí vygenerovat silná, bezpečně je uložit a automaticky je pro vás na webových stránkách vyplnit, takže si nemusíte každé pamatovat.
|
||||
report-pwt-summary-4 = Správci hesel jako 1Password, LastPass, Dashlane a Bitwarden umí vygenerovat silná hesla, bezpečně si je uložit a automaticky je za vás na webových stránkách vyplnit, takže už si ani nemusíte každé pamatovat.
|
||||
# A link to legal information about mozilla products.
|
||||
legal = Právní informace
|
||||
# Share Firefox Monitor by email subject line
|
||||
share-by-email-subject = Zjistěte, jestli vaše data byla součástí nějakého úniku.
|
||||
share-by-email-subject = Zjistěte, zda jste nebyli součástí nějakého úniku dat.
|
||||
# Share Firefox Monitor by email message. {"https://monitor.firefox.com"} should not be translated or modified.
|
||||
share-by-email-message =
|
||||
Zdravím,
|
||||
{ -brand-name } je služba, která je zdarma a kde můžete zkontrolovat, jestli byla některá vaše osobní data na internetu součástí úniku. Jak to funguje:
|
||||
1. Otevřete { "https://monitor.firefox.com" } a zadejte do vyhledávacího pole svou e-mailovou adresu.
|
||||
2. Uvidíte, jestli byl váš účet součástí nějakého úniku dat.
|
||||
{ -brand-name } má bezplatnou službu, u níž si můžete zkontrolovat, jestli jste nebyli součástí nějakého úniku dat. Jak to funguje:
|
||||
1. Přejděte na adresu { "https://monitor.firefox.com" } a vyhledejte svou e-mailovou adresu.
|
||||
2. Uvidíte, jestli byly vaše internetové účty součástí úniku dat.
|
||||
3. { -product-name } vám nabídne pár tipů, co dál a jak zůstat v bezpečí.
|
||||
|
|
|
@ -26,6 +26,7 @@ error-not-subscribed = Nid yw'r cyfeiriad e-bost hwn wedi'i danysgrifio i { -pro
|
|||
error-hibp-throttled = Gormod o gysylltiadau i { -brand-HIBP }.
|
||||
error-hibp-connect = Gwall wrth gysylltu i { -brand-HIBP }.
|
||||
error-hibp-load-breaches = Methu llwytho'r tor-data.
|
||||
error-must-be-signed-in = Rhaid eich bod wedi eich mewngofnodi i'ch { -brand-fxa }.
|
||||
hibp-notify-email-subject = Rhybudd { -product-name }: Mae eich cyfrif wedi ei gynnwys mewn tor-data.
|
||||
home-title = { -product-name }
|
||||
home-not-found = Heb ganfod tudalen.
|
||||
|
|
|
@ -642,3 +642,7 @@ filter-by = Filtrer efter kategori:
|
|||
# Title that appears in the mobile menu bar and opens the mobile menu when clicked.
|
||||
menu = Menu
|
||||
to-affected-email = Send alle advarsler om datalæk til den berørte mailadresse
|
||||
# This string appears in a banner at the top of each page and is followed by a "Learn More" link.
|
||||
join-firefox = Beskyt dit privatliv på nettet. Slut dig til { -brand-name }.
|
||||
# Link title
|
||||
learn-more-link = Læs mere.
|
||||
|
|
|
@ -26,6 +26,7 @@ error-not-subscribed = Diese E-Mail-Adresse hat { -product-name } nicht abonnier
|
|||
error-hibp-throttled = Zu viele Verbindungen mit { -brand-HIBP }.
|
||||
error-hibp-connect = Fehler beim Verbinden mit { -brand-HIBP }.
|
||||
error-hibp-load-breaches = Sicherheitslecks konnten nicht geladen werden.
|
||||
error-must-be-signed-in = Sie müssen bei Ihrem { -brand-fxa } angemeldet sein.
|
||||
hibp-notify-email-subject = { -product-name }: Warnung: Dein Konto war von einem Datenleck betroffen.
|
||||
home-title = { -product-name }
|
||||
home-not-found = Seite nicht gefunden.
|
||||
|
@ -189,7 +190,7 @@ share-other = Andere
|
|||
share-twitter = Die meisten Menschen haben circa 100 Online-Konten. Wurde eines deiner Konten bei einem Datenleck geknackt? Finde es heraus.
|
||||
share-facebook-headline = Überprüfe, ob du von einem Datenleck betroffen bist.
|
||||
share-facebook-blurb = Wurden deine Online-Konten bei einem Datenleck geknackt?
|
||||
og-site-description = Überprüfe mit { -product-name }, ob du von einem Datenleck betroffen bist. Melde dich für Warnungen zu zukünftigen Datenleaks an und erhalte Tipps zum Schutz deiner Online-Konten.
|
||||
og-site-description = Überprüfe mit { -product-name }, ob du von einem Datenleck betroffen bist. Melde dich für Warnungen zu zukünftigen Datenlecks an und erhalte Tipps zum Schutz deiner Online-Konten.
|
||||
mozilla-security-blog = { -brand-Mozilla } Sicherheitsblog
|
||||
# A header for a list of links to share Firefox Monitor on various social media platforms.
|
||||
layout-social = Soziale Medien
|
||||
|
@ -277,7 +278,7 @@ guest-fb-not-compromised-blurb-v2 =
|
|||
user-found-breaches-blurb =
|
||||
{ $breachCount ->
|
||||
[one] Dieses Datenleck enthielt die folgenden persönlichen Daten. Ändere dein Passwort, falls du es noch nicht getan hast.
|
||||
*[other] Dieses Datenleck enthielt die folgenden persönlichen Daten. Ändere dein Passwort, falls du es noch nicht getan hast.
|
||||
*[other] Diese Datenlecks enthielten die folgenden persönlichen Daten. Ändere deine Passwörter, falls du es noch nicht getan hast.
|
||||
}
|
||||
# While English doesn’t use the actual number of breaches in this sentence,
|
||||
# you can use {$breachCount} to display the number of breaches in your localization.
|
||||
|
@ -391,7 +392,7 @@ even-for-old = Auch für ältere Accounts sollten Passwörter erneuert werden.
|
|||
make-new-pw-unique = Das neue Passwort sollte anders und einzigartig sein.
|
||||
strength-of-your-pw = Die Stärke deines Passworts hat direkte Auswirkungen auf deine Online-Sicherheit.
|
||||
create-strong-passwords = So erstellst du starke Passwörter
|
||||
stop-reusing-pw = Benutze nie dieselben Passwörter für unterschiedlich Accounts
|
||||
stop-reusing-pw = Benutze nie dieselben Passwörter für unterschiedliche Accounts
|
||||
create-unique-pw = Erstelle einzigartige Passwörter und speichere sie an einem sicheren Ort. Zum Beispiel in einem Passwort-Manager.
|
||||
five-myths = 5 Mythen über Passwort-Manager
|
||||
create-a-fxa = Erstelle ein { -brand-fxa }, um deinen kompletten Bericht zu Datenlecks und zukünftige Warnmeldungen zu erhalten.
|
||||
|
|
|
@ -370,9 +370,27 @@ breaches = Παραβιάσεις
|
|||
# Link title
|
||||
security-tips = Συμβουλές ασφαλείας
|
||||
fxa-account = { -brand-fxa }
|
||||
# Aria button message to open menu. "Open Firefox Account Navigation"
|
||||
open-fxa-menu = Άνοιγμα πλοήγησης { -brand-fxa }
|
||||
|
||||
## What to do after data breach tips
|
||||
|
||||
faq1 = Δεν αναγνωρίζω αυτή την εταιρεία ή ιστοσελίδα. Γιατί είμαι σε αυτή την παραβίαση;
|
||||
faq2 = Γιατί πέρασε τόσος καιρός μέχρι να ενημερωθώ για αυτή την παραβίαση;
|
||||
faq3 = Πώς ξέρω αν αυτό είναι ένα γνήσιο email από το { -product-name };
|
||||
new-breaches-found =
|
||||
{ $breachCount ->
|
||||
[one] ΒΡΕΘΗΚΕ { $breachCount } ΝΕΑ ΠΑΡΑΒΙΑΣΗ
|
||||
*[other] ΒΡΕΘΗΚΑΝ { $breachCount } ΝΕΕΣ ΠΑΡΑΒΙΑΣΕΙΣ
|
||||
}
|
||||
fb-not-comp = Αυτό το email δεν εμφανίστηκε στην παραβίαση { $breachName }.
|
||||
fb-comp-only = Αυτό το email εμφανίστηκε στην παραβίαση { $breachName }.
|
||||
no-results-blurb = Λυπούμαστε, αυτή η παραβίαση δεν είναι στη βάση δεδομένων μας.
|
||||
all-breaches-headline = Όλες οι παραβιάσεις στο { -product-name }
|
||||
search-breaches = Αναζήτηση παραβιάσεων
|
||||
# "Appears in-page as: Showing: All Breaches"
|
||||
currently-showing = Εμφάνιση:
|
||||
all-breaches = Όλες οι παραβιάσεις
|
||||
|
||||
## Updated error messages
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@ error-not-subscribed = This email address is not subscribed to { -product-name }
|
|||
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.
|
||||
error-must-be-signed-in = You must be signed in to your { -brand-fxa }.
|
||||
hibp-notify-email-subject = { -product-name } Alert: Your account was involved in a breach.
|
||||
home-title = { -product-name }
|
||||
home-not-found = Page not found.
|
||||
|
|
|
@ -29,8 +29,7 @@ error-not-subscribed = This email address is not subscribed to {-product-name}.
|
|||
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.
|
||||
error-must-be-signed-in = You must be signed in to your {-brand-fxa}.
|
||||
|
||||
home-title = {-product-name}
|
||||
home-not-found = Page not found.
|
||||
|
@ -487,9 +486,6 @@ open-fxa-menu = Open {-brand-fxa} navigation
|
|||
# Appears above a snippet about the breach most recently reported to Firefox Monitor.
|
||||
latest-breach = LATEST BREACH ADDED
|
||||
|
||||
breach-added = Breach reported:
|
||||
breach-discovered = Breach discovered:
|
||||
|
||||
# Link title
|
||||
more-about-this-breach = More about this breach
|
||||
|
||||
|
@ -863,7 +859,6 @@ join-firefox = There is a way to protect your privacy. Join {-brand-name}.
|
|||
# Link title
|
||||
learn-more-link = Learn more.
|
||||
|
||||
|
||||
email-sent = Email Sent!
|
||||
|
||||
# Form title
|
||||
|
@ -885,3 +880,7 @@ manage-all-emails = Manage all email addresses in { $preferencesLink }.
|
|||
# alerts for all of their monitored email addresses to a single
|
||||
# email address.
|
||||
breach-alert-notifications = Breach Alert Notifications
|
||||
|
||||
# This string is a label for the calendar date a breach is added to the database
|
||||
# and is followed by that date.
|
||||
breach-added-label = Breach added:
|
|
@ -26,6 +26,7 @@ error-not-subscribed = Esta dirección de correo electrónico no está suscrita
|
|||
error-hibp-throttled = Demasiadas conexiones a { -brand-HIBP }.
|
||||
error-hibp-connect = Error al conectar con { -brand-HIBP }.
|
||||
error-hibp-load-breaches = No se pudieron cargar las violaciones de seguridad.
|
||||
error-must-be-signed-in = Tenés que iniciar la sesión en tu { -brand-fxa }.
|
||||
hibp-notify-email-subject = Alerta de { -product-name }: Tu cuenta estuvo involucrada en una violación de seguridad.
|
||||
home-title = { -product-name }
|
||||
home-not-found = Página no encontrada.
|
||||
|
@ -61,12 +62,12 @@ pwt-summary-4 = Los administradores de contraseñas como 1Password, LastPass, Da
|
|||
pwt-headline-5 = Agregá seguridad adicional con la autenticación de dos factores
|
||||
pwt-summary-5 = 2FA requiere información adicional (como un código de una sola vez enviado por mensaje de texto) para iniciar sesión en tu cuenta. Incluso si alguien tiene tu contraseña no puede entrar.
|
||||
pwt-headline-6 = Registrate para recibir las alertas de { -product-name-nowrap }
|
||||
pwt-summary-6 = Las violaciones de datos de sitios web están en aumento. Tan pronto como se agrega una nueva violación a nuestra base de datos, { -product-name-nowrap } te envía una alerta para que puedas tomar medidas y proteger tu cuenta.
|
||||
pwt-summary-6 = Las violaciones de datos de sitios web están en aumento. Así como se agrega una nueva violación a nuestra base de datos, { -product-name-nowrap } te envía una alerta para que puedas tomar medidas y proteger tu cuenta.
|
||||
landing-headline = Tu derecho a estar a salvo de los piratas comienza aquí.
|
||||
landing-blurb = { -product-name-nowrap } te brinda herramientas para mantener segura tu información personal. Descubrí lo que los piratas ya saben de vos y aprendé cómo mantenerte un paso adelante de ellos.
|
||||
scan-label = Mirá si te involucraste en una violación de datos.
|
||||
scan-label = Fijate si estás involucrado en alguna violación de datos.
|
||||
scan-placeholder = Ingresá la dirección de correo electrónico
|
||||
scan-privacy = Tu dirección de correo electrónico no será almacenado.
|
||||
scan-privacy = Tu dirección de correo electrónico no será almacenada.
|
||||
scan-submit = Buscá tu dirección de correo electrónico
|
||||
scan-another-email = Escanear otra dirección de correo electrónico
|
||||
scan-featuredbreach-label = Averigüá si tu cuenta <span class="bold"> { $featuredBreach } </span> fue comprometida.
|
||||
|
@ -78,20 +79,20 @@ download-firefox-bar-blurb = { -product-name-nowrap } es presentado por el <span
|
|||
download-firefox-bar-link = Descargar { -brand-name } ahora
|
||||
download-firefox-banner-blurb = Tomá el control de tu navegador
|
||||
download-firefox-banner-button = Descargar { -brand-name }
|
||||
signup-modal-headline = Registrarse para { -product-name-nowrap }
|
||||
signup-modal-blurb = Registrarse para obtener tu informe completo, alertas cuando ocurran nuevas violaciones y consejos de seguridad de { -product-name-nowrap }.
|
||||
signup-modal-headline = Registrate para obtener { -product-name-nowrap }
|
||||
signup-modal-blurb = Registrate para obtener un informe completo, alertas cuando ocurran nuevas violaciones y consejos de seguridad de { -product-name-nowrap }.
|
||||
signup-modal-close = Cerrar
|
||||
get-your-report = Conseguí tu informe
|
||||
signup-modal-verify-headline = Verificá tu suscripción
|
||||
signup-modal-verify-blurb = Enviamos un enlace de verificación a <span id="submitted-email" class="medium"></span>.
|
||||
signup-modal-verify-expiration = Este enlace caduca en 24 horas.
|
||||
signup-modal-verify-resend = ¿No está en la bandeja de entrada o en el correo basura? Reenviar
|
||||
signup-modal-verify-resend = ¿No está en la bandeja de entrada o en el correo basura? Reenviar el mensaje.
|
||||
# Appears after Firefox Monitor has sent a verification email to a new user.
|
||||
signup-modal-sent = ¡Enviado!
|
||||
signup-with-fxa = Registrarse con la cuenta { -brand-name }
|
||||
signup-with-fxa = Registrate con la cuenta { -brand-name }
|
||||
form-signup-placeholder = Ingresar dirección de correo electrónico
|
||||
form-signup-checkbox = Obtené lo último de { -brand-Mozilla } y { -brand-name }.
|
||||
sign-up = Registrarse
|
||||
sign-up = Registrate
|
||||
form-signup-error = Debe ser una dirección de correo electrónico válida
|
||||
no-breaches-headline = Por ahora va todo bien.
|
||||
found-breaches-headline = Tu información fue parte de una violación de datos.
|
||||
|
@ -318,7 +319,7 @@ breach-discovered = Violación descubierta:
|
|||
more-about-this-breach = Más acerca de esta violación
|
||||
take-control = Recuperá el control de tu información personal.
|
||||
cant-stop-hackers = No podés evitar que te pirateen los piratas, pero sí podés evitar la malas prácticas que les facilitan el trabajo.
|
||||
read-more-tips = Leer consejos de seguridad
|
||||
read-more-tips = Ver más consejos de seguridad
|
||||
how-hackers-work = Entender cómo trabajan los piratas
|
||||
monitor-your-online-accounts = Registrate para el control de violaciones con { -brand-fxa }.
|
||||
stay-alert = Mantenete alerta a las nuevas violaciones
|
||||
|
@ -534,8 +535,8 @@ security-tips-headline = Consejos de seguridad para protegerte de los hackers.
|
|||
steps-to-protect = Pasos a seguir para proteger tu identidad en línea
|
||||
take-further-steps = Tomá medidas adicionales para proteger tu identidad
|
||||
alert-about-new-breaches = Alertarme sobre nuevas filtraciones.
|
||||
see-if-youve-been-part = Vea si has sido parte de una filtración de datos en línea.
|
||||
get-ongoing-breach-monitoring = Obtener monitoreo contínuo de filtraciones para múltiples direcciones de correo electrónico.
|
||||
see-if-youve-been-part = Fijate si fuiste parte de una violación de datos en línea.
|
||||
get-ongoing-breach-monitoring = Obtené el monitoreo contínuo de las violaciones de datos para múltiples direcciones de correo electrónico.
|
||||
# This is a button and follows a headline reading "Was your info exposed in the ___ breach?"
|
||||
find-out = Averiguar
|
||||
new-unsub-error = Necesitás darte de baja de uno de los correos electrónicos enviados por { -product-name }.
|
||||
|
@ -564,3 +565,7 @@ filter-by = Filtrar por categoría:
|
|||
# Title that appears in the mobile menu bar and opens the mobile menu when clicked.
|
||||
menu = Menú
|
||||
to-affected-email = Enviar alertas de filtración a la dirección de correo electrónico afectada
|
||||
# This string appears in a banner at the top of each page and is followed by a "Learn More" link.
|
||||
join-firefox = Hay una manera de proteger tu privacidad. Unite a { -brand-name }.
|
||||
# Link title
|
||||
learn-more-link = Conocer más.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
account-balances = Saldos de cuentas
|
||||
address-book-contacts = Contactos de la Libreta de direcciones
|
||||
age-groups = Grupos de edad
|
||||
age-groups = Grupos etarios
|
||||
ages = Edades
|
||||
apps-installed-on-devices = Aplicaciones instaladas en dispositivos
|
||||
astrological-signs = Signos astrológicos
|
||||
|
@ -18,7 +18,7 @@ bios = Biografías
|
|||
browser-user-agent-details = Detalles del agente de usuario del navegador
|
||||
browsing-histories = Historiales de navegación
|
||||
buying-preferences = Preferencias de compra
|
||||
car-ownership-statuses = Estados de propiedad del coche
|
||||
car-ownership-statuses = Estados de propiedad del automotor
|
||||
career-levels = Niveles de carrera
|
||||
cellular-network-names = Nombres de redes celulares
|
||||
charitable-donations = Donaciones de caridad
|
||||
|
@ -28,13 +28,13 @@ credit-cards = Tarjetas de crédito
|
|||
credit-status-information = Información del estado del crédito
|
||||
customer-feedback = Opiniones de los clientes
|
||||
customer-interactions = Interacciones con el cliente
|
||||
dates-of-birth = Años de nacimiento
|
||||
dates-of-birth = Fechas de nacimiento
|
||||
deceased-date = Fecha de fallecimiento
|
||||
deceased-statuses = Estados de los fallecidos
|
||||
device-information = Información del dispositivo
|
||||
device-usage-tracking-data = Datos de rastreo del uso del dispositivo
|
||||
drinking-habits = Hábitos de bebida
|
||||
drug-habits = Hábitos de drogas
|
||||
drinking-habits = Hábitos de consumo de bebidas
|
||||
drug-habits = Hábitos de consumo de drogas
|
||||
eating-habits = Hábitos alimenticios
|
||||
education-levels = Niveles de educación
|
||||
email-addresses = Direcciones de correo electrónico
|
||||
|
@ -50,7 +50,7 @@ financial-transactions = Transacciones financieras
|
|||
fitness-levels = Niveles de condición física
|
||||
genders = Géneros
|
||||
geographic-locations = Ubicaciones geográficas
|
||||
government-issued-ids = Documentos de identidad emitidos por el Gobierno
|
||||
government-issued-ids = IDs emitidos por el Gobierno
|
||||
health-insurance-information = Información del seguro de salud
|
||||
historical-passwords = Contraseñas históricas
|
||||
home-loan-information = Información del préstamo hipotecario
|
||||
|
@ -63,16 +63,16 @@ instant-messenger-identities = Identidades de mensajería instantánea
|
|||
ip-addresses = Direcciones IP
|
||||
job-titles = Cargos laborales
|
||||
mac-addresses = Direcciones MAC
|
||||
marital-statuses = Estados maritales
|
||||
marital-statuses = Estados civiles
|
||||
names = Nombres
|
||||
nationalities = Nacionalidades
|
||||
net-worths = Valores netos
|
||||
net-worths = Nivel de ingresos
|
||||
nicknames = Apodos
|
||||
occupations = Ocupaciones
|
||||
parenting-plans = Planes de crianza
|
||||
partial-credit-card-data = Datos parciales de la tarjeta de crédito
|
||||
passport-numbers = Números del pasaporte
|
||||
password-hints = Sugerencias de la contraseña
|
||||
password-hints = Sugerencias para la contraseña
|
||||
passwords = Contraseñas
|
||||
payment-histories = Historiales de pago
|
||||
payment-methods = Métodos de pago
|
||||
|
|
|
@ -32,8 +32,8 @@ report-pwt-blurb = Las contraseñas son tan valiosas que miles de ellas son roba
|
|||
report-pwt-headline-1 = Usá una contraseña diferente para cada cuenta
|
||||
report-pwt-summary-1 = Reutilizar la misma contraseña en todas partes abre la puerta a los piratas. Pueden usar esa contraseña para iniciar sesión en tus otras cuentas.
|
||||
report-pwt-headline-2 = Creá contraseñas seguras y únicas.
|
||||
report-pwt-summary-2 = Los piratas usan miles de contraseñas comunes para tratar de adivinar la tuya. Cuanto más larga y aleatoria sea tu contraseña, más difícil será de adivinar.
|
||||
report-pwt-headline-3 = Tratá las preguntas de seguridad como contraseñas adicionales
|
||||
report-pwt-summary-2 = Los piratas usan miles de contraseñas comunes para tratar de adivinar la tuya. Cuanto más larga y aleatoria sea tu contraseña, será más difícil de adivinar.
|
||||
report-pwt-headline-3 = Tratá las preguntas de seguridad como contraseñas adicionales
|
||||
report-pwt-summary-3 = Los sitios web no verifican que tus respuestas sean precisas, solo que coincidan cada vez. Creá respuestas largas y aleatorias y guardalas en un lugar seguro.
|
||||
report-pwt-headline-4 = Usá un administrador de contraseñas
|
||||
report-pwt-summary-4 = Los servicios como 1Password, LastPass, Dashlane y Bitwarden generan contraseñas seguras, las almacenan de forma segura y las rellenan en sitios web para que no tengas que recordar cada una de ellas.
|
||||
|
@ -44,7 +44,7 @@ share-by-email-subject = Fijate si fuiste parte de una violación de datos.
|
|||
# Share Firefox Monitor by email message. {"https://monitor.firefox.com"} should not be translated or modified.
|
||||
share-by-email-message =
|
||||
Hola,
|
||||
{ -brand-name } tiene un servicio gratuito donde podés verificar si fuiste parte de una violación de datos. Así es como funciona:
|
||||
{ -brand-name } tiene un servicio gratuito donde podés verificar si fuiste parte de una violación de datos. Funciona así:
|
||||
1. Andá a { "https://monitor.firefox.com" } y buscá tu correo electrónico.
|
||||
2. Fijate si tus cuentas en línea se expusieron a una violación de datos.
|
||||
2. Fijate si tus cuentas en línea se expusieron en una violación de datos.
|
||||
3. Obtené consejos de { -product-name } sobre lo que hacer a continuación.
|
||||
|
|
|
@ -350,9 +350,87 @@ monitor-several-emails = Monitorea varios corres electrónicos
|
|||
take-action = Actúa para proteger tus cuentas
|
||||
keep-your-data-safe = Descubre lo que necesitas hacer para mantener tu información segura de los criminales cibrenéticos.
|
||||
website-breach = Violación del sitio web
|
||||
sensitive-breach = Filtración de datos sensible del sitio web
|
||||
data-aggregator-breach = Filtración de recopilador de datos
|
||||
unverified-breach = Filtración no verificada
|
||||
spam-list-breach = Lista de filtración no deseada
|
||||
website-breach-plural = Filtraciones de sitios web
|
||||
sensitive-breach-plural = Filtraciones sensibles
|
||||
data-aggregator-breach-plural = Filtraciones de recopiladores de datos
|
||||
unverified-breach-plural = Filtraciones sin verificar
|
||||
spam-list-breach-plural = Listas de filtraciones no deseadas
|
||||
what-data = Qué datos fueron comprometidos:
|
||||
sensitive-sites = ¿Cómo trata { -product-name } los sitios sensibles?
|
||||
sensitive-sites-copy =
|
||||
{ -product-name } solo revela las cuentas asociadas con estos
|
||||
tipos de filtraciones una vez que se ha verificado la dirección de correo electrónico. Esto significa que eres la
|
||||
única persona que puede ver si tu información estaba expuesta (a menos que alguien
|
||||
más también tenga acceso a tu cuenta de correo electrónico).
|
||||
delayed-reporting-headline = ¿Por qué se tardó tanto en informar de esta filtración?
|
||||
delayed-reporting-copy =
|
||||
A veces pueden pasar meses o años antes de que las credenciales que se expusieron
|
||||
en una filtración de datos aparezcan en la web oscura. Las filtraciones se añaden a nuestra base de datos en cuanto se descubren y verifican.
|
||||
about-fxm-headline = Acerca de { -product-name }
|
||||
about-fxm-blurb = { -product-name } te advierte si tus cuentas en línea estuvieron involucradas en un filtración de datos. Averigua si se han expuesto tus datos, recibe alertas sobre nuevas filtraciones y toma medidas para proteger tus cuentas en línea. { -brand-Mozilla } patrocina { -product-name }.
|
||||
fxm-warns-you = { -product-name } te advierte si tus cuentas en línea estuvieron involucradas en un filtración de datos. Verifica si tu información ha sido expuesta, aprende cómo proteger mejor tus cuentas en línea y recibe alertas si tu dirección de correo se encuentra nuevamente en riesgo.
|
||||
# How Firefox Monitor works
|
||||
how-fxm-works = Cómo funciona { -product-name }
|
||||
how-fxm-1-headline = Hacer una búsqueda básica
|
||||
how-fxm-1-blurb =
|
||||
Busca tu dirección de correo electrónico en las filtraciones de datos públicos yendo hacia atrás
|
||||
a 2007. Esta búsqueda básica mostrará la mayoría de las filtraciones de datos, pero no
|
||||
las que contienen información personal privada.
|
||||
how-fxm-2-headline = Regístrate para monitorear las filtraciones
|
||||
how-fxm-2-blurb =
|
||||
Crea una { -brand-fxa } para controlar tu correo electrónico en busca de filtraciones continuas.
|
||||
Una vez que hayas verificado tu correo electrónico, también recibirás un informe completo de las infracciones anteriores, incluyendo las filtraciones de la privacidad.
|
||||
how-fxm-3-headline = Recibir notificaciones en el navegador
|
||||
how-fxm-3-blurb = Si usas { -brand-name }, recibirás una notificación si visitas un sitio que ha sido vulnerado. Averigua si formaste parte de esta vulnerabilidad y qué puedes hacer al respecto.
|
||||
wtd-after-website = Qué hacer tras una filtración de una página web
|
||||
wtd-after-data-agg = Qué hacer después de una violación de un agregador de datos
|
||||
what-is-data-agg = ¿Qué es un agregador de datos?
|
||||
what-is-data-agg-blurb = Los agregadores de datos, o los intermediarios de datos, recopilan información de registros públicos y los compran de otras empresas. Compilan estos datos para venderlos a las empresas con fines de comercialización. Las víctimas de estas violaciones tienen menos probabilidades de experimentar fraudes financieros, pero los piratas informáticos podrían usar estos datos para hacerse pasar por ellos o perfilarlos.
|
||||
protect-your-privacy = Proteger tu privacidad en línea
|
||||
no-pw-to-change = A diferencia de una filtración de un sitio web, no hay contraseña que cambiar.
|
||||
avoid-personal-info = Evita usar información personal en contraseñas
|
||||
avoid-personal-info-blurb = Es fácil encontrar cumpleaños, direcciones y nombres de los miembros de tu familia en línea. Mantén estas palabras fuera de tus contraseñas.
|
||||
|
||||
## What to do after data breach tips
|
||||
|
||||
change-pw = Cambiar tu contraseña
|
||||
even-for-old = Incluso para cuentas antiguas, es importante actualizar tu contraseña.
|
||||
make-new-pw-unique = Haz que la nueva contraseña sea diferente y única
|
||||
strength-of-your-pw = La fuerza de tus contraseñas impactan directamente a tu seguridad en línea.
|
||||
create-strong-passwords = Cómo crear contraseñas seguras
|
||||
stop-reusing-pw = Dejar de usar las mismas contraseñas
|
||||
create-unique-pw = Crea contraseñas únicas y guárdalas en algún lugar seguro, como un administrador de contraseñas.
|
||||
five-myths = 5 mitos sobre los administradores de contraseñas
|
||||
create-a-fxa = Crea una { -brand-fxa } para tener un informe completo de las filtraciones y para recibir alertas.
|
||||
feat-security-tips = Consejos de seguridad para proteger tus cuentas
|
||||
feat-sensitive = Búsqueda avanzada en filtraciones sensibles
|
||||
back-to-top = Volver al inicio
|
||||
resend-verification = Reenviar correo electrónico de verificación
|
||||
add-new-email = Agregar una nueva dirección de correo electrónico
|
||||
send-verification = Enviar enlace de verificación
|
||||
# This string is a header on the user preferences page and
|
||||
# appears above a check-box list of user options which allow
|
||||
# the user to choose whether or not they want to receive breach
|
||||
# alerts for all of their monitored email addresses to a single
|
||||
# email address.
|
||||
global-communication = Comunicación global
|
||||
link-change-primary = Cambiar dirección de correo principal
|
||||
manage-email-addresses = Administrar direcciones de correo electrónico
|
||||
welcome-back = ¡Bienvenido de nuevo, { $userName }!
|
||||
welcome-user = ¡Bienvenido, { $userName }!
|
||||
what-to-do-after-breach = Qué hacer después de una filtración de datos:
|
||||
ba-next-step-1 = Cambiar tu contraseña por otra segura y única.
|
||||
ba-next-step-2 = Dejar de usar la contraseña expuesta por completo.
|
||||
|
||||
## Updated error messages
|
||||
|
||||
login-link-pre = ¿Tienes una cuenta?
|
||||
login-link = Iniciar sesión
|
||||
# This is a button and follows a headline reading "Was your info exposed in the ___ breach?"
|
||||
find-out = Descubrir
|
||||
# Title
|
||||
email-addresses-title = Direcciones de correo electrónico
|
||||
|
|
|
@ -413,7 +413,7 @@ welcome-back = Heureux de vous revoir, { $userName } !
|
|||
welcome-user = Bienvenue, { $userName } !
|
||||
breach-alert-subject = { -product-name } a détecté votre adresse électronique dans une nouvelle fuite de données.
|
||||
your-info-was-discovered-headline = Vos données ont été découvertes dans une nouvelle fuite.
|
||||
your-info-was-discovered-blurb = Vous êtes abonné·e aux alertes { -product-name } et en recevez lorsque votre adresse électronique apparaît dans des fuites de données. Voici ce que nous savons de cette fuite.
|
||||
your-info-was-discovered-blurb = Vous êtes abonné(e) aux alertes { -product-name } et en recevez lorsque votre adresse électronique apparaît dans des fuites de données. Voici ce que nous savons de cette fuite.
|
||||
what-to-do-after-breach = Que faire après une fuite de données ?
|
||||
ba-next-step-1 = Remplacez votre mot de passe par un mot de passe unique et robuste.
|
||||
ba-next-step-blurb-1 =
|
||||
|
@ -540,7 +540,7 @@ breach-overview = Le { $breachDate }, { $breachTitle } a été victime d’une f
|
|||
monitor-preferences = Préférences de { -product-short-name }
|
||||
# When a user is signed in, this appears in the drop down menu
|
||||
# and is followed by the user's primary Firefox Account email.
|
||||
signed-in-as = Connecté·e en tant que : { $userEmail }
|
||||
signed-in-as = Connecté(e) en tant que : { $userEmail }
|
||||
# Appears on the All Breaches page and is followed by a list of filter options
|
||||
# that a user can filter the visible breaches by.
|
||||
filter-by = Filtrer par catégorie :
|
||||
|
|
|
@ -26,6 +26,7 @@ error-not-subscribed = Dit e-mailadres is net abonnearre op { -product-name }.
|
|||
error-hibp-throttled = Te folle ferbiningen mei { -brand-HIBP }.
|
||||
error-hibp-connect = Flater by ferbinen mei { -brand-HIBP }.
|
||||
error-hibp-load-breaches = Koe datalekken net lade.
|
||||
error-must-be-signed-in = Jo moatte by jo { -brand-fxa } oanmeld wêze.
|
||||
hibp-notify-email-subject = { -product-name } Warskôging: jo account is belutsen by in datalek.
|
||||
home-title = { -product-name }
|
||||
home-not-found = Side net fûn.
|
||||
|
|
|
@ -26,6 +26,7 @@ error-not-subscribed = Ez az e-mail cím nincs feliratkozva a { -product-name }r
|
|||
error-hibp-throttled = Túl sok kapcsolat a { -brand-HIBP } felé.
|
||||
error-hibp-connect = Hiba a { -brand-HIBP }hoz kapcsolódáskor.
|
||||
error-hibp-load-breaches = A adatsértések nem tölthetőek be.
|
||||
error-must-be-signed-in = Be kell jelentkeznie a { -brand-fxa }jába.
|
||||
hibp-notify-email-subject = { -product-name } figyelmeztetés: A fiókját érintette egy adatsértés.
|
||||
home-title = { -product-name }
|
||||
home-not-found = Az oldal nem található.
|
||||
|
|
|
@ -567,3 +567,8 @@ signed-in-as = Authenticate como: { $userEmail }
|
|||
filter-by = Filtrar per categoria:
|
||||
# Title that appears in the mobile menu bar and opens the mobile menu when clicked.
|
||||
menu = Menu
|
||||
to-affected-email = Invia avisos de violation al adresse email afficite
|
||||
# This string appears in a banner at the top of each page and is followed by a "Learn More" link.
|
||||
join-firefox = Il ha un maniera de proteger tu confidentialitate. Junge te a { -brand-name }.
|
||||
# Link title
|
||||
learn-more-link = Saper plus.
|
||||
|
|
|
@ -25,8 +25,8 @@ error-could-not-add-email = Tidak dapat menambahkan alamat surel ke basis data.
|
|||
error-not-subscribed = Alamat surel ini tidak berlangganan { -product-name }.
|
||||
error-hibp-throttled = Terlalu banyak koneksi ke { -brand-HIBP }.
|
||||
error-hibp-connect = Gagal tersambung dengan { -brand-HIBP }.
|
||||
error-hibp-load-breaches = Tidak dapat memuat data penerobosan.
|
||||
hibp-notify-email-subject = Peringatan { -product-name }: Akun Anda telah terlibat dalam sebuah penerobosan.
|
||||
error-hibp-load-breaches = Tidak dapat memuat data pembobolan.
|
||||
hibp-notify-email-subject = Peringatan { -product-name }: Akun Anda telah terlibat dalam sebuah pembobolan.
|
||||
home-title = { -product-name }
|
||||
home-not-found = Laman tidak ditemukan.
|
||||
oauth-invalid-session = Sesi tidak valid
|
||||
|
@ -83,7 +83,7 @@ scan-privacy = Surel Anda tidak akan disimpan.
|
|||
scan-submit = Cari Surel Anda
|
||||
scan-another-email = Pindai Alamat Surel Lainnya
|
||||
scan-featuredbreach-label = Cari tahu apakah akun <span class="bold">{ $featuredBreach }</span> Anda telah diketahui orang lain.
|
||||
sensitive-breach-email-required = Penerobosan mengandung informasi yang sensitif. Verifikasi surel dibutuhkan.
|
||||
sensitive-breach-email-required = Pembobolan mengandung informasi yang sensitif. Verifikasi surel dibutuhkan.
|
||||
scan-error = Harus surel yang valid.
|
||||
signup-banner-headline = { -product-name-nowrap } mendeteksi ancaman terhadap akun daring Anda.
|
||||
signup-banner-blurb =
|
||||
|
@ -343,8 +343,8 @@ fxa-account = { -brand-fxa }
|
|||
# Aria button message to open menu. "Open Firefox Account Navigation"
|
||||
open-fxa-menu = Buka navigasi { -brand-fxa }
|
||||
# Appears above a snippet about the breach most recently reported to Firefox Monitor.
|
||||
latest-breach = PEMBOBOLAN TERBARU TELAH DITAMBAHKAN
|
||||
breach-added = Pembobolan yang dilaporkan:
|
||||
latest-breach = KEBOCORAN TERBARU TELAH DITAMBAHKAN
|
||||
breach-added = Pelaporan kebocoran:
|
||||
breach-discovered = Pembobolan yang ditemukan:
|
||||
# Link title
|
||||
more-about-this-breach = Lebih lanjut tentang pembobolan ini
|
||||
|
@ -352,7 +352,7 @@ take-control = Ambil alih kendali data pribadi Anda.
|
|||
cant-stop-hackers = Anda tidak dapat menghentikan peretas dari peretasan. Tetapi Anda dapat menghindari kebiasaan buruk yang membuat pekerjaan mereka menjadi mudah.
|
||||
read-more-tips = Baca Lebih Lanjut Tips Keamanan
|
||||
how-hackers-work = Memahami bagaimana para peretas bekerja
|
||||
monitor-your-online-accounts = Mendaftar untuk pemantauan pembobolan dengan { -brand-fxa }.
|
||||
monitor-your-online-accounts = Daftar untuk memantau pelanggaran data dengan { -brand-fxa }.
|
||||
stay-alert = Tetap waspada terhadap pembobolan baru
|
||||
if-your-info = Jika informasi Anda muncul dalam pembobolan data baru, kami akan mengirimkan peringatan kepada Anda.
|
||||
search-all-emails = Cari semua alamat surel Anda untuk pembobolan dan dapatkan peringatan tentang ancaman terbaru.
|
||||
|
@ -371,16 +371,52 @@ unverified-breach-plural = Pembobolan Belum Terverifikasi
|
|||
spam-list-breach-plural = Pembobolan Data Spam
|
||||
what-data = Data apa saja yang terkompromi:
|
||||
sensitive-sites = Bagaimana { -product-name } memperlakukan situs sensitif?
|
||||
sensitive-sites-copy =
|
||||
{ -product-name } hanya memunculkan akun yang diasosiasikan dengan
|
||||
macam-macam kebocoran setelah sebuah alamat surel diverifikasi. Ini berarti Anda adalah
|
||||
satu-satu orang yang dapat melihat jika informasi Anda termasuk di dalam kebocoran ini
|
||||
(kecuali seseorang telah mengakses ke akun surel Anda).
|
||||
delayed-reporting-headline = Mengapa butuh waktu lama untuk melaporkan pembobolan ini?
|
||||
delayed-reporting-copy =
|
||||
Terkadang butuh waktu berbulan-bulan atau bertahun-tahun untuk identitas terungkap
|
||||
dalam kebocoran data untuk muncul di web gelap. Pembobolan ditambahkan ke basis data kami
|
||||
segera setelah ditemukan dan diverifikasi.
|
||||
about-fxm-headline = Tentang { -product-name }
|
||||
about-fxm-blurb =
|
||||
{ -product-name } memperingatkan jika akun daring Anda tersangkut dalam
|
||||
kebocoran data. Cari tahu apakah Anda pernah tersangkut dalam kebocoran data, dapatkan peringatan tentang pembobolan terkini,
|
||||
dan mengambil langkah-langkah untuk melindungi akun online Anda. { -product-name } disediakan
|
||||
oleh { -brand-Mozilla }.
|
||||
fxm-warns-you =
|
||||
{ -product-name } memperingatkan Anda jika alamat surel Anda telah terungkap
|
||||
dalam kebocoran data daring. Lihat apakah informasi Anda telah terungkap, pelajari cara
|
||||
untuk melindungi akun daring Anda lebih baik, dan dapatkan pemberitahuan jika alamat surel Anda
|
||||
muncul dalam pembobolan baru.
|
||||
# How Firefox Monitor works
|
||||
how-fxm-works = Bagaimana { -product-name } bekerja
|
||||
how-fxm-1-headline = Lakukan pencarian dasar
|
||||
how-fxm-1-blurb =
|
||||
Cari alamat email Anda saat terjadi kebocoran data publik terjadi
|
||||
sejak 2007. Pencarian dasar ini akan memunculkan sebagian besar kebocoran data, tetapi tidak
|
||||
termasuk kebocoran yang berisi informasi pribadi yang sensitif.
|
||||
how-fxm-2-headline = Mendaftar untuk pemantauan pembobolan
|
||||
how-fxm-2-blurb =
|
||||
Buat { -brand-fxa } untuk memantau surel Anda jika ada pembobolan.
|
||||
Setelah memverifikasi email Anda, Anda juga akan menerima laporan lengkap tentang pembobolan di masa lalu,
|
||||
termasuk kebocoran sensitif.
|
||||
how-fxm-3-headline = Dapatkan notifikasi di peramban Anda
|
||||
how-fxm-3-blurb =
|
||||
Jika Anda menggunakan { -brand-name }, Anda akan menerima pemberitahuan jika Anda mengunjungi
|
||||
situs yang telah dibobol. Cari tahu segera apakah Anda tersangkut dalam pembobolan tersebut
|
||||
dan apa yang dapat Anda lakukan.
|
||||
wtd-after-website = Apa yang harus dilakukan setelah pembobolan situs web
|
||||
wtd-after-data-agg = Apa yang harus dilakukan setelah pembobolan agregator data
|
||||
what-is-data-agg = Apa itu agregator data?
|
||||
what-is-data-agg-blurb =
|
||||
Pengumpul data, atau pialang data, mengumpulkan informasi dari rekaman
|
||||
publik dan membelinya dari perusahaan lain. Mereka mengkompilasi data ini untuk menjualnya kepada perusahaan
|
||||
untuk tujuan pemasaran. Korban pembobolan ini kecil kemungkinannya mengalami penipuan
|
||||
finansial, tetapi peretas dapat menggunakan data ini untuk menyamar atau membuat profil mereka.
|
||||
protect-your-privacy = Lindungi privasi daring Anda
|
||||
no-pw-to-change = Tidak seperti pembobolan situs web, tidak ada kata sandi untuk diubah.
|
||||
avoid-personal-info = Hindari penggunaan informasi pribadi dalam kata sandi
|
||||
|
@ -391,13 +427,30 @@ avoid-personal-info-blurb = Sangat mudah untuk menemukan tanggal lahir, alamat,
|
|||
change-pw = Ubah kata sandi Anda
|
||||
even-for-old = Bahkan untuk akun lama, adalah penting untuk memperbarui kata sandi Anda.
|
||||
make-new-pw-unique = Buat kata sandi baru yang berbeda dan unik
|
||||
strength-of-your-pw = Kekuatan kombinasi kata sandi Anda secara langsung berdampak pada keamanan daring Anda.
|
||||
create-strong-passwords = Cara membuat kata sandi yang kuat
|
||||
stop-reusing-pw = Berhenti menggunakan kembali kata sandi yang sama
|
||||
create-unique-pw = Buat kata sandi unik dan simpan di tempat yang aman, seperti pengelola kata sandi.
|
||||
five-myths = 5 mitos tentang pengelola kata sandi
|
||||
create-a-fxa = Buat { -brand-fxa } untuk laporan lengkap pembobolan dan sekaligus mendapatkan peringatan.
|
||||
feat-security-tips = Tips keamanan untuk melindungi akun Anda
|
||||
feat-sensitive = Pencarian lanjutan dalam pembobolan sensitif
|
||||
feat-enroll-multiple = Daftarkan beberapa surel dalam pemantauan kebocoran
|
||||
sign-up-for-fxa = Daftar { -brand-fxa }
|
||||
# This string is shown beneath each of the user’s email addresses to indicate
|
||||
# how many known breaches that email address was found in.
|
||||
appears-in-x-breaches =
|
||||
{ $breachCount ->
|
||||
*[other] Muncul dalam { $breachCount } pembobolan yang diketahui.
|
||||
}
|
||||
see-if-breached = Lihat apakah Anda pernah tersangkut kebocoran data daring.
|
||||
check-for-breaches = Periksa Pelanggaran Data
|
||||
find-out-what-hackers-know = Cari tahu apa yang sudah diketahui peretas tentang Anda. Pelajari cara agar selalu selangkah lebih depan dari mereka.
|
||||
search-for-your-email = Cari alamat surel Anda yang tersangkut kebocoran data publik sejak 2007.
|
||||
back-to-top = Kembali ke Atas
|
||||
comm-opt-1 = Kirim semua peringatan pembobolan ke { $primaryEmail }.
|
||||
comm-opt-0 = Kirim saya surel jika salah satu alamat surel saya di bawah ini tersangkut dalam kebocoran data.
|
||||
comm-opt-1 = Kirim semua peringatan kebocoran ke { $primaryEmail }.
|
||||
stop-monitoring-this = Hentikan pemantauan surel ini.
|
||||
resend-verification = Kirim ulang verifikasi surel
|
||||
add-new-email = Tambah alamat surel baru
|
||||
send-verification = Kirim Tautan Verifikasi
|
||||
|
@ -407,16 +460,155 @@ send-verification = Kirim Tautan Verifikasi
|
|||
# alerts for all of their monitored email addresses to a single
|
||||
# email address.
|
||||
global-communication = Komunikasi Global
|
||||
breach-summary = Ringkasan Pembobolan
|
||||
show-breaches-for-this-email = Tampilkan semua pembobolan untuk surel ini.
|
||||
link-change-primary = Ubah Alamat Surel Utama
|
||||
remove-fxm = Hapus { -product-name }
|
||||
remove-fxm-blurb =
|
||||
Matikan peringatan { -product-name }. { -brand-fxa } Anda akan tetap aktif, dan Anda mungkin menerima
|
||||
komunikasi terkait akun lainnya.
|
||||
manage-email-addresses = Kelola Alamat Surel
|
||||
latest-breach-link = Lihat apakah Anda tersangkut dalam pembobolan ini.
|
||||
welcome-back = Selamat datang kembali, { $userName }!
|
||||
welcome-user = Selamat datang, { $userName }!
|
||||
breach-alert-subject = { -product-name } menemukan surel Anda dalam kebocoran data terkini.
|
||||
your-info-was-discovered-headline = Informasi Anda ditemukan dalam kebocoran data terkini.
|
||||
your-info-was-discovered-blurb =
|
||||
Anda mendaftarkan diri untuk menerima peringatan { -product-name }
|
||||
ketika surel Anda muncul dalam kebocoran data. Inilah yang kami ketahui tentang pembobolan ini.
|
||||
what-to-do-after-breach = Apa yang harus dilakukan setelah tersangkut kebocoran data:
|
||||
ba-next-step-1 = Ubah kata sandi Anda menjadi kata sandi yang kuat dan unik.
|
||||
ba-next-step-blurb-1 =
|
||||
Kata sandi yang kuat menggunakan kombinasi huruf besar dan kecil,
|
||||
karakter khusus, dan angka. Kata sandi pun tidak mengandung info pribadi seperti
|
||||
alamat, tanggal lahir, atau nama keluarga Anda.
|
||||
ba-next-step-2 = Hentikan penggunaan kata sandi yang terungkap sepenuhnya.
|
||||
ba-next-step-blurb-2 =
|
||||
Penjahat siber dapat menemukan kata sandi Anda di web gelap dan menggunakannya
|
||||
masuk ke akun Anda yang lain. Cara terbaik untuk melindungi akun Anda
|
||||
adalah dengan menggunakan kata sandi unik untuk masing-masing akun.
|
||||
ba-next-step-3 = Dapatkan bantuan untuk membuat kata sandi yang lebih baik dan menjaganya tetap aman.
|
||||
ba-next-step-blurb-3 =
|
||||
Gunakan pengelola kata sandi untuk membuat kata sandi yang kuat dan unik. Pengelola kata sandi menyimpan semua log masuk Anda dengan aman
|
||||
sehingga Anda dapat mengaksesnya di semua perangkat Anda.
|
||||
faq1 = Saya tidak mengenali perusahaan atau situs web ini. Mengapa saya tersangkut pembobolan ini?
|
||||
faq2 = Mengapa butuh waktu lama untuk memberi tahu saya tentang pembobolan ini?
|
||||
faq3 = Bagaimana saya tahu ini adalah surel yang sah dari { -product-name }?
|
||||
new-breaches-found =
|
||||
{ $breachCount ->
|
||||
*[other] { $breachCount } PEMBOBOLAN BARU DITEMUKAN
|
||||
}
|
||||
sign-up-headline-1 = Dapatkan peringatan berkelanjutan dengan { -brand-fxa }.
|
||||
account-not-required = Peramban { -brand-name } tidak dibutuhkan untuk sebuah { -brand-fxa }. Anda dapat menerima info tentang layanan { -brand-Mozilla }.
|
||||
get-alerted = Dapatkan pemberitahuan tentang pembobolan baru.
|
||||
was-your-info-exposed = Apakah informasi Anda terungkap dalam kebocoran data { $breachName }?
|
||||
find-out-if = Cari tahu apakah data Anda terungkap dalam pembobolan ini.
|
||||
fb-not-comp = Surel ini tidak muncul dalam pembobolan { $breachName }.
|
||||
other-breaches-found =
|
||||
{ $breachCount ->
|
||||
*[other] Namun, itu muncul dalam { $breachCount } pembobolan lainnya yang diketahui.
|
||||
}
|
||||
fb-comp-only = Surel ini muncul di pembobolan { $breachName }.
|
||||
fb-comp-and-others =
|
||||
{ $breachCount ->
|
||||
*[other] Surel ini muncul di { $breachCount } kebocoran data yang diketahui, termasuk { $breachName }.
|
||||
}
|
||||
no-other-breaches-found = Tidak ada pembobolan lain yang ditemukan dari pencarian dasar.
|
||||
no-results-blurb = Maaf, kebocoran tersebut tidak ada dalam basis data kami.
|
||||
all-breaches-headline = Semua pembobolan di { -product-name }
|
||||
search-breaches = Cari Pembobolan
|
||||
# "Appears in-page as: Showing: All Breaches"
|
||||
currently-showing = Menampilkan:
|
||||
all-breaches = Semua Pembobolan
|
||||
|
||||
## Updated error messages
|
||||
|
||||
error-bot-headline = Pencarian sementara ditangguhkan
|
||||
error-bot-blurb =
|
||||
Kami khawatir Anda mungkin menjadi bot karena Anda mencari
|
||||
beberapa alamat surel dalam waktu singkat. Untuk saat ini, Anda diblokir
|
||||
dari pencarian baru. Anda bisa mencobanya lagi nanti.
|
||||
error-csrf-headline = Sesi habis
|
||||
error-csrf-blurb = Pilih tombol kembali pada peramban Anda, muat ulang laman, dan coba lagi.
|
||||
error-invalid-unsub = Cara berhenti berlangganan dari peringatan { -product-name }
|
||||
error-invalid-unsub-blurb =
|
||||
Anda harus berhenti berlangganan dari salah satu dari
|
||||
surel { -product-name } yang mengirimi Anda. Periksa kotak masuk Anda untuk pesan dari
|
||||
{ -brand-team-email }. Pilih tautan berhenti berlangganan di bagian bawah surel.
|
||||
login-link-pre = Punya akun?
|
||||
login-link = Masuk
|
||||
# This string is displayed under a large numeral that indicates the total number
|
||||
# of email address a user has signed up for monitoring. Don’t add $emails to
|
||||
# your localization, because it would result in the number showing twice.
|
||||
email-addresses-being-monitored =
|
||||
{ $emails ->
|
||||
*[other] Alamat surel sedang dipantau
|
||||
}
|
||||
# This string is displayed under a large numeral that indicates the total number
|
||||
# of data breaches that have exposed the user’s information. Don’t add $breaches to
|
||||
# your localization, because it would result in the number showing twice.
|
||||
data-breaches-exposed =
|
||||
{ $breaches ->
|
||||
*[other] Kebocoran data telah mengungkap informasi Anda
|
||||
}
|
||||
# This string is displayed under a large numeral that indicates the total number
|
||||
# of data breaches that exposed a user’s password. Don’t add $passwords to
|
||||
# your localization, because it would result in the number showing twice.
|
||||
passwords-exposed =
|
||||
{ $passwords ->
|
||||
*[other] Kata sandi terungkap di semua pembobolan
|
||||
}
|
||||
# Button
|
||||
see-additional-breaches = Lihat Pembobolan Tambahan
|
||||
# A button on the All Breaches page that restores all of the breaches
|
||||
# back to the page if the user has filtered some of them out.
|
||||
see-all-breaches = Lihat Semua Pembobolan
|
||||
scan-results-known-breaches =
|
||||
{ $breachCount ->
|
||||
*[other] Surel ini muncul di { $breachCount } kebocoran data yang diketahui.
|
||||
}
|
||||
# This string is shown at the top of the scan results page and is followed
|
||||
# by the email address that the user searched.
|
||||
# In page, it reads "Results for: searchedEmail@monitor.com"
|
||||
results-for = Hasil untuk: { $userEmail }
|
||||
other-monitored-emails = Surel Terpantau Lainnya
|
||||
email-verification-required = Verifikasi Surel Diperlukan
|
||||
fxa-primary-email = Surel Utama { -brand-fxa }
|
||||
what-is-a-website-breach = Apa itu pembobolan situs web?
|
||||
website-breach-blurb = Kebocoran data situs web terjadi ketika penjahat siber mencuri, menyalin, atau mengungkap informasi pribadi dari akun daring. Biasanya ini merupakan hasil peretas yang menemukan titik lemah dalam keamanan situs web. Pembobolan juga dapat terjadi ketika informasi akun bocor secara tidak sengaja.
|
||||
security-tips-headline = Kiat keamanan untuk melindungi diri Anda dari peretas
|
||||
steps-to-protect = Langkah-langkah yang harus diambil untuk melindungi identitas daring Anda
|
||||
take-further-steps = Ambil langkah lebih lanjut untuk melindungi identitas Anda
|
||||
alert-about-new-breaches = Beritahu saya tentang pembobolan baru
|
||||
see-if-youve-been-part = Lihat apakah Anda telah tersangkut kebocoran data online.
|
||||
get-ongoing-breach-monitoring = Dapatkan pemantauan yang sedang berlangsung atas kebocoran untuk beberapa alamat surel.
|
||||
# This is a button and follows a headline reading "Was your info exposed in the ___ breach?"
|
||||
find-out = Temukan
|
||||
new-unsub-error = Anda harus berhenti berlangganan dari salah satu surel { -product-name } yang dikirim.
|
||||
other-known-breaches-found =
|
||||
{ $breachCount ->
|
||||
*[other] Namun, itu muncul dalam { $breachCount } pembobolan lainnya yang diketahui.
|
||||
}
|
||||
# This string appears on breach detail pages and is followed by a list
|
||||
# of data classes that the breach exposed.
|
||||
additional-information-including = Informasi tambahan, termasuk:
|
||||
# Title
|
||||
email-addresses-title = Alamat Surel
|
||||
# This is a standardized breach overview blurb that appears on all breach detail pages.
|
||||
# $breachTitle is the name of the breached company or website.
|
||||
# $breachDate and $addedDate are calendar dates.
|
||||
breach-overview = Pada { $breachDate }, { $breachTitle } mengalami pembobolan. Setelah pembobolan ditemukan dan diverifikasi, maka informasi ini ditambahkan ke basis data kami pada { $addedDate }.
|
||||
# Title appearing on the Preferences dashboard.
|
||||
monitor-preferences = Pengaturan { -product-short-name }
|
||||
# When a user is signed in, this appears in the drop down menu
|
||||
# and is followed by the user's primary Firefox Account email.
|
||||
signed-in-as = Masuk sebagai: { $userEmail }
|
||||
# Appears on the All Breaches page and is followed by a list of filter options
|
||||
# that a user can filter the visible breaches by.
|
||||
filter-by = Saring berdasarkan Kategori:
|
||||
# Title that appears in the mobile menu bar and opens the mobile menu when clicked.
|
||||
menu = Menu
|
||||
to-affected-email = Kirim peringatan kebocoran ke alamat surel terkait
|
||||
# This string appears in a banner at the top of each page and is followed by a "Learn More" link.
|
||||
join-firefox = Ada cara untuk melindungi privasi Anda. Bergabunglah dengan { -brand-name }.
|
||||
# Link title
|
||||
|
|
|
@ -30,6 +30,7 @@ error-not-subscribed = Questo indirizzo email non è iscritto a { -product-name
|
|||
error-hibp-throttled = Troppe connessioni a { -brand-HIBP }.
|
||||
error-hibp-connect = Errore di connessione a { -brand-HIBP }.
|
||||
error-hibp-load-breaches = Non è possibile caricare informazioni relative alle violazioni di dati.
|
||||
error-must-be-signed-in = Devi effettuare l’accesso al tuo { -brand-fxa }.
|
||||
hibp-notify-email-subject = Avviso di { -product-name }: Il tuo account è stato coinvolto in una violazione di dati.
|
||||
home-title = { -product-name }
|
||||
home-not-found = Pagina non trovata.
|
||||
|
|
|
@ -181,6 +181,7 @@ confirmation-blurb = データ侵害は他の人にも影響を及ぼす可能
|
|||
share-email = メールアドレス
|
||||
# Appears at the end of a list of email-clients and refers to any other unlisted email-client.
|
||||
share-other = その他
|
||||
share-twitter = 多くの人が約 100 個のオンラインアカウントを持っています。あなたのアカウントはデータ侵害にさらされていませんか?確認しましょう。
|
||||
mozilla-security-blog = { -brand-Mozilla } セキュリティブログ
|
||||
# A header for a list of links to share Firefox Monitor on various social media platforms.
|
||||
layout-social = ソーシャル
|
||||
|
@ -211,12 +212,14 @@ guest-scan-results-headline =
|
|||
}
|
||||
user-no-breaches-blurb = このメールアドレスが新たな侵害に含まれた場合、通知します。
|
||||
have-an-account = 既にアカウントをお持ちですか?
|
||||
fb-landing-headline = { $breachName } のデータ侵害にさらされていますか?
|
||||
# Alerts is a noun
|
||||
sign-up-for-alerts = 登録して通知を受け取る
|
||||
sign-up-for-fxa-alerts = 登録して { -product-name } の通知を受け取る。
|
||||
# Link title
|
||||
frequently-asked-questions = よくある質問
|
||||
about-firefox-monitor = { -product-name } について
|
||||
preferences = 設定
|
||||
# Link title.
|
||||
home = ホーム
|
||||
# Link title
|
||||
|
@ -229,14 +232,86 @@ latest-breach = 最近追加されたデータ侵害
|
|||
breach-added = 侵害の報告日:
|
||||
# Link title
|
||||
more-about-this-breach = この侵害について詳しく見る
|
||||
take-control = 個人情報の制御を取り戻してください。
|
||||
cant-stop-hackers = ハッカーのハッキングは止められません。しかし、ハッキングを容易にさせる悪習慣は避けられます。
|
||||
read-more-tips = セキュリティの秘訣をもっと読む
|
||||
how-hackers-work = ハッカーの手段を理解する
|
||||
monitor-your-online-accounts = { -brand-fxa }でデータ侵害の監視に登録しましょう。
|
||||
stay-alert = 新しいデータ侵害の警告を受け取る
|
||||
if-your-info = あなたの情報が新しいデータ侵害にさらされた場合、警告を送信します。
|
||||
monitor-several-emails = 複数のメールアドレスを監視する
|
||||
keep-your-data-safe = サイバー犯罪からデータを安全に保つために必要なことを見つけましょう。
|
||||
what-data = 漏洩したデータ:
|
||||
delayed-reporting-headline = なぜ、この侵害の報告に時間がかかったのですか?
|
||||
about-fxm-headline = { -product-name } について
|
||||
protect-your-privacy = オンラインプライバシーを保護する
|
||||
|
||||
## What to do after data breach tips
|
||||
|
||||
change-pw = パスワードを変更する
|
||||
make-new-pw-unique = 新しいパスワードを他とは異なり一意にする
|
||||
create-strong-passwords = 強力なパスワードの作り方
|
||||
stop-reusing-pw = 同じパスワードの追加い回しをやめる
|
||||
five-myths = パスワードマネージャーに関する 5 つの話題
|
||||
see-if-breached = オンラインのデータ侵害がないか確認しましょう。
|
||||
check-for-breaches = データ侵害を確認する
|
||||
find-out-what-hackers-know = ハッカーが既にあなたについて知っていることを調査しましょう。一歩先に行く方法を学んでください。
|
||||
search-for-your-email = 2007 年までさかのぼって、メールアドレスがデータ侵害を受けているか検索します。
|
||||
back-to-top = トップに戻る
|
||||
resend-verification = 認証メールを再送する
|
||||
send-verification = 認証リンクを送信する
|
||||
breach-summary = データ侵害概要
|
||||
manage-email-addresses = メールアドレスの管理
|
||||
latest-breach-link = この侵害を受けているか確認する
|
||||
welcome-back = おかえりなさい、{ $userName } さん!
|
||||
welcome-user = ようこそ、{ $userName } さん!
|
||||
what-to-do-after-breach = データ侵害があった後にするべきこと:
|
||||
account-not-required = { -brand-name } ブラウザーは { -brand-fxa }には必要ありません。{ -brand-Mozilla } サービスについての情報を受け取るでしょう。
|
||||
was-your-info-exposed = { $breachName } のデータ侵害にさらされていますか?
|
||||
no-results-blurb = データベース内に侵害は見つかりませんでした。
|
||||
all-breaches-headline = { -product-name } 内のすべてのデータ侵害
|
||||
search-breaches = データ侵害を検索
|
||||
|
||||
## Updated error messages
|
||||
|
||||
error-csrf-headline = セッションがタイムアウトしました
|
||||
login-link-pre = アカウントをお持ちですか?
|
||||
login-link = ログイン
|
||||
# A button on the All Breaches page that restores all of the breaches
|
||||
# back to the page if the user has filtered some of them out.
|
||||
see-all-breaches = すべてのデータ侵害を見る
|
||||
scan-results-known-breaches =
|
||||
{ $breachCount ->
|
||||
*[other] このメールアドレスは { $breachCount } 個の既知のデータ侵害があります。
|
||||
}
|
||||
# This string is shown at the top of the scan results page and is followed
|
||||
# by the email address that the user searched.
|
||||
# In page, it reads "Results for: searchedEmail@monitor.com"
|
||||
results-for = { $userEmail } についての結果
|
||||
email-verification-required = メールアドレスの認証が必要です
|
||||
fxa-primary-email = { -brand-fxa } メールアドレス - 主要
|
||||
security-tips-headline = ハッカーからあなたを守るセキュリティの秘訣
|
||||
steps-to-protect = オンラインであなたを保護する手順
|
||||
take-further-steps = あなたを守るさらなる手順
|
||||
see-if-youve-been-part = オンラインのデータ侵害に含まれていないか確認しましょう。
|
||||
get-ongoing-breach-monitoring = 複数のメールアドレスに対してデータ侵害の監視をしましょう。
|
||||
# This is a button and follows a headline reading "Was your info exposed in the ___ breach?"
|
||||
find-out = 調査する
|
||||
# This string appears on breach detail pages and is followed by a list
|
||||
# of data classes that the breach exposed.
|
||||
additional-information-including = 侵害を受けたその他の情報:
|
||||
# This is a standardized breach overview blurb that appears on all breach detail pages.
|
||||
# $breachTitle is the name of the breached company or website.
|
||||
# $breachDate and $addedDate are calendar dates.
|
||||
breach-overview = { $breachDate }に、{ $breachTitle } は、データ侵害にさらされました。この侵害が発見され、確認されたため、{ $addedDate }にデータベースに追加されました。
|
||||
# Title appearing on the Preferences dashboard.
|
||||
monitor-preferences = { -product-short-name } の設定
|
||||
# When a user is signed in, this appears in the drop down menu
|
||||
# and is followed by the user's primary Firefox Account email.
|
||||
signed-in-as = ログイン中: { $userEmail }
|
||||
# Title that appears in the mobile menu bar and opens the mobile menu when clicked.
|
||||
menu = メニュー
|
||||
# This string appears in a banner at the top of each page and is followed by a "Learn More" link.
|
||||
join-firefox = あなたのプライバシーを守る方法があります。{ -brand-name } を使用しましょう。
|
||||
# Link title
|
||||
learn-more-link = 詳しくはこちら。
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
# - Translated.
|
||||
-product-name = ഫയർഫോക്സ് മോണിറ്റർ
|
||||
-product-name-nowrap = <span class="nowrap">{ -product-name }</span>
|
||||
-product-short-name = മോണിറ്റർ
|
||||
-brand-name = ഫയർഫോക്സ്
|
||||
-brand-Quantum = ഫയർഫോക്സ് ക്വാണ്ടം
|
||||
-brand-Mozilla = മോസില്ല
|
||||
|
@ -79,6 +80,7 @@ signup-modal-verify-resend = ഇൻബോക്സിലോ സ്പാം ഫ
|
|||
signup-modal-sent = അയച്ചു!
|
||||
signup-with-fxa = { -brand-name } അക്കൗണ്ട് ഉപയോഗിച്ച് പ്രവേശിക്കുക
|
||||
form-signup-placeholder = ഇമെയിൽ നൽകുക
|
||||
form-signup-checkbox = { -brand-Mozilla }, { -brand-name } എന്നിവയിൽ നിന്നുള്ള ഏറ്റവും പുതിയത് നേടുക.
|
||||
sign-up = പ്രവേശിക്കു
|
||||
form-signup-error = സാധുവായ ഇമെയിൽ ആയിരിക്കണം
|
||||
no-breaches-headline = ഇതുവരെ കൊള്ളാം.
|
||||
|
@ -150,6 +152,10 @@ sign-up-for-fxa-alerts = { -product-name } അറിയിപ്പുകൾക
|
|||
get-your-report-and-sign-up = റിപ്പോർട് എടുക്കുകയും അറിയിപ്പുകൾക്കായി സൈൻ അപ് ചെയ്യുകയും ചെയ്യുക.
|
||||
# Link title
|
||||
frequently-asked-questions = പതിവു ചോദ്യങ്ങള്
|
||||
mozilla-dot-org = Mozilla.org
|
||||
preferences = മുൻഗണനകൾ
|
||||
# Link title
|
||||
security-tips = സുരക്ഷാ നുറുങ്ങുകൾ
|
||||
|
||||
## What to do after data breach tips
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@ error-not-subscribed = Dit e-mailadres is niet geabonneerd op { -product-name }.
|
|||
error-hibp-throttled = Te veel verbindingen met { -brand-HIBP }.
|
||||
error-hibp-connect = Fout bij verbinden met { -brand-HIBP }.
|
||||
error-hibp-load-breaches = Kon datalekken niet laden.
|
||||
error-must-be-signed-in = U moet bij uw { -brand-fxa } zijn aangemeld.
|
||||
hibp-notify-email-subject = { -product-name } Waarschuwing: uw account is betrokken bij een datalek.
|
||||
home-title = { -product-name }
|
||||
home-not-found = Pagina niet gevonden.
|
||||
|
|
|
@ -69,6 +69,9 @@ pwt-summary-5 = To faktor-godkjenning krev tilleggsinformasjon (t.d. ein eingang
|
|||
pwt-headline-6 = Registrer deg for { -product-name-nowrap }-åtvaringar
|
||||
pwt-summary-6 = Nettstadlekkasjar aukar. Så snart ein ny lekkasje vert lagt til i databasen i vår, sender { -product-name-nowrap } deg ei åtvaring — slik at du kan ta affære og beskytte kontoen din.
|
||||
landing-headline = Ditt vern mot hackarar startar her.
|
||||
landing-blurb =
|
||||
Med { -product-name-nowrap } får du ei rekkje verktøy, slik at du kan beskytte dei personlege opplysningane dine.
|
||||
Finn ut kor mykje hackerane allereie veit om deg, og korleis du kan vere eitt steg framom dei.
|
||||
scan-label = Sjå om du har vore innblanda i ein datalekkasje.
|
||||
scan-placeholder = Skriv inn e-postadresse
|
||||
scan-privacy = E-postadressa di vert ikkje lagra.
|
||||
|
@ -167,7 +170,7 @@ fxa-scan-another-email = Vil du kontrollere ei anna e-postadresse?
|
|||
# Search Firefox Monitor
|
||||
fxa-scan-submit = Sök { -product-name }
|
||||
sign-up-to-check = Registrer deg for å kontrollere
|
||||
sign-in = Logg in
|
||||
sign-in = Logg inn
|
||||
sign-out = Logg ut
|
||||
full-report-headline = Din { -product-name }-rapport
|
||||
see-full-report = Vis fullstendig rapport
|
||||
|
@ -220,6 +223,7 @@ fxa-pwt-summary-4 =
|
|||
fxa-pwt-summary-6 =
|
||||
Datalekkasjar aukar. Om din personlege informasjon vert avslørt i ein datalekkasje,
|
||||
vil { -product-name } sende deg ei åtvaring - slik at du kan ta forholdsreglar og verne kontoane dine.
|
||||
fb-landing-headline = Er opplysningane dine kompromitterte i datalekkasjen { $breachName }?
|
||||
copyright = Delar av dette innhaldet er © 1999-{ $year } av einskilde mozilla.org-bidragsytarar.
|
||||
content-available = Innhaldet er tilgjengeleg under ein Creative Commons-lisens.
|
||||
# Alerts is a noun
|
||||
|
@ -250,10 +254,12 @@ breach-discovered = Oppdaga datalekkasjar:
|
|||
# Link title
|
||||
more-about-this-breach = Meir om denne datalekkasjen
|
||||
take-control = Ta tilbake kontrollen over personopplysningane dine.
|
||||
read-more-tips = Les fleire sikkerheitstips
|
||||
cant-stop-hackers = Du kan ikkje hindre hackarar i å hacke. Men du kan unngå dårlega vanar som gjer det lett for dei.
|
||||
read-more-tips = Her er fleire tryggingstips
|
||||
how-hackers-work = Forstå korleis hackarar jobbar
|
||||
monitor-your-online-accounts = Registrer deg for overvaking av datalekkasjar med { -brand-fxa }.
|
||||
monitor-your-online-accounts = Registrer deg for overvaking av datalekkasjar med ein { -brand-fxa }.
|
||||
stay-alert = Ver på vakt for nye datalekkasjar
|
||||
if-your-info = Om din informasjon dukkar opp i ein ny datalekkasje, sender vi deg ei åtvaring.
|
||||
monitor-several-emails = Overvak fleire e-postadresser
|
||||
take-action = Beskytt kontoane dine aktivt
|
||||
keep-your-data-safe = Finn ut kva du må gjere for å beskytte dataa dine frå cyberkriminelle.
|
||||
|
@ -301,8 +307,14 @@ appears-in-x-breaches =
|
|||
[one] Er involvert i { $breachCount } kjend datalekkasje.
|
||||
*[other] Er involvert i { $breachCount } kjende datalekkasjar.
|
||||
}
|
||||
see-if-breached = Sjå om du har vore involvert i ein datalekkasje.
|
||||
check-for-breaches = Sjå etter datalekkasjar
|
||||
find-out-what-hackers-know = Finnut kva hackarar allereie veit om deg. Lær deg korleis du kan vere eitt steg framom dei.
|
||||
search-for-your-email = Søk etter e-postadressa di i offentlege datalekkasjar som går tilbake til 2007.
|
||||
back-to-top = Tilbake til toppen
|
||||
comm-opt-1 = Send åtvaringar om datalekkasjar til { $primaryEmail }.
|
||||
stop-monitoring-this = Slutt å overvake denne e-postadressa.
|
||||
resend-verification = Send stadfestings e-posten på nytt
|
||||
add-new-email = Legg til ei ny e-postadresse
|
||||
send-verification = Send stadfestingslenke
|
||||
# This string is a header on the user preferences page and
|
||||
|
@ -320,13 +332,16 @@ latest-breach-link = Sjå om du har vore involvert i ein datalekkasje
|
|||
welcome-back = Velkomen tilbake, { $userName }!
|
||||
welcome-user = Velkomen, { $userName }!
|
||||
breach-alert-subject = { -product-name } fann e-postadressa di i ein ny datalekkasje.
|
||||
what-to-do-after-breach = Kva skal du gjere etter ein datalekkasje:
|
||||
ba-next-step-2 = Slutt heilt med å bruke det eksponerte passordet.
|
||||
new-breaches-found =
|
||||
{ $breachCount ->
|
||||
[one] FANN { $breachCount } NY DATALEKKASJE
|
||||
*[other] FANN { $breachCount } NYE DATALEKKASJAR
|
||||
}
|
||||
account-not-required = Du treng ikkje å ha ein { -brand-name }-nettlesar for å bruke ein { -brand-fxa }. Ved å melde deg på kan du få informasjon om tenester frå { -brand-Mozilla }.
|
||||
get-alerted = Få melding om nye datalekkasjar.
|
||||
was-your-info-exposed = Er opplysningane dine kompromitterte i datalekkasjen { $breachName }?
|
||||
find-out-if = Finn ut om dine opplysningar vart eksponerte i denne datalekkasjen.
|
||||
no-other-breaches-found = Ingen andre datalekkasjar vart funne i dette grunnleggjande søket.
|
||||
all-breaches-headline = Alle datalekkasjar i { -product-name }
|
||||
|
@ -337,9 +352,26 @@ all-breaches = Alle datalekkasjar
|
|||
|
||||
## Updated error messages
|
||||
|
||||
error-csrf-headline = Tidsavbrot i økta
|
||||
login-link-pre = Har du ein konto?
|
||||
login-link = Logg inn
|
||||
# This string is displayed under a large numeral that indicates the total number
|
||||
# of email address a user has signed up for monitoring. Don’t add $emails to
|
||||
# your localization, because it would result in the number showing twice.
|
||||
email-addresses-being-monitored =
|
||||
{ $emails ->
|
||||
[one] E-postadresser som er overvaka
|
||||
*[other] E-postadresser som er overvaka
|
||||
}
|
||||
# This string is displayed under a large numeral that indicates the total number
|
||||
# of data breaches that have exposed the user’s information. Don’t add $breaches to
|
||||
# your localization, because it would result in the number showing twice.
|
||||
data-breaches-exposed =
|
||||
{ $breaches ->
|
||||
[one] Dattalekkasje som har komprommitert opplysningane dine
|
||||
*[other] Dattalekkasjar som har komprommitert opplysningane dine
|
||||
}
|
||||
# This string is displayed under a large numeral that indicates the total number
|
||||
# of data breaches that exposed a user’s password. Don’t add $passwords to
|
||||
# your localization, because it would result in the number showing twice.
|
||||
passwords-exposed =
|
||||
|
@ -363,7 +395,11 @@ other-monitored-emails = Andre overvaka e-postadresser
|
|||
email-verification-required = E-poststadfesting påkravd
|
||||
fxa-primary-email = { -brand-fxa } E-post - Primær
|
||||
what-is-a-website-breach = Kva er ein nettstadlekkasje?
|
||||
security-tips-headline = Tryggingstips for å verne deg mot hackarar
|
||||
steps-to-protect = Kva du kan gjere for å beskytte identiteten din på nettet
|
||||
alert-about-new-breaches = Varsle meg om nye datalekkasjar
|
||||
see-if-youve-been-part = Sjå om du har vore omfatta av ein datalekkasje på nettet.
|
||||
get-ongoing-breach-monitoring = Få løpande datalekkasjeovervaking av fleire e-postadresser.
|
||||
# This is a button and follows a headline reading "Was your info exposed in the ___ breach?"
|
||||
find-out = Sjekk no
|
||||
# This string appears on breach detail pages and is followed by a list
|
||||
|
@ -381,3 +417,7 @@ signed-in-as = Innlogga som: { $userEmail }
|
|||
filter-by = Filtrer etter kategori:
|
||||
# Title that appears in the mobile menu bar and opens the mobile menu when clicked.
|
||||
menu = Meny
|
||||
# This string appears in a banner at the top of each page and is followed by a "Learn More" link.
|
||||
join-firefox = Det finst ein måte å ta vare på personvernet ditt. Ver med { -brand-name } på ferda.
|
||||
# Link title
|
||||
learn-more-link = Les meir.
|
||||
|
|
|
@ -23,7 +23,7 @@ breach-alert-subhead = Ein nyleg rapportert datalekkasje inneheld di e-postadres
|
|||
report-pwt-headline-1 = Bruk ulike passord for kvar konto
|
||||
report-pwt-headline-2 = Lag sterke, unike passord
|
||||
report-pwt-summary-2 =
|
||||
Hackerar brukar lister med vanlege passord for å prøve å gjette ditt.
|
||||
Hackarar brukar lister med vanlege passord for å prøve å gjette ditt.
|
||||
Dess lenger og meir tilfeldig passordet ditt er, dess vanskelegare er det å stele det.
|
||||
report-pwt-headline-3 = Behandle tryggingsspørsmål som ekstra passord
|
||||
report-pwt-headline-4 = Bruk ein passordhandterar
|
||||
|
|
|
@ -26,6 +26,7 @@ error-not-subscribed = Este endereço de e-mail não está cadastrado no { -prod
|
|||
error-hibp-throttled = Conexões em excesso para o { -brand-HIBP }
|
||||
error-hibp-connect = Falha ao conectar com o { -brand-HIBP }.
|
||||
error-hibp-load-breaches = Não foi possível carregar os vazamentos.
|
||||
error-must-be-signed-in = Você precisa entrar na sua { -brand-fxa }.
|
||||
hibp-notify-email-subject = Alerta do { -product-name }: Sua conta foi envolvida em um vazamento.
|
||||
home-title = { -product-name }
|
||||
home-not-found = Página não encontrada.
|
||||
|
@ -630,6 +631,6 @@ filter-by = Filtrar por categoria:
|
|||
menu = Menu
|
||||
to-affected-email = Enviar alertas de vazamento para os endereços de e-mail afetados
|
||||
# This string appears in a banner at the top of each page and is followed by a "Learn More" link.
|
||||
join-firefox = Existe um meio de proteger sua privacidade. Inscreva-se no { -brand-name }.
|
||||
join-firefox = Existe um meio de proteger sua privacidade. Cadastre-se no { -brand-name }.
|
||||
# Link title
|
||||
learn-more-link = Saiba mais.
|
||||
|
|
|
@ -26,6 +26,7 @@ error-not-subscribed = Este endereço de email não está subscrito no { -produc
|
|||
error-hibp-throttled = Demasiadas ligações para { -brand-HIBP }.
|
||||
error-hibp-connect = Erro ao ligar a { -brand-HIBP }.
|
||||
error-hibp-load-breaches = Não foi possível carregar as brechas.
|
||||
error-must-be-signed-in = Deve estar autenticado na sua { -brand-fxa }.
|
||||
hibp-notify-email-subject = { -product-name } Alerta: A sua conta foi envolvida numa brecha.
|
||||
home-title = { -product-name }
|
||||
home-not-found = Página não encontrada.
|
||||
|
@ -82,10 +83,10 @@ landing-blurb =
|
|||
O { -product-name-nowrap } oferece-lhe ferramentas para manter a sua informação pessoal segura.
|
||||
Descubra o que os hackers já sabem acerca de si, e saiba como ficar um passo à frente dos mesmos.
|
||||
scan-label = Veja se foi envolvido(a) numa brecha de dados.
|
||||
scan-placeholder = Introduzir endereço de email
|
||||
scan-privacy = O seu email não será armazenado.
|
||||
scan-submit = Pesquisar o seu email
|
||||
scan-another-email = Verificar outro endereço de email
|
||||
scan-placeholder = Inserir endereço de e-mail
|
||||
scan-privacy = O seu e-mail não será guardado.
|
||||
scan-submit = Pesquisar pelo seu e-mail
|
||||
scan-another-email = Pesquisar outro endereço de e-mail
|
||||
scan-featuredbreach-label = Descubra se a sua conta <span class="bold"> { $featuredBreach } </span> foi comprometida.
|
||||
sensitive-breach-email-required = A brecha contém informação sensível. Verificação por email requerida.
|
||||
scan-error = Tem de ser um email válido.
|
||||
|
@ -108,7 +109,7 @@ signup-modal-verify-resend = Não está na caixa de entrada ou pasta de lixo? Re
|
|||
# Appears after Firefox Monitor has sent a verification email to a new user.
|
||||
signup-modal-sent = Enviado!
|
||||
signup-with-fxa = Registe-se com uma Conta { -brand-name }
|
||||
form-signup-placeholder = Introduzir email
|
||||
form-signup-placeholder = Inserir e-mail
|
||||
form-signup-checkbox = Obter as últimas da { -brand-Mozilla } e do { -brand-name }.
|
||||
sign-up = Registar
|
||||
form-signup-error = Tem de ser um email válido
|
||||
|
@ -387,8 +388,13 @@ take-control = Retome o controlo dos seus dados pessoais.
|
|||
cant-stop-hackers = Não pode impedir que os hackers invadam. Mas pode evitar maus hábitos que lhes facilitam o trabalho.
|
||||
read-more-tips = Ler mais dicas de segurança
|
||||
how-hackers-work = Compreender como é que os hackers funcionam
|
||||
stay-alert = Mantenha-se atento(a) a novas brechas
|
||||
monitor-your-online-accounts = Inscreva-se para uma monitorização de violações com { -brand-fxa }.
|
||||
stay-alert = Mantenha-se atento às novas violações
|
||||
if-your-info = Se a sua informação apareceu numa nova violação de dados, nós iremos enviar-lhe um alerta.
|
||||
search-all-emails = Procure por violações em todos os seus endereços de e-mail e receba alertas sobre novas ameaças.
|
||||
monitor-several-emails = Monitorize vários emails
|
||||
take-action = Tome medidas para proteger as suas contas
|
||||
keep-your-data-safe = Descubra o que precisa de fazer para manter os seus dados seguros de cibercriminosos.
|
||||
website-breach = Brecha de website
|
||||
sensitive-breach = Brechas de websites sensíveis
|
||||
data-aggregator-breach = Brecha agregadora de dados
|
||||
|
@ -401,21 +407,170 @@ unverified-breach-plural = Brechas não verificadas
|
|||
spam-list-breach-plural = Brechas de listas de spam
|
||||
what-data = Que dados foram comprometidos:
|
||||
sensitive-sites = Como é que o { -product-name } trata sites sensíveis?
|
||||
sensitive-sites-copy =
|
||||
{ -product-name } só revela as contas associadas com estes
|
||||
tipos de violações depois de um endereço de e-mail ter sido verificado. Isto significa que
|
||||
é a única pessoa que pode ver se a sua informação estava numa violação (a menos que
|
||||
alguém tenha acesso à sua conta de e-mail).
|
||||
delayed-reporting-headline = Porque demorou tanto tempo até esta violação ser reportada?
|
||||
delayed-reporting-copy =
|
||||
Pode demorar meses ou até mesmo anos para as credenciais expostas
|
||||
numa violação de dados aparecerem na dark web. As violações são adicionadas à nossa base de dados
|
||||
assim que são descobertas e validadas.
|
||||
about-fxm-headline = Acerca do { -product-name }
|
||||
about-fxm-blurb = { -product-name } indica que as suas contas online estiveram envolvidas numa fuga de dados. Descubra se esteve numa fuga de dados, obtenha alertas sobre novas fugas e execute os procedimentos para proteger as suas contas onlines. { -product-name } é fornecido por { -brand-Mozilla }.
|
||||
fxm-warns-you =
|
||||
{ -product-name } indica se o seu endereço de e-mail foi exposto
|
||||
numa violação de dados online. Confirme se a sua informação foi exposta, aprenda a
|
||||
proteger melhor as suas contas online e receba alertas caso o seu endereço de e-mail
|
||||
apareça numa nova violação.
|
||||
# How Firefox Monitor works
|
||||
how-fxm-works = Como é que o { -product-name } funciona
|
||||
how-fxm-1-headline = Realizar uma pesquisa básica
|
||||
how-fxm-1-blurb =
|
||||
Procure pelo seu endereço de e-mail em violações de dados públicas desde
|
||||
2007. Esta pesquisa básica vai apresentar a maior parte das violações de dados, mas não
|
||||
as que contenham dados pessoais sensíveis.
|
||||
how-fxm-2-headline = Registe-se para monitorizar violações
|
||||
how-fxm-2-blurb =
|
||||
Crie uma { -brand-fxa } para monitorizar o seu e-mail sobre violações atuais.
|
||||
Assim que confirmar o seu e-mail, irá também receber um relatório completo sobre violações anteriores,
|
||||
incluindo violações sensíveis.
|
||||
how-fxm-3-headline = Receba notificações no seu navegador
|
||||
how-fxm-3-blurb =
|
||||
Se utilizar { -brand-name }, irá receber uma notificação se visitar um
|
||||
site cujos dados tenham sido violados. Saiba imediatamente se faz parte dessa violação
|
||||
e o que pode fazer quanto a isso.
|
||||
wtd-after-website = O que fazer depois de uma brecha de website
|
||||
wtd-after-data-agg = O que fazer depois de uma brecha de agregador de dados
|
||||
what-is-data-agg = O que é um agregador de dados?
|
||||
what-is-data-agg-blurb =
|
||||
Um agregador ou agente de dados, recolhe informações de registos
|
||||
públicos e adquire dados de outras empresas. Trabalham estes dados para os venderem a outras empresas
|
||||
para fins de marketing. As vítimas destas violações são uma probabilidade mais baixa de fraude financeira
|
||||
mas os piratas informáticos podem utilizar estes dados para se fazerem passar por essas pessoas ou as perfilar.
|
||||
protect-your-privacy = Proteja a sua privacidade online
|
||||
no-pw-to-change = Ao contrário de uma violação de website, não há uma palavra-passe para alterar.
|
||||
avoid-personal-info = Evite utilizar informação pessoal nas palavras-passe
|
||||
avoid-personal-info-blurb = É fácil encontrar aniversários, moradas e nomes de membros de família online. Mantenha estas palavras fora das suas palavras-passe.
|
||||
|
||||
## What to do after data breach tips
|
||||
|
||||
change-pw = Altere a sua palavra-passe
|
||||
even-for-old = Mesmo para as contas antigas, é importante atualizar a sua palavra-passe.
|
||||
make-new-pw-unique = Torne a nova palavra-passe diferente e única
|
||||
strength-of-your-pw = A força das suas palavras-passe tem um impacto direto na sua segurança online.
|
||||
create-strong-passwords = Como criar palavras-passe fortes
|
||||
stop-reusing-pw = Pare de reutilizar as mesmas palavras-passe
|
||||
create-unique-pw = Crie palavras-passe únicas e guarde-as num lugar seguro, tal como um gestor de palavras-passe.
|
||||
five-myths = 5 mitos sobre os gestores de palavras-passe
|
||||
create-a-fxa = Crie uma { -brand-fxa } para o seu relatório completo das violações e para receber alertas.
|
||||
feat-security-tips = Dicas de segurança para proteger as suas contas
|
||||
feat-sensitive = Pesquisa avançada em violações sensíveis
|
||||
feat-enroll-multiple = Registar vários e-mails na monitorização de violações
|
||||
sign-up-for-fxa = Registe-se para uma { -brand-fxa }
|
||||
# This string is shown beneath each of the user’s email addresses to indicate
|
||||
# how many known breaches that email address was found in.
|
||||
appears-in-x-breaches =
|
||||
{ $breachCount ->
|
||||
[one] Aparece em { $breachCount } violação conhecida.
|
||||
*[other] Aparece em { $breachCount } violações conhecidas.
|
||||
}
|
||||
see-if-breached = Consulte se esteve numa violação de dados online.
|
||||
check-for-breaches = Consultar violações
|
||||
find-out-what-hackers-know = Descubra o que os piratas informáticos já sabem sobre si. Saiba como ficar um passo à frente deles.
|
||||
search-for-your-email = Pesquise pelo seu endereço de e-mail em violações públicas de dados até 2007.
|
||||
back-to-top = Voltar ao topo
|
||||
comm-opt-0 = Enviar um e-mail para mim caso um dos meus endereços de e-mail abaixo aparecer numa violação de dados.
|
||||
comm-opt-1 = Enviar todos alertas de violações para { $primaryEmail }.
|
||||
stop-monitoring-this = Pare de monitorizar este e-mail.
|
||||
resend-verification = Reenviar e-mail de verificação
|
||||
add-new-email = Adicionar um novo endereço de e-mail
|
||||
send-verification = Enviar ligação de verificação
|
||||
# This string is a header on the user preferences page and
|
||||
# appears above a check-box list of user options which allow
|
||||
# the user to choose whether or not they want to receive breach
|
||||
# alerts for all of their monitored email addresses to a single
|
||||
# email address.
|
||||
global-communication = Comunicação global
|
||||
breach-summary = Resumo da violação
|
||||
show-breaches-for-this-email = Mostrar todas as violações para este e-mail.
|
||||
link-change-primary = Alterar endereço de e-mail primário
|
||||
remove-fxm = Remover { -product-name }
|
||||
remove-fxm-blurb =
|
||||
Desativar os alertas de { -product-name }. A sua { -brand-fxa } continuará ativa e poderá receber
|
||||
outras comunicações relacionadas com a conta.
|
||||
manage-email-addresses = Gerir endereços de e-mail
|
||||
latest-breach-link = Veja se esteve nesta violação
|
||||
welcome-back = Bem-vindo(a) de volta, { $userName }!
|
||||
welcome-user = Bem-vindo(a), { $userName }!
|
||||
breach-alert-subject = { -product-name } encontrou o seu e-mail numa nova violação de dados.
|
||||
your-info-was-discovered-headline = Os seus dados foram descobertos numa nova violação de dados.
|
||||
your-info-was-discovered-blurb =
|
||||
Registou-se para receber alertas do { -product-name }
|
||||
quando o seu e-mail aparecer numa violação de dados. Veja o que nós sabemos sobre esta violação.
|
||||
what-to-do-after-breach = O que fazer depois de uma violação de dados:
|
||||
ba-next-step-1 = Altere a sua palavra-passe para uma palavra-passe forte e única.
|
||||
ba-next-step-blurb-1 =
|
||||
Uma palavra-passe forte utiliza uma combinação de letras maiúsculas e minúsculas,
|
||||
carateres especiais e números. Não contem informações pessoais tais como
|
||||
a sua morada, data de nascimento ou apelidos.
|
||||
ba-next-step-2 = Nunca mais volte a utilizar a palavra-se exposta.
|
||||
ba-next-step-blurb-2 =
|
||||
Os cibercriminosos poderão encontrar a sua palavra-passe na "dark web" e utilizá-la
|
||||
para iniciar a sessão nas suas outras contas. O melhor modo para proteger as suas
|
||||
contas é utilizar palavras-passe únicas para cada uma.
|
||||
ba-next-step-3 = Obtenha ajuda para criar melhores palavras-passe e as manter seguras.
|
||||
ba-next-step-blurb-3 =
|
||||
Utilize um gestor de palavras-passe para criar palavras-passe fortes e únicas. Os gestores de palavras-passe guardam
|
||||
com segurança todas as suas credenciais para que possa aceder às mesmas em todos os seus dispositivos.
|
||||
faq1 = Eu não reconheço esta empresa ou website. Por que é que eu estou nesta violação?
|
||||
faq2 = Porque é que demorou tanto para me notificarem desta violação?
|
||||
faq3 = Como é que eu sei que é um e-mail legitimo do { -product-name }?
|
||||
new-breaches-found =
|
||||
{ $breachCount ->
|
||||
[one] ENCONTRADA { $breachCount } NOVA VIOLAÇÃO
|
||||
*[other] ENCONTRADAS { $breachCount } NOVAS VIOLAÇÕES
|
||||
}
|
||||
sign-up-headline-1 = Receba alertas atuais com uma { -brand-fxa }.
|
||||
account-not-required = O navegador { -brand-name } não é obrigatório para uma { -brand-fxa }. Poderá receber informações sobre os serviços da { -brand-Mozilla }.
|
||||
get-alerted = Receba alertas sobre novas violações.
|
||||
was-your-info-exposed = A sua informação foi exposta na violação de dados de { $breachName }?
|
||||
find-out-if = Saiba se os seus dados foram expostos nesta violação.
|
||||
fb-not-comp = Este e-mail não apareceu na violação { $breachName }.
|
||||
other-breaches-found =
|
||||
{ $breachCount ->
|
||||
[one] Contudo, este apareceu em { $breachCount } outra violação.
|
||||
*[other] Contudo, este apareceu em { $breachCount } outras violações
|
||||
}
|
||||
fb-comp-only = Este e-mail apareceu na violação { $breachName }.
|
||||
fb-comp-and-others =
|
||||
{ $breachCount ->
|
||||
[one] Este e-mail apareceu em { $breachCount } violação de dados conhecida, incluindo { $breachName }.
|
||||
*[other] Este e-mail apareceu em { $breachCount } violações de dados conhecidas, incluindo { $breachName }.
|
||||
}
|
||||
no-other-breaches-found = Nenhuma outra violação encontrada a partir de uma pesquisa básica.
|
||||
no-results-blurb = Desculpe, esta violação não está na nossa base de dados.
|
||||
all-breaches-headline = Todas as violações no { -product-name }
|
||||
search-breaches = Procurar por violações
|
||||
# "Appears in-page as: Showing: All Breaches"
|
||||
currently-showing = A mostrar:
|
||||
all-breaches = Todas as violações
|
||||
|
||||
## Updated error messages
|
||||
|
||||
error-bot-headline = Pesquisas temporariamente suspensas
|
||||
error-bot-blurb =
|
||||
Nós estamos preocupados que seja um "bot" porque pesquisou
|
||||
vários endereços de e-mail num curto espaço de tempo. Por agora, as novas
|
||||
pesquisas estão bloqueadas. Pode tentar novamente mais tarde.
|
||||
error-csrf-headline = A sessão expirou
|
||||
error-csrf-blurb = Selecione o seu botão de retroceder do seu navegador, recarregue a página e tente novamente.
|
||||
error-invalid-unsub = Como cancelar a subscrição dos alertas do { -product-name }
|
||||
error-invalid-unsub-blurb =
|
||||
Terá de cancelar a subscrição a partir de um dos
|
||||
e-mails que o { -product-name } lhe enviou. Procure na sua caixa de correio por mensagens
|
||||
de { -brand-team-email }. Selecione a ligação de cancelamento da subscrição no final da mensagem.
|
||||
login-link-pre = Tem uma conta?
|
||||
login-link = Iniciar sessão
|
||||
# This string is displayed under a large numeral that indicates the total number
|
||||
|
@ -459,5 +614,43 @@ results-for = Resultados para: { $userEmail }
|
|||
other-monitored-emails = Outros emails monitorizados
|
||||
email-verification-required = Verificação de email requerida
|
||||
fxa-primary-email = Email do { -brand-fxa } - Primário
|
||||
what-is-a-website-breach = O que é uma violação do website?
|
||||
website-breach-blurb = Uma violação de dados do website ocorre quando os cibercriminosos roubam, copiam ou expõem a informação pessoal das contas online. Geralmente, é a consequência dos piratas informáticos encontrarem um ponto fraco na segurança do website. As violações também podem acontecer quando a informação de contas é divulgada acidentalmente.
|
||||
security-tips-headline = Dicas de segurança para se proteger contra hackers
|
||||
steps-to-protect = Passos a tomar para proteger a sua identidade online
|
||||
take-further-steps = Mais passos para proteger a sua identidade
|
||||
alert-about-new-breaches = Alertar-me acerca de novas brechas
|
||||
see-if-youve-been-part = Veja se fez parte de uma violação de dados online.
|
||||
get-ongoing-breach-monitoring = Obtenha a monitorização de violações atuais para múltiplos endereços de e-mail.
|
||||
# This is a button and follows a headline reading "Was your info exposed in the ___ breach?"
|
||||
find-out = Descobrir
|
||||
new-unsub-error = Terá de cancelar a subscrição de um dos e-mails que o { -product-name } lhe enviou.
|
||||
other-known-breaches-found =
|
||||
{ $breachCount ->
|
||||
[one] Contudo, este apareceu em { $breachCount } outra violação conhecida.
|
||||
*[other] Contudo, este apareceu em { $breachCount } outras violações conhecidas.
|
||||
}
|
||||
# This string appears on breach detail pages and is followed by a list
|
||||
# of data classes that the breach exposed.
|
||||
additional-information-including = Informação adicional, incluindo:
|
||||
# Title
|
||||
email-addresses-title = Endereços de e-mail
|
||||
# This is a standardized breach overview blurb that appears on all breach detail pages.
|
||||
# $breachTitle is the name of the breached company or website.
|
||||
# $breachDate and $addedDate are calendar dates.
|
||||
breach-overview = Em { $breachDate }, { $breachTitle } sofreu uma violação. Assim que a violação foi descoberta e confirmada, esta foi adicionada à nossa base de dados em { $addedDate }.
|
||||
# Title appearing on the Preferences dashboard.
|
||||
monitor-preferences = { -product-short-name } - Preferências
|
||||
# When a user is signed in, this appears in the drop down menu
|
||||
# and is followed by the user's primary Firefox Account email.
|
||||
signed-in-as = Sessão iniciada como: { $userEmail }
|
||||
# Appears on the All Breaches page and is followed by a list of filter options
|
||||
# that a user can filter the visible breaches by.
|
||||
filter-by = Filtrar por categoria:
|
||||
# Title that appears in the mobile menu bar and opens the mobile menu when clicked.
|
||||
menu = Menu
|
||||
to-affected-email = Enviar alertas de violação para o endereço de e-mail afetado
|
||||
# This string appears in a banner at the top of each page and is followed by a "Learn More" link.
|
||||
join-firefox = Existe um modo para proteger a sua privacidade. Registe-se em { -brand-name }.
|
||||
# Link title
|
||||
learn-more-link = Saber mais.
|
||||
|
|
|
@ -12,6 +12,9 @@ avatars = Avatares
|
|||
bank-account-numbers = Números da conta bancária
|
||||
beauty-ratings = Avaliações de beleza
|
||||
biometric-data = Dados biométricos
|
||||
# This string is the shortened version of "Biographies", and
|
||||
# refers to biographical data about a user.
|
||||
bios = Biografias
|
||||
browser-user-agent-details = Detalhes do user agent
|
||||
browsing-histories = Históricos de navegação
|
||||
buying-preferences = Preferências de compras
|
||||
|
@ -37,6 +40,7 @@ education-levels = Níveis de educação
|
|||
email-addresses = Endereços de email
|
||||
email-messages = Mensagens de email
|
||||
employers = Empregadores
|
||||
employment-statuses = Situação laboral
|
||||
ethnicities = Etnicidades
|
||||
family-members-names = Nomes dos membros da família
|
||||
family-plans = Planos familiares
|
||||
|
@ -101,6 +105,7 @@ smoking-habits = Hábitos de fumar
|
|||
sms-messages = Mensagens SMS
|
||||
social-connections = Ligações sociais
|
||||
social-media-profiles = Perfis de redes sociais
|
||||
social-security-numbers = Números da segurança social
|
||||
spoken-languages = Idiomas falados
|
||||
support-tickets = Bilhetes de apoio
|
||||
survey-results = Resultados de pesquisas
|
||||
|
|
|
@ -26,6 +26,7 @@ error-not-subscribed = Această adresă de e-mail nu este abonată la { -product
|
|||
error-hibp-throttled = Prea multe conexiuni la { -brand-HIBP }.
|
||||
error-hibp-connect = Eroare de conectare la { -brand-HIBP }.
|
||||
error-hibp-load-breaches = Nu s-au putut încărca breșele.
|
||||
error-must-be-signed-in = Trebuie să fii autentificat(ă) la { -brand-fxa }.
|
||||
hibp-notify-email-subject = Alertă { -product-name }: Contul tău a fost implicat într-o breșă.
|
||||
home-title = { -product-name }
|
||||
home-not-found = Pagină negăsită.
|
||||
|
|
|
@ -621,3 +621,7 @@ filter-by = Фильтр по категориям:
|
|||
# Title that appears in the mobile menu bar and opens the mobile menu when clicked.
|
||||
menu = Меню
|
||||
to-affected-email = Отправлять оповещения об утечках на затронутые ими адреса электронной почты
|
||||
# This string appears in a banner at the top of each page and is followed by a "Learn More" link.
|
||||
join-firefox = Есть способ защитить вашу приватность. Присоединяйтесь к { -brand-name }.
|
||||
# Link title
|
||||
learn-more-link = Подробнее.
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
# - Translated.
|
||||
-product-name = Firefox Monitor
|
||||
-product-name-nowrap = <span class="nowrap">{ -product-name }</span>
|
||||
-product-short-name = Monitor
|
||||
-brand-name = Firefox
|
||||
-brand-Quantum = Firefox Quantum
|
||||
-brand-Mozilla = Mozilla
|
||||
|
@ -25,6 +26,7 @@ error-not-subscribed = Táto e-mailová adresa nie je prihlásená na odber zo s
|
|||
error-hibp-throttled = Príliš mnoho spojení k službe { -brand-HIBP }.
|
||||
error-hibp-connect = Chyba pri pripájaní k { -brand-HIBP }.
|
||||
error-hibp-load-breaches = Nepodarilo sa načítať údaje o únikoch.
|
||||
error-must-be-signed-in = Musíte byť prihlásení do svojho { -brand-fxa(case: "gen") }.
|
||||
hibp-notify-email-subject = { -product-name } - upozornenie, váš účet bol súčasťou úniku dát.
|
||||
home-title = { -product-name }
|
||||
home-not-found = Stránka nebola nájdená.
|
||||
|
@ -360,3 +362,38 @@ create-free-account =
|
|||
get-your-report-and-sign-up = Získajte správu a prihláste sa na odber upozornení.
|
||||
# Link title
|
||||
frequently-asked-questions = Často kladené otázky
|
||||
about-firefox-monitor = O { -product-name(case: "gen") }
|
||||
mozilla-dot-org = Mozilla.org
|
||||
preferences = Možnosti
|
||||
# Link title.
|
||||
home = Domov
|
||||
# Link title
|
||||
breaches = Úniky
|
||||
# Link title
|
||||
security-tips = Bezpečnostné tipy
|
||||
fxa-account = { -brand-fxa }
|
||||
# Aria button message to open menu. "Open Firefox Account Navigation"
|
||||
open-fxa-menu = Otvoriť ponuku { -brand-fxa(case: "gen") }
|
||||
# Appears above a snippet about the breach most recently reported to Firefox Monitor.
|
||||
latest-breach = NAPOSLEDY PRIDANÝ ÚNIK
|
||||
breach-added = Dátum nahlásenia:
|
||||
breach-discovered = Dátum odhalenia:
|
||||
# Link title
|
||||
more-about-this-breach = Ďalšie informácie o tomto úniku
|
||||
take-control = Získajte opäť kontrolu nad svojimi osobnými údajmi.
|
||||
cant-stop-hackers = Nemôžete zabrániť hackerom v hackovaní. No môžete sa vyvarovať zlých zvykov a sťažiť im prácu.
|
||||
read-more-tips = Ďalšie bezpečnostné tipy
|
||||
how-hackers-work = Porozumejte tomu, ako hackeri pracujú
|
||||
stay-alert = Buďte informovaní o nových únikoch
|
||||
monitor-several-emails = Monitorujte niekoľko e-mailových adries
|
||||
take-action = Podniknite kroky na ochranu svojich účtov
|
||||
|
||||
## What to do after data breach tips
|
||||
|
||||
|
||||
## Updated error messages
|
||||
|
||||
login-link-pre = Už ho máte?
|
||||
login-link = Prihláste sa
|
||||
# Link title
|
||||
learn-more-link = Ďalšie informácie
|
||||
|
|
|
@ -26,6 +26,7 @@ error-not-subscribed = Den här e-postadressen prenumererar inte på { -product-
|
|||
error-hibp-throttled = För många anslutningar till { -brand-HIBP }.
|
||||
error-hibp-connect = Det gick inte att ansluta till { -brand-HIBP }.
|
||||
error-hibp-load-breaches = Kunde inte ladda intrång.
|
||||
error-must-be-signed-in = Du måste vara inloggad på ditt { -brand-fxa }.
|
||||
hibp-notify-email-subject = { -product-name } varning: Ditt konto var inblandat i ett intrång.
|
||||
home-title = { -product-name }
|
||||
home-not-found = Sidan hittades inte.
|
||||
|
@ -632,3 +633,7 @@ filter-by = Filtrera efter kategori:
|
|||
# Title that appears in the mobile menu bar and opens the mobile menu when clicked.
|
||||
menu = Meny
|
||||
to-affected-email = Skicka intrångsvarningar till den drabbade e-postadressen
|
||||
# This string appears in a banner at the top of each page and is followed by a "Learn More" link.
|
||||
join-firefox = Det finns ett sätt att skydda din integritet. Gå med i { -brand-name }.
|
||||
# Link title
|
||||
learn-more-link = Läs mer.
|
||||
|
|
|
@ -356,7 +356,11 @@ read-more-tips = Daha dazla güvenlik ipucu
|
|||
how-hackers-work = Hacker’ların nasıl çalıştığını anlayın
|
||||
monitor-your-online-accounts = { -brand-fxa } ile ihlal uyarılarına kaydolun.
|
||||
stay-alert = Yeni ihlallere karşı tetikte kalın
|
||||
if-your-info = Bilgileriniz yeni bir veri ihlalinde karşımıza çıkarsa size bir uyarı göndereceğiz.
|
||||
search-all-emails = İhallere dahil olabilecek tüm e-posta adreslerinizi arayın ve yeni tehditler hakkında uyarı alın.
|
||||
monitor-several-emails = Birden fazla e-postayı izleyin
|
||||
take-action = Hesaplarınızı korumak için harekete geçin
|
||||
keep-your-data-safe = Verilerinizi siber suçlulardan korumak için neler yapmanız gerektiğini öğrenin.
|
||||
website-breach = Web sitesi ihlali
|
||||
sensitive-breach = Hassas web sitesi ihlali
|
||||
data-aggregator-breach = Veri toplayıcı ihlali
|
||||
|
@ -367,6 +371,9 @@ sensitive-breach-plural = Hassas ihlaller
|
|||
data-aggregator-breach-plural = Veri toplayıcı ihlalleri
|
||||
unverified-breach-plural = Doğrulanmamış ihlaller
|
||||
spam-list-breach-plural = Spam listesi ihlalleri
|
||||
what-data = Ele geçirilen veriler:
|
||||
sensitive-sites = { -product-name } hassas siteleri nasıl ele alıyor?
|
||||
delayed-reporting-headline = Bu ihlalin bildirilmesi neden bu kadar uzun sürdü?
|
||||
about-fxm-headline = { -product-name } hakkında
|
||||
# How Firefox Monitor works
|
||||
how-fxm-works = { -product-name } nasıl çalışır?
|
||||
|
@ -383,24 +390,53 @@ make-new-pw-unique = Yeni parolanız eskisinden ve tüm parolalarınızdan farkl
|
|||
strength-of-your-pw = Parolalarınızın kalitesi, internetteki güvenliğinizi doğrudan etkiler.
|
||||
create-strong-passwords = Güçlü parolalar nasıl oluşturulur?
|
||||
stop-reusing-pw = Aynı parolaları kullanmayın
|
||||
create-unique-pw = Benzersiz parolalar oluşturun ve bunları parola yöneticisi gibi güvenli bir yerde saklayın.
|
||||
five-myths = Parola yöneticileri hakkında 5 şehir efsanesi
|
||||
create-a-fxa = Tam ihlal raporunuzu görmek ve ihlal uyarıları almak için { -brand-fxa } açın.
|
||||
feat-security-tips = Hesaplarınızı korumanız için güvenlik ipuçları
|
||||
sign-up-for-fxa = { -brand-fxa } açın
|
||||
# This string is shown beneath each of the user’s email addresses to indicate
|
||||
# how many known breaches that email address was found in.
|
||||
appears-in-x-breaches =
|
||||
{ $breachCount ->
|
||||
[one] Bilinen { $breachCount } ihlalde yer alıyor.
|
||||
*[other] Bilinen { $breachCount } ihlalde yer alıyor.
|
||||
}
|
||||
see-if-breached = Çevrimiçi veri ihlallerinde verilerinizin çalınmış olabilir mi? Hemen öğrenin.
|
||||
check-for-breaches = İhlalleri kontrol et
|
||||
find-out-what-hackers-know = Hacker’ların sizin hakkınızda neler bildiklerini öğrenin, onların bir adım önüne geçin.
|
||||
search-for-your-email = 2007’ye uzanan bilindik veri ihlallerinde e-posta adresinizi arayın.
|
||||
back-to-top = Başa dön
|
||||
comm-opt-1 = Tüm ihlal uyarılarını { $primaryEmail } adresine gönder.
|
||||
stop-monitoring-this = Bu e-postayı izlemeyi durdur.
|
||||
resend-verification = Doğrulama e-postasını yeniden gönder
|
||||
add-new-email = Yeni e-posta adresi ekle
|
||||
send-verification = Doğrulama bağlantısını gönder
|
||||
# This string is a header on the user preferences page and
|
||||
# appears above a check-box list of user options which allow
|
||||
# the user to choose whether or not they want to receive breach
|
||||
# alerts for all of their monitored email addresses to a single
|
||||
# email address.
|
||||
global-communication = İletişim
|
||||
breach-summary = İhlal özeti
|
||||
show-breaches-for-this-email = Bu e-postayı içeren tüm ihlalleri göster.
|
||||
link-change-primary = Ana e-posta adresini değiştir
|
||||
link-change-primary = Birincil e-posta adresini değiştir
|
||||
remove-fxm = { -product-name }’ü kaldır
|
||||
manage-email-addresses = E-posta adreslerini yönet
|
||||
latest-breach-link = Bu ihlale dahil olup olmadığınızı öğrenin
|
||||
welcome-back = Yeniden hoş geldin { $userName }!
|
||||
welcome-user = Hoş geldin { $userName }!
|
||||
breach-alert-subject = { -product-name } yeni bir veri ihlalinde e-posta adresinizi tespit etti.
|
||||
your-info-was-discovered-headline = Bilgileriniz yeni bir veri ihlalinde tespit edildi.
|
||||
what-to-do-after-breach = Veri ihlalinden sonra ne yapılmalı?
|
||||
ba-next-step-1 = Parolanızı güçlü ve benzersiz bir parolayla değiştirin.
|
||||
faq2 = Bu ihlali bana bildirmeniz neden bu kadar uzun sürdü?
|
||||
new-breaches-found =
|
||||
{ $breachCount ->
|
||||
[one] { $breachCount } YENİ İHLAL BULUNDU
|
||||
*[other] { $breachCount } YENİ İHLAL BULUNDU
|
||||
}
|
||||
account-not-required = { -brand-fxa } için { -brand-name } tarayıcısı gerekmez. Size { -brand-Mozilla } hizmetleri hakkında bilgi gönderebiliriz.
|
||||
get-alerted = Yeni ihlallerden haberdar olun.
|
||||
no-other-breaches-found = Temel aramada başka bir ihlal bulunamadı.
|
||||
no-results-blurb = Üzgünüz, bu ihlal veritabanımızda yok.
|
||||
|
@ -414,15 +450,67 @@ all-breaches = Tüm ihlaller
|
|||
|
||||
error-bot-headline = Arama geçici olarak kullanılamıyor
|
||||
error-csrf-headline = Oturum zaman aşımına uğradı
|
||||
error-csrf-blurb = Tarayıcınızın geri düğmesine tıklayın, sayfayı tazeleyin ve tekrar deneyin.
|
||||
login-link-pre = Hesabınız var var?
|
||||
login-link = Giriş yap
|
||||
# This string is displayed under a large numeral that indicates the total number
|
||||
# of email address a user has signed up for monitoring. Don’t add $emails to
|
||||
# your localization, because it would result in the number showing twice.
|
||||
email-addresses-being-monitored =
|
||||
{ $emails ->
|
||||
[one] e-posta adresi izleniyor
|
||||
*[other] e-posta adresi izleniyor
|
||||
}
|
||||
# This string is displayed under a large numeral that indicates the total number
|
||||
# of data breaches that have exposed the user’s information. Don’t add $breaches to
|
||||
# your localization, because it would result in the number showing twice.
|
||||
data-breaches-exposed =
|
||||
{ $breaches ->
|
||||
[one] veri ihlalinde bilgileriniz ele geçirilmiş
|
||||
*[other] veri ihlalinde bilgileriniz ele geçirilmiş
|
||||
}
|
||||
# This string is displayed under a large numeral that indicates the total number
|
||||
# of data breaches that exposed a user’s password. Don’t add $passwords to
|
||||
# your localization, because it would result in the number showing twice.
|
||||
passwords-exposed =
|
||||
{ $passwords ->
|
||||
[one] parolanız ihlallerde ele geçirilmiş
|
||||
*[other] parolanız ihlallerde ele geçirilmiş
|
||||
}
|
||||
# Button
|
||||
see-additional-breaches = Diğer ihlallere bakın
|
||||
# This string is shown at the top of the scan results page and is followed
|
||||
# by the email address that the user searched.
|
||||
# In page, it reads "Results for: searchedEmail@monitor.com"
|
||||
results-for = { $userEmail } sonuçları
|
||||
other-monitored-emails = İzlenen diğer e-postalar
|
||||
email-verification-required = E-posta doğrulaması gerekiyor
|
||||
fxa-primary-email = { -brand-fxa } e-postası - birincil
|
||||
see-if-youve-been-part = Çevrimiçi veri ihlallerinde verilerinizin çalınmış olabilir mi? Hemen öğrenin.
|
||||
get-ongoing-breach-monitoring = İstediğiniz sayıda e-posta adresinin ihlallerini sürekli olarak takip edin.
|
||||
# This is a button and follows a headline reading "Was your info exposed in the ___ breach?"
|
||||
find-out = Öğrenin
|
||||
# This string appears on breach detail pages and is followed by a list
|
||||
# of data classes that the breach exposed.
|
||||
additional-information-including = Ek bilgiler:
|
||||
# Title
|
||||
email-addresses-title = E-posta adresi
|
||||
# This is a standardized breach overview blurb that appears on all breach detail pages.
|
||||
# $breachTitle is the name of the breached company or website.
|
||||
# $breachDate and $addedDate are calendar dates.
|
||||
breach-overview = { $breachDate } tarihinde { $breachTitle } bir veri ihlaline uğradı. İhlal keşfedildikten ve doğrulandıktan sonra { $addedDate } tarihinde veritabanımıza eklendi.
|
||||
# Title appearing on the Preferences dashboard.
|
||||
monitor-preferences = { -product-short-name } tercihleri
|
||||
# When a user is signed in, this appears in the drop down menu
|
||||
# and is followed by the user's primary Firefox Account email.
|
||||
signed-in-as = { $userEmail } olarak giriş yapıldı
|
||||
# Appears on the All Breaches page and is followed by a list of filter options
|
||||
# that a user can filter the visible breaches by.
|
||||
filter-by = Kategoriye göre filtrele:
|
||||
# Title that appears in the mobile menu bar and opens the mobile menu when clicked.
|
||||
menu = Menü
|
||||
to-affected-email = İhlal uyarılarını etkilenen e-posta adresine gönder
|
||||
# This string appears in a banner at the top of each page and is followed by a "Learn More" link.
|
||||
join-firefox = Gizliliğinizi korumanın bir yolu var. { -brand-name }’a katılın.
|
||||
# Link title
|
||||
learn-more-link = Daha fazla bilgi alın.
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
# - Translated.
|
||||
-product-name = Firefox Monitor
|
||||
-product-name-nowrap = <span class="nowrap">{ -product-name }</span>
|
||||
-product-short-name = Monitor
|
||||
-brand-name = Firefox
|
||||
-brand-Quantum = Firefox Quantum
|
||||
-brand-Mozilla = Mozilla
|
||||
|
@ -356,3 +357,48 @@ create-free-account =
|
|||
get-your-report-and-sign-up = Отримайте свій звіт і підпишіться на отримання попереджень.
|
||||
# Link title
|
||||
frequently-asked-questions = Часті питання
|
||||
about-firefox-monitor = Про { -product-name }
|
||||
mozilla-dot-org = Mozilla.org
|
||||
preferences = Налаштування
|
||||
# Link title.
|
||||
home = Домівка
|
||||
# Link title
|
||||
breaches = Витік даних
|
||||
# Link title
|
||||
security-tips = Поради щодо безпеки
|
||||
fxa-account = { -brand-fxa }
|
||||
# Aria button message to open menu. "Open Firefox Account Navigation"
|
||||
open-fxa-menu = Відкрийте { -brand-fxa }
|
||||
breach-added = Повідомлення про витік даних:
|
||||
breach-discovered = Виявлено витік даних:
|
||||
# Link title
|
||||
more-about-this-breach = Докладніше про цей витік даних
|
||||
take-control = Відновіть контроль над особистими даними.
|
||||
cant-stop-hackers = Ви не можете зупинити хакерів. Але ви можете позбутися шкідливих звичок, які полегшують їхню роботу.
|
||||
read-more-tips = Прочитайте більше порад щодо безпеки
|
||||
how-hackers-work = Зрозумійте, як працюють хакери
|
||||
monitor-your-online-accounts = Підпишіться на повідомлення про витік даних за допомогою { -brand-fxa }.
|
||||
stay-alert = Дізнавайтеся про нові витоки даних
|
||||
if-your-info = Якщо ваша інформація опиниться в новому витоку даних, ми надішлемо вам повідомлення.
|
||||
search-all-emails = Перевірте всі ваші адреси електронної пошти та отримуйте повідомлення про нові загрози.
|
||||
monitor-several-emails = Відслідковуйте декілька адрес електронної пошти
|
||||
take-action = Вживайте заходів для захисту своїх облікових записів
|
||||
keep-your-data-safe = Дізнайтеся, що потрібно зробити для збереження ваших даних від кіберзлочинців.
|
||||
website-breach = Витік даних із сайту
|
||||
sensitive-breach = Витік конфіденційної інформації з сайту
|
||||
data-aggregator-breach = Витік даних з агрегатора
|
||||
unverified-breach = Непідтверджений витік даних
|
||||
spam-list-breach = Витік списку надсилання спаму
|
||||
website-breach-plural = Витоки даних із сайту
|
||||
sensitive-breach-plural = Витоки конфіденційної інформації
|
||||
data-aggregator-breach-plural = Витоки даних з агрегатора
|
||||
unverified-breach-plural = Непідтверджені витоки даних
|
||||
spam-list-breach-plural = Витоки списку надсилання спаму
|
||||
what-data = Які дані скомпрометовані:
|
||||
sensitive-sites = Як { -product-name } ставиться до сайтів з конфіденційною інформацією?
|
||||
|
||||
## What to do after data breach tips
|
||||
|
||||
|
||||
## Updated error messages
|
||||
|
||||
|
|
|
@ -12,6 +12,9 @@ avatars = Аватари
|
|||
bank-account-numbers = Номери банківських рахунків
|
||||
beauty-ratings = Оцінки краси
|
||||
biometric-data = Біометричні дані
|
||||
# This string is the shortened version of "Biographies", and
|
||||
# refers to biographical data about a user.
|
||||
bios = Біографії
|
||||
browser-user-agent-details = Подробиці про user agent браузера
|
||||
browsing-histories = Історія перегляду
|
||||
buying-preferences = Вподобання покупок
|
||||
|
@ -37,6 +40,7 @@ education-levels = Рівні освіти
|
|||
email-addresses = Адреси електронної пошти
|
||||
email-messages = Повідомлення електронної пошти
|
||||
employers = Роботодавці
|
||||
employment-statuses = Статуси зайнятості
|
||||
ethnicities = Етнічні приналежності
|
||||
family-members-names = Імена родичів
|
||||
family-plans = Сімейні плани
|
||||
|
@ -101,6 +105,7 @@ smoking-habits = Куріння
|
|||
sms-messages = SMS-повідомлення
|
||||
social-connections = Соціальні зв'язки
|
||||
social-media-profiles = Профілі соціальних мереж
|
||||
social-security-numbers = Номери соціального страхування
|
||||
spoken-languages = Знання мов
|
||||
support-tickets = Запити в службу підтримки
|
||||
survey-results = Результати опитування
|
||||
|
|
|
@ -26,6 +26,7 @@ error-not-subscribed = 此电子邮件地址未订阅 { -product-name }。
|
|||
error-hibp-throttled = 与 { -brand-HIBP } 的连接过多。
|
||||
error-hibp-connect = 连接 { -brand-HIBP } 时出错。
|
||||
error-hibp-load-breaches = 未能加载泄露信息。
|
||||
error-must-be-signed-in = 您必须先登录 { -brand-fxa }。
|
||||
hibp-notify-email-subject = { -product-name } 警报:您的账号信息已遭泄露。
|
||||
home-title = { -product-name }
|
||||
home-not-found = 找不到网页。
|
||||
|
|
|
@ -26,6 +26,7 @@ error-not-subscribed = 此電子郵件地址未訂閱 { -product-name }。
|
|||
error-hibp-throttled = 與 { -brand-HIBP } 的連線太多。
|
||||
error-hibp-connect = 連線到 { -brand-HIBP } 時發生錯誤。
|
||||
error-hibp-load-breaches = 無法載入資料外洩資訊。
|
||||
error-must-be-signed-in = 您必須先登入 { -brand-fxa }。
|
||||
hibp-notify-email-subject = { -product-name } 警告: 您的帳號資料已遭外洩。
|
||||
home-title = { -product-name }
|
||||
home-not-found = 找不到頁面。
|
||||
|
|
|
@ -91,10 +91,11 @@
|
|||
"scripts": {
|
||||
"js:minify": "minify public/dist/app.min.js -o public/dist/app.min.js",
|
||||
"js:concat": "concat -o public/dist/app.min.js public/js/*.js",
|
||||
"js:allBreaches": "minify public/js/all-breaches/all-breaches.js -o public/dist/all-breaches.min.js",
|
||||
"css:minify": "cleancss -o public/dist/app.min.css public/dist/app.min.css",
|
||||
"css:concat": "concat -o public/dist/app.min.css public/css/*.css",
|
||||
"build:css": "run-s css:concat css:minify",
|
||||
"build:js": "run-s js:concat js:minify",
|
||||
"build:js": "run-s js:concat js:allBreaches js:minify",
|
||||
"build:polyfills": "minify public/js/polyfills/edge.js -o public/dist/edge.min.js",
|
||||
"watch:js": "onchange 'public/js/monitor.js' -- npm run build:js",
|
||||
"watch:css": "onchange 'public/css/*.css' -- npm run build:css",
|
||||
|
|
|
@ -1,8 +1,13 @@
|
|||
main.all-breaches-main {
|
||||
.all-breaches-main {
|
||||
min-height: auto;
|
||||
color: var(--grey1);
|
||||
}
|
||||
|
||||
span.x-close-bg,
|
||||
svg.x-close {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.hide-breaches,
|
||||
.lazy-img {
|
||||
opacity: 0;
|
||||
|
@ -28,7 +33,7 @@ main.all-breaches-main {
|
|||
flex-direction: column;
|
||||
}
|
||||
|
||||
button#show-all-breaches {
|
||||
button.fuzzy-find-show-breaches {
|
||||
position: absolute;
|
||||
right: 1rem;
|
||||
bottom: 0;
|
||||
|
@ -45,6 +50,12 @@ button#show-all-breaches {
|
|||
transition: opacity 0.15s ease-in-out;
|
||||
}
|
||||
|
||||
.show-all-breaches.violet-btn {
|
||||
align-items: center;
|
||||
max-width: 260px;
|
||||
margin: var(--padding) auto calc(var(--padding) * 3) auto;
|
||||
}
|
||||
|
||||
#no-results-blurb {
|
||||
pointer-events: none;
|
||||
opacity: 0;
|
||||
|
@ -85,7 +96,7 @@ button#show-all-breaches {
|
|||
transition: all 0.15s ease-in-out;
|
||||
}
|
||||
|
||||
button#show-all-breaches.show {
|
||||
button.fuzzy-find-show-breaches.show {
|
||||
opacity: 1;
|
||||
transition: opacity 0.15s ease-in-out;
|
||||
}
|
||||
|
@ -199,60 +210,6 @@ input#fuzzy-find-input {
|
|||
margin: 1rem;
|
||||
}
|
||||
|
||||
/* back-to-top-bar */
|
||||
.back-to-top-bar {
|
||||
display: flex;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
justify-content: center;
|
||||
background-color: var(--color);
|
||||
box-shadow: 2px 2px 10px rgba(247, 247, 247, 0);
|
||||
z-index: 100;
|
||||
padding: var(--padding);
|
||||
transform: translateY(-100%);
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
button.back-to-top {
|
||||
border: none;
|
||||
padding: 0;
|
||||
position: absolute;
|
||||
right: calc(var(--padding) * 2);
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-content: center;
|
||||
flex-direction: column;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
}
|
||||
|
||||
button.back-to-top svg {
|
||||
display: block;
|
||||
transform: rotate(270deg);
|
||||
border: 2px solid var(--grey2);
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
padding: 6px;
|
||||
border-radius: 4rem;
|
||||
margin: 0 auto 0.5rem auto;
|
||||
}
|
||||
|
||||
button.back-to-top:focus,
|
||||
button.back-to-top:hover {
|
||||
box-shadow: none !important;
|
||||
border: none !important;
|
||||
}
|
||||
|
||||
.back-to-top-bar.show-bar {
|
||||
box-shadow: 2px 2px 10px rgb(24, 24, 24);
|
||||
transform: translateY(0);
|
||||
padding: 4rem;
|
||||
transition: transform 0.3s ease, box-shadow 0.15s ease;
|
||||
}
|
||||
|
||||
.plus-sign-wrap {
|
||||
display: flex;
|
||||
background-color: rgba(0, 0, 0, 0.07);
|
||||
|
@ -275,7 +232,7 @@ button.back-to-top:hover {
|
|||
@media screen and (max-width: 1000px) {
|
||||
.ab.breach-card.three-up {
|
||||
flex: 1 1 45%;
|
||||
max-width: 460px;
|
||||
max-width: 45%;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -284,31 +241,9 @@ button.back-to-top:hover {
|
|||
padding: var(--padding);
|
||||
}
|
||||
|
||||
.back-to-top-bar {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.ab.breach-card.three-up {
|
||||
max-width: 100%;
|
||||
margin: 0.5rem auto;
|
||||
flex: 1 1 100%;
|
||||
}
|
||||
|
||||
button.back-to-top {
|
||||
flex-direction: row;
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
right: auto;
|
||||
margin-top: var(--margin);
|
||||
}
|
||||
|
||||
button.back-to-top svg {
|
||||
margin: 0;
|
||||
display: inline-block;
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
padding: 3px;
|
||||
margin-right: var(--margin);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -70,6 +70,8 @@ body {
|
|||
min-height: 100vh;
|
||||
width: 100vw;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.cool-gradient {
|
||||
|
@ -556,7 +558,7 @@ div.sprite {
|
|||
}
|
||||
|
||||
.clear-header {
|
||||
padding-top: 14rem;
|
||||
padding-top: 16rem;
|
||||
}
|
||||
|
||||
.hide-mobile {
|
||||
|
|
|
@ -134,10 +134,6 @@ main.breach-detail {
|
|||
}
|
||||
|
||||
@media screen and (max-width: 600px) {
|
||||
.col-8.breach-details {
|
||||
margin-top: 2rem !important;
|
||||
}
|
||||
|
||||
.what-to-do-tips h2.section-headline-light {
|
||||
text-align: center;
|
||||
margin-left: auto;
|
||||
|
|
|
@ -176,10 +176,6 @@ p.confirm-submit {
|
|||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.dashboard.clear-header {
|
||||
padding-top: 12rem;
|
||||
}
|
||||
|
||||
.welcome-back,
|
||||
.section-headline.dash {
|
||||
font-size: 1.1rem;
|
||||
|
|
|
@ -6,12 +6,34 @@ header {
|
|||
background-color: var(--color);
|
||||
z-index: 2;
|
||||
box-shadow: 0 0 5px 0 #20123a1c;
|
||||
transition: box-shadow 0.2s ease;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
header.show-shadow {
|
||||
box-shadow: 2px 2px 10px rgba(24, 24, 24, 0.75);
|
||||
transition: box-shadow 0.2s ease;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
.show-nav-bars {
|
||||
transform: translateY(0);
|
||||
-webkit-transform: translateY(0);
|
||||
transform-origin: top;
|
||||
opacity: 1;
|
||||
max-height: 200px;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.hide-nav-bars {
|
||||
transform: translateY(-60px);
|
||||
-webkit-transform: translateY(-60px);
|
||||
transform-origin: top;
|
||||
opacity: 0;
|
||||
max-height: 0;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.fxm-branding {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.fx-monitor {
|
||||
|
@ -48,29 +70,30 @@ nav {
|
|||
background-color: rgba(255, 255, 255, 0);
|
||||
padding-right: calc(1rem + 1vw);
|
||||
padding-left: calc(1rem + 1vw);
|
||||
text-align: center;
|
||||
justify-content: center;
|
||||
font-size: 1rem;
|
||||
color: rgba(255, 255, 255, 0.9);
|
||||
}
|
||||
|
||||
.nav-link.active-link {
|
||||
.active-link {
|
||||
font-weight: 700;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.nav-link.active-link::after {
|
||||
width: 50%;
|
||||
.active-link-underline::after {
|
||||
height: 0.15rem;
|
||||
background-image: var(--monitorGradient);
|
||||
max-width: 6rem;
|
||||
background: var(--monitorGradient);
|
||||
opacity: 0;
|
||||
display: block;
|
||||
content: "";
|
||||
position: absolute;
|
||||
bottom: -10px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.active-link-underline.active-link::after {
|
||||
opacity: 1;
|
||||
transition: opacity 0.15s ease-in-out;
|
||||
}
|
||||
|
||||
.drop-down-menu {
|
||||
|
@ -130,22 +153,6 @@ nav {
|
|||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
/* mobile-menu */
|
||||
.mobile-menu {
|
||||
padding: 0 1rem;
|
||||
}
|
||||
|
||||
.mobile-menu .nav-link {
|
||||
padding-top: 0.75rem;
|
||||
padding-bottom: 0.75rem;
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
|
||||
.mobile-menu .nav-link:hover {
|
||||
background-color: var(--color);
|
||||
transition: background-color 0.15s ease-in-out;
|
||||
}
|
||||
|
||||
/* signed-in user avatar */
|
||||
.avatar-wrapper {
|
||||
border-radius: 50%;
|
||||
|
@ -251,32 +258,149 @@ nav {
|
|||
}
|
||||
|
||||
.fxa-menu-link:hover {
|
||||
background-color: rgba(155, 155, 165, 0.06);
|
||||
background-color: rgba(155, 155, 165, 0.15);
|
||||
transition: all 0.15s ease;
|
||||
}
|
||||
|
||||
.top-bar {
|
||||
z-index: 1;
|
||||
position: relative;
|
||||
background-color: #1d1133;
|
||||
padding: 1rem 1.75rem;
|
||||
border-bottom: 1px solid #2b2156;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.learn-more {
|
||||
margin-left: 0.5rem;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
text-decoration: underline;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.join-fx-wrap {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.join-fx-img {
|
||||
content: "";
|
||||
background-image: url("/img/firefox-master-logo.png");
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
background-size: contain;
|
||||
min-width: 24px;
|
||||
height: 24px;
|
||||
margin: auto 16px auto auto;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 800px) {
|
||||
.fx-monitor {
|
||||
font-size: 1.4rem;
|
||||
.top-bar {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.desktop-menu .nav-link {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.nav-link.active-link::after {
|
||||
.active-link::after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.mobile-nav {
|
||||
visibility: visible;
|
||||
background-color: #1c1033;
|
||||
box-shadow: 0 2px 2px -1px #0202024d;
|
||||
transition: all 0.2s ease;
|
||||
padding: 0;
|
||||
flex-wrap: wrap;
|
||||
flex-direction: column;
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.mobile-menu a {
|
||||
.mobile-menu a.nav-link {
|
||||
color: rgba(255, 255, 255, 0.9);
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding: 0.75rem 1rem;
|
||||
border-radius: 4px;
|
||||
transition: all 0.15s ease-in-out;
|
||||
}
|
||||
|
||||
.mobile-menu .nav-link:hover {
|
||||
background-color: var(--color);
|
||||
opacity: 1;
|
||||
transition: all 0.15s ease-in-out;
|
||||
}
|
||||
|
||||
.mobile-menu {
|
||||
margin: auto;
|
||||
border-radius: 0;
|
||||
flex-direction: column;
|
||||
flex-wrap: wrap;
|
||||
visibility: hidden;
|
||||
padding: 0 1.75rem;
|
||||
max-height: 0;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
background-color: var(--inkLight);
|
||||
z-index: 0;
|
||||
color: rgba(255, 255, 255, 0);
|
||||
-webkit-user-select: none;
|
||||
transition: all 0.25s ease;
|
||||
}
|
||||
|
||||
.mobile-menu-open .mobile-menu {
|
||||
top: 3rem;
|
||||
max-height: 1000px;
|
||||
visibility: visible;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
padding-top: 1rem;
|
||||
padding-bottom: 1rem;
|
||||
transition: all 0.15s ease;
|
||||
}
|
||||
|
||||
.nav-link.drop-down-menu,
|
||||
.mobile-menu-open .nav-link {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.nav-link.drop-down-menu {
|
||||
-webkit-user-select: none;
|
||||
pointer-events: none;
|
||||
padding: 1rem 2.75rem;
|
||||
background-color: var(--inkLight);
|
||||
width: 100%;
|
||||
z-index: 1;
|
||||
border-bottom: 1px solid var(--inkLight);
|
||||
transition: border-bottom 0.15s ease;
|
||||
}
|
||||
|
||||
.mobile-menu-open .drop-down-menu {
|
||||
border-bottom: 1px solid var(--color);
|
||||
transition: border-bottom 0.15s ease;
|
||||
}
|
||||
|
||||
.mobile-menu-open svg.toggle-down {
|
||||
transform: rotate(180deg);
|
||||
transition: transform 0.15s ease;
|
||||
}
|
||||
|
||||
.drop-down-menu svg.toggle-down {
|
||||
opacity: 0.7;
|
||||
right: 2.75rem;
|
||||
}
|
||||
|
||||
.drop-down-menu .toggle-down path {
|
||||
fill: rgba(255, 255, 255, 1);
|
||||
}
|
||||
|
||||
.nav-link {
|
||||
padding-left: 2.75rem;
|
||||
padding-right: 2.75rem;
|
||||
text-align: left;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -285,6 +409,15 @@ nav {
|
|||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
.drop-down-menu svg.toggle-down {
|
||||
right: 2rem;
|
||||
}
|
||||
|
||||
.top-bar {
|
||||
text-align: left;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.nav-user-email {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
@ -301,39 +434,8 @@ nav {
|
|||
padding: 0.75rem 1.35rem;
|
||||
}
|
||||
|
||||
.mobile-nav {
|
||||
padding: 0;
|
||||
flex-wrap: wrap;
|
||||
flex-direction: column;
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.mobile-menu {
|
||||
margin: auto;
|
||||
border-radius: 0;
|
||||
flex-direction: column;
|
||||
flex-wrap: wrap;
|
||||
visibility: hidden;
|
||||
padding: 0 1.5rem;
|
||||
max-height: 0;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
background-color: var(--inkLight);
|
||||
z-index: 0;
|
||||
color: rgba(255, 255, 255, 0);
|
||||
-webkit-user-select: none;
|
||||
transition: all 0.25s ease;
|
||||
}
|
||||
|
||||
.mobile-menu-open .mobile-menu {
|
||||
top: 3rem;
|
||||
max-height: 1000px;
|
||||
visibility: visible;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
transition: all 0.15s ease;
|
||||
padding: 1rem 0.75rem;
|
||||
}
|
||||
|
||||
.nav-link.drop-down-menu,
|
||||
|
@ -341,44 +443,7 @@ nav {
|
|||
display: block;
|
||||
}
|
||||
|
||||
.nav-link.drop-down-menu,
|
||||
.mobile-menu-open .mobile-menu {
|
||||
.nav-link.drop-down-menu {
|
||||
padding: 1rem 1.75rem;
|
||||
}
|
||||
|
||||
.nav-link.drop-down-menu {
|
||||
-webkit-user-select: none;
|
||||
pointer-events: none;
|
||||
background-color: var(--inkLight);
|
||||
width: 100%;
|
||||
z-index: 1;
|
||||
border-bottom: 1px solid var(--inkLight);
|
||||
transition: border-bottom 0.15s ease;
|
||||
}
|
||||
|
||||
.drop-down-menu svg.toggle-down {
|
||||
opacity: 0.7;
|
||||
right: 2.35rem;
|
||||
}
|
||||
|
||||
.mobile-menu-open .drop-down-menu {
|
||||
border-bottom: 1px solid var(--color);
|
||||
transition: border-bottom 0.15s ease;
|
||||
}
|
||||
|
||||
.mobile-menu-open svg.toggle-down {
|
||||
transform: rotate(180deg);
|
||||
transition: transform 0.15s ease;
|
||||
}
|
||||
|
||||
.drop-down-menu .toggle-down path {
|
||||
fill: rgba(255, 255, 255, 1);
|
||||
}
|
||||
|
||||
.nav-link {
|
||||
padding-left: 1.75rem;
|
||||
padding-right: 1.75rem;
|
||||
text-align: left;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
.monitor-homepage {
|
||||
min-height: 92vh;
|
||||
padding-top: 9rem;
|
||||
background-color: var(--color);
|
||||
background-image: url(/img/landing/background-noodle-top2.svg);
|
||||
background-repeat: no-repeat;
|
||||
|
|
|
@ -2,6 +2,12 @@
|
|||
min-height: auto;
|
||||
}
|
||||
|
||||
.articles .col-9 {
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.security-tip-list-item {
|
||||
align-items: flex-start;
|
||||
margin-bottom: 1.75rem;
|
||||
|
@ -150,10 +156,16 @@ body {
|
|||
}
|
||||
|
||||
.article-wrapper {
|
||||
padding-top: 10rem;
|
||||
padding-top: 12rem;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.article-wrapper,
|
||||
.st-intro-wrap {
|
||||
width: 75%;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.article-headline {
|
||||
color: var(--color);
|
||||
font-size: 3rem;
|
||||
|
@ -168,7 +180,7 @@ body {
|
|||
opacity: 0.9;
|
||||
}
|
||||
|
||||
.article-paragraph a {
|
||||
a.st-copy-link {
|
||||
color: var(--blue3);
|
||||
}
|
||||
|
||||
|
@ -176,7 +188,7 @@ body {
|
|||
color: var(--color);
|
||||
}
|
||||
|
||||
.article-paragraph a:hover,
|
||||
a.st-copy-link:hover,
|
||||
a.st-link:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
@ -270,29 +282,116 @@ a.st-link {
|
|||
.st-headline .bold {
|
||||
display: block;
|
||||
text-transform: uppercase;
|
||||
font-size: 1.3rem;
|
||||
}
|
||||
|
||||
.st-call-out {
|
||||
margin: calc(var(--padding) * 2) auto;
|
||||
border-radius: var(--radius);
|
||||
border: 1px solid var(--grey3);
|
||||
padding: var(--padding);
|
||||
border-radius: 0.7rem;
|
||||
background: var(--monitorGradient);
|
||||
padding: 2px;
|
||||
box-shadow: 0 0 10px 1px rgba(205, 205, 212, 0.78);
|
||||
}
|
||||
|
||||
.inset {
|
||||
background-color: var(--bgLight);
|
||||
border-radius: 0.575rem;
|
||||
padding: calc(var(--padding) * 2);
|
||||
}
|
||||
|
||||
/* password dos and don't list */
|
||||
|
||||
.password-tip-list-wrapper {
|
||||
display: none; /* figure out how to make this work this week */
|
||||
border-radius: var(--radius);
|
||||
border: 1px solid var(--borderColor);
|
||||
.pw-tip-item {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.pw-tip-item.flx:nth-child(odd) {
|
||||
background-color: rgba(32, 18, 58, 0.031);
|
||||
}
|
||||
|
||||
.pw-do-hl,
|
||||
.pw-do {
|
||||
border-right: 1px solid var(--grey2);
|
||||
}
|
||||
|
||||
.pw-tip-headlines {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.pw-tip-headlines::after {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 3px;
|
||||
display: block;
|
||||
content: "";
|
||||
background: var(--monitorGradient);
|
||||
}
|
||||
|
||||
.pw-tip-headlines,
|
||||
.do-dont-hl {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.do-dont-hl {
|
||||
padding: 2rem 1rem;
|
||||
flex: 1 1 50%;
|
||||
}
|
||||
|
||||
.do-dont-hl h4 {
|
||||
align-items: center;
|
||||
font-size: 1.5rem;
|
||||
position: relative;
|
||||
color: var(--blue5);
|
||||
}
|
||||
|
||||
.icon-dont::before {
|
||||
background-image: url("/img/svg/x-close-red.svg");
|
||||
}
|
||||
|
||||
.icon-do::before {
|
||||
background-image: url("/img/svg/green-check.svg");
|
||||
}
|
||||
|
||||
.icon-do::before,
|
||||
.icon-dont::before {
|
||||
left: -2.5rem;
|
||||
content: "";
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
background-size: contain;
|
||||
background-position: center center;
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.do-dont-wrap {
|
||||
padding: var(--padding);
|
||||
flex: 1 1 50%;
|
||||
}
|
||||
|
||||
.do-dont {
|
||||
width: 80%;
|
||||
line-height: 150%;
|
||||
font-size: 1.1rem;
|
||||
font-weight: 500;
|
||||
color: var(--color);
|
||||
}
|
||||
|
||||
.password-tip-list {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.pw-tip-table {
|
||||
border-radius: 0.7rem;
|
||||
box-shadow: 0 0 10px 1px rgba(205, 205, 212, 0.78);
|
||||
}
|
||||
|
||||
.password-tip-list-headline {
|
||||
text-align: center;
|
||||
padding: var(--padding) var(--padding) 0 var(--padding);
|
||||
font-weight: 800;
|
||||
color: var(--color);
|
||||
letter-spacing: 1px;
|
||||
padding: calc(var(--padding) * 2) var(--padding);
|
||||
margin-bottom: 0;
|
||||
font-size: 2.25rem;
|
||||
}
|
||||
|
||||
.do-list-item,
|
||||
|
@ -317,32 +416,6 @@ a.st-link {
|
|||
transition: background-color 0.15s ease-in-out;
|
||||
}
|
||||
|
||||
li.do-list-item:first-of-type,
|
||||
li.dont-list-item:first-of-type {
|
||||
text-align: center;
|
||||
justify-content: center;
|
||||
border-top: 1px solid var(--borderColor);
|
||||
font-family: "FirefoxSharpSans", 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
font-weight: 700;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
|
||||
li.dont-list-item,
|
||||
li.do-list-item {
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
li.do-list-item:first-of-type {
|
||||
border-bottom: 3px solid green;
|
||||
border-right: 1px solid var(--borderColor);
|
||||
}
|
||||
|
||||
li.dont-list-item:first-of-type {
|
||||
border-bottom: 3px solid var(--alertRed);
|
||||
background-color: var(--color);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.article-toggle svg.toggle-down {
|
||||
display: none;
|
||||
}
|
||||
|
@ -372,6 +445,28 @@ li.dont-list-item:first-of-type {
|
|||
}
|
||||
|
||||
@media screen and (max-width: 800px) {
|
||||
.pw-tip-headlines::after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.do-dont-wrap {
|
||||
flex: 1 1 100% !important;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.pw-tip-table {
|
||||
background-color: rgba(0, 0, 0, 0);
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.pw-tip-item {
|
||||
flex-direction: column;
|
||||
margin-bottom: 3rem;
|
||||
border-radius: 0.7rem;
|
||||
overflow: hidden;
|
||||
border: none !important;
|
||||
}
|
||||
|
||||
.security-tips-headline {
|
||||
font-size: var(--headline);
|
||||
}
|
||||
|
@ -379,10 +474,62 @@ li.dont-list-item:first-of-type {
|
|||
.security-tip-link {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.article-wrapper,
|
||||
.st-intro-wrap {
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.do-dont-hl-mobile {
|
||||
position: relative;
|
||||
font-weight: bold;
|
||||
font-size: 1.25rem;
|
||||
margin-bottom: 0.25rem;
|
||||
color: var(--blue5);
|
||||
}
|
||||
|
||||
.do-dont-hl-mobile::before {
|
||||
width: 1.5rem;
|
||||
height: 1.5rem;
|
||||
left: -2.15rem;
|
||||
}
|
||||
|
||||
.do-dont-hl {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.do-dont {
|
||||
text-align: left;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.pw-do {
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
}
|
||||
|
||||
.pw-dont {
|
||||
position: relative;
|
||||
background-color: rgba(32, 18, 58, 0.05);
|
||||
}
|
||||
|
||||
.pw-dont::before {
|
||||
width: 1.25rem;
|
||||
height: 1.25rem;
|
||||
background-color: white;
|
||||
display: block;
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: -0.75rem;
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 600px) { /* some articles become toggled closed */
|
||||
.st-intro {
|
||||
.st-intro,
|
||||
.article-list-item,
|
||||
.article-paragraph {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
|
@ -395,11 +542,6 @@ li.dont-list-item:first-of-type {
|
|||
font-size: var(--headline);
|
||||
}
|
||||
|
||||
.article-list-item,
|
||||
.article-paragraph {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.drop-cap {
|
||||
font-size: 28px;
|
||||
padding-right: 1px;
|
||||
|
@ -430,6 +572,10 @@ li.dont-list-item:first-of-type {
|
|||
margin: 1rem 0;
|
||||
}
|
||||
|
||||
.st-icon {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.st-next-steps .st-toggle-wrapper {
|
||||
border: 1px solid var(--grey8);
|
||||
border-radius: 0.25rem;
|
||||
|
@ -473,4 +619,16 @@ li.dont-list-item:first-of-type {
|
|||
.logo-title-wrapper .arrow-head-right {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.do-dont-wrap {
|
||||
padding: calc(var(--padding) * 2) var(--margin);
|
||||
}
|
||||
|
||||
.st-subhead {
|
||||
padding: 1rem 0;
|
||||
}
|
||||
|
||||
.st-call-out {
|
||||
margin: calc(var(--padding) * 3) auto;
|
||||
}
|
||||
}
|
||||
|
|
После Ширина: | Высота: | Размер: 8.7 KiB |
Двоичные данные
public/img/firefox-monitor.png
До Ширина: | Высота: | Размер: 36 KiB После Ширина: | Высота: | Размер: 23 KiB |
Двоичные данные
public/img/logos/Elance.png
До Ширина: | Высота: | Размер: 1.1 KiB После Ширина: | Высота: | Размер: 2.4 KiB |
Двоичные данные
public/img/logos/List.png
До Ширина: | Высота: | Размер: 2.8 KiB После Ширина: | Высота: | Размер: 2.1 KiB |
Двоичные данные
public/img/logos/PaddyPower.png
До Ширина: | Высота: | Размер: 3.1 KiB После Ширина: | Высота: | Размер: 3.3 KiB |
Двоичные данные
public/img/logos/Staminus.png
До Ширина: | Высота: | Размер: 2.1 KiB После Ширина: | Высота: | Размер: 2.7 KiB |
Двоичные данные
public/img/logos/WPSandbox.png
До Ширина: | Высота: | Размер: 1.3 KiB После Ширина: | Высота: | Размер: 2.1 KiB |
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill="#54ffbd" d="M6 14a1 1 0 0 1-.707-.293l-3-3a1 1 0 0 1 1.414-1.414l2.157 2.157 6.316-9.023a1 1 0 0 1 1.639 1.146l-7 10a1 1 0 0 1-.732.427A.863.863 0 0 1 6 14z"></path></svg>
|
После Ширина: | Высота: | Размер: 267 B |
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" class="x-close" width="16" height="16" viewBox="0 0 16 16"><path fill="#ff4f5e" d="M9.061 8l3.47-3.47a.75.75 0 0 0-1.061-1.06L8 6.939 4.53 3.47a.75.75 0 1 0-1.06 1.06L6.939 8 3.47 11.47a.75.75 0 1 0 1.06 1.06L8 9.061l3.47 3.47a.75.75 0 0 0 1.06-1.061z"></path></svg>
|
После Ширина: | Высота: | Размер: 307 B |
|
@ -1,11 +1,16 @@
|
|||
"use strict";
|
||||
|
||||
function replaceLogo(e) {
|
||||
e.target.src = "/img/logos/missing-logo-icon.png";
|
||||
e.target.removeEventListener("error", replaceLogo);
|
||||
return true;
|
||||
}
|
||||
|
||||
function breachImages() {
|
||||
this.active = false;
|
||||
this.lazyLoad = () => {
|
||||
let lazyImages = [].slice.call(document.querySelectorAll(".lazy-img"));
|
||||
if (this.active === false) {
|
||||
const lazyImages = [].slice.call(document.querySelectorAll(".lazy-img"));
|
||||
if (!this.active) {
|
||||
this.active = true;
|
||||
const winHeight = window.innerHeight;
|
||||
lazyImages.forEach(lazyImage => {
|
||||
|
@ -13,11 +18,8 @@ function breachImages() {
|
|||
lazyImage.classList.add("lazy-loaded");
|
||||
lazyImage.classList.remove("lazy-img");
|
||||
lazyImage.src = lazyImage.dataset.src;
|
||||
lazyImage.srcset = lazyImage.dataset.srcset;
|
||||
lazyImage.addEventListener("error", replaceLogo);
|
||||
|
||||
lazyImages = lazyImages.filter(image => {
|
||||
return image !== lazyImage;
|
||||
});
|
||||
if (lazyImages.length === 0) {
|
||||
document.removeEventListener("scroll", this.lazyLoad);
|
||||
window.removeEventListener("resize", this.lazyLoad);
|
||||
|
@ -51,28 +53,27 @@ function clearBreaches(wrapper) {
|
|||
}
|
||||
}
|
||||
|
||||
function makeBreaches(breachArray, breachCardWrapper) {
|
||||
function makeBreaches(breaches, LocalizedBreachCardStrings, breachCardWrapper, breachLogos) {
|
||||
breachCardWrapper.classList.toggle("hide-breaches");
|
||||
clearBreaches(breachCardWrapper);
|
||||
|
||||
const fragment = document.createDocumentFragment();
|
||||
fragment["id"] = "all-breaches";
|
||||
|
||||
for (const breach of breachArray) {
|
||||
for (const breach of breaches) {
|
||||
const card = document.createElement("a");
|
||||
|
||||
card["classList"] = `breach-card ${breach.Category} three-up ab drop-shadow`;
|
||||
card["classList"] = "breach-card three-up ab drop-shadow";
|
||||
card["href"] = `/breach-details/${breach.Name}`;
|
||||
card["data-breach-title"] = breach.Title;
|
||||
fragment.appendChild(card);
|
||||
|
||||
|
||||
const logoWrapper = makeDiv("breach-logo-wrapper", card);
|
||||
|
||||
const breachLogo = document.createElement("img");
|
||||
breachLogo["alt"] = "";
|
||||
breachLogo["classList"] = "breach-logo lazy-img";
|
||||
breachLogo.dataset.srcset = `/img/logos/${breach.LogoPath}`;
|
||||
breachLogo.dataset.src = `/img/logos/${breach.LogoPath}`;
|
||||
breachLogo.src = "/img/logos/lazyPlaceHolder.png";
|
||||
logoWrapper.appendChild(breachLogo);
|
||||
|
||||
|
@ -84,134 +85,113 @@ function makeBreaches(breachArray, breachCardWrapper) {
|
|||
makeBreachInfoSpans("breach-title", breach.Title, wrapper);
|
||||
|
||||
// added date
|
||||
makeBreachInfoSpans("breach-key", breach.String.AddedDate, wrapper);
|
||||
makeBreachInfoSpans("breach-key", LocalizedBreachCardStrings.BreachAdded, wrapper);
|
||||
makeBreachInfoSpans("breach-value", breach.AddedDate, wrapper);
|
||||
|
||||
// compromised accounts
|
||||
makeBreachInfoSpans("breach-key", breach.String.CompromisedAccounts, wrapper);
|
||||
makeBreachInfoSpans("breach-key", LocalizedBreachCardStrings.CompromisedAccounts, wrapper);
|
||||
makeBreachInfoSpans("breach-value", breach.PwnCount, wrapper);
|
||||
|
||||
// compromised data
|
||||
makeBreachInfoSpans("breach-key", breach.String.CompromisedData, wrapper);
|
||||
makeBreachInfoSpans("breach-key", LocalizedBreachCardStrings.CompromisedData, wrapper);
|
||||
makeBreachInfoSpans("breach-value", breach.DataClasses, wrapper);
|
||||
|
||||
// add link at bottom of card
|
||||
wrapper = makeDiv("breach-card-link-wrap", breachInfoWrapper);
|
||||
makeBreachInfoSpans("more-about-this-breach", breach.String.MoreInfoLink, wrapper);
|
||||
makeBreachInfoSpans("more-about-this-breach", LocalizedBreachCardStrings.MoreInfoLink, wrapper);
|
||||
}
|
||||
|
||||
breachCardWrapper.appendChild(fragment);
|
||||
breachCardWrapper.classList.toggle("hide-breaches");
|
||||
const breachLogos = new breachImages();
|
||||
breachLogos.lazyLoad();
|
||||
document.addEventListener("scroll", breachLogos.lazyLoad);
|
||||
window.addEventListener("resize", breachLogos.lazyLoad);
|
||||
window.addEventListener("orientationchange", breachLogos.lazyLoad);
|
||||
return breachArray;
|
||||
const loader = document.getElementById("breaches-loader");
|
||||
|
||||
loader.classList = ["hide"];
|
||||
return breaches;
|
||||
}
|
||||
|
||||
(async() => {
|
||||
|
||||
if (document.getElementById("all-breaches")) {
|
||||
const breachCardWrapper = document.getElementById("all-breaches");
|
||||
function initBreaches() {
|
||||
const breachCardWrapper = document.querySelector("#all-breaches");
|
||||
if (breachCardWrapper) {
|
||||
const breachWrapper = document.getElementById("breach-array-json");
|
||||
const {LocalizedBreachCardStrings, breaches} = JSON.parse(breachWrapper.dataset.breachArray);
|
||||
|
||||
const breachArray = JSON.parse(breachWrapper.dataset.breachArray);
|
||||
const breachLogos = new breachImages();
|
||||
document.addEventListener("scroll", breachLogos.lazyLoad);
|
||||
window.addEventListener("resize", breachLogos.lazyLoad);
|
||||
window.addEventListener("orientationchange", breachLogos.lazyLoad);
|
||||
|
||||
makeBreaches(breachArray, breachCardWrapper);
|
||||
|
||||
document.onreadystatechange = () => {
|
||||
if (document.readyState === "complete") {
|
||||
const loader = document.getElementById("breaches-loader");
|
||||
loader.classList.add("hide");
|
||||
}
|
||||
const doBreaches = (arr) => {
|
||||
makeBreaches(arr, LocalizedBreachCardStrings, breachCardWrapper, breachLogos);
|
||||
};
|
||||
|
||||
const showAllBreaches = document.getElementById("show-all-breaches");
|
||||
const firstFifteen = breaches.slice(0,15);
|
||||
doBreaches(firstFifteen);
|
||||
|
||||
const noResultsBlurb = document.getElementById("no-results-blurb");
|
||||
|
||||
const fuzzyFindInput = document.getElementById("fuzzy-find-input");
|
||||
const fuzzyFinder = document.getElementById("fuzzy-form");
|
||||
|
||||
showAllBreaches.addEventListener("click", (e) => {
|
||||
e.preventDefault();
|
||||
fuzzyFindInput.value = "";
|
||||
makeBreaches(breachArray, breachCardWrapper);
|
||||
showAllBreaches.classList = ["show-all-breaches"];
|
||||
noResultsBlurb.classList = "";
|
||||
return false;
|
||||
const [fuzzyShowAll, showHiddenBreaches] = document.querySelectorAll(".show-all-breaches");
|
||||
|
||||
showHiddenBreaches.addEventListener("click", (e) => {
|
||||
doBreaches(breaches);
|
||||
showHiddenBreaches.classList.add("hide");
|
||||
});
|
||||
|
||||
const win = window;
|
||||
const backToTopBar = document.getElementById("back-to-top-bar");
|
||||
win.onscroll = function(e) {
|
||||
if (win.pageYOffset < 400) {
|
||||
if (backToTopBar.classList.contains("show-bar")) {
|
||||
backToTopBar.classList.remove("show-bar");
|
||||
}
|
||||
return;
|
||||
}
|
||||
if ((this.oldScroll > this.scrollY + 50) && win.pageYOffset > 1000) {
|
||||
if (!backToTopBar.classList.contains("show-bar") && !backToTopBar.classList.contains("to-top")) {
|
||||
backToTopBar.classList.add("show-bar");
|
||||
}
|
||||
}
|
||||
if (this.oldScroll < this.scrollY && backToTopBar.classList.contains("show-bar")) {
|
||||
backToTopBar.classList.remove("show-bar");
|
||||
}
|
||||
this.oldScroll = this.scrollY;
|
||||
};
|
||||
|
||||
const backToTopButton = document.getElementById("back-to-top");
|
||||
backToTopButton.addEventListener("click", () => {
|
||||
window.scrollTo(0, 0);
|
||||
fuzzyShowAll.addEventListener("click", (e) => {
|
||||
e.preventDefault();
|
||||
fuzzyFindInput.value = "";
|
||||
doBreaches(breaches);
|
||||
noResultsBlurb.classList = [""];
|
||||
fuzzyShowAll.classList = ["fuzzy-find-show-breaches"];
|
||||
});
|
||||
|
||||
const searchBreaches = (e) => {
|
||||
e.preventDefault();
|
||||
e.stopImmediatePropagation();
|
||||
|
||||
// hide purple "Show All" button
|
||||
// show button to clear fuzzy input
|
||||
showHiddenBreaches.classList = ["hide"];
|
||||
fuzzyShowAll.classList = ["fuzzy-find-show-breaches show"];
|
||||
|
||||
const breachSearchTerm = fuzzyFindInput.value.toLowerCase();
|
||||
|
||||
// filter breach array by search term
|
||||
const filteredBreachArray = breachArray.filter(breach => {
|
||||
const filteredBreachArray = breaches.filter(breach => {
|
||||
return breach.Title.toLowerCase().startsWith(breachSearchTerm);
|
||||
});
|
||||
|
||||
// if hitting enter off a zero results search, restore breaches
|
||||
// and clear out input
|
||||
if (e.keyCode === 13) {
|
||||
if (noResultsBlurb.classList.contains("show")) {
|
||||
makeBreaches(breachArray, breachCardWrapper);
|
||||
noResultsBlurb.classList = "";
|
||||
showAllBreaches.classList = ["show-all-breaches"];
|
||||
fuzzyFindInput.value = "";
|
||||
return false;
|
||||
}
|
||||
makeBreaches(filteredBreachArray, breachCardWrapper);
|
||||
if (e.keyCode === 13 && noResultsBlurb.classList.contains("show")) {
|
||||
doBreaches(breaches);
|
||||
noResultsBlurb.classList.remove("show");
|
||||
fuzzyShowAll.classList.remove("show");
|
||||
fuzzyFindInput.value = "";
|
||||
return false;
|
||||
}
|
||||
|
||||
// if no results, show "no results message"
|
||||
// otherwise make sure it isn't showing
|
||||
if (filteredBreachArray.length === 0) {
|
||||
noResultsBlurb.classList.add("show");
|
||||
} else {
|
||||
noResultsBlurb.classList = "";
|
||||
noResultsBlurb.classList = [""];
|
||||
}
|
||||
|
||||
makeBreaches(filteredBreachArray, breachCardWrapper);
|
||||
doBreaches(filteredBreachArray);
|
||||
return false;
|
||||
};
|
||||
|
||||
fuzzyFinder.addEventListener("keydown", (e) => {
|
||||
if (fuzzyFindInput.value.length !== 0 ) {
|
||||
showAllBreaches.classList.add("show");
|
||||
}
|
||||
if (e.keyCode === 13) {
|
||||
showAllBreaches.classList = ["show-all-breaches"];
|
||||
}
|
||||
});
|
||||
fuzzyFinder.addEventListener("keyup", searchBreaches);
|
||||
fuzzyFinder.addEventListener("submit", searchBreaches);
|
||||
}
|
||||
})();
|
||||
}
|
||||
|
||||
document.onreadystatechange = () => {
|
||||
if (document.readyState === "interactive") {
|
||||
initBreaches();
|
||||
}
|
||||
};
|
|
@ -136,8 +136,38 @@ function toggleArticles() {
|
|||
});
|
||||
}
|
||||
|
||||
function toggleMobileFeatures() {
|
||||
const windowWidth = window.innerWidth;
|
||||
function hideShowNavBars(win, navBar) {
|
||||
win.onscroll = function(e) {
|
||||
// catch a window that has resized from less than 600px
|
||||
// to greater than 600px and unhide navigation.
|
||||
if (win.innerWidth > 600) {
|
||||
navBar.classList = ["show-nav-bars"];
|
||||
return;
|
||||
}
|
||||
|
||||
if (win.pageYOffset < 100) {
|
||||
navBar.classList = ["show-nav-bars"];
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.oldScroll < this.scrollY) {
|
||||
navBar.classList = ["hide-nav-bars"];
|
||||
this.oldScroll = this.scrollY;
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.oldScroll > this.scrollY + 50) {
|
||||
navBar.classList = ["show-nav-bars"];
|
||||
this.oldScroll = this.scrollY;
|
||||
return;
|
||||
}
|
||||
this.oldScroll = this.scrollY;
|
||||
};
|
||||
}
|
||||
|
||||
function toggleMobileFeatures(topNavBar) {
|
||||
const win = window;
|
||||
const windowWidth = win.innerWidth;
|
||||
if (windowWidth > 800) {
|
||||
const emailCards = document.querySelectorAll(".col-9.email-card:not(.zero-breaches)");
|
||||
emailCards.forEach(card => {
|
||||
|
@ -150,6 +180,10 @@ function toggleMobileFeatures() {
|
|||
closeActiveEmailCards.forEach(card => {
|
||||
card.classList.remove("active");
|
||||
});
|
||||
|
||||
if (windowWidth < 600) {
|
||||
hideShowNavBars(win, topNavBar);
|
||||
}
|
||||
}
|
||||
|
||||
function toggleHeaderStates(header, win) {
|
||||
|
@ -160,41 +194,50 @@ function toggleHeaderStates(header, win) {
|
|||
}
|
||||
}
|
||||
|
||||
function styleActiveLink(locationHref) {
|
||||
let queryString = `.nav-link[href='${locationHref}']`;
|
||||
const activeLink = document.querySelector(queryString);
|
||||
if (activeLink) {
|
||||
return activeLink.firstChild.classList.add("active-link");
|
||||
}
|
||||
|
||||
if (locationHref.indexOf("/dashboard") !== -1) {
|
||||
queryString = queryString.replace("user/dashboard", "");
|
||||
return document.querySelector(queryString).firstChild.classList.add("active-link");
|
||||
}
|
||||
if (locationHref.indexOf("/security-tips") !== -1) {
|
||||
return document.querySelector(".nav-link[href*='/security-tips']").firstChild.classList.add("active-link");
|
||||
}
|
||||
}
|
||||
|
||||
( async() => {
|
||||
document.addEventListener("touchstart", function(){}, true);
|
||||
const win = window;
|
||||
const header = document.getElementById("header");
|
||||
const topNavigation = document.querySelector("#navigation-wrapper");
|
||||
win.addEventListener("pageshow", function() {
|
||||
const previousActiveLink = document.querySelector(".active-link");
|
||||
if (previousActiveLink) {
|
||||
previousActiveLink.classList.remove("active-link");
|
||||
}
|
||||
const navLinks = document.querySelectorAll(".nav-link");
|
||||
|
||||
navLinks.forEach(link => {
|
||||
if (link.href === win.location.href) {
|
||||
link.classList.add("active-link");
|
||||
}
|
||||
});
|
||||
|
||||
styleActiveLink(win.location.href);
|
||||
if (win.location.search.includes("utm_") && win.history.replaceState) {
|
||||
win.history.replaceState({}, "", win.location.toString().replace(/[?&]utm_.*/g, ""));
|
||||
}
|
||||
toggleMobileFeatures();
|
||||
toggleMobileFeatures(topNavigation);
|
||||
toggleArticles();
|
||||
toggleHeaderStates(header, win);
|
||||
document.forms ? (restoreInputs(), addFormListeners()) : null;
|
||||
});
|
||||
|
||||
// toggleMobileFeatures();
|
||||
win.addEventListener("resize", () => {
|
||||
toggleMobileFeatures();
|
||||
toggleMobileFeatures(topNavigation);
|
||||
toggleArticles();
|
||||
});
|
||||
|
||||
document.addEventListener("scroll", () => toggleHeaderStates(header, win));
|
||||
|
||||
document.querySelectorAll(".breach-img").forEach(logo => {
|
||||
document.querySelectorAll(".breach-logo:not(.lazy-img)").forEach(logo => {
|
||||
logo.addEventListener("error", (missingLogo) => {
|
||||
missingLogo.target.src = "/img/logos/missing-logo-icon.png";
|
||||
});
|
||||
|
|
|
@ -33,7 +33,7 @@ const articleCopy = {
|
|||
{
|
||||
subhead: "What makes a password easy to guess.",
|
||||
paragraphs: [
|
||||
"If hackers can get a list of email addresses from a data breach, they already have a good start. All they have to do is pick their website of choice and try these emails with the most popular passwords. Chances are, they’ll be able to get into quite a few accounts. So don’t use any of these <a href='https://www.teamsid.com/splashdatas-top-100-worst-passwords-of-2018/' class='worst-passwords' rel='noopener noreferrer'>100 Worst Passwords of 2018.</a>",
|
||||
"If hackers can get a list of email addresses from a data breach, they already have a good start. All they have to do is pick their website of choice and try these emails with the most popular passwords. Chances are, they’ll be able to get into quite a few accounts. So don’t use any of these <a class='st-copy-link' href='https://www.teamsid.com/splashdatas-top-100-worst-passwords-of-2018/' class='worst-passwords' rel='noopener noreferrer'>100 Worst Passwords of 2018.</a>",
|
||||
],
|
||||
list: [
|
||||
"123456 and password are the most commonly used passwords. Don’t use them.",
|
||||
|
@ -121,6 +121,29 @@ const articleCopy = {
|
|||
"A single word with one letter changed to an @ or ! (such as p@ssword!) doesn’t make for a strong password. Password cracking programs contain every type of these combinations, in every single language.",
|
||||
],
|
||||
},
|
||||
{
|
||||
subhead: "Certain words should be avoided in all passwords.",
|
||||
paragraphs: [
|
||||
"Many people use familiar people, places, or things in passwords because it makes their passwords easy to remember. This also makes your passwords easy for hackers to guess.",
|
||||
"According to a study conducted by Google, <span class='demi'>passwords that contain the following information are considered insecure because they’re easy to figure out.</span> You can find much of this info after reviewing someone’s social media profiles.",
|
||||
],
|
||||
list: [
|
||||
"Pet names",
|
||||
"A notable date, such as a wedding anniversary",
|
||||
"A family member’s birthday",
|
||||
"Your child’s name",
|
||||
"Another family member’s name",
|
||||
"Your birthplace",
|
||||
"A favorite holiday",
|
||||
"Something related to your favorite sports team",
|
||||
"The name of a significant other",
|
||||
"The word “Password”",
|
||||
],
|
||||
securityTip: {
|
||||
tipHeadline: "<span class='bold'>Security tip:</span> Steer clear of the 100 most-used passwords.",
|
||||
tipSubhead: "Every year, SplashData evaluates millions of leaked passwords and compiles the <a class='st-copy-link' target='_blank' rel='noopener noreferer' href='https://www.teamsid.com/splashdatas-top-100-worst-passwords-of-2018/'>100 most common ones.</a> The most recent list includes password, 123456, and other passwords you shouldn’t use. ",
|
||||
},
|
||||
},
|
||||
{
|
||||
subhead: "Use different passwords for every account.",
|
||||
paragraphs: [
|
||||
|
@ -141,7 +164,7 @@ const articleCopy = {
|
|||
paragraphs: [
|
||||
"Many websites offer two-factor authentication, also known as 2FA or multi-factor authentication. On top of your username and password, 2FA requires another piece of information to verify yourself. So, even if someone has your password, they can’t get in.",
|
||||
"Withdrawing money from an ATM is an example of 2FA. It requires your PIN code and your bank card. You need these two pieces to complete the transaction.",
|
||||
"Many websites support 2FA, including Google and Amazon. The site will text you a code to your phone to enter after your password. YubiKeys are USB ports that verify your accounts. Security apps like DUO allow you to verify your accounts through your phone.",
|
||||
"<a class='st-copy-link' target='_blank' rel='noopener noreferer' href='https://twofactorauth.org/'>Websites that support 2FA</a> include Google and Amazon. When you have 2FA enabled, the site will text you a code to enter after your password. Other forms of 2FA include YubiKeys USB ports and security apps like DUO. ",
|
||||
"When you set up 2FA, many sites will give you a list of backup codes to verify your account. A password manager is a great place to store these codes.",
|
||||
],
|
||||
},
|
||||
|
@ -150,27 +173,39 @@ const articleCopy = {
|
|||
{
|
||||
passwordDosAndDonts: {
|
||||
listHeadline: "Password do’s and don’ts",
|
||||
doList: [
|
||||
"Do's",
|
||||
"Do combine two or more unrelated words. Change letters to numbers or special characters.",
|
||||
"Do make your passwords at least 8 characters long. Aim for 12-15 characters.",
|
||||
"Do use a combination of upper- and lower-case letters, numbers, and symbols.",
|
||||
"Do include unusual words only you would know. It should seem nonsensical to other people.",
|
||||
"Do keep your passwords protected and safe, like encrypted in a password manager.",
|
||||
"Do spread various numbers and characters throughout your password.",
|
||||
"Do create unique and complex passwords for every site.",
|
||||
"Do use an extra layer of security with two-factor authentication (2FA).",
|
||||
],
|
||||
dontList: [
|
||||
"Dont's",
|
||||
"Don’t use the word “password,” or any combination of it. “P@ssword!” is just as easy for hackers to guess.",
|
||||
"Use short, one-word passwords, like sunshine, monkey, or football.",
|
||||
"Don’t place special characters (@, !, 0, etc.) only at the beginning or the end.",
|
||||
"Don’t include personal information like your birthdate, address, or family members’ names.",
|
||||
"Don’t share your passwords. Don’t put them on a piece of paper stuck to your computer.",
|
||||
"Don’t use common patterns like 111111, abc123, or 654321.",
|
||||
"Don’t use the same password everywhere.",
|
||||
"Don’t think a weaker password is safer because you have 2FA.",
|
||||
doDontList : [
|
||||
{
|
||||
do: "Do combine two or more unrelated words. Change letters to numbers or special characters.",
|
||||
dont: "Don’t use the word “password,” or any combination of it. “P@ssword!” is just as easy for hackers to guess.",
|
||||
},
|
||||
{
|
||||
do: "Do make your passwords at least 8 characters long. Aim for 12-15 characters.",
|
||||
dont: "Use short, one-word passwords, like sunshine, monkey, or football.",
|
||||
},
|
||||
{
|
||||
do: "Do use a combination of upper- and lower-case letters, numbers, and symbols.",
|
||||
dont: "Don’t place special characters (@, !, 0, etc.) only at the beginning or the end.",
|
||||
},
|
||||
{
|
||||
do: "Do include unusual words only you would know. It should seem nonsensical to other people.",
|
||||
dont: "Don’t include personal information like your birthdate, address, or family members’ names.",
|
||||
},
|
||||
{
|
||||
do: "Do keep your passwords protected and safe, like encrypted in a password manager.",
|
||||
dont: "Don’t share your passwords. Don’t put them on a piece of paper stuck to your computer.",
|
||||
},
|
||||
{
|
||||
do: "Do spread various numbers and characters throughout your password.",
|
||||
dont: "Don’t use common patterns like 111111, abc123, or 654321.",
|
||||
},
|
||||
{
|
||||
do: "Do create unique and complex passwords for every site.",
|
||||
dont: "Don’t use the same password everywhere.",
|
||||
},
|
||||
{
|
||||
do: "Do use an extra layer of security with two-factor authentication (2FA).",
|
||||
dont: "Don’t think a weaker password is safer because you have 2FA.",
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
|
@ -186,7 +221,7 @@ const articleCopy = {
|
|||
{
|
||||
toggles: [
|
||||
{
|
||||
subhead: "Be wary of public wifi networks. ",
|
||||
subhead: "Be wary of public Wi-Fi networks.",
|
||||
paragraphs: [
|
||||
"You can get Wi-Fi almost anywhere. But these open networks are the most vulnerable and tend to be the least secure. This includes the free Wi-Fi at restaurants, libraries, airports, and other public spaces. If you can avoid it, don’t use public Wi-Fi. Most importantly, don’t use these networks to log in to financial sites or shop online. It’s easy for anyone to see what you’re doing.",
|
||||
"Instead, we recommend using a Virtual Private Network (VPN), which lets you use public Wi-Fi more securely and keeps your online behavior private. A VPN routes your connection through a secure server that encrypts your data before you land on a web page. ",
|
||||
|
@ -197,15 +232,19 @@ const articleCopy = {
|
|||
paragraphs: [
|
||||
"Updating software on your computer or phone can seem like a pain, but it’s a crucial step to keeping devices safe. These updates fix bugs, software vulnerabilities, and security problems. Regularly updating your smartphone apps and operating systems makes your devices more secure.",
|
||||
],
|
||||
securityTip: {
|
||||
tipHeadline: "Tips for keeping all your online accounts secure:",
|
||||
tipList : [
|
||||
listHeadline: "Tips for keeping all your online accounts secure:",
|
||||
list: [
|
||||
"Use unique, strong passwords for every account",
|
||||
"Use a password manager to remember all your passwords for you",
|
||||
"Turn on two-factor authentication for an extra layer of security",
|
||||
"Use a VPN (Virtual Private Network) when using public Wi-Fi",
|
||||
"Update to the latest version of all software and apps",
|
||||
],
|
||||
],
|
||||
},
|
||||
{
|
||||
securityTip: {
|
||||
tipHeadline: "<span class='bold'>Security tip:</span> Turn on automatic updates.",
|
||||
tipSubhead: "You can set your computer, browser, apps, and phone to update automatically as soon as new updates become available. Set it and forget it!",
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -228,7 +267,7 @@ const articleCopy = {
|
|||
{
|
||||
subhead: "Be selective about who you give your email address to.",
|
||||
paragraphs: [
|
||||
"The more online accounts you create, the greater the risk is that you’ll be involved in a data breach. Many companies, services, apps, and websites ask for your email. But it’s not always required. Here are some ways to avoid giving out your email address:",
|
||||
"The more online accounts you create, the greater the risk that you’ll be involved in a data breach. Many companies, services, apps, and websites ask for your email. But it’s not always required. Here are some ways to avoid giving out your email address:",
|
||||
],
|
||||
list: [
|
||||
"Don’t create an account if it’s not required. For example, many online shopping portals allow you to check out as a guest.",
|
||||
|
@ -239,8 +278,8 @@ const articleCopy = {
|
|||
{
|
||||
subhead: "Use unique, strong passwords for every single account.",
|
||||
paragraphs: [
|
||||
"One of the best ways to protect yourself online is to use different passwords across all your online accounts. This way hackers won’t have the keys to your entire digital life if they get their hands on that one password you use everywhere.",
|
||||
"Your passwords also need to be strong. Single words (like sunshine, monkey, or football) make for weak passwords. So do these 100 most-commonly used passwords, which include password and 123456. Avoid pop-culture references, sports teams, and personal info... Do not use your address, birthday, names of family members, or pets’ names. The longer and more unique your passwords are, the harder they will be for hackers to guess.",
|
||||
"One of the best ways to protect yourself online is to use different passwords across all your online accounts. This way, hackers won’t have the keys to your entire digital life if they get their hands on that one password you use everywhere.",
|
||||
"Your passwords also need to be strong. Single words (like sunshine, monkey, or football) make for weak passwords. So do these 100 most-commonly used passwords, which include password and 123456. Avoid pop-culture references, sports teams, and personal info. Do not use your address, birthday, names of family members, or pets’ names. The longer and more unique your passwords are, the harder they will be for hackers to crack.",
|
||||
],
|
||||
securityTip: {
|
||||
tipHeadline: "<span class='bold'>Security tip:</span> How to create strong passwords.",
|
||||
|
@ -251,11 +290,11 @@ const articleCopy = {
|
|||
subhead: "Remember all your passwords with a password manager.",
|
||||
paragraphs: [
|
||||
"Ever forgotten your password? It happens all the time. The average person has 90 online accounts. And we’re being asked to create new ones all the time.",
|
||||
"The good news is you don’t have to recall all your passwords from memory. Password managers are secure, easy-to-use applications that do the remembering for you. They even fill your passwords into websites and apps when you need to log in. All you need to remember is a single password — the one you use to unlock your password manager. They can even generate hard-to-guess passwords to help make your accounts more secure. All your data is encrypted, making password managers pretty secure - even if they get hacked.",
|
||||
"The good news is you don’t have to recall all your passwords from memory. Password managers are secure, easy-to-use applications that do the remembering for you. They even fill your passwords into websites and apps when you need to log in. All you need to remember is a single password — the one you use to unlock your password manager. They can even generate hard-to-guess passwords to help make your accounts more secure. All your data is encrypted, making password managers pretty secure — even if they get hacked.",
|
||||
],
|
||||
securityTip: {
|
||||
tipHeadline: "<span class='bold'>Security tip:</span> These are the best password managers. ",
|
||||
tipSubhead: "Firefox Monitor recommends 1Password, LastPass, Dashlane, and Bitwarden for security and ease of use.",
|
||||
tipHeadline: "<span class='bold'>Security tip:</span>",
|
||||
tipSubhead: "Firefox recommends 1Password, LastPass, Dashlane, and Bitwarden for security and ease of use.",
|
||||
},
|
||||
},
|
||||
],
|
||||
|
@ -301,14 +340,14 @@ const articleCopy = {
|
|||
paragraphs: [
|
||||
"No privacy tool can completely guarantee your online safety. Even the most elaborate lock can be broken into. Yet we still lock our doors to our houses and cars. ",
|
||||
"The alternative to using a password manager is to rely on your own memory to remember all your credentials. This inevitably leads to recycling passwords or using variations — a bad habit that hackers love.",
|
||||
"A password managers can be such an effective security tool because it helps us improve bad habits. With a password manager installed on your computer and phone, it’s a lot easier to take your logins everywhere so you can use unique, strong passwords on every account.",
|
||||
"Password managers can be such an effective security tool because they help us improve bad habits. With a password manager installed on your computer and phone, it’s a lot easier to take your logins everywhere so you can use unique, strong passwords on every account.",
|
||||
],
|
||||
},
|
||||
{
|
||||
subhead: "<span class='myth'>Myth 3:</span> Storing all my passwords in one place makes them vulnerable to hackers.",
|
||||
paragraphs: [
|
||||
"Password managers don’t store all your credentials together in one place. Any data you store in a password manager — passwords, logins, security questions, and other sensitive info — is securely encrypted. Even if the password manager gets hacked, cyber criminals would not be able to see your logins.",
|
||||
"The only way to access your data is with a single master password that only you know. You use this password to unlock the manager on your computer, phone, or other devices. Once it’s unlocked, a password manager can fill in your logins to websites and apps for you.",
|
||||
"The only way to access your data is with a single master password that only you know. You use this password to unlock the manager on your computer, phone, or other devices. Once it’s unlocked, a password manager can fill in your logins to websites and apps.",
|
||||
],
|
||||
},
|
||||
{
|
||||
|
@ -452,7 +491,7 @@ function articleLinks(args) {
|
|||
stringId: "take-further-steps",
|
||||
class: "next-steps",
|
||||
pathToPartial: "svg/icon-trackers",
|
||||
subhead: "If financial data is exposed in a breach, identity theft is a potential risk.",
|
||||
subhead: "Find out how to mitigate the risks of identity theft to prevent financial loss.",
|
||||
},
|
||||
];
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ function getVars(args) {
|
|||
// How to dynamically detect Data Aggregator breaches?
|
||||
|
||||
function getBreachCategory(breach) {
|
||||
if (["Exactis"].includes(breach.Name)) {
|
||||
if (["Exactis", "Apollo", "YouveBeenScraped", "ElasticsearchSalesLeads", "Estonia", "MasterDeeds"].includes(breach.Name)) {
|
||||
return "data-aggregator-breach";
|
||||
}
|
||||
if (!breach.IsVerified) {
|
||||
|
|
|
@ -1,18 +1,16 @@
|
|||
"use strict";
|
||||
|
||||
const { getBreachCategory, localizeAndPrioritizeDataClasses } = require("./breach-detail");
|
||||
const { localizeAndPrioritizeDataClasses } = require("./breach-detail");
|
||||
const { prettyDate, localeString, localizedBreachDataClasses } = require("./hbs-helpers");
|
||||
const { LocaleUtils } = require("./../locale-utils");
|
||||
const { filterBreaches } = require("./../hibp");
|
||||
|
||||
function getLocalizedBreachCardStrings(locales) {
|
||||
// casing to reflect HIBP
|
||||
return {
|
||||
"AddedDate": LocaleUtils.fluentFormat(locales, "breach-added"),
|
||||
"BreachDate": LocaleUtils.fluentFormat(locales, "breach-discovered"),
|
||||
"CompromisedAccounts": LocaleUtils.fluentFormat(locales, "compromised-accounts"),
|
||||
"CompromisedData": LocaleUtils.fluentFormat(locales, "compromised-data"),
|
||||
"MoreInfoLink": LocaleUtils.fluentFormat(locales, "more-about-this-breach"),
|
||||
BreachAdded : LocaleUtils.fluentFormat(locales, "breach-added-label"),
|
||||
CompromisedAccounts: LocaleUtils.fluentFormat(locales, "compromised-accounts"),
|
||||
CompromisedData: LocaleUtils.fluentFormat(locales, "compromised-data"),
|
||||
MoreInfoLink: LocaleUtils.fluentFormat(locales, "more-about-this-breach"),
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -32,70 +30,28 @@ function dataClassesforCards(breach, locales) {
|
|||
return localizedBreachDataClasses(topTwoClasses.slice(0, 2), locales);
|
||||
}
|
||||
|
||||
function makeBreachCards(breaches, locales, filter=true) {
|
||||
const breachCardStrings = getLocalizedBreachCardStrings(locales);
|
||||
function sortBreaches(breaches) {
|
||||
breaches = breaches.sort((a,b) => {
|
||||
const oldestBreach = new Date(a.BreachDate);
|
||||
const newestBreach = new Date(b.BreachDate);
|
||||
return newestBreach-oldestBreach;
|
||||
});
|
||||
return breaches;
|
||||
}
|
||||
|
||||
function makeBreachCards(breaches, locales) {
|
||||
const formattedBreaches = [];
|
||||
const breachCardStrings = getLocalizedBreachCardStrings(locales);
|
||||
breaches = JSON.parse(JSON.stringify(breaches));
|
||||
|
||||
|
||||
if (filter && breaches.length > 1) {
|
||||
breaches.sort((a,b) => {
|
||||
const oldestBreach = new Date(a.BreachDate);
|
||||
const newestBreach = new Date(b.BreachDate);
|
||||
return newestBreach-oldestBreach;
|
||||
});
|
||||
}
|
||||
|
||||
for (const breach of breaches) {
|
||||
const breachCard = JSON.parse(JSON.stringify(breach));
|
||||
const breachCategory = getBreachCategory(breach);
|
||||
|
||||
breachCard.AddedDate = prettyDate(breach.AddedDate, locales);
|
||||
breachCard.PwnCount = localeString(breach.PwnCount,locales);
|
||||
breachCard.DataClasses = dataClassesforCards(breach, locales);
|
||||
|
||||
breachCard.Category = breachCategory; // "unverified-breach", etc. for styling cards
|
||||
breachCard.String = breachCardStrings; // "Compromised Data: , Compromised Accounts: ..."
|
||||
for (const breachCard of breaches) {
|
||||
getLocalizedBreachValues(locales, breachCard);
|
||||
breachCard.LocalizedBreachCardStrings = breachCardStrings; // "Compromised Data: , Compromised Accounts: ..."
|
||||
formattedBreaches.push(breachCard);
|
||||
}
|
||||
return formattedBreaches;
|
||||
}
|
||||
|
||||
function getBreachCategories(locales, categories = null) {
|
||||
if (!categories) {
|
||||
categories = [
|
||||
"website-breach",
|
||||
"sensitive-breach",
|
||||
"spam-list-breach",
|
||||
"unverified-breach",
|
||||
"data-aggregator-breach",
|
||||
];
|
||||
}
|
||||
|
||||
const breachCategories = {} ;
|
||||
|
||||
categories.forEach(category => {
|
||||
breachCategories[category] = {
|
||||
"category": category,
|
||||
"string": LocaleUtils.fluentFormat(locales, category),
|
||||
"categoryPlural": LocaleUtils.fluentFormat(locales, `${category}-plural`),
|
||||
};
|
||||
});
|
||||
|
||||
return breachCategories;
|
||||
}
|
||||
|
||||
function allBreaches(allBreaches, options) {
|
||||
const locales = options.data.root.req.supportedLocales;
|
||||
allBreaches = filterBreaches(allBreaches);
|
||||
const breachCategories = ["website-breach", "sensitive-breach", "data-aggregator-breach"];
|
||||
const allBreachesModule = {
|
||||
"breachCategories" : getBreachCategories(locales, breachCategories),
|
||||
};
|
||||
|
||||
return options.fn(allBreachesModule);
|
||||
}
|
||||
|
||||
|
||||
function lastAddedBreach(options) {
|
||||
const locales = options.data.root.req.supportedLocales;
|
||||
let latestBreach = [options.data.root.latestBreach];
|
||||
|
@ -106,21 +62,28 @@ function lastAddedBreach(options) {
|
|||
function getFoundBreaches(args) {
|
||||
const locales = args.data.root.req.supportedLocales;
|
||||
let userBreaches = args.data.root.foundBreaches;
|
||||
|
||||
userBreaches = makeBreachCards(userBreaches, locales, false);
|
||||
|
||||
userBreaches = makeBreachCards(userBreaches, locales);
|
||||
userBreaches.cardType = "two-up drop-shadow";
|
||||
return userBreaches;
|
||||
}
|
||||
|
||||
function getBreachArray(args) {
|
||||
const locales = args.data.root.req.supportedLocales;
|
||||
let allBreaches = args.data.root.breaches;
|
||||
function getLocalizedBreachValues(locales, breach) {
|
||||
breach.AddedDate = prettyDate(breach.AddedDate, locales);
|
||||
breach.PwnCount = localeString(breach.PwnCount,locales);
|
||||
breach.DataClasses = dataClassesforCards(breach, locales);
|
||||
return breach;
|
||||
}
|
||||
|
||||
function getBreachArray(breaches, args) {
|
||||
const locales = args.data.root.req.supportedLocales;
|
||||
breaches = JSON.parse(JSON.stringify(breaches));
|
||||
// should we consider filtering the breaches when the app loads
|
||||
// since we aren't ever showing them now anyway?
|
||||
breaches = filterBreaches(breaches);
|
||||
breaches = sortBreaches(breaches);
|
||||
|
||||
allBreaches = filterBreaches(allBreaches);
|
||||
const breaches = makeBreachCards(allBreaches, locales);
|
||||
breaches.forEach(breach => {
|
||||
// remove unused properties
|
||||
getLocalizedBreachValues(locales, breach);
|
||||
delete(breach.Description);
|
||||
delete(breach.IsVerified);
|
||||
delete(breach.ModifiedDate);
|
||||
|
@ -129,13 +92,18 @@ function getBreachArray(args) {
|
|||
delete(breach.IsRetired);
|
||||
delete(breach.IsSensitive);
|
||||
delete(breach.IsSpamList);
|
||||
delete(breach.BreachDate);
|
||||
});
|
||||
return JSON.stringify(breaches);
|
||||
|
||||
const allBreaches = {
|
||||
LocalizedBreachCardStrings: getLocalizedBreachCardStrings(locales),
|
||||
breaches: breaches,
|
||||
};
|
||||
return JSON.stringify(allBreaches);
|
||||
}
|
||||
|
||||
|
||||
module.exports = {
|
||||
allBreaches,
|
||||
lastAddedBreach,
|
||||
getFoundBreaches,
|
||||
makeBreachCards,
|
||||
|
|
|
@ -12,22 +12,23 @@ function getSignedInAs(args) {
|
|||
}
|
||||
|
||||
function navLinks(args) {
|
||||
const serverUrl = args.data.root.constants.SERVER_URL;
|
||||
const locales = args.data.root.req.supportedLocales;
|
||||
const links = [
|
||||
{
|
||||
title: "Home",
|
||||
stringId: "home",
|
||||
href: "/",
|
||||
href: `${serverUrl}/`,
|
||||
},
|
||||
{
|
||||
title: "Breaches",
|
||||
stringId: "breaches",
|
||||
href: "/breaches",
|
||||
href: `${serverUrl}/breaches`,
|
||||
},
|
||||
{
|
||||
title: "Security Tips",
|
||||
stringId: "security-tips",
|
||||
href: "/security-tips",
|
||||
href: `${serverUrl}/security-tips`,
|
||||
},
|
||||
];
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ function makeLanding(args) {
|
|||
},
|
||||
];
|
||||
} else {
|
||||
landingCopy.headline = LocaleUtils.fluentFormat(locales, "see-if-breached");
|
||||
landingCopy.headline = LocaleUtils.fluentFormat(locales, "see-if-youve-been-part");
|
||||
landingCopy.subhead = LocaleUtils.fluentFormat(locales, "find-out-what-hackers-know");
|
||||
}
|
||||
if (featuredBreach && featuredBreach.IsSensitive) {
|
||||
|
|
|
@ -37,7 +37,7 @@ function getScanResultsHeadline(args) {
|
|||
|
||||
|
||||
headlineStrings.headline = fluentNestedBold("fb-not-comp", args);
|
||||
headlineStrings.subhead = fluentNestedBold("other-breaches-found", args);
|
||||
headlineStrings.subhead = fluentNestedBold("other-known-breaches-found", args);
|
||||
return args.fn(headlineStrings);
|
||||
}
|
||||
|
||||
|
|
|
@ -38,8 +38,8 @@ function monitorFeaturesList(args) {
|
|||
{
|
||||
title: "Monitor several emails",
|
||||
titleStringId: "monitor-several-emails",
|
||||
subtitle: "Search all your email addresses for breaches and get alerts about new threats.",
|
||||
subtitleStringId: "search-all-emails",
|
||||
subtitle: "Get ongoing breach monitoring for multiple email addresses.",
|
||||
subtitleStringId: "get-ongoing-breach-monitoring",
|
||||
pictogramPath: "email",
|
||||
},
|
||||
{
|
||||
|
|
|
@ -59,7 +59,7 @@ async function checkNotifyCallsEverythingItShould(breachedEmail, recipientEmail)
|
|||
expect (mockFluentFormatCalls.length).toBe(1);
|
||||
const mockFluentFormatCallArgs = mockFluentFormatCalls[0];
|
||||
expect (mockFluentFormatCallArgs[0]).toEqual(["en"]);
|
||||
expect (mockFluentFormatCallArgs[1]).toBe("hibp-notify-email-subject");
|
||||
expect (mockFluentFormatCallArgs[1]).toBe("breach-alert-subject");
|
||||
|
||||
const mockSendEmailCalls = EmailUtils.sendEmail.mock.calls;
|
||||
expect (mockSendEmailCalls.length).toBe(1);
|
||||
|
|
|
@ -23,7 +23,7 @@ const createRequestBody = function(notificationType) {
|
|||
};
|
||||
|
||||
|
||||
test("ses notification with Permanent bounce unsubscribes recipient", async () => {
|
||||
test("ses notification with Permanent bounce unsubscribes recipient subscriber", async () => {
|
||||
// TODO: restore tests for ["General", "NoEmail", "Suppressed"] sub types
|
||||
const testEmail = "bounce@simulator.amazonses.com";
|
||||
const testHashes = [getSha1(testEmail)];
|
||||
|
@ -47,7 +47,7 @@ test("ses notification with Permanent bounce unsubscribes recipient", async () =
|
|||
});
|
||||
|
||||
|
||||
test("ses notification with Complaint unsubscribes recipient", async () => {
|
||||
test("ses notification with Complaint unsubscribes recipient subscriber", async () => {
|
||||
const testEmail = "complaint@simulator.amazonses.com";
|
||||
|
||||
await DB.addSubscriber(testEmail);
|
||||
|
@ -69,6 +69,28 @@ test("ses notification with Complaint unsubscribes recipient", async () => {
|
|||
});
|
||||
|
||||
|
||||
test("ses notification with Complaint unsubscribes recipient from email_addresses", async () => {
|
||||
const testPrimaryEmail = "secondary-email-complainer@mailinator.com";
|
||||
const testSignupLanguage = "en";
|
||||
const testUser = await DB.addSubscriber(testPrimaryEmail, testSignupLanguage);
|
||||
const testEmail = "complaint@simulator.amazonses.com";
|
||||
|
||||
await DB.addSubscriberUnverifiedEmailHash(testUser, testEmail);
|
||||
|
||||
const req = httpMocks.createRequest({
|
||||
method: "POST",
|
||||
url: "/ses/notification",
|
||||
body: createRequestBody("complaint"),
|
||||
});
|
||||
const resp = httpMocks.createResponse();
|
||||
|
||||
await ses.notification(req, resp);
|
||||
expect(resp.statusCode).toEqual(200);
|
||||
const noMoreEmailAddressRecord = await DB.getEmailAddressRecordByEmail(testEmail);
|
||||
expect(noMoreEmailAddressRecord).toBeUndefined();
|
||||
});
|
||||
|
||||
|
||||
test("ses notification with invalid signature responds with error and doesn't change subscribers", async () => {
|
||||
const testEmail = "complaint@simulator.amazonses.com";
|
||||
|
||||
|
@ -91,13 +113,14 @@ test("ses notification with invalid signature responds with error and doesn't ch
|
|||
});
|
||||
|
||||
|
||||
test("sns notification for FxA account delete deletes monitor subscriber record", async () => {
|
||||
test("sns notification for FxA account deletes monitor subscriber record", async () => {
|
||||
const testEmail = "fxa-deleter@mailinator.com";
|
||||
const testSignupLanguage = "en";
|
||||
const testFxaAccessToken = "abcdef123456789";
|
||||
const testFxaRefreshToken = "abcdef123456789";
|
||||
const testFxaUID = "3b1a9d27f85b4a4c977f3a84838f9116";
|
||||
const testFxaProfileData = JSON.stringify({uid: testFxaUID});
|
||||
await DB.addSubscriber(testEmail, testSignupLanguage, testFxaRefreshToken, testFxaProfileData);
|
||||
await DB.addSubscriber(testEmail, testSignupLanguage, testFxaAccessToken, testFxaRefreshToken, testFxaProfileData);
|
||||
|
||||
let subscribers = await DB.getSubscribersByHashes([getSha1(testEmail)]);
|
||||
expect(subscribers.length).toEqual(1);
|
||||
|
|
|
@ -165,7 +165,7 @@ test("user verify request with valid token but no session throws error", async (
|
|||
const resp = httpMocks.createResponse();
|
||||
|
||||
// Call code-under-test
|
||||
await expect(user.verify(req, resp)).rejects.toThrow("must-be-signed-in");
|
||||
await expect(user.verify(req, resp)).rejects.toThrow("error-must-be-signed-in");
|
||||
|
||||
const emailAddress = await DB.getEmailByToken(validToken);
|
||||
expect(emailAddress.verified).toBeFalsy();
|
||||
|
@ -348,7 +348,7 @@ test("user/remove-fxm GET request with invalid session returns error", async ()
|
|||
});
|
||||
const resp = httpMocks.createResponse();
|
||||
|
||||
await expect(user.getRemoveFxm(req, resp)).rejects.toThrow("must-be-signed-in");
|
||||
await expect(user.getRemoveFxm(req, resp)).rejects.toThrow("error-must-be-signed-in");
|
||||
});
|
||||
|
||||
|
||||
|
@ -371,14 +371,14 @@ test("user/remove-fxm POST request with invalid session returns error", async ()
|
|||
const resp = httpMocks.createResponse();
|
||||
|
||||
// Call code-under-test
|
||||
await expect(user.postRemoveFxm(req, resp)).rejects.toThrow("must-be-signed-in");
|
||||
await expect(user.postRemoveFxm(req, resp)).rejects.toThrow("error-must-be-signed-in");
|
||||
});
|
||||
|
||||
|
||||
test("user remove-fxm POST request with valid session removes from DB and revokes FXA OAuth token", async () => {
|
||||
const req = { fluentFormat: jest.fn(), session: { user: TEST_SUBSCRIBERS.firefox_account, reset: jest.fn() }};
|
||||
const resp = httpMocks.createResponse();
|
||||
FXA.revokeOAuthToken = jest.fn();
|
||||
FXA.revokeOAuthTokens = jest.fn();
|
||||
|
||||
await user.postRemoveFxm(req, resp);
|
||||
|
||||
|
@ -386,7 +386,7 @@ test("user remove-fxm POST request with valid session removes from DB and revoke
|
|||
expect(resp._getRedirectUrl()).toEqual("/");
|
||||
const subscriber = await DB.getEmailByToken(TEST_SUBSCRIBERS.firefox_account.primary_verification_token);
|
||||
expect(subscriber).toBeUndefined();
|
||||
expect(FXA.revokeOAuthToken).toHaveBeenCalledTimes(1);
|
||||
expect(FXA.revokeOAuthTokens).toHaveBeenCalledTimes(1);
|
||||
expect(req.session.reset).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
const HIBP = require("../hibp");
|
||||
const DB = require("../db/DB");
|
||||
const { TEST_EMAIL_ADDRESSES } = require("../db/seeds/test_subscribers");
|
||||
const { TEST_SUBSCRIBERS, TEST_EMAIL_ADDRESSES } = require("../db/seeds/test_subscribers");
|
||||
const getSha1 = require("../sha1-utils");
|
||||
|
||||
require("./resetDB");
|
||||
|
@ -152,14 +152,40 @@ test("setAllEmailsToPrimary updates column and returns subscriber", async() => {
|
|||
});
|
||||
|
||||
|
||||
test("removeSubscriber accepts email and removes the email address", async () => {
|
||||
test("removeSubscriber accepts subscriber and removes everything from subscribers and email_addresses tables", async () => {
|
||||
const startingSubscriber = await DB.getSubscriberByEmail(TEST_SUBSCRIBERS.firefox_account.primary_email);
|
||||
expect(startingSubscriber.id).toEqual(TEST_SUBSCRIBERS.firefox_account.id);
|
||||
const startingEmailAddressRecord = await DB.getEmailById(TEST_EMAIL_ADDRESSES.firefox_account.id);
|
||||
expect(startingEmailAddressRecord.id).toEqual(TEST_EMAIL_ADDRESSES.firefox_account.id);
|
||||
|
||||
await DB.removeSubscriber(startingSubscriber);
|
||||
|
||||
const noMoreSubscribers = await DB.getSubscriberByEmail(startingSubscriber.primary_email);
|
||||
expect(noMoreSubscribers).toBeUndefined();
|
||||
const noMoreEmailAddress = await DB.getEmailById(startingEmailAddressRecord.id);
|
||||
expect(noMoreEmailAddress).toBeUndefined();
|
||||
});
|
||||
|
||||
|
||||
test("removeEmail accepts email and removes from subscribers table", async () => {
|
||||
const testEmail = "removingFirefoxAccount@test.com";
|
||||
|
||||
const verifiedSubscriber = await DB.addSubscriber(testEmail);
|
||||
let subscribers = await DB.getSubscribersByHashes([getSha1(testEmail)]);
|
||||
const subscribers = await DB.getSubscribersByHashes([getSha1(testEmail)]);
|
||||
expect(subscribers.length).toEqual(1);
|
||||
|
||||
await DB.removeSubscriberByEmail(verifiedSubscriber.primary_email);
|
||||
subscribers = await DB.getSubscribersByHashes([getSha1(testEmail)]);
|
||||
expect(subscribers.length).toEqual(0);
|
||||
await DB.removeEmail(verifiedSubscriber.primary_email);
|
||||
const noMoreSubscribers = await DB.getSubscribersByHashes([getSha1(testEmail)]);
|
||||
expect(noMoreSubscribers.length).toEqual(0);
|
||||
});
|
||||
|
||||
|
||||
test("removeEmail accepts email and removes from email_addresses table", async () => {
|
||||
const testEmailAddress = TEST_EMAIL_ADDRESSES.all_emails_to_primary;
|
||||
const emailAddress = await DB.getEmailById(testEmailAddress.id);
|
||||
expect(emailAddress.email).toEqual(testEmailAddress.email);
|
||||
|
||||
await DB.removeEmail(emailAddress.email);
|
||||
const noMoreEmailAddress = await DB.getEmailById(testEmailAddress.id);
|
||||
expect(noMoreEmailAddress).toBeUndefined();
|
||||
});
|
||||
|
|
|
@ -10,14 +10,20 @@ jest.mock("got");
|
|||
|
||||
|
||||
test("revokeOAuthToken calls oauth destroy with fxa_refresh_token", async () => {
|
||||
const token = TEST_SUBSCRIBERS.firefox_account.fxa_refresh_token;
|
||||
const subscriber = TEST_SUBSCRIBERS.firefox_account;
|
||||
|
||||
await FXA.revokeOAuthToken(token);
|
||||
await FXA.revokeOAuthTokens(subscriber);
|
||||
|
||||
const gotCalls = got.mock.calls;
|
||||
expect(gotCalls.length).toEqual(1);
|
||||
const gotCallArgs = gotCalls[0];
|
||||
expect(gotCallArgs[0]).toContain("/v1/destroy");
|
||||
const gotCallOptions = gotCallArgs[1];
|
||||
expect(gotCallOptions.body.refresh_token).toEqual(token);
|
||||
expect(gotCalls.length).toEqual(2);
|
||||
|
||||
const accessGotCallArgs = gotCalls[0];
|
||||
expect(accessGotCallArgs[0]).toContain("/v1/destroy");
|
||||
const accessGotCallOptions = accessGotCallArgs[1];
|
||||
expect(accessGotCallOptions.body.token).toEqual(subscriber.fxa_access_token);
|
||||
|
||||
const refreshGotCallArgs = gotCalls[1];
|
||||
expect(refreshGotCallArgs[0]).toContain("/v1/destroy");
|
||||
const refreshGotCallOptions = refreshGotCallArgs[1];
|
||||
expect(refreshGotCallOptions.body.refresh_token).toEqual(subscriber.fxa_refresh_token);
|
||||
});
|
||||
|
|
|
@ -43,7 +43,9 @@
|
|||
</section>
|
||||
<section class="detail-section bg-white">
|
||||
<div class="row jst-cntr flx-col">
|
||||
{{> sign-up-banners/scan-results-sign-up }}
|
||||
{{#unless ./../req.session.user}}
|
||||
{{> sign-up-banners/scan-results-sign-up }}
|
||||
{{/unless}}
|
||||
<div id="what-is-this-breach" class="col-8 breach-details">
|
||||
{{> breach-detail-content-group whatIsThisBreach}}
|
||||
</div>
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
<div id="back-to-top-bar" class="back-to-top-bar">
|
||||
<button id="back-to-top" class="back-to-top" aria-label="{{ getString "back-to-top" }}">
|
||||
{{> svg/arrow-right }}
|
||||
{{ getString "back-to-top" }}
|
||||
</button>
|
||||
</div>
|
|
@ -0,0 +1,8 @@
|
|||
<div class="top-bar flx jst-cntr row-full-width">
|
||||
<div class="join-fx-wrap flx">
|
||||
<span class="join-fx-img"></span>
|
||||
<div class="join-fx-copy-wrap">
|
||||
<span class="join-fx-copy">{{ getString "join-firefox" }}<a class="learn-more" target="_blank" rel="noopener" href="https://www.mozilla.org/firefox/accounts/?utm_source=monitor.firefox.com&utm_medium=banner&utm_campaign=trailhead&utm_content=protect-your-privacy">{{ getString "learn-more-link" }}</a></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -1,4 +1,4 @@
|
|||
<a class="breach-card {{ Category }} {{ cardType }} {{#if NewBreach}} new-breach {{/if}}" {{#if latestBreach }} href="/?breach={{ Name }}" {{ else }} href="/breach-details/{{ Name }}" {{/if}}>
|
||||
<a class="breach-card {{ cardType }} {{#if NewBreach}} new-breach {{/if}}" {{#if latestBreach }} href="/?breach={{ Name }}" {{ else }} href="/breach-details/{{ Name }}" {{/if}}>
|
||||
<div class="breach-logo-wrapper flx">
|
||||
<img alt="" class="breach-logo breach-img" src="/img/logos/{{ LogoPath }}" />
|
||||
</div>
|
||||
|
@ -16,7 +16,7 @@
|
|||
{{else}}
|
||||
{{> breach-cards/added-date }}
|
||||
{{#if showPwnCount }}
|
||||
<span class="breach-key">{{ String.CompromisedAccounts }}</span>{{ PwnCount }}</span>
|
||||
<span class="breach-key">{{ LocalizedBreachCardStrings.CompromisedAccounts }}</span>{{ PwnCount }}</span>
|
||||
{{/if}}
|
||||
{{> breach-cards/data-classes }}
|
||||
{{/if}}
|
||||
|
@ -25,7 +25,7 @@
|
|||
{{#if latestBreach}}
|
||||
<span class="latest-breach-link">{{ getString "latest-breach-link" }}</span>
|
||||
{{else}}
|
||||
<span class="more-about-this-breach">{{ String.MoreInfoLink }}</span>
|
||||
<span class="more-about-this-breach">{{ LocalizedBreachCardStrings.MoreInfoLink }}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
<span class="breach-key">{{ String.AddedDate }}</span>
|
||||
<span class="breach-key">{{ LocalizedBreachCardStrings.BreachAdded }}</span>
|
||||
<span class="breach-value">{{ AddedDate }}</span>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{{#if DataClasses }}
|
||||
<span class="breach-key">{{ String.CompromisedData }}</span>
|
||||
<span class="breach-key">{{ LocalizedBreachCardStrings.CompromisedData }}</span>
|
||||
<span class="breach-value">{{ DataClasses }}</span>
|
||||
{{/if}}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
{{ getString "automated-message" }}
|
||||
</p>
|
||||
<p class="footer-copy" style="margin-top: 0px; font-weight: 300; color: #738597;">
|
||||
{{{ getString "we-sent-this-alert" userEmail=email }}}
|
||||
{{{ getString "we-sent-this-alert" userEmail=recipientEmail }}}
|
||||
</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">
|
||||
|
|
|
@ -4,10 +4,10 @@
|
|||
</td>
|
||||
<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>
|
||||
<p class="body-copy medium" style="padding: 2px 0px 2px 0px; margin: 0px; color: #333333; font-weight: 400; font-size: 14px;">{{ LocalizedBreachCardStrings.BreachAdded }}<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;">{{ LocalizedBreachCardStrings.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>
|
||||
<p class="body-copy medium" style="padding: 2px 0px 2px 0px; margin: 0px; color: #333333; font-weight: 400; font-size: 14px;">{{ LocalizedBreachCardStrings.CompromisedData }}<span class="body-copy" style="font-weight:300; padding-left: 6px; color: #333333">{{ DataClasses }}</span></p>
|
||||
{{/if}}
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
@ -3,6 +3,6 @@
|
|||
<form id="fuzzy-form" class="fuzzy-form">
|
||||
<input tabindex="1" type="text" id="fuzzy-find-input" class="fuzzy-find-input" placeholder="{{ getString "search-breaches" }}" autocomplete="off" /> <button tabindex="3" id="fuzzy-find-submit" class="fuzzy-find-submit" aria-label="{{ getString "search-breaches" }}">{{> svg/search-icon }}</button>
|
||||
</form>
|
||||
<button tabindex="2" id="show-all-breaches" class="show-all-breaches"><span class="x-close-bg">{{> svg/x-close }}</span></button>
|
||||
<button tabindex="2" id="fuzzy-show-all" class="fuzzy-find-show-breaches show-all-breaches"><span class="x-close-bg">{{> svg/x-close }}</span></button>
|
||||
<span id="no-results-blurb" class="no-results-blurb">{{ getString "no-results-blurb" }}</span>
|
||||
</div>
|
||||
|
|
|
@ -1,23 +1,26 @@
|
|||
<header id="header">
|
||||
<section class="row-full-width">
|
||||
<a class="flx-cntr fx-monitor-logo-wrapper" href="/" {{> analytics/internal-link eventLabel="Fx-Monitor-Logo" }}>
|
||||
<div class="sprite fx-monitor-logo"><!--Firefox Monitor logo--></div>
|
||||
<h1 class="fx-monitor"><span>Firefox</span> Monitor</h1>
|
||||
</a>
|
||||
<nav class="desktop-menu flx-cntr">
|
||||
{{> header/nav-links }}
|
||||
{{#if req.session.user}}
|
||||
{{> header/fxa-menu }}
|
||||
{{else}}
|
||||
<button id="sign-in-btn" class="open-oauth sign-in btn-light" {{> analytics/fxa id="fx-monitor-sign-in-button" }} data-event-category="Sign In Button">{{ getString "sign-in" }}</button>
|
||||
{{/if}}
|
||||
</nav>
|
||||
</section>
|
||||
<!--mobile navigation-->
|
||||
<section class="mobile-nav show-mobile">
|
||||
<span class="nav-link drop-down-menu">{{ getString "menu" }} {{> svg/toggle-down }}</span>
|
||||
<nav class="mobile-menu flx-cntr row-full-width">
|
||||
{{> header/nav-links }}
|
||||
</nav>
|
||||
</section>
|
||||
{{> branding-strip }}
|
||||
<div id="navigation-wrapper">
|
||||
<section class="row-full-width fxm-branding">
|
||||
<a class="flx-cntr fx-monitor-logo-wrapper" href="/" {{> analytics/internal-link eventLabel="Fx-Monitor-Logo" }}>
|
||||
<div class="sprite fx-monitor-logo"><!--Firefox Monitor logo--></div>
|
||||
<h1 class="fx-monitor"><span>Firefox</span> Monitor</h1>
|
||||
</a>
|
||||
<nav class="desktop-menu flx-cntr">
|
||||
{{> header/nav-links }}
|
||||
{{#if req.session.user}}
|
||||
{{> header/fxa-menu }}
|
||||
{{else}}
|
||||
<button id="sign-in-btn" class="open-oauth sign-in btn-light" {{> analytics/fxa id="fx-monitor-sign-in-button" }} data-event-category="Sign In Button">{{ getString "sign-in" }}</button>
|
||||
{{/if}}
|
||||
</nav>
|
||||
</section>
|
||||
<!--mobile navigation-->
|
||||
<section class="mobile-nav show-mobile">
|
||||
<span class="nav-link drop-down-menu">{{ getString "menu" }} {{> svg/toggle-down }}</span>
|
||||
<nav class="mobile-menu flx-cntr row-full-width">
|
||||
{{> header/nav-links }}
|
||||
</nav>
|
||||
</section>
|
||||
</div>
|
||||
</header>
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
{{#each (navLinks)}}
|
||||
<a class="nav-link" {{> analytics/internal-link eventLabel=this.title }} href="{{ this.href }}">{{ this.stringId }}</a>
|
||||
<a class="nav-link" {{> analytics/internal-link eventLabel=this.title }} href="{{ this.href }}"><span class="active-link-underline">{{ this.stringId }}</span></a>
|
||||
{{/each}}
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
{{#ifCompare UTM_SOURCE "===" "localhost"}}
|
||||
|
||||
<link rel="stylesheet" href="/css/all-breaches.css">
|
||||
<link rel="stylesheet" href="/css/app.css">
|
||||
<link rel="stylesheet" href="/css/articles.css">
|
||||
|
@ -22,7 +21,7 @@
|
|||
<link rel="stylesheet" href="/css/subpage.css">
|
||||
|
||||
|
||||
<script type="text/javascript" src="/js/all-breaches.js" defer></script>
|
||||
<script type="text/javascript" src="/js/all-breaches/all-breaches.js"></script>
|
||||
<script type="text/javascript" src="/js/analytics_dnt-helper.js" defer></script>
|
||||
<script type="text/javascript" src="/js/analytics_tracking_protection.js" defer></script>
|
||||
<script type="text/javascript" src="/js/fxa-analytics.js" defer></script>
|
||||
|
@ -34,5 +33,10 @@
|
|||
|
||||
{{else}}
|
||||
<link rel="stylesheet" href="/dist/app.min.css">
|
||||
|
||||
{{#ifCompare whichPartial "===" "top-level/all-breaches"}}
|
||||
<script type="text/javascript" src="/dist/all-breaches.min.js"></script>
|
||||
{{/ifCompare}}
|
||||
|
||||
<script type="text/javascript" src="/dist/app.min.js" defer></script>
|
||||
{{/ifCompare}}
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
|
||||
<div class="col-9 sign-up-wrapper">
|
||||
<div class="scan-res sign-up-banner drop-shadow">
|
||||
<div class="sign-up-headline-list-wrapper flx flx-col">
|
||||
<h2 class="sign-up-headline">{{ getString "sign-up-headline-1" }}</h2>
|
||||
{{> feature-list }}
|
||||
</div>
|
||||
<div class="flx flx-col sign-up-cta">
|
||||
{{> sign-up-button buttonValue="sign-up-for-alerts"}}
|
||||
{{> sign-up-banners/browser-not-required }}
|
||||
{{> sign-up-banners/login-link }}
|
||||
<div class="col-9 sign-up-wrapper">
|
||||
<div class="scan-res sign-up-banner drop-shadow">
|
||||
<div class="sign-up-headline-list-wrapper flx flx-col">
|
||||
<h2 class="sign-up-headline">{{ getString "sign-up-headline-1" }}</h2>
|
||||
{{> feature-list }}
|
||||
</div>
|
||||
<div class="flx flx-col sign-up-cta">
|
||||
{{> sign-up-button buttonValue="sign-up-for-alerts"}}
|
||||
{{> sign-up-banners/browser-not-required }}
|
||||
{{> sign-up-banners/login-link }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
{{#allBreaches req.app.locals.breaches }}
|
||||
<div id="breaches-loader" class="ab-bg breaches-loader"></div>
|
||||
<div class="ab-bg top-level">
|
||||
<main class="all-breaches-main clear-header" data-page-label="All Breaches">
|
||||
|
@ -9,7 +8,6 @@
|
|||
</div>
|
||||
</main>
|
||||
<section class="all-breaches-wrapper">
|
||||
{{> back-to-top-button }}
|
||||
<div class="row flx-col">
|
||||
<div class="col-12 txt-cntr no-vertical-padding">
|
||||
{{> fuzzy-find }}
|
||||
|
@ -19,11 +17,10 @@
|
|||
</div>
|
||||
<div class="row flx-col">
|
||||
<!-- breach cards -->
|
||||
<div id="all-breaches" class="all-breaches flx">
|
||||
</div>
|
||||
<div id="all-breaches" class="all-breaches flx"></div>
|
||||
<button id="show-hidden-breaches" class="col violet-btn show-all-breaches">{{ getString "show-all" }}</button>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
{{/allBreaches}}
|
||||
|
||||
<div id="breach-array-json" hidden=true data-breach-array="{{ getBreachArray }}"></div>
|
||||
<div id="breach-array-json" hidden=true data-breach-array="{{ getBreachArray req.app.locals.breaches }}"></div>
|
||||
|
|
|
@ -34,7 +34,6 @@
|
|||
<span class="security-tip-subhead">{{subhead}}</span>
|
||||
<h2 class="article-headline {{ class }}">{{ title }}</h2>
|
||||
{{#each copy}}
|
||||
|
||||
{{#each leads}}
|
||||
<p class="article-paragraph lead">
|
||||
<span class="drop-cap">
|
||||
|
@ -46,25 +45,29 @@
|
|||
|
||||
{{#if toggles}}
|
||||
{{#each this.toggles}}
|
||||
<div class="toggle-parent inactive st-toggle-wrapper">
|
||||
<div class="toggle-info-wrapper">
|
||||
<button class="toggle svg-wrap article-toggle" aria-label="{{ getString "show-content" }}">
|
||||
<span class="article-subhead toggle-subhead">{{{ subhead }}}</span>
|
||||
{{> svg/toggle-down }}
|
||||
</button>
|
||||
{{#if securityTip}}
|
||||
{{> top-level/security-tips/security-tip-callout }}
|
||||
{{/if}}
|
||||
{{#if subhead}}
|
||||
<div class="toggle-parent inactive st-toggle-wrapper">
|
||||
<div class="toggle-info-wrapper">
|
||||
<button class="toggle svg-wrap article-toggle" aria-label="{{ getString "show-content" }}">
|
||||
<span class="article-subhead toggle-subhead">{{{ subhead }}}</span>
|
||||
{{> svg/toggle-down }}
|
||||
</button>
|
||||
</div>
|
||||
<div class="toggle-child">
|
||||
{{> top-level/security-tips/tip-content }}
|
||||
</div><!--closes toggle-child-->
|
||||
</div>
|
||||
<div class="toggle-child">
|
||||
{{> top-level/security-tips/tip-content }}
|
||||
{{> top-level/security-tips/security-tip-callout }}
|
||||
</div><!--closes toggle-child-->
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
{{/if}}
|
||||
|
||||
{{#if subhead}}
|
||||
<h3 class="article-subhead">{{{ subhead }}}</h3>
|
||||
{{/if}}
|
||||
{{> top-level/security-tips/tip-content }}
|
||||
|
||||
{{> top-level/security-tips/dos-and-donts }}
|
||||
{{/each}}
|
||||
</div>
|
||||
|
|
|
@ -1,17 +1,35 @@
|
|||
{{#if passwordDosAndDonts }}
|
||||
<div class="password-tip-list-wrapper">
|
||||
<h3 class="password-tip-list-headline"> {{ passwordDosAndDonts.listHeadline }}</h3>
|
||||
<div class="password-tip-list flx">
|
||||
<ul class="do-list">
|
||||
{{#each passwordDosAndDonts.doList}}
|
||||
<li class="do-list-item">{{ this }}</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
<ul class="dont-list">
|
||||
{{#each passwordDosAndDonts.dontList}}
|
||||
<li class="dont-list-item">{{ this }}</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
<section class="dos-and-donts container">
|
||||
<h3 class="password-tip-list-headline txt-cntr"> {{ passwordDosAndDonts.listHeadline }}</h3>
|
||||
<div class="password-tip-list-wrapper">
|
||||
<div class="pw-tip-table">
|
||||
<div class="pw-tip-headlines flx">
|
||||
<div class="pw-do-hl do-dont-hl flx jst-cntr">
|
||||
<h4 class="flx icon-do">Do</h4>
|
||||
</div>
|
||||
<div class="pw-dont-hl do-dont-hl flx jst-cntr">
|
||||
<h4 class="flx icon-dont">Don't</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="password-tip-list flx">
|
||||
{{#each passwordDosAndDonts.doDontList}}
|
||||
<div class="pw-tip-item flx">
|
||||
<div class="pw-do do-dont-wrap flx jst-cntr">
|
||||
<span class="do-dont">
|
||||
<span class="do-dont-hl-mobile show-mobile icon-do">Do:</span>
|
||||
{{{ this.do }}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="pw-dont do-dont-wrap flx jst-cntr">
|
||||
<span class="do-dont">
|
||||
<span class="do-dont-hl-mobile show-mobile icon-dont">Don't:</span>
|
||||
{{ this.dont }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{/if}}
|
||||
|
|
|
@ -1,18 +1,20 @@
|
|||
{{#if securityTip}}
|
||||
<div class="st-call-out">
|
||||
<div class="st-headline-icon-wrapper flx flx-row al-cntr">
|
||||
<svg class="st-icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 16 16"><path fill="#00b4f5" d="M8 1a7 7 0 1 0 7 7 7.008 7.008 0 0 0-7-7zm0 13a6 6 0 1 1 6-6 6.007 6.007 0 0 1-6 6zm0-7a1 1 0 0 0-1 1v3a1 1 0 1 0 2 0V8a1 1 0 0 0-1-1zm0-3.188A1.188 1.188 0 1 0 9.188 5 1.188 1.188 0 0 0 8 3.812z"></path></svg>
|
||||
<p class="flx flx-row al-cntr al-cntr st-headline">{{{ securityTip.tipHeadline }}}</p>
|
||||
<div class="inset">
|
||||
<div class="st-headline-icon-wrapper flx flx-row al-cntr">
|
||||
<svg class="st-icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 16 16"><path fill="#5e5e72" d="M8 1a7 7 0 1 0 7 7 7.008 7.008 0 0 0-7-7zm0 13a6 6 0 1 1 6-6 6.007 6.007 0 0 1-6 6zm0-7a1 1 0 0 0-1 1v3a1 1 0 1 0 2 0V8a1 1 0 0 0-1-1zm0-3.188A1.188 1.188 0 1 0 9.188 5 1.188 1.188 0 0 0 8 3.812z"></path></svg>
|
||||
<p class="flx flx-row al-cntr al-cntr st-headline">{{{ securityTip.tipHeadline }}}</p>
|
||||
</div>
|
||||
{{#if securityTip.tipSubhead }}
|
||||
<p class="st-subhead">{{{ securityTip.tipSubhead }}}</p>
|
||||
{{/if}}
|
||||
{{#if securityTip.tipList }}
|
||||
<ul class="st-list">
|
||||
{{#each securityTip.tipList}}
|
||||
<li class="st-list-item">{{ this }}</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{#if securityTip.tipSubhead }}
|
||||
<p class="st-subhead">{{{ securityTip.tipSubhead }}}</p>
|
||||
{{/if}}
|
||||
{{#if securityTip.tipList }}
|
||||
<ul class="st-list">
|
||||
{{#each securityTip.tipList}}
|
||||
<li class="st-list-item">{{ this }}</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
|