From b54f4575ee151755779ab26a8818c8499be1ff4e Mon Sep 17 00:00:00 2001 From: Danny Coates Date: Wed, 15 Nov 2017 10:54:13 -0800 Subject: [PATCH 001/251] allow inline styles. fixes #644 --- server/routes/index.js | 42 ++++++++++++++++++++---------------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/server/routes/index.js b/server/routes/index.js index 97ab2ca7..7230d455 100644 --- a/server/routes/index.js +++ b/server/routes/index.js @@ -42,28 +42,26 @@ module.exports = function(app) { force: !IS_DEV }) ); - if (!IS_DEV) { - app.use( - helmet.contentSecurityPolicy({ - directives: { - defaultSrc: ["'self'"], - connectSrc: [ - "'self'", - 'https://sentry.prod.mozaws.net', - 'https://www.google-analytics.com' - ], - imgSrc: ["'self'", 'https://www.google-analytics.com'], - scriptSrc: ["'self'"], - styleSrc: ["'self'", 'https://code.cdn.mozilla.net'], - fontSrc: ["'self'", 'https://code.cdn.mozilla.net'], - formAction: ["'none'"], - frameAncestors: ["'none'"], - objectSrc: ["'none'"], - reportUri: '/__cspreport__' - } - }) - ); - } + app.use( + helmet.contentSecurityPolicy({ + directives: { + defaultSrc: ["'self'"], + connectSrc: [ + "'self'", + 'https://sentry.prod.mozaws.net', + 'https://www.google-analytics.com' + ], + imgSrc: ["'self'", 'https://www.google-analytics.com'], + scriptSrc: ["'self'"], + styleSrc: ["'self'", "'unsafe-inline'", 'https://code.cdn.mozilla.net'], + fontSrc: ["'self'", 'https://code.cdn.mozilla.net'], + formAction: ["'none'"], + frameAncestors: ["'none'"], + objectSrc: ["'none'"], + reportUri: '/__cspreport__' + } + }) + ); app.use( busboy({ limits: { From 7a31082da12ff13cfe6dbecfa66dea97e32e3090 Mon Sep 17 00:00:00 2001 From: Danny Coates Date: Wed, 15 Nov 2017 10:59:03 -0800 Subject: [PATCH 002/251] bump version to v2.1.1 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index cb834b57..a6bfba1d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "firefox-send", - "version": "2.0.0", + "version": "2.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 7235fb8e..8e057d0f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "firefox-send", "description": "File Sharing Experiment", - "version": "2.0.0", + "version": "2.1.1", "author": "Mozilla (https://mozilla.org)", "repository": "mozilla/send", "homepage": "https://github.com/mozilla/send/", From f0ec5a94966f46ab229066cdcf96acf2d4b6b1f8 Mon Sep 17 00:00:00 2001 From: Hyeonseok Shin Date: Thu, 16 Nov 2017 05:51:26 +0000 Subject: [PATCH 003/251] Pontoon: Update Korean (ko) localization of Test Pilot: Firefox Send Localization authors: - Hyeonseok Shin --- public/locales/ko/send.ftl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/public/locales/ko/send.ftl b/public/locales/ko/send.ftl index 8dd7a8e3..f8070cd3 100644 --- a/public/locales/ko/send.ftl +++ b/public/locales/ko/send.ftl @@ -87,4 +87,6 @@ footerLinkTerms = 이용 약관 footerLinkCookies = 쿠키 requirePasswordCheckbox = 이 파일을 다운로드하려면 비밀번호가 필요함 addPasswordButton = 비밀번호 추가 -incorrectPassword = 비밀번호가 일치하지 않습니다. 다시 시도해주세요. +passwordTryAgain = 비밀번호가 맞지 않습니다. 다시 시도해 주세요. +// This label is followed by the password needed to download a file +passwordResult = 비밀번호: { $password } From 00fb353465103520198c6e116b06ce224bcd58c8 Mon Sep 17 00:00:00 2001 From: Laurent Jouanneau Date: Thu, 16 Nov 2017 12:28:16 +0100 Subject: [PATCH 004/251] Remove the leak of the password into the console --- app/fileReceiver.js | 1 - 1 file changed, 1 deletion(-) diff --git a/app/fileReceiver.js b/app/fileReceiver.js index 281215ab..ee0cf5ca 100644 --- a/app/fileReceiver.js +++ b/app/fileReceiver.js @@ -31,7 +31,6 @@ export default class FileReceiver extends Nanobus { }); if (file.pwd) { const encoder = new TextEncoder(); - console.log(file.password + file.url); this.authKeyPromise = window.crypto.subtle .importKey( 'raw', From ac7ab79aef25985880475cafa0a621f011462825 Mon Sep 17 00:00:00 2001 From: Radu Popescu Date: Thu, 16 Nov 2017 17:52:07 +0000 Subject: [PATCH 005/251] Pontoon: Update Romanian (ro) localization of Test Pilot: Firefox Send Localization authors: - Radu Popescu - Jobava --- public/locales/ro/send.ftl | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/ro/send.ftl b/public/locales/ro/send.ftl index 611e2277..9d487b64 100644 --- a/public/locales/ro/send.ftl +++ b/public/locales/ro/send.ftl @@ -4,7 +4,10 @@ siteSubtitle = un experiment web siteFeedback = Feedback uploadPageHeader = Partajare de fișiere privată și criptată uploadPageLearnMore = Află mai multe +uploadPageDropMessage = Aruncă fișierul aici pentru a începe încărcarea. +uploadPageBrowseButton = Alege un fișier din calculator. uploadPageBrowseButton1 = Selectează un fișier pentru încărcare +uploadPageMultipleFilesAlert = Încărcarea mai multor fișiere deodată sau a dosarelor nu este suportată. uploadPageBrowseButtonTitle = Încarcă fișier uploadingPageProgress = Se încarcă { $filename } ({ $size }) importingFile = Se importă… @@ -15,6 +18,7 @@ notifyUploadDone = Încărcarea s-a finalizat. uploadingPageMessage = uploadingPageCancel = Anulează încărcarea uploadCancelNotification = Încărcarea a fost anulată. +uploadingPageLargeFileMessage = Stai calm! Acest fișier este mare. S-ar putea să dureze un timp încărcarea. uploadingFileNotification = Notifică-mă când încărcarea este încheiată. uploadSuccessConfirmHeader = Pregătit pentru trimitere uploadSvgAlt = Încarcă @@ -27,8 +31,10 @@ sendAnotherFileLink = Trimite un alt fișier downloadAltText = Descarcă downloadFileName = Descarcă { $filename } downloadFileSize = ({ $size }) +unlockInputLabel = Introdu parola unlockInputPlaceholder = Parolă unlockButtonLabel = Deblochează +downloadFileTitle = Descarcă fișierul criptat // Text and title used on the download link/button (indicates an action). downloadButtonLabel = Descarcă downloadNotification = Descărcarea s-a încheiat. @@ -40,7 +46,9 @@ sendYourFilesLink = Încearcă Firefox Send downloadingPageProgress = Se descarcă { $filename } ({ $size }) errorAltText = Eroare la încărcare errorPageHeader = Ceva a mers prost! +errorPageMessage = A apărut o eroare la încărcarea fișierului. errorPageLink = Trimite un alt fișier +fileTooBig = Acest fișier este prea mare. Trebuie să fie sub { $size }. linkExpiredAlt = Link expirat expiredPageHeader = Acest link a expirat sau nu a existat de la bun început! notSupportedHeader = Browserul tău nu este suportat. @@ -52,6 +60,7 @@ copyFileList = Copiază URL-ul // expiryFileList is used as a column header expiryFileList = Expiră în deleteFileList = Șterge +nevermindButton = Uită legalHeader = Termeni de utilizare și politica de confidențialitate deletePopupText = Ștergi aceast fișier? deletePopupYes = Da From d78fcd3721df7cf114ba255513ea8f79af3d9864 Mon Sep 17 00:00:00 2001 From: Danny Coates Date: Thu, 16 Nov 2017 10:50:29 -0800 Subject: [PATCH 006/251] fixed promo position while ondrag is set. fixes --- assets/main.css | 1 - 1 file changed, 1 deletion(-) diff --git a/assets/main.css b/assets/main.css index 6971a32d..0ff37f08 100644 --- a/assets/main.css +++ b/assets/main.css @@ -226,7 +226,6 @@ a { .upload-window.ondrag { border: 5px dashed rgba(0, 148, 251, 0.5); - margin: 0 auto; height: 251px; transform: scale(1.04); border-radius: 4.2px; From 2807b1cad54f9ed5f009b8d9a8cbb49622db2888 Mon Sep 17 00:00:00 2001 From: Danny Coates Date: Thu, 16 Nov 2017 11:03:40 -0800 Subject: [PATCH 007/251] bump version to v2.1.2 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index a6bfba1d..59ca7ad6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "firefox-send", - "version": "2.1.1", + "version": "2.1.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 8e057d0f..e6a76049 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "firefox-send", "description": "File Sharing Experiment", - "version": "2.1.1", + "version": "2.1.2", "author": "Mozilla (https://mozilla.org)", "repository": "mozilla/send", "homepage": "https://github.com/mozilla/send/", From 9ae64a97bad01f35ffcdc823a0393d4ff28f2e4d Mon Sep 17 00:00:00 2001 From: Arash Mousavi Date: Thu, 16 Nov 2017 19:10:59 +0000 Subject: [PATCH 008/251] Pontoon: Update Persian (fa) localization of Test Pilot: Firefox Send Localization authors: - Arash Mousavi --- public/locales/fa/send.ftl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/public/locales/fa/send.ftl b/public/locales/fa/send.ftl index b6017935..86e0cb61 100644 --- a/public/locales/fa/send.ftl +++ b/public/locales/fa/send.ftl @@ -87,3 +87,5 @@ footerLinkCookies = کوکی‌ها requirePasswordCheckbox = دریافت این پرونده نیاز به گذرواژه دارد addPasswordButton = افزودن گذرواژه passwordTryAgain = کلمه عبور اشتباه است. مجدد تلاش کنید. +// This label is followed by the password needed to download a file +passwordResult = گذرواژه: { $password } From 9c4ac38a6c06d68d45677f8d984df28abb40a5d4 Mon Sep 17 00:00:00 2001 From: Tymur Faradzhev Date: Thu, 16 Nov 2017 21:51:21 +0000 Subject: [PATCH 009/251] Pontoon: Update Ukrainian (uk) localization of Test Pilot: Firefox Send Localization authors: - Tymur Faradzhev --- public/locales/uk/send.ftl | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/uk/send.ftl b/public/locales/uk/send.ftl index cc59828f..b1285bf3 100644 --- a/public/locales/uk/send.ftl +++ b/public/locales/uk/send.ftl @@ -34,6 +34,10 @@ sendAnotherFileLink = Надіслати інший файл downloadAltText = Завантаживи downloadFileName = Завантажити { $filename } downloadFileSize = ({ $size }) +unlockInputLabel = Введіть пароль +unlockInputPlaceholder = Пароль +unlockButtonLabel = Розблокувати +downloadFileTitle = Завантажити зашифрований файл // Firefox Send is a brand name and should not be localized. downloadMessage = Ваш друг надіслав файл за допомогою Firefox Send, який дозволяє ділитися файлами, використовуючи безпечні, приватні та зашифровані посилання, термін дії яких автоматично закінчується, щоб ваші файли не лишилися в Інтернеті назавжди. // Text and title used on the download link/button (indicates an action). @@ -80,3 +84,8 @@ footerLinkAbout = Про Test Pilot footerLinkPrivacy = Приватність footerLinkTerms = Умови footerLinkCookies = Куки +requirePasswordCheckbox = Вимагати пароль для завантаження цього файлу +addPasswordButton = Додати пароль +passwordTryAgain = Невірний пароль. Спробуйте знову. +// This label is followed by the password needed to download a file +passwordResult = Пароль: { $password } From 3cbc71ca1b40182c690bec7f582eb4c81513c88d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Chevalier?= Date: Fri, 17 Nov 2017 02:30:26 +0000 Subject: [PATCH 010/251] Pontoon: Update French (fr) localization of Test Pilot: Firefox Send MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Localization authors: - Théo Chevalier --- public/locales/fr/send.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales/fr/send.ftl b/public/locales/fr/send.ftl index 4589bfcd..67e3e275 100644 --- a/public/locales/fr/send.ftl +++ b/public/locales/fr/send.ftl @@ -34,7 +34,7 @@ sendAnotherFileLink = Envoyer un autre fichier downloadAltText = Télécharger downloadFileName = Télécharger { $filename } downloadFileSize = ({ $size }) -unlockInputLabel = Saisissez un mot de passe +unlockInputLabel = Saisissez le mot de passe unlockInputPlaceholder = Mot de passe unlockButtonLabel = Déverrouiller downloadFileTitle = Télécharger le fichier chiffré From 2b5f7d126f9662d6db534e6f938c619578545ed9 Mon Sep 17 00:00:00 2001 From: Oscar Date: Wed, 22 Nov 2017 20:36:22 +0100 Subject: [PATCH 011/251] share interface: align text in input and button Bug: Text in inout and button are not aligned on the middle axis Fix: Add padding-bottom on the button elements to push their contents a bit higher --- assets/main.css | 2 ++ 1 file changed, 2 insertions(+) diff --git a/assets/main.css b/assets/main.css index 0ff37f08..9d2e8273 100644 --- a/assets/main.css +++ b/assets/main.css @@ -600,6 +600,7 @@ tbody { color: white; cursor: pointer; font-size: 15px; + padding-bottom: 4px; padding-left: 10px; padding-right: 10px; white-space: nowrap; @@ -840,6 +841,7 @@ tbody { color: white; cursor: pointer; font-size: 15px; + padding-bottom: 3px; padding-left: 10px; padding-right: 10px; white-space: nowrap; From 7cf70317e81d49acb0f0f27b07089d99614f66e6 Mon Sep 17 00:00:00 2001 From: Oscar Date: Thu, 23 Nov 2017 15:28:32 +0100 Subject: [PATCH 012/251] #634: overwrite appearance of password submit input Bug: The button to set a password had a different look than other buttons on the site Fix: add -webkit-appearance none on the button element to force browser to discard the default styling. For a reduced test case demonstrating the fix see https://codepen.io/ovl/full/qVYgoO/ --- assets/main.css | 3 +++ 1 file changed, 3 insertions(+) diff --git a/assets/main.css b/assets/main.css index 9d2e8273..fb2f6925 100644 --- a/assets/main.css +++ b/assets/main.css @@ -840,6 +840,9 @@ tbody { border: 1px solid #0297f8; color: white; cursor: pointer; + + /* Force flat button look */ + -webkit-appearance: none; font-size: 15px; padding-bottom: 3px; padding-left: 10px; From 0107fb9486457eaac7fff8c429439a7dc3ada17e Mon Sep 17 00:00:00 2001 From: albertdcastro Date: Fri, 24 Nov 2017 12:11:53 +0000 Subject: [PATCH 013/251] Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Test Pilot: Firefox Send Localization authors: - albertdcastro --- public/locales/pt-PT/send.ftl | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/public/locales/pt-PT/send.ftl b/public/locales/pt-PT/send.ftl index b6d1fc13..cdefee49 100644 --- a/public/locales/pt-PT/send.ftl +++ b/public/locales/pt-PT/send.ftl @@ -1,9 +1,9 @@ // Firefox Send is a brand name and should not be localized. title = Firefox Send -siteSubtitle = experiência web +siteSubtitle = experiência Web siteFeedback = Feedback uploadPageHeader = Partilha de ficheiros privada e encriptada -uploadPageExplainer = Envie ficheiros através de uma ligação segura, privada e encriptada que expira automaticamente para garantir que as suas coisas não fiquem online para sempre. +uploadPageExplainer = Envie ficheiros através de uma hiperligação segura, privada e encriptada que expira automaticamente para garantir que as suas coisas não fiquem online para sempre. uploadPageLearnMore = Saber mais uploadPageDropMessage = Largue o seu ficheiro aqui para começar a carregar uploadPageSizeMessage = Para uma operação mais confiável, é melhor manter o seu ficheiro abaixo de 1GB @@ -24,8 +24,8 @@ uploadingPageLargeFileMessage = Este ficheiro é grande e pode demorar um pouco uploadingFileNotification = Notificar-me quando o carregamento estiver completo. uploadSuccessConfirmHeader = Pronto para enviar uploadSvgAlt = Carregar -uploadSuccessTimingHeader = A ligação para o seu ficheiro irá expirar depois de 1 descarga ou em 24 horas. -copyUrlFormLabelWithName = Copie e partilhe a ligação para enviar o seu ficheiro: { $filename } +uploadSuccessTimingHeader = A hiperligação para o seu ficheiro irá expirar depois de 1 descarregamento ou em 24 horas. +copyUrlFormLabelWithName = Copie e partilhe a hiperligação para enviar o seu ficheiro: { $filename } copyUrlFormButton = Copiar para a área de transferência copiedUrl = Copiado! deleteFileButton = Apagar ficheiro @@ -39,29 +39,29 @@ unlockInputPlaceholder = Palavra-passe unlockButtonLabel = Desbloquear downloadFileTitle = Descarregar ficheiro encriptado // Firefox Send is a brand name and should not be localized. -downloadMessage = O seu amigo está a enviar-lhe um ficheiro com o Firefox Send, um serviço que lhe permite partilhar ficheiro com uma ligação segura, privada e encriptada que expira automaticamente para garantir que as suas coisas não fiquem online para sempre. +downloadMessage = O seu amigo está a enviar-lhe um ficheiro com o Firefox Send, um serviço que lhe permite partilhar ficheiro com uma hiperligação segura, privada e encriptada que expira automaticamente para garantir que as suas coisas não fiquem online para sempre. // Text and title used on the download link/button (indicates an action). downloadButtonLabel = Descarregar -downloadNotification = A sua descarga foi completada. -downloadFinish = Descarga completada +downloadNotification = O seu descarregamento foi completado. +downloadFinish = Descarregamento completado // This message is displayed when uploading or downloading a file, e.g. "(1,3 MB of 10 MB)". fileSizeProgress = ({ $partialSize } de { $totalSize }) // Firefox Send is a brand name and should not be localized. sendYourFilesLink = Tentar o Firefox Send -downloadingPageProgress = A descarregar { $filename } ({ $size }) +downloadingPageProgress = Descarregamento gratuito { $filename } ({ $size }) downloadingPageMessage = Por favor deixe este separador aberto enquanto obtemos o seu ficheiro e o desencriptamos. errorAltText = Erro ao carregar errorPageHeader = Algo correu mal. errorPageMessage = Houve um erro ao carregar o ficheiro. errorPageLink = Enviar outro ficheiro fileTooBig = Esse ficheiro é muito grande para carregar. Deve ser menor do que { $size }. -linkExpiredAlt = Ligação expirada -expiredPageHeader = Esta ligação expirou ou nunca existiu em primeiro lugar! +linkExpiredAlt = Hiperligação expirada +expiredPageHeader = Esta hiperligação expirou ou nunca existiu em primeiro lugar! notSupportedHeader = O seu navegador não é suportado. // Firefox Send is a brand name and should not be localized. -notSupportedDetail = Infelizmente este navegador não suporta a tecnologia web que faz o Firefox Send funcionar. Irá precisar de tentar outro navegador. Nós recomendamos o Firefox! +notSupportedDetail = Infelizmente, este navegador não suporta a tecnologia Web que faz o Firefox Send funcionar. Irá precisar de tentar outro navegador. Nós recomendamos o Firefox! notSupportedLink = Porque é que o meu navegador não é suportado? -notSupportedOutdatedDetail = Infelizmente esta versão do Firefox não suporta a tecnologia web que faz o Firefox Send funcionar. Precisa de atualizar o seu navegador. +notSupportedOutdatedDetail = Infelizmente, esta versão do Firefox não suporta a tecnologia Web que faz o Firefox Send funcionar. Precisa de atualizar o seu navegador. updateFirefox = Atualizar o Firefox downloadFirefoxButtonSub = Descarga gratuita uploadedFile = Ficheiro @@ -71,7 +71,7 @@ expiryFileList = Expira em deleteFileList = Apagar nevermindButton = Esquecer legalHeader = Termos e privacidade -legalNoticeTestPilot = O Firefox Send é atualmente uma experiência do Test Pilot, e sujeita aos Termos de serviço e Aviso de privacidade do Test Pilot. Pode saber mais acerca desta experiência e a sua recolha de dados aqui. +legalNoticeTestPilot = Firefox Send é atualmente uma experiência do Test Pilot, e sujeita aos Termos de serviço e Aviso de privacidade do Test Pilot. Pode saber mais acerca desta experiência e a sua recolha de dados aqui. legalNoticeMozilla = A utilização do website do Firefox Send está também sujeita ao Aviso de privacidade dos websites e Termos de serviço dos websites da Mozilla. deletePopupText = Apagar este ficheiro? deletePopupYes = Sim From ad371553ba7eb619c06f458f116dc99e6a39f0d7 Mon Sep 17 00:00:00 2001 From: Rodrigo Date: Fri, 24 Nov 2017 13:31:30 +0000 Subject: [PATCH 014/251] Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Test Pilot: Firefox Send Localization authors: - Rodrigo --- public/locales/pt-PT/send.ftl | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/public/locales/pt-PT/send.ftl b/public/locales/pt-PT/send.ftl index cdefee49..8872af58 100644 --- a/public/locales/pt-PT/send.ftl +++ b/public/locales/pt-PT/send.ftl @@ -1,9 +1,9 @@ // Firefox Send is a brand name and should not be localized. title = Firefox Send -siteSubtitle = experiência Web +siteSubtitle = experiência web siteFeedback = Feedback uploadPageHeader = Partilha de ficheiros privada e encriptada -uploadPageExplainer = Envie ficheiros através de uma hiperligação segura, privada e encriptada que expira automaticamente para garantir que as suas coisas não fiquem online para sempre. +uploadPageExplainer = Envie ficheiros através de uma ligação segura, privada e encriptada que expira automaticamente para garantir que as suas coisas não fiquem online para sempre. uploadPageLearnMore = Saber mais uploadPageDropMessage = Largue o seu ficheiro aqui para começar a carregar uploadPageSizeMessage = Para uma operação mais confiável, é melhor manter o seu ficheiro abaixo de 1GB @@ -24,8 +24,8 @@ uploadingPageLargeFileMessage = Este ficheiro é grande e pode demorar um pouco uploadingFileNotification = Notificar-me quando o carregamento estiver completo. uploadSuccessConfirmHeader = Pronto para enviar uploadSvgAlt = Carregar -uploadSuccessTimingHeader = A hiperligação para o seu ficheiro irá expirar depois de 1 descarregamento ou em 24 horas. -copyUrlFormLabelWithName = Copie e partilhe a hiperligação para enviar o seu ficheiro: { $filename } +uploadSuccessTimingHeader = A ligação para o seu ficheiro irá expirar depois de 1 descarga ou em 24 horas. +copyUrlFormLabelWithName = Copie e partilhe a ligação para enviar o seu ficheiro: { $filename } copyUrlFormButton = Copiar para a área de transferência copiedUrl = Copiado! deleteFileButton = Apagar ficheiro @@ -39,7 +39,7 @@ unlockInputPlaceholder = Palavra-passe unlockButtonLabel = Desbloquear downloadFileTitle = Descarregar ficheiro encriptado // Firefox Send is a brand name and should not be localized. -downloadMessage = O seu amigo está a enviar-lhe um ficheiro com o Firefox Send, um serviço que lhe permite partilhar ficheiro com uma hiperligação segura, privada e encriptada que expira automaticamente para garantir que as suas coisas não fiquem online para sempre. +downloadMessage = O seu amigo está a enviar-lhe um ficheiro com o Firefox Send, um serviço que lhe permite partilhar ficheiro com uma ligação segura, privada e encriptada que expira automaticamente para garantir que as suas coisas não fiquem online para sempre. // Text and title used on the download link/button (indicates an action). downloadButtonLabel = Descarregar downloadNotification = O seu descarregamento foi completado. @@ -55,13 +55,13 @@ errorPageHeader = Algo correu mal. errorPageMessage = Houve um erro ao carregar o ficheiro. errorPageLink = Enviar outro ficheiro fileTooBig = Esse ficheiro é muito grande para carregar. Deve ser menor do que { $size }. -linkExpiredAlt = Hiperligação expirada -expiredPageHeader = Esta hiperligação expirou ou nunca existiu em primeiro lugar! +linkExpiredAlt = Ligação expirada +expiredPageHeader = Esta ligação expirou ou nunca existiu em primeiro lugar! notSupportedHeader = O seu navegador não é suportado. // Firefox Send is a brand name and should not be localized. -notSupportedDetail = Infelizmente, este navegador não suporta a tecnologia Web que faz o Firefox Send funcionar. Irá precisar de tentar outro navegador. Nós recomendamos o Firefox! +notSupportedDetail = Infelizmente este navegador não suporta a tecnologia web que faz o Firefox Send funcionar. Irá precisar de tentar outro navegador. Nós recomendamos o Firefox! notSupportedLink = Porque é que o meu navegador não é suportado? -notSupportedOutdatedDetail = Infelizmente, esta versão do Firefox não suporta a tecnologia Web que faz o Firefox Send funcionar. Precisa de atualizar o seu navegador. +notSupportedOutdatedDetail = Infelizmente esta versão do Firefox não suporta a tecnologia web que faz o Firefox Send funcionar. Precisa de atualizar o seu navegador. updateFirefox = Atualizar o Firefox downloadFirefoxButtonSub = Descarga gratuita uploadedFile = Ficheiro @@ -71,7 +71,7 @@ expiryFileList = Expira em deleteFileList = Apagar nevermindButton = Esquecer legalHeader = Termos e privacidade -legalNoticeTestPilot = Firefox Send é atualmente uma experiência do Test Pilot, e sujeita aos Termos de serviço e Aviso de privacidade do Test Pilot. Pode saber mais acerca desta experiência e a sua recolha de dados aqui. +legalNoticeTestPilot = O Firefox Send é atualmente uma experiência do Test Pilot, e sujeita aos Termos de serviço e Aviso de privacidade do Test Pilot. Pode saber mais acerca desta experiência e a sua recolha de dados aqui. legalNoticeMozilla = A utilização do website do Firefox Send está também sujeita ao Aviso de privacidade dos websites e Termos de serviço dos websites da Mozilla. deletePopupText = Apagar este ficheiro? deletePopupYes = Sim From b393c3528474e8c5a7d971710e05fb5e6b9501e9 Mon Sep 17 00:00:00 2001 From: Alberto Castro Date: Tue, 28 Nov 2017 11:51:09 +0000 Subject: [PATCH 015/251] Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Test Pilot: Firefox Send Localization authors: - Alberto Castro --- public/locales/pt-PT/send.ftl | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/public/locales/pt-PT/send.ftl b/public/locales/pt-PT/send.ftl index 8872af58..c7525ebf 100644 --- a/public/locales/pt-PT/send.ftl +++ b/public/locales/pt-PT/send.ftl @@ -24,31 +24,31 @@ uploadingPageLargeFileMessage = Este ficheiro é grande e pode demorar um pouco uploadingFileNotification = Notificar-me quando o carregamento estiver completo. uploadSuccessConfirmHeader = Pronto para enviar uploadSvgAlt = Carregar -uploadSuccessTimingHeader = A ligação para o seu ficheiro irá expirar depois de 1 descarga ou em 24 horas. +uploadSuccessTimingHeader = A ligação para o seu ficheiro irá expirar depois de 1 transferência ou em 24 horas. copyUrlFormLabelWithName = Copie e partilhe a ligação para enviar o seu ficheiro: { $filename } copyUrlFormButton = Copiar para a área de transferência copiedUrl = Copiado! deleteFileButton = Apagar ficheiro sendAnotherFileLink = Enviar outro ficheiro // Alternative text used on the download link/button (indicates an action). -downloadAltText = Descarregar -downloadFileName = Descarregar { $filename } +downloadAltText = Transferir +downloadFileName = Transferir { $filename } downloadFileSize = ({ $size }) unlockInputLabel = Digitar palavra-passe unlockInputPlaceholder = Palavra-passe unlockButtonLabel = Desbloquear -downloadFileTitle = Descarregar ficheiro encriptado +downloadFileTitle = Transferir ficheiro encriptado // Firefox Send is a brand name and should not be localized. downloadMessage = O seu amigo está a enviar-lhe um ficheiro com o Firefox Send, um serviço que lhe permite partilhar ficheiro com uma ligação segura, privada e encriptada que expira automaticamente para garantir que as suas coisas não fiquem online para sempre. // Text and title used on the download link/button (indicates an action). -downloadButtonLabel = Descarregar -downloadNotification = O seu descarregamento foi completado. -downloadFinish = Descarregamento completado +downloadButtonLabel = Transferir +downloadNotification = A sua transferência foi concluída. +downloadFinish = Transferência concluída // This message is displayed when uploading or downloading a file, e.g. "(1,3 MB of 10 MB)". fileSizeProgress = ({ $partialSize } de { $totalSize }) // Firefox Send is a brand name and should not be localized. sendYourFilesLink = Tentar o Firefox Send -downloadingPageProgress = Descarregamento gratuito { $filename } ({ $size }) +downloadingPageProgress = A transferir { $filename } ({ $size }) downloadingPageMessage = Por favor deixe este separador aberto enquanto obtemos o seu ficheiro e o desencriptamos. errorAltText = Erro ao carregar errorPageHeader = Algo correu mal. @@ -63,7 +63,7 @@ notSupportedDetail = Infelizmente este navegador não suporta a tecnologia web q notSupportedLink = Porque é que o meu navegador não é suportado? notSupportedOutdatedDetail = Infelizmente esta versão do Firefox não suporta a tecnologia web que faz o Firefox Send funcionar. Precisa de atualizar o seu navegador. updateFirefox = Atualizar o Firefox -downloadFirefoxButtonSub = Descarga gratuita +downloadFirefoxButtonSub = Transferência gratuita uploadedFile = Ficheiro copyFileList = Copiar URL // expiryFileList is used as a column header @@ -84,7 +84,7 @@ footerLinkAbout = Acerca do Test Pilot footerLinkPrivacy = Privacidade footerLinkTerms = Termos footerLinkCookies = Cookies -requirePasswordCheckbox = Requerer uma palavra-passe para descarregar este ficheiro +requirePasswordCheckbox = Requerer uma palavra-passe para transferir este ficheiro addPasswordButton = Adicionar palavra-passe passwordTryAgain = Palavra-passe incorreta. Tente novamente. // This label is followed by the password needed to download a file From 7b4060f9e1d5638ebf159a895d5121092c06214b Mon Sep 17 00:00:00 2001 From: Danny Coates Date: Thu, 30 Nov 2017 13:41:09 -0800 Subject: [PATCH 016/251] Added multiple download option --- app/fileManager.js | 9 +- app/fileReceiver.js | 62 +- app/fileSender.js | 47 +- app/main.js | 1 + app/metrics.js | 11 + app/templates/file.js | 4 +- app/templates/selectbox.js | 56 ++ app/templates/share.js | 21 +- assets/main.css | 46 +- docs/metrics.md | 12 + package-lock.json | 1170 +++++++++++++++++++++++---------- package.json | 25 +- public/locales/en-US/send.ftl | 9 + server/routes/delete.js | 6 +- server/routes/download.js | 16 +- server/routes/index.js | 47 +- server/routes/metadata.js | 8 +- server/routes/params.js | 32 + server/routes/password.js | 7 +- server/routes/upload.js | 9 +- server/storage.js | 10 +- webpack.config.js | 4 +- 22 files changed, 1159 insertions(+), 453 deletions(-) create mode 100644 app/templates/selectbox.js create mode 100644 server/routes/params.js diff --git a/app/fileManager.js b/app/fileManager.js index 588fd93a..8e9b3f40 100644 --- a/app/fileManager.js +++ b/app/fileManager.js @@ -97,6 +97,13 @@ export default function(state, emitter) { lastRender = Date.now(); }); + emitter.on('changeLimit', async ({ file, value }) => { + await FileSender.changeLimit(file.id, file.ownerToken, value); + file.dlimit = value; + state.storage.writeFiles(); + metrics.changedDownloadLimit(file); + }); + emitter.on('delete', async ({ file, location }) => { try { metrics.deletedUpload({ @@ -108,7 +115,7 @@ export default function(state, emitter) { location }); state.storage.remove(file.id); - await FileSender.delete(file.id, file.deleteToken); + await FileSender.delete(file.id, file.ownerToken); } catch (e) { state.raven.captureException(e); } diff --git a/app/fileReceiver.js b/app/fileReceiver.js index ee0cf5ca..71a2cebb 100644 --- a/app/fileReceiver.js +++ b/app/fileReceiver.js @@ -116,7 +116,8 @@ export default class FileReceiver extends Nanobus { // TODO } - fetchMetadata(sig) { + async fetchMetadata(nonce) { + const authHeader = await this.getAuthHeader(nonce); return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); xhr.onreadystatechange = () => { @@ -132,7 +133,7 @@ export default class FileReceiver extends Nanobus { xhr.onerror = () => reject(new Error(0)); xhr.ontimeout = () => reject(new Error(0)); xhr.open('get', `/api/metadata/${this.file.id}`); - xhr.setRequestHeader('Authorization', `send-v1 ${arrayToB64(sig)}`); + xhr.setRequestHeader('Authorization', authHeader); xhr.responseType = 'json'; xhr.timeout = 2000; xhr.send(); @@ -140,16 +141,16 @@ export default class FileReceiver extends Nanobus { } async getMetadata(nonce) { + let data = null; try { - const authKey = await this.authKeyPromise; - const sig = await window.crypto.subtle.sign( - { - name: 'HMAC' - }, - authKey, - b64ToArray(nonce) - ); - const data = await this.fetchMetadata(new Uint8Array(sig)); + try { + data = await this.fetchMetadata(nonce); + } catch (e) { + if (e.message === '401') { + // allow one retry for changed nonce + data = await this.fetchMetadata(e.nonce); + } + } const metaKey = await this.metaKeyPromise; const json = await window.crypto.subtle.decrypt( { @@ -174,7 +175,8 @@ export default class FileReceiver extends Nanobus { } } - downloadFile(sig) { + async downloadFile(nonce) { + const authHeader = await this.getAuthHeader(nonce); return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); @@ -190,9 +192,10 @@ export default class FileReceiver extends Nanobus { reject(new Error('notfound')); return; } - if (xhr.status !== 200) { - return reject(new Error(xhr.status)); + const err = new Error(xhr.status); + err.nonce = xhr.getResponseHeader('WWW-Authenticate').split(' ')[1]; + return reject(err); } const blob = new Blob([xhr.response]); @@ -205,26 +208,37 @@ export default class FileReceiver extends Nanobus { }; xhr.open('get', this.url); - xhr.setRequestHeader('Authorization', `send-v1 ${arrayToB64(sig)}`); + xhr.setRequestHeader('Authorization', authHeader); xhr.responseType = 'blob'; xhr.send(); }); } + async getAuthHeader(nonce) { + const authKey = await this.authKeyPromise; + const sig = await window.crypto.subtle.sign( + { + name: 'HMAC' + }, + authKey, + b64ToArray(nonce) + ); + return `send-v1 ${arrayToB64(new Uint8Array(sig))}`; + } + async download(nonce) { this.state = 'downloading'; this.emit('progress', this.progress); try { const encryptKey = await this.encryptKeyPromise; - const authKey = await this.authKeyPromise; - const sig = await window.crypto.subtle.sign( - { - name: 'HMAC' - }, - authKey, - b64ToArray(nonce) - ); - const ciphertext = await this.downloadFile(new Uint8Array(sig)); + let ciphertext = null; + try { + ciphertext = await this.downloadFile(nonce); + } catch (e) { + if (e.message === '401') { + ciphertext = await this.downloadFile(e.nonce); + } + } this.msg = 'decryptingFile'; this.emit('decrypting'); const plaintext = await window.crypto.subtle.decrypt( diff --git a/app/fileSender.js b/app/fileSender.js index d5a00eec..1212429e 100644 --- a/app/fileSender.js +++ b/app/fileSender.js @@ -35,7 +35,26 @@ export default class FileSender extends Nanobus { } }; - xhr.send(JSON.stringify({ delete_token: token })); + xhr.send(JSON.stringify({ owner_token: token })); + }); + } + + static changeLimit(id, owner_token, dlimit) { + return new Promise((resolve, reject) => { + if (!id || !owner_token) { + return reject(); + } + const xhr = new XMLHttpRequest(); + xhr.open('POST', `/api/params/${id}`); + xhr.setRequestHeader('Content-Type', 'application/json'); + + xhr.onreadystatechange = () => { + if (xhr.readyState === XMLHttpRequest.DONE) { + resolve(); + } + }; + + xhr.send(JSON.stringify({ owner_token, dlimit })); }); } @@ -100,7 +119,7 @@ export default class FileSender extends Nanobus { url: responseObj.url, id: responseObj.id, secretKey: arrayToB64(this.rawSecret), - deleteToken: responseObj.delete, + ownerToken: responseObj.owner, nonce }); } @@ -205,6 +224,17 @@ export default class FileSender extends Nanobus { return this.uploadFile(encrypted, metadata, new Uint8Array(rawAuth)); } + async getAuthHeader(authKey, nonce) { + const sig = await window.crypto.subtle.sign( + { + name: 'HMAC' + }, + authKey, + b64ToArray(nonce) + ); + return `send-v1 ${arrayToB64(new Uint8Array(sig))}`; + } + static async setPassword(password, file) { const encoder = new TextEncoder(); const secretKey = await window.crypto.subtle.importKey( @@ -229,13 +259,7 @@ export default class FileSender extends Nanobus { true, ['sign'] ); - const sig = await window.crypto.subtle.sign( - { - name: 'HMAC' - }, - authKey, - b64ToArray(file.nonce) - ); + const authHeader = await this.getAuthHeader(authKey, file.nonce); const pwdKey = await window.crypto.subtle.importKey( 'raw', encoder.encode(password), @@ -278,10 +302,7 @@ export default class FileSender extends Nanobus { xhr.onerror = () => reject(new Error(0)); xhr.ontimeout = () => reject(new Error(0)); xhr.open('post', `/api/password/${file.id}`); - xhr.setRequestHeader( - 'Authorization', - `send-v1 ${arrayToB64(new Uint8Array(sig))}` - ); + xhr.setRequestHeader('Authorization', authHeader); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.responseType = 'json'; xhr.timeout = 2000; diff --git a/app/main.js b/app/main.js index 2c55e0ed..7f7e0402 100644 --- a/app/main.js +++ b/app/main.js @@ -1,3 +1,4 @@ +import 'fluent-intl-polyfill'; import app from './routes'; import locale from '../common/locales'; import fileManager from './fileManager'; diff --git a/app/metrics.js b/app/metrics.js index 3f3adf4e..e469d12a 100644 --- a/app/metrics.js +++ b/app/metrics.js @@ -205,6 +205,16 @@ function stoppedUpload(params) { }); } +function changedDownloadLimit(params) { + return sendEvent('sender', 'download-limit-changed', { + cm1: params.size, + cm5: storage.totalUploads, + cm6: storage.files.length, + cm7: storage.totalDownloads, + cm8: params.dlimit + }); +} + function completedDownload(params) { return sendEvent('recipient', 'download-stopped', { cm1: params.size, @@ -272,6 +282,7 @@ export { cancelledUpload, stoppedUpload, completedUpload, + changedDownloadLimit, deletedUpload, startedDownload, cancelledDownload, diff --git a/app/templates/file.js b/app/templates/file.js index 7fc665e9..881ef098 100644 --- a/app/templates/file.js +++ b/app/templates/file.js @@ -18,7 +18,9 @@ module.exports = function(file, state, emit) { const remaining = timeLeft(ttl) || state.translate('linkExpiredAlt'); const row = html` - ${file.name} + ${file.name} +
+ ${translate(selected)} + + + +
+
    + ${options.map( + i => + html`
  • ${ + i + }
  • ` + )} +
+ `; +}; diff --git a/app/templates/share.js b/app/templates/share.js index 3efeb6bd..4869cb50 100644 --- a/app/templates/share.js +++ b/app/templates/share.js @@ -2,6 +2,7 @@ const html = require('choo/html'); const assets = require('../../common/assets'); const notFound = require('./notFound'); const uploadPassword = require('./uploadPassword'); +const selectbox = require('./selectbox'); const { allowedCopy, delay, fadeOut } = require('../utils'); function passwordComplete(state, password) { @@ -14,6 +15,24 @@ function passwordComplete(state, password) { return el; } +function expireInfo(file, translate, emit) { + const el = html([ + `
${translate('expireInfo', { + downloadCount: '', + timespan: translate('timespanHours', { number: 24 }) + })}
` + ]); + const select = el.querySelector('select'); + const options = [1, 2, 3, 4, 5, 20]; + const t = number => translate('downloadCount', { number }); + const changed = value => emit('changeLimit', { file, value }); + select.parentNode.replaceChild( + selectbox(file.dlimit || 1, options, t, changed), + select + ); + return el; +} + module.exports = function(state, emit) { const file = state.storage.getFileById(state.params.id); if (!file) { @@ -27,7 +46,7 @@ module.exports = function(state, emit) { : uploadPassword(state, emit); const div = html` `; diff --git a/app/templates/download.js b/app/templates/download.js index 7551eb5f..81be5dda 100644 --- a/app/templates/download.js +++ b/app/templates/download.js @@ -1,9 +1,8 @@ const html = require('choo/html'); const progress = require('./progress'); const { bytes } = require('../utils'); -const fxPromo = require('./fxPromo'); -module.exports = function(state, emit) { +module.exports = function(state) { const transfer = state.transfer; const div = html`
@@ -24,7 +23,6 @@ module.exports = function(state, emit) { )}
- ${state.promo === 'body' ? fxPromo(state, emit) : ''} `; diff --git a/app/templates/fxPromo.js b/app/templates/fxPromo.js index 5098314d..2252cd31 100644 --- a/app/templates/fxPromo.js +++ b/app/templates/fxPromo.js @@ -19,8 +19,10 @@ module.exports = function(state, emit) { emit('exit', evt); } + const classes = state.promo === 'blue' ? 'banner banner-blue' : 'banner'; + return html` - - ${state.promo === 'body' ? fxPromo(state, emit) : ''} ${fileList(state, emit)} `; diff --git a/assets/main.css b/assets/main.css index 20a1a350..4a1d1d3b 100644 --- a/assets/main.css +++ b/assets/main.css @@ -984,6 +984,21 @@ tbody { margin-left: 10px; } +.banner-blue { + background-color: #0098f7; + color: #fff; +} + +.banner-blue a { + color: #fff; + font-weight: bold; +} + +.banner-blue a:hover { + color: #eee; + font-weight: bold; +} + .selectbox { display: inline-block; position: relative; From bb10c1aa9d4ccee7eddffad88987c43b75a4e4e3 Mon Sep 17 00:00:00 2001 From: Danny Coates Date: Tue, 5 Dec 2017 14:16:22 -0800 Subject: [PATCH 044/251] added 'report IP infringement' footer link --- app/templates/footer.js | 3 +++ public/locales/en-US/send.ftl | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/templates/footer.js b/app/templates/footer.js index 795cdfda..96925b04 100644 --- a/app/templates/footer.js +++ b/app/templates/footer.js @@ -18,6 +18,9 @@ module.exports = function(state) { ${state.translate( 'footerLinkCookies' )} + ${state.translate( + 'reportIPInfringement' + )} - + From df1b00fa2c1d9a5422592819e1a026739fdc03cd Mon Sep 17 00:00:00 2001 From: Danny Coates Date: Wed, 6 Dec 2017 15:57:55 -0800 Subject: [PATCH 074/251] v2.2.0 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index d6b5a7c8..71ec960a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "firefox-send", - "version": "2.1.2", + "version": "2.2.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 23c72ecf..ab25c492 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "firefox-send", "description": "File Sharing Experiment", - "version": "2.1.2", + "version": "2.2.0", "author": "Mozilla (https://mozilla.org)", "repository": "mozilla/send", "homepage": "https://github.com/mozilla/send/", From 3314057059181696785f58360c26de7ed50ec800 Mon Sep 17 00:00:00 2001 From: Lobodzets Date: Thu, 7 Dec 2017 06:51:08 +0000 Subject: [PATCH 075/251] Pontoon: Update Ukrainian (uk) localization of Test Pilot: Firefox Send Localization authors: - Lobodzets --- public/locales/uk/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/uk/send.ftl b/public/locales/uk/send.ftl index b1285bf3..4e01bcfc 100644 --- a/public/locales/uk/send.ftl +++ b/public/locales/uk/send.ftl @@ -89,3 +89,4 @@ addPasswordButton = Додати пароль passwordTryAgain = Невірний пароль. Спробуйте знову. // This label is followed by the password needed to download a file passwordResult = Пароль: { $password } +reportIPInfringement = Повідомити про порушення прав на інтелектуальну власність From 727ea1283a22cd7e8e4562f1a1d8f4fba1ea582c Mon Sep 17 00:00:00 2001 From: Artem Polivanchuk Date: Thu, 7 Dec 2017 08:11:00 +0000 Subject: [PATCH 076/251] Pontoon: Update Ukrainian (uk) localization of Test Pilot: Firefox Send Localization authors: - Artem Polivanchuk --- public/locales/uk/send.ftl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/uk/send.ftl b/public/locales/uk/send.ftl index 4e01bcfc..a9f21ef0 100644 --- a/public/locales/uk/send.ftl +++ b/public/locales/uk/send.ftl @@ -25,6 +25,12 @@ uploadingFileNotification = Сповістити мене, коли вивант uploadSuccessConfirmHeader = Готовий до надсилання uploadSvgAlt = Вивантажити uploadSuccessTimingHeader = Час дії цього посилання закінчиться після 1 завантаження, або через 24 години. +expireInfo = Посилання на ваш файл стане недійсним після { $downloadCount } файла, або через { $timespan }. +downloadCount = { $num -> + [one] 1 завантаження + [few] { $num } завантаження + *[other] { $num } завантажень + } copyUrlFormLabelWithName = Скопіювати і поділитися посиланням на ваш файл: { $filename } copyUrlFormButton = Копіювати у буфер обміну copiedUrl = Скопійовано! From 7ac2e5748492d59a2aace97a0ca216644e53895d Mon Sep 17 00:00:00 2001 From: Artem Polivanchuk Date: Thu, 7 Dec 2017 08:31:03 +0000 Subject: [PATCH 077/251] Pontoon: Update Ukrainian (uk) localization of Test Pilot: Firefox Send Localization authors: - Artem Polivanchuk --- public/locales/uk/send.ftl | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/uk/send.ftl b/public/locales/uk/send.ftl index a9f21ef0..64c6cb33 100644 --- a/public/locales/uk/send.ftl +++ b/public/locales/uk/send.ftl @@ -31,6 +31,11 @@ downloadCount = { $num -> [few] { $num } завантаження *[other] { $num } завантажень } +timespanHours = { $num -> + [one] 1 година + [few] { $num } години + *[other] { $num } годин + } copyUrlFormLabelWithName = Скопіювати і поділитися посиланням на ваш файл: { $filename } copyUrlFormButton = Копіювати у буфер обміну copiedUrl = Скопійовано! From be7d23163c946d878b142dbceb4d23ae6f597050 Mon Sep 17 00:00:00 2001 From: Frederick Villaluna Date: Thu, 7 Dec 2017 09:30:56 +0000 Subject: [PATCH 078/251] Pontoon: Update Tagalog (tl) localization of Test Pilot: Firefox Send Localization authors: - Frederick Villaluna --- public/locales/tl/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/tl/send.ftl b/public/locales/tl/send.ftl index 7c0341ce..fba60d97 100644 --- a/public/locales/tl/send.ftl +++ b/public/locales/tl/send.ftl @@ -97,3 +97,4 @@ addPasswordButton = Magdagdag ng password passwordTryAgain = Maling password. Subukan muli. // This label is followed by the password needed to download a file passwordResult = Password: { $password } +reportIPInfringement = Report IP Infringement From d9356f81712aaa7e2e7dc2f67cd616517d5f7615 Mon Sep 17 00:00:00 2001 From: Fjoerfoks Date: Thu, 7 Dec 2017 21:11:05 +0000 Subject: [PATCH 079/251] Pontoon: Update Frisian (fy-NL) localization of Test Pilot: Firefox Send Localization authors: - Fjoerfoks --- public/locales/fy-NL/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/fy-NL/send.ftl b/public/locales/fy-NL/send.ftl index b070de0e..a7a07868 100644 --- a/public/locales/fy-NL/send.ftl +++ b/public/locales/fy-NL/send.ftl @@ -98,3 +98,4 @@ addPasswordButton = Wachtwurd tafoegje passwordTryAgain = Net krekt wachtwurd. Probearje it opnij. // This label is followed by the password needed to download a file passwordResult = Wachtwurd: { $password } +reportIPInfringement = IP-ynbrek melde From 655eb8c25324cbd4ced55a9e980c2a186b5d2a50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juraj=20Cig=C3=A1=C5=88?= Date: Thu, 7 Dec 2017 23:10:49 +0000 Subject: [PATCH 080/251] Pontoon: Update Slovak (sk) localization of Test Pilot: Firefox Send MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Localization authors: - Juraj Cigáň --- public/locales/sk/send.ftl | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/public/locales/sk/send.ftl b/public/locales/sk/send.ftl index 9c8c8ced..15d5588a 100644 --- a/public/locales/sk/send.ftl +++ b/public/locales/sk/send.ftl @@ -25,6 +25,17 @@ uploadingFileNotification = Upozorniť ma na ukončenie nahrávania uploadSuccessConfirmHeader = Pripravené na odoslanie uploadSvgAlt = Nahrať uploadSuccessTimingHeader = Platnosť odkazu vyprší po 1 prevzatí alebo po uplynutí 24 hodín. +expireInfo = Platnosť odkazu na váš súbor vyprší po { $downloadCount } alebo po { $timespan }. +downloadCount = { $num -> + [one] 1 prevzatí + [few] { $num } prevzatiach + *[other] { $num } prevzatiach + } +timespanHours = { $num -> + [one] 1 hodine + [few] { $num } hodinách + *[other] { $num } hodinách + } copyUrlFormLabelWithName = Skopírovaním a zdieľaním odkazu odošlete váš súbor: { $filename } copyUrlFormButton = Kopírovať do schránky copiedUrl = Skopírované! @@ -89,3 +100,4 @@ addPasswordButton = Pridať heslo passwordTryAgain = Nesprávne heslo. Skúste to znova. // This label is followed by the password needed to download a file passwordResult = Heslo: { $password } +reportIPInfringement = Nahlásiť porušenie práv duševného vlastníctva From 0fe02b18ce27a5c0189890490ca969064cbf368c Mon Sep 17 00:00:00 2001 From: RickieES Date: Fri, 8 Dec 2017 12:30:51 +0000 Subject: [PATCH 081/251] Pontoon: Update Spanish (Spain) (es-ES) localization of Test Pilot: Firefox Send Localization authors: - RickieES --- public/locales/es-ES/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/es-ES/send.ftl b/public/locales/es-ES/send.ftl index 67faaaa4..c375b622 100644 --- a/public/locales/es-ES/send.ftl +++ b/public/locales/es-ES/send.ftl @@ -98,3 +98,4 @@ addPasswordButton = Añadir contraseña passwordTryAgain = Contraseña incorrecta. Inténtelo de nuevo. // This label is followed by the password needed to download a file passwordResult = Contraseña: { $password } +reportIPInfringement = Denunciar vulneración de propiedad intelectual From a2e745a34989e0abb63c43ffcad61a032fb0042e Mon Sep 17 00:00:00 2001 From: Erica Wright Date: Fri, 8 Dec 2017 10:48:32 -0500 Subject: [PATCH 082/251] stop drag target from flickering when dragging over children --- assets/main.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/assets/main.css b/assets/main.css index 4a1d1d3b..b188b92a 100644 --- a/assets/main.css +++ b/assets/main.css @@ -236,6 +236,10 @@ a { text-align: center; } +.upload-window.ondrag * { + pointer-events: none; +} + .link { color: #0094fb; text-decoration: none; From 81f334798113cfd6d5161edea3e00ac6cb603d36 Mon Sep 17 00:00:00 2001 From: Danny Coates Date: Fri, 8 Dec 2017 09:45:00 -0800 Subject: [PATCH 083/251] retry setPassword on first nonce failure. fixes #664 --- app/fileSender.js | 62 +++++++++++++++++++++++---------------- server/routes/password.js | 8 ++--- 2 files changed, 40 insertions(+), 30 deletions(-) diff --git a/app/fileSender.js b/app/fileSender.js index c4fc2e70..5b04b884 100644 --- a/app/fileSender.js +++ b/app/fileSender.js @@ -12,6 +12,33 @@ async function getAuthHeader(authKey, nonce) { return `send-v1 ${arrayToB64(new Uint8Array(sig))}`; } +async function sendPassword(file, authKey, rawAuth) { + const authHeader = await getAuthHeader(authKey, file.nonce); + return new Promise((resolve, reject) => { + const xhr = new XMLHttpRequest(); + xhr.onreadystatechange = () => { + if (xhr.readyState === XMLHttpRequest.DONE) { + if (xhr.status === 200) { + return resolve(xhr.response); + } + if (xhr.status === 401) { + const nonce = xhr.getResponseHeader('WWW-Authenticate').split(' ')[1]; + file.nonce = nonce; + } + reject(new Error(xhr.status)); + } + }; + xhr.onerror = () => reject(new Error(0)); + xhr.ontimeout = () => reject(new Error(0)); + xhr.open('post', `/api/password/${file.id}`); + xhr.setRequestHeader('Authorization', authHeader); + xhr.setRequestHeader('Content-Type', 'application/json'); + xhr.responseType = 'json'; + xhr.timeout = 2000; + xhr.send(JSON.stringify({ auth: arrayToB64(new Uint8Array(rawAuth)) })); + }); +} + export default class FileSender extends Nanobus { constructor(file) { super('FileSender'); @@ -259,7 +286,6 @@ export default class FileSender extends Nanobus { true, ['sign'] ); - const authHeader = await getAuthHeader(authKey, file.nonce); const pwdKey = await window.crypto.subtle.importKey( 'raw', encoder.encode(password), @@ -283,30 +309,14 @@ export default class FileSender extends Nanobus { ['sign'] ); const rawAuth = await window.crypto.subtle.exportKey('raw', newAuthKey); - return new Promise((resolve, reject) => { - const xhr = new XMLHttpRequest(); - xhr.onreadystatechange = () => { - if (xhr.readyState === XMLHttpRequest.DONE) { - if (xhr.status === 200) { - return resolve(xhr.response); - } - if (xhr.status === 401) { - const nonce = xhr - .getResponseHeader('WWW-Authenticate') - .split(' ')[1]; - file.nonce = nonce; - } - reject(new Error(xhr.status)); - } - }; - xhr.onerror = () => reject(new Error(0)); - xhr.ontimeout = () => reject(new Error(0)); - xhr.open('post', `/api/password/${file.id}`); - xhr.setRequestHeader('Authorization', authHeader); - xhr.setRequestHeader('Content-Type', 'application/json'); - xhr.responseType = 'json'; - xhr.timeout = 2000; - xhr.send(JSON.stringify({ auth: arrayToB64(new Uint8Array(rawAuth)) })); - }); + try { + await sendPassword(file, authKey, rawAuth); + } catch (e) { + if (e.message === '401' && file.nonce !== e.nonce) { + await sendPassword(file, authKey, rawAuth); + } else { + throw e; + } + } } } diff --git a/server/routes/password.js b/server/routes/password.js index 68d1125d..fbb01dfa 100644 --- a/server/routes/password.js +++ b/server/routes/password.js @@ -24,12 +24,12 @@ module.exports = async function(req, res) { res.set('WWW-Authenticate', `send-v1 ${meta.nonce}`); return res.sendStatus(401); } - const nonce = crypto.randomBytes(16).toString('base64'); - storage.setField(id, 'nonce', nonce); - res.set('WWW-Authenticate', `send-v1 ${nonce}`); } catch (e) { - res.sendStatus(404); + return res.sendStatus(404); } + const nonce = crypto.randomBytes(16).toString('base64'); + storage.setField(id, 'nonce', nonce); + res.set('WWW-Authenticate', `send-v1 ${nonce}`); storage.setField(id, 'auth', req.body.auth); storage.setField(id, 'pwd', 1); res.sendStatus(200); From d039c38f00f5942bf3678a6bf4c378f7b9c39b97 Mon Sep 17 00:00:00 2001 From: Danny Coates Date: Fri, 8 Dec 2017 10:00:13 -0800 Subject: [PATCH 084/251] v2.2.1 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 71ec960a..eb6868dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "firefox-send", - "version": "2.2.0", + "version": "2.2.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index ab25c492..106c89b9 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "firefox-send", "description": "File Sharing Experiment", - "version": "2.2.0", + "version": "2.2.1", "author": "Mozilla (https://mozilla.org)", "repository": "mozilla/send", "homepage": "https://github.com/mozilla/send/", From 58cc381abf2173c3a1c574e52945b84c5c41fa12 Mon Sep 17 00:00:00 2001 From: Andreas Pettersson Date: Fri, 8 Dec 2017 18:10:47 +0000 Subject: [PATCH 085/251] Pontoon: Update Swedish (sv-SE) localization of Test Pilot: Firefox Send Localization authors: - Andreas Pettersson --- public/locales/sv-SE/send.ftl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/public/locales/sv-SE/send.ftl b/public/locales/sv-SE/send.ftl index 6667243f..658c5940 100644 --- a/public/locales/sv-SE/send.ftl +++ b/public/locales/sv-SE/send.ftl @@ -26,6 +26,7 @@ uploadSuccessConfirmHeader = Klar för att skicka uploadSvgAlt = Ladda upp uploadSuccessTimingHeader = Länken till din fil upphör att gälla efter 1 nedladdning eller om 24 timmar. expireInfo = Länken till din fil upphör att gälla efter { $downloadCount } eller { $timespan }. +downloadCount = 1 nedladdning;{ $num } nedladdningar timespanHours = { $num -> [one] 1 timme *[other] { $num } timmar @@ -94,3 +95,4 @@ addPasswordButton = Lägg till lösenord passwordTryAgain = Felaktigt lösenord. Försök igen. // This label is followed by the password needed to download a file passwordResult = Lösenord: { $password } +reportIPInfringement = Rapportera IP-överträdelse From 98ad058e2e0f200745945ce7901ad416d36b42d8 Mon Sep 17 00:00:00 2001 From: Andreas Pettersson Date: Fri, 8 Dec 2017 20:11:14 +0000 Subject: [PATCH 086/251] Pontoon: Update Swedish (sv-SE) localization of Test Pilot: Firefox Send Localization authors: - Andreas Pettersson --- public/locales/sv-SE/send.ftl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/public/locales/sv-SE/send.ftl b/public/locales/sv-SE/send.ftl index 658c5940..d5a70b68 100644 --- a/public/locales/sv-SE/send.ftl +++ b/public/locales/sv-SE/send.ftl @@ -26,7 +26,10 @@ uploadSuccessConfirmHeader = Klar för att skicka uploadSvgAlt = Ladda upp uploadSuccessTimingHeader = Länken till din fil upphör att gälla efter 1 nedladdning eller om 24 timmar. expireInfo = Länken till din fil upphör att gälla efter { $downloadCount } eller { $timespan }. -downloadCount = 1 nedladdning;{ $num } nedladdningar +downloadCount = { $num -> + [one] 1 nedladdning + *[other] { $num } nedladdningar + } timespanHours = { $num -> [one] 1 timme *[other] { $num } timmar From 4ae12db99c73101be00ffeb0a680ceb0a1d4b013 Mon Sep 17 00:00:00 2001 From: Jonathan Claudius Date: Fri, 8 Dec 2017 16:04:26 -0500 Subject: [PATCH 087/251] Make develop the default NODE_ENV --- docker-compose.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 37fb258e..f72bf161 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,6 +8,5 @@ services: - "1443:1443" environment: - REDIS_HOST=redis - - NODE_ENV=production redis: image: redis:alpine From 243d72eed5786f4e75515d3392f1f80a70bc4c30 Mon Sep 17 00:00:00 2001 From: Uccen Marzuq Date: Fri, 8 Dec 2017 21:51:05 +0000 Subject: [PATCH 088/251] Pontoon: Update Kabyle (kab) localization of Test Pilot: Firefox Send Localization authors: - Uccen Marzuq --- public/locales/kab/send.ftl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/public/locales/kab/send.ftl b/public/locales/kab/send.ftl index 49fcfbb6..2c9aded7 100644 --- a/public/locales/kab/send.ftl +++ b/public/locales/kab/send.ftl @@ -25,6 +25,7 @@ uploadingFileNotification = Lɣu-yid ticki yemmed usali. uploadSuccessConfirmHeader = Ihegga i walluy uploadSvgAlt = Sali uploadSuccessTimingHeader = Aseɣwen ar ufaylu-ik ad yemmet ticki yuder-d neɣ deffir n 24 n yisragen. +expireInfo = Aseɣwen icudden ar ufaylu-inek ad yemmet send { $downloadCount } naɣ { $timespan }. copyUrlFormLabelWithName = Nɣel sakin Bḍu aseɣwen akken ad tazneḍ afaylu-ik: { $filename } copyUrlFormButton = Sers ɣef afus copiedUrl = Yenɣel! @@ -87,3 +88,5 @@ footerLinkCookies = Inagan n tuqqna requirePasswordCheckbox = YEsra awal uffir akken ad isider afaylu-agi addPasswordButton = rnu awal uffir passwordTryAgain = Yir awal uffir. Ɛreḍ tikelt nniḍen. +// This label is followed by the password needed to download a file +passwordResult = Awal uffir: { $password } From d7084829c3b04ea78b02e0d0f2008ac020286e77 Mon Sep 17 00:00:00 2001 From: Breana Gonzales Date: Sat, 9 Dec 2017 01:10:56 +0000 Subject: [PATCH 089/251] Pontoon: Update Spanish (Mexico) (es-MX) localization of Test Pilot: Firefox Send Localization authors: - Breana Gonzales --- public/locales/es-MX/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/es-MX/send.ftl b/public/locales/es-MX/send.ftl index 3af0d59e..0f5355ad 100644 --- a/public/locales/es-MX/send.ftl +++ b/public/locales/es-MX/send.ftl @@ -97,3 +97,4 @@ addPasswordButton = Agregar contraseña passwordTryAgain = Contraseña incorrecta. Intenta de nuevo. // This label is followed by the password needed to download a file passwordResult = Contraseña: { $password } +reportIPInfringement = Denunciar una infracción de PI From 106aef579f6f5a14e43a6b099204f01d8812978c Mon Sep 17 00:00:00 2001 From: Thomas Dalichow <2012-02-05.github.com@thomasdalichow.de> Date: Sat, 9 Dec 2017 02:21:55 +0100 Subject: [PATCH 090/251] Add new config item: listen_address The IP address to bind the HTTP server to --- server/config.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/server/config.js b/server/config.js index e3e97b2a..55561afc 100644 --- a/server/config.js +++ b/server/config.js @@ -14,6 +14,11 @@ const conf = convict({ default: 'localhost', env: 'REDIS_HOST' }, + listen_address: { + format: "ipaddress", + default: "127.0.0.1", + env: "IP_ADDRESS" + }, listen_port: { format: 'port', default: 1443, From c8e168aa3e796466137f5f8d8f831f37fea4e3d4 Mon Sep 17 00:00:00 2001 From: Thomas Dalichow <2012-02-05.github.com@thomasdalichow.de> Date: Sat, 9 Dec 2017 02:22:36 +0100 Subject: [PATCH 091/251] Use new config item 'listen_address' in prod --- server/prod.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/prod.js b/server/prod.js index 2840f9ec..0515faf7 100644 --- a/server/prod.js +++ b/server/prod.js @@ -24,4 +24,4 @@ app.use( app.use(pages.notfound); -app.listen(config.listen_port); +app.listen(config.listen_port,config.listen_address); From b80ee8d7786272e1070668c31bb92ece99601b65 Mon Sep 17 00:00:00 2001 From: Thomas Dalichow <2012-02-05.github.com@thomasdalichow.de> Date: Sat, 9 Dec 2017 02:34:33 +0100 Subject: [PATCH 092/251] Make the linter happy :) --- server/config.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/config.js b/server/config.js index 55561afc..7f4b2d03 100644 --- a/server/config.js +++ b/server/config.js @@ -15,9 +15,9 @@ const conf = convict({ env: 'REDIS_HOST' }, listen_address: { - format: "ipaddress", - default: "127.0.0.1", - env: "IP_ADDRESS" + format: 'ipaddress', + default: '127.0.0.1', + env: 'IP_ADDRESS' }, listen_port: { format: 'port', From 8760b132da2dcda3b3fde0056619a8d31c0c939d Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Sat, 9 Dec 2017 10:51:01 +0000 Subject: [PATCH 093/251] Pontoon: Update Albanian (sq) localization of Test Pilot: Firefox Send Localization authors: - Besnik Bleta --- public/locales/sq/send.ftl | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 public/locales/sq/send.ftl diff --git a/public/locales/sq/send.ftl b/public/locales/sq/send.ftl new file mode 100644 index 00000000..173432f7 --- /dev/null +++ b/public/locales/sq/send.ftl @@ -0,0 +1,11 @@ +// Firefox Send is a brand name and should not be localized. +title = Firefox Send +siteSubtitle = eksperiment web +siteFeedback = Përshtypje +uploadPageHeader = Shkëmbim Privat, i Fshehtëzuar, Kartelash +uploadPageExplainer = Dërgoni kartela përmes një lidhjeje të parrezik, private dhe të fshehtëzuar, që skadon automatikisht për të garantuar që gjërat tuaja nuk mbesin në internet përgjithmonë. +uploadPageLearnMore = Mësoni më tepër +uploadPageDropMessage = Që të fillojë ngarkimi, hidheni kartelën tuaj këtu +uploadPageSizeMessage = Për ecurinë më të qëndrueshme, më e mira është t’i mbani kartelat tuaja nën 1GB +uploadPageBrowseButton = Përzgjidhni një kartelë nga kompjuteri juaj +uploadPageBrowseButton1 = Përzgjidhni një kartelë për ngarkim From fc9a85b6adeec2498b1b3e5d757ea0b700a827c0 Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Sat, 9 Dec 2017 11:10:46 +0000 Subject: [PATCH 094/251] Pontoon: Update Albanian (sq) localization of Test Pilot: Firefox Send Localization authors: - Besnik Bleta --- public/locales/sq/send.ftl | 49 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/public/locales/sq/send.ftl b/public/locales/sq/send.ftl index 173432f7..c0a95646 100644 --- a/public/locales/sq/send.ftl +++ b/public/locales/sq/send.ftl @@ -9,3 +9,52 @@ uploadPageDropMessage = Që të fillojë ngarkimi, hidheni kartelën tuaj këtu uploadPageSizeMessage = Për ecurinë më të qëndrueshme, më e mira është t’i mbani kartelat tuaja nën 1GB uploadPageBrowseButton = Përzgjidhni një kartelë nga kompjuteri juaj uploadPageBrowseButton1 = Përzgjidhni një kartelë për ngarkim +uploadPageMultipleFilesAlert = Ngarkimi i shumë kartelave njëherësh, ose i një dosjeje, hëpërhë nuk mbulohen. +uploadPageBrowseButtonTitle = Ngarkoje kartelën +uploadingPageProgress = Po ngarkohet { $filename } ({ $size }) +importingFile = Po importohet… +verifyingFile = Po verifikohet… +encryptingFile = Po fshehtëzohet… +decryptingFile = Po shfshehtëzohet… +notifyUploadDone = Ngarkimi juaj përfundoi. +uploadingPageMessage = Do të jeni në gjendje të caktoni parametra skadimi sapo kartela juaj të jetë ngarkuar. +uploadingPageCancel = Anuloje ngarkimin +uploadCancelNotification = Ngarkimi juaj u anulua. +uploadingPageLargeFileMessage = Kjo kartelë është e madhe dhe mund të dojë ca kohë të ngarkohet. Rrini këtu! +uploadingFileNotification = Njoftomë kur të jetë plotësuar ngarkimi . +uploadSuccessConfirmHeader = Gati për Dërgim +uploadSvgAlt = Ngarkoje +uploadSuccessTimingHeader = Lidhja për te kartela juaj do të skadojë pas 1 shkarkimi ose pas 24 orësh. +expireInfo = Lidhja për te kartela juaj do të skadojë pas { $downloadCount } ose { $timespan }. +downloadCount = { $num -> + [one] 1 shkarkimi + *[other] { $num } shkarkimesh + } +timespanHours = { $num -> + [one] 1 ore + *[other] { $num } orësh + } +copyUrlFormLabelWithName = Kopjojeni dhe jepuani të tjerëve lidhje që të dërgoni kartelën tuaj: { $filename } +copyUrlFormButton = Kopjoje te e papastra +copiedUrl = U kopjua! +deleteFileButton = Fshije kartelën +sendAnotherFileLink = Dërgoni një kartelë tjetër +// Alternative text used on the download link/button (indicates an action). +downloadAltText = Shkarkoje +downloadFileName = Shkarkoje { $filename } +downloadFileSize = ({ $size }) +unlockInputLabel = Jepni Fjalëkalimin +unlockInputPlaceholder = Fjalëkalim +unlockButtonLabel = Zhbllokoje +downloadFileTitle = Shkarko Kartelën e Fshehtëzuar +// Text and title used on the download link/button (indicates an action). +downloadButtonLabel = Shkarkoje +downloadNotification = Shkarkimi juaj u plotësua. +downloadFinish = Shkarkim i Plotësuar +// This message is displayed when uploading or downloading a file, e.g. "(1,3 MB of 10 MB)". +fileSizeProgress = ({ $partialSize } nga { $totalSize }) gjithsej +// Firefox Send is a brand name and should not be localized. +sendYourFilesLink = Provoni Firefox Send +downloadingPageProgress = Po shkarkohet { $filename } ({ $size }) +downloadingPageMessage = Ju lutemi, lëreni hapur këtë skedë ndërkohë që ne sjellim dhe shfshehtëzojmë kartelën tuaj. +errorAltText = Gabim ngarkimi From 85670bbc6ae7ae7040c85128fd5dbf31caef0d93 Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Sat, 9 Dec 2017 11:31:30 +0000 Subject: [PATCH 095/251] Pontoon: Update Albanian (sq) localization of Test Pilot: Firefox Send Localization authors: - Besnik Bleta --- public/locales/sq/send.ftl | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/public/locales/sq/send.ftl b/public/locales/sq/send.ftl index c0a95646..5c43e05d 100644 --- a/public/locales/sq/send.ftl +++ b/public/locales/sq/send.ftl @@ -58,3 +58,22 @@ sendYourFilesLink = Provoni Firefox Send downloadingPageProgress = Po shkarkohet { $filename } ({ $size }) downloadingPageMessage = Ju lutemi, lëreni hapur këtë skedë ndërkohë që ne sjellim dhe shfshehtëzojmë kartelën tuaj. errorAltText = Gabim ngarkimi +errorPageHeader = Diç shkoi ters! +errorPageMessage = Pati një gabim gjatë ngarkimit të kartelës. +errorPageLink = Dërgoni një kartelë tjetër +fileTooBig = Kjo kartelë është shumë e madhe për ngarkim. Do të duhej të ishte më pak se { $size }. +linkExpiredAlt = Lidhja skadoi +expiredPageHeader = Kjo lidhje ka skaduar ose s’ka ekzistuar kurrë! +notSupportedHeader = Shfletuesi juaj nuk mbulohet. +// Firefox Send is a brand name and should not be localized. +notSupportedDetail = Mjerisht, ky shfletues nuk mbulon teknologjinë web mbi të cilën bazohet Firefox Send.Do t’ju duhet të provoni një shfletues tjetër. Ju këshillojmë Firefox-in! +notSupportedLink = Pse nuk mbulohet ky shfletues? +notSupportedOutdatedDetail = Mjerisht, ky version i Firefox-it nuk e mbulon teknologjinë web mbi të cilën bazohet Firefox Send. Do t’ju duhet të përditësoni shfletuesin tuaj. +updateFirefox = Përditësojeni Firefox-in +downloadFirefoxButtonSub = Shkarkim Falas +uploadedFile = Kartelë +copyFileList = Kopjo URL-në +// expiryFileList is used as a column header +expiryFileList = Skadon Më +deleteFileList = Fshije +nevermindButton = S’prish punë From fa0d56d57a54eca9efd79b3c41914037ad9b053f Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Sat, 9 Dec 2017 11:51:15 +0000 Subject: [PATCH 096/251] Pontoon: Update Albanian (sq) localization of Test Pilot: Firefox Send Localization authors: - Besnik Bleta --- public/locales/sq/send.ftl | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/public/locales/sq/send.ftl b/public/locales/sq/send.ftl index 5c43e05d..5f5197a0 100644 --- a/public/locales/sq/send.ftl +++ b/public/locales/sq/send.ftl @@ -47,6 +47,8 @@ unlockInputLabel = Jepni Fjalëkalimin unlockInputPlaceholder = Fjalëkalim unlockButtonLabel = Zhbllokoje downloadFileTitle = Shkarko Kartelën e Fshehtëzuar +// Firefox Send is a brand name and should not be localized. +downloadMessage = Shoku juaj po ju dërgon një kartelë me Firefox Send, një shërbim që ju lejon të shkëmbeni kartela përmes një lidhjeje të parrezik, private, dhe të fshehtëzuar, që skadon automatikisht, për të garantuar që gjërat tuaja të mos mbeten në internet përgjithmonë. // Text and title used on the download link/button (indicates an action). downloadButtonLabel = Shkarkoje downloadNotification = Shkarkimi juaj u plotësua. @@ -77,3 +79,23 @@ copyFileList = Kopjo URL-në expiryFileList = Skadon Më deleteFileList = Fshije nevermindButton = S’prish punë +legalHeader = Kushte & Privatësi +legalNoticeTestPilot = Firefox Send është një eksperiment Test Pilot dhe subjekt i Kushteve të Shërbimit dhe Shënim Privacësie të Test Pilot-it. You can learn more about this experiment and its data collection Këtu mund të mësoni më tepër mbi këtë eksperiment dhe grumbullimit të të dhënave që ai kryen. +legalNoticeMozilla = Përdorimi i sajtit Firefox Send është gjithashtu subjekt i Shënimit Mbi Privatësi Sajtesh të Mozilla-s dhe Kushteve të Përdorimit të Sajtit. +deletePopupText = Të fshihet kjo kartelë? +deletePopupYes = Po +deletePopupCancel = Anuloje +deleteButtonHover = Fshije +copyUrlHover = Kopjoji URL-në +footerLinkLegal = Ligjore +// Test Pilot is a proper name and should not be localized. +footerLinkAbout = Rreth Test Pilot +footerLinkPrivacy = Privatësi +footerLinkTerms = Kushte +footerLinkCookies = Cookies +requirePasswordCheckbox = Kërko doemos një fjalëkalim për shkarkim të kësaj kartele +addPasswordButton = Shtoni fjalëkalim +passwordTryAgain = Fjalëkalim i pasaktë. Riprovoni. +// This label is followed by the password needed to download a file +passwordResult = Fjalëkalim: { $password } +reportIPInfringement = Raportoni Cenim IP-je From 7a0b189a1d12a478b869be4cab86b8753e816f9e Mon Sep 17 00:00:00 2001 From: Jim Spentzos Date: Sat, 9 Dec 2017 14:51:13 +0000 Subject: [PATCH 097/251] Pontoon: Update Greek (el) localization of Test Pilot: Firefox Send Localization authors: - Jim Spentzos --- public/locales/el/send.ftl | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/public/locales/el/send.ftl b/public/locales/el/send.ftl index 2984721f..7bc78726 100644 --- a/public/locales/el/send.ftl +++ b/public/locales/el/send.ftl @@ -25,6 +25,10 @@ uploadingFileNotification = Ειδοποίηση όταν ολοκληρωθεί uploadSuccessConfirmHeader = Έτοιμο για αποστολή uploadSvgAlt = Μεταφόρτωση uploadSuccessTimingHeader = Ο σύνδεσμος του αρχείου σας θα λήξει έπειτα από 1 λήψη ή 24 ώρες. +timespanHours = { $num -> + [one] 1 ώρα + *[other] { $num } ώρες + } copyUrlFormLabelWithName = Αντιγράψτε και μοιραστείτε τον σύνδεσμο για αποστολή του αρχείου σας : { $filename } copyUrlFormButton = Αντιγραφή στο πρόχειρο copiedUrl = Αντιγράφτηκε! @@ -86,4 +90,6 @@ footerLinkTerms = Όροι footerLinkCookies = Cookies requirePasswordCheckbox = Απαίτηση κωδικού πρόσβασης για λήψη του αρχείου addPasswordButton = Προσθήκη κωδικού πρόσβασης -incorrectPassword = Λάθος κωδικός πρόσβασης. Προσπάθεια ξανά; +passwordTryAgain = Λάθος κωδικός πρόσβασης. Δοκιμάστε ξανά. +// This label is followed by the password needed to download a file +passwordResult = Κωδικός πρόσβασης: { $password } From 31c891662268d40fac6d133e2c13d8bf6e5dc15c Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Sat, 9 Dec 2017 17:11:48 +0000 Subject: [PATCH 098/251] Pontoon: Update Albanian (sq) localization of Test Pilot: Firefox Send Localization authors: - Besnik Bleta --- public/locales/sq/send.ftl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/locales/sq/send.ftl b/public/locales/sq/send.ftl index 5f5197a0..196f0025 100644 --- a/public/locales/sq/send.ftl +++ b/public/locales/sq/send.ftl @@ -80,7 +80,7 @@ expiryFileList = Skadon Më deleteFileList = Fshije nevermindButton = S’prish punë legalHeader = Kushte & Privatësi -legalNoticeTestPilot = Firefox Send është një eksperiment Test Pilot dhe subjekt i Kushteve të Shërbimit dhe Shënim Privacësie të Test Pilot-it. You can learn more about this experiment and its data collection Këtu mund të mësoni më tepër mbi këtë eksperiment dhe grumbullimit të të dhënave që ai kryen. +legalNoticeTestPilot = Firefox Send është një eksperiment Pilot Testesh dhe subjekt i Kushteve të Shërbimit dhe Shënim Privacësie për Pilot Testesh. Këtu mund të mësoni më tepër mbi këtë eksperiment dhe grumbullimit të të dhënave që ai kryen. legalNoticeMozilla = Përdorimi i sajtit Firefox Send është gjithashtu subjekt i Shënimit Mbi Privatësi Sajtesh të Mozilla-s dhe Kushteve të Përdorimit të Sajtit. deletePopupText = Të fshihet kjo kartelë? deletePopupYes = Po @@ -89,7 +89,7 @@ deleteButtonHover = Fshije copyUrlHover = Kopjoji URL-në footerLinkLegal = Ligjore // Test Pilot is a proper name and should not be localized. -footerLinkAbout = Rreth Test Pilot +footerLinkAbout = Rreth Pilot Testesh footerLinkPrivacy = Privatësi footerLinkTerms = Kushte footerLinkCookies = Cookies From 19efcb1a0dbee1b44739eb6e40e631f7c9c5c0bf Mon Sep 17 00:00:00 2001 From: ybouhamam Date: Sun, 10 Dec 2017 09:11:16 +0000 Subject: [PATCH 099/251] Pontoon: Update Kabyle (kab) localization of Test Pilot: Firefox Send Localization authors: - ybouhamam --- public/locales/kab/send.ftl | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/kab/send.ftl b/public/locales/kab/send.ftl index 2c9aded7..578901fe 100644 --- a/public/locales/kab/send.ftl +++ b/public/locales/kab/send.ftl @@ -26,6 +26,14 @@ uploadSuccessConfirmHeader = Ihegga i walluy uploadSvgAlt = Sali uploadSuccessTimingHeader = Aseɣwen ar ufaylu-ik ad yemmet ticki yuder-d neɣ deffir n 24 n yisragen. expireInfo = Aseɣwen icudden ar ufaylu-inek ad yemmet send { $downloadCount } naɣ { $timespan }. +downloadCount = { $num -> + [one] 1 usider + *[other] { $num } isidar + } +timespanHours = { $num -> + [one] 1 usrag + *[other] { $num } isragen + } copyUrlFormLabelWithName = Nɣel sakin Bḍu aseɣwen akken ad tazneḍ afaylu-ik: { $filename } copyUrlFormButton = Sers ɣef afus copiedUrl = Yenɣel! @@ -90,3 +98,4 @@ addPasswordButton = rnu awal uffir passwordTryAgain = Yir awal uffir. Ɛreḍ tikelt nniḍen. // This label is followed by the password needed to download a file passwordResult = Awal uffir: { $password } +reportIPInfringement = Neqqes akukel n IP From 623f76fa6c60a3284947fcdf3b9e348f7593b71b Mon Sep 17 00:00:00 2001 From: Emin Mastizada Date: Mon, 11 Dec 2017 20:59:37 +0000 Subject: [PATCH 100/251] Pontoon: Update Azerbaijani (az) localization of Test Pilot: Firefox Send Localization authors: - Emin Mastizada --- public/locales/az/send.ftl | 1 - 1 file changed, 1 deletion(-) diff --git a/public/locales/az/send.ftl b/public/locales/az/send.ftl index 2b2b8bc3..a1e0f716 100644 --- a/public/locales/az/send.ftl +++ b/public/locales/az/send.ftl @@ -86,4 +86,3 @@ footerLinkTerms = Şərtlər footerLinkCookies = Çərəzlər requirePasswordCheckbox = Bu faylı endirmək üçün parol tələb et addPasswordButton = Parol əlavə et -incorrectPassword = Xətalı parol. Təkrar yoxlayın. From 3b88ea9b1c373393f858b634edf6f816a4a12a55 Mon Sep 17 00:00:00 2001 From: Mozilla Pontoon Date: Mon, 11 Dec 2017 20:59:57 +0000 Subject: [PATCH 101/251] Pontoon: Update Danish (da) localization of Test Pilot: Firefox Send --- public/locales/da/send.ftl | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/locales/da/send.ftl diff --git a/public/locales/da/send.ftl b/public/locales/da/send.ftl new file mode 100644 index 00000000..e69de29b From e9e64fed3f74dd657fc5d76034e6bac53db27283 Mon Sep 17 00:00:00 2001 From: eljuno Date: Mon, 11 Dec 2017 21:00:31 +0000 Subject: [PATCH 102/251] Pontoon: Update Indonesian (id) localization of Test Pilot: Firefox Send Localization authors: - Rahmat Subekti - eljuno - Kiki --- public/locales/id/send.ftl | 1 - 1 file changed, 1 deletion(-) diff --git a/public/locales/id/send.ftl b/public/locales/id/send.ftl index 17e80528..e16b973c 100644 --- a/public/locales/id/send.ftl +++ b/public/locales/id/send.ftl @@ -86,4 +86,3 @@ footerLinkTerms = Ketentuan footerLinkCookies = Kuki requirePasswordCheckbox = Membutuhkan sandi untuk mengunduh berkas ini addPasswordButton = Tambahkan Sandi -incorrectPassword = Sandi salah. Coba lagi? From 3b31b9d65bf76d1493999f34732fd62637f88d98 Mon Sep 17 00:00:00 2001 From: Michal Stanke Date: Tue, 12 Dec 2017 20:11:29 +0000 Subject: [PATCH 103/251] Pontoon: Update Czech (cs) localization of Test Pilot: Firefox Send MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Localization authors: - Filip Hruška - Michal Stanke --- public/locales/cs/send.ftl | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/public/locales/cs/send.ftl b/public/locales/cs/send.ftl index 0088397b..c25a69bc 100644 --- a/public/locales/cs/send.ftl +++ b/public/locales/cs/send.ftl @@ -25,6 +25,12 @@ uploadingFileNotification = Upozornit, až bude nahrávání dokončeno. uploadSuccessConfirmHeader = Připraveno k odeslání uploadSvgAlt = Nahrát uploadSuccessTimingHeader = Platnost odkazu na váš soubor vyprší po jeho prvním stažení, nebo po 24 hodinách. +expireInfo = Platnost odkazu na váš soubor vyprší po { $downloadCount } nebo { $timespan }. +downloadCount = { $num -> + [one] jednom stažení + [few] { $num } staženích + *[other] { $num } staženích + } timespanHours = { $num -> [one] hodina [few] hodiny @@ -94,3 +100,4 @@ addPasswordButton = Přidat heslo passwordTryAgain = Špatné heslo. Zkuste to znovu. // This label is followed by the password needed to download a file passwordResult = Heslo: { $password } +reportIPInfringement = Nahlásit porušení autorských práv From 25d6595d5e072e42bcb941ed61e686c6b4686cfb Mon Sep 17 00:00:00 2001 From: Khaled Hosny Date: Tue, 12 Dec 2017 23:31:40 +0000 Subject: [PATCH 104/251] Pontoon: Update Arabic (ar) localization of Test Pilot: Firefox Send MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Localization authors: - صفا الفليج - Khaled Hosny --- public/locales/ar/send.ftl | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/public/locales/ar/send.ftl b/public/locales/ar/send.ftl index 0959886b..c431ab83 100644 --- a/public/locales/ar/send.ftl +++ b/public/locales/ar/send.ftl @@ -11,7 +11,10 @@ uploadPageBrowseButton = اختر ملفّا على حاسوبك .title = اختر ملفّا على حاسوبك uploadPageBrowseButton1 = اختر ملفّا لرفعه uploadPageMultipleFilesAlert = رفع عدة ملفات (أو رفع مجلد) ليس مدعوما حاليا. +uploadPageBrowseButtonTitle = ارفع ملفًا +uploadingPageProgress = يرفع { $filename } ({ $size }) importingFile = يستورد… +verifyingFile = يتحقق… encryptingFile = يعمّي… decryptingFile = يفك التعمية… notifyUploadDone = انتهى الرفع. @@ -21,8 +24,30 @@ uploadingPageCancel = ألغِ الرفع uploadCancelNotification = أُلغي الرفع. uploadingPageLargeFileMessage = هذا الملف كبير الحجم وسيأخذ رفعه وقتا. انتظر رجاءً. uploadingFileNotification = أعلِمني عندما يكتمل الرفع. +uploadSuccessConfirmHeader = جاهز للإرسال uploadSvgAlt .alt = ارفع +uploadSuccessTimingHeader = ستنتهي صلاحية الرابط الذي يشير إلى الملف في حال: نُزِّل لأول مرة، أو مرّ ٢٤ ساعة على رفعه. +expireInfo = + ستنتهي صلاحية رابط الملف بعد { $downloadCount } أو { $timespan }. + + +downloadCount = { $num -> + [zero] لا تنزيلات + [one] تنزيل واحد + [two] تنزيلين + [few] { $num } تنزيلات + [many] { $num } تنزيلًا + *[other] { $num } تنزيل + } +timespanHours = { $num -> + [zero] أقل من ساعة + [one] ساعة + [two] ساعتين + [few] { $num } ساعات + [many] { $num } ساعة + *[other] { $num } ساعة + } copyUrlFormLabelWithName = انسخ الرابط وشاركه لإرسال الملف: { $filename } copyUrlFormButton = انسخ إلى الحافظة .title = انسخ إلى الحافظة @@ -78,3 +103,4 @@ requirePasswordCheckbox = اطلب كلمة سر لتنزيل هذا الملف addPasswordButton = أضِف كلمة سر // This label is followed by the password needed to download a file passwordResult = كلمة السر: { $password } +reportIPInfringement = أبلغ عن انتهاك للملكية الفكرية From 1729b30f89d4a6a94920294f024b90a3ed1746c5 Mon Sep 17 00:00:00 2001 From: Abdalrahman Hwoij Date: Tue, 12 Dec 2017 23:51:37 +0000 Subject: [PATCH 105/251] Pontoon: Update Arabic (ar) localization of Test Pilot: Firefox Send MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Localization authors: - Abdalrahman Hwoij - Zaid Ibhais - صفا الفليج - Khaled Hosny --- public/locales/ar/send.ftl | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/public/locales/ar/send.ftl b/public/locales/ar/send.ftl index c431ab83..cc73c879 100644 --- a/public/locales/ar/send.ftl +++ b/public/locales/ar/send.ftl @@ -28,10 +28,7 @@ uploadSuccessConfirmHeader = جاهز للإرسال uploadSvgAlt .alt = ارفع uploadSuccessTimingHeader = ستنتهي صلاحية الرابط الذي يشير إلى الملف في حال: نُزِّل لأول مرة، أو مرّ ٢٤ ساعة على رفعه. -expireInfo = - ستنتهي صلاحية رابط الملف بعد { $downloadCount } أو { $timespan }. - - +expireInfo = ستنتهي صلاحية رابط الملف بعد { $downloadCount } أو { $timespan }. downloadCount = { $num -> [zero] لا تنزيلات [one] تنزيل واحد @@ -60,8 +57,10 @@ sendAnotherFileLink = أرسل ملفّا آخر downloadAltText .alt = نزّل downloadFileName = نزّل { $filename } +downloadFileSize = ({ $size }) unlockInputLabel = أدخل كلمة السر unlockInputPlaceholder = كلمة السر +unlockButtonLabel = افتح القفل downloadFileTitle = نزِّل الملف المعمّى // Firefox Send is a brand name and should not be localized. downloadMessage = يُرسل إليك صديقك ملفا عبر «فَيَرفُكس سِنْد»، وهي خدمة تتيح لك مشاركة الملفات عبر رابط آمن وخاص ومعمّى، حيث تنتهي صلاحياتها تلقائيا لتضمن عدم بقاء ما ترسله إلى الأبد. @@ -74,6 +73,7 @@ downloadFinish = اكتمل التنزيل fileSizeProgress = ({ $partialSize } من أصل { $totalSize }) // Firefox Send is a brand name and should not be localized. sendYourFilesLink = جرِّب «فَيَرفُكس سِنْد» +downloadingPageProgress = ينزّل { $filename } ({ $size }) downloadingPageMessage = رجاء أبقِ هذا اللسان مفتوحا حتى نجلب الملف ونفك تعميته. errorAltText .alt = خطأ أثناء الرفع @@ -81,14 +81,21 @@ errorPageHeader = حدث خطب ما. errorPageMessage = حدث خطب ما أثناء رفع الملف. errorPageLink = أرسل ملفا آخر fileTooBig = حجم الملف كبير للغاية لرفعه. يجب أن يكون أصغر من { $size }. +linkExpiredAlt = انتهت صلاحية الرابط +expiredPageHeader = انتهت صلاحية هذا الرابط أو لم يكن موجودا في المقام الأول! notSupportedHeader = متصفحك غير مدعوم. // Firefox Send is a brand name and should not be localized. notSupportedDetail = للأسف فإن متصفحك لا يدعم تقنية الوِب التي يعتمد عليها «فَيَرفُكس سِنْد». عليك تجربة متصفح آخر، ونحن ننصحك بِفَيَرفُكس! notSupportedLink = لماذا متصفحي غير مدعوم؟ notSupportedOutdatedDetail = للأسف فإن إصدارة فَيَرفُكس هذه لا تدعم تقنية الوِب التي يعتمد عليها «فَيَرفُكس سِنْد». عليك تحديث متصفحك. updateFirefox = حدّث فَيَرفُكس +downloadFirefoxButtonSub = تنزيل مجاني +uploadedFile = ملف copyFileList = انسخ الرابط +// expiryFileList is used as a column header +expiryFileList = ينتهي في deleteFileList = احذف +nevermindButton = لا بأس legalHeader = الشروط والخصوصية deletePopupText = أأحذف هذا الملف؟ deletePopupYes = نعم @@ -97,10 +104,15 @@ deleteButtonHover .title = احذف copyUrlHover .title = انسخ الرابط +footerLinkLegal = القانونية +// Test Pilot is a proper name and should not be localized. +footerLinkAbout = حول الاختبار التجريبي +footerLinkPrivacy = الخصوصية footerLinkTerms = الشروط footerLinkCookies = الكعكات requirePasswordCheckbox = اطلب كلمة سر لتنزيل هذا الملف addPasswordButton = أضِف كلمة سر +passwordTryAgain = كلمة السر خاطئة. أعِد المحاولة. // This label is followed by the password needed to download a file passwordResult = كلمة السر: { $password } reportIPInfringement = أبلغ عن انتهاك للملكية الفكرية From 7ce2320eda3ee388c552290b4c4e97ff8cbbc6d0 Mon Sep 17 00:00:00 2001 From: Hyeonseok Shin Date: Wed, 13 Dec 2017 02:31:46 +0000 Subject: [PATCH 106/251] Pontoon: Update Korean (ko) localization of Test Pilot: Firefox Send Localization authors: - Hyeonseok Shin --- public/locales/ko/send.ftl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/public/locales/ko/send.ftl b/public/locales/ko/send.ftl index f8070cd3..ebe3d035 100644 --- a/public/locales/ko/send.ftl +++ b/public/locales/ko/send.ftl @@ -26,6 +26,8 @@ uploadingFileNotification = 업로드가 완료되면 알림을 표시해 주세 uploadSuccessConfirmHeader = 보낼 준비 완료 uploadSvgAlt = 업로드 uploadSuccessTimingHeader = 이 파일의 링크는 한 번의 다운로드 후 또는 24시간이 지난 뒤에 만료됩니다. +downloadCount = 1 다운로드 +timespanHours = 1 시간 copyUrlFormLabelWithName = 파일을 보내기 위해 이 링크를 복사하고 공유하세요: { $filename } copyUrlFormButton = 클립보드에 복사 copiedUrl = 복사 완료! From bbb1c4264190633da03331d5c987b8c0cd3b5e65 Mon Sep 17 00:00:00 2001 From: Hyeonseok Shin Date: Wed, 13 Dec 2017 02:50:51 +0000 Subject: [PATCH 107/251] Pontoon: Update Korean (ko) localization of Test Pilot: Firefox Send Localization authors: - Hyeonseok Shin - minwook-shin --- public/locales/ko/send.ftl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/public/locales/ko/send.ftl b/public/locales/ko/send.ftl index ebe3d035..5bbcb759 100644 --- a/public/locales/ko/send.ftl +++ b/public/locales/ko/send.ftl @@ -26,6 +26,7 @@ uploadingFileNotification = 업로드가 완료되면 알림을 표시해 주세 uploadSuccessConfirmHeader = 보낼 준비 완료 uploadSvgAlt = 업로드 uploadSuccessTimingHeader = 이 파일의 링크는 한 번의 다운로드 후 또는 24시간이 지난 뒤에 만료됩니다. +expireInfo = 이 파일의 링크는 { $downloadCount }나 { $timespan } 후에 만료됩니다. downloadCount = 1 다운로드 timespanHours = 1 시간 copyUrlFormLabelWithName = 파일을 보내기 위해 이 링크를 복사하고 공유하세요: { $filename } @@ -92,3 +93,4 @@ addPasswordButton = 비밀번호 추가 passwordTryAgain = 비밀번호가 맞지 않습니다. 다시 시도해 주세요. // This label is followed by the password needed to download a file passwordResult = 비밀번호: { $password } +reportIPInfringement = 지적 재산권 침해 신고 From 1a4cea7b4fd5dd7b1f2d4108150f1179fba2965b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nihad=20Sulji=C4=87?= Date: Wed, 13 Dec 2017 08:32:30 +0000 Subject: [PATCH 108/251] Pontoon: Update Bosnian (bs) localization of Test Pilot: Firefox Send MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Localization authors: - Nihad Suljić --- public/locales/bs/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/bs/send.ftl b/public/locales/bs/send.ftl index b8804a41..6b81ff82 100644 --- a/public/locales/bs/send.ftl +++ b/public/locales/bs/send.ftl @@ -95,3 +95,4 @@ addPasswordButton = Dodaj lozinku passwordTryAgain = Netačna lozinka. Pokušajte ponovo. // This label is followed by the password needed to download a file passwordResult = Lozinka: { $password } +reportIPInfringement = Prijavite IP prekršaj From 1d26f4b24f92310faa98753c0d82a7ae737adb87 Mon Sep 17 00:00:00 2001 From: Derek Tamsen Date: Wed, 13 Dec 2017 18:22:17 -0800 Subject: [PATCH 109/251] Use EXPIRE_SECONDS to calculate file ttl for static content --- app/templates/share.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/templates/share.js b/app/templates/share.js index e86d18e0..abf5d018 100644 --- a/app/templates/share.js +++ b/app/templates/share.js @@ -1,3 +1,4 @@ +/* global EXPIRE_SECONDS */ const html = require('choo/html'); const assets = require('../../common/assets'); const notFound = require('./notFound'); @@ -16,10 +17,11 @@ function passwordComplete(state, password) { } function expireInfo(file, translate, emit) { + const hours = Math.floor(EXPIRE_SECONDS / 60 / 60); const el = html([ `
${translate('expireInfo', { downloadCount: '', - timespan: translate('timespanHours', { num: 24 }) + timespan: translate('timespanHours', { num: hours }) })}
` ]); const select = el.querySelector('select'); From 3fd64d995694d4b6a987da81014caf49e8e64058 Mon Sep 17 00:00:00 2001 From: Jobava Date: Thu, 14 Dec 2017 17:11:45 +0000 Subject: [PATCH 110/251] Pontoon: Update Romanian (ro) localization of Test Pilot: Firefox Send Localization authors: - Jobava --- public/locales/ro/send.ftl | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/public/locales/ro/send.ftl b/public/locales/ro/send.ftl index 9d487b64..8322efca 100644 --- a/public/locales/ro/send.ftl +++ b/public/locales/ro/send.ftl @@ -3,8 +3,10 @@ title = Firefox Send siteSubtitle = un experiment web siteFeedback = Feedback uploadPageHeader = Partajare de fișiere privată și criptată +uploadPageExplainer = Trimite file printr-un link sigur, privat și criptat care expiră automat pentru ca informațiile să rămână în siguranță. uploadPageLearnMore = Află mai multe uploadPageDropMessage = Aruncă fișierul aici pentru a începe încărcarea. +uploadPageSizeMessage = Pentru a lucra mai ușor, recomandăm să păstrezi fișierul sub 1GB uploadPageBrowseButton = Alege un fișier din calculator. uploadPageBrowseButton1 = Selectează un fișier pentru încărcare uploadPageMultipleFilesAlert = Încărcarea mai multor fișiere deodată sau a dosarelor nu este suportată. @@ -23,6 +25,14 @@ uploadingFileNotification = Notifică-mă când încărcarea este încheiată. uploadSuccessConfirmHeader = Pregătit pentru trimitere uploadSvgAlt = Încarcă uploadSuccessTimingHeader = Linkul către fișierul tău va expira după 1 descărcare sau în 24 de ore. +expireInfo = Linkul la fișier va expira după { $downloadCount } sau { $timespan }. +downloadCount = +timespanHours = { $num -> + [one] 1 oră + [few] ore + *[other] de ore + } +copyUrlFormLabelWithName = Copiază și împărtășește linkul de la fișierul de trimis: { $filename } copyUrlFormButton = Copiază în clipboard copiedUrl = Copiat! deleteFileButton = Șterge fișierul From 3a7677b46d99715ba9825f503bcf52591d21043b Mon Sep 17 00:00:00 2001 From: Jobava Date: Thu, 14 Dec 2017 17:31:55 +0000 Subject: [PATCH 111/251] Pontoon: Update Romanian (ro) localization of Test Pilot: Firefox Send Localization authors: - Jobava --- public/locales/ro/send.ftl | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/public/locales/ro/send.ftl b/public/locales/ro/send.ftl index 8322efca..e5effbad 100644 --- a/public/locales/ro/send.ftl +++ b/public/locales/ro/send.ftl @@ -3,7 +3,7 @@ title = Firefox Send siteSubtitle = un experiment web siteFeedback = Feedback uploadPageHeader = Partajare de fișiere privată și criptată -uploadPageExplainer = Trimite file printr-un link sigur, privat și criptat care expiră automat pentru ca informațiile să rămână în siguranță. +uploadPageExplainer = Trimite fișiere printr-un link sigur, privat și criptat care expiră automat pentru ca informațiile să rămână în siguranță. uploadPageLearnMore = Află mai multe uploadPageDropMessage = Aruncă fișierul aici pentru a începe încărcarea. uploadPageSizeMessage = Pentru a lucra mai ușor, recomandăm să păstrezi fișierul sub 1GB @@ -45,6 +45,8 @@ unlockInputLabel = Introdu parola unlockInputPlaceholder = Parolă unlockButtonLabel = Deblochează downloadFileTitle = Descarcă fișierul criptat +// Firefox Send is a brand name and should not be localized. +downloadMessage = Un prieten îți trimite un fișier prin Firefox Send, un serviciu care îți permite să împărtășești un fișier printr-un link sigur, privat și criptat care expiră automat pentru a păstra informațiile tale online doar temporar. // Text and title used on the download link/button (indicates an action). downloadButtonLabel = Descarcă downloadNotification = Descărcarea s-a încheiat. @@ -54,6 +56,7 @@ fileSizeProgress = ({ $partialSize } din { $totalSize }) // Firefox Send is a brand name and should not be localized. sendYourFilesLink = Încearcă Firefox Send downloadingPageProgress = Se descarcă { $filename } ({ $size }) +downloadingPageMessage = Te rugăm să păstrezi această file deschisă în timp ce preluăm fișierul și îl decriptăm. errorAltText = Eroare la încărcare errorPageHeader = Ceva a mers prost! errorPageMessage = A apărut o eroare la încărcarea fișierului. @@ -62,7 +65,10 @@ fileTooBig = Acest fișier este prea mare. Trebuie să fie sub { $size }. linkExpiredAlt = Link expirat expiredPageHeader = Acest link a expirat sau nu a existat de la bun început! notSupportedHeader = Browserul tău nu este suportat. +// Firefox Send is a brand name and should not be localized. +notSupportedDetail = Din păcate acest browser nu suportă tehnologii web precum Firefox Send. Trebuie să încerci alt browser. Îți recomandăm Firefox! notSupportedLink = De ce browserul meu nu este suportat? +notSupportedOutdatedDetail = Din păcate această versiune de Firefox nu suportă tehnologiile web din spatele Firefox Sent. Îți recomandăm să actualizezi browserul. updateFirefox = Actualizează Firefox downloadFirefoxButtonSub = Descărcare gratuită uploadedFile = Fișier @@ -72,6 +78,8 @@ expiryFileList = Expiră în deleteFileList = Șterge nevermindButton = Uită legalHeader = Termeni de utilizare și politica de confidențialitate +legalNoticeTestPilot = Firefox Send este momentan un experiment Test Pilot și supus Termenilor de utilizare Test Pilot și a Politicii de confidențialitate. Poți afla mai multe despre acest experiment aici. +legalNoticeMozilla = Folosirea site-ului Firefox Send mai este supusă Politicii de confidențialitate pentru site-uri web și a Termenilor de folosire a site-urilor web. deletePopupText = Ștergi aceast fișier? deletePopupYes = Da deletePopupCancel = Renunță @@ -83,4 +91,9 @@ footerLinkAbout = Despre Test Pilot footerLinkPrivacy = Confidențialitate footerLinkTerms = Termeni footerLinkCookies = Cookie-uri +requirePasswordCheckbox = Este necesară o parolă pentru a descărca acest fișier addPasswordButton = Adaugă parolă +passwordTryAgain = Parola este incorectă. Încearcă din nou. +// This label is followed by the password needed to download a file +passwordResult = Parola: { $password } +reportIPInfringement = Raportează încălcarea proprietății intelectuale From 0f8c3caf18e275b121e613924187103f33d4a030 Mon Sep 17 00:00:00 2001 From: Danny Coates Date: Tue, 19 Dec 2017 10:06:45 -0800 Subject: [PATCH 112/251] fixed untranslated strings breaking the site --- build/fluent_loader.js | 27 ++- package-lock.json | 485 ++++++++++++++++++++++++++++++++++++----- package.json | 20 +- 3 files changed, 460 insertions(+), 72 deletions(-) diff --git a/build/fluent_loader.js b/build/fluent_loader.js index 8ba41928..26d6ee56 100644 --- a/build/fluent_loader.js +++ b/build/fluent_loader.js @@ -1,26 +1,45 @@ const { MessageContext } = require('fluent'); +const fs = require('fs'); function toJSON(map) { return JSON.stringify(Array.from(map)); } +function merge(m1, m2) { + const result = new Map(m1); + for (const [k, v] of m2) { + result.set(k, v); + } + return result; +} + module.exports = function(source) { const localeExp = this.options.locale || /([^/]+)\/[^/]+\.ftl$/; const result = localeExp.exec(this.resourcePath); const locale = result && result[1]; - // pre-parse the ftl - const context = new MessageContext(locale); - context.addMessages(source); if (!locale) { throw new Error(`couldn't find locale in: ${this.resourcePath}`); } + // load default language and "merge" contexts + // TODO: make this configurable + const en_ftl = fs.readFileSync( + require.resolve('../public/locales/en-US/send.ftl'), + 'utf8' + ); + const en = new MessageContext('en-US'); + en.addMessages(en_ftl); + // pre-parse the ftl + const context = new MessageContext(locale); + context.addMessages(source); + + const merged = merge(en._messages, context._messages); return ` module.exports = \` if (typeof window === 'undefined') { var fluent = require('fluent'); } var ctx = new fluent.MessageContext('${locale}', {useIsolating: false}); -ctx._messages = new Map(${toJSON(context._messages)}); +ctx._messages = new Map(${toJSON(merged)}); function translate(id, data) { var msg = ctx.getMessage(id); if (typeof(msg) !== 'string' && !msg.val && msg.attrs) { diff --git a/package-lock.json b/package-lock.json index eb6868dd..2b310291 100644 --- a/package-lock.json +++ b/package-lock.json @@ -191,6 +191,12 @@ "integrity": "sha1-GTxfCoZUGkxm+6Hi3DhYM2LqXo8=", "dev": true }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, "argparse": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", @@ -350,31 +356,47 @@ "dev": true }, "autoprefixer": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.1.tgz", - "integrity": "sha512-lTbsa2X03maxG45xCNh30sJaRKDn8JPnanOeQOW3wvD9yPGmIsf041LHqlrZ1lXPF/1M3yTZKXqqYfmxU69xuQ==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.3.tgz", + "integrity": "sha512-dqzVGiz3v934+s3YZA6nk7tAs9xuTz5wMJbX1M+L4cY/MTNkOUqP61c1GWkEVlUL/PEy1pKRSCFuoRZrXYx9qA==", "dev": true, "requires": { - "browserslist": "2.9.1", - "caniuse-lite": "1.0.30000777", + "browserslist": "2.10.0", + "caniuse-lite": "1.0.30000783", "normalize-range": "0.1.2", "num2fraction": "1.2.2", "postcss": "6.0.14", "postcss-value-parser": "3.3.0" }, "dependencies": { + "browserslist": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.10.0.tgz", + "integrity": "sha512-WyvzSLsuAVPOjbljXnyeWl14Ae+ukAT8MUuagKVzIDvwBxl4UAwD1xqtyQs2eWYPGUKMeC3Ol62goqYuKqTTcw==", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000783", + "electron-to-chromium": "1.3.28" + } + }, "caniuse-lite": { - "version": "1.0.30000777", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000777.tgz", - "integrity": "sha1-McGKSozUl4LrswXI6Kk+azs+TxM=", + "version": "1.0.30000783", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000783.tgz", + "integrity": "sha1-m1SZ+xtQPSNF0SqmuGEoUvQnb/0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.28", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.28.tgz", + "integrity": "sha1-jdTmRYCGZE6fnwoc8y4qH53/2e4=", "dev": true } } }, "aws-sdk": { - "version": "2.162.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.162.0.tgz", - "integrity": "sha1-GxYhX8m1mbp80s/nzgUMf5NDgaY=", + "version": "2.171.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.171.0.tgz", + "integrity": "sha1-acJWXpjjU9Q3QCR3zDBkoTyu3Jw=", "requires": { "buffer": "4.9.1", "crypto-browserify": "1.0.9", @@ -1527,6 +1549,27 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, + "cacache": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.1.tgz", + "integrity": "sha512-dRHYcs9LvG9cHgdPzjiI+/eS7e1xRhULrcyOx04RZQsszNJXU2SL9CyG60yLnge282Qq5nwTv+ieK2fH+WPZmA==", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "chownr": "1.0.1", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "lru-cache": "4.1.1", + "mississippi": "1.3.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.2", + "ssri": "5.0.0", + "unique-filename": "1.1.0", + "y18n": "3.2.1" + } + }, "call-matcher": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-matcher/-/call-matcher-1.0.1.tgz", @@ -1739,6 +1782,12 @@ "xtend": "4.0.1" } }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "dev": true + }, "ci-info": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.2.tgz", @@ -2162,20 +2211,52 @@ "integrity": "sha1-Qa1XsbVVlR7BcUEqgZQrHoIA00o=", "dev": true }, - "copy-webpack-plugin": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.2.3.tgz", - "integrity": "sha512-cL/Wl3Y1QmmKThl/mWeGB+HH3YH+25tn8nhqEGsZda4Yn7GqGnDZ+TbeKJ7A6zvrxyNhhuviYAxn/tCyyAqh8Q==", + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "bluebird": "3.5.1", - "glob": "7.1.2", + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, + "copy-webpack-plugin": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.3.0.tgz", + "integrity": "sha512-5o1/xyWm8OYDmLFKAWMuPU3A/jZ4Z6kZSZGh36KD2XmtxnRa8lQyLx7bCNQm08BPaR/oqUdtJOr9jWfnYINp9g==", + "dev": true, + "requires": { + "cacache": "10.0.1", + "find-cache-dir": "1.0.0", + "globby": "7.1.1", "is-glob": "4.0.0", "loader-utils": "0.2.17", "lodash": "4.17.4", - "minimatch": "3.0.4" + "minimatch": "3.0.4", + "p-limit": "1.1.0", + "pify": "3.0.0", + "serialize-javascript": "1.4.0" }, "dependencies": { + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "dir-glob": "2.0.0", + "glob": "7.1.2", + "ignore": "3.3.7", + "pify": "3.0.0", + "slash": "1.0.0" + } + }, "loader-utils": { "version": "0.2.17", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", @@ -2597,6 +2678,12 @@ "array-find-index": "1.0.2" } }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true + }, "d": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", @@ -2964,6 +3051,44 @@ "readable-stream": "1.1.14" } }, + "duplexify": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz", + "integrity": "sha512-j5goxHTwVED1Fpe5hh3q9R93Kip0Bg2KVAt4f8CEYM3UEwYcPSvWbXaUQOzdX/HtiNomipv+gU7ASQPDbV7pGQ==", + "dev": true, + "requires": { + "end-of-stream": "1.4.0", + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "stream-shift": "1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -3007,6 +3132,15 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=" }, + "end-of-stream": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", + "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", + "dev": true, + "requires": { + "once": "1.4.0" + } + }, "enhanced-resolve": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", @@ -3204,9 +3338,9 @@ } }, "eslint": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.12.1.tgz", - "integrity": "sha512-28hOYej+NZ/R5H1yMvyKa1+bPlu+fnsIAQffK6hxXgvmXnImos2bA5XfCn5dYv2k2mrKj+/U/Z4L5ICWxC7TQw==", + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.13.1.tgz", + "integrity": "sha512-UCJVV50RtLHYzBp1DZ8CMPtRSg4iVZvjgO9IJHIKyWU/AnJVjtdRikoUPLB29n5pzMB7TnsLQWf0V6VUJfoPfw==", "dev": true, "requires": { "ajv": "5.5.0", @@ -3224,11 +3358,11 @@ "file-entry-cache": "2.0.0", "functional-red-black-tree": "1.0.1", "glob": "7.1.2", - "globals": "11.0.1", + "globals": "11.1.0", "ignore": "3.3.7", "imurmurhash": "0.1.4", "inquirer": "3.3.0", - "is-resolvable": "1.0.0", + "is-resolvable": "1.0.1", "js-yaml": "3.10.0", "json-stable-stringify-without-jsonify": "1.0.1", "levn": "0.3.0", @@ -3290,9 +3424,9 @@ "dev": true }, "globals": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.0.1.tgz", - "integrity": "sha1-Eqh7sBDlFUOWrMU14eQ/x1Ow5eg=", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.1.0.tgz", + "integrity": "sha512-uEuWt9mqTlPDwSqi+sHjD4nWU/1N+q0fiWI9T1mZpD2UENqX20CFD5T/ziLZvztPaBKl7ZylUi1q6Qfm7E2CiQ==", "dev": true }, "js-yaml": { @@ -3713,9 +3847,9 @@ } }, "file-loader": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.5.tgz", - "integrity": "sha512-RzGHDatcVNpGISTvCpfUfOGpYuSR7HSsSg87ki+wF6rw1Hm0RALPTiAdsxAq1UwLf0RRhbe22/eHK6nhXspiOQ==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.6.tgz", + "integrity": "sha512-873ztuL+/hfvXbLDJ262PGO6XjERnybJu2gW1/5j8HUfxSiFJI9Hj/DhZ50ZGRUxBvuNiazb/cM2rh9pqrxP6Q==", "dev": true, "requires": { "loader-utils": "1.1.0", @@ -3837,6 +3971,42 @@ "resolved": "https://registry.npmjs.org/fluent-langneg/-/fluent-langneg-0.1.0.tgz", "integrity": "sha512-SzRtXNaIcCyRabIpcv+AQd0gn+tXv1wfDDvej3wtBo1/XV0iDnCw5XzbARRRmZMW+IEg+Q26jup6vYgnDam4dg==" }, + "flush-write-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz", + "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -3919,6 +4089,42 @@ "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", "dev": true }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, "fs-extra": { "version": "0.30.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", @@ -3932,6 +4138,18 @@ "rimraf": "2.6.2" } }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "1.1.14" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -5524,6 +5742,12 @@ "resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.0.0.tgz", "integrity": "sha1-NGpCj0dKrI9QzzeE6i0PFvYr2ms=" }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, "ignore": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", @@ -5954,13 +6178,10 @@ "dev": true }, "is-resolvable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", - "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", - "dev": true, - "requires": { - "tryit": "1.0.3" - } + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.1.tgz", + "integrity": "sha512-y5CXYbzvB3jTnWAZH1Nl7ykUWb6T3BcTs56HUruwBf8MhF56n1HWqhDWnVFo8GHrUPDgvUUNVhrc2U8W7iqz5g==", + "dev": true }, "is-stream": { "version": "1.1.0", @@ -7271,6 +7492,24 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, + "mississippi": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-1.3.0.tgz", + "integrity": "sha1-0gFYPrEjJ+PFwWQqQEqcrPlONPU=", + "dev": true, + "requires": { + "concat-stream": "1.6.0", + "duplexify": "3.5.1", + "end-of-stream": "1.4.0", + "flush-write-stream": "1.0.2", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "1.0.3", + "pumpify": "1.3.5", + "stream-each": "1.2.2", + "through2": "2.0.3" + } + }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -7368,6 +7607,20 @@ "moment": "2.19.3" } }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, "mozlog": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/mozlog/-/mozlog-2.2.0.tgz", @@ -8042,6 +8295,43 @@ "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", "dev": true }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.3" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, "param-case": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", @@ -9818,9 +10108,9 @@ "dev": true }, "prettier": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.8.2.tgz", - "integrity": "sha512-fHWjCwoRZgjP1rvLP7OGqOznq7xH1sHMQUFLX8qLRO79hI57+6xbc5vB904LxEkCfgFgyr3vv06JkafgCSzoZg==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.9.2.tgz", + "integrity": "sha512-piXx9N2WT8hWb7PBbX1glAuJVIkEyUV9F5fMXFINpZ0x3otVOFKKeGmeuiclFJlP/UrgTckyV606VjH2rNK4bw==", "dev": true }, "pretty-format": { @@ -9874,6 +10164,12 @@ "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", "dev": true }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, "proxy-addr": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", @@ -9936,6 +10232,27 @@ "randombytes": "2.0.5" } }, + "pump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "dev": true, + "requires": { + "end-of-stream": "1.4.0", + "once": "1.4.0" + } + }, + "pumpify": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.3.5.tgz", + "integrity": "sha1-G2ccYZlAq8rqwK0OOjwWS+dgmTs=", + "dev": true, + "requires": { + "duplexify": "3.5.1", + "inherits": "2.0.3", + "pump": "1.0.3" + } + }, "punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", @@ -10051,9 +10368,9 @@ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" }, "raven": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/raven/-/raven-2.2.1.tgz", - "integrity": "sha1-V8f75oqAFH7FJ97z18AVdc+Uj+M=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/raven/-/raven-2.3.0.tgz", + "integrity": "sha1-lvFTRr2qQzs7bUcTCARQYVWDPWk=", "requires": { "cookie": "0.3.1", "lsmod": "1.0.0", @@ -10075,9 +10392,9 @@ } }, "raven-js": { - "version": "3.20.1", - "resolved": "https://registry.npmjs.org/raven-js/-/raven-js-3.20.1.tgz", - "integrity": "sha512-Wr973Ipmd+dWUPQ6mSru/gyteavriEyP6G3iDZ2jpI3sBAWejtVtoXO5BHujEWB1z+/dqCLn+Zezgdc30xZcVA==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/raven-js/-/raven-js-3.21.0.tgz", + "integrity": "sha512-6/DICF3ndYy1mxli88NG1wVtwGnzyalZZVNf/qQeiCDpNKJIyY5bsGZ2GAGcUE+nWg+9G3tQ1KL/UbG4U6vNBA==", "dev": true }, "raw-body": { @@ -10663,6 +10980,15 @@ "is-promise": "2.1.0" } }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "1.2.0" + } + }, "rx-lite": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", @@ -10797,6 +11123,12 @@ } } }, + "serialize-javascript": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.4.0.tgz", + "integrity": "sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU=", + "dev": true + }, "serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", @@ -10901,9 +11233,9 @@ "dev": true }, "sinon": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.1.2.tgz", - "integrity": "sha512-5uLBZPdCWl59Lpbf45ygKj7Z0LVol+ftBe7RDIXOQV/sF58pcFmbK8raA7bt6eljNuGnvBP+/ZxlicVn0emDjA==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.1.3.tgz", + "integrity": "sha512-c7u0ZuvBRX1eXuB4jN3BRCAOGiUTlM8SE3TxbJHrNiHUKL7wonujMOB6Fi1gQc00U91IscFORQHDga/eccqpbw==", "dev": true, "requires": { "diff": "3.2.0", @@ -11175,6 +11507,15 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "ssri": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.0.0.tgz", + "integrity": "sha512-728D4yoQcQm1ooZvSbywLkV1RjfITZXh0oWrhM/lnsx3nAHx7LsRGJWB/YyvoceAYRq98xqbstiN4JBv1/wNHg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -11242,6 +11583,16 @@ "duplexer": "0.1.1" } }, + "stream-each": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", + "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", + "dev": true, + "requires": { + "end-of-stream": "1.4.0", + "stream-shift": "1.0.0" + } + }, "stream-http": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", @@ -11281,6 +11632,12 @@ } } }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, "stream-to-observable": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.1.0.tgz", @@ -11419,7 +11776,7 @@ "integrity": "sha512-v5K6tv+Ky3SoJfNqGOvgzRDLqZV133CZ7Wtu3y5aAGjQHVi+6dixFLgI82VrJZJdC4HwZplafJcRP+4r7EUt5g==", "dev": true, "requires": { - "autoprefixer": "7.2.1", + "autoprefixer": "7.2.3", "balanced-match": "1.0.0", "chalk": "2.3.0", "cosmiconfig": "3.1.0", @@ -11916,12 +12273,6 @@ "integrity": "sha1-qf2LA5Swro//guBjOgo2zK1bX4Y=", "dev": true }, - "tryit": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", - "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", - "dev": true - }, "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", @@ -12121,6 +12472,24 @@ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", "dev": true }, + "unique-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", + "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "dev": true, + "requires": { + "unique-slug": "2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", + "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "dev": true, + "requires": { + "imurmurhash": "0.1.4" + } + }, "unist-util-find-all-after": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-1.0.1.tgz", @@ -12366,9 +12735,9 @@ } }, "webpack": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.9.1.tgz", - "integrity": "sha512-jONJ0l8nqgiQVkqs15O9TFWLozbFkCgVodVrBXBK/PIBFeGkaOGo30Ov57iQqYRwAWNDM5vyLPZYmAIpPa5QSw==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.10.0.tgz", + "integrity": "sha512-fxxKXoicjdXNUMY7LIdY89tkJJJ0m1Oo8PQutZ5rLgWbV5QVKI15Cn7+/IHnRTd3vfKfiwBx6SBqlorAuNA8LA==", "dev": true, "requires": { "acorn": "5.2.1", diff --git a/package.json b/package.json index 106c89b9..c7c816ad 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "node": ">=8.2.0" }, "devDependencies": { - "autoprefixer": "^7.2.1", + "autoprefixer": "^7.2.3", "babel-core": "^6.26.0", "babel-loader": "^7.1.2", "babel-plugin-yo-yoify": "^1.0.2", @@ -52,18 +52,18 @@ "babel-preset-es2015": "^6.24.1", "babel-preset-stage-2": "^6.24.1", "base64-js": "^1.2.1", - "copy-webpack-plugin": "^4.2.3", + "copy-webpack-plugin": "^4.3.0", "cross-env": "^5.1.1", "css-loader": "^0.28.7", "css-mqpacker": "^6.0.1", "cssnano": "^3.10.0", - "eslint": "^4.12.0", + "eslint": "^4.13.1", "eslint-plugin-mocha": "^4.11.0", "eslint-plugin-node": "^5.2.1", "eslint-plugin-security": "^1.4.0", "expose-loader": "^0.7.4", "extract-loader": "^1.0.1", - "file-loader": "^1.1.5", + "file-loader": "^1.1.6", "fluent-intl-polyfill": "^0.1.0", "git-rev-sync": "^1.9.1", "github-changes": "^1.1.1", @@ -74,27 +74,27 @@ "nanobus": "^4.3.1", "npm-run-all": "^4.1.2", "postcss-loader": "^2.0.9", - "prettier": "^1.8.2", + "prettier": "^1.9.2", "proxyquire": "^1.8.0", - "raven-js": "^3.20.1", + "raven-js": "^3.21.0", "redis-mock": "^0.20.0", "require-from-string": "^2.0.1", "rimraf": "^2.6.2", "selenium-webdriver": "^3.6.0", - "sinon": "^4.1.2", + "sinon": "^4.1.3", "string-hash": "^1.1.3", "stylelint-config-standard": "^17.0.0", "stylelint-no-unsupported-browser-features": "^1.0.1", "supertest": "^3.0.0", "testpilot-ga": "^0.3.0", "val-loader": "^1.1.0", - "webpack": "^3.8.1", + "webpack": "^3.10.0", "webpack-dev-server": "2.9.1", "webpack-manifest-plugin": "^1.3.2", "webpack-unassert-loader": "^1.2.0" }, "dependencies": { - "aws-sdk": "^2.162.0", + "aws-sdk": "^2.171.0", "body-parser": "^1.18.2", "choo": "^6.6.0", "cldr-core": "^32.0.0", @@ -106,7 +106,7 @@ "helmet": "^3.9.0", "mkdirp": "^0.5.1", "mozlog": "^2.2.0", - "raven": "^2.2.1", + "raven": "^2.3.0", "redis": "^2.8.0" }, "availableLanguages": [ From 265f99f327a3004bc41f9dc14587141a4a219d65 Mon Sep 17 00:00:00 2001 From: Soumya Himanish Mohapatra Date: Thu, 21 Dec 2017 17:46:01 +0530 Subject: [PATCH 113/251] adjusted line height of label --- assets/main.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/main.css b/assets/main.css index b188b92a..a3607d88 100644 --- a/assets/main.css +++ b/assets/main.css @@ -940,7 +940,7 @@ tbody { } #addPasswordWrapper label { - line-height: 20px; + line-height: 23px; cursor: pointer; color: #737373; } From 417ad87bccf8a7bb535a1e9bec6004c24f49fd03 Mon Sep 17 00:00:00 2001 From: tiagomoraismorgado Date: Thu, 21 Dec 2017 15:35:44 +0000 Subject: [PATCH 114/251] [Docs] - README.md - minor spelling fixes [Docs] - README.md - minor spelling fixes --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c9ac6f68..63f2ff6e 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ The server is configured with environment variables. See [server/config.js](serv ## Localization -Firefox Send localization is managed via [Pontoon](https://pontoon.mozilla.org/projects/test-pilot-firefox-send/), not direct pull requests to the repository. If you want to fix a typo, add a new language, or simply know more about localization, please get in touch with the [existing localization team](https://pontoon.mozilla.org/teams/) for your language, or Mozilla’s [l10n-drivers](https://wiki.mozilla.org/L10n:Mozilla_Team#Mozilla_Corporation) for guidance. +Firefox Send localization is managed via [Pontoon](https://pontoon.mozilla.org/projects/test-pilot-firefox-send/), not direct pull requests to the repository. If you want to fix a typo, add a new language, or simply know more about localization, please get in touch with the [existing localization team](https://pontoon.mozilla.org/teams/) for your language or Mozilla’s [l10n-drivers](https://wiki.mozilla.org/L10n:Mozilla_Team#Mozilla_Corporation) for guidance. --- From ff9a107a299e3978e05bbe25ace66cddac07e80e Mon Sep 17 00:00:00 2001 From: ehuggett Date: Thu, 21 Dec 2017 15:54:19 +0000 Subject: [PATCH 115/251] API changes to accommodate 3rd party clients --- server/routes/exists.js | 7 +++++-- server/routes/metadata.js | 2 ++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/server/routes/exists.js b/server/routes/exists.js index e22bf21f..fa683e0d 100644 --- a/server/routes/exists.js +++ b/server/routes/exists.js @@ -11,8 +11,11 @@ module.exports = async (req, res) => { } try { - await storage.exists(id); - res.sendStatus(200); + const meta = await storage.metadata(id); + res.set('WWW-Authenticate', `send-v1 ${meta.nonce}`); + res.send({ + password: meta.pwd + }); } catch (e) { res.sendStatus(404); } diff --git a/server/routes/metadata.js b/server/routes/metadata.js index 558e6a7b..6bf75071 100644 --- a/server/routes/metadata.js +++ b/server/routes/metadata.js @@ -29,6 +29,8 @@ module.exports = async function(req, res) { const ttl = await storage.ttl(id); res.send({ metadata: meta.metadata, + dtotal: meta.dl, + dlimit: meta.dlimit, size, ttl }); From 6f27c6e4aa41fc065c5e014ddb7028dc9080068f Mon Sep 17 00:00:00 2001 From: Thomas Dalichow <2012-02-05.github.com@thomasdalichow.de> Date: Thu, 21 Dec 2017 22:10:42 +0100 Subject: [PATCH 116/251] Change default bind address to 0.0.0.0 --- server/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/config.js b/server/config.js index 7f4b2d03..4bad58d8 100644 --- a/server/config.js +++ b/server/config.js @@ -16,7 +16,7 @@ const conf = convict({ }, listen_address: { format: 'ipaddress', - default: '127.0.0.1', + default: '0.0.0.0', env: 'IP_ADDRESS' }, listen_port: { From ebbf06787c969cae2cf59fa295b12d148b7f5dd7 Mon Sep 17 00:00:00 2001 From: ehuggett Date: Sat, 23 Dec 2017 05:09:06 +0000 Subject: [PATCH 117/251] changes requested in review --- server/routes/exists.js | 2 +- server/routes/metadata.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/server/routes/exists.js b/server/routes/exists.js index fa683e0d..4268e673 100644 --- a/server/routes/exists.js +++ b/server/routes/exists.js @@ -14,7 +14,7 @@ module.exports = async (req, res) => { const meta = await storage.metadata(id); res.set('WWW-Authenticate', `send-v1 ${meta.nonce}`); res.send({ - password: meta.pwd + password: meta.pwd !== '0' }); } catch (e) { res.sendStatus(404); diff --git a/server/routes/metadata.js b/server/routes/metadata.js index 6bf75071..60e38c58 100644 --- a/server/routes/metadata.js +++ b/server/routes/metadata.js @@ -29,8 +29,8 @@ module.exports = async function(req, res) { const ttl = await storage.ttl(id); res.send({ metadata: meta.metadata, - dtotal: meta.dl, - dlimit: meta.dlimit, + dtotal: +meta.dl, + dlimit: +meta.dlimit, size, ttl }); From 9972196f700ed9914ada3fddca0d811090d2b7ac Mon Sep 17 00:00:00 2001 From: Soumya Himanish Mohapatra Date: Sat, 23 Dec 2017 11:49:15 +0530 Subject: [PATCH 118/251] checkbox now has a hover effect --- assets/main.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/assets/main.css b/assets/main.css index a3607d88..e316b48b 100644 --- a/assets/main.css +++ b/assets/main.css @@ -939,6 +939,10 @@ tbody { visibility: collapse; } +#addPasswordWrapper:hover label::before { + border: 1px solid #0297f8; +} + #addPasswordWrapper label { line-height: 23px; cursor: pointer; From f08dd5960b7280403eac3baa7ee69b605ae4d6dd Mon Sep 17 00:00:00 2001 From: Jim Spentzos Date: Sat, 23 Dec 2017 15:51:52 +0000 Subject: [PATCH 119/251] Pontoon: Update Greek (el) localization of Test Pilot: Firefox Send Localization authors: - Jim Spentzos --- public/locales/el/send.ftl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/el/send.ftl b/public/locales/el/send.ftl index 7bc78726..51040d0f 100644 --- a/public/locales/el/send.ftl +++ b/public/locales/el/send.ftl @@ -25,6 +25,11 @@ uploadingFileNotification = Ειδοποίηση όταν ολοκληρωθεί uploadSuccessConfirmHeader = Έτοιμο για αποστολή uploadSvgAlt = Μεταφόρτωση uploadSuccessTimingHeader = Ο σύνδεσμος του αρχείου σας θα λήξει έπειτα από 1 λήψη ή 24 ώρες. +expireInfo = Ο σύνδεσμος για το αρχείο σας θα λήξει μετά από { $downloadCount } ή { $timespan }. +downloadCount = { $num -> + [one] 1 λήψη + *[other] { $num } λήψεις + } timespanHours = { $num -> [one] 1 ώρα *[other] { $num } ώρες @@ -93,3 +98,4 @@ addPasswordButton = Προσθήκη κωδικού πρόσβασης passwordTryAgain = Λάθος κωδικός πρόσβασης. Δοκιμάστε ξανά. // This label is followed by the password needed to download a file passwordResult = Κωδικός πρόσβασης: { $password } +reportIPInfringement = Αναφορά παραβίασης IP From 3b7462070b3e5e15639c3ef6f37cc95a87a54fa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Esteban=20Ajsivinac=20Si=C3=A1n?= Date: Sun, 31 Dec 2017 01:11:37 +0000 Subject: [PATCH 120/251] Pontoon: Update Kaqchikel (cak) localization of Test Pilot: Firefox Send MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Localization authors: - Juan Esteban Ajsivinac Sián --- public/locales/cak/send.ftl | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/public/locales/cak/send.ftl b/public/locales/cak/send.ftl index 47a9906b..9f0e30f4 100644 --- a/public/locales/cak/send.ftl +++ b/public/locales/cak/send.ftl @@ -25,6 +25,15 @@ uploadingFileNotification = Tiya' pe rutzijol chwe toq xtitz'aqät rujotob'axik. uploadSuccessConfirmHeader = Ütz chik richin Nitaq uploadSvgAlt = Tijotob'äx uploadSuccessTimingHeader = Ri ruximonel yakb'äl xtik'is ruq'ijul toq xtiqasäx jumul o pa 24 ramaj. +expireInfo = Ri ruximöy ayakb'al xtik'is ruq'ijul chi rij ri { $downloadCount } o { $timespan }. +downloadCount = { $num -> + [one] 1 qasanïk + *[other] { $num } taq qasanïk + } +timespanHours = { $num -> + [one] 1 ramaj + *[other] { $num } taq ramaj + } copyUrlFormLabelWithName = Tiwachib'ëx chuqa' tikomonïx ri ximonel richin nitaq ri ayakb'äl: { $filename } copyUrlFormButton = Tiwachib'ëx pa molwuj copiedUrl = ¡Xwachib'ëx! @@ -89,3 +98,4 @@ addPasswordButton = Titz'aqatisäx Ewan Tzij passwordTryAgain = Itzel ri ewan tzij. Tatojtob'ej chik. // This label is followed by the password needed to download a file passwordResult = Ewan tzij: { $password } +reportIPInfringement = Tiya' rutzijol ri Ritzelanik Ajna'oj Ichinil From 96a9b52e6dfe564d7a024325d4bbf128124f23b9 Mon Sep 17 00:00:00 2001 From: jspam Date: Sun, 31 Dec 2017 12:09:57 +0100 Subject: [PATCH 121/251] README: Fix query link for "good first bugs" --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 63f2ff6e..0e6e2d88 100644 --- a/README.md +++ b/README.md @@ -75,7 +75,7 @@ Firefox Send localization is managed via [Pontoon](https://pontoon.mozilla.org/p ## Contributing -Pull requests are always welcome! Feel free to check out the list of ["good first bugs"](https://github.com/mozilla/send/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+bug%22). +Pull requests are always welcome! Feel free to check out the list of ["good first issues"](https://github.com/mozilla/send/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22). --- From 797cfcb98de29104eedbd4b0811d5779a0155d10 Mon Sep 17 00:00:00 2001 From: Emin Mastizada Date: Mon, 1 Jan 2018 06:34:36 +0000 Subject: [PATCH 122/251] Pontoon: Update Azerbaijani (az) localization of Test Pilot: Firefox Send Localization authors: - Emin Mastizada --- public/locales/az/send.ftl | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/az/send.ftl b/public/locales/az/send.ftl index a1e0f716..195632cc 100644 --- a/public/locales/az/send.ftl +++ b/public/locales/az/send.ftl @@ -25,6 +25,15 @@ uploadingFileNotification = Yükləmə bitdiyində xəbər ver. uploadSuccessConfirmHeader = Göndərməyə hazır uploadSvgAlt = Yüklə uploadSuccessTimingHeader = Faylınızın keçidinin 1 endirmədən və ya 24 saatdan sonra vaxtı çıxacaq. +expireInfo = Faylınız üçün keçidin vaxtı { $downloadCount } sonra və ya { $timespan } tarixində keçəcək. +downloadCount = { $num -> + [one] 1 endirmə + *[other] { $num } endirmə + } +timespanHours = { $num -> + [one] 1 saat + *[other] { $num } saat + } copyUrlFormLabelWithName = Faylınızı göndərmək üçün keçidi köçürün: { $filename } copyUrlFormButton = Buferə köçür copiedUrl = Köçürüldü! @@ -86,3 +95,7 @@ footerLinkTerms = Şərtlər footerLinkCookies = Çərəzlər requirePasswordCheckbox = Bu faylı endirmək üçün parol tələb et addPasswordButton = Parol əlavə et +passwordTryAgain = Səhv parol. Təkrar yoxlayın. +// This label is followed by the password needed to download a file +passwordResult = Parol: { $password } +reportIPInfringement = Əqli-mülkiyyət pozuntusu bildir From 27cfd04ea74ba7fbd6b2324e5a6f4d63fb533aa1 Mon Sep 17 00:00:00 2001 From: eljuno Date: Wed, 3 Jan 2018 07:51:07 +0000 Subject: [PATCH 123/251] Pontoon: Update Indonesian (id) localization of Test Pilot: Firefox Send Localization authors: - eljuno --- public/locales/id/send.ftl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/public/locales/id/send.ftl b/public/locales/id/send.ftl index e16b973c..d12cdd73 100644 --- a/public/locales/id/send.ftl +++ b/public/locales/id/send.ftl @@ -26,6 +26,7 @@ uploadingFileNotification = Beri tahu saya ketika unggahan telah selesai. uploadSuccessConfirmHeader = Siap untuk Dikirim uploadSvgAlt = Unggah uploadSuccessTimingHeader = Tautan ke berkas Anda akan berakhir setelah 1 unduhan atau dalam 24 jam. +expireInfo = Tautan ke berkas Anda akan kedaluwarsa setelah { $downloadCount } atau { $timespan }. copyUrlFormLabelWithName = Salin dan bagikan tautan untuk mengirim berkas Anda: { $filename } copyUrlFormButton = Salin ke papan klip copiedUrl = Tersalin! @@ -86,3 +87,6 @@ footerLinkTerms = Ketentuan footerLinkCookies = Kuki requirePasswordCheckbox = Membutuhkan sandi untuk mengunduh berkas ini addPasswordButton = Tambahkan Sandi +passwordTryAgain = Sandi salah. Silakan coba lagi. +// This label is followed by the password needed to download a file +passwordResult = Sandi: { $password } From 46f641aaec4d3fae636fdcbf0229e781a34e24e2 Mon Sep 17 00:00:00 2001 From: Danny Coates Date: Fri, 5 Jan 2018 13:42:19 -0800 Subject: [PATCH 124/251] Added docs/takedowns.md for DMCA removal instructions --- docs/takedowns.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 docs/takedowns.md diff --git a/docs/takedowns.md b/docs/takedowns.md new file mode 100644 index 00000000..5e215029 --- /dev/null +++ b/docs/takedowns.md @@ -0,0 +1,17 @@ +## Take-down process + +In cases of a DMCA notice, or other abuse yet to be determined, a file has to be removed from the service. + +Files can be delisted and made inaccessible by removing their record from Redis. + +Send share links contain the id of the file, for example `https://send.firefox.com/download/3d9d2bb9a1` + +From a host with access to the Redis server run a `DEL` command with the file id. + +For example: + +```sh +redis-cli DEL 3d9d2bb9a1 +``` + +Other redis-cli parameters like `-h` may also be required. See [redis-cli docs](https://redis.io/topics/rediscli) for more info. \ No newline at end of file From 843431272820a237b1f1376ccdb5ed1a194b666e Mon Sep 17 00:00:00 2001 From: shikhar-scs Date: Thu, 21 Dec 2017 15:17:31 +0530 Subject: [PATCH 125/251] Toggleable Password MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changed * to ● --- app/templates/share.js | 18 +++++++++++++++++- app/templates/uploadPassword.js | 5 ++--- assets/main.css | 12 ++++++++++++ 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/app/templates/share.js b/app/templates/share.js index e86d18e0..ce6d8774 100644 --- a/app/templates/share.js +++ b/app/templates/share.js @@ -11,7 +11,23 @@ function passwordComplete(state, password) { password: '
'
     })}`
   ]);
-  el.lastElementChild.textContent = password;
+  const displayPassword = [];
+  for (let i = 0; i < password.length; i++) {
+    displayPassword[i] = '●';
+  }
+
+  const passwordOriginal = document.createElement('div');
+  passwordOriginal.className = 'passwordOriginal';
+  passwordOriginal.innerText = password;
+
+  const passwordStar = document.createElement('div');
+  passwordStar.className = 'passwordStar';
+  passwordStar.innerText = displayPassword
+    .toString()
+    .split(',')
+    .join('');
+  el.lastElementChild.appendChild(passwordOriginal);
+  el.lastElementChild.appendChild(passwordStar);
   return el;
 }
 
diff --git a/app/templates/uploadPassword.js b/app/templates/uploadPassword.js
index e84ebbb7..0df27f05 100644
--- a/app/templates/uploadPassword.js
+++ b/app/templates/uploadPassword.js
@@ -5,9 +5,7 @@ module.exports = function(state, emit) {
   const div = html`
   
- +
@@ -17,6 +15,7 @@ module.exports = function(state, emit) { maxlength="64" autocomplete="off" placeholder="${state.translate('unlockInputPlaceholder')}" + type="password" oninput=${inputChanged}/> Date: Thu, 21 Dec 2017 15:17:31 +0530 Subject: [PATCH 126/251] changed font to sans serif improved font family font changes --- assets/main.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/main.css b/assets/main.css index b188b92a..0d0e6605 100644 --- a/assets/main.css +++ b/assets/main.css @@ -725,7 +725,7 @@ tbody { cursor: pointer; border: 0; box-shadow: 0 5px 3px rgb(234, 234, 234); - font-family: 'Fira Sans'; + font-family: 'Fira Sans', 'segoe ui', sans-serif; font-weight: 500; color: #fff; font-size: 26px; @@ -742,7 +742,7 @@ tbody { } .unsupported-button-text > span { - font-family: 'Fira Sans'; + font-family: 'Fira Sans', 'segoe ui', sans-serif; font-weight: 300; font-size: 18px; letter-spacing: -0.69px; From fe16f24c41d4746004ed55d346a04a90b45e97b8 Mon Sep 17 00:00:00 2001 From: eljuno Date: Sat, 6 Jan 2018 04:32:11 +0000 Subject: [PATCH 127/251] Pontoon: Update Indonesian (id) localization of Test Pilot: Firefox Send Localization authors: - eljuno --- public/locales/id/send.ftl | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/public/locales/id/send.ftl b/public/locales/id/send.ftl index d12cdd73..1190bc63 100644 --- a/public/locales/id/send.ftl +++ b/public/locales/id/send.ftl @@ -27,6 +27,12 @@ uploadSuccessConfirmHeader = Siap untuk Dikirim uploadSvgAlt = Unggah uploadSuccessTimingHeader = Tautan ke berkas Anda akan berakhir setelah 1 unduhan atau dalam 24 jam. expireInfo = Tautan ke berkas Anda akan kedaluwarsa setelah { $downloadCount } atau { $timespan }. +downloadCount = { $num -> + *[other] { $number } unduhan + } +timespanHours = { $num -> + *[other] { $number } jam + } copyUrlFormLabelWithName = Salin dan bagikan tautan untuk mengirim berkas Anda: { $filename } copyUrlFormButton = Salin ke papan klip copiedUrl = Tersalin! @@ -38,6 +44,7 @@ downloadFileName = Unduh { $filename } downloadFileSize = ({ $size }) unlockInputLabel = Masukkan Sandi unlockInputPlaceholder = Sandi +unlockButtonLabel = Buka downloadFileTitle = Unduh Berkas Terenkripsi // Firefox Send is a brand name and should not be localized. downloadMessage = Teman Anda mengirimkan berkas dengan Firefox Send, layanan yang memungkinkan Anda berbagi berkas dengan tautan yang aman, pribadi, dan terenkripsi yang secara otomatis berakhir untuk memastikan berkas Anda tidak daring selamanya. @@ -90,3 +97,4 @@ addPasswordButton = Tambahkan Sandi passwordTryAgain = Sandi salah. Silakan coba lagi. // This label is followed by the password needed to download a file passwordResult = Sandi: { $password } +reportIPInfringement = Laporkan Pelanggaran IP From 4255cbe5408303841f8541f2a7ce5cf026afc1de Mon Sep 17 00:00:00 2001 From: Khaled Hosny Date: Sun, 7 Jan 2018 16:31:44 +0000 Subject: [PATCH 128/251] Pontoon: Update Arabic (ar) localization of Test Pilot: Firefox Send Localization authors: - Khaled Hosny --- public/locales/ar/send.ftl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/public/locales/ar/send.ftl b/public/locales/ar/send.ftl index cc73c879..bf12f72d 100644 --- a/public/locales/ar/send.ftl +++ b/public/locales/ar/send.ftl @@ -97,6 +97,8 @@ expiryFileList = ينتهي في deleteFileList = احذف nevermindButton = لا بأس legalHeader = الشروط والخصوصية +legalNoticeTestPilot = «فَيَرفُكس سِنْد» جزء من اختبار تجريبي حاليًا و يخضع لبنود خدمة الاختبار التجريبي و تنويه الخصوصية. يمكنك التعرف على مزيد من المعلومات حول هذه التجربة وجمع البياناتهنا. +legalNoticeMozilla = يخضع استخدام موقع «فَيَرفُكس سِنْد» إلىتنويه خصوصية المواقع و بنود خدمة المواقع. deletePopupText = أأحذف هذا الملف؟ deletePopupYes = نعم deletePopupCancel = ألغِ From 24ee984a2e9996a7e4522a1648c9d949568054d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kerim=20Kalamuji=C4=87?= Date: Mon, 8 Jan 2018 07:12:23 +0000 Subject: [PATCH 129/251] Pontoon: Update Bosnian (bs) localization of Test Pilot: Firefox Send MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Localization authors: - Kerim Kalamujić --- public/locales/bs/send.ftl | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/bs/send.ftl b/public/locales/bs/send.ftl index 6b81ff82..20c3cc83 100644 --- a/public/locales/bs/send.ftl +++ b/public/locales/bs/send.ftl @@ -31,6 +31,11 @@ downloadCount = { $num -> [few] { $num } preuzimanja *[other] { $num } preuzimanja } +timespanHours = { $num -> + [one] 1 sat + [few] { $num } sata + *[other] { $num } sati + } copyUrlFormLabelWithName = Iskopirajte i podijelite vezu da biste poslali datoteku: { $filename } copyUrlFormButton = Kopiraj u međuspremnik copiedUrl = Kopirano! From 9f162c0703c9bae4d82d4d25701f3dcf208127ad Mon Sep 17 00:00:00 2001 From: Soumya Himanish Mohapatra Date: Sat, 23 Dec 2017 08:50:19 +0530 Subject: [PATCH 130/251] Popup attached for delete Button --- app/templates/share.js | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/app/templates/share.js b/app/templates/share.js index abf5d018..24a204e9 100644 --- a/app/templates/share.js +++ b/app/templates/share.js @@ -65,7 +65,23 @@ module.exports = function(state, emit) { + onclick=${showPopup}>${state.translate('deleteFileButton')} + + `; + function showPopup() { + const popupText = document.querySelector('.popuptext'); + popupText.classList.add('show'); + } + + function cancel(e) { + e.stopPropagation(); + const popupText = e.target.parentElement.parentElement; + popupText.classList.remove('show'); + } + async function sendNew(e) { e.preventDefault(); await fadeOut('share-link'); From aedfba795ed62acd1dd7b5092733e3485fcfb527 Mon Sep 17 00:00:00 2001 From: Danny Coates Date: Mon, 8 Jan 2018 11:20:28 -0800 Subject: [PATCH 131/251] updated takedowns.md to add S3 info --- docs/takedowns.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/takedowns.md b/docs/takedowns.md index 5e215029..da09c2ee 100644 --- a/docs/takedowns.md +++ b/docs/takedowns.md @@ -4,7 +4,7 @@ In cases of a DMCA notice, or other abuse yet to be determined, a file has to be Files can be delisted and made inaccessible by removing their record from Redis. -Send share links contain the id of the file, for example `https://send.firefox.com/download/3d9d2bb9a1` +Send share links contain the `id` of the file, for example `https://send.firefox.com/download/3d9d2bb9a1` From a host with access to the Redis server run a `DEL` command with the file id. @@ -14,4 +14,6 @@ For example: redis-cli DEL 3d9d2bb9a1 ``` -Other redis-cli parameters like `-h` may also be required. See [redis-cli docs](https://redis.io/topics/rediscli) for more info. \ No newline at end of file +Other redis-cli parameters like `-h` may also be required. See [redis-cli docs](https://redis.io/topics/rediscli) for more info. + +The encrypted file resides on S3 as the same `id` under the bucket that the app was configured with as `S3_BUCKET`. The file can be managed if it has not already expired with the [AWS cli](https://docs.aws.amazon.com/cli/latest/reference/s3/index.html) or AWS web console. \ No newline at end of file From 9501c1ce4b24c7722dfd974a7ce5eceec27152f8 Mon Sep 17 00:00:00 2001 From: shikhar-scs Date: Thu, 21 Dec 2017 15:17:31 +0530 Subject: [PATCH 132/251] checking for file size > 2GB included global MAXFILESIZE --- .gitignore | 1 + app/templates/welcome.js | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index f06235c4..82ee25a1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules dist +.idea diff --git a/app/templates/welcome.js b/app/templates/welcome.js index 100181c4..d62038c7 100644 --- a/app/templates/welcome.js +++ b/app/templates/welcome.js @@ -1,7 +1,8 @@ +/* global MAXFILESIZE */ const html = require('choo/html'); const assets = require('../../common/assets'); const fileList = require('./fileList'); -const { fadeOut } = require('../utils'); +const { bytes, fadeOut } = require('../utils'); module.exports = function(state, emit) { const div = html` @@ -64,6 +65,11 @@ module.exports = function(state, emit) { if (file.size === 0) { return; } + if (file.size > MAXFILESIZE) { + window.alert(state.translate('fileTooBig', { size: bytes(MAXFILESIZE) })); + return; + } + await fadeOut('page-one'); emit('upload', { file, type: 'click' }); } From 910cde4380ce7f28a7cb26af507adbe5d2fc5420 Mon Sep 17 00:00:00 2001 From: Soumya Himanish Mohapatra Date: Tue, 9 Jan 2018 20:56:27 +0530 Subject: [PATCH 133/251] Popup for delete button attached --- app/templates/share.js | 33 +++++++++++++++++---------------- assets/main.css | 5 +++++ 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/app/templates/share.js b/app/templates/share.js index a0921b66..7c8c01fc 100644 --- a/app/templates/share.js +++ b/app/templates/share.js @@ -82,22 +82,23 @@ module.exports = function(state, emit) { class="btn" title="${state.translate('deleteFileButton')}" onclick=${showPopup}>${state.translate('deleteFileButton')} - + Date: Tue, 9 Jan 2018 11:20:36 -0800 Subject: [PATCH 134/251] tweaked delete popup --- app/templates/share.js | 1 + assets/main.css | 2 ++ 2 files changed, 3 insertions(+) diff --git a/app/templates/share.js b/app/templates/share.js index 7c8c01fc..4191287f 100644 --- a/app/templates/share.js +++ b/app/templates/share.js @@ -110,6 +110,7 @@ module.exports = function(state, emit) { function showPopup() { const popupText = document.querySelector('.popuptext'); popupText.classList.add('show'); + popupText.focus(); } function cancel(e) { diff --git a/assets/main.css b/assets/main.css index cca46b88..0ae4621b 100644 --- a/assets/main.css +++ b/assets/main.css @@ -416,6 +416,8 @@ tbody { border-radius: 0 0 5px; border-right: 1px solid #d7d7db; border-bottom: 1px solid #d7d7db; + border-left: 1px solid #fff; + border-top: 1px solid #fff; } .popup .show { From bac1cc824321421242d23cd8310de46cd6180db8 Mon Sep 17 00:00:00 2001 From: Jordi Serratosa Date: Tue, 9 Jan 2018 20:12:02 +0000 Subject: [PATCH 135/251] Pontoon: Update Catalan (ca) localization of Test Pilot: Firefox Send Localization authors: - Jordi Serratosa --- public/locales/ca/send.ftl | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/ca/send.ftl b/public/locales/ca/send.ftl index b5dac5f2..042dde37 100644 --- a/public/locales/ca/send.ftl +++ b/public/locales/ca/send.ftl @@ -25,6 +25,14 @@ uploadingFileNotification = Notifica'm quan s'acabi de pujar. uploadSuccessConfirmHeader = Llest per enviar uploadSvgAlt = Puja uploadSuccessTimingHeader = L'enllaç al fitxer caducarà quan es baixi una vegada o d'aquí 24 hores. +downloadCount = { $num -> + [one] 1 baixada + *[other] { $num } baixades + } +timespanHours = { $num -> + [one] 1 hora + *[other] { $num } hores + } copyUrlFormLabelWithName = Copieu l'enllaç i compartiu-lo per enviar el fitxer: { $filename } copyUrlFormButton = Copia al porta-retalls copiedUrl = Copiat! @@ -34,6 +42,7 @@ sendAnotherFileLink = Envieu un altre fitxer downloadAltText = Baixa downloadFileName = Baixeu { $filename } downloadFileSize = ({ $size }) +unlockInputLabel = Introduïu la contrasenya // Firefox Send is a brand name and should not be localized. downloadMessage = Un amic us ha enviat un fitxer amb el Firefox Send, un servei que permet compartir fitxers mitjançant un enllaç segur, privat i xifrat que caduca automàticament per tal que les vostres dades no es conservin a Internet per sempre. // Text and title used on the download link/button (indicates an action). From 99097baf9dad60eb35468b390cdfab7d83bf9bcd Mon Sep 17 00:00:00 2001 From: Jordi Serratosa Date: Tue, 9 Jan 2018 20:32:28 +0000 Subject: [PATCH 136/251] Pontoon: Update Catalan (ca) localization of Test Pilot: Firefox Send Localization authors: - Jordi Serratosa --- public/locales/ca/send.ftl | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/public/locales/ca/send.ftl b/public/locales/ca/send.ftl index 042dde37..1888b5bb 100644 --- a/public/locales/ca/send.ftl +++ b/public/locales/ca/send.ftl @@ -25,6 +25,7 @@ uploadingFileNotification = Notifica'm quan s'acabi de pujar. uploadSuccessConfirmHeader = Llest per enviar uploadSvgAlt = Puja uploadSuccessTimingHeader = L'enllaç al fitxer caducarà quan es baixi una vegada o d'aquí 24 hores. +expireInfo = L'enllaç al fitxer caducarà en fer { $downloadCount } o d'aquí { $timespan }. downloadCount = { $num -> [one] 1 baixada *[other] { $num } baixades @@ -43,6 +44,9 @@ downloadAltText = Baixa downloadFileName = Baixeu { $filename } downloadFileSize = ({ $size }) unlockInputLabel = Introduïu la contrasenya +unlockInputPlaceholder = Contrasenya +unlockButtonLabel = Desbloca +downloadFileTitle = Baixa el fitxer xifrat // Firefox Send is a brand name and should not be localized. downloadMessage = Un amic us ha enviat un fitxer amb el Firefox Send, un servei que permet compartir fitxers mitjançant un enllaç segur, privat i xifrat que caduca automàticament per tal que les vostres dades no es conservin a Internet per sempre. // Text and title used on the download link/button (indicates an action). @@ -89,3 +93,9 @@ footerLinkAbout = Quant al Test Pilot footerLinkPrivacy = Privadesa footerLinkTerms = Condicions d'ús footerLinkCookies = Galetes +requirePasswordCheckbox = Sol·licita una contrasenya per baixar aquest fitxer +addPasswordButton = Afegeix una contrasenya +passwordTryAgain = La contrasenya és incorrecta. Torneu-ho a provar. +// This label is followed by the password needed to download a file +passwordResult = Contrasenya: { $password } +reportIPInfringement = Denuncieu una infracció de propietat intel·lectual From 1741b1c6866496e02c8ec4ccf11290e3ca069dc8 Mon Sep 17 00:00:00 2001 From: Danny Coates Date: Wed, 10 Jan 2018 10:02:14 -0800 Subject: [PATCH 137/251] use monospace font for password display --- app/templates/share.js | 10 +--------- assets/main.css | 1 + 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/app/templates/share.js b/app/templates/share.js index 4191287f..622d7f90 100644 --- a/app/templates/share.js +++ b/app/templates/share.js @@ -12,21 +12,13 @@ function passwordComplete(state, password) { password: '
'
     })}
` ]); - const displayPassword = []; - for (let i = 0; i < password.length; i++) { - displayPassword[i] = '●'; - } - const passwordOriginal = document.createElement('div'); passwordOriginal.className = 'passwordOriginal'; passwordOriginal.innerText = password; const passwordStar = document.createElement('div'); passwordStar.className = 'passwordStar'; - passwordStar.innerText = displayPassword - .toString() - .split(',') - .join(''); + passwordStar.innerText = password.replace(/./g, '●'); el.lastElementChild.appendChild(passwordOriginal); el.lastElementChild.appendChild(passwordStar); return el; diff --git a/assets/main.css b/assets/main.css index 0ae4621b..7b3a6c20 100644 --- a/assets/main.css +++ b/assets/main.css @@ -146,6 +146,7 @@ button { } pre { + font-family: monospace; font-weight: 600; display: inline-block; } From 87110095a0d21f199e06decab2c63b1f7861a0df Mon Sep 17 00:00:00 2001 From: shikhar-scs Date: Thu, 11 Jan 2018 08:57:00 +0530 Subject: [PATCH 138/251] improved popup for mobile display --- assets/main.css | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/assets/main.css b/assets/main.css index 7b3a6c20..3048c86d 100644 --- a/assets/main.css +++ b/assets/main.css @@ -1181,4 +1181,12 @@ tbody { font-size: 13px; padding: 17px 5px 0; } + + .popup .popuptext::after { + left: 125px; + } + + #deletePopup { + left: 83px; + } } From bace117ada440e14a40c22f070ae40a1b85ab803 Mon Sep 17 00:00:00 2001 From: Danny Coates Date: Thu, 11 Jan 2018 23:20:56 -0800 Subject: [PATCH 139/251] fixed error on metadata 404 --- app/fileReceiver.js | 7 ++++++- app/templates/preview.js | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/app/fileReceiver.js b/app/fileReceiver.js index 4fc742ac..0766f71e 100644 --- a/app/fileReceiver.js +++ b/app/fileReceiver.js @@ -6,7 +6,7 @@ export default class FileReceiver extends Nanobus { super('FileReceiver'); this.secretKeyPromise = window.crypto.subtle.importKey( 'raw', - b64ToArray(file.key), + b64ToArray(file.secretKey), 'HKDF', false, ['deriveKey'] @@ -122,6 +122,9 @@ export default class FileReceiver extends Nanobus { const xhr = new XMLHttpRequest(); xhr.onreadystatechange = () => { if (xhr.readyState === XMLHttpRequest.DONE) { + if (xhr.status === 404) { + return reject(new Error(xhr.status)); + } const nonce = xhr.getResponseHeader('WWW-Authenticate').split(' ')[1]; this.file.nonce = nonce; if (xhr.status === 200) { @@ -172,6 +175,8 @@ export default class FileReceiver extends Nanobus { this.file.iv = meta.iv; this.file.size = data.size; this.file.ttl = data.ttl; + this.file.dlimit = data.dlimit; + this.file.dtotal = data.dtotal; this.state = 'ready'; } catch (e) { this.state = 'invalid'; diff --git a/app/templates/preview.js b/app/templates/preview.js index e5485a8e..63b1ae2a 100644 --- a/app/templates/preview.js +++ b/app/templates/preview.js @@ -21,7 +21,7 @@ module.exports = function(state, emit) { return notFound(state, emit); } state.fileInfo.id = state.params.id; - state.fileInfo.key = state.params.key; + state.fileInfo.secretKey = state.params.key; const fileInfo = state.fileInfo; const size = fileInfo.size ? state.translate('downloadFileSize', { size: bytes(fileInfo.size) }) From 6489ab6a56fb1386922f3258b0b0c1d82f52a628 Mon Sep 17 00:00:00 2001 From: Soumya Himanish Mohapatra Date: Fri, 12 Jan 2018 10:52:11 +0530 Subject: [PATCH 140/251] Restricted the banner from showing on unsupported browsers --- app/routes/index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/routes/index.js b/app/routes/index.js index 7cdd83d9..4bf6a55a 100644 --- a/app/routes/index.js +++ b/app/routes/index.js @@ -7,10 +7,14 @@ const fxPromo = require('../templates/fxPromo'); const app = choo(); +function showBanner(state) { + return state.promo && !state.route.startsWith('/unsupported/'); +} + function body(template) { return function(state, emit) { const b = html` - ${state.promo ? fxPromo(state, emit) : ''} + ${showBanner(state) ? fxPromo(state, emit) : ''} ${header(state)}
-
From 55ed6100e0d84d265f6615b8977823bded33d20e Mon Sep 17 00:00:00 2001 From: Danny Coates Date: Tue, 16 Jan 2018 13:52:09 -0800 Subject: [PATCH 142/251] fixes #675. progress on ios --- app/templates/download.js | 36 ++++++++++++++++++++---------------- app/templates/upload.js | 36 +++++++++++++++++++----------------- 2 files changed, 39 insertions(+), 33 deletions(-) diff --git a/app/templates/download.js b/app/templates/download.js index 81be5dda..eca55893 100644 --- a/app/templates/download.js +++ b/app/templates/download.js @@ -6,22 +6,26 @@ module.exports = function(state) { const transfer = state.transfer; const div = html`
-
-
${state.translate( - 'downloadingPageProgress', - { - filename: state.fileInfo.name, - size: bytes(state.fileInfo.size) - } - )}
-
${state.translate('downloadingPageMessage')}
- ${progress(transfer.progressRatio)} -
-
${state.translate( - transfer.msg, - transfer.sizes - )}
-
+
+
+
${state.translate( + 'downloadingPageProgress', + { + filename: state.fileInfo.name, + size: bytes(state.fileInfo.size) + } + )}
+
${state.translate( + 'downloadingPageMessage' + )}
+ ${progress(transfer.progressRatio)} +
+
${state.translate( + transfer.msg, + transfer.sizes + )}
+
+
`; diff --git a/app/templates/upload.js b/app/templates/upload.js index a2d9edd2..98dc28fe 100644 --- a/app/templates/upload.js +++ b/app/templates/upload.js @@ -6,24 +6,26 @@ module.exports = function(state, emit) { const transfer = state.transfer; const div = html` -
-
${state.translate( - 'uploadingPageProgress', - { - filename: transfer.file.name, - size: bytes(transfer.file.size) - } - )}
-
- ${progress(transfer.progressRatio)} -
-
${state.translate( - transfer.msg, - transfer.sizes +
+
+
${state.translate( + 'uploadingPageProgress', + { + filename: transfer.file.name, + size: bytes(transfer.file.size) + } )}
- +
+ ${progress(transfer.progressRatio)} +
+
${state.translate( + transfer.msg, + transfer.sizes + )}
+ +
`; From fdcc31f04939495ce1194fe07fc2d6ead4527e44 Mon Sep 17 00:00:00 2001 From: Soumya Himanish Mohapatra Date: Sun, 14 Jan 2018 20:19:10 +0530 Subject: [PATCH 143/251] Passwords can now be reset --- app/fileManager.js | 4 +-- app/fileSender.js | 33 ++++++++++++++---- app/templates/share.js | 62 +++++++++++++++++++++++++++++++-- app/templates/uploadPassword.js | 3 +- assets/main.css | 28 +++++++++++++-- public/locales/en-US/send.ftl | 1 + 6 files changed, 116 insertions(+), 15 deletions(-) diff --git a/app/fileManager.js b/app/fileManager.js index 8e9b3f40..0dd46d21 100644 --- a/app/fileManager.js +++ b/app/fileManager.js @@ -173,9 +173,9 @@ export default function(state, emitter) { } }); - emitter.on('password', async ({ password, file }) => { + emitter.on('password', async ({ existingPassword, password, file }) => { try { - await FileSender.setPassword(password, file); + await FileSender.setPassword(existingPassword, password, file); metrics.addedPassword({ size: file.size }); file.password = password; state.storage.writeFiles(); diff --git a/app/fileSender.js b/app/fileSender.js index 5b04b884..3965edf5 100644 --- a/app/fileSender.js +++ b/app/fileSender.js @@ -19,11 +19,9 @@ async function sendPassword(file, authKey, rawAuth) { xhr.onreadystatechange = () => { if (xhr.readyState === XMLHttpRequest.DONE) { if (xhr.status === 200) { - return resolve(xhr.response); - } - if (xhr.status === 401) { const nonce = xhr.getResponseHeader('WWW-Authenticate').split(' ')[1]; file.nonce = nonce; + return resolve(xhr.response); } reject(new Error(xhr.status)); } @@ -262,7 +260,7 @@ export default class FileSender extends Nanobus { return this.uploadFile(encrypted, metadata, new Uint8Array(rawAuth)); } - static async setPassword(password, file) { + static async setPassword(existingPassword, password, file) { const encoder = new TextEncoder(); const secretKey = await window.crypto.subtle.importKey( 'raw', @@ -293,6 +291,28 @@ export default class FileSender extends Nanobus { false, ['deriveKey'] ); + const oldPwdkey = await window.crypto.subtle.importKey( + 'raw', + encoder.encode(existingPassword), + { name: 'PBKDF2' }, + false, + ['deriveKey'] + ); + const oldAuthKey = await window.crypto.subtle.deriveKey( + { + name: 'PBKDF2', + salt: encoder.encode(file.url), + iterations: 100, + hash: 'SHA-256' + }, + oldPwdkey, + { + name: 'HMAC', + hash: 'SHA-256' + }, + true, + ['sign'] + ); const newAuthKey = await window.crypto.subtle.deriveKey( { name: 'PBKDF2', @@ -309,11 +329,12 @@ export default class FileSender extends Nanobus { ['sign'] ); const rawAuth = await window.crypto.subtle.exportKey('raw', newAuthKey); + const aKey = existingPassword ? oldAuthKey : authKey; try { - await sendPassword(file, authKey, rawAuth); + await sendPassword(file, aKey, rawAuth); } catch (e) { if (e.message === '401' && file.nonce !== e.nonce) { - await sendPassword(file, authKey, rawAuth); + await sendPassword(file, aKey, rawAuth); } else { throw e; } diff --git a/app/templates/share.js b/app/templates/share.js index 622d7f90..291f2ff9 100644 --- a/app/templates/share.js +++ b/app/templates/share.js @@ -10,8 +10,25 @@ function passwordComplete(state, password) { const el = html([ `
${state.translate('passwordResult', { password: '
'
-    })}
` + })} + + +
` ]); + + el.querySelector('#resetButton').onclick = toggleResetInput; + el.querySelector('#unlock-reset-input').oninput = inputChanged; + const passwordOriginal = document.createElement('div'); passwordOriginal.className = 'passwordOriginal'; passwordOriginal.innerText = password; @@ -19,11 +36,35 @@ function passwordComplete(state, password) { const passwordStar = document.createElement('div'); passwordStar.className = 'passwordStar'; passwordStar.innerText = password.replace(/./g, '●'); - el.lastElementChild.appendChild(passwordOriginal); - el.lastElementChild.appendChild(passwordStar); + + el.firstElementChild.appendChild(passwordOriginal); + el.firstElementChild.appendChild(passwordStar); + return el; } +function inputChanged() { + const resetInput = document.getElementById('unlock-reset-input'); + const resetBtn = document.getElementById('unlock-reset-btn'); + if (resetInput.value.length > 0) { + resetBtn.classList.remove('btn-hidden'); + resetInput.classList.remove('input-no-btn'); + } else { + resetBtn.classList.add('btn-hidden'); + resetInput.classList.add('input-no-btn'); + } +} + +function toggleResetInput(event) { + const form = event.target.parentElement.querySelector('form'); + if (form.style.visibility === 'hidden' || form.style.visibility === '') { + form.style.visibility = 'visible'; + } else { + form.style.visibility = 'hidden'; + } + inputChanged(); +} + function expireInfo(file, translate, emit) { const hours = Math.floor(EXPIRE_SECONDS / 60 / 60); const el = html([ @@ -99,6 +140,21 @@ module.exports = function(state, emit) {
`; + if (div.querySelector('#reset-form')) + div.querySelector('#reset-form').onsubmit = resetPassword; + + function resetPassword(event) { + event.preventDefault(); + const existingPassword = document.querySelector('.passwordOriginal') + .innerText; + const password = document.querySelector('#unlock-reset-input').value; + if (password.length > 0) { + document.getElementById('copy').classList.remove('wait-password'); + document.getElementById('copy-btn').disabled = false; + emit('password', { existingPassword, password, file }); + } + } + function showPopup() { const popupText = document.querySelector('.popuptext'); popupText.classList.add('show'); diff --git a/app/templates/uploadPassword.js b/app/templates/uploadPassword.js index 0df27f05..e2e72d9d 100644 --- a/app/templates/uploadPassword.js +++ b/app/templates/uploadPassword.js @@ -52,11 +52,12 @@ module.exports = function(state, emit) { function setPassword(event) { event.preventDefault(); + const existingPassword = null; const password = document.getElementById('unlock-input').value; if (password.length > 0) { document.getElementById('copy').classList.remove('wait-password'); document.getElementById('copy-btn').disabled = false; - emit('password', { password, file }); + emit('password', { existingPassword, password, file }); } } diff --git a/assets/main.css b/assets/main.css index 3048c86d..81b7873b 100644 --- a/assets/main.css +++ b/assets/main.css @@ -648,6 +648,25 @@ tbody { background: #efeff1; } +#resetButton { + width: 80px; + height: 30px; + background: #fff; + border: 1px solid rgba(12, 12, 13, 0.3); + border-radius: 5px; + font-size: 15px; + margin-top: 5px; + margin-left: 15px; + margin-bottom: 12px; + line-height: 24px; + cursor: pointer; + color: #313131; +} + +#resetButton:hover { + background: #efeff1; +} + .send-new { font-size: 15px; margin: auto; @@ -857,7 +876,8 @@ tbody { padding-right: 10px; } -#unlock-btn { +#unlock-btn, +#unlock-reset-btn { flex: 0 1 165px; background: #0297f8; border-radius: 0 6px 6px 0; @@ -874,7 +894,8 @@ tbody { white-space: nowrap; } -#unlock-btn:hover { +#unlock-btn:hover, +#unlock-reset-btn:hover { background-color: #0287e8; } @@ -1163,7 +1184,8 @@ tbody { } #copy-btn, - #unlock-btn { + #unlock-btn, + #unlock-reset-btn { border-radius: 0 0 6px 6px; flex: 0 1 65px; } diff --git a/public/locales/en-US/send.ftl b/public/locales/en-US/send.ftl index a2c8367a..765b5bb1 100644 --- a/public/locales/en-US/send.ftl +++ b/public/locales/en-US/send.ftl @@ -95,6 +95,7 @@ footerLinkTerms = Terms footerLinkCookies = Cookies requirePasswordCheckbox = Require a password to download this file addPasswordButton = Add password +changePasswordButton = Change passwordTryAgain = Incorrect password. Try again. // This label is followed by the password needed to download a file passwordResult = Password: { $password } From 49214281f7f654463e771c8594b47428f969015b Mon Sep 17 00:00:00 2001 From: Rodrigo Date: Thu, 18 Jan 2018 20:12:07 +0000 Subject: [PATCH 144/251] Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Test Pilot: Firefox Send Localization authors: - Rodrigo --- public/locales/pt-PT/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/pt-PT/send.ftl b/public/locales/pt-PT/send.ftl index 3d351c91..e75c0673 100644 --- a/public/locales/pt-PT/send.ftl +++ b/public/locales/pt-PT/send.ftl @@ -92,6 +92,7 @@ footerLinkTerms = Termos footerLinkCookies = Cookies requirePasswordCheckbox = Requerer uma palavra-passe para transferir este ficheiro addPasswordButton = Adicionar palavra-passe +changePasswordButton = Alterar passwordTryAgain = Palavra-passe incorreta. Tente novamente. // This label is followed by the password needed to download a file passwordResult = Palavra-passe: { $password } From 63abbf59493acd3cb00bfa4f3463878a5af71f8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D1=80=D0=BA=D0=BE=20=D0=9A=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B8=D1=9B=20=28Marko=20Kosti=C4=87=29?= Date: Thu, 18 Jan 2018 20:12:09 +0000 Subject: [PATCH 145/251] Pontoon: Update Serbian (sr) localization of Test Pilot: Firefox Send MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Localization authors: - Марко Костић (Marko Kostić) --- public/locales/sr/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/sr/send.ftl b/public/locales/sr/send.ftl index b06833be..3dadb4c1 100644 --- a/public/locales/sr/send.ftl +++ b/public/locales/sr/send.ftl @@ -97,6 +97,7 @@ footerLinkTerms = Услови footerLinkCookies = Колачићи requirePasswordCheckbox = Захтевај лозинку да би преузео ову датотеку addPasswordButton = Додај лозинку +changePasswordButton = Промени passwordTryAgain = Нетачна лозинка. Пробајте поново. // This label is followed by the password needed to download a file passwordResult = Лозинка: { $password } From 94288b5cef78bcb508e512abfa684ba5474c54d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Esteban=20Ajsivinac=20Si=C3=A1n?= Date: Thu, 18 Jan 2018 20:31:14 +0000 Subject: [PATCH 146/251] Pontoon: Update Kaqchikel (cak) localization of Test Pilot: Firefox Send MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Localization authors: - Juan Esteban Ajsivinac Sián --- public/locales/cak/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/cak/send.ftl b/public/locales/cak/send.ftl index 9f0e30f4..198b545c 100644 --- a/public/locales/cak/send.ftl +++ b/public/locales/cak/send.ftl @@ -95,6 +95,7 @@ footerLinkTerms = Taq ojqanem footerLinkCookies = Taq kaxlanwey requirePasswordCheckbox = Tik'utüx jun ewan tzij richin niqasäx re yakb'äl re' addPasswordButton = Titz'aqatisäx Ewan Tzij +changePasswordButton = Tijalwachïx passwordTryAgain = Itzel ri ewan tzij. Tatojtob'ej chik. // This label is followed by the password needed to download a file passwordResult = Ewan tzij: { $password } From be5d7a1c9f6d2ce9ebce3bf9678695b522ac5fe9 Mon Sep 17 00:00:00 2001 From: Cynthia Pereira Date: Thu, 18 Jan 2018 20:31:18 +0000 Subject: [PATCH 147/251] Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Test Pilot: Firefox Send Localization authors: - Cynthia Pereira --- public/locales/pt-BR/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/pt-BR/send.ftl b/public/locales/pt-BR/send.ftl index 6a37b0e7..d8fb9cac 100644 --- a/public/locales/pt-BR/send.ftl +++ b/public/locales/pt-BR/send.ftl @@ -95,6 +95,7 @@ footerLinkTerms = Termos footerLinkCookies = Cookies requirePasswordCheckbox = Para baixar esse arquivo é necessário uma senha addPasswordButton = Adicionar senha +changePasswordButton = Alterar passwordTryAgain = Senha incorreta. Tente novamente. // This label is followed by the password needed to download a file passwordResult = Senha: { $password } From ffdf2bc0cd6a49b3c0b19a424d1b8620a89762ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Chevalier?= Date: Thu, 18 Jan 2018 21:30:59 +0000 Subject: [PATCH 148/251] Pontoon: Update French (fr) localization of Test Pilot: Firefox Send MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Localization authors: - Théo Chevalier --- public/locales/fr/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/fr/send.ftl b/public/locales/fr/send.ftl index 8dde9935..6bf9d486 100644 --- a/public/locales/fr/send.ftl +++ b/public/locales/fr/send.ftl @@ -95,6 +95,7 @@ footerLinkTerms = Conditions d’utilisation footerLinkCookies = Cookies requirePasswordCheckbox = Exiger un mot de passe pour télécharger ce fichier addPasswordButton = Ajouter un mot de passe +changePasswordButton = Changer passwordTryAgain = Mot de passe incorrect. Veuillez réessayer. // This label is followed by the password needed to download a file passwordResult = Mot de passe : { $password } From d87adbce63a5d095659cf3df84c5dc7941e9e046 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20K=C3=B6hler?= Date: Thu, 18 Jan 2018 21:31:02 +0000 Subject: [PATCH 149/251] Pontoon: Update German (de) localization of Test Pilot: Firefox Send MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Localization authors: - Michael Köhler --- public/locales/de/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/de/send.ftl b/public/locales/de/send.ftl index 1bb32048..479cf200 100644 --- a/public/locales/de/send.ftl +++ b/public/locales/de/send.ftl @@ -95,6 +95,7 @@ footerLinkTerms = Nutzungsbedingungen footerLinkCookies = Cookies requirePasswordCheckbox = Zum Herunterladen dieser Datei soll ein Passwort erforderlich sein addPasswordButton = Passwort hinzufügen +changePasswordButton = Ändern passwordTryAgain = Falsches Passwort. Versuchen Sie es erneut. // This label is followed by the password needed to download a file passwordResult = Passwort: { $password } From 3140cdd14859f9ba69fa133573a8918796f79781 Mon Sep 17 00:00:00 2001 From: Marcelo Poli Date: Thu, 18 Jan 2018 21:31:07 +0000 Subject: [PATCH 150/251] Pontoon: Update Spanish (Argentina) (es-AR) localization of Test Pilot: Firefox Send Localization authors: - Marcelo Poli --- public/locales/es-AR/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/es-AR/send.ftl b/public/locales/es-AR/send.ftl index b57f0d25..371dd67a 100644 --- a/public/locales/es-AR/send.ftl +++ b/public/locales/es-AR/send.ftl @@ -95,6 +95,7 @@ footerLinkTerms = Términos footerLinkCookies = Cookies requirePasswordCheckbox = Requerir contraseña para descargar este archivo addPasswordButton = Agregar contraseña +changePasswordButton = Cambiar passwordTryAgain = Contraseña incorrecta. Intentá nuevamente. // This label is followed by the password needed to download a file passwordResult = Contraseña: { $password } From 72dffcf46b965ba92ebad61d78f0237c2af6a10f Mon Sep 17 00:00:00 2001 From: Michael Wolf Date: Thu, 18 Jan 2018 21:51:01 +0000 Subject: [PATCH 151/251] Pontoon: Update Sorbian, Lower (dsb) localization of Test Pilot: Firefox Send Localization authors: - Michael Wolf --- public/locales/dsb/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/dsb/send.ftl b/public/locales/dsb/send.ftl index ec2dcb07..1b33f181 100644 --- a/public/locales/dsb/send.ftl +++ b/public/locales/dsb/send.ftl @@ -99,6 +99,7 @@ footerLinkTerms = Wuměnjenja footerLinkCookies = Cookieje requirePasswordCheckbox = Gronidło za ześěgnjenje toś teje dataje pominaś addPasswordButton = Gronidło pśidaś +changePasswordButton = Změniś passwordTryAgain = Wopacne gronidło. Wopytajśo hyšći raz. // This label is followed by the password needed to download a file passwordResult = Gronidło: { $password } From f6a788b36f1c30f98abab445d22aac37b6f5e00e Mon Sep 17 00:00:00 2001 From: Michael Wolf Date: Thu, 18 Jan 2018 21:51:05 +0000 Subject: [PATCH 152/251] Pontoon: Update Sorbian, Upper (hsb) localization of Test Pilot: Firefox Send Localization authors: - Michael Wolf --- public/locales/hsb/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/hsb/send.ftl b/public/locales/hsb/send.ftl index ccd3fc54..49d8df82 100644 --- a/public/locales/hsb/send.ftl +++ b/public/locales/hsb/send.ftl @@ -99,6 +99,7 @@ footerLinkTerms = Wuměnjenja footerLinkCookies = Placki requirePasswordCheckbox = Žadajće sej hesło za sćehnjenje tuteje dataje addPasswordButton = Hesło přidać +changePasswordButton = Změnić passwordTryAgain = Wopačne hesło. Prošu spytajće hišće raz. // This label is followed by the password needed to download a file passwordResult = Hesło: { $password } From 0c92cec2eab203c6f76aea7d32fb75367d433008 Mon Sep 17 00:00:00 2001 From: manxmensch Date: Fri, 19 Jan 2018 02:11:30 +0000 Subject: [PATCH 153/251] Pontoon: Update Malay (ms) localization of Test Pilot: Firefox Send Localization authors: - manxmensch --- public/locales/ms/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/ms/send.ftl b/public/locales/ms/send.ftl index 4917f9d9..d3c8e133 100644 --- a/public/locales/ms/send.ftl +++ b/public/locales/ms/send.ftl @@ -93,6 +93,7 @@ footerLinkTerms = Terma footerLinkCookies = Kuki requirePasswordCheckbox = Perlu kata laluan untuk memuat turun fail ini addPasswordButton = Tambah Kata laluan +changePasswordButton = Tukar passwordTryAgain = Kata laluan tidak betul. Cuba lagi. // This label is followed by the password needed to download a file passwordResult = Kata laluan: { $password } From 7ac432fbc5aca1b352be3ae51a2c67c7af54e7e1 Mon Sep 17 00:00:00 2001 From: Georgianizator Date: Fri, 19 Jan 2018 06:31:15 +0000 Subject: [PATCH 154/251] Pontoon: Update Georgian (ka) localization of Test Pilot: Firefox Send Localization authors: - Georgianizator --- public/locales/ka/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/ka/send.ftl b/public/locales/ka/send.ftl index 7ed542e2..72608859 100644 --- a/public/locales/ka/send.ftl +++ b/public/locales/ka/send.ftl @@ -93,6 +93,7 @@ footerLinkTerms = პირობები footerLinkCookies = ფუნთუშები requirePasswordCheckbox = პაროლის მოთხოვნა, ფაილის ჩამოტვირთვისას addPasswordButton = პაროლის დამატება +changePasswordButton = შეცვლა passwordTryAgain = პაროლი არასწორია. სცადეთ ხელახლა. // This label is followed by the password needed to download a file passwordResult = პაროლი: { $password } From 145605d6280ca1847a09afbd411d0c9734716b02 Mon Sep 17 00:00:00 2001 From: Luna Jernberg Date: Fri, 19 Jan 2018 06:31:17 +0000 Subject: [PATCH 155/251] Pontoon: Update Swedish (sv-SE) localization of Test Pilot: Firefox Send Localization authors: - Luna Jernberg --- public/locales/sv-SE/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/sv-SE/send.ftl b/public/locales/sv-SE/send.ftl index d5a70b68..af68e928 100644 --- a/public/locales/sv-SE/send.ftl +++ b/public/locales/sv-SE/send.ftl @@ -95,6 +95,7 @@ footerLinkTerms = Villkor footerLinkCookies = Kakor requirePasswordCheckbox = Kräver ett lösenord för att ladda ner den här filen addPasswordButton = Lägg till lösenord +changePasswordButton = Ändra passwordTryAgain = Felaktigt lösenord. Försök igen. // This label is followed by the password needed to download a file passwordResult = Lösenord: { $password } From 734c65fbda1e7e41e70222237dc84c6473784216 Mon Sep 17 00:00:00 2001 From: Ton Date: Fri, 19 Jan 2018 07:10:40 +0000 Subject: [PATCH 156/251] Pontoon: Update Dutch (nl) localization of Test Pilot: Firefox Send Localization authors: - Ton --- public/locales/nl/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/nl/send.ftl b/public/locales/nl/send.ftl index d10edc8e..016b773f 100644 --- a/public/locales/nl/send.ftl +++ b/public/locales/nl/send.ftl @@ -95,6 +95,7 @@ footerLinkTerms = Voorwaarden footerLinkCookies = Cookies requirePasswordCheckbox = Een wachtwoord vereisen om dit bestand te downloaden addPasswordButton = Wachtwoord toevoegen +changePasswordButton = Wijzigen passwordTryAgain = Onjuist wachtwoord. Probeer het opnieuw. // This label is followed by the password needed to download a file passwordResult = Wachtwoord: { $password } From 37ca7a706abf24656d984375516f5e54e8c3a441 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nihad=20Sulji=C4=87?= Date: Fri, 19 Jan 2018 08:31:08 +0000 Subject: [PATCH 157/251] Pontoon: Update Bosnian (bs) localization of Test Pilot: Firefox Send MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Localization authors: - Nihad Suljić --- public/locales/bs/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/bs/send.ftl b/public/locales/bs/send.ftl index 20c3cc83..73377dee 100644 --- a/public/locales/bs/send.ftl +++ b/public/locales/bs/send.ftl @@ -97,6 +97,7 @@ footerLinkTerms = Uslovi footerLinkCookies = Kolačići requirePasswordCheckbox = Zahtjevaj lozinku za preuzimanje ove datoteke addPasswordButton = Dodaj lozinku +changePasswordButton = Promijeni passwordTryAgain = Netačna lozinka. Pokušajte ponovo. // This label is followed by the password needed to download a file passwordResult = Lozinka: { $password } From 3ef5ef166fd49f342c6ac2d470cdf1677492686a Mon Sep 17 00:00:00 2001 From: Frederick Villaluna Date: Fri, 19 Jan 2018 08:50:42 +0000 Subject: [PATCH 158/251] Pontoon: Update Tagalog (tl) localization of Test Pilot: Firefox Send Localization authors: - Frederick Villaluna --- public/locales/tl/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/tl/send.ftl b/public/locales/tl/send.ftl index fba60d97..bf2f323c 100644 --- a/public/locales/tl/send.ftl +++ b/public/locales/tl/send.ftl @@ -94,6 +94,7 @@ footerLinkTerms = Mga term footerLinkCookies = Mga cookie requirePasswordCheckbox = Mangailangan ng isang password upang i-download ang file na ito addPasswordButton = Magdagdag ng password +changePasswordButton = Palitan passwordTryAgain = Maling password. Subukan muli. // This label is followed by the password needed to download a file passwordResult = Password: { $password } From e9b89629a6a4ef77365da46260b8d44e481d0363 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5var=20Henriksen?= Date: Fri, 19 Jan 2018 09:51:32 +0000 Subject: [PATCH 159/251] =?UTF-8?q?Pontoon:=20Update=20Norwegian=20Bokm?= =?UTF-8?q?=C3=A5l=20(nb-NO)=20localization=20of=20Test=20Pilot:=20Firefox?= =?UTF-8?q?=20Send?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Localization authors: - Håvar Henriksen --- public/locales/nb-NO/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/nb-NO/send.ftl b/public/locales/nb-NO/send.ftl index efa82c3c..c9b1a7ea 100644 --- a/public/locales/nb-NO/send.ftl +++ b/public/locales/nb-NO/send.ftl @@ -95,6 +95,7 @@ footerLinkTerms = Vilkår footerLinkCookies = Infokapsler requirePasswordCheckbox = Krever et passord for å laste ned denne filen addPasswordButton = Legg til passord +changePasswordButton = Endre passwordTryAgain = Feil passord. Prøv igjen. // This label is followed by the password needed to download a file passwordResult = Passord: { $password } From 72f301fa45830c36fcad1e26851870dd2f15e116 Mon Sep 17 00:00:00 2001 From: Pin-guang Chen Date: Fri, 19 Jan 2018 12:11:08 +0000 Subject: [PATCH 160/251] Pontoon: Update Chinese (Taiwan) (zh-TW) localization of Test Pilot: Firefox Send Localization authors: - Pin-guang Chen --- public/locales/zh-TW/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/zh-TW/send.ftl b/public/locales/zh-TW/send.ftl index cec7bbe8..becbad14 100644 --- a/public/locales/zh-TW/send.ftl +++ b/public/locales/zh-TW/send.ftl @@ -93,6 +93,7 @@ footerLinkTerms = 使用條款 footerLinkCookies = Cookie requirePasswordCheckbox = 需要密碼才能下載此檔案 addPasswordButton = 新增密碼 +changePasswordButton = 變更 passwordTryAgain = 密碼不正確,請再試一次。 // This label is followed by the password needed to download a file passwordResult = 密碼: { $password } From 47072ae1fe3e57612f0d7f9ad539e772897a82c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Mesk=C3=B3?= Date: Fri, 19 Jan 2018 14:11:38 +0000 Subject: [PATCH 161/251] Pontoon: Update Hungarian (hu) localization of Test Pilot: Firefox Send MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Localization authors: - Balázs Meskó --- public/locales/hu/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/hu/send.ftl b/public/locales/hu/send.ftl index 63612c2f..b23e0a89 100644 --- a/public/locales/hu/send.ftl +++ b/public/locales/hu/send.ftl @@ -95,6 +95,7 @@ footerLinkTerms = Feltételek footerLinkCookies = Sütik requirePasswordCheckbox = Jelszó megkövetelése a fájl letöltéséhez addPasswordButton = Jelszó hozzáadása +changePasswordButton = Módosítás passwordTryAgain = Helytelen jelszó. Próbálja meg újra. // This label is followed by the password needed to download a file passwordResult = Jelszó: { $password } From 5d715c50de96ff089289bc815c74a53e0da7db5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rok=20=C5=BDerdin?= Date: Fri, 19 Jan 2018 14:30:37 +0000 Subject: [PATCH 162/251] Pontoon: Update Slovenian (sl) localization of Test Pilot: Firefox Send MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Localization authors: - Rok Žerdin --- public/locales/sl/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/sl/send.ftl b/public/locales/sl/send.ftl index cb171a79..5c231f1d 100644 --- a/public/locales/sl/send.ftl +++ b/public/locales/sl/send.ftl @@ -99,6 +99,7 @@ footerLinkTerms = Pogoji footerLinkCookies = Piškotki requirePasswordCheckbox = Zahtevaj geslo za prenos te datoteke addPasswordButton = Dodaj geslo +changePasswordButton = Spremeni passwordTryAgain = Napačno geslo. Poskusite znova. // This label is followed by the password needed to download a file passwordResult = Geslo: { $password } From da1ff63f7227a80976a1885dfcc86dad3a12c399 Mon Sep 17 00:00:00 2001 From: YFdyh000 Date: Fri, 19 Jan 2018 15:11:34 +0000 Subject: [PATCH 163/251] Pontoon: Update Chinese (China) (zh-CN) localization of Test Pilot: Firefox Send Localization authors: - YFdyh000 --- public/locales/zh-CN/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/zh-CN/send.ftl b/public/locales/zh-CN/send.ftl index 098b9eab..7cb373aa 100644 --- a/public/locales/zh-CN/send.ftl +++ b/public/locales/zh-CN/send.ftl @@ -93,6 +93,7 @@ footerLinkTerms = 条款 footerLinkCookies = Cookie requirePasswordCheckbox = 持有密码才能下载此文件 addPasswordButton = 添加密码 +changePasswordButton = 更改 passwordTryAgain = 密码不正确。请重试。 // This label is followed by the password needed to download a file passwordResult = 密码:{ $password } From 45067d03540c78d0e088e513db38f8cc7915f791 Mon Sep 17 00:00:00 2001 From: Rhoslyn Prys Date: Fri, 19 Jan 2018 15:53:56 +0000 Subject: [PATCH 164/251] Pontoon: Update Welsh (cy) localization of Test Pilot: Firefox Send Localization authors: - Rhoslyn Prys --- public/locales/cy/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/cy/send.ftl b/public/locales/cy/send.ftl index b06f1b00..fc4cbd33 100644 --- a/public/locales/cy/send.ftl +++ b/public/locales/cy/send.ftl @@ -99,6 +99,7 @@ footerLinkTerms = Amodau footerLinkCookies = Cwcis requirePasswordCheckbox = Gosod angen cyfrinair i lwytho'r ffeil hon i lawr addPasswordButton = Ychwanegu Cyfrinair +changePasswordButton = Newid passwordTryAgain = Cyfrinair anghywir. Ceisiwch eto. // This label is followed by the password needed to download a file passwordResult = Cyfrinair: { $password } From d6f534c3c098f0f9e52f175918e37fe383abb18d Mon Sep 17 00:00:00 2001 From: aefgh39622 Date: Fri, 19 Jan 2018 20:11:09 +0000 Subject: [PATCH 165/251] Pontoon: Update Japanese (ja) localization of Test Pilot: Firefox Send Localization authors: - aefgh39622 --- public/locales/ja/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/ja/send.ftl b/public/locales/ja/send.ftl index c22159a7..234dbb66 100644 --- a/public/locales/ja/send.ftl +++ b/public/locales/ja/send.ftl @@ -93,6 +93,7 @@ footerLinkTerms = 利用規約 footerLinkCookies = Cookie requirePasswordCheckbox = このファイルをダウンロードするにはパスワードが必要です addPasswordButton = パスワードを追加 +changePasswordButton = 変更 passwordTryAgain = パスワードが正しくありません。再度入力してください。 // This label is followed by the password needed to download a file passwordResult = パスワード: { $password } From 39bfe6d2cb24cb300f3b6f8c78c1c4bdcd0a6216 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juraj=20Cig=C3=A1=C5=88?= Date: Fri, 19 Jan 2018 22:11:06 +0000 Subject: [PATCH 166/251] Pontoon: Update Slovak (sk) localization of Test Pilot: Firefox Send MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Localization authors: - Juraj Cigáň --- public/locales/sk/send.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/public/locales/sk/send.ftl b/public/locales/sk/send.ftl index 15d5588a..b6c6fded 100644 --- a/public/locales/sk/send.ftl +++ b/public/locales/sk/send.ftl @@ -97,6 +97,7 @@ footerLinkTerms = Podmienky používania footerLinkCookies = Cookies requirePasswordCheckbox = Pri preberaní súboru vyžadovať heslo addPasswordButton = Pridať heslo +changePasswordButton = Zmeniť passwordTryAgain = Nesprávne heslo. Skúste to znova. // This label is followed by the password needed to download a file passwordResult = Heslo: { $password } From f7dc86ab2b85aa745cd389b9f1a1b25d856f144e Mon Sep 17 00:00:00 2001 From: Danny Coates Date: Fri, 19 Jan 2018 15:07:05 -0800 Subject: [PATCH 167/251] reinstate the 'exited' metric. fixes #653 --- app/metrics.js | 11 +++++++---- app/templates/fxPromo.js | 24 ++---------------------- app/templates/share.js | 2 +- 3 files changed, 10 insertions(+), 27 deletions(-) diff --git a/app/metrics.js b/app/metrics.js index e469d12a..bc6783f2 100644 --- a/app/metrics.js +++ b/app/metrics.js @@ -20,7 +20,7 @@ let experiment = null; export default function initialize(state, emitter) { appState = state; emitter.on('DOMContentLoaded', () => { - // addExitHandlers(); + addExitHandlers(); experiment = storage.enrolled[0]; sendEvent(category(), 'visit', { cm5: storage.totalUploads, @@ -29,9 +29,8 @@ export default function initialize(state, emitter) { }); //TODO restart handlers... somewhere }); - emitter.on('exit', evt => { - exitEvent(evt); - }); + emitter.on('exit', exitEvent); + emitter.on('experiment', experimentEvent); } function category() { @@ -259,6 +258,10 @@ function exitEvent(target) { }); } +function experimentEvent(params) { + return sendEvent(category(), 'experiment', params); +} + // eslint-disable-next-line no-unused-vars function addExitHandlers() { const links = Array.from(document.querySelectorAll('a')); diff --git a/app/templates/fxPromo.js b/app/templates/fxPromo.js index 2252cd31..e4637a25 100644 --- a/app/templates/fxPromo.js +++ b/app/templates/fxPromo.js @@ -1,22 +1,9 @@ const html = require('choo/html'); const assets = require('../../common/assets'); -// function replaceLinks(str, urls) { -// let i = -1; -// const s = str.replace(/([^<]+)<\/a>/g, (m, v) => { -// i++; -// return `${v}`; -// }); -// return [`${s}`]; -// } - module.exports = function(state, emit) { - // function close() { - // document.querySelector('.banner').remove(); - // } - - function clicked(evt) { - emit('exit', evt); + function clicked() { + emit('experiment', { cd3: 'promo' }); } const classes = state.promo === 'blue' ? 'banner banner-blue' : 'banner'; @@ -37,10 +24,3 @@ module.exports = function(state, emit) {
`; }; - -/* - -*/ diff --git a/app/templates/share.js b/app/templates/share.js index 291f2ff9..c9c311ce 100644 --- a/app/templates/share.js +++ b/app/templates/share.js @@ -21,7 +21,7 @@ function passwordComplete(state, password) { + value="${state.translate('changePasswordButton')}"/> ` ]); From 48b21de0111d3d140cf112c3efd17e2504fcffb8 Mon Sep 17 00:00:00 2001 From: Danny Coates Date: Fri, 19 Jan 2018 16:53:57 -0800 Subject: [PATCH 168/251] a few tweaks to password input. fixes #703 --- app/templates/share.js | 85 +++++++++++++++++---------------- app/templates/uploadPassword.js | 2 +- assets/main.css | 3 +- 3 files changed, 46 insertions(+), 44 deletions(-) diff --git a/app/templates/share.js b/app/templates/share.js index c9c311ce..d785d109 100644 --- a/app/templates/share.js +++ b/app/templates/share.js @@ -6,43 +6,6 @@ const uploadPassword = require('./uploadPassword'); const selectbox = require('./selectbox'); const { allowedCopy, delay, fadeOut } = require('../utils'); -function passwordComplete(state, password) { - const el = html([ - `
${state.translate('passwordResult', { - password: '
'
-    })}
-    
-    
-    
` - ]); - - el.querySelector('#resetButton').onclick = toggleResetInput; - el.querySelector('#unlock-reset-input').oninput = inputChanged; - - const passwordOriginal = document.createElement('div'); - passwordOriginal.className = 'passwordOriginal'; - passwordOriginal.innerText = password; - - const passwordStar = document.createElement('div'); - passwordStar.className = 'passwordStar'; - passwordStar.innerText = password.replace(/./g, '●'); - - el.firstElementChild.appendChild(passwordOriginal); - el.firstElementChild.appendChild(passwordStar); - - return el; -} - function inputChanged() { const resetInput = document.getElementById('unlock-reset-input'); const resetBtn = document.getElementById('unlock-reset-btn'); @@ -57,8 +20,10 @@ function inputChanged() { function toggleResetInput(event) { const form = event.target.parentElement.querySelector('form'); + const input = document.getElementById('unlock-reset-input'); if (form.style.visibility === 'hidden' || form.style.visibility === '') { form.style.visibility = 'visible'; + input.focus(); } else { form.style.visibility = 'hidden'; } @@ -93,7 +58,7 @@ module.exports = function(state, emit) { file.password = file.password || ''; const passwordSection = file.password - ? passwordComplete(state, file.password) + ? passwordComplete(file.password) : uploadPassword(state, emit); const div = html` `; - if (div.querySelector('#reset-form')) - div.querySelector('#reset-form').onsubmit = resetPassword; + function passwordComplete(password) { + const el = html`
+ + +
`; + + const passwordSpan = html([ + `${state.translate('passwordResult', { + password: + '
'
+      })}
` + ]); + passwordSpan.querySelector('.passwordOriginal').textContent = password; + passwordSpan.querySelector('.passwordStar').textContent = password.replace( + /./g, + '●' + ); + el.insertBefore(passwordSpan, el.firstElementChild); + return el; + } function resetPassword(event) { event.preventDefault(); - const existingPassword = document.querySelector('.passwordOriginal') - .innerText; + const existingPassword = file.password; const password = document.querySelector('#unlock-reset-input').value; if (password.length > 0) { document.getElementById('copy').classList.remove('wait-password'); diff --git a/app/templates/uploadPassword.js b/app/templates/uploadPassword.js index e2e72d9d..d04776bb 100644 --- a/app/templates/uploadPassword.js +++ b/app/templates/uploadPassword.js @@ -12,7 +12,7 @@ module.exports = function(state, emit) { `; + function cancel() { + const btn = document.getElementById('cancel-upload'); + btn.remove(); + emit('cancel'); + } return div; }; diff --git a/app/templates/downloadButton.js b/app/templates/downloadButton.js new file mode 100644 index 00000000..be01333f --- /dev/null +++ b/app/templates/downloadButton.js @@ -0,0 +1,16 @@ +const html = require('choo/html'); + +module.exports = function(state, emit) { + function download(event) { + event.preventDefault(); + emit('download', state.fileInfo); + } + + return html` +
+ +
`; +}; diff --git a/app/templates/downloadPassword.js b/app/templates/downloadPassword.js index 4ce13608..dea30a03 100644 --- a/app/templates/downloadPassword.js +++ b/app/templates/downloadPassword.js @@ -5,8 +5,9 @@ module.exports = function(state, emit) { const label = fileInfo.password === null ? html` - ` + ` : html`