Compare commits

...

1664 Commits

Author SHA1 Message Date
Victor Ibragimov
11319080a8 Pontoon: Update Russian (ru) localization of Firefox Send
Co-authored-by: Victor Ibragimov <victor.ibragimov@gmail.com>
2020-09-15 12:24:40 +00:00
Quentí
0aefdc18da Pontoon: Update Occitan (oc) localization of Firefox Send
Co-authored-by: Quentí <quentinantonin@free.fr>
2020-09-14 19:43:23 +00:00
Quentí
2be2b6f410 Pontoon: Update Occitan (oc) localization of Firefox Send
Co-authored-by: Quentí <quentinantonin@free.fr>
2020-09-14 19:35:10 +00:00
Quentí
d4c42c8ab1 Pontoon: Update Occitan (oc) localization of Firefox Send
Co-authored-by: Quentí <quentinantonin@free.fr>
2020-09-14 18:34:28 +00:00
వీవెన్
b9a329fa34 Pontoon: Update Telugu (te) localization of Firefox Send
Co-authored-by: వీవెన్ <veeven@gmail.com>
2020-09-10 07:47:28 +00:00
Jim Spentzos
f84a5f1b18 Pontoon: Update Greek (el) localization of Firefox Send
Co-authored-by: Jim Spentzos <jimspentzos2000@gmail.com>
Co-authored-by: George kitsoukakis <norhorn@gmail.com>
2020-09-07 13:25:32 +00:00
Lavon Śpirydonaŭ
9f64e08b93 Pontoon: Update Belarusian (be) localization of Firefox Send
Co-authored-by: Mikalai Udodau <crom-a@tut.by>
Co-authored-by: Lavon Śpirydonaŭ <lavon@outlook.de>
2020-09-06 18:34:22 +00:00
robbp
48a11cd33b Pontoon: Update Romanian (ro) localization of Firefox Send
Co-authored-by: robbp <robbpaun@gmail.com>
2020-08-26 05:37:49 +00:00
Bald3mar
32b9fb8aa6 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Co-authored-by: Bald3mar <baldemarls@gmail.com>
2020-08-26 03:08:28 +00:00
Gwenn
f0bbf822c1 Pontoon: Update Breton (br) localization of Firefox Send
Co-authored-by: Gwenn <tornoz@laposte.net>
2020-08-22 21:25:51 +00:00
Gwenn
3abaa58a1b Pontoon: Update Breton (br) localization of Firefox Send
Co-authored-by: Gwenn <tornoz@laposte.net>
2020-08-22 17:14:29 +00:00
robbp
b0ad17d3b7 Pontoon: Update Romanian (ro) localization of Firefox Send
Co-authored-by: robbp <robbpaun@gmail.com>
2020-08-20 15:15:37 +00:00
Besnik Bleta
4597ecf4e1 Pontoon: Update Albanian (sq) localization of Firefox Send
Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
2020-08-17 11:29:04 +00:00
Besnik Bleta
571b6f4003 Pontoon: Update Albanian (sq) localization of Firefox Send
Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
2020-08-17 11:14:06 +00:00
Jim Spentzos
0152a440b4 Pontoon: Update Greek (el) localization of Firefox Send
Co-authored-by: Jim Spentzos <jimspentzos2000@gmail.com>
2020-08-15 12:34:07 +00:00
George kitsoukakis
0886352a09 Pontoon: Update Greek (el) localization of Firefox Send
Co-authored-by: Jim Spentzos <jimspentzos2000@gmail.com>
Co-authored-by: George kitsoukakis <norhorn@gmail.com>
2020-08-15 12:04:58 +00:00
Bald3mar
98444d68d3 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Co-authored-by: Bald3mar <baldemarls@gmail.com>
2020-08-14 03:06:31 +00:00
Bald3mar
d38ea6a3fa Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Co-authored-by: Bald3mar <baldemarls@gmail.com>
2020-08-14 02:55:06 +00:00
Bald3mar
e75478af8d Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Co-authored-by: Bald3mar <baldemarls@gmail.com>
2020-08-14 01:14:23 +00:00
Bald3mar
d8e117e61a Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Co-authored-by: Bald3mar <baldemarls@gmail.com>
2020-08-14 01:07:46 +00:00
Mark Heijl
15c9593e18 Pontoon: Update Dutch (nl) localization of Firefox Send
Co-authored-by: Mark Heijl <markh@babelzilla.org>
2020-08-13 06:55:41 +00:00
వీవెన్
df0644a9da Pontoon: Update Telugu (te) localization of Firefox Send
Co-authored-by: వీవెన్ <veeven@gmail.com>
2020-08-12 12:10:52 +00:00
Abdulrasheed Idris
b22b8f089d Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: Abdulrasheed Idris <Abdulrash6211@gmail.com>
Co-authored-by: biobell2000 <biobell2000@gmail.com>
Co-authored-by: Umegbewe <nwebedujunior55@gmail.com>
2020-08-10 16:16:42 +00:00
Adaobi
032fddff64 Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: Adaobi <ada_okeke60@ymail.com>
Co-authored-by: Umegbewe <nwebedujunior55@gmail.com>
2020-08-10 16:07:21 +00:00
Juan Pablo
46bc3d4713 Pontoon: Update Aragonese (an) localization of Firefox Send
Co-authored-by: Juan Pablo <juanpabl@gmail.com>
2020-08-08 21:54:45 +00:00
Juan Pablo
d0844ae811 Pontoon: Update Aragonese (an) localization of Firefox Send
Co-authored-by: Juan Pablo <juanpabl@gmail.com>
2020-08-08 21:44:57 +00:00
Juan Pablo
740ab457de Pontoon: Update Aragonese (an) localization of Firefox Send
Co-authored-by: Juan Pablo <juanpabl@gmail.com>
2020-08-08 21:35:20 +00:00
Lan Glad
41865f9fc2 Pontoon: Update Slovenian (sl) localization of Firefox Send
Co-authored-by: Lan Glad <upwinxp@gmail.com>
2020-08-05 19:36:08 +00:00
Lan Glad
915d6c2abd Pontoon: Update Slovenian (sl) localization of Firefox Send
Co-authored-by: Lan Glad <upwinxp@gmail.com>
2020-08-05 18:54:21 +00:00
Lan Glad
fc07069900 Pontoon: Update Slovenian (sl) localization of Firefox Send
Co-authored-by: Lan Glad <upwinxp@gmail.com>
2020-08-05 18:45:36 +00:00
Isidora Jukić
98819744af Pontoon: Update Serbian (sr) localization of Firefox Send
Co-authored-by: Isidora Jukić <barad.dur@yahoo.com>
2020-08-04 18:59:47 +00:00
Isidora Jukić
c6ddbe1b66 Pontoon: Update Serbian (sr) localization of Firefox Send
Co-authored-by: Isidora Jukić <barad.dur@yahoo.com>
2020-08-04 18:47:27 +00:00
Danny Coates
3c4f502eac add flex-none to radio buttons on report page. fixes #1509 2020-08-03 09:02:41 -07:00
Danny Coates
320b4cc9f1 remove signin modal from privacy page. fixes #1508 2020-08-03 08:56:10 -07:00
Jim Spentzos
e20798e0aa Pontoon: Update Greek (el) localization of Firefox Send
Co-authored-by: Jim Spentzos <jimspentzos2000@gmail.com>
2020-08-03 13:59:48 +00:00
Kim YoungCheon
d23eb376f8 Pontoon: Update Korean (ko) localization of Firefox Send
Co-authored-by: Kim YoungCheon <circcc@gmail.com>
2020-08-03 01:07:17 +00:00
Alexander Slovesnik
7654210dbb Pontoon: Update Russian (ru) localization of Firefox Send
Co-authored-by: TrickyFoxy <roman.deev06@gmail.com>
Co-authored-by: Alexander Slovesnik <unghost@mozilla-russia.org>
2020-08-01 11:10:56 +00:00
Aman Alam
decc44620b Pontoon: Update Punjabi (pa-IN) localization of Firefox Send
Co-authored-by: Aman Alam <amanpreet.alam@gmail.com>
2020-08-01 06:52:55 +00:00
Danny Coates
246e2c8db0 set downloadMetadata.status to 404 on unfound downloads. fixes #1501 2020-07-31 09:36:03 -07:00
Danny Coates
fbc4107262 fixed dark-theme password input style. fixes #1504 2020-07-31 08:57:01 -07:00
Danny Coates
dc912678fe fixed post-report text color. fixes #1500 2020-07-31 08:57:00 -07:00
Danny Coates
1ec2b995b0 restrict "share" to mobile, fixes #1505 2020-07-31 08:57:00 -07:00
Danny Coates
fc8673b87a fix main section height. fixes #1499 2020-07-31 08:57:00 -07:00
Melo46
27bc7de7d0 Pontoon: Update Interlingua (ia) localization of Firefox Send
Co-authored-by: Melo46 <melo@carmu.com>
2020-07-31 15:54:01 +00:00
Melo46
0abcd8ac3b Pontoon: Update Interlingua (ia) localization of Firefox Send
Co-authored-by: Melo46 <melo@carmu.com>
2020-07-31 15:46:39 +00:00
Melo46
604a17a19d Pontoon: Update Interlingua (ia) localization of Firefox Send
Co-authored-by: Melo46 <melo@carmu.com>
2020-07-31 15:37:05 +00:00
Itiel
97efdc572a Pontoon: Update Hebrew (he) localization of Firefox Send
Co-authored-by: Itiel <itiel_yn8@walla.com>
Co-authored-by: Yaron Shahrabani <sh.yaron@gmail.com>
2020-07-30 21:56:24 +00:00
Danny Coates
d023a53b74 handle reports for files that have been already been deleted 2020-07-30 10:19:29 -07:00
Abelardo Ayala Rodríguez
06daba9ce0 Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-07-30 16:11:22 +00:00
Danny Coates
deb5c6e5d1 give 404 and error pages the loggedin/ok treatment 2020-07-29 20:56:39 -07:00
Danny Coates
d2cdff5975 updated helmet 2020-07-29 20:29:27 -07:00
Danny Coates
0eb35c048c updated sentry 2020-07-29 20:23:10 -07:00
Danny Coates
028a6c4311 updated @google-cloud/storage 2020-07-29 20:18:30 -07:00
Danny Coates
2356d0fb64 updated babel 2020-07-29 20:04:22 -07:00
Danny Coates
ab63a34938 updated fast-text-encoding 2020-07-29 19:58:46 -07:00
Danny Coates
4f03be590a handle unknown errors in getMetadata 2020-07-29 18:52:55 -07:00
Danny Coates
9bd96a9ec0 exlude puppeteer from docker build 2020-07-29 14:20:39 -07:00
Danny Coates
dd59605f3e support edge 18 maybe 2020-07-29 14:00:48 -07:00
Danny Coates
e2425cd6c9 added downloadConfirm string to noStream page 2020-07-29 12:35:47 -07:00
Danny Coates
81e9d81dab implemented download tokens 2020-07-29 11:02:22 -07:00
Danny Coates
87d46f7ef5 show "OK" button on complete page when logged in instead of "Try Firefox Send" 2020-07-29 09:53:47 -07:00
Danny Coates
2f503c91e4 fixed silly regex bug on startup 2020-07-29 08:49:19 -07:00
Jiri Grönroos
3c27656444 Pontoon: Update Finnish (fi) localization of Firefox Send
Co-authored-by: Jiri Grönroos <jiri.gronroos@iki.fi>
2020-07-29 08:35:27 +00:00
Danny Coates
1cd33282dd 🤷 2020-07-28 15:12:31 -07:00
Gery Escalier
db6358abed Pontoon: Update Spanish (Spain) (es-ES) localization of Firefox Send
Co-authored-by: Gery Escalier <geryescalier@yahoo.com>
Co-authored-by: jlG <jlg.l10n.es@gmail.com>
2020-07-28 20:34:44 +00:00
jlG
a08333d2b4 Pontoon: Update Spanish (Spain) (es-ES) localization of Firefox Send
Co-authored-by: Paulina Rodriguez <pauli.rodriguez.c@gmail.com>
Co-authored-by: Gery Escalier <geryescalier@yahoo.com>
Co-authored-by: jlG <jlg.l10n.es@gmail.com>
2020-07-28 20:23:33 +00:00
వీవెన్
8869e34ca5 Pontoon: Update Telugu (te) localization of Firefox Send
Co-authored-by: వీవెన్ <veeven@gmail.com>
2020-07-28 16:43:21 +00:00
వీవెన్
a05c0e16b7 Pontoon: Update Telugu (te) localization of Firefox Send
Co-authored-by: వీవెన్ <veeven@gmail.com>
2020-07-28 16:35:25 +00:00
Danny Coates
192d45f77c Merge remote-tracking branch 'origin/master' 2020-07-28 09:31:28 -07:00
Danny Coates
8ad4597114 replaced fxa-geodb with load balancer header 2020-07-28 09:31:09 -07:00
Abelardo Ayala Rodríguez
4d96274f79 Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-07-28 16:14:23 +00:00
Abelardo Ayala Rodríguez
437f712a4d Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-07-28 16:07:38 +00:00
Danny Coates
7d35e8f61f fixed local without fxa 2020-07-28 08:23:59 -07:00
Danny Coates
7130c2e7b0 remove browser dependency on "buffer" 2020-07-27 19:23:03 -07:00
Melo46
72d2d6ef31 Pontoon: Update Interlingua (ia) localization of Firefox Send
Co-authored-by: Melo46 <melo@carmu.com>
2020-07-27 19:55:36 +00:00
Abelardo Ayala Rodríguez
eadf223e8d Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-07-27 18:38:23 +00:00
Abelardo Ayala Rodríguez
196099b194 Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-07-27 16:35:20 +00:00
goofy
f0a116d0e4 Pontoon: Update French (fr) localization of Firefox Send
Co-authored-by: goofy <goofy@framasoft.org>
2020-07-27 16:35:16 +00:00
Abelardo Ayala Rodríguez
571049e597 Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-07-27 16:25:41 +00:00
Abelardo Ayala Rodríguez
f637f2f3bc Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-07-27 16:16:34 +00:00
Abelardo Ayala Rodríguez
fe892fdcc1 Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-07-27 16:09:28 +00:00
Abelardo Ayala Rodríguez
f792482478 Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-07-27 15:55:55 +00:00
nandar
5277730e7c Pontoon: Update Sundanese (su) localization of Firefox Send
Co-authored-by: nandar <ia.adnan@gmail.com>
2020-07-27 15:38:13 +00:00
nandar
696b3f7c05 Pontoon: Update Sundanese (su) localization of Firefox Send
Co-authored-by: nandar <ia.adnan@gmail.com>
2020-07-27 15:25:55 +00:00
alamanda
18eebd1ce2 Pontoon: Update Indonesian (id) localization of Firefox Send
Co-authored-by: alamanda <dian.ina@gmail.com>
2020-07-27 15:25:51 +00:00
alamanda
86326e4e6d Pontoon: Update Indonesian (id) localization of Firefox Send
Co-authored-by: alamanda <dian.ina@gmail.com>
2020-07-27 15:15:06 +00:00
Fjoerfoks
4c02a2ecf7 Pontoon: Update Frisian (fy-NL) localization of Firefox Send
Co-authored-by: Fjoerfoks <fryskefirefox@gmail.com>
2020-07-27 14:56:45 +00:00
Fjoerfoks
c00e552f80 Pontoon: Update Frisian (fy-NL) localization of Firefox Send
Co-authored-by: Fjoerfoks <fryskefirefox@gmail.com>
2020-07-27 14:43:59 +00:00
Fjoerfoks
bcefd4f1cb Pontoon: Update Dutch (nl) localization of Firefox Send
Co-authored-by: Fjoerfoks <fryskefirefox@gmail.com>
2020-07-27 14:34:47 +00:00
Hyeonseok Shin
82a91f4117 Pontoon: Update Korean (ko) localization of Firefox Send
Co-authored-by: Hyeonseok Shin <hyeonseok@gmail.com>
2020-07-27 13:07:02 +00:00
Hyeonseok Shin
6539da2c53 Pontoon: Update Korean (ko) localization of Firefox Send
Co-authored-by: Hyeonseok Shin <hyeonseok@gmail.com>
Co-authored-by: daysofjuly <daysofjuly@gmail.com>
2020-07-27 12:56:32 +00:00
Théo Chevalier
c6152cfcb4 Pontoon: Update French (fr) localization of Firefox Send
Co-authored-by: Théo Chevalier <theo.chevalier11@gmail.com>
2020-07-27 11:45:40 +00:00
Mikeyy
9f8e1051b1 Pontoon: Update Croatian (hr) localization of Firefox Send
Co-authored-by: Mikeyy <mihovil@miho.im>
2020-07-27 06:55:04 +00:00
robbp
a2db84e44e Pontoon: Update Romanian (ro) localization of Firefox Send
Co-authored-by: robbp <robbpaun@gmail.com>
2020-07-27 06:44:57 +00:00
Mikeyy
6f967e984f Pontoon: Update Croatian (hr) localization of Firefox Send
Co-authored-by: Mikeyy <mihovil@miho.im>
2020-07-27 06:44:53 +00:00
ZiriSut
6bc0b780be Pontoon: Update Kabyle (kab) localization of Firefox Send
Co-authored-by: ZiriSut <rgebbid@gmail.com>
2020-07-27 05:14:24 +00:00
Andreas Pettersson
a88acee8ee Pontoon: Update Swedish (sv-SE) localization of Firefox Send
Co-authored-by: Andreas Pettersson <az@kth.se>
2020-07-26 21:55:31 +00:00
Luna Jernberg
92759a1f08 Pontoon: Update Swedish (sv-SE) localization of Firefox Send
Co-authored-by: Luna Jernberg <bittin@cafe8bitar.se>
2020-07-26 19:55:58 +00:00
Luna Jernberg
59c4032176 Pontoon: Update Swedish (sv-SE) localization of Firefox Send
Co-authored-by: Luna Jernberg <bittin@cafe8bitar.se>
2020-07-26 19:44:59 +00:00
Quentí
5e9edec93a Pontoon: Update Occitan (oc) localization of Firefox Send
Co-authored-by: Quentí <quentinantonin@free.fr>
2020-07-26 19:14:58 +00:00
Quentí
dfb81409c6 Pontoon: Update Occitan (oc) localization of Firefox Send
Co-authored-by: Quentí <quentinantonin@free.fr>
2020-07-26 19:05:34 +00:00
Selyan Slimane Amiri
5ef569fa71 Pontoon: Update Kabyle (kab) localization of Firefox Send
Co-authored-by: Selyan Slimane Amiri <selyan.kab@gmail.com>
2020-07-26 17:45:07 +00:00
ZiriSut
bfff47641a Pontoon: Update Kabyle (kab) localization of Firefox Send
Co-authored-by: ZiriSut <rgebbid@gmail.com>
2020-07-26 17:34:25 +00:00
ZiriSut
7abe664e79 Pontoon: Update Kabyle (kab) localization of Firefox Send
Co-authored-by: ZiriSut <rgebbid@gmail.com>
2020-07-26 17:25:41 +00:00
ZiriSut
b30ac5605d Pontoon: Update Kabyle (kab) localization of Firefox Send
Co-authored-by: ZiriSut <rgebbid@gmail.com>
2020-07-26 17:05:37 +00:00
Danny Coates
0f289202bc add copyright link to bare /report page 2020-07-26 10:04:50 -07:00
ZiriSut
7223956f01 Pontoon: Update Kabyle (kab) localization of Firefox Send
Co-authored-by: ZiriSut <rgebbid@gmail.com>
2020-07-26 16:45:15 +00:00
ZiriSut
e972c9f723 Pontoon: Update Kabyle (kab) localization of Firefox Send
Co-authored-by: ZiriSut <rgebbid@gmail.com>
2020-07-26 16:34:42 +00:00
Selyan Slimane Amiri
8147d34857 Pontoon: Update Kabyle (kab) localization of Firefox Send
Co-authored-by: Selyan Slimane Amiri <selyan.kab@gmail.com>
2020-07-26 14:31:06 +00:00
G12r
f1c73fcf8d Pontoon: Update Georgian (ka) localization of Firefox Send
Co-authored-by: G12r <georgianization@outlook.com>
2020-07-26 13:22:15 +00:00
Jordi Serratosa
9fa012c04d Pontoon: Update Catalan (ca) localization of Firefox Send
Co-authored-by: Jordi Serratosa <jordis@softcatala.cat>
2020-07-26 13:22:12 +00:00
G12r
75bd771812 Pontoon: Update Georgian (ka) localization of Firefox Send
Co-authored-by: G12r <georgianization@outlook.com>
2020-07-26 13:14:30 +00:00
Jordi Serratosa
b98761e08a Pontoon: Update Catalan (ca) localization of Firefox Send
Co-authored-by: Jordi Serratosa <jordis@softcatala.cat>
2020-07-26 13:14:26 +00:00
G12r
93638aa291 Pontoon: Update Georgian (ka) localization of Firefox Send
Co-authored-by: G12r <georgianization@outlook.com>
2020-07-26 13:05:03 +00:00
Jordi Serratosa
acb73e1dab Pontoon: Update Catalan (ca) localization of Firefox Send
Co-authored-by: Jordi Serratosa <jordis@softcatala.cat>
2020-07-26 13:04:59 +00:00
Ian Neal
2235414620 Pontoon: Update English (Great Britain) (en-GB) localization of Firefox Send
Co-authored-by: Ian Neal <iann_bugzilla@blueyonder.co.uk>
2020-07-26 12:43:45 +00:00
Enol
1aa0fbb712 Pontoon: Update Asturian (ast) localization of Firefox Send
Co-authored-by: Enol <enolp@softastur.org>
2020-07-26 12:23:37 +00:00
Enol
d66d5d65b2 Pontoon: Update Asturian (ast) localization of Firefox Send
Co-authored-by: Enol <enolp@softastur.org>
2020-07-26 12:13:37 +00:00
Björn I
207a27215c Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Firefox Send
Co-authored-by: Björn I. <bjorni.svindseth@yahoo.com>
2020-07-26 11:35:41 +00:00
Björn I
2790b4ca4b Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Firefox Send
Co-authored-by: Björn I. <bjorni.svindseth@yahoo.com>
2020-07-26 11:24:22 +00:00
Luna Jernberg
f653838bf4 Pontoon: Update Swedish (sv-SE) localization of Firefox Send
Co-authored-by: Luna Jernberg <bittin@cafe8bitar.se>
2020-07-26 11:14:38 +00:00
Paulius
a0770d9b86 Pontoon: Update Lithuanian (lt) localization of Firefox Send
Co-authored-by: Paulius <paulius@mozilla.lt>
2020-07-26 10:23:44 +00:00
Paulius
ec1f32fb65 Pontoon: Update Lithuanian (lt) localization of Firefox Send
Co-authored-by: Paulius <paulius@mozilla.lt>
2020-07-26 10:14:52 +00:00
Björn I
ca0a05e6dc Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Firefox Send
Co-authored-by: Björn I. <bjorni.svindseth@yahoo.com>
2020-07-26 09:53:34 +00:00
Melo46
0687ec877c Pontoon: Update Interlingua (ia) localization of Firefox Send
Co-authored-by: Melo46 <melo@carmu.com>
2020-07-26 09:22:47 +00:00
marsf
14209baf55 Pontoon: Update Japanese (ja) localization of Firefox Send
Co-authored-by: marsf <chimantaea_mirabilis@yahoo.co.jp>
2020-07-26 03:23:16 +00:00
marsf
75938febfa Pontoon: Update Japanese (ja) localization of Firefox Send
Co-authored-by: marsf <chimantaea_mirabilis@yahoo.co.jp>
2020-07-26 03:13:21 +00:00
marsf
a9e9902468 Pontoon: Update Japanese (ja) localization of Firefox Send
Co-authored-by: marsf <chimantaea_mirabilis@yahoo.co.jp>
2020-07-26 03:05:59 +00:00
Cristian Silaghi
91cd7684c4 Pontoon: Update Romanian (ro) localization of Firefox Send
Co-authored-by: Cristian Silaghi <cristian.silaghi@mozilla.ro>
2020-07-26 01:14:11 +00:00
Chengings
8bf8c8d95a Pontoon: Update Thai (th) localization of Firefox Send
Co-authored-by: Chengings <chengings@gmail.com>
2020-07-25 23:53:30 +00:00
Chengings
594916a59d Pontoon: Update Thai (th) localization of Firefox Send
Co-authored-by: Chengings <chengings@gmail.com>
2020-07-25 23:44:02 +00:00
José Manuel
6213762d96 Pontoon: Update Triqui (trs) localization of Firefox Send
Co-authored-by: José Manuel <triki2014jm@gmail.com>
2020-07-25 22:44:29 +00:00
Danny Coates
d9cbe058ab added hmac auth to report route 2020-07-25 15:36:29 -07:00
Itiel
2f6119e2f1 Pontoon: Update Hebrew (he) localization of Firefox Send
Co-authored-by: Itiel <itiel_yn8@walla.com>
2020-07-25 22:34:04 +00:00
Itiel
21d1839818 Pontoon: Update Hebrew (he) localization of Firefox Send
Co-authored-by: Itiel <itiel_yn8@walla.com>
2020-07-25 22:25:05 +00:00
Jakob Kappel
95cde415f6 Pontoon: Update Danish (da) localization of Firefox Send
Co-authored-by: Jakob Kappel <jakobkpetersen@gmail.com>
2020-07-25 21:34:08 +00:00
Gabriela
2e6d1abac2 Pontoon: Update Spanish (Argentina) (es-AR) localization of Firefox Send
Co-authored-by: Gabriela <gmontagu@gmail.com>
2020-07-25 20:33:29 +00:00
Gabriela
3a36a718d2 Pontoon: Update Spanish (Argentina) (es-AR) localization of Firefox Send
Co-authored-by: Gabriela <gmontagu@gmail.com>
2020-07-25 20:23:23 +00:00
Joergen
04b1623f15 Pontoon: Update Danish (da) localization of Firefox Send
Co-authored-by: Joergen <joergenr@stofanet.dk>
2020-07-25 20:13:26 +00:00
Joergen
10ffa1d785 Pontoon: Update Danish (da) localization of Firefox Send
Co-authored-by: Joergen <joergenr@stofanet.dk>
Co-authored-by: Jakob Kappel <jakobkpetersen@gmail.com>
2020-07-25 20:06:37 +00:00
Enol
93e98b9c30 Pontoon: Update Asturian (ast) localization of Firefox Send
Co-authored-by: Enol <enolp@softastur.org>
2020-07-25 19:53:30 +00:00
Enol
618e169895 Pontoon: Update Asturian (ast) localization of Firefox Send
Co-authored-by: Enol <enolp@softastur.org>
2020-07-25 19:43:49 +00:00
Enol
91584649c5 Pontoon: Update Asturian (ast) localization of Firefox Send
Co-authored-by: Enol <enolp@softastur.org>
2020-07-25 19:35:05 +00:00
Michael Wolf
31805031ca Pontoon: Update Sorbian, Upper (hsb) localization of Firefox Send
Co-authored-by: Michael Wolf <milupo@sorbzilla.de>
2020-07-25 19:05:07 +00:00
Michael Wolf
58ffcb171d Pontoon: Update Sorbian, Lower (dsb) localization of Firefox Send
Co-authored-by: Michael Wolf <milupo@sorbzilla.de>
2020-07-25 19:05:03 +00:00
Danny Coates
55df061567 refactored storage, style tweaks 2020-07-25 11:25:55 -07:00
Mikalai Udodau
8fb770a4ea Pontoon: Update Belarusian (be) localization of Firefox Send
Co-authored-by: Mikalai Udodau <crom-a@tut.by>
2020-07-25 17:23:58 +00:00
Juraj Cigáň
83cae687c8 Pontoon: Update Slovak (sk) localization of Firefox Send
Co-authored-by: Juraj Cigáň <kusavica@gmail.com>
2020-07-25 15:50:47 +00:00
Francesco Lodolo
75444ead46 Pontoon: Update Italian (it) localization of Firefox Send
Co-authored-by: Francesco Lodolo <flod+pontoon@mozilla.com>
2020-07-25 15:26:24 +00:00
Cláudio Esperança
df62189346 Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Firefox Send
Co-authored-by: Cláudio Esperança <cesperanc@gmail.com>
2020-07-25 14:52:01 +00:00
Muhend Belkacem
b1e25ed40c Pontoon: Update Kabyle (kab) localization of Firefox Send
Co-authored-by: Muhend Belkacem <taqbaylitassa@gmail.com>
2020-07-25 14:51:58 +00:00
Michele Rodaro
abef9d9b7f Pontoon: Update Italian (it) localization of Firefox Send
Co-authored-by: Michele Rodaro <michele.rodaro@mozillaitalia.org>
Co-authored-by: Francesco Lodolo <flod+pontoon@mozilla.com>
2020-07-25 14:51:54 +00:00
Michael Wolf
748d9b48ff Pontoon: Update Sorbian, Lower (dsb) localization of Firefox Send
Co-authored-by: Michael Wolf <milupo@sorbzilla.de>
2020-07-25 14:06:59 +00:00
Pin-guang Chen
10f60dd2dd Pontoon: Update Chinese (Taiwan) (zh-TW) localization of Firefox Send
Co-authored-by: Pin-guang Chen <petercpg@mail.moztw.org>
2020-07-25 14:06:55 +00:00
Michael Wolf
1882ce5708 Pontoon: Update Sorbian, Lower (dsb) localization of Firefox Send
Co-authored-by: Michael Wolf <milupo@sorbzilla.de>
2020-07-25 13:54:58 +00:00
Michael Wolf
20db9ee6fd Pontoon: Update Sorbian, Lower (dsb) localization of Firefox Send
Co-authored-by: Michael Wolf <milupo@sorbzilla.de>
2020-07-25 13:44:13 +00:00
Piotr Drąg
069efcd257 Pontoon: Update Polish (pl) localization of Firefox Send
Co-authored-by: Piotr Drąg <piotrdrag@gmail.com>
2020-07-25 13:06:13 +00:00
Pin-guang Chen
446e993420 Pontoon: Update Chinese (Taiwan) (zh-TW) localization of Firefox Send
Co-authored-by: Pin-guang Chen <petercpg@mail.moztw.org>
2020-07-25 13:06:09 +00:00
Selim Şumlu
588c793b98 Pontoon: Update Turkish (tr) localization of Firefox Send
Co-authored-by: Selim Şumlu <selim@sum.lu>
2020-07-25 12:45:25 +00:00
Selim Şumlu
3c6f45464b Pontoon: Update Turkish (tr) localization of Firefox Send
Co-authored-by: Selim Şumlu <selim@sum.lu>
2020-07-25 12:34:16 +00:00
Michael Wolf
76ecbbecc6 Pontoon: Update Sorbian, Upper (hsb) localization of Firefox Send
Co-authored-by: Michael Wolf <milupo@sorbzilla.de>
2020-07-25 12:34:12 +00:00
Pin-guang Chen
ab1802a371 Pontoon: Update Chinese (Taiwan) (zh-TW) localization of Firefox Send
Co-authored-by: Pin-guang Chen <petercpg@mail.moztw.org>
2020-07-25 12:34:09 +00:00
Selim Şumlu
15f4f386fb Pontoon: Update Turkish (tr) localization of Firefox Send
Co-authored-by: Selim Şumlu <selim@sum.lu>
2020-07-25 12:24:58 +00:00
Michael Wolf
84e9e9f654 Pontoon: Update Sorbian, Upper (hsb) localization of Firefox Send
Co-authored-by: Michael Wolf <milupo@sorbzilla.de>
2020-07-25 12:24:54 +00:00
Quế Tùng
e1e7887237 Pontoon: Update Vietnamese (vi) localization of Firefox Send
Co-authored-by: Quế Tùng <best.cloney.1301@gmail.com>
2020-07-25 12:14:10 +00:00
Gwenn
0c274139ed Pontoon: Update Breton (br) localization of Firefox Send
Co-authored-by: Gwenn <tornoz@laposte.net>
2020-07-25 11:15:10 +00:00
Rhoslyn Prys
1dbf7c7b2a Pontoon: Update Welsh (cy) localization of Firefox Send
Co-authored-by: Rhoslyn Prys <rprys@posteo.net>
2020-07-25 10:54:37 +00:00
Rhoslyn Prys
0bec884397 Pontoon: Update Welsh (cy) localization of Firefox Send
Co-authored-by: Rhoslyn Prys <rprys@posteo.net>
2020-07-25 10:43:33 +00:00
Rhoslyn Prys
58095ac676 Pontoon: Update Welsh (cy) localization of Firefox Send
Co-authored-by: Rhoslyn Prys <rprys@posteo.net>
2020-07-25 10:36:09 +00:00
Michael Köhler
b680d20bca Pontoon: Update German (de) localization of Firefox Send
Co-authored-by: Michael Köhler <michael.koehler1@gmx.de>
2020-07-25 07:35:29 +00:00
Michal Stanke
5eab9703af Pontoon: Update Czech (cs) localization of Firefox Send
Co-authored-by: Michal Stanke <mstanke@mozilla.cz>
2020-07-25 07:15:19 +00:00
Danny Coates
5c5853c645 minor style tweaks and refresh token fixes 2020-07-24 22:05:35 -07:00
Marcelo Ghelman
4674666807 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Co-authored-by: Marcelo Ghelman <marcelo.ghelman@gmail.com>
2020-07-25 02:24:29 +00:00
ravmn
5626e128f2 Pontoon: Update Spanish (Chile) (es-CL) localization of Firefox Send
Co-authored-by: ravmn <ravmn@ravmn.cl>
2020-07-25 02:14:50 +00:00
Marcelo Ghelman
1fa714924e Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Co-authored-by: Marcelo Ghelman <marcelo.ghelman@gmail.com>
2020-07-25 02:14:46 +00:00
Marcelo Ghelman
89bfa74bb8 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Co-authored-by: Marcelo Ghelman <marcelo.ghelman@gmail.com>
Co-authored-by: Mateus Generoso <mtsgeneroso@gmail.com>
2020-07-25 02:06:21 +00:00
πάθοςγιατηζωή
12d6c029ff Pontoon: Update Chinese (China) (zh-CN) localization of Firefox Send
Co-authored-by: πάθοςγιατηζωή <eloli@foxmail.com>
2020-07-25 01:54:31 +00:00
πάθοςγιατηζωή
c580282a27 Pontoon: Update Chinese (China) (zh-CN) localization of Firefox Send
Co-authored-by: πάθοςγιατηζωή <eloli@foxmail.com>
2020-07-25 01:43:53 +00:00
Danny Coates
f3a1fde07f added oauth refresh token support 2020-07-24 18:19:33 -07:00
πάθοςγιατηζωή
ce507c557f Pontoon: Update Chinese (China) (zh-CN) localization of Firefox Send
Co-authored-by: πάθοςγιατηζωή <eloli@foxmail.com>
2020-07-25 01:07:30 +00:00
Håvar Henriksen
6c984fa127 Pontoon: Update Norwegian Bokmål (nb-NO) localization of Firefox Send
Co-authored-by: Håvar Henriksen <havar@firefox.no>
2020-07-24 22:54:51 +00:00
Håvar Henriksen
359d5d6bdd Pontoon: Update Norwegian Bokmål (nb-NO) localization of Firefox Send
Co-authored-by: Håvar Henriksen <havar@firefox.no>
2020-07-24 22:43:48 +00:00
Michael Wolf
7698564a4d Pontoon: Update Sorbian, Upper (hsb) localization of Firefox Send
Co-authored-by: Michael Wolf <milupo@sorbzilla.de>
2020-07-24 22:22:43 +00:00
Marcelo Ghelman
546b58d4d5 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Co-authored-by: Marcelo Ghelman <marcelo.ghelman@gmail.com>
2020-07-24 22:22:39 +00:00
Michael Wolf
813a2d2f25 Pontoon: Update Sorbian, Upper (hsb) localization of Firefox Send
Co-authored-by: Michael Wolf <milupo@sorbzilla.de>
2020-07-24 22:13:11 +00:00
Michael Wolf
f8d61479d2 Pontoon: Update Sorbian, Upper (hsb) localization of Firefox Send
Co-authored-by: Michael Wolf <milupo@sorbzilla.de>
2020-07-24 22:06:29 +00:00
Іhor Hordiichuk
afcc06ad14 Pontoon: Update Ukrainian (uk) localization of Firefox Send
Co-authored-by: Іhor Hordiichuk <igor_ck@outlook.com>
2020-07-24 20:43:31 +00:00
Kohei Yoshino
84b3796710 Pontoon: Update English (Canada) (en-CA) localization of Firefox Send
Co-authored-by: Kohei Yoshino <kohei.yoshino@gmail.com>
2020-07-24 20:13:10 +00:00
Luna Jernberg
8fd0a4cb01 Pontoon: Update Swedish (sv-SE) localization of Firefox Send
Co-authored-by: Luna Jernberg <bittin@cafe8bitar.se>
2020-07-24 19:54:49 +00:00
Balázs Meskó
2a947a031d Pontoon: Update Hungarian (hu) localization of Firefox Send
Co-authored-by: Balázs Meskó <meskobalazs@mailbox.org>
2020-07-24 19:54:45 +00:00
Danny Coates
0a8663aa51 Merge pull request #1496 from dannycoates/dear-nice-things-too
Begin implementing a reporting mechanism
2020-07-24 12:35:28 -07:00
Danny Coates
17057e725d add fxa_required option 2020-07-24 10:40:47 -07:00
Danny Coates
9891d1f0ba Begin implementing a reporting mechanism 2020-07-24 08:32:43 -07:00
Abelardo Ayala Rodríguez
3e9be67641 Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-07-16 18:41:42 +00:00
వీవెన్
402c8351bd Pontoon: Update Telugu (te) localization of Firefox Send
Co-authored-by: వీవెన్ <veeven@gmail.com>
2020-07-15 18:54:42 +00:00
Danny Coates
ccbcb69666 Merge pull request #1434 from MichaelPeter-Shockoe/master
modify connect-src of Content Security Policy to include dynamic wss URL based on configured base URL
2020-07-09 19:37:02 -07:00
Danny Coates
e6ff9e486b Merge pull request #1063 from hbakhtiyor/patch-1
Convert ContentLength of storage to number
2020-07-09 19:34:33 -07:00
Danny Coates
17afd6ad58 Merge pull request #1416 from factorysh/s3_endpoint
Choose your endpoint.
2020-07-09 19:33:21 -07:00
Danny Coates
7dd1fcca9b Merge pull request #1480 from jackyzy823/fxa-csp
Handle Content-Security-Policy for self hosting FxA
2020-07-09 19:31:06 -07:00
Danny Coates
d5319f4fcf Merge pull request #1471 from edibopp/patch-1
Mention updated Node version 12.x in README
2020-07-09 19:20:04 -07:00
Danny Coates
a3d880fc4f Merge pull request #1475 from 2br-2b/patch-1
Fixed a few minor formatting issues
2020-07-09 19:19:22 -07:00
Danny Coates
8a9a823842 Merge pull request #1486 from rlr/fix-vpn-url
Update URL for the VPN
2020-07-09 19:17:52 -07:00
Danny Coates
3195ee7d16 Merge pull request #1465 from minvs1/redis-retry-configs
Allow to set custom retry parameters
2020-07-09 19:17:28 -07:00
Francesco Lodolo
f565954a54 Pontoon: Update Interlingua (ia) localization of Firefox Send
Co-authored-by: Francesco Lodolo <flod+pontoon@mozilla.com>
2020-07-09 13:57:32 +00:00
Francesco Lodolo
4abfd7dd6e Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: Francesco Lodolo <flod+pontoon@mozilla.com>
2020-07-09 13:57:28 +00:00
Francesco Lodolo
e930275042 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Co-authored-by: Francesco Lodolo <flod+pontoon@mozilla.com>
2020-07-09 13:57:25 +00:00
Francesco Lodolo
960e29f800 Pontoon: Update Asturian (ast) localization of Firefox Send
Co-authored-by: Francesco Lodolo <flod+pontoon@mozilla.com>
2020-07-09 13:57:21 +00:00
Francesco Lodolo
7e637ae453 Pontoon: Update Aragonese (an) localization of Firefox Send
Co-authored-by: Francesco Lodolo <flod+pontoon@mozilla.com>
2020-07-09 13:57:18 +00:00
Pontoon
cca6b470b0 Pontoon: Update Tagalog (tl) localization of Firefox Send 2020-07-09 13:52:21 +00:00
Francesco Lodolo
829d10f77f Pontoon: Update Serbian (sr) localization of Firefox Send
Co-authored-by: Francesco Lodolo <flod+pontoon@mozilla.com>
2020-07-09 13:52:17 +00:00
Francesco Lodolo
b7d7bb885d Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Firefox Send
Co-authored-by: Francesco Lodolo <flod+pontoon@mozilla.com>
2020-07-09 13:52:13 +00:00
Francesco Lodolo
31e2e00b24 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: Francesco Lodolo <flod+pontoon@mozilla.com>
2020-07-09 13:52:10 +00:00
Francesco Lodolo
0ab2ec6a5c Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: Francesco Lodolo <flod+pontoon@mozilla.com>
2020-07-09 13:52:06 +00:00
Francesco Lodolo
369b0b2614 Pontoon: Update Tagalog (tl) localization of Firefox Send
Co-authored-by: Francesco Lodolo <flod+pontoon@mozilla.com>
2020-07-09 13:45:29 +00:00
Abelardo Ayala Rodríguez
b064152955 Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-07-08 17:50:17 +00:00
Abelardo Ayala Rodríguez
438b36dd28 Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-07-08 16:13:57 +00:00
Abelardo Ayala Rodríguez
a429b89322 Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-06-30 16:34:13 +00:00
Marcelo Ghelman
bd0117628f Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Co-authored-by: Marcelo Ghelman <marcelo.ghelman@gmail.com>
2020-06-27 23:07:05 +00:00
Marcelo Ghelman
c4299d05a1 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Co-authored-by: Marcelo Ghelman <marcelo.ghelman@gmail.com>
2020-06-27 22:53:15 +00:00
ali.malek.71
e3027d2c59 Pontoon: Update Persian (fa) localization of Firefox Send
Co-authored-by: ali.malek.71 <ali.malek.71@gmail.com>
2020-06-25 14:23:20 +00:00
Ricky Rosario
be055ff7ba Update URL for the VPN 2020-06-24 19:29:30 -04:00
jnunezf96
5a53eb85fb Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-21 05:29:25 +00:00
jnunezf96
c249f26b4a Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-21 05:14:44 +00:00
jnunezf96
b229547057 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-21 05:06:59 +00:00
jnunezf96
334f225f3d Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-21 04:53:56 +00:00
Selyan Slimane Amiri
e8f3379ddb Pontoon: Update Kabyle (kab) localization of Firefox Send
Co-authored-by: Selyan Slimane Amiri <selyan.kab@gmail.com>
2020-06-20 17:13:32 +00:00
zankomhamad
3dd3fa9808 Pontoon: Update Central Kurdish (ckb) localization of Firefox Send
Co-authored-by: Jwtiyar <jwtiyar@gmail.com>
Co-authored-by: zankomhamad <zankomhamad@outlook.com>
2020-06-19 09:14:38 +00:00
Frederick Villaluna
9459e4bca8 Pontoon: Update Tagalog (tl) localization of Firefox Send
Co-authored-by: Frederick Villaluna <fv_comscie@yahoo.com>
2020-06-16 11:53:07 +00:00
jnunezf96
888e99841e Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-16 07:25:18 +00:00
biobell2000
949dcce5d7 Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: biobell2000 <biobell2000@gmail.com>
2020-06-15 11:25:17 +00:00
biobell2000
0c47991de6 Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: Abdulrasheed Idris <Abdulrash6211@gmail.com>
Co-authored-by: biobell2000 <biobell2000@gmail.com>
2020-06-15 11:10:30 +00:00
biobell2000
63b96310d3 Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: biobell2000 <biobell2000@gmail.com>
2020-06-15 10:57:41 +00:00
biobell2000
da37b9d96f Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: biobell2000 <biobell2000@gmail.com>
2020-06-15 10:41:46 +00:00
biobell2000
931cfd108d Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: biobell2000 <biobell2000@gmail.com>
2020-06-15 10:32:08 +00:00
Garysqo
cc7ea99ca9 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
Co-authored-by: Garysqo <garyspleen@gmail.com>
2020-06-15 06:12:51 +00:00
jnunezf96
996a7e4184 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 06:05:33 +00:00
jnunezf96
e5627698c4 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 05:42:41 +00:00
jnunezf96
1fdccd4dde Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 05:33:38 +00:00
jnunezf96
b8c26aee06 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 04:23:55 +00:00
jnunezf96
b7d65517b3 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 04:05:57 +00:00
jnunezf96
4f5b804b5d Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 03:35:11 +00:00
jnunezf96
a74491af40 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 03:15:25 +00:00
jnunezf96
09955a0231 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 03:07:08 +00:00
jnunezf96
301f6e87f6 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 02:52:39 +00:00
jnunezf96
8c0f1fbe3b Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 02:06:49 +00:00
jnunezf96
b81535c820 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 01:54:38 +00:00
jnunezf96
f5f0a430eb Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 01:44:55 +00:00
jnunezf96
ca55dedad4 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 01:35:53 +00:00
jnunezf96
76a3d6fc03 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 00:54:04 +00:00
jnunezf96
f9b5cadf17 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 00:43:32 +00:00
jnunezf96
458ef649f3 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 00:35:40 +00:00
jnunezf96
de063f75e5 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 00:23:14 +00:00
jackyzy823
e2876b119d add configs to handle content-security-policy correctly for custom fxa urls 2020-06-11 21:57:48 +08:00
CLASSIFIED
25d41073b7 Fixed a few minor formatting issues
Added a few commas, deleted an extra period
2020-06-08 21:47:39 -05:00
ada_okeke60
5fb9e395d5 Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: ada_okeke60 <ada_okeke60@ymail.com>
2020-06-09 00:15:04 +00:00
ada_okeke60
c73ddcd464 Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: ada_okeke60 <ada_okeke60@ymail.com>
2020-06-09 00:06:19 +00:00
biobell2000
3a98c295e0 Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: biobell2000 <biobell2000@gmail.com>
2020-06-08 10:44:46 +00:00
biobell2000
899f921da3 Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: biobell2000 <biobell2000@gmail.com>
2020-06-08 10:33:55 +00:00
biobell2000
97b9d24134 Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: biobell2000 <biobell2000@gmail.com>
2020-06-08 10:25:09 +00:00
biobell2000
ab9dbecbd6 Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: biobell2000 <biobell2000@gmail.com>
2020-06-08 10:16:31 +00:00
biobell2000
0cf77d94cb Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: biobell2000 <biobell2000@gmail.com>
2020-06-08 10:07:24 +00:00
biobell2000
bfe3a4067d Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: biobell2000 <biobell2000@gmail.com>
2020-06-07 17:06:23 +00:00
ada_okeke60
0226483c30 Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: ada_okeke60 <ada_okeke60@ymail.com>
Co-authored-by: Umegbewe <nwebedujunior55@gmail.com>
2020-06-07 10:15:04 +00:00
Sara Todaro
a6dbb9a58f Pontoon: Update Italian (it) localization of Firefox Send
Co-authored-by: Sara Todaro <sara.todaro@mozillaitalia.org>
2020-06-06 09:33:44 +00:00
Mozilla Pontoon
c9e691bdc2 Pontoon: Update Italian (it) localization of Firefox Send 2020-06-06 07:57:15 +00:00
biobell2000
e88bfb597c Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: biobell2000 <biobell2000@gmail.com>
2020-06-06 06:05:57 +00:00
ada_okeke60
190ded1ba7 Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: ada_okeke60 <ada_okeke60@ymail.com>
2020-06-05 17:44:48 +00:00
Ayobamiadebayo375
7b7f1f3223 Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: babalolaoreoluwa4 <babalolaoreoluwa4@gmail.com>
Co-authored-by: Ayobamiadebayo375 <Ayobamiadebayo375@gmail.com>
2020-06-05 16:23:29 +00:00
ada_okeke60
1f4473c278 Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: ada_okeke60 <ada_okeke60@ymail.com>
Co-authored-by: Ebukaabazie <Ebukaabazie@gmail.com>
Co-authored-by: sugabelly <sugabelly@gmail.com>
2020-06-05 10:35:15 +00:00
ada_okeke60
27e86640be Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: ada_okeke60 <ada_okeke60@ymail.com>
Co-authored-by: Umegbewe <nwebedujunior55@gmail.com>
Co-authored-by: sugabelly <sugabelly@gmail.com>
2020-06-05 10:22:46 +00:00
Gisela Solis
74d151d12c Pontoon: Update Pai pai (pai) localization of Firefox Send
Co-authored-by: Gisela Solis <gisela.solis.roman@gmail.com>
2020-06-04 02:23:35 +00:00
Abdulrash6211
a370f01908 Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: Abdulrash6211 <Abdulrash6211@gmail.com>
Co-authored-by: Umegbewe <nwebedujunior55@gmail.com>
2020-06-03 23:53:50 +00:00
Umegbewe
3078e1f90c Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: Umegbewe <nwebedujunior55@gmail.com>
2020-06-03 23:44:27 +00:00
John Zonunmawi Vankal
d90830b285 Pontoon: Update Mizo (lus) localization of Firefox Send
Co-authored-by: John Zonunmawi Vankal <zonunmawia@gmail.com>
2020-06-03 18:43:33 +00:00
Umegbewe
74288cdba6 Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: ada_okeke60 <ada_okeke60@ymail.com>
Co-authored-by: Umegbewe <nwebedujunior55@gmail.com>
2020-06-03 12:14:46 +00:00
Ayobamiadebayo375
a37e59cdb3 Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: Ayobamiadebayo375 <Ayobamiadebayo375@gmail.com>
2020-06-03 11:11:24 +00:00
ada_okeke60
ee5f63e11c Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: ada_okeke60 <ada_okeke60@ymail.com>
2020-06-03 10:45:14 +00:00
ada_okeke60
b02f2768d3 Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: ada_okeke60 <ada_okeke60@ymail.com>
2020-06-03 10:23:56 +00:00
Jwtiyar
da3a7c1e98 Pontoon: Update Central Kurdish (ckb) localization of Firefox Send
Co-authored-by: Jwtiyar <jwtiyar@gmail.com>
2020-06-02 19:35:42 +00:00
Jwtiyar
8180406467 Pontoon: Update Central Kurdish (ckb) localization of Firefox Send
Co-authored-by: Jwtiyar <jwtiyar@gmail.com>
2020-06-02 19:25:53 +00:00
Jwtiyar
be595de148 Pontoon: Update Central Kurdish (ckb) localization of Firefox Send
Co-authored-by: Jwtiyar <jwtiyar@gmail.com>
2020-06-02 19:14:50 +00:00
sugabelly
395b6518ee Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: sugabelly <sugabelly@gmail.com>
2020-06-02 18:37:06 +00:00
sugabelly
49243506cb Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: sugabelly <sugabelly@gmail.com>
2020-06-02 18:23:38 +00:00
sugabelly
69948f4a4a Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: sugabelly <sugabelly@gmail.com>
2020-06-02 18:16:25 +00:00
sugabelly
85aaeb9892 Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: sugabelly <sugabelly@gmail.com>
2020-06-02 17:53:02 +00:00
Umegbewe
95098d5828 Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: Umegbewe <nwebedujunior55@gmail.com>
2020-06-02 17:45:03 +00:00
Victor Davila
eb4aa04f7e Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Co-authored-by: Victor Davila <victorhdd@gmail.com>
2020-06-01 19:34:06 +00:00
Victor Davila
5afb940718 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Co-authored-by: Victor Davila <victorhdd@gmail.com>
2020-06-01 18:53:34 +00:00
Gisela Solis
b6e956e086 Pontoon: Update Ixil (ixl) localization of Firefox Send
Co-authored-by: Gisela Solis <gisela.solis.roman@gmail.com>
2020-06-01 00:53:57 +00:00
dskmori
681ca8197c Pontoon: Update Japanese (ja) localization of Firefox Send
Co-authored-by: dskmori <ghoti.fish.dsk@gmail.com>
2020-05-30 12:21:43 +00:00
ali.malek.71
21e312dac3 Pontoon: Update Persian (fa) localization of Firefox Send
Co-authored-by: ali.malek.71 <ali.malek.71@gmail.com>
2020-05-27 04:13:04 +00:00
Eduard Bopp
5a02e32aec Mention updated Node version 12.x in README
Just passing by I noticed that it seems like it was overlooked to update the README in 89469e3c9c
2020-05-15 15:53:56 +02:00
fcortess
dfe3631bcd Pontoon: Update Spanish (Chile) (es-CL) localization of Firefox Send
Co-authored-by: fcortess <fcortess@pm.me>
2020-05-12 00:05:24 +00:00
Marcelo Ghelman
b7c53bf8e2 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Co-authored-by: Marcelo Ghelman <marcelo.ghelman@gmail.com>
2020-05-11 16:04:31 +00:00
Marcelo Ghelman
9bdf9c4416 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Co-authored-by: Marcelo Ghelman <marcelo.ghelman@gmail.com>
2020-05-11 15:51:20 +00:00
Gisela Solis
7116c1c06e Pontoon: Update Ixil (ixl) localization of Firefox Send
Co-authored-by: Gisela Solis <gisela.solis.roman@gmail.com>
2020-05-04 15:13:21 +00:00
Gisela Solis
f210394d84 Pontoon: Update Ixil (ixl) localization of Firefox Send
Co-authored-by: Gisela Solis <gisela.solis.roman@gmail.com>
2020-04-30 15:41:56 +00:00
Gisela Solis
0679a29cdc Pontoon: Update Ixil (ixl) localization of Firefox Send
Co-authored-by: Gisela Solis <gisela.solis.roman@gmail.com>
2020-04-30 15:32:10 +00:00
Danny Coates
7a9a75794e v3.0.22 2020-04-29 21:40:53 -07:00
Danny Coates
89469e3c9c updated node to 12 2020-04-29 17:38:55 -07:00
Danny Coates
01110b4ec1 Merge pull request #1467 from flodolo/locales_20200423
Add new locales to prod (azz, fa, hus, hy-AM)
2020-04-29 16:53:52 -07:00
Milo
b54cd58602 Pontoon: Update Croatian (hr) localization of Firefox Send
Co-authored-by: Milo <mail@milotype.de>
2020-04-26 11:22:26 +00:00
Quentí
6cc00be4b5 Pontoon: Update Occitan (oc) localization of Firefox Send
Co-authored-by: Quentí <quentinantonin@free.fr>
2020-04-25 09:53:06 +00:00
ali.malek.71
b40594f0ee Pontoon: Update Persian (fa) localization of Firefox Send
Co-authored-by: ali.malek.71 <ali.malek.71@gmail.com>
Co-authored-by: abtin <abtin@riseup.net>
2020-04-23 17:12:52 +00:00
Francesco Lodolo [:flod]
01f4ceca23 Add new locales to prod (azz, fa, hus, hy-AM) 2020-04-23 07:33:37 +02:00
minvs1
7aead375d8 Allow to set custom retry parameters 2020-04-21 23:30:39 +03:00
Fjoerfoks
471c9e8559 Pontoon: Update Frisian (fy-NL) localization of Firefox Send
Co-authored-by: Fjoerfoks <fryskefirefox@gmail.com>
2020-04-21 12:23:03 +00:00
Manuela Silva
f45960263f Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Firefox Send
Co-authored-by: Manuela Silva <manuelarodsilva@gmail.com>
2020-04-05 21:14:41 +00:00
Danny Coates
0ee9cc69a8 Merge pull request #1455 from mozilla/update-promo-to-vpn
update promo to be for the vpn
2020-03-31 13:12:14 -07:00
johngruen
2a3db78f97 update promo to be for the vpn 2020-03-31 22:03:08 +02:00
Muhend Belkacem
e5f9265979 Pontoon: Update Kabyle (kab) localization of Firefox Send
Localization authors:
- Muhend Belkacem <taqbaylitassa@gmail.com>
2020-03-29 09:53:25 +00:00
bulut
00416b5063 Pontoon: Update Turkish (tr) localization of Firefox Send
Localization authors:
- bulut <bulut@tokmak.org>
2020-03-27 21:43:57 +00:00
Mathieu Lecarme
5a70362b79 Fix: AWS.config is a stub. 2020-03-23 15:48:07 +01:00
Mathieu Lecarme
97deb78de6 Use the config object. 2020-03-23 15:48:07 +01:00
Mathieu Lecarme
2d22573588 Choose your endpoint.
See https://github.com/mozilla/send/issues/1239
2020-03-23 15:48:07 +01:00
Enol
deec85be14 Pontoon: Update Asturian (ast) localization of Firefox Send
Localization authors:
- Enol <enolp@softastur.org>
2020-03-21 14:23:33 +00:00
abtin
6342203256 Pontoon: Update Persian (fa) localization of Firefox Send
Localization authors:
- ali.malek.71 <ali.malek.71@gmail.com>
- abtin <abtin@riseup.net>
2020-03-15 20:23:35 +00:00
abtin
949fbb68c3 Pontoon: Update Persian (fa) localization of Firefox Send
Localization authors:
- abtin <abtin@riseup.net>
2020-03-15 20:12:56 +00:00
abtin
222c21ddf9 Pontoon: Update Persian (fa) localization of Firefox Send
Localization authors:
- abtin <abtin@riseup.net>
2020-03-15 19:33:08 +00:00
abtin
ae20e55c50 Pontoon: Update Persian (fa) localization of Firefox Send
Localization authors:
- abtin <abtin@riseup.net>
2020-03-15 19:23:23 +00:00
Milo
765da48b0c Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Milo <mail@milotype.de>
2020-03-07 16:13:48 +00:00
Milo
3769a17300 Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Milo <mail@milotype.de>
2020-03-07 16:04:11 +00:00
Milo
cad853b196 Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Milo <mail@milotype.de>
2020-03-07 15:52:28 +00:00
Milo
804128b7c8 Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Milo <mail@milotype.de>
2020-03-07 15:41:31 +00:00
Milo
e136b9dc63 Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Milo <mail@milotype.de>
2020-03-07 15:22:01 +00:00
Milo
b4ffb8cf01 Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Milo <mail@milotype.de>
2020-03-07 15:04:40 +00:00
Milo
e24c1103b3 Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Milo <mail@milotype.de>
2020-03-07 14:52:59 +00:00
Bald3mar
07202e684a Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2020-03-06 22:04:23 +00:00
manuel padilla sanchez
ca774258d6 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-03-03 18:33:07 +00:00
manuel padilla sanchez
93d48c5787 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-03-03 18:23:04 +00:00
passionforlife
aa65f20afa Pontoon: Update Chinese (China) (zh-CN) localization of Firefox Send
Localization authors:
- passionforlife <eloli@foxmail.com>
2020-02-29 00:52:29 +00:00
Milo
f3caa9841c Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Milo <mail@milotype.de>
- Mikeyy <mihovil@miho.im>
2020-02-28 18:41:32 +00:00
Mozilla Pontoon
4c6663948b Pontoon: Update Croatian (hr) localization of Firefox Send 2020-02-26 21:33:38 +00:00
manuel padilla sanchez
c5a4f920c4 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-22 16:13:10 +00:00
manuel padilla sanchez
c6cbb727da Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-22 16:03:40 +00:00
manuel padilla sanchez
830337b403 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-22 15:52:34 +00:00
manuel padilla sanchez
c11f8a059e Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-22 15:43:28 +00:00
manuel padilla sanchez
6fd1ed18a1 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-22 15:32:04 +00:00
manuel padilla sanchez
0338382fdf Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-22 15:22:42 +00:00
manuel padilla sanchez
aac2b8e6f4 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-22 09:22:11 +00:00
manuel padilla sanchez
40a111a2e9 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-22 09:12:13 +00:00
manuel padilla sanchez
cbb0b86712 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-22 09:04:37 +00:00
manuel padilla sanchez
51465a2797 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-22 08:52:05 +00:00
xcffl
fa99c75313 Pontoon: Update Chinese (China) (zh-CN) localization of Firefox Send
Localization authors:
- xcffl <xcffl@outlook.com>
2020-02-22 08:23:32 +00:00
manuel padilla sanchez
0b4bd40b32 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-18 20:06:38 +00:00
manuel padilla sanchez
c5b2dc826b Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-18 19:53:35 +00:00
manuel padilla sanchez
1f7a58ea41 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-18 19:43:05 +00:00
manuel padilla sanchez
ca6e2963e3 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-18 19:33:26 +00:00
manuel padilla sanchez
9f019f100d Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-18 19:14:53 +00:00
manuel padilla sanchez
5e91a72cd9 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-18 19:05:52 +00:00
manuel padilla sanchez
01d7383ae0 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-18 18:53:33 +00:00
manuel padilla sanchez
74234fa03c Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-18 18:43:16 +00:00
manuel padilla sanchez
49b24294b1 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-17 19:22:28 +00:00
manuel padilla sanchez
5feb07a251 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-17 19:12:50 +00:00
manuel padilla sanchez
28b69c4f14 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-17 19:04:24 +00:00
manuel padilla sanchez
19e5fd269e Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-17 18:51:47 +00:00
manuel padilla sanchez
52d708bf3f Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 14:04:34 +00:00
manuel padilla sanchez
bb66a1bfa5 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 13:33:18 +00:00
manuel padilla sanchez
d31b1ebfcd Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 13:23:20 +00:00
manuel padilla sanchez
4385d29aa0 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 13:13:44 +00:00
manuel padilla sanchez
111e1d5ed3 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 13:05:13 +00:00
manuel padilla sanchez
27d48f2ec3 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 11:41:09 +00:00
manuel padilla sanchez
1a6ddf7e75 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 11:33:05 +00:00
manuel padilla sanchez
cd8d01db29 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 11:12:26 +00:00
manuel padilla sanchez
dc8f56bc57 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 11:05:09 +00:00
manuel padilla sanchez
efb04397f7 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 10:52:59 +00:00
manuel padilla sanchez
19b34e8d39 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 10:41:38 +00:00
manuel padilla sanchez
b7c7e0ef27 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 10:33:50 +00:00
manuel padilla sanchez
b02c5ed4a9 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 10:13:55 +00:00
manuel padilla sanchez
59fb485ba6 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 10:05:08 +00:00
manuel padilla sanchez
71b22458ba Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 09:52:38 +00:00
manuel padilla sanchez
ecb9391439 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 09:32:57 +00:00
manuel padilla sanchez
aaf341bd81 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 09:23:44 +00:00
manuel padilla sanchez
35ef24a40f Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 07:51:53 +00:00
manuel padilla sanchez
3973f0552c Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-15 14:14:07 +00:00
manuel padilla sanchez
767cc166b1 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-15 14:04:04 +00:00
Hrant
f24ad20ffe Pontoon: Update Armenian (hy-AM) localization of Firefox Send
Localization authors:
- Hrant <hrant.mozilla@gmail.com>
2020-02-14 18:04:13 +00:00
Hrant
a1f915806a Pontoon: Update Armenian (hy-AM) localization of Firefox Send
Localization authors:
- Hrant <hrant.mozilla@gmail.com>
2020-02-14 17:51:53 +00:00
Hrant
669212a9b7 Pontoon: Update Armenian (hy-AM) localization of Firefox Send
Localization authors:
- Hrant <hrant.mozilla@gmail.com>
2020-02-14 17:42:24 +00:00
Kim YoungCheon
59f6e51636 Pontoon: Update Korean (ko) localization of Firefox Send
Localization authors:
- Kim YoungCheon <circcc@gmail.com>
2020-01-31 23:34:09 +00:00
Kim YoungCheon
2515ba274d Pontoon: Update Korean (ko) localization of Firefox Send
Localization authors:
- Kim YoungCheon <circcc@gmail.com>
2020-01-31 23:22:01 +00:00
Kim YoungCheon
6c2fbfe6ff Pontoon: Update Korean (ko) localization of Firefox Send
Localization authors:
- Kim YoungCheon <circcc@gmail.com>
2020-01-31 23:13:59 +00:00
Kim YoungCheon
26fdb271dd Pontoon: Update Korean (ko) localization of Firefox Send
Localization authors:
- Kim YoungCheon <circcc@gmail.com>
2020-01-31 23:05:53 +00:00
Mikeyy
4504c5cd74 Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Milo <mail@milotype.de>
- Mikeyy <mihovil@miho.im>
2020-01-29 14:29:19 +00:00
Milo
2746556dfa Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Milo <mail@milotype.de>
2020-01-29 14:12:58 +00:00
Michael Peter
5ff6266a5e modify connect-src of Content Security Policy to include dynamic wss URL based on configured base URL 2020-01-17 17:47:09 -05:00
Quentí
e57fc1c2d8 Pontoon: Update Occitan (oc) localization of Firefox Send
Localization authors:
- Quentí <quentinantonin@free.fr>
2020-01-17 12:12:36 +00:00
Danny Coates
097d3c8377 make geoip lookup optional 2020-01-11 14:06:17 -08:00
Luis Flores Martínez
43c728d5d4 Pontoon: Update Huastec (hus) localization of Firefox Send
Localization authors:
- Luis Flores Martínez <lufom90@gmail.com>
2020-01-07 17:12:42 +00:00
Luis Flores Martínez
3dffb8da15 Pontoon: Update Huastec (hus) localization of Firefox Send
Localization authors:
- Luis Flores Martínez <lufom90@gmail.com>
2020-01-07 16:52:21 +00:00
Luis Flores Martínez
c49dbd6d6d Pontoon: Update Huastec (hus) localization of Firefox Send
Localization authors:
- Luis Flores Martínez <lufom90@gmail.com>
2020-01-07 16:32:17 +00:00
Luis Flores Martínez
356112e8cc Pontoon: Update Huastec (hus) localization of Firefox Send
Localization authors:
- Luis Flores Martínez <lufom90@gmail.com>
2020-01-07 16:13:19 +00:00
Luis Flores Martínez
ad0d862d92 Pontoon: Update Huastec (hus) localization of Firefox Send
Localization authors:
- Luis Flores Martínez <lufom90@gmail.com>
2020-01-07 03:33:08 +00:00
Luis Flores Martínez
2ca007af1a Pontoon: Update Huastec (hus) localization of Firefox Send
Localization authors:
- Luis Flores Martínez <lufom90@gmail.com>
2020-01-07 03:12:30 +00:00
Misael Hernández
0a42c887d2 Pontoon: Update Triqui (trs) localization of Firefox Send
Localization authors:
- Misael Hernández <yumatajnga@gmail.com>
2020-01-06 03:32:50 +00:00
Joseph.maza
f54a95c965 Pontoon: Update Tagalog (tl) localization of Firefox Send
Localization authors:
- Joseph.maza <Joseph.maza@Gmail.com>
2020-01-06 02:12:15 +00:00
Danny Coates
eec8da890a Merge pull request #1431 from flodolo/locales_20200102
Add new locales (an, gn, mix)
2020-01-02 17:30:24 -08:00
Francesco Lodolo [:flod]
32a58d85a3 Add new locales (an, gn, mix) 2020-01-02 08:29:52 +01:00
Björn I
1252aaed30 Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Firefox Send
Localization authors:
- Björn I. <bjorni.svindseth@yahoo.com>
2019-12-27 17:33:13 +00:00
Jirka Soukeník
060ff1cae4 Pontoon: Update Czech (cs) localization of Firefox Send
Localization authors:
- Jirka Soukeník <soucet@centrum.cz>
- Michal Stanke <mstanke@mozilla.cz>
2019-12-25 08:51:41 +00:00
Juan Pablo
1c2955ed9e Pontoon: Update Aragonese (an) localization of Firefox Send
Localization authors:
- Juan Pablo <juanpabl@gmail.com>
2019-12-18 00:37:51 +00:00
Juan Pablo
5e5bce8745 Pontoon: Update Aragonese (an) localization of Firefox Send
Localization authors:
- Juan Pablo <juanpabl@gmail.com>
2019-12-18 00:12:36 +00:00
Juan Pablo
e43ba60792 Pontoon: Update Aragonese (an) localization of Firefox Send
Localization authors:
- Juan Pablo <juanpabl@gmail.com>
2019-12-17 23:51:47 +00:00
Juan Pablo
e94fe58965 Pontoon: Update Aragonese (an) localization of Firefox Send
Localization authors:
- Juan Pablo <juanpabl@gmail.com>
2019-12-17 23:32:52 +00:00
Frederick Villaluna
a21412844a Pontoon: Update Tagalog (tl) localization of Firefox Send
Localization authors:
- Frederick Villaluna <fv_comscie@yahoo.com>
2019-12-16 07:13:30 +00:00
Luis Flores Martínez
666ca8e87b Pontoon: Update Huastec (hus) localization of Firefox Send
Localization authors:
- Luis Flores Martínez <lufom90@gmail.com>
2019-12-13 17:13:50 +00:00
Luis Flores Martínez
71ceffd9b4 Pontoon: Update Huastec (hus) localization of Firefox Send
Localization authors:
- Luis Flores Martínez <lufom90@gmail.com>
2019-12-13 16:52:01 +00:00
Bald3mar
cdbd669af2 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-12-12 22:33:46 +00:00
Bald3mar
027043edb7 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-12-12 22:14:07 +00:00
Bald3mar
e4a1f8e86b Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-12-12 21:51:52 +00:00
Hmxhmx
dfd5eb9b1e Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Hmxhmx <hmxhmx.at.wiki@gmail.com>
2019-12-11 08:33:24 +00:00
Bald3mar
e3ee840b64 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-12-10 23:53:16 +00:00
Danny Coates
b8bd13c704 Merge pull request #1424 from checkr/cjford/optional-git-build-dependency
Allow successful npm build without .git
2019-12-10 09:38:24 -08:00
صفا الفليج
6238299a0a Pontoon: Update Arabic (ar) localization of Firefox Send
Localization authors:
- صفا الفليج <safa1996alfulaij@gmail.com>
2019-12-09 20:32:11 +00:00
Connor Ford
d40ddc3d3b Fix npm build with missing .git 2019-12-09 10:51:51 -07:00
Sav22999
d2746db969 Pontoon: Update Italian (it) localization of Firefox Send
Localization authors:
- Sav22999 <saverio.morelli@outlook.it>
2019-12-08 14:53:17 +00:00
Martijn Dekker
95057ef503 Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Martijn Dekker <martijn@inlv.org>
2019-12-06 05:54:39 +00:00
Martijn Dekker
aec2ec30d5 Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Martijn Dekker <martijn@inlv.org>
2019-12-06 00:32:14 +00:00
Martijn Dekker
4d36b3d6e9 Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Martijn Dekker <martijn@inlv.org>
2019-12-03 23:35:21 +00:00
Julio Gomez
6b89197cfd Pontoon: Update Yucatec Maya (yua) localization of Firefox Send
Localization authors:
- Julio Gomez <jegs87@gmail.com>
2019-12-03 16:52:39 +00:00
Julio Gomez
dd2ebdd2de Pontoon: Update Huastec (hus) localization of Firefox Send
Localization authors:
- Julio Gomez <jegs87@gmail.com>
2019-12-03 16:52:37 +00:00
Bald3mar
c479d326ed Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-11-29 21:31:58 +00:00
Bald3mar
8434d91891 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-11-29 20:33:50 +00:00
Martijn Dekker
f9c761ea99 Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Martijn Dekker <martijn@inlv.org>
2019-11-25 03:54:20 +00:00
Martijn Dekker
b14f5f16d0 Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Martijn Dekker <martijn@inlv.org>
2019-11-24 22:54:28 +00:00
Selyan Slimane Amiri
4fbc8e0c89 Pontoon: Update Kabyle (kab) localization of Firefox Send
Localization authors:
- Selyan Slimane Amiri <selyan.kab@gmail.com>
2019-11-22 21:32:21 +00:00
Bald3mar
ad2a1715b5 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-11-18 23:51:36 +00:00
Bald3mar
ac8f826612 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-11-18 23:31:36 +00:00
Martijn Dekker
c1aaa9d6e5 Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Martijn Dekker <martijn@inlv.org>
2019-11-14 15:34:18 +00:00
Enol
eac95ffff7 Pontoon: Update Asturian (ast) localization of Firefox Send
Localization authors:
- Enol <enolp@softastur.org>
2019-11-13 23:13:07 +00:00
Enol
8121761cc8 Pontoon: Update Asturian (ast) localization of Firefox Send
Localization authors:
- Enol <enolp@softastur.org>
2019-11-13 22:52:12 +00:00
Danny Coates
7c720cd7cc Merge pull request #1418 from janschloss/routes-link
Fixes link to routes file
2019-11-13 09:25:55 -08:00
Abelardo Ayala Rodríguez
4c2f809502 Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-11-13 11:36:00 +00:00
Abelardo Ayala Rodríguez
d42523651c Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-11-13 10:51:36 +00:00
Martijn Dekker
b9775e0471 Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Martijn Dekker <martijn@inlv.org>
2019-11-13 09:13:05 +00:00
jnunezf96
d2f37204e0 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-11-12 19:33:02 +00:00
jnunezf96
846dad6662 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-11-12 19:12:47 +00:00
jnunezf96
c966010ed3 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-11-12 18:13:42 +00:00
Jan Schloß
e77fea09bc Fixes link to routes file 2019-11-12 19:09:07 +01:00
jnunezf96
b63291c7d3 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-11-12 17:53:52 +00:00
Danny Coates
2ccc044a27 v3.0.21 2019-11-11 08:48:26 -08:00
Danny Coates
4144850f9d updated deps 2019-11-11 08:44:25 -08:00
Danny Coates
18630aadf9 Merge pull request #1417 from flodolo/prodlocales_20191111
Add new complete locales to production
2019-11-11 08:34:48 -08:00
Francesco Lodolo [:flod]
605fff519e Add new complete locales to production 2019-11-11 09:40:52 +01:00
Frederick Villaluna
0b7ff9551d Pontoon: Update Tagalog (tl) localization of Firefox Send
Localization authors:
- Frederick Villaluna <fv_comscie@yahoo.com>
- Ricky Villar <rvillar313@gmail.com>
2019-11-09 07:12:36 +00:00
Abelardo Ayala Rodríguez
2c9716e01e Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-11-08 14:33:28 +00:00
Abelardo Ayala Rodríguez
cdde3fe654 Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-11-08 14:14:11 +00:00
shamanchic2011
3537667187 Pontoon: Update Belarusian (be) localization of Firefox Send
Localization authors:
- shamanchic2011 <shamanchic2011@ya.ru>
- Mikalai Udodau <crom-a@tut.by>
2019-11-07 17:12:28 +00:00
Zhenya Tikhonov
66086c460d Pontoon: Update Belarusian (be) localization of Firefox Send
Localization authors:
- shamanchic2011 <shamanchic2011@ya.ru>
- Mikalai Udodau <crom-a@tut.by>
- Zhenya Tikhonov <masontikhonov@gmail.com>
2019-11-07 16:51:21 +00:00
Zhenya Tikhonov
a203a8de67 Pontoon: Update Belarusian (be) localization of Firefox Send
Localization authors:
- Mikalai Udodau <crom-a@tut.by>
- Zhenya Tikhonov <masontikhonov@gmail.com>
2019-11-07 16:32:04 +00:00
Francesco Lodolo
2bba9c53ed Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Francesco Lodolo <flod+pontoon@mozilla.com>
2019-11-07 15:12:48 +00:00
Abelardo Ayala Rodríguez
37af4d33fc Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-11-07 13:31:54 +00:00
Abelardo Ayala Rodríguez
107f40c8c9 Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-11-07 13:12:10 +00:00
Zhenya Tikhonov
cb325022dc Pontoon: Update Belarusian (be) localization of Firefox Send
Localization authors:
- Mikalai Udodau <crom-a@tut.by>
- Zhenya Tikhonov <masontikhonov@gmail.com>
2019-11-06 19:53:20 +00:00
Danny Coates
b62b439218 fixed circleci oops 2019-11-05 21:06:19 -08:00
Danny Coates
47972fe2a1 fixed mysterious npm build problem by updating npm 🤷‍♂️ 2019-11-05 21:01:29 -08:00
Danny Coates
7ad937266f trimmed circleci config 2019-11-05 20:53:59 -08:00
Danny Coates
2f34dffab4 fixed sw initialization error 2019-11-05 20:37:44 -08:00
Danny Coates
4a956c0247 updated deps 2019-11-05 20:19:07 -08:00
Alexander Parada
23ce7a1f84 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- Alexander Parada <alessaux@outlook.es>
2019-11-05 15:33:35 +00:00
Alexander Parada
66a8ad2e4f Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- Alexander Parada <alessaux@outlook.es>
2019-11-05 13:57:38 +00:00
Abelardo Ayala Rodríguez
e8e2e31b59 Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-11-05 13:57:35 +00:00
Abelardo Ayala Rodríguez
7259c46d1c Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-11-05 13:31:45 +00:00
Abelardo Ayala Rodríguez
9d3c3d1924 Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-11-05 13:14:02 +00:00
jnunezf96
a0d6317747 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
- Garysqo <garyspleen@gmail.com>
2019-11-05 04:12:46 +00:00
Julio Gomez
3810e09509 Pontoon: Update Yucatec Maya (yua) localization of Firefox Send
Localization authors:
- Julio Gomez <jegs87@gmail.com>
2019-11-05 02:31:57 +00:00
José Manuel
bb7678e7e4 Pontoon: Update Triqui (trs) localization of Firefox Send
Localization authors:
- José Manuel <triki2014jm@gmail.com>
2019-11-05 01:33:00 +00:00
Alexander Parada
3dcf01dd1f Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- Alexander Parada <alessaux@outlook.es>
2019-11-05 01:32:57 +00:00
José Manuel
3b8f19b4c9 Pontoon: Update Triqui (trs) localization of Firefox Send
Localization authors:
- José Manuel <triki2014jm@gmail.com>
2019-11-05 00:52:28 +00:00
Alexander Parada
ab957c26a0 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- Alexander Parada <alessaux@outlook.es>
2019-11-05 00:52:25 +00:00
Alexander Parada
e835c82c27 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- Alexander Parada <alessaux@outlook.es>
2019-11-05 00:31:58 +00:00
Alexander Parada
d69a9e8537 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- Garysqo <garyspleen@gmail.com>
- Alexander Parada <alessaux@outlook.es>
2019-11-05 00:11:44 +00:00
Netza López
1b286d664b Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-11-04 18:32:25 +00:00
Netza López
f8c8a6c2cd Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-11-04 18:19:43 +00:00
Netza López
b71234fc83 Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-11-04 18:01:40 +00:00
Netza López
2eb35733da Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-11-04 03:32:20 +00:00
Netza López
df276d5942 Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-11-04 03:11:15 +00:00
Netza López
e1a6fb9569 Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-11-04 02:51:56 +00:00
marsf
99b2d636a1 Pontoon: Update Japanese (ja) localization of Firefox Send
Localization authors:
- marsf <chimantaea_mirabilis@yahoo.co.jp>
2019-11-03 14:11:21 +00:00
jnunezf96
78be59adac Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-10-31 20:12:42 +00:00
jnunezf96
720ab6ae3a Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-10-31 19:52:57 +00:00
elenatambriz
5e0dcc948c Pontoon: Update K&#39;iche&#39; (quc) localization of Firefox Send
Localization authors:
- elenatambriz <elenatambriz@hotmail.com>
2019-10-31 17:51:49 +00:00
elenatambriz
90400d72b1 Pontoon: Update K&#39;iche&#39; (quc) localization of Firefox Send
Localization authors:
- elenatambriz <elenatambriz@hotmail.com>
2019-10-31 17:31:40 +00:00
elenatambriz
8f1fd6cbf5 Pontoon: Update K&#39;iche&#39; (quc) localization of Firefox Send
Localization authors:
- elenatambriz <elenatambriz@hotmail.com>
2019-10-31 17:14:47 +00:00
elenatambriz
fef8788d55 Pontoon: Update K&#39;iche&#39; (quc) localization of Firefox Send
Localization authors:
- elenatambriz <elenatambriz@hotmail.com>
2019-10-31 16:53:52 +00:00
José Manuel
d2f8156bde Pontoon: Update Triqui (trs) localization of Firefox Send
Localization authors:
- José Manuel <triki2014jm@gmail.com>
2019-10-31 15:32:30 +00:00
Garysqo
d4fbd48f1c Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- Garysqo <garyspleen@gmail.com>
2019-10-31 14:11:32 +00:00
jnunezf96
a6d3948fbc Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-10-31 06:31:28 +00:00
jnunezf96
005bbb1792 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-10-31 06:12:10 +00:00
jnunezf96
186230d211 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-10-31 05:12:32 +00:00
jnunezf96
ee1e8bc204 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-10-31 04:12:29 +00:00
jnunezf96
d1366fb764 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-10-30 23:51:28 +00:00
jnunezf96
d81dba6407 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-10-30 23:31:57 +00:00
Garysqo
f35ddd8e9a Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- Garysqo <garyspleen@gmail.com>
2019-10-30 19:12:24 +00:00
Garysqo
ff798463e8 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
- Garysqo <garyspleen@gmail.com>
2019-10-30 18:52:42 +00:00
Bald3mar
6308c386a3 Pontoon: Update Spanish (Mexico) (es-MX) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-10-30 18:11:55 +00:00
jnunezf96
5a6c338ab9 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
- Garysqo <garyspleen@gmail.com>
2019-10-30 16:32:20 +00:00
jnunezf96
bc6401e7dd Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-10-30 16:11:28 +00:00
jnunezf96
0667f22ddd Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-10-29 23:12:26 +00:00
jnunezf96
594cd339b5 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-10-29 22:42:38 +00:00
José Manuel
762497b867 Pontoon: Update Triqui (trs) localization of Firefox Send
Localization authors:
- José Manuel <triki2014jm@gmail.com>
2019-10-29 22:13:19 +00:00
Garysqo
9199a985d8 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- Garysqo <garyspleen@gmail.com>
- Alexander Parada <alessaux@outlook.es>
2019-10-29 22:13:17 +00:00
Bald3mar
624e1234d9 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-10-29 22:13:14 +00:00
Netza López
a3d153db66 Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-10-29 22:13:11 +00:00
elenatambriz
dc25bc5727 Pontoon: Update K&#39;iche&#39; (quc) localization of Firefox Send
Localization authors:
- elenatambriz <elenatambriz@hotmail.com>
2019-10-29 22:13:08 +00:00
Julio Gomez
6a1670b550 Pontoon: Update Kaqchikel (cak) localization of Firefox Send
Localization authors:
- Julio Gomez <jegs87@gmail.com>
2019-10-29 22:13:05 +00:00
Miguel
8cd3a720fe Pontoon: Update Ixil (ixl) localization of Firefox Send
Localization authors:
- Gerardo <gerardoterraza2013@gmail.com>
- Miguel <mickyforever.dc@gmail.com>
2019-10-29 22:13:02 +00:00
Abelardo Ayala Rodríguez
9aa7da68be Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-10-29 22:12:59 +00:00
José Manuel
063042cd76 Pontoon: Update Triqui (trs) localization of Firefox Send
Localization authors:
- José Manuel <triki2014jm@gmail.com>
2019-10-29 21:42:00 +00:00
Alexander Parada
8ce3a5d236 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- Garysqo <garyspleen@gmail.com>
- Alexander Parada <alessaux@outlook.es>
2019-10-29 21:41:58 +00:00
Netza López
0c58c84625 Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-10-29 21:41:55 +00:00
elenatambriz
68ddcf3b56 Pontoon: Update K&#39;iche&#39; (quc) localization of Firefox Send
Localization authors:
- elenatambriz <elenatambriz@hotmail.com>
2019-10-29 21:41:52 +00:00
Miguel
a0648d7d91 Pontoon: Update Ixil (ixl) localization of Firefox Send
Localization authors:
- Miguel <mickyforever.dc@gmail.com>
2019-10-29 21:41:49 +00:00
Abelardo Ayala Rodríguez
5e674973db Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-10-29 21:41:46 +00:00
Garysqo
4f2b634825 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- Garysqo <garyspleen@gmail.com>
- Alexander Parada <alessaux@outlook.es>
2019-10-29 21:33:43 +00:00
Bald3mar
48bbf07392 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-10-29 21:33:40 +00:00
Netza López
357f6da3b0 Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-10-29 21:33:37 +00:00
Miguel
def21041d8 Pontoon: Update Ixil (ixl) localization of Firefox Send
Localization authors:
- Miguel <mickyforever.dc@gmail.com>
2019-10-29 21:33:35 +00:00
Abelardo Ayala Rodríguez
c44728865a Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-10-29 21:33:32 +00:00
Bald3mar
f271140c5f Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-10-29 21:13:57 +00:00
Netza López
3593aaf61f Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-10-29 21:13:54 +00:00
Abelardo Ayala Rodríguez
8b433a008d Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-10-29 21:13:51 +00:00
Bald3mar
1ab1bf1b00 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-10-29 20:43:02 +00:00
Abelardo Ayala Rodríguez
c04d15f806 Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-10-29 20:42:59 +00:00
Bald3mar
977e8bdc21 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-10-29 20:32:12 +00:00
Bald3mar
454d1d03f5 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-10-29 19:15:17 +00:00
Netza López
f73ff7fa26 Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-10-29 19:15:14 +00:00
elenatambriz
98317c94aa Pontoon: Update K&#39;iche&#39; (quc) localization of Firefox Send
Localization authors:
- elenatambriz <elenatambriz@hotmail.com>
2019-10-29 19:15:12 +00:00
Netza López
aa91d762af Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-10-29 18:44:30 +00:00
elenatambriz
5cddd0842b Pontoon: Update K&#39;iche&#39; (quc) localization of Firefox Send
Localization authors:
- elenatambriz <elenatambriz@hotmail.com>
2019-10-29 18:44:27 +00:00
elenatambriz
4dee3d2283 Pontoon: Update K&#39;iche&#39; (quc) localization of Firefox Send
Localization authors:
- elenatambriz <elenatambriz@hotmail.com>
2019-10-29 18:33:37 +00:00
Netza López
2d20cb3819 Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-10-29 18:14:20 +00:00
Bald3mar
c28beb3bc1 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-10-29 16:32:21 +00:00
Netza López
216a7a6ff8 Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-10-29 16:32:19 +00:00
José Manuel
a48d2bad4f Pontoon: Update Triqui (trs) localization of Firefox Send
Localization authors:
- José Manuel <triki2014jm@gmail.com>
2019-10-28 23:12:15 +00:00
Bald3mar
04c60414e1 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-10-28 22:32:40 +00:00
Bald3mar
92c3f67020 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-10-28 22:13:07 +00:00
Martijn Dekker
49e6c064ac Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Martijn Dekker <martijn@inlv.org>
2019-10-27 22:32:42 +00:00
Martijn Dekker
8551139a8a Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Martijn Dekker <martijn@inlv.org>
2019-10-27 20:13:25 +00:00
Emin Mastizada
96461692ee Pontoon: Update Azerbaijani (az) localization of Firefox Send
Localization authors:
- Emin Mastizada <emin@mastizada.com>
2019-10-23 23:35:20 +00:00
Martijn Dekker
a217ad4be5 Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Martijn Dekker <martijn@inlv.org>
2019-10-22 15:12:17 +00:00
Danny Coates
18216ce430 v3.0.20 2019-10-21 11:33:54 -07:00
Danny Coates
1711a2d1d7 added "te" to production languages 2019-10-21 10:36:34 -07:00
Danny Coates
8b2080a2f0 updated deps 2019-10-21 10:24:07 -07:00
Danny Coates
006ee1d2e6 Merge pull request #1408 from drakkein/master
Strip tracking URL params
2019-10-21 10:13:56 -07:00
Danny Coates
0a7c473965 Merge pull request #1405 from mozilla/dark-mode
Dark theme
2019-10-21 10:07:42 -07:00
Hampus
4e124d174c Pontoon: Update Swedish (sv-SE) localization of Firefox Send
Localization authors:
- Hampus <hampus.bengtsson@gmail.com>
2019-10-19 00:33:34 +00:00
Artem Polivanchuk
524b2a5668 Pontoon: Update Ukrainian (uk) localization of Firefox Send
Localization authors:
- Artem Polivanchuk <artem@mozilla.org.ua>
2019-10-17 08:52:12 +00:00
Marcelo Ghelman
844f036a27 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Localization authors:
- Marcelo Ghelman <marcelo.ghelman@gmail.com>
2019-10-16 14:33:03 +00:00
Marcelo Ghelman
7d6c781ea5 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Localization authors:
- Marcelo Ghelman <marcelo.ghelman@gmail.com>
2019-10-16 14:12:33 +00:00
Wiktor Furman
ad9577daaf Update package-lock 2019-10-15 15:50:09 +02:00
Wiktor Furman
114068c531 Strip tracking url parameters 2019-10-15 15:29:48 +02:00
Niksend Mizuhara
0daa03e04c Pontoon: Update Chinese (China) (zh-CN) localization of Firefox Send
Localization authors:
- Niksend Mizuhara <i@rhinecho.com>
2019-10-07 01:53:05 +00:00
Danny Coates
63348fd36a updated deps 2019-10-03 23:32:49 -07:00
Danny Coates
c71c246959 Dark theme 2019-10-03 23:10:11 -07:00
Sander Lepik
2b7504e969 Pontoon: Update Estonian (et) localization of Firefox Send
Localization authors:
- Sander Lepik <sander.lepik@eesti.ee>
2019-10-01 05:14:31 +00:00
Selyan Sliman Amiri
b942554c80 Pontoon: Update Kabyle (kab) localization of Firefox Send
Localization authors:
- Selyan Sliman Amiri <selyan.kab@gmail.com>
2019-09-30 09:32:51 +00:00
Juan Sián
1ae227fddd Pontoon: Update Kaqchikel (cak) localization of Firefox Send
Localization authors:
- Juan Sián <ajtzibsyan@yahoo.com>
2019-09-26 23:32:48 +00:00
Jordi Serratosa
a63fe18d15 Pontoon: Update Catalan (ca) localization of Firefox Send
Localization authors:
- Jordi Serratosa <jordis@softcatala.cat>
2019-09-25 09:56:59 +00:00
Danny Coates
ea1ea2aa68 v3.0.19 2019-09-23 09:24:10 -07:00
Danny Coates
90d06d71d3 updated deps 2019-09-23 09:22:22 -07:00
Kim Younggeon
11f2deb7a6 Pontoon: Update Korean (ko) localization of Firefox Send
Localization authors:
- Kim Younggeon <mail@kyg.kr>
2019-09-23 03:52:14 +00:00
Danny Coates
0f5edf023a Merge pull request #1400 from mozilla/task/update-engines
task: update engines in package.json and README to clarify that node 10x is expected.
2019-09-19 11:02:42 -07:00
Rachel Tublitz
3be0621647 task: update engines in package.json and README to clarify that node 10.x is expected 2019-09-19 13:37:05 -04:00
Marcelo Ghelman
fc07bfdb85 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Localization authors:
- Marcelo Ghelman <marcelo.ghelman@gmail.com>
2019-09-15 05:17:20 +00:00
صفا الفليج
581a989304 Pontoon: Update Arabic (ar) localization of Firefox Send
Localization authors:
- صفا الفليج <safa1996alfulaij@gmail.com>
2019-09-11 18:34:38 +00:00
ItielMaN
047d6a85ab Pontoon: Update Hebrew (he) localization of Firefox Send
Localization authors:
- ItielMaN <itiel_yn8@walla.com>
2019-09-08 21:12:53 +00:00
Luiz Felipe F M Costa
90f6a07d4a refactored Dockerfile 2019-09-06 20:04:45 -07:00
Arash Mousavi
8f4a53db64 Pontoon: Update Persian (fa) localization of Firefox Send
Localization authors:
- Arash Mousavi <mousavi.arash@gmail.com>
2019-09-06 21:53:28 +00:00
Danny Coates
c2dd51c638 v3.0.18 2019-09-06 10:40:36 -07:00
Danny Coates
cdd98af86a updated deps 2019-09-06 10:39:42 -07:00
Danny Coates
883f2bc0f9 wait until serviceWorker activate to precache 2019-09-05 19:04:03 -07:00
Danny Coates
94f1eabbc7 v3.0.17 2019-09-05 15:59:42 -07:00
Danny Coates
902bc6628e cache fonts 2019-09-05 15:57:07 -07:00
Danny Coates
460b741f17 clean service worker cache after activate instead of on install 2019-09-05 15:24:26 -07:00
Danny Coates
d5c488196d no-cache harder 2019-09-05 13:33:12 -07:00
Danny Coates
9ad9c9feb2 fixed git hooks 2019-09-05 13:16:32 -07:00
Danny Coates
6576e4a74c added sync-npm-dependencies script and hooks 2019-09-05 08:14:14 -07:00
Danny Coates
950872109e updated deps 2019-09-05 08:11:20 -07:00
Martijn Dekker
87051d27ed Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Martijn Dekker <martijn@inlv.org>
2019-09-03 22:52:26 +00:00
Marcelo Ghelman
3451803b37 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Localization authors:
- Marcelo Ghelman <marcelo.ghelman@gmail.com>
2019-08-29 10:32:02 +00:00
dskmori
ac15153e8f Pontoon: Update Japanese (ja) localization of Firefox Send
Localization authors:
- dskmori <ghoti.fish.dsk@gmail.com>
2019-08-28 13:12:29 +00:00
Danny Coates
924f5dc682 disable streaming download on mobile firefox 2019-08-26 10:49:19 -07:00
Danny Coates
ff9be6a213 updated deps 2019-08-26 08:58:34 -07:00
Roberto Alvarado
883728570e Pontoon: Update Spanish (Mexico) (es-MX) localization of Firefox Send
Localization authors:
- Roberto Alvarado <ralv888@gmail.com>
- Adolfo Jayme Barrientos <fitoschido@gmail.com>
2019-08-25 05:52:41 +00:00
Adolfo Jayme Barrientos
0435f17f9a Pontoon: Update Spanish (Mexico) (es-MX) localization of Firefox Send
Localization authors:
- Roberto Alvarado <ralv888@gmail.com>
- Adolfo Jayme Barrientos <fitoschido@gmail.com>
2019-08-20 16:34:33 +00:00
Danny Coates
1e1268fff0 fixed hebrew fluent variable name 2019-08-19 10:59:35 -07:00
Quế Tùng
252d7817e3 Pontoon: Update Vietnamese (vi) localization of Firefox Send
Localization authors:
- Quế Tùng <best.cloney.1301@gmail.com>
2019-08-17 15:53:31 +00:00
Danny Coates
ce28c38ebe v3.0.16 2019-08-12 10:10:07 -07:00
Danny Coates
f0407f9beb use custom configstore that doesn't use the fs 2019-08-12 10:00:57 -07:00
Sahithi
c6f222eb57 Pontoon: Update Telugu (te) localization of Firefox Send
Localization authors:
- Sahithi <sahithi@swecha.net>
2019-08-11 08:54:01 +00:00
leo.toneff
6dd6135185 Pontoon: Update Norwegian Bokmål (nb-NO) localization of Firefox Send
Localization authors:
- leo.toneff <leo.toneff@gmail.com>
- Håvar Henriksen <havar@firefox.no>
2019-08-10 16:33:36 +00:00
Danny Coates
8df339b66d v3.0.15 2019-08-09 12:26:09 -07:00
Danny Coates
8702fda651 handle websocket construction exceptions 2019-08-09 11:47:44 -07:00
Danny Coates
807ecff471 updated sentry libs from raven to @sentry 2019-08-09 11:06:21 -07:00
Danny Coates
927c981cd7 added size/time info to up/download error reporting 2019-08-09 10:09:34 -07:00
Danny Coates
7073cc8ce6 added download hang detection and error reporting 2019-08-08 13:54:02 -07:00
Danny Coates
c925fae696 updated deps 2019-08-08 13:01:57 -07:00
Danny Coates
966d7a5e35 create configstore dir in docker container 2019-08-08 10:42:57 -07:00
Danny Coates
96c750c098 added size and duration to connection error reporting 2019-08-08 09:52:22 -07:00
Danny Coates
0729064753 Merge pull request #1378 from mozilla/new-ws
Use resumable uploads to GCS
2019-08-08 08:54:00 -07:00
Joergen
259a5a5f24 Pontoon: Update Danish (da) localization of Firefox Send
Localization authors:
- Joergen <joergenr@stofanet.dk>
2019-08-08 14:02:32 +00:00
Danny Coates
27be72e0cd refactored client side upload loop 2019-08-07 13:51:23 -07:00
Danny Coates
e4231bbc0f updated deps 2019-08-07 13:47:26 -07:00
Danny Coates
1d184f06bf revert webpack for broken css extraction 2019-08-07 12:14:27 -07:00
Quentí
f7b46a99ac Pontoon: Update Occitan (oc) localization of Firefox Send
Localization authors:
- Quentí <quentinantonin@free.fr>
2019-08-07 18:12:20 +00:00
Quentí
3fadb489c7 Pontoon: Update Occitan (oc) localization of Firefox Send
Localization authors:
- Quentí <quentinantonin@free.fr>
2019-08-07 17:13:10 +00:00
Danny Coates
6378676c2d use resumable uploads to GCS 2019-08-07 10:10:42 -07:00
Quentí
014d84e4c7 Pontoon: Update Occitan (oc) localization of Firefox Send
Localization authors:
- Quentí <quentinantonin@free.fr>
2019-08-07 16:54:33 +00:00
Quentí
a08d8435a9 Pontoon: Update Occitan (oc) localization of Firefox Send
Localization authors:
- Quentí <quentinantonin@free.fr>
2019-08-07 07:12:56 +00:00
Quentí
40a05c9ecf Pontoon: Update Occitan (oc) localization of Firefox Send
Localization authors:
- Quentí <quentinantonin@free.fr>
2019-08-07 06:52:27 +00:00
Danny Coates
527040afef updated ws dependency and slightly improved client side error handling, hung uploads will error instead of hang forever 2019-08-06 14:47:21 -07:00
Michal Stanke
a48a447808 Pontoon: Update Czech (cs) localization of Firefox Send
Localization authors:
- Michal Stanke <mstanke@mozilla.cz>
2019-08-06 12:14:20 +00:00
julen
f3569d7f98 Pontoon: Update Basque (eu) localization of Firefox Send
Localization authors:
- julen <julenx@gmail.com>
- Ander Elortondo <ander.elor@gmail.com>
2019-08-05 08:52:40 +00:00
صفا الفليج
6ca7d11efb Pontoon: Update Arabic (ar) localization of Firefox Send
Localization authors:
- صفا الفليج <safa1996alfulaij@gmail.com>
2019-08-05 08:52:37 +00:00
julen
b71ae4a0ff Pontoon: Update Basque (eu) localization of Firefox Send
Localization authors:
- p.sanroman.bengoetxea <p.sanroman.bengoetxea@gmail.com>
- julen <julenx@gmail.com>
- Ander Elortondo <ander.elor@gmail.com>
2019-08-05 08:34:11 +00:00
Aman Alam
7ba25664b5 Pontoon: Update Punjabi (pa-IN) localization of Firefox Send
Localization authors:
- Aman Alam <amanpreet.alam@gmail.com>
2019-08-05 00:52:41 +00:00
Danny Coates
80fb42ad3d v3.0.14 2019-08-02 12:13:39 -07:00
Danny Coates
f036df5f47 updated eslint config 2019-08-02 12:03:53 -07:00
Danny Coates
20c063db7c fixed logged error in integration tests 2019-08-02 11:26:52 -07:00
Danny Coates
a6b43c9eef v3.0.13 2019-07-29 16:24:48 -07:00
Danny Coates
c80f9ada65 updated deps 2019-07-29 15:26:11 -07:00
aefgh39622
e0ae5cb3c6 Pontoon: Update Thai (th) localization of Firefox Send
Localization authors:
- aefgh39622 <aefgh39622@gmail.com>
2019-07-28 12:12:35 +00:00
Марко Костић (Marko Kostić)
c0fb3d17be Pontoon: Update Serbian (sr) localization of Firefox Send
Localization authors:
- Марко Костић (Marko Kostić) <marko.m.kostic@gmail.com>
2019-07-24 21:52:22 +00:00
Ратко Вујановић
116f090b7e Pontoon: Update Serbian (sr) localization of Firefox Send
Localization authors:
- Марко Костић (Marko Kostić) <marko.m.kostic@gmail.com>
- Ратко Вујановић <arheopterics@gmail.com>
- Isidora Barad Dur <barad.dur@yahoo.com>
2019-07-23 19:52:46 +00:00
Danny Coates
7cbd9716e2 updated deps 2019-07-23 10:30:43 -07:00
Danny Coates
58191975b9 stubbed /login page for redirect base login flow 2019-07-23 09:27:34 -07:00
Anesu Chiodza
76695aee5d Pontoon: Update Shona (sn) localization of Firefox Send
Localization authors:
- Anesu Chiodza <anesuchiodza@gmail.com>
2019-07-16 17:31:47 +00:00
Anesu Chiodza
b356b4cad3 Pontoon: Update Shona (sn) localization of Firefox Send
Localization authors:
- Anesu Chiodza <anesuchiodza@gmail.com>
2019-07-16 17:11:53 +00:00
m4hdi.pdroid
63ddbeefc4 Pontoon: Update Persian (fa) localization of Firefox Send
Localization authors:
- m4hdi.pdroid <m4hdi.pdroid@gmail.com>
- Amin Mahmudian <amin.mahmudian@gmail.com>
2019-07-14 18:31:39 +00:00
Belayet Hossain
7b423b24b6 Pontoon: Update Bengali (bn) localization of Firefox Send
Localization authors:
- Belayet Hossain <bellayet@gmail.com>
2019-07-13 18:31:39 +00:00
Belayet Hossain
b67050b742 Pontoon: Update Bengali (bn) localization of Firefox Send
Localization authors:
- Belayet Hossain <bellayet@gmail.com>
2019-07-13 18:11:35 +00:00
rgpublic
06242dfd38 Add deployment instructions (#1366) 2019-07-12 10:07:24 -04:00
Danny Coates
3b8dbfd81c npm run format 2019-07-11 10:47:42 -07:00
Danny Coates
9c2fe39764 updated deps 2019-07-11 10:46:07 -07:00
Danny Coates
8b21d43bfa Merge pull request #1363 from flodolo/bengali
Rename bn-BD as bn
2019-07-10 09:54:32 -07:00
Francesco Lodolo [:flod]
e7e39f4d4a Rename bn-BD as bn 2019-07-10 06:52:22 +02:00
Top
e4c801d9a1 Pontoon: Update Thai (th) localization of Firefox Send
Localization authors:
- aefgh39622 <aefgh39622@gmail.com>
- Top <teerapatxtop@yahoo.com>
2019-07-08 16:12:27 +00:00
Cristian Silaghi
324f275dd4 Pontoon: Update Romanian (ro) localization of Firefox Send
Localization authors:
- Cristian Silaghi <cristian.silaghi@mozilla.ro>
2019-07-08 15:31:49 +00:00
Pin-guang Chen
594e0bd28e Pontoon: Update Chinese (Taiwan) (zh-TW) localization of Firefox Send
Localization authors:
- Pin-guang Chen <petercpg@mail.moztw.org>
2019-07-08 14:12:25 +00:00
aefgh39622
6a7fdfe780 Pontoon: Update Thai (th) localization of Firefox Send
Localization authors:
- aefgh39622 <aefgh39622@gmail.com>
2019-07-08 13:51:49 +00:00
aefgh39622
0c82741b98 Pontoon: Update Thai (th) localization of Firefox Send
Localization authors:
- aefgh39622 <aefgh39622@gmail.com>
2019-07-08 13:33:33 +00:00
aefgh39622
fe57734792 Pontoon: Update Thai (th) localization of Firefox Send
Localization authors:
- aefgh39622 <aefgh39622@gmail.com>
2019-07-08 13:12:28 +00:00
Top
4754bed9b8 Pontoon: Update Thai (th) localization of Firefox Send
Localization authors:
- Top <teerapatxtop@yahoo.com>
2019-07-07 18:52:25 +00:00
aefgh39622
a60da467b9 Pontoon: Update Thai (th) localization of Firefox Send
Localization authors:
- aefgh39622 <aefgh39622@gmail.com>
2019-07-07 15:53:12 +00:00
Tomer Cohen
362da2bbfc Pontoon: Update Hebrew (he) localization of Firefox Send
Localization authors:
- Tomer Cohen <tomer.mozilla@tomercohen.com>
2019-07-05 18:54:16 +00:00
ItielMaN
1a9ef4a246 Pontoon: Update Hebrew (he) localization of Firefox Send
Localization authors:
- ItielMaN <itiel_yn8@walla.com>
- Yaron Shahrabani <sh.yaron@gmail.com>
- Tomer Cohen <tomer.mozilla@tomercohen.com>
2019-07-05 16:52:35 +00:00
Marcelo Ghelman
f51dbbb8f5 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Localization authors:
- Marcelo Ghelman <marcelo.ghelman@gmail.com>
2019-07-04 21:32:59 +00:00
Cristian Silaghi
e497107e59 Pontoon: Update Romanian (ro) localization of Firefox Send
Localization authors:
- Cristian Silaghi <cristian.silaghi@mozilla.ro>
2019-07-02 09:32:42 +00:00
sergio
10ad6fc1ae Pontoon: Update Russian (ru) localization of Firefox Send
Localization authors:
- sergio <sergio+it@outerface.net>
2019-07-01 12:32:41 +00:00
Christian Elbrianno
c982db4c75 Pontoon: Update Indonesian (id) localization of Firefox Send
Localization authors:
- Christian Elbrianno <christian.elbrianno41@gmail.com>
- Ringgo <armen.ringgo@yahoo.de>
2019-06-30 04:52:51 +00:00
Cristian Silaghi
cd8130563d Pontoon: Update Romanian (ro) localization of Firefox Send
Localization authors:
- Cristian Silaghi <cristian.silaghi@mozilla.ro>
2019-06-27 12:58:48 +00:00
Cristian Silaghi
730a569d43 Pontoon: Update Romanian (ro) localization of Firefox Send
Localization authors:
- Cristian Silaghi <cristian.silaghi@mozilla.ro>
2019-06-26 13:33:36 +00:00
kumincir
769dae1bdc Pontoon: Update Sundanese (su) localization of Firefox Send
Localization authors:
- kumincir <ia.adnan@gmail.com>
2019-06-26 02:33:06 +00:00
Cristian Silaghi
54a8c504ce Pontoon: Update Romanian (ro) localization of Firefox Send
Localization authors:
- Cristian Silaghi <cristian.silaghi@mozilla.ro>
2019-06-24 15:33:56 +00:00
robbp
92dc9a0f71 Pontoon: Update Romanian (ro) localization of Firefox Send
Localization authors:
- robbp <robbpaun@gmail.com>
2019-06-23 05:17:32 +00:00
Besnik Bleta
80a7c92056 Pontoon: Update Albanian (sq) localization of Firefox Send
Localization authors:
- Besnik Bleta <besnik@programeshqip.org>
2019-06-21 11:52:47 +00:00
p.sanroman.bengoetxea
c6ebea0100 Pontoon: Update Basque (eu) localization of Firefox Send
Localization authors:
- p.sanroman.bengoetxea <p.sanroman.bengoetxea@gmail.com>
2019-06-18 12:35:09 +00:00
mail
039b5daaed Pontoon: Update Korean (ko) localization of Firefox Send
Localization authors:
- mail <mail@kyg.kr>
2019-06-18 06:31:42 +00:00
Marcelo Ghelman
4bf4e61c2c Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Localization authors:
- Marcelo Ghelman <marcelo.ghelman@gmail.com>
2019-06-17 18:13:25 +00:00
Cristian Silaghi
3c21e2a00f Pontoon: Update Romanian (ro) localization of Firefox Send
Localization authors:
- Cristian Silaghi <cristian.silaghi@mozilla.ro>
2019-06-17 13:13:34 +00:00
Cristian Silaghi
38a379d1de Pontoon: Update Romanian (ro) localization of Firefox Send
Localization authors:
- Cristian Silaghi <cristian.silaghi@mozilla.ro>
2019-06-16 20:11:54 +00:00
Sahithi
adeb19d974 Pontoon: Update Telugu (te) localization of Firefox Send
Localization authors:
- Sahithi <sahithi.thinker@gmail.com>
2019-06-16 10:53:05 +00:00
Sahithi
744c410704 Pontoon: Update Telugu (te) localization of Firefox Send
Localization authors:
- Sahithi <sahithi.thinker@gmail.com>
2019-06-16 10:32:18 +00:00
Sahithi
99ab3882eb Pontoon: Update Telugu (te) localization of Firefox Send
Localization authors:
- Sahithi <sahithi.thinker@gmail.com>
2019-06-16 10:13:18 +00:00
Danny Coates
7cdf566bcd updated deps 2019-06-14 11:58:39 -07:00
Danny Coates
b6e4877d93 Merge pull request #1352 from mozilla/tailwind-1
updated tailwindcss to 1.0
2019-06-14 11:45:10 -07:00
Danny Coates
b9c87fd779 updated tailwindcss to 1.0 2019-06-14 11:37:30 -07:00
Joe ST
6ef5b5133c Pontoon: Update English (Great Britain) (en-GB) localization of Firefox Send
Localization authors:
- Joe ST <joe@fbstj.net>
2019-06-14 16:39:06 +00:00
Yassine Aït-El-Mouden
b7d2420765 Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Yassine Aït-El-Mouden <yaitelmouden@outlook.com>
- Brahim Essaidi <Essaidib2@gmail.com>
2019-06-14 12:33:45 +00:00
Artem Polivanchuk
c139531c91 Pontoon: Update Ukrainian (uk) localization of Firefox Send
Localization authors:
- Artem Polivanchuk <artem@mozilla.org.ua>
2019-06-14 09:14:39 +00:00
Muhend Belkacem
88fe3902bc Pontoon: Update Kabyle (kab) localization of Firefox Send
Localization authors:
- Muhend Belkacem <taqbaylitassa@gmail.com>
2019-06-14 08:52:19 +00:00
Muhend Belkacem
645fd062ac Pontoon: Update Kabyle (kab) localization of Firefox Send
Localization authors:
- Muhend Belkacem <taqbaylitassa@gmail.com>
2019-06-13 23:51:58 +00:00
Uccen Marzuq
ccb0b71df5 Pontoon: Update Kabyle (kab) localization of Firefox Send
Localization authors:
- Uccen Marzuq <merzouk.ouchene@laposte.net>
2019-06-13 21:52:28 +00:00
Muhend Belkacem
b8ec90a398 Pontoon: Update Kabyle (kab) localization of Firefox Send
Localization authors:
- Muhend Belkacem <taqbaylitassa@gmail.com>
2019-06-13 20:51:59 +00:00
marsf
7ed5f37c66 Pontoon: Update Japanese (ja) localization of Firefox Send
Localization authors:
- marsf <chimantaea_mirabilis@yahoo.co.jp>
2019-06-13 10:32:28 +00:00
Victor Bychek
c899129f9a Pontoon: Update Russian (ru) localization of Firefox Send
Localization authors:
- Victor Bychek <a@bychek.ru>
2019-06-12 12:34:13 +00:00
Hyeonseok Shin
1bb91690c5 Pontoon: Update Korean (ko) localization of Firefox Send
Localization authors:
- Hyeonseok Shin <hyeonseok@gmail.com>
- Jonathan Joseph Chiarella <jonathan.chiarella@gmail.com>
2019-06-12 03:12:53 +00:00
Mikeyy
073f6f67d3 Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Mikeyy <mihovil@miho.im>
2019-06-10 19:54:19 +00:00
Danny Coates
533bfdb496 updated deps 2019-06-06 18:01:57 -07:00
Paulius
34de65d7d2 Pontoon: Update Lithuanian (lt) localization of Firefox Send
Localization authors:
- Paulius <paulius@mozilla.lt>
2019-06-06 13:13:09 +00:00
Danny Coates
209fdf34f8 Merge pull request #1348 from georapbox/issue-1332
Fixes blurry Sign in button when hovered
2019-06-05 09:33:53 -07:00
Brahim Essaidi
ba5c2a049d Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Brahim Essaidi <Essaidib2@gmail.com>
2019-06-05 11:33:42 +00:00
George Raptis
1528aa3f1b Fixes blurry Sign in button when hovered 2019-06-05 11:58:11 +03:00
Danny Coates
b1f1b9bd19 v3.0.12 2019-06-03 13:20:37 -07:00
Fjoerfoks
2963b2fc05 Pontoon: Update Frisian (fy-NL) localization of Firefox Send
Localization authors:
- Fjoerfoks <fryskefirefox@gmail.com>
2019-06-03 12:16:57 +00:00
Gwenn
e4f9cfa023 Pontoon: Update Breton (br) localization of Firefox Send
Localization authors:
- Gwenn <tornoz@laposte.net>
2019-06-03 12:16:54 +00:00
Mark Heijl
09e961219d Pontoon: Update Dutch (nl) localization of Firefox Send
Localization authors:
- Mark Heijl <markh@babelzilla.org>
2019-06-03 11:52:36 +00:00
Gwenn
b36a5f6973 Pontoon: Update Breton (br) localization of Firefox Send
Localization authors:
- Gwenn <tornoz@laposte.net>
2019-06-03 11:52:34 +00:00
Cristian Silaghi
1a36dc084e Pontoon: Update Romanian (ro) localization of Firefox Send
Localization authors:
- Cristian Silaghi <cristian.silaghi@mozilla.ro>
2019-06-03 10:53:39 +00:00
Björn I
c66347b3da Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Firefox Send
Localization authors:
- Björn I. <bjorni.svindseth@yahoo.com>
2019-06-03 07:12:53 +00:00
Björn I
a7d0551509 Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Firefox Send
Localization authors:
- Björn I. <bjorni.svindseth@yahoo.com>
2019-06-03 03:32:42 +00:00
Björn I
f6f6324aa1 Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Firefox Send
Localization authors:
- Björn I. <bjorni.svindseth@yahoo.com>
2019-06-03 02:51:33 +00:00
Marcelo Poli
a24597695b Pontoon: Update Spanish (Argentina) (es-AR) localization of Firefox Send
Localization authors:
- Marcelo Poli <enzomatrix@gmail.com>
2019-06-02 19:11:41 +00:00
ravmn
706ac638da Pontoon: Update Spanish (Chile) (es-CL) localization of Firefox Send
Localization authors:
- ravmn <ravmn@ravmn.cl>
2019-06-01 23:32:20 +00:00
Selim Şumlu
d66d08f0ed Pontoon: Update Turkish (tr) localization of Firefox Send
Localization authors:
- Selim Şumlu <selim@sum.lu>
2019-06-01 23:12:28 +00:00
Michael Wolf
ab9af7fd9b Pontoon: Update Sorbian, Lower (dsb) localization of Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2019-06-01 18:51:55 +00:00
Jiri Grönroos
466a087689 Pontoon: Update Finnish (fi) localization of Firefox Send
Localization authors:
- Jiri Grönroos <jiri.gronroos@iki.fi>
2019-06-01 05:53:37 +00:00
Piotr Drąg
71956739f8 Pontoon: Update Polish (pl) localization of Firefox Send
Localization authors:
- Piotr Drąg <piotrdrag@gmail.com>
2019-05-31 18:13:10 +00:00
Danny Coates
62689b9556 Merge pull request #1344 from mozilla/update-promo-banner
tweak promo banner to match spec'
2019-05-31 09:23:51 -07:00
Danny Coates
7d1b8e002f a couple promo style tweaks 2019-05-31 09:18:20 -07:00
Slimane Selyan AMIRI
8c535ce50d Pontoon: Update Kabyle (kab) localization of Firefox Send
Localization authors:
- Slimane Selyan AMIRI <slimane.amiri@gmail.com>
2019-05-31 14:32:26 +00:00
John Gruen
a3bdcd8478 tweak promo banner to match spec' 2019-05-31 13:48:32 +02:00
Jim Spentzos
1e77d86e8a Pontoon: Update Greek (el) localization of Firefox Send
Localization authors:
- Jim Spentzos <jimspentzos2000@gmail.com>
2019-05-31 04:12:41 +00:00
Jim Spentzos
1af01b1ee3 Pontoon: Update Greek (el) localization of Firefox Send
Localization authors:
- Jim Spentzos <jimspentzos2000@gmail.com>
2019-05-31 03:51:26 +00:00
Balázs Meskó
eb1bcde37f Pontoon: Update Hungarian (hu) localization of Firefox Send
Localization authors:
- Balázs Meskó <meskobalazs@gmail.com>
2019-05-30 11:31:25 +00:00
avelper
8def910d61 Pontoon: Update Spanish (Spain) (es-ES) localization of Firefox Send
Localization authors:
- avelper <avelper@mozilla-hispano.org>
2019-05-30 11:11:30 +00:00
Quế Tùng
5892532d03 Pontoon: Update Vietnamese (vi) localization of Firefox Send
Localization authors:
- Quế Tùng <best.cloney.1301@gmail.com>
2019-05-30 10:16:41 +00:00
Rhoslyn Prys
8ede5cf05c Pontoon: Update Welsh (cy) localization of Firefox Send
Localization authors:
- Rhoslyn Prys <rprys@posteo.net>
2019-05-30 08:12:25 +00:00
Danny Coates
7213fef7c3 updated deps 2019-05-29 19:27:47 -07:00
Danny Coates
d3e9bb09df trailhead promo 2019-05-29 19:27:47 -07:00
Michael Wolf
2682aec90d Pontoon: Update Sorbian, Upper (hsb) localization of Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2019-05-29 21:12:41 +00:00
Rodrigo
0ea89a58b0 Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Firefox Send
Localization authors:
- Rodrigo <rodrigo.mcunha@hotmail.com>
2019-05-29 21:12:39 +00:00
Marcelo Ghelman
2a2a3ad21f Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Localization authors:
- Marcelo Ghelman <marcelo.ghelman@gmail.com>
2019-05-29 20:52:57 +00:00
yusup.ramdani
36c73bae7b Pontoon: Update Sundanese (su) localization of Firefox Send
Localization authors:
- yusup.ramdani <yusup.ramdani@wikimedia.or.id>
2019-05-29 18:51:34 +00:00
Danny Coates
f5116cee29 v3.0.11 2019-05-29 10:16:56 -07:00
Danny Coates
72ab5bdbf3 revert master logo until june 3rd 2019-05-29 10:05:31 -07:00
Michal Stanke
94f0b928ae Pontoon: Update Czech (cs) localization of Firefox Send
Localization authors:
- Michal Stanke <mstanke@mozilla.cz>
2019-05-29 16:33:34 +00:00
G12r
5e14a0b45a Pontoon: Update Georgian (ka) localization of Firefox Send
Localization authors:
- G12r <georgianization@outlook.com>
2019-05-29 16:14:08 +00:00
Andreas Pettersson
84a382af77 Pontoon: Update Swedish (sv-SE) localization of Firefox Send
Localization authors:
- Andreas Pettersson <az@kth.se>
2019-05-29 15:51:45 +00:00
Pin-guang Chen
8680dc6b3c Pontoon: Update Chinese (Taiwan) (zh-TW) localization of Firefox Send
Localization authors:
- Pin-guang Chen <petercpg@mail.moztw.org>
2019-05-29 15:31:43 +00:00
passionforlife
cf787eef9f Pontoon: Update Chinese (China) (zh-CN) localization of Firefox Send
Localization authors:
- passionforlife <eloli@foxmail.com>
2019-05-29 15:31:41 +00:00
Juraj Cigáň
a5dffdba14 Pontoon: Update Slovak (sk) localization of Firefox Send
Localization authors:
- Juraj Cigáň <kusavica@gmail.com>
2019-05-29 15:11:44 +00:00
Rok Žerdin
2dcc3730d9 Pontoon: Update Slovenian (sl) localization of Firefox Send
Localization authors:
- Rok Žerdin <zerdo90@gmail.com>
2019-05-29 14:57:31 +00:00
Francesco Lodolo
3fb3f6f77f Pontoon: Update Italian (it) localization of Firefox Send
Localization authors:
- Francesco Lodolo <flod+pontoon@mozilla.com>
2019-05-29 14:57:28 +00:00
Melo46
0a4a9f674d Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Melo46 <melo@carmu.com>
2019-05-29 14:57:26 +00:00
Francesco Lodolo
7e2e171f83 Pontoon: Update German (de) localization of Firefox Send
Localization authors:
- Francesco Lodolo <flod+pontoon@mozilla.com>
2019-05-29 14:57:23 +00:00
Théo Chevalier
a64bb4ac8b Pontoon: Update French (fr) localization of Firefox Send
Localization authors:
- Théo Chevalier <theo.chevalier11@gmail.com>
2019-05-29 14:57:20 +00:00
Kohei Yoshino
acab58ca1e Pontoon: Update English (Canada) (en-CA) localization of Firefox Send
Localization authors:
- Kohei Yoshino <kohei.yoshino@gmail.com>
2019-05-29 14:57:18 +00:00
clouserw-mozilla-owner
10ed88fa40 Merge pull request #1341 from mozilla/trailhead
added master logo and trailhead strings
2019-05-29 07:20:04 -07:00
Danny Coates
9b2a7dfcd7 added master logo and trailhead strings 2019-05-28 18:54:33 -07:00
Danny Coates
517f51f4f0 added line-break: anywhere; fixes #1326 2019-05-28 15:08:58 -07:00
Danny Coates
73735010ae set account ui state on createElement. fixes #1325 2019-05-28 14:54:58 -07:00
صفا الفليج
72497b77b2 Pontoon: Update Arabic (ar) localization of Firefox Send
Localization authors:
- صفا الفليج <safa1996alfulaij@gmail.com>
2019-05-27 18:34:16 +00:00
صفا الفليج
7c4a00ecd1 Pontoon: Update Arabic (ar) localization of Firefox Send
Localization authors:
- صفا الفليج <safa1996alfulaij@gmail.com>
2019-05-27 18:11:26 +00:00
صفا الفليج
d96cb1aec4 Pontoon: Update Arabic (ar) localization of Firefox Send
Localization authors:
- صفا الفليج <safa1996alfulaij@gmail.com>
- mohamedstarwars <mohamedstarwars@gmail.com>
2019-05-27 17:57:15 +00:00
Piotr Drąg
fc99ed584f Pontoon: Update Polish (pl) localization of Firefox Send
Localization authors:
- Piotr Drąg <piotrdrag@gmail.com>
- Paweł <bauerp@bauerp.info>
2019-05-27 10:32:12 +00:00
Piotr Drąg
da1ffe581b Pontoon: Update Polish (pl) localization of Firefox Send
Localization authors:
- Piotr Drąg <piotrdrag@gmail.com>
2019-05-27 10:11:35 +00:00
robbp
6cbbbab691 Pontoon: Update Romanian (ro) localization of Firefox Send
Localization authors:
- robbp <robbpaun@gmail.com>
2019-05-26 04:32:02 +00:00
yusup.ramdani
b91bd2b859 Pontoon: Update Sundanese (su) localization of Firefox Send
Localization authors:
- yusup.ramdani <yusup.ramdani@wikimedia.or.id>
2019-05-24 09:12:50 +00:00
yusup.ramdani
14ae124ca8 Pontoon: Update Sundanese (su) localization of Firefox Send
Localization authors:
- yusup.ramdani <yusup.ramdani@wikimedia.or.id>
2019-05-23 12:33:33 +00:00
yusup.ramdani
3bd087a66d Pontoon: Update Sundanese (su) localization of Firefox Send
Localization authors:
- yusup.ramdani <yusup.ramdani@wikimedia.or.id>
2019-05-23 12:12:42 +00:00
yusup.ramdani
57e9fbcd26 Pontoon: Update Sundanese (su) localization of Firefox Send
Localization authors:
- yusup.ramdani <yusup.ramdani@wikimedia.or.id>
2019-05-23 11:52:14 +00:00
yusup.ramdani
bd42445a98 Pontoon: Update Sundanese (su) localization of Firefox Send
Localization authors:
- yusup.ramdani <yusup.ramdani@wikimedia.or.id>
2019-05-23 11:33:33 +00:00
yusup.ramdani
0e1027544c Pontoon: Update Sundanese (su) localization of Firefox Send
Localization authors:
- yusup.ramdani <yusup.ramdani@wikimedia.or.id>
2019-05-23 10:56:55 +00:00
yusup.ramdani
c7532f3f4a Pontoon: Update Sundanese (su) localization of Firefox Send
Localization authors:
- yusup.ramdani <yusup.ramdani@wikimedia.or.id>
2019-05-23 10:13:53 +00:00
yusup.ramdani
97e861f050 Pontoon: Update Sundanese (su) localization of Firefox Send
Localization authors:
- yusup.ramdani <yusup.ramdani@wikimedia.or.id>
2019-05-23 09:52:40 +00:00
marsf
9f3adbf6ad Pontoon: Update Japanese (ja) localization of Firefox Send
Localization authors:
- marsf <chimantaea_mirabilis@yahoo.co.jp>
2019-05-21 01:52:19 +00:00
Rhoslyn Prys
7b4c42a56f Pontoon: Update Welsh (cy) localization of Firefox Send
Localization authors:
- Rhoslyn Prys <rprys@posteo.net>
2019-05-18 09:32:44 +00:00
Jim Spentzos
0f763ca4ec Pontoon: Update Greek (el) localization of Firefox Send
Localization authors:
- Jim Spentzos <jimspentzos2000@gmail.com>
2019-05-17 11:33:35 +00:00
robbp
97164a4b08 Pontoon: Update Romanian (ro) localization of Firefox Send
Localization authors:
- robbp <robbpaun@gmail.com>
2019-05-17 10:33:18 +00:00
Besnik Bleta
ee8baff557 Pontoon: Update Albanian (sq) localization of Firefox Send
Localization authors:
- Besnik Bleta <besnik@programeshqip.org>
2019-05-13 09:53:37 +00:00
Aman Alam
637a6d86fb Pontoon: Update Punjabi (pa-IN) localization of Firefox Send
Localization authors:
- Aman Alam <amanpreet.alam@gmail.com>
2019-05-11 06:53:49 +00:00
Aman Alam
f8f200cbcd Pontoon: Update Punjabi (pa-IN) localization of Firefox Send
Localization authors:
- Aman Alam <amanpreet.alam@gmail.com>
2019-05-10 14:13:11 +00:00
Aman Alam
0e4b9f425f Pontoon: Update Punjabi (pa-IN) localization of Firefox Send
Localization authors:
- Aman Alam <amanpreet.alam@gmail.com>
2019-05-10 07:13:45 +00:00
Aman Alam
eb4a2c9f02 Pontoon: Update Punjabi (pa-IN) localization of Firefox Send
Localization authors:
- Aman Alam <amanpreet.alam@gmail.com>
2019-05-10 06:52:40 +00:00
Aman Alam
55f3abaa1b Pontoon: Update Punjabi (pa-IN) localization of Firefox Send
Localization authors:
- Aman Alam <amanpreet.alam@gmail.com>
2019-05-09 02:34:32 +00:00
Merike Sell
bb1ee80c34 Pontoon: Update Estonian (et) localization of Firefox Send
Localization authors:
- Merike Sell <merikes@gmail.com>
2019-05-07 20:34:14 +00:00
Merike Sell
f9edf196a2 Pontoon: Update Estonian (et) localization of Firefox Send
Localization authors:
- Merike Sell <merikes@gmail.com>
2019-05-07 20:15:43 +00:00
Artem Polivanchuk
9bebab3f66 Pontoon: Update Ukrainian (uk) localization of Firefox Send
Localization authors:
- Artem Polivanchuk <artem@mozilla.org.ua>
2019-05-07 08:32:45 +00:00
Merike Sell
e9bf6e235b Pontoon: Update Estonian (et) localization of Firefox Send
Localization authors:
- Merike Sell <merikes@gmail.com>
2019-05-06 20:12:30 +00:00
Merike Sell
88a3dc94d5 Pontoon: Update Estonian (et) localization of Firefox Send
Localization authors:
- Merike Sell <merikes@gmail.com>
2019-05-06 19:52:42 +00:00
Paulius
d7143ab63a Pontoon: Update Lithuanian (lt) localization of Firefox Send
Localization authors:
- Paulius <paulius@mozilla.lt>
2019-05-05 15:32:35 +00:00
Selim Şumlu
b340969cc1 Pontoon: Update Turkish (tr) localization of Firefox Send
Localization authors:
- Selim Şumlu <selim@sum.lu>
2019-05-05 13:11:33 +00:00
Mikeyy
ce0bf26b9e Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Mikeyy <mihovil@miho.im>
2019-05-05 08:52:14 +00:00
jlG
193f43ac9d Pontoon: Update Spanish (Spain) (es-ES) localization of Firefox Send
Localization authors:
- jlG <jlg.l10n.es@gmail.com>
2019-05-04 17:52:19 +00:00
Jordi Serratosa
e376f978a2 Pontoon: Update Catalan (ca) localization of Firefox Send
Localization authors:
- Jordi Serratosa <jordis@softcatala.cat>
2019-05-04 16:32:48 +00:00
Juraj Cigáň
bd93fb66a5 Pontoon: Update Slovak (sk) localization of Firefox Send
Localization authors:
- Juraj Cigáň <kusavica@gmail.com>
2019-05-04 10:31:59 +00:00
Davide
fc79233ade Pontoon: Update Italian (it) localization of Firefox Send
Localization authors:
- Davide <dvd.forty@gmail.com>
2019-05-04 08:52:50 +00:00
Danny Coates
8263a9eaa9 updated deps 2019-05-03 17:04:26 -07:00
Juan Sián
5d02f47e41 Pontoon: Update Kaqchikel (cak) localization of Firefox Send
Localization authors:
- Juan Sián <ajtzibsyan@yahoo.com>
2019-05-03 22:52:31 +00:00
Danny Coates
23ecb632eb added signin button color experiment. closes #1306 (#1320) 2019-05-03 13:10:56 -04:00
Danny Coates
b82177dc44 Merge pull request #1324 from mozilla/style-tweaks-for-trailhead
tweak some styles for trailhead
2019-05-03 09:59:44 -07:00
John Gruen
51296d5489 tweak some styles for trailhead 2019-05-03 18:45:36 +02:00
Danny Coates
f603f40f43 added agent to server metrics (#1321) 2019-05-03 12:25:12 -04:00
Rok Žerdin
19ac0480ee Pontoon: Update Slovenian (sl) localization of Firefox Send
Localization authors:
- Rok Žerdin <zerdo90@gmail.com>
2019-05-03 12:54:00 +00:00
Jakob Kappel
7d43f4f145 Pontoon: Update Danish (da) localization of Firefox Send
Localization authors:
- Jakob Kappel <jakobkpetersen@gmail.com>
2019-05-03 07:13:17 +00:00
Danny Coates
8f17c86611 Merge pull request #1322 from hugomiguelabreu/master
Defined retry_strategy for redis. Closes #1292
2019-05-02 15:05:35 -07:00
Hugo Abreu
f517c514d8 Defined retry_strategy for redis. Closes #1292 2019-05-02 21:56:28 +01:00
Jiri Grönroos
e2d9c0acca Pontoon: Update Finnish (fi) localization of Firefox Send
Localization authors:
- Jiri Grönroos <jiri.gronroos@iki.fi>
- Lasse Liehu <lasse.liehu@iki.fi>
2019-05-02 20:52:02 +00:00
Gabriela
c3221bddf2 Pontoon: Update Spanish (Argentina) (es-AR) localization of Firefox Send
Localization authors:
- Gabriela <gmontagu@gmail.com>
2019-05-02 18:32:26 +00:00
goofy
5ac10a2057 Pontoon: Update French (fr) localization of Firefox Send
Localization authors:
- goofy <goofy@babelzilla.org>
2019-05-02 18:12:16 +00:00
Théo Chevalier
85ce14a991 Pontoon: Update French (fr) localization of Firefox Send
Localization authors:
- Théo Chevalier <theo.chevalier11@gmail.com>
2019-05-02 17:11:17 +00:00
Rhoslyn Prys
2594581965 Pontoon: Update Welsh (cy) localization of Firefox Send
Localization authors:
- Rhoslyn Prys <rprys@posteo.net>
2019-05-02 16:12:37 +00:00
Balázs Meskó
1a3968476a Pontoon: Update Hungarian (hu) localization of Firefox Send
Localization authors:
- Balázs Meskó <meskobalazs@gmail.com>
2019-05-02 15:33:15 +00:00
Ian Neal
281abfc79b Pontoon: Update English (Great Britain) (en-GB) localization of Firefox Send
Localization authors:
- Ian Neal <iann_bugzilla@blueyonder.co.uk>
2019-05-02 15:33:12 +00:00
Fauzan Alfi
6dd4a92467 Pontoon: Update Indonesian (id) localization of Firefox Send
Localization authors:
- Fauzan Alfi <fauzanalfi@mozilla.web.id>
2019-05-02 14:32:29 +00:00
Alexander Slovesnik
9614c119aa Pontoon: Update Russian (ru) localization of Firefox Send
Localization authors:
- Alexander Slovesnik <unghost@mozilla-russia.org>
2019-05-02 12:53:09 +00:00
ജോയ്സ്
1e1c21a45a Pontoon: Update Malayalam (ml) localization of Firefox Send
Localization authors:
- ജോയ്സ് <joicefootball@gmail.com>
2019-05-02 12:53:04 +00:00
Fjoerfoks
8cff6f9441 Pontoon: Update Frisian (fy-NL) localization of Firefox Send
Localization authors:
- Fjoerfoks <fryskefirefox@gmail.com>
2019-05-02 11:11:24 +00:00
Mark Heijl
23c2a61567 Pontoon: Update Dutch (nl) localization of Firefox Send
Localization authors:
- Mark Heijl <markh@babelzilla.org>
2019-05-02 11:11:22 +00:00
Piotr Drąg
903cb9cc49 Pontoon: Update Polish (pl) localization of Firefox Send
Localization authors:
- Piotr Drąg <piotrdrag@gmail.com>
2019-05-02 09:52:00 +00:00
Quế Tùng
d4901662f8 Pontoon: Update Vietnamese (vi) localization of Firefox Send
Localization authors:
- Quế Tùng <best.cloney.1301@gmail.com>
2019-05-02 05:12:13 +00:00
passionforlife
686197be61 Pontoon: Update Chinese (China) (zh-CN) localization of Firefox Send
Localization authors:
- passionforlife <eloli@foxmail.com>
2019-05-02 02:52:26 +00:00
Pin-guang Chen
dd848f19b4 Pontoon: Update Chinese (Taiwan) (zh-TW) localization of Firefox Send
Localization authors:
- Pin-guang Chen <petercpg@mail.moztw.org>
2019-05-02 02:32:08 +00:00
Kohei Yoshino
a7d1607cb3 Pontoon: Update English (Canada) (en-CA) localization of Firefox Send
Localization authors:
- Kohei Yoshino <kohei.yoshino@gmail.com>
2019-05-02 01:32:27 +00:00
ravmn
508e252067 Pontoon: Update Spanish (Chile) (es-CL) localization of Firefox Send
Localization authors:
- ravmn <ravmn@ravmn.cl>
2019-05-02 00:31:50 +00:00
Pedro Burlamaqui Bendahan
2cf409ca11 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Localization authors:
- Marcelo Ghelman <marcelo.ghelman@gmail.com>
- Pedro Burlamaqui Bendahan <pregomoraes2@gmail.com>
2019-05-02 00:31:47 +00:00
G12r
3f0fac738a Pontoon: Update Georgian (ka) localization of Firefox Send
Localization authors:
- G12r <georgianization@outlook.com>
2019-05-01 22:32:09 +00:00
Hugo
9bd14a17f9 Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Firefox Send
Localization authors:
- Hugo <hugo.miguel.abreu@gmail.com>
- Rodrigo <rodrigo.mcunha@hotmail.com>
2019-05-01 21:11:55 +00:00
Mark Heijl
4505296b35 Pontoon: Update Dutch (nl) localization of Firefox Send
Localization authors:
- Mark Heijl <markh@babelzilla.org>
2019-05-01 18:52:22 +00:00
Björn I
5a91ba47c6 Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Firefox Send
Localization authors:
- Björn I. <bjorni.svindseth@yahoo.com>
2019-05-01 18:32:10 +00:00
Michael Wolf
b82e2efd33 Pontoon: Update Sorbian, Upper (hsb) localization of Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2019-05-01 18:11:50 +00:00
Michael Wolf
284676d956 Pontoon: Update Sorbian, Lower (dsb) localization of Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2019-05-01 18:11:47 +00:00
Melo46
d91edcb653 Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Melo46 <melo@carmu.com>
2019-05-01 18:11:45 +00:00
Melo46
9ffc792dec Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Melo46 <melo@carmu.com>
2019-05-01 17:51:15 +00:00
Michal Stanke
7d3973a5e4 Pontoon: Update Czech (cs) localization of Firefox Send
Localization authors:
- Michal Stanke <mstanke@mozilla.cz>
2019-05-01 17:51:12 +00:00
Michael Köhler
ffc0d57576 Pontoon: Update German (de) localization of Firefox Send
Localization authors:
- Michael Köhler <michael.koehler1@gmx.de>
2019-05-01 17:32:21 +00:00
Andreas Pettersson
f28ee8ab78 Pontoon: Update Swedish (sv-SE) localization of Firefox Send
Localization authors:
- Andreas Pettersson <az@kth.se>
2019-05-01 17:11:35 +00:00
Rok Žerdin
6b02a2167c Pontoon: Update Slovenian (sl) localization of Firefox Send
Localization authors:
- Rok Žerdin <zerdo90@gmail.com>
2019-05-01 17:11:32 +00:00
Théo Chevalier
c9b9c338d7 Pontoon: Update French (fr) localization of Firefox Send
Localization authors:
- Théo Chevalier <theo.chevalier11@gmail.com>
2019-05-01 16:52:18 +00:00
Joe Becher
d22d54dee0 Rename circle.yml to .circleci/config.yml
Corrected config filename and path. This should get it building correctly on CircleCI
2019-05-01 09:50:52 -07:00
Danny Coates
20b9279eec added survey dialog. closes #1307 2019-05-01 09:47:04 -07:00
Hugo Abreu
ce4157ac08 Fixed inactive scroll bar. Closes #1303 (#1317)
* Fixed inactive scroll bar. Closes #1303

* Changed Sign in button string. Closes #1309

* Changed button string id

* Reverted en-CA and en-GB changes
2019-05-01 09:39:29 -07:00
Selim Şumlu
3c74d9958f Pontoon: Update Turkish (tr) localization of Firefox Send
Localization authors:
- Selim Şumlu <selim@sum.lu>
2019-05-01 13:11:39 +00:00
Jiri Grönroos
569d110f6e Pontoon: Update Finnish (fi) localization of Firefox Send
Localization authors:
- Jiri Grönroos <jiri.gronroos@iki.fi>
2019-04-30 22:32:24 +00:00
Jim Spentzos
e69c91b5eb Pontoon: Update Greek (el) localization of Firefox Send
Localization authors:
- Jim Spentzos <jimspentzos2000@gmail.com>
2019-04-29 22:13:44 +00:00
Sav22999
2477b6cde8 Pontoon: Update Italian (it) localization of Firefox Send
Localization authors:
- Sav22999 <saverio.morelli@outlook.it>
2019-04-29 20:55:16 +00:00
Cristian Silaghi
8cf42a2711 Pontoon: Update Romanian (ro) localization of Firefox Send
Localization authors:
- Cristian Silaghi <cristian.silaghi@mozilla.ro>
2019-04-29 18:33:38 +00:00
Björn I
5207c3fb15 Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Firefox Send
Localization authors:
- Björn I. <bjorni.svindseth@yahoo.com>
2019-04-29 14:12:34 +00:00
Fjoerfoks
a166f98b66 Pontoon: Update Frisian (fy-NL) localization of Firefox Send
Localization authors:
- Fjoerfoks <fryskefirefox@gmail.com>
2019-04-29 13:12:49 +00:00
Michael Wolf
d572c44dd0 Pontoon: Update Sorbian, Lower (dsb) localization of Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2019-04-28 16:32:08 +00:00
Artem Polivanchuk
9286140b15 Pontoon: Update Ukrainian (uk) localization of Firefox Send
Localization authors:
- Artem Polivanchuk <artem@mozilla.org.ua>
2019-04-28 15:39:10 +00:00
Fjoerfoks
0b738bc152 Pontoon: Update Dutch (nl) localization of Firefox Send
Localization authors:
- Fjoerfoks <fryskefirefox@gmail.com>
2019-04-28 15:10:58 +00:00
Paulius
f06ddfd888 Pontoon: Update Lithuanian (lt) localization of Firefox Send
Localization authors:
- Paulius <paulius@mozilla.lt>
2019-04-28 08:51:50 +00:00
avelper
f10ed62310 Pontoon: Update Spanish (Spain) (es-ES) localization of Firefox Send
Localization authors:
- avelper <avelper@mozilla-hispano.org>
2019-04-28 08:32:19 +00:00
Melo46
a5c05daac5 Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Melo46 <melo@carmu.com>
2019-04-28 03:52:37 +00:00
ravmn
a84ce0b0cf Pontoon: Update Spanish (Chile) (es-CL) localization of Firefox Send
Localization authors:
- ravmn <ravmn@ravmn.cl>
2019-04-28 00:32:28 +00:00
Marcelo Ghelman
adecddae77 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Localization authors:
- Marcelo Ghelman <marcelo.ghelman@gmail.com>
2019-04-27 23:11:59 +00:00
Joergen
927706d67c Pontoon: Update Danish (da) localization of Firefox Send
Localization authors:
- Joergen <joergenr@stofanet.dk>
2019-04-27 21:32:13 +00:00
Victor Bychek
e70c883673 Pontoon: Update Russian (ru) localization of Firefox Send
Localization authors:
- Victor Bychek <a@bychek.ru>
2019-04-27 19:11:49 +00:00
Anish Sheela
09f583c569 Pontoon: Update Malayalam (ml) localization of Firefox Send
Localization authors:
- Anish Sheela <aneesh.nl@gmail.com>
2019-04-27 16:31:52 +00:00
Balázs Meskó
6e676404a0 Pontoon: Update Hungarian (hu) localization of Firefox Send
Localization authors:
- Balázs Meskó <meskobalazs@gmail.com>
2019-04-27 16:11:59 +00:00
Piotr Drąg
daa70a61eb Pontoon: Update Polish (pl) localization of Firefox Send
Localization authors:
- Piotr Drąg <piotrdrag@gmail.com>
2019-04-27 14:31:17 +00:00
G12r
2ed4ad6772 Pontoon: Update Georgian (ka) localization of Firefox Send
Localization authors:
- G12r <georgianization@outlook.com>
2019-04-27 13:11:15 +00:00
Fauzan Alfi
f0a42c5c07 Pontoon: Update Indonesian (id) localization of Firefox Send
Localization authors:
- Fauzan Alfi <fauzanalfi@mozilla.web.id>
2019-04-27 10:31:33 +00:00
Michal Stanke
02174c3245 Pontoon: Update Czech (cs) localization of Firefox Send
Localization authors:
- Michal Stanke <mstanke@mozilla.cz>
2019-04-27 09:52:02 +00:00
Rhoslyn Prys
8a148747bd Pontoon: Update Welsh (cy) localization of Firefox Send
Localization authors:
- Rhoslyn Prys <rprys@posteo.net>
2019-04-27 09:11:31 +00:00
Lan Glad
66750ca9ff Pontoon: Update Slovenian (sl) localization of Firefox Send
Localization authors:
- Lan Glad <upwinxp@gmail.com>
2019-04-27 08:51:40 +00:00
Andreas Pettersson
e84ec0fcb3 Pontoon: Update Swedish (sv-SE) localization of Firefox Send
Localization authors:
- Andreas Pettersson <az@kth.se>
2019-04-27 07:51:40 +00:00
Michael Köhler
39edee306e Pontoon: Update German (de) localization of Firefox Send
Localization authors:
- Michael Köhler <michael.koehler1@gmx.de>
2019-04-27 07:11:14 +00:00
Quế Tùng
464fdc9873 Pontoon: Update Vietnamese (vi) localization of Firefox Send
Localization authors:
- Quế Tùng <best.cloney.1301@gmail.com>
2019-04-27 06:12:24 +00:00
Luna Jernberg
38ef8db3f1 Pontoon: Update Swedish (sv-SE) localization of Firefox Send
Localization authors:
- Luna Jernberg <bittin@cafe8bitar.se>
2019-04-27 05:52:05 +00:00
Pin-guang Chen
3fee10c890 Pontoon: Update Chinese (Taiwan) (zh-TW) localization of Firefox Send
Localization authors:
- Pin-guang Chen <petercpg@mail.moztw.org>
2019-04-27 04:31:27 +00:00
passionforlife
3a35b2ae2a Pontoon: Update Chinese (China) (zh-CN) localization of Firefox Send
Localization authors:
- passionforlife <eloli@foxmail.com>
2019-04-27 01:11:24 +00:00
passionforlife
cff4227132 Pontoon: Update Chinese (China) (zh-CN) localization of Firefox Send
Localization authors:
- passionforlife <eloli@foxmail.com>
2019-04-26 23:32:24 +00:00
Rodrigo
b01dbdc119 Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Firefox Send
Localization authors:
- Rodrigo <rodrigo.mcunha@hotmail.com>
2019-04-26 22:31:51 +00:00
Michael Wolf
62603f095e Pontoon: Update Sorbian, Upper (hsb) localization of Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2019-04-26 19:12:14 +00:00
Juraj Cigáň
1e95a9122e Pontoon: Update Slovak (sk) localization of Firefox Send
Localization authors:
- Juraj Cigáň <kusavica@gmail.com>
2019-04-26 19:12:11 +00:00
Kohei Yoshino
308fd0cdcb Pontoon: Update English (Canada) (en-CA) localization of Firefox Send
Localization authors:
- Kohei Yoshino <kohei.yoshino@gmail.com>
2019-04-26 19:12:08 +00:00
Danny Coates
a4e8c0b4a3 Merge pull request #1310 from mozilla/updates
added promo string to ftl & updated deps
2019-04-26 11:49:10 -07:00
Danny Coates
e7964c03ed added promo string to ftl & updated deps 2019-04-26 11:41:34 -07:00
Romi Hardiyanto
c800257678 Pontoon: Update Indonesian (id) localization of Firefox Send
Localization authors:
- Romi Hardiyanto <romihardiyanto@gmail.com>
2019-04-25 08:11:59 +00:00
Melo46
89a3c984e7 Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Melo46 <melo@carmu.com>
2019-04-21 07:31:53 +00:00
Anish Sheela
05d32ef9d7 Pontoon: Update Malayalam (ml) localization of Firefox Send
Localization authors:
- Anish Sheela <aneesh.nl@gmail.com>
2019-04-20 12:31:50 +00:00
mujeebcpy
a2ec22a4e0 Pontoon: Update Malayalam (ml) localization of Firefox Send
Localization authors:
- mujeebcpy <mujeebcpy@gmail.com>
- Anish Sheela <aneesh.nl@gmail.com>
- Kiran Johns <kiranjohns101@gmail.com>
2019-04-20 12:11:08 +00:00
Balasankar C
7ae676ce8a Pontoon: Update Malayalam (ml) localization of Firefox Send
Localization authors:
- mujeebcpy <mujeebcpy@gmail.com>
- Balasankar C <balasankarc@autistici.org>
- Kiran Johns <kiranjohns101@gmail.com>
2019-04-20 09:52:12 +00:00
Balasankar C
b0c2c329e2 Pontoon: Update Malayalam (ml) localization of Firefox Send
Localization authors:
- Balasankar C <balasankarc@autistici.org>
- Kiran Johns <kiranjohns101@gmail.com>
2019-04-20 09:36:13 +00:00
Balasankar C
9c423bb435 Pontoon: Update Malayalam (ml) localization of Firefox Send
Localization authors:
- Balasankar C <balasankarc@autistici.org>
2019-04-20 09:11:59 +00:00
Balasankar C
3cb6952d68 Pontoon: Update Malayalam (ml) localization of Firefox Send
Localization authors:
- Balasankar C <balasankarc@autistici.org>
2019-04-20 08:51:47 +00:00
Danny Coates
147ed4c736 Merge pull request #1299 from slootjes/master
Prevent possible download counter race condition
2019-04-19 10:37:58 -07:00
Robert
f94918bebd Prevent possible download counter race condition 2019-04-19 13:10:49 +02:00
ivan.pompa
ee45a835be Pontoon: Update Spanish (Mexico) (es-MX) localization of Firefox Send
Localization authors:
- ivan.pompa <ivan.pompa@gmail.com>
2019-04-18 16:12:33 +00:00
Hyeonseok Shin
26ad1b8763 Pontoon: Update Korean (ko) localization of Firefox Send
Localization authors:
- Hyeonseok Shin <hyeonseok@gmail.com>
- Native <nativehyun@gmail.com>
- 종이상자 <lego37yoon@outlook.com>
2019-04-18 01:53:10 +00:00
Danny Coates
8b798ce36c v3.0.10 2019-04-17 09:36:34 -07:00
Danny Coates
894ad6cb08 added locales to production 2019-04-17 09:35:50 -07:00
Danny Coates
98c4bd0f50 updated deps 2019-04-17 09:27:50 -07:00
Hyeonseok Shin
898d152810 Pontoon: Update Korean (ko) localization of Firefox Send
Localization authors:
- Hyeonseok Shin <hyeonseok@gmail.com>
- 종이상자 <lego37yoon@outlook.com>
2019-04-14 11:11:25 +00:00
Melo46
9c588ed008 Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Melo46 <melo@carmu.com>
2019-04-13 22:51:32 +00:00
Danny Coates
1da7e1c112 added overflow-hidden to file input element. fixes #1295 2019-04-11 11:08:48 -07:00
Danny Coates
19d1f8cf80 updated deps 2019-04-11 11:05:40 -07:00
Danny Coates
29f243fdda removed old encryption key implementation 2019-04-11 10:24:29 -07:00
Lasse Liehu
bd58022b08 Pontoon: Update Finnish (fi) localization of Firefox Send
Localization authors:
- Lasse Liehu <lasse.liehu@iki.fi>
2019-04-07 19:52:22 +00:00
Jim Spentzos
a6fa2c642c Pontoon: Update Greek (el) localization of Firefox Send
Localization authors:
- Jim Spentzos <jimspentzos2000@gmail.com>
- merianosnikos <merianosnikos@gmail.com>
2019-04-06 04:53:54 +00:00
Danny Coates
890642fcff Merge pull request #1291 from mozilla/reject-loading-unexpected-urls
Fix #1283 Prevent loading any pages other than our file:/// url resou…
2019-04-05 10:57:03 -07:00
Donovan Preston
74ecb598d2 Fix #1283 Prevent loading any pages other than our file:/// url resources and accounts.firefox.com in the webview
Also, remove debug logs.
2019-04-05 12:18:22 -04:00
Christoph Kührer
48b5d85904 Cleanup Android project (Minor refactorings, etc.) (#1244)
* (Android) Get rid of double bangs by using Kotlin view binding

Instead of holding a nullable reference to the WebView, we are now
accessing the WebView using the view binding utility of Kotlin's
Android Extensions.

Further reading:
https://kotlinlang.org/docs/tutorials/android-plugin.html

* (Android) Enable WebView debugging in debug builds

This enables debugging the app's WebView using Chrome's DevTools.
https://developers.google.com/web/tools/chrome-devtools/remote-debugging/webviews

* (Android) Make MainActivity.kt adhere to common Kotlin conventions

* (Android) Update dependencies and improve formatting of Gradle files

This updates the Kotlin plugin to 1.3.21 and the Gradle plugin to 3.3.2

* (Android) Remove unnecessary ConstraintLayout container

Layout files should generally have as few nested layers as possible,
because every layer affects the performance.

* (Android) Use JSONObject class to construct a JSON string

It is way safer to construct a JSON string using classes that are
meant for doing that, instead of concatenating raw strings.

* (Android) Suppress JavaScript lint warning

* (Android) Use Kotlin string templates instead of concatenating strings

* (Android) Add missing SuppressLint import
2019-04-04 15:25:25 -04:00
Danny Coates
373da3f090 Merge pull request #1290 from mozilla/call-setTranslate-on-android
Call setTranslate on android.
2019-04-04 11:55:55 -07:00
Donovan Preston
4a69ccbe51 Call setTranslate on android. 2019-04-04 14:49:01 -04:00
John Gruen
4c1496e1cd Merge pull request #1288 from SuriyaaKudoIsc/patch-1
Replace title with Firefox Send logo
2019-04-04 19:52:06 +02:00
Danny Coates
0a243dfb52 Merge pull request #1287 from Mozilla-GitHub-Standards/master
Add Mozilla Code of Conduct
2019-04-04 10:17:59 -07:00
Jim Spentzos
79bd847042 Pontoon: Update Greek (el) localization of Firefox Send
Localization authors:
- Jim Spentzos <jimspentzos2000@gmail.com>
- merianosnikos <merianosnikos@gmail.com>
2019-04-03 16:11:43 +00:00
Luis A. Sánchez
2fe5cad9d5 Pontoon: Update Spanish (Mexico) (es-MX) localization of Firefox Send
Localization authors:
- Luis A. Sánchez <lasr21@gmail.com>
2019-04-03 15:11:35 +00:00
Hyeonseok Shin
fbde75fd66 Pontoon: Update Korean (ko) localization of Firefox Send
Localization authors:
- Hyeonseok Shin <hyeonseok@gmail.com>
- Native <nativehyun@gmail.com>
2019-04-03 02:32:28 +00:00
Hyeonseok Shin
24167161b1 Pontoon: Update Korean (ko) localization of Firefox Send
Localization authors:
- Hyeonseok Shin <hyeonseok@gmail.com>
- Native <nativehyun@gmail.com>
2019-04-03 02:12:51 +00:00
Slimane Selyan AMIRI
eda132832f Pontoon: Update Kabyle (kab) localization of Firefox Send
Localization authors:
- Slimane Selyan AMIRI <slimane.amiri@gmail.com>
2019-04-02 13:51:12 +00:00
Yassine Aït-El-Mouden
4839ff3584 Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Yassine Aït-El-Mouden <yaitelmouden@outlook.com>
2019-04-01 14:31:32 +00:00
Yassine Aït-El-Mouden
de2d11cc59 Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Yassine Aït-El-Mouden <yaitelmouden@outlook.com>
2019-04-01 14:11:22 +00:00
Yassine Aït-El-Mouden
95779b3243 Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Yassine Aït-El-Mouden <yaitelmouden@outlook.com>
2019-04-01 13:51:31 +00:00
Danny Coates
7f76a279c3 fixed L10N_DEV option 2019-03-31 13:04:16 -07:00
Danny Coates
219b1d6806 updated deps 2019-03-31 13:04:16 -07:00
Danny Coates
efea0e5ab0 added gravatar to CSP image-src 2019-03-31 13:04:15 -07:00
Danny Coates
5d19a9d696 fixed dev android for longer file ids 2019-03-31 13:04:15 -07:00
Yassine Aït-El-Mouden
17a12e3194 Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Yassine Aït-El-Mouden <yaitelmouden@outlook.com>
2019-03-31 01:51:33 +00:00
Yassine Aït-El-Mouden
b71265b0c5 Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Yassine Aït-El-Mouden <yaitelmouden@outlook.com>
2019-03-31 01:11:08 +00:00
Yassine Aït-El-Mouden
4a62048d64 Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Yassine Aït-El-Mouden <yaitelmouden@outlook.com>
2019-03-30 22:51:45 +00:00
Suriyaa ✌️️
acd48cc2f5 Replace title with Firefox Send logo 2019-03-30 15:47:34 +01:00
Yassine Aït-El-Mouden
364778c516 Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Yassine Aït-El-Mouden <yaitelmouden@outlook.com>
2019-03-30 14:31:41 +00:00
Yassine Aït-El-Mouden
d7ca9b4f84 Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Yassine Aït-El-Mouden <yaitelmouden@outlook.com>
2019-03-30 14:11:54 +00:00
Andreas Pettersson
b6350c787a Pontoon: Update Swedish (sv-SE) localization of Firefox Send
Localization authors:
- Andreas Pettersson <az@kth.se>
2019-03-30 08:31:18 +00:00
Mozilla-GitHub-Standards
ee8a672873 Add Mozilla Code of Conduct file
Fixes #1286.

_(Message COC002)_
2019-03-29 23:15:18 -07:00
Yassine Aït-El-Mouden
67b812a538 Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Yassine Aït-El-Mouden <yaitelmouden@outlook.com>
2019-03-30 00:31:45 +00:00
Yassine Aït-El-Mouden
c811cbd34e Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Yassine Aït-El-Mouden <yaitelmouden@outlook.com>
2019-03-30 00:12:12 +00:00
Slimane Selyan AMIRI
2ed09d1fda Pontoon: Update Kabyle (kab) localization of Firefox Send
Localization authors:
- Slimane Selyan AMIRI <slimane.amiri@gmail.com>
2019-03-29 21:51:42 +00:00
Slimane Selyan AMIRI
557ecb196d Pontoon: Update Kabyle (kab) localization of Firefox Send
Localization authors:
- Slimane Selyan AMIRI <slimane.amiri@gmail.com>
2019-03-29 21:31:36 +00:00
Slimane Selyan AMIRI
88e8a234d6 Pontoon: Update Kabyle (kab) localization of Firefox Send
Localization authors:
- Slimane Selyan AMIRI <slimane.amiri@gmail.com>
2019-03-29 21:12:23 +00:00
Jiri Grönroos
34eb0fce2a Pontoon: Update Finnish (fi) localization of Firefox Send
Localization authors:
- Jiri Grönroos <jiri.gronroos@iki.fi>
2019-03-29 20:11:21 +00:00
Yassine Aït-El-Mouden
995054a2cb Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Yassine Aït-El-Mouden <yaitelmouden@outlook.com>
2019-03-29 12:51:50 +00:00
Yassine Aït-El-Mouden
e70161bfb0 Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Yassine Aït-El-Mouden <yaitelmouden@outlook.com>
2019-03-29 12:31:36 +00:00
Yassine Aït-El-Mouden
ebf62761bc Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Yassine Aït-El-Mouden <yaitelmouden@outlook.com>
2019-03-29 11:51:17 +00:00
Yassine Aït-El-Mouden
cf08b03a6b Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Yassine Aït-El-Mouden <yaitelmouden@outlook.com>
2019-03-29 11:31:59 +00:00
Besnik Bleta
f3be26d5f5 Pontoon: Update Albanian (sq) localization of Firefox Send
Localization authors:
- Besnik Bleta <besnik@programeshqip.org>
2019-03-29 11:31:56 +00:00
Yassine Aït-El-Mouden
03c68b0c58 Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Yassine Aït-El-Mouden <yaitelmouden@outlook.com>
2019-03-29 11:11:32 +00:00
Besnik Bleta
59d460e80b Pontoon: Update Albanian (sq) localization of Firefox Send
Localization authors:
- Besnik Bleta <besnik@programeshqip.org>
- wanzhi09 <wanzhi09@gmail.com>
2019-03-29 11:11:30 +00:00
Yassine Aït-El-Mouden
87f947c31d Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Yassine Aït-El-Mouden <yaitelmouden@outlook.com>
2019-03-29 00:31:36 +00:00
Yassine Aït-El-Mouden
7ff0a7654c Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Yassine Aït-El-Mouden <yaitelmouden@outlook.com>
2019-03-29 00:12:13 +00:00
Yassine Aït-El-Mouden
9f829e8467 Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Yassine Aït-El-Mouden <yaitelmouden@outlook.com>
2019-03-28 23:51:35 +00:00
Yassine Aït-El-Mouden
b68762da50 Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Yassine Aït-El-Mouden <yaitelmouden@outlook.com>
2019-03-28 23:31:33 +00:00
Yassine Aït-El-Mouden
caef279fed Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Yassine Aït-El-Mouden <yaitelmouden@outlook.com>
2019-03-28 23:12:45 +00:00
Yassine Aït-El-Mouden
0dfda7c610 Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Yassine Aït-El-Mouden <yaitelmouden@outlook.com>
2019-03-28 18:32:35 +00:00
Yassine Aït-El-Mouden
5c2d9d8673 Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Yassine Aït-El-Mouden <yaitelmouden@outlook.com>
2019-03-28 18:11:59 +00:00
Slimane Selyan AMIRI
be51ae7ac9 Pontoon: Update Kabyle (kab) localization of Firefox Send
Localization authors:
- Slimane Selyan AMIRI <slimane.amiri@gmail.com>
2019-03-28 14:11:15 +00:00
Ian Neal
1ba6aceb1f Pontoon: Update English (Great Britain) (en-GB) localization of Firefox Send
Localization authors:
- Ian Neal <iann_bugzilla@blueyonder.co.uk>
2019-03-28 09:51:43 +00:00
Jiri Grönroos
0a3c3d8c51 Pontoon: Update Finnish (fi) localization of Firefox Send
Localization authors:
- Jiri Grönroos <jiri.gronroos@iki.fi>
- Lasse Liehu <lasse.liehu@iki.fi>
2019-03-27 22:51:33 +00:00
Danny Coates
38aa460a03 v3.0.9 2019-03-26 10:27:25 -07:00
Danny Coates
58b7a17680 fixed isFile for extended file id size 2019-03-26 09:58:04 -07:00
Danny Coates
1ce115c3e9 updated prod locales 2019-03-26 09:45:35 -07:00
Danny Coates
8cf3b89f91 increase file id to 8 bytes 2019-03-26 09:32:44 -07:00
p.sanroman.bengoetxea
eced5be836 Pontoon: Update Basque (eu) localization of Firefox Send
Localization authors:
- p.sanroman.bengoetxea <p.sanroman.bengoetxea@gmail.com>
- julenx <julenx@gmail.com>
2019-03-24 20:51:38 +00:00
Jiri Grönroos
bb4fa0a75c Pontoon: Update Finnish (fi) localization of Firefox Send
Localization authors:
- Jiri Grönroos <jiri.gronroos@iki.fi>
2019-03-24 18:51:18 +00:00
Jiri Grönroos
98b62cd1c2 Pontoon: Update Finnish (fi) localization of Firefox Send
Localization authors:
- Jiri Grönroos <jiri.gronroos@iki.fi>
2019-03-24 18:12:07 +00:00
Jim Spentzos
62461f50a5 Pontoon: Update Greek (el) localization of Firefox Send
Localization authors:
- Jim Spentzos <jimspentzos2000@gmail.com>
- merianosnikos <merianosnikos@gmail.com>
2019-03-24 16:51:52 +00:00
Марко Костић (Marko Kostić)
1be87a531c Pontoon: Update Serbian (sr) localization of Firefox Send
Localization authors:
- Марко Костић (Marko Kostić) <marko.m.kostic@gmail.com>
2019-03-24 12:12:06 +00:00
Марко Костић (Marko Kostić)
f70caf814b Pontoon: Update Serbian (sr) localization of Firefox Send
Localization authors:
- Марко Костић (Marko Kostić) <marko.m.kostic@gmail.com>
2019-03-24 11:51:41 +00:00
Марко Костић (Marko Kostić)
a9595e501d Pontoon: Update Serbian (sr) localization of Firefox Send
Localization authors:
- Марко Костић (Marko Kostić) <marko.m.kostic@gmail.com>
2019-03-24 11:31:53 +00:00
Melo46
40814207ee Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Melo46 <melo@carmu.com>
2019-03-24 10:11:26 +00:00
Марко Костић (Marko Kostić)
1970a88ece Pontoon: Update Serbian (sr) localization of Firefox Send
Localization authors:
- Марко Костић (Marko Kostić) <marko.m.kostic@gmail.com>
2019-03-24 09:51:37 +00:00
Марко Костић (Marko Kostić)
a6d41e70b2 Pontoon: Update Serbian (sr) localization of Firefox Send
Localization authors:
- Марко Костић (Marko Kostić) <marko.m.kostic@gmail.com>
2019-03-24 09:32:18 +00:00
merianosnikos
549ce3281a Pontoon: Update Greek (el) localization of Firefox Send
Localization authors:
- Jim Spentzos <jimspentzos2000@gmail.com>
- merianosnikos <merianosnikos@gmail.com>
2019-03-22 00:12:17 +00:00
Danny Coates
1ec56df7ad fixed fxa entrypoint param name... 🤦‍♂️ 2019-03-21 09:30:13 -07:00
robbp
c78899c387 Pontoon: Update Romanian (ro) localization of Firefox Send
Localization authors:
- robbp <robbpaun@gmail.com>
2019-03-21 07:32:41 +00:00
Björn I
c76fe3ac96 Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Firefox Send
Localization authors:
- Björn I. <bjorni.svindseth@yahoo.com>
2019-03-20 15:12:08 +00:00
Björn I
49cfd599ec Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Firefox Send
Localization authors:
- Björn I. <bjorni.svindseth@yahoo.com>
2019-03-20 14:51:43 +00:00
dskmori
74c08200ad Pontoon: Update Korean (ko) localization of Firefox Send
Localization authors:
- dskmori <ghoti.fish.dsk@gmail.com>
2019-03-20 02:11:57 +00:00
Breana Gonzales
8cd5839d36 Pontoon: Update Spanish (Mexico) (es-MX) localization of Firefox Send
Localization authors:
- Breana Gonzales <breanajones@hotmail.com>
2019-03-19 14:51:41 +00:00
Danny Coates
cbd7a99e38 v3.0.8 2019-03-18 16:26:12 -07:00
Danny Coates
6a5960c254 updated CONTRIBUTORS 2019-03-18 15:38:28 -07:00
Danny Coates
b70cbd8359 Merge pull request #1259 from co16353sidak/patch-1
Updated file size limit (as of March 2019)
2019-03-18 15:33:35 -07:00
Danny Coates
ad72fa11a4 added locales to production 2019-03-18 15:26:06 -07:00
Danny Coates
cc9a5d112a added entrypoint param to fxa auth request 2019-03-18 15:01:01 -07:00
Danny Coates
122867b926 updated webcrypto-liner 2019-03-18 12:43:20 -07:00
Michal Stanke
3f7d755070 Pontoon: Update Czech (cs) localization of Firefox Send
Localization authors:
- Michal Stanke <mstanke@mozilla.cz>
2019-03-18 18:11:34 +00:00
Danny Coates
ad9070b7c6 changed webpack output filenames to use contenthash 2019-03-17 19:21:28 -07:00
Sidak Singh Aulakh
30678b824b Updated file size limit (as of March 2019)
The file size limit was previously marked as 2 hours, but now it supports 2.5GB (1GB for non signed in users)
2019-03-17 21:44:01 +05:30
josotrix
5dedad8ae7 Pontoon: Update Spanish (Chile) (es-CL) localization of Firefox Send
Localization authors:
- josotrix <josotrix@ravmn.cl>
- ravmn <ravmn@ravmn.cl>
2019-03-17 15:53:11 +00:00
victor.gonzalezro
748f8cc7f8 Pontoon: Update Spanish (Chile) (es-CL) localization of Firefox Send
Localization authors:
- victor.gonzalezro <victor.gonzalezro@gmail.com>
- josotrix <josotrix@ravmn.cl>
2019-03-16 19:51:52 +00:00
Victor Bychek
be9b51adbb Pontoon: Update Russian (ru) localization of Firefox Send
Localization authors:
- MytnikAA <MytnikAA@gmail.com>
- Victor Bychek <a@bychek.ru>
2019-03-16 16:32:15 +00:00
Danny Coates
7f13d4d9b6 fixed incorrect uncompressed size in zip 2019-03-16 09:19:28 -07:00
Edi Santoso
0e81ef2514 Pontoon: Update Indonesian (id) localization of Firefox Send
Localization authors:
- Edi Santoso <repopamor@gmail.com>
2019-03-16 14:12:13 +00:00
Björn I
b0907095e4 Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Firefox Send
Localization authors:
- Björn I. <bjorni.svindseth@yahoo.com>
2019-03-16 12:12:58 +00:00
Piotr Drąg
c4cc736cff Pontoon: Update Polish (pl) localization of Firefox Send
Localization authors:
- tomowoj <tomowoj@gmail.com>
- Piotr Drąg <piotrdrag@gmail.com>
- Paweł <bauerp@bauerp.info>
2019-03-16 11:18:13 +00:00
Piotr Drąg
c4118c5684 Pontoon: Update Polish (pl) localization of Firefox Send
Localization authors:
- tomowoj <tomowoj@gmail.com>
- Piotr Drąg <piotrdrag@gmail.com>
- Paweł <bauerp@bauerp.info>
2019-03-16 10:52:16 +00:00
Jakob Kappel
fad35cf8fc Pontoon: Update Danish (da) localization of Firefox Send
Localization authors:
- Jakob Kappel <jakobkpetersen@gmail.com>
2019-03-16 09:32:00 +00:00
Edi Santoso
062cbbd1f8 Pontoon: Update Indonesian (id) localization of Firefox Send
Localization authors:
- Francesco Lodolo <francesco.lodolo@mozillaitalia.org>
- Edi Santoso <repopamor@gmail.com>
2019-03-16 06:32:00 +00:00
dskmori
f200bd51d2 Pontoon: Update Japanese (ja) localization of Firefox Send
Localization authors:
- dskmori <ghoti.fish.dsk@gmail.com>
2019-03-16 02:52:18 +00:00
Enol
152616574f Pontoon: Update Asturian (ast) localization of Firefox Send
Localization authors:
- Enol <enolp@softastur.org>
2019-03-15 18:52:57 +00:00
Enol
822fcb363d Pontoon: Update Asturian (ast) localization of Firefox Send
Localization authors:
- Enol <enolp@softastur.org>
2019-03-15 18:32:08 +00:00
Enol
e1c6e59495 Pontoon: Update Asturian (ast) localization of Firefox Send
Localization authors:
- Enol <enolp@softastur.org>
2019-03-15 18:12:41 +00:00
Danny Coates
d42d8f8b75 v3.0.7 2019-03-15 09:40:03 -07:00
Danny Coates
ebbb1d05d2 use crypto.timingSafeEqual in hmac and ownerToken authentication 2019-03-14 22:09:34 -07:00
Melo46
67b55d1477 Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Melo46 <melo@carmu.com>
2019-03-14 23:52:14 +00:00
Danny Coates
e3391ca823 Merge pull request #1242 from mgalicer/fix-1130
[Integration-Test] Add test to ensure that file size stays consistent
2019-03-14 14:54:37 -07:00
ravmn
0cac3bd0dc Pontoon: Update Spanish (Chile) (es-CL) localization of Firefox Send
Localization authors:
- victor.gonzalezro <victor.gonzalezro@gmail.com>
- josotrix <josotrix@ravmn.cl>
- ravmn <ravmn@ravmn.cl>
2019-03-14 21:52:00 +00:00
Juan Sián
78de0b7a22 Pontoon: Update Kaqchikel (cak) localization of Firefox Send
Localization authors:
- Juan Sián <ajtzibsyan@yahoo.com>
2019-03-14 21:51:56 +00:00
Juraj Cigáň
14308dc491 Pontoon: Update Slovak (sk) localization of Firefox Send
Localization authors:
- Juraj Cigáň <kusavica@gmail.com>
2019-03-14 21:31:50 +00:00
Danny Coates
f690e4a705 v3.0.6 2019-03-14 13:19:25 -07:00
Danny Coates
3e14d3049d only index / route 2019-03-14 13:17:47 -07:00
Danny Coates
6a6f8b86e4 v3.0.5 2019-03-14 12:04:01 -07:00
Danny Coates
c4891c3866 fixed req.route bug when no routes match 2019-03-14 12:02:36 -07:00
Danny Coates
5d0d5ef858 v3.0.4 2019-03-14 11:44:42 -07:00
Danny Coates
4e26c6ab75 added robots meta tag 2019-03-14 11:40:01 -07:00
julenx
7413a3336a Pontoon: Update Basque (eu) localization of Firefox Send
Localization authors:
- p.sanroman.bengoetxea <p.sanroman.bengoetxea@gmail.com>
- julenx <julenx@gmail.com>
- Ander Elortondo <ander.elor@gmail.com>
2019-03-14 17:52:22 +00:00
Artem Polivanchuk
ef825206a4 Pontoon: Update Ukrainian (uk) localization of Firefox Send
Localization authors:
- Artem Polivanchuk <artem@mozilla.org.ua>
2019-03-14 15:11:51 +00:00
stripTM
f6a2e3ef53 Pontoon: Update Spanish (Spain) (es-ES) localization of Firefox Send
Localization authors:
- avelper <avelper@mozilla-hispano.org>
- stripTM <striptm@yahoo.com>
2019-03-14 12:32:53 +00:00
Rhoslyn Prys
98bf370ccb Pontoon: Update Welsh (cy) localization of Firefox Send
Localization authors:
- Rhoslyn Prys <rprys@posteo.net>
2019-03-14 08:51:39 +00:00
Mikeyy
1e9e9d6494 Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Mikeyy <mihovil@miho.im>
2019-03-14 08:32:08 +00:00
Artem Polivanchuk
c698b39d5c Pontoon: Update Ukrainian (uk) localization of Firefox Send
Localization authors:
- Artem Polivanchuk <artem@mozilla.org.ua>
2019-03-14 07:13:37 +00:00
Melo46
109ee6aa29 Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Melo46 <melo@carmu.com>
2019-03-14 05:32:26 +00:00
Melo46
fe9ed5f001 Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Melo46 <melo@carmu.com>
2019-03-14 05:16:00 +00:00
Hyeonseok Shin
84d74a096c Pontoon: Update Korean (ko) localization of Firefox Send
Localization authors:
- Hyeonseok Shin <hyeonseok@gmail.com>
- dskmori <ghoti.fish.dsk@gmail.com>
2019-03-14 02:12:19 +00:00
victor.gonzalezro
770d276f6d Pontoon: Update Spanish (Chile) (es-CL) localization of Firefox Send
Localization authors:
- victor.gonzalezro <victor.gonzalezro@gmail.com>
- ravmn <ravmn@ravmn.cl>
2019-03-14 00:32:17 +00:00
G12r
ddf69120e8 Pontoon: Update Georgian (ka) localization of Firefox Send
Localization authors:
- G12r <georgianization@outlook.com>
2019-03-14 00:32:15 +00:00
G12r
6c583e09a7 Pontoon: Update Georgian (ka) localization of Firefox Send
Localization authors:
- G12r <georgianization@outlook.com>
2019-03-14 00:11:37 +00:00
Danny Coates
677ff65e8d Merge pull request #1227 from jrbenny35/run-download-tests-on-ci
Update config for running download tests on CI
2019-03-13 16:11:34 -07:00
Anika Dorn
8445657b72 Pontoon: Update German (de) localization of Firefox Send
Localization authors:
- Anika Dorn <adorn@mozilla.com>
2019-03-13 20:53:06 +00:00
Andreas Pettersson
33ef1f33a5 Pontoon: Update Swedish (sv-SE) localization of Firefox Send
Localization authors:
- Andreas Pettersson <az@kth.se>
2019-03-13 20:32:15 +00:00
Anika Dorn
ff79662b72 Pontoon: Update German (de) localization of Firefox Send
Localization authors:
- Anika Dorn <adorn@mozilla.com>
2019-03-13 20:32:13 +00:00
marigalicer
0012dec277 [Integration-Test] Add test to ensure that file size stays consistent
fixes #1130
2019-03-13 16:03:44 -04:00
Danny Coates
a648c5ead9 v3.0.3 2019-03-13 12:14:48 -07:00
Danny Coates
017bb0d146 wrap openid-config request in try/catch 2019-03-13 12:07:59 -07:00
Danny Coates
555c615711 Merge pull request #1237 from mozilla/quick-style-banner
style banner
2019-03-13 11:42:14 -07:00
Danny Coates
ce8dba4200 fixed disappearing header in Chrome 2019-03-13 11:40:51 -07:00
Rimas Kudelis
44dcf8a260 Pontoon: Update Lithuanian (lt) localization of Firefox Send
Localization authors:
- Rimas Kudelis <rimas@mozilla.lt>
2019-03-13 18:31:34 +00:00
Danny Coates
e702022d7f default accept-language to en-US when regexp does not match 2019-03-13 11:30:37 -07:00
John Gruen
4ee80abce9 style banner 2019-03-13 19:16:58 +01:00
Kohei Yoshino
45d9bdb577 Pontoon: Update English (Canada) (en-CA) localization of Firefox Send
Localization authors:
- Kohei Yoshino <kohei.yoshino@gmail.com>
2019-03-13 18:11:00 +00:00
Piotr Drąg
013cca5d86 Pontoon: Update Polish (pl) localization of Firefox Send
Localization authors:
- Piotr Drąg <piotrdrag@gmail.com>
2019-03-13 17:51:58 +00:00
Ander Elortondo
0bf162592f Pontoon: Update Basque (eu) localization of Firefox Send
Localization authors:
- julenx <julenx@gmail.com>
- Ander Elortondo <ander.elor@gmail.com>
2019-03-13 17:51:55 +00:00
Danny Coates
da6cbc05c2 added more locales to production 2019-03-13 10:44:23 -07:00
Danny Coates
d28da3247d enable promo banner 2019-03-13 10:30:27 -07:00
Danny Coates
44043b54b3 Merge pull request #1235 from christopher-ramirez/master
Fix link to dev.js and prod.js files.
2019-03-13 09:23:40 -07:00
Danny Coates
813ddc6c6c Merge pull request #1231 from aaaaalbert/fix-small-typo-in-docs-encryption
Fix a small typo in docs/encryption.md: it's --> its
2019-03-13 09:22:59 -07:00
Danny Coates
1b9c02d86c Merge pull request #1230 from airuikun/master
【typo fixed】1.an download ---> a download  2.be at issue ---> be an i…
2019-03-13 09:22:18 -07:00
Jordi Serratosa
135b4a9669 Pontoon: Update Catalan (ca) localization of Firefox Send
Localization authors:
- Jordi Serratosa <jordis@softcatala.cat>
2019-03-13 15:51:28 +00:00
Jordi Serratosa
426464641f Pontoon: Update Catalan (ca) localization of Firefox Send
Localization authors:
- Jordi Serratosa <jordis@softcatala.cat>
2019-03-13 15:33:13 +00:00
Rodrigo
9ea3b19b8e Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Firefox Send
Localization authors:
- Rodrigo <rodrigo.mcunha@hotmail.com>
2019-03-13 14:51:50 +00:00
Marcelo Ghelman
4a8bfd829b Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Localization authors:
- Marcelo Ghelman <marcelo.ghelman@gmail.com>
2019-03-13 14:51:47 +00:00
Michael Köhler
f40bfe6a96 Pontoon: Update German (de) localization of Firefox Send
Localization authors:
- Michael Köhler <michael.koehler1@gmx.de>
2019-03-13 14:51:44 +00:00
Benjamin Forehand Jr
3f8ebdaf4b Remove extra changes from package.json. 2019-03-13 10:02:36 -04:00
Christopher Ramírez
f3fb433531 Fix link to dev.js and prod.js files.
The links on readme.md were pointing to no longer existant files.
With this PR these links are updated to the new location of the
files inside the ./bin directory.
2019-03-13 07:45:55 -06:00
Gabriela
d7f097a2e0 Pontoon: Update Spanish (Argentina) (es-AR) localization of Firefox Send
Localization authors:
- Gabriela <gmontagu@gmail.com>
2019-03-13 13:32:19 +00:00
Michal Vašíček
1c42f2b397 Pontoon: Update Czech (cs) localization of Firefox Send
Localization authors:
- Michal Vašíček <mvasicek@mozilla.cz>
- Michal Stanke <mstanke@mozilla.cz>
2019-03-13 12:51:29 +00:00
aaaaalbert
ae7f7de28a Fix small typo in docs/encryption.md: it's --> its 2019-03-13 13:28:45 +01:00
Selim Şumlu
bfb9b7ea4e Pontoon: Update Turkish (tr) localization of Firefox Send
Localization authors:
- Selim Şumlu <selim@sum.lu>
2019-03-13 12:12:36 +00:00
Balázs Meskó
761c041069 Pontoon: Update Hungarian (hu) localization of Firefox Send
Localization authors:
- Balázs Meskó <meskobalazs@gmail.com>
2019-03-13 10:51:40 +00:00
Belayet Hossain
85fa38df53 Pontoon: Update Bengali (Bangladesh) (bn-BD) localization of Firefox Send
Localization authors:
- Belayet Hossain <bellayet@gmail.com>
2019-03-13 10:51:36 +00:00
Michael Wolf
d0cd84f5f5 Pontoon: Update Sorbian, Upper (hsb) localization of Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2019-03-13 10:31:23 +00:00
Michael Wolf
35af2cf0a1 Pontoon: Update Sorbian, Lower (dsb) localization of Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2019-03-13 10:31:20 +00:00
ruikunai
d2d472e2b4 【typo fixed】1.an download ---> a download 2.be at issue ---> be an issue 3.the the hamburger menu ---> the hamburger menu 2019-03-13 18:15:36 +08:00
goofy
773bea01fb Pontoon: Update French (fr) localization of Firefox Send
Localization authors:
- Théo Chevalier <theo.chevalier11@gmail.com>
- goofy <goofy@babelzilla.org>
2019-03-13 09:12:08 +00:00
Fjoerfoks
158575a2ff Pontoon: Update Frisian (fy-NL) localization of Firefox Send
Localization authors:
- Fjoerfoks <fryskefirefox@gmail.com>
2019-03-13 08:51:33 +00:00
Pin-guang Chen
f2f504c93d Pontoon: Update Chinese (Taiwan) (zh-TW) localization of Firefox Send
Localization authors:
- Pin-guang Chen <petercpg@mail.moztw.org>
2019-03-13 08:32:25 +00:00
Quế Tùng
ff9d45eb71 Pontoon: Update Vietnamese (vi) localization of Firefox Send
Localization authors:
- Quế Tùng <best.cloney.1301@gmail.com>
2019-03-13 08:12:20 +00:00
passionforlife
b133be9f01 Pontoon: Update Chinese (China) (zh-CN) localization of Firefox Send
Localization authors:
- passionforlife <eloli@foxmail.com>
2019-03-13 07:31:27 +00:00
Mark Heijl
9b1c1feb80 Pontoon: Update Dutch (nl) localization of Firefox Send
Localization authors:
- Mark Heijl <markh@babelzilla.org>
2019-03-13 06:52:22 +00:00
Quế Tùng
f2e8d3e988 Pontoon: Update Vietnamese (vi) localization of Firefox Send
Localization authors:
- Quế Tùng <best.cloney.1301@gmail.com>
2019-03-13 06:32:25 +00:00
Rok Žerdin
d29ded2c79 Pontoon: Update Slovenian (sl) localization of Firefox Send
Localization authors:
- Rok Žerdin <zerdo90@gmail.com>
2019-03-13 06:32:22 +00:00
Francesco Lodolo
160bfed7a9 Pontoon: Update Italian (it) localization of Firefox Send
Localization authors:
- Francesco Lodolo <francesco.lodolo@mozillaitalia.org>
2019-03-13 06:32:19 +00:00
Marcelo Ghelman
9e3d28a98a Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Localization authors:
- Marcelo Ghelman <marcelo.ghelman@gmail.com>
2019-03-13 05:52:35 +00:00
Michal Stanke
8728402d14 Pontoon: Update Czech (cs) localization of Firefox Send
Localization authors:
- Michal Stanke <mstanke@mozilla.cz>
2019-03-13 05:32:28 +00:00
Rok Žerdin
e215738c67 Pontoon: Update Slovenian (sl) localization of Firefox Send
Localization authors:
- Rok Žerdin <zerdo90@gmail.com>
2019-03-13 05:13:04 +00:00
Danny Coates
f4e185bdc0 Merge pull request #1213 from mozilla/localized-filesize
localize file sizes
2019-03-12 21:49:36 -07:00
Danny Coates
adf9c7b96f localize file sizes 2019-03-12 21:46:50 -07:00
Danny Coates
f78e025d33 disable streaming download if registering sw fails. fixes #1226 2019-03-12 20:53:54 -07:00
Benjamin Forehand Jr
6559afba37 Fix port. 2019-03-12 20:56:31 -04:00
Benjamin Forehand Jr
f07988426b Fix permissions. 2019-03-12 20:52:41 -04:00
Benjamin Forehand Jr
bada0707c5 Update config for running download tests on CI 2019-03-12 20:47:54 -04:00
Danny Coates
9da70931e4 body overflow-x: hidden. fixes #1219 2019-03-12 13:36:46 -07:00
Selim Şumlu
43ad9ad057 Pontoon: Update Turkish (tr) localization of Firefox Send
Localization authors:
- Selim Şumlu <selim@sum.lu>
2019-03-12 19:11:35 +00:00
Selim Şumlu
e08146ebfd Pontoon: Update Turkish (tr) localization of Firefox Send
Localization authors:
- Selim Şumlu <selim@sum.lu>
2019-03-12 18:52:00 +00:00
Juraj Cigáň
88c97a199d Pontoon: Update Slovak (sk) localization of Firefox Send
Localization authors:
- Juraj Cigáň <kusavica@gmail.com>
2019-03-12 18:51:57 +00:00
Selim Şumlu
5105de66f8 Pontoon: Update Turkish (tr) localization of Firefox Send
Localization authors:
- Selim Şumlu <selim@sum.lu>
2019-03-12 18:31:47 +00:00
Danny Coates
cdff2884cd Merge pull request #1220 from mozilla/really-use-send.firefox.com
Really switch the android beta to use send.firefox.com.
2019-03-12 11:10:57 -07:00
Donovan Preston
862fedb420 Really switch the android beta to use send.firefox.com. 2019-03-12 13:59:30 -04:00
Björn I
3e5fa8525f Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Firefox Send
Localization authors:
- Björn I. <bjorni.svindseth@yahoo.com>
2019-03-12 17:52:09 +00:00
Björn I
7eb43d9046 Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Firefox Send
Localization authors:
- Björn I. <bjorni.svindseth@yahoo.com>
2019-03-12 17:32:16 +00:00
Danny Coates
30fc4e7e08 Merge pull request #1216 from mozilla/new-package-name-and-release-server
Switch the package name, for signing with a new key; switch the server to send.firefox.com
2019-03-12 10:05:02 -07:00
Danny Coates
2f3e4c72c3 v3.0.2 2019-03-12 10:02:38 -07:00
Danny Coates
d6becdcf3c fixed meta image urls 2019-03-12 09:57:26 -07:00
Donovan Preston
8c59e54677 Switch the package name, for signing with a new key; switch the server to send.firefox.com 2019-03-12 12:35:45 -04:00
Danny Coates
d068dd2954 Revert "updated legal page. closes #1214"
This reverts commit 2f50c29152.
2019-03-12 09:34:52 -07:00
Marcelo Ghelman
4157f5264d Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Localization authors:
- Marcelo Ghelman <marcelo.ghelman@gmail.com>
2019-03-12 16:32:14 +00:00
Belayet Hossain
2edd0cbc36 Pontoon: Update Bengali (Bangladesh) (bn-BD) localization of Firefox Send
Localization authors:
- Belayet Hossain <bellayet@gmail.com>
2019-03-12 16:32:11 +00:00
Belayet Hossain
0c013f38ee Pontoon: Update Bengali (Bangladesh) (bn-BD) localization of Firefox Send
Localization authors:
- Belayet Hossain <bellayet@gmail.com>
2019-03-12 16:11:21 +00:00
Belayet Hossain
767ae24083 Pontoon: Update Bengali (Bangladesh) (bn-BD) localization of Firefox Send
Localization authors:
- Belayet Hossain <bellayet@gmail.com>
2019-03-12 15:51:29 +00:00
Danny Coates
7710cf98e9 fixed paste email bug 2019-03-12 08:37:43 -07:00
Belayet Hossain
5b4f623070 Pontoon: Update Bengali (Bangladesh) (bn-BD) localization of Firefox Send
Localization authors:
- Belayet Hossain <bellayet@gmail.com>
2019-03-12 15:32:14 +00:00
Belayet Hossain
b4220010ee Pontoon: Update Bengali (Bangladesh) (bn-BD) localization of Firefox Send
Localization authors:
- Belayet Hossain <bellayet@gmail.com>
2019-03-12 15:11:46 +00:00
Danny Coates
60ba8429d6 v3.0.1 2019-03-12 08:08:12 -07:00
Danny Coates
2f50c29152 updated legal page. closes #1214 2019-03-12 07:52:54 -07:00
Belayet Hossain
26bc3fa5a1 Pontoon: Update Bengali (Bangladesh) (bn-BD) localization of Firefox Send
Localization authors:
- Belayet Hossain <bellayet@gmail.com>
2019-03-12 14:51:42 +00:00
Danny Coates
0c458e180c error if file from localStorage is old (no manifest) 2019-03-12 07:39:50 -07:00
Rodrigo
c908f0a927 Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Firefox Send
Localization authors:
- Rodrigo <rodrigo.mcunha@hotmail.com>
2019-03-12 14:32:04 +00:00
dskmori
b3cfcf3fd3 Pontoon: Update Japanese (ja) localization of Firefox Send
Localization authors:
- dskmori <ghoti.fish.dsk@gmail.com>
2019-03-12 13:57:20 +00:00
Francesco Lodolo
986d70a521 Pontoon: Update Italian (it) localization of Firefox Send
Localization authors:
- Francesco Lodolo <francesco.lodolo@mozillaitalia.org>
2019-03-12 13:57:17 +00:00
dskmori
653a1a44e9 Pontoon: Update Japanese (ja) localization of Firefox Send
Localization authors:
- dskmori <ghoti.fish.dsk@gmail.com>
2019-03-12 12:51:42 +00:00
Rok Žerdin
d06a7a01be Pontoon: Update Slovenian (sl) localization of Firefox Send
Localization authors:
- Rok Žerdin <zerdo90@gmail.com>
- Matjaž Horvat <matjaz.horvat@gmail.com>
2019-03-12 09:11:42 +00:00
Danny Coates
163899467d check capabilities.account before showing upsell button 2019-03-11 19:02:44 -07:00
Danny Coates
15704cb6dc updated prod locales for v3 2019-03-11 13:45:34 -07:00
Mark Heijl
3d7c87e4dc Pontoon: Update Dutch (nl) localization of Firefox Send
Localization authors:
- Mark Heijl <markh@babelzilla.org>
- Ton <tonnes.mb@gmail.com>
2019-03-11 18:32:10 +00:00
Danny Coates
d3438a52ac try android share before navigator.share 2019-03-11 10:43:32 -07:00
Mark Heijl
03b86cf772 Pontoon: Update Dutch (nl) localization of Firefox Send
Localization authors:
- Mark Heijl <markh@babelzilla.org>
2019-03-11 14:32:47 +00:00
Lan Glad
100aab06c3 Pontoon: Update Slovenian (sl) localization of Firefox Send
Localization authors:
- Lan Glad <upwinxp@gmail.com>
2019-03-11 12:31:35 +00:00
Mark Heijl
6e69e57120 Pontoon: Update Dutch (nl) localization of Firefox Send
Localization authors:
- Mark Heijl <markh@babelzilla.org>
2019-03-11 12:11:56 +00:00
goofy
f0540a48e9 Pontoon: Update French (fr) localization of Firefox Send
Localization authors:
- goofy <goofy@babelzilla.org>
2019-03-11 09:31:18 +00:00
Ton
41c51c2a3c Pontoon: Update Dutch (nl) localization of Firefox Send
Localization authors:
- Ton <tonnes.mb@gmail.com>
2019-03-11 08:11:17 +00:00
Mahay Alam Khan
d238a40ffd Pontoon: Update Bengali (Bangladesh) (bn-BD) localization of Firefox Send
Localization authors:
- Ashikur Rahman <ashikurrahman068@gmail.com>
- Mahay Alam Khan <mahayalamkhan@gmail.com>
2019-03-10 23:11:15 +00:00
Juraj Cigáň
cc178c0594 Pontoon: Update Slovak (sk) localization of Firefox Send
Localization authors:
- Juraj Cigáň <kusavica@gmail.com>
2019-03-10 22:51:18 +00:00
Lan Glad
925b1c873f Pontoon: Update Slovenian (sl) localization of Firefox Send
Localization authors:
- Lan Glad <upwinxp@gmail.com>
2019-03-10 21:31:22 +00:00
Lan Glad
b59b447982 Pontoon: Update Slovenian (sl) localization of Firefox Send
Localization authors:
- Lan Glad <upwinxp@gmail.com>
2019-03-10 16:32:28 +00:00
Rimas Kudelis
039815ae9d Pontoon: Update Lithuanian (lt) localization of Firefox Send
Localization authors:
- Rimas Kudelis <rimas@mozilla.lt>
2019-03-10 16:12:26 +00:00
Pin-guang Chen
0b46308d46 Pontoon: Update Chinese (Taiwan) (zh-TW) localization of Firefox Send
Localization authors:
- Pin-guang Chen <petercpg@mail.moztw.org>
2019-03-10 16:12:23 +00:00
Rimas Kudelis
f2b2fc3aa8 Pontoon: Update Lithuanian (lt) localization of Firefox Send
Localization authors:
- Rimas Kudelis <rimas@mozilla.lt>
2019-03-10 15:52:21 +00:00
Lan Glad
3bcb447718 Pontoon: Update Slovenian (sl) localization of Firefox Send
Localization authors:
- Lan Glad <upwinxp@gmail.com>
2019-03-10 15:32:35 +00:00
Rimas Kudelis
ff40debb88 Pontoon: Update Lithuanian (lt) localization of Firefox Send
Localization authors:
- Rimas Kudelis <rimas@mozilla.lt>
2019-03-10 15:32:32 +00:00
Rimas Kudelis
ccc271a76c Pontoon: Update Lithuanian (lt) localization of Firefox Send
Localization authors:
- Rimas Kudelis <rimas@mozilla.lt>
2019-03-10 15:13:49 +00:00
Rimas Kudelis
01c4f0d6df Pontoon: Update Lithuanian (lt) localization of Firefox Send
Localization authors:
- Rimas Kudelis <rimas@mozilla.lt>
2019-03-10 14:52:12 +00:00
Pin-guang Chen
6985547b49 Pontoon: Update Chinese (Taiwan) (zh-TW) localization of Firefox Send
Localization authors:
- Pin-guang Chen <petercpg@mail.moztw.org>
2019-03-10 14:52:10 +00:00
Rimas Kudelis
e313d9f9e1 Pontoon: Update Lithuanian (lt) localization of Firefox Send
Localization authors:
- Rimas Kudelis <rimas@mozilla.lt>
2019-03-10 14:32:51 +00:00
Rimas Kudelis
9e547c0648 Pontoon: Update Lithuanian (lt) localization of Firefox Send
Localization authors:
- Rimas Kudelis <rimas@mozilla.lt>
2019-03-10 14:12:50 +00:00
Théo Chevalier
d9c3fd094b Pontoon: Update French (fr) localization of Firefox Send
Localization authors:
- Théo Chevalier <theo.chevalier11@gmail.com>
- goofy <goofy@babelzilla.org>
2019-03-10 10:14:17 +00:00
dskmori
279c76ce89 Pontoon: Update Japanese (ja) localization of Firefox Send
Localization authors:
- dskmori <ghoti.fish.dsk@gmail.com>
2019-03-10 08:32:41 +00:00
dskmori
fab6c7cf6a Pontoon: Update Japanese (ja) localization of Firefox Send
Localization authors:
- dskmori <ghoti.fish.dsk@gmail.com>
2019-03-10 07:11:51 +00:00
dskmori
986acb4e3e Pontoon: Update Japanese (ja) localization of Firefox Send
Localization authors:
- dskmori <ghoti.fish.dsk@gmail.com>
2019-03-10 06:57:23 +00:00
Danny Coates
8abc1b6364 updated share button text 2019-03-09 20:56:33 -08:00
Danny Coates
bd61d2fb3e added share to tile 2019-03-09 20:41:20 -08:00
Håvar Henriksen
edc95f42cb Pontoon: Update Norwegian Bokmål (nb-NO) localization of Firefox Send
Localization authors:
- Håvar Henriksen <havar@firefox.no>
2019-03-10 03:11:38 +00:00
Danny Coates
9294ecb09f try web share api 2019-03-09 17:59:21 -08:00
Mahay Alam Khan
aa56216e76 Pontoon: Update Bengali (Bangladesh) (bn-BD) localization of Firefox Send
Localization authors:
- Ashikur Rahman <ashikurrahman068@gmail.com>
- Mahay Alam Khan <mahayalamkhan@gmail.com>
2019-03-10 01:51:47 +00:00
Danny Coates
3b7bf2ae7e updated pwa theme-color 2019-03-09 16:45:17 -08:00
Lan Glad
4224d2ba0a Pontoon: Update Slovenian (sl) localization of Firefox Send
Localization authors:
- Lan Glad <upwinxp@gmail.com>
2019-03-09 21:11:32 +00:00
Victor Bychek
9e314fca7c Pontoon: Update Russian (ru) localization of Firefox Send
Localization authors:
- Alexander Slovesnik <unghost@mozilla-russia.org>
- Victor Bychek <a@bychek.ru>
2019-03-09 14:34:43 +00:00
Selim Şumlu
1d9d37b5b9 Pontoon: Update Turkish (tr) localization of Firefox Send
Localization authors:
- Selim Şumlu <selim@sum.lu>
2019-03-09 13:31:57 +00:00
Selim Şumlu
302c436e94 Pontoon: Update Turkish (tr) localization of Firefox Send
Localization authors:
- Selim Şumlu <selim@sum.lu>
2019-03-09 13:13:08 +00:00
Kim Ludvigsen
1778345bd9 Pontoon: Update Danish (da) localization of Firefox Send
Localization authors:
- Kim Ludvigsen <kim@kimsside.dk>
2019-03-09 10:51:42 +00:00
Théo Chevalier
fce4e70c6e Pontoon: Update French (fr) localization of Firefox Send
Localization authors:
- Théo Chevalier <theo.chevalier11@gmail.com>
2019-03-09 09:31:52 +00:00
Joergen
776839f97f Pontoon: Update Danish (da) localization of Firefox Send
Localization authors:
- Joergen <joergenr@stofanet.dk>
2019-03-09 01:12:23 +00:00
Danny Coates
7c0f227f15 updated android icon 2019-03-08 16:32:29 -08:00
Danny Coates
da5f503dbc no-op startAuthFlow on android 2019-03-08 16:13:15 -08:00
Mikeyy
07eefcafdb Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Mikeyy <mihovil@miho.im>
2019-03-08 21:31:54 +00:00
Cristian Silaghi
f167f9de22 Pontoon: Update Romanian (ro) localization of Firefox Send
Localization authors:
- Cristian Silaghi <cristian.silaghi@mozilla.ro>
2019-03-08 18:51:33 +00:00
Cristian Silaghi
918366db1d Pontoon: Update Romanian (ro) localization of Firefox Send
Localization authors:
- Cristian Silaghi <cristian.silaghi@mozilla.ro>
2019-03-08 18:32:04 +00:00
Danny Coates
d101a76962 fixed android login. closes #1199 2019-03-08 10:17:10 -08:00
Danny Coates
2b53b76fed removed unused assets 2019-03-08 08:58:30 -08:00
Théo Chevalier
cffc717c86 Pontoon: Update French (fr) localization of Firefox Send
Localization authors:
- Théo Chevalier <theo.chevalier11@gmail.com>
2019-03-08 16:34:07 +00:00
Roberto Alvarado
bb79819de2 Pontoon: Update Spanish (Mexico) (es-MX) localization of Firefox Send
Localization authors:
- Roberto Alvarado <ralv888@gmail.com>
2019-03-08 15:51:28 +00:00
Danny Coates
f946a32156 Merge pull request #1208 from mozilla/change-launcher-name
change launcher name
2019-03-08 07:42:36 -08:00
张无忌
d6eccb5f9f Pontoon: Update Chinese (China) (zh-CN) localization of Firefox Send
Localization authors:
- 张无忌 <eloli@foxmail.com>
2019-03-08 15:12:08 +00:00
Mikeyy
53b45bdc6d Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Mikeyy <mihovil@miho.im>
2019-03-08 14:12:09 +00:00
Mikeyy
549c87c97a Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Rok Žerdin <zerdo90@gmail.com>
- Mikeyy <mihovil@miho.im>
- yoshimitsu002 <yoshimitsu002@gmail.com>
2019-03-08 13:51:49 +00:00
John Gruen
821be1d1e0 change launcher name 2019-03-08 14:14:19 +01:00
Michal Stanke
a8d5a92a52 Pontoon: Update Czech (cs) localization of Firefox Send
Localization authors:
- Michal Stanke <mstanke@mozilla.cz>
2019-03-08 07:33:14 +00:00
Michal Stanke
dc3e8a4ba4 Pontoon: Update Czech (cs) localization of Firefox Send
Localization authors:
- Michal Stanke <mstanke@mozilla.cz>
2019-03-08 07:11:52 +00:00
Danny Coates
04846eb29f updated readme environment urls. closes #1161 2019-03-07 17:03:50 -08:00
Danny Coates
6f89c4039b removed browserstack from readme 2019-03-07 16:47:08 -08:00
Juan Sián
b947949bb1 Pontoon: Update Kaqchikel (cak) localization of Firefox Send
Localization authors:
- Juan Sián <ajtzibsyan@yahoo.com>
2019-03-08 00:32:17 +00:00
Juan Sián
92a84f08b0 Pontoon: Update Kaqchikel (cak) localization of Firefox Send
Localization authors:
- Juan Sián <ajtzibsyan@yahoo.com>
2019-03-08 00:12:40 +00:00
Juan Sián
cb94c763ff Pontoon: Update Kaqchikel (cak) localization of Firefox Send
Localization authors:
- Juan Sián <ajtzibsyan@yahoo.com>
2019-03-07 23:51:36 +00:00
Danny Coates
dd8477da64 fixed legal page links. closes #1206 2019-03-07 15:25:28 -08:00
Håvar Henriksen
53acb4ed8b Pontoon: Update Norwegian Bokmål (nb-NO) localization of Firefox Send
Localization authors:
- Håvar Henriksen <havar@firefox.no>
2019-03-07 23:11:39 +00:00
Danny Coates
ab2e8b4634 updated deps 2019-03-07 15:01:55 -08:00
Håvar Henriksen
39e820ba34 Pontoon: Update Norwegian Bokmål (nb-NO) localization of Firefox Send
Localization authors:
- Håvar Henriksen <havar@firefox.no>
2019-03-07 22:32:16 +00:00
Danny Coates
40fcd8506a use fxa email-first flow 2019-03-07 12:08:42 -08:00
Danny Coates
fc1d2f43da added top margin to intro 2019-03-07 11:17:27 -08:00
Danny Coates
ea78382e5e fixes #1204, fixes #1205, also intro font weight 2019-03-07 10:58:19 -08:00
Danny Coates
28e31f4870 Merge pull request #1201 from mozilla/html-pn
Html pn
2019-03-07 10:29:28 -08:00
John Gruen
a28aad274d convert legal notice to html 2019-03-07 10:24:17 -08:00
Danny Coates
0371f1906a Merge pull request #1198 from mozilla/vnext
Merge vnext into master
2019-03-07 10:21:10 -08:00
Breana Gonzales
90b885fadc Pontoon: Update Spanish (Mexico) (es-MX) localization of Firefox Send
Localization authors:
- Breana Gonzales <breanajones@hotmail.com>
2019-03-07 17:34:18 +00:00
张无忌
0fcb53763c Pontoon: Update Chinese (China) (zh-CN) localization of Firefox Send
Localization authors:
- 张无忌 <eloli@foxmail.com>
2019-03-07 15:32:55 +00:00
xcffl
42797d3409 Pontoon: Update Chinese (China) (zh-CN) localization of Firefox Send
Localization authors:
- 莫非前世那一眼 <eloli@foxmail.com>
- xcffl <xcffl@outlook.com>
2019-03-07 15:12:21 +00:00
Balázs Meskó
7856b8b4a0 Pontoon: Update Hungarian (hu) localization of Firefox Send
Localization authors:
- Balázs Meskó <meskobalazs@gmail.com>
2019-03-07 14:32:43 +00:00
Ian Neal
058d972ef0 Pontoon: Update English (Great Britain) (en-GB) localization of Firefox Send
Localization authors:
- Ian Neal <iann_bugzilla@blueyonder.co.uk>
2019-03-07 14:12:46 +00:00
Artem Polivanchuk
ed0e6c03eb Pontoon: Update Ukrainian (uk) localization of Firefox Send
Localization authors:
- Artem Polivanchuk <artem@mozilla.org.ua>
2019-03-07 12:53:31 +00:00
Selim Şumlu
f4fd594452 Pontoon: Update Turkish (tr) localization of Firefox Send
Localization authors:
- Selim Şumlu <selim@sum.lu>
2019-03-07 12:53:27 +00:00
Mikeyy
23a98b1047 Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Mikeyy <mihovil@miho.im>
2019-03-07 10:29:53 +00:00
Lan Glad
fa502954f6 Pontoon: Update Slovenian (sl) localization of Firefox Send
Localization authors:
- Lan Glad <upwinxp@gmail.com>
2019-03-07 09:51:13 +00:00
Mikeyy
deed7f920b Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Mikeyy <mihovil@miho.im>
2019-03-07 09:51:10 +00:00
Artem Polivanchuk
868f666aa8 Pontoon: Update Ukrainian (uk) localization of Firefox Send
Localization authors:
- Artem Polivanchuk <artem@mozilla.org.ua>
2019-03-07 09:32:24 +00:00
Fauzan Alfi
33c1bf650d Pontoon: Update Indonesian (id) localization of Firefox Send
Localization authors:
- Fauzan Alfi <fauzanalfi@mozilla.web.id>
2019-03-07 09:11:53 +00:00
Artem Polivanchuk
745b71beff Pontoon: Update Ukrainian (uk) localization of Firefox Send
Localization authors:
- Artem Polivanchuk <artem@mozilla.org.ua>
2019-03-07 08:12:02 +00:00
goofy
f1f2020f09 Pontoon: Update French (fr) localization of Firefox Send
Localization authors:
- Théo Chevalier <theo.chevalier11@gmail.com>
- goofy <goofy@babelzilla.org>
2019-03-07 08:11:58 +00:00
Artem Polivanchuk
a6ed23616f Pontoon: Update Ukrainian (uk) localization of Firefox Send
Localization authors:
- Artem Polivanchuk <artem@mozilla.org.ua>
2019-03-07 07:51:31 +00:00
Michal Stanke
c9cd8fd156 Pontoon: Update Czech (cs) localization of Firefox Send
Localization authors:
- Michal Stanke <mstanke@mozilla.cz>
2019-03-07 06:11:42 +00:00
Michal Stanke
c1815d62d9 Pontoon: Update Czech (cs) localization of Firefox Send
Localization authors:
- Michal Stanke <mstanke@mozilla.cz>
2019-03-07 05:51:32 +00:00
Pin-guang Chen
6d9444c6bb Pontoon: Update Chinese (Taiwan) (zh-TW) localization of Firefox Send
Localization authors:
- Pin-guang Chen <petercpg@mail.moztw.org>
2019-03-07 05:15:00 +00:00
莫非前世那一眼
534598d6b0 Pontoon: Update Chinese (China) (zh-CN) localization of Firefox Send
Localization authors:
- 莫非前世那一眼 <eloli@foxmail.com>
2019-03-07 02:12:23 +00:00
莫非前世那一眼
d7ab4c4a65 Pontoon: Update Chinese (China) (zh-CN) localization of Firefox Send
Localization authors:
- 莫非前世那一眼 <eloli@foxmail.com>
2019-03-07 01:51:38 +00:00
莫非前世那一眼
1102f00658 Pontoon: Update Chinese (China) (zh-CN) localization of Firefox Send
Localization authors:
- 莫非前世那一眼 <eloli@foxmail.com>
2019-03-07 01:31:39 +00:00
莫非前世那一眼
27c5867e2b Pontoon: Update Chinese (China) (zh-CN) localization of Firefox Send
Localization authors:
- 莫非前世那一眼 <eloli@foxmail.com>
2019-03-07 01:12:33 +00:00
Danny Coates
7464d46843 removed unused fira bits 2019-03-06 16:37:02 -08:00
Danny Coates
f9fd9940bd fixed server l10n parse error 2019-03-06 16:36:17 -08:00
Danny Coates
796b98680c fixed a couple weird merge issues in en-US/send.ftl 2019-03-06 14:16:15 -08:00
Jim Spentzos
68ef4008a6 Pontoon: Update Greek (el) localization of Firefox Send
Localization authors:
- Jim Spentzos <jimspentzos2000@gmail.com>
2019-03-06 21:31:38 +00:00
Danny Coates
fb0f0f0b5d added gcp dev to csp 2019-03-06 12:59:54 -08:00
G12r
be5ea12408 Pontoon: Update Georgian (ka) localization of Firefox Send
Localization authors:
- G12r <georgianization@outlook.com>
2019-03-06 19:51:29 +00:00
Danny Coates
2dd425c46e Merge pull request #1197 from mozilla/vnext-master
merged master into vnext
2019-03-06 11:45:21 -08:00
Danny Coates
92ae9c38ef Merge remote-tracking branch 'origin/master' into vnext 2019-03-06 11:35:35 -08:00
G12r
ede3188986 Pontoon: Update Georgian (ka) localization of Firefox Send
Localization authors:
- G12r <georgianization@outlook.com>
2019-03-06 19:31:53 +00:00
G12r
36a68ff829 Pontoon: Update Georgian (ka) localization of Firefox Send
Localization authors:
- G12r <georgianization@outlook.com>
2019-03-06 19:11:37 +00:00
G12r
4dd659c9d9 Pontoon: Update Georgian (ka) localization of Firefox Send
Localization authors:
- G12r <georgianization@outlook.com>
2019-03-06 18:52:13 +00:00
Danny Coates
fb9f35413c clear settings after removing last file from wip 2019-03-06 10:43:58 -08:00
Danny Coates
7f9674f494 fixed size limit on server to include crypto overhead 2019-03-06 10:31:50 -08:00
G12r
7f31b54b69 Pontoon: Update Georgian (ka) localization of Firefox Send
Localization authors:
- G12r <georgianization@outlook.com>
2019-03-06 17:52:22 +00:00
Michal Stanke
b7f1769ea8 Pontoon: Update Czech (cs) localization of Firefox Send
Localization authors:
- Michal Stanke <mstanke@mozilla.cz>
2019-03-06 17:32:29 +00:00
Gabriela
cb2e459858 Pontoon: Update Spanish (Argentina) (es-AR) localization of Firefox Send
Localization authors:
- Gabriela <gmontagu@gmail.com>
2019-03-06 17:11:40 +00:00
avelper
a08d23fcf1 Pontoon: Update Spanish (Spain) (es-ES) localization of Firefox Send
Localization authors:
- avelper <avelper@mozilla-hispano.org>
2019-03-06 16:52:01 +00:00
Gabriela
60fdcc05fa Pontoon: Update Spanish (Argentina) (es-AR) localization of Firefox Send
Localization authors:
- Gabriela <gmontagu@gmail.com>
2019-03-06 16:51:58 +00:00
avelper
3b84bb0239 Pontoon: Update Spanish (Spain) (es-ES) localization of Firefox Send
Localization authors:
- avelper <avelper@mozilla-hispano.org>
2019-03-06 16:31:41 +00:00
Gabriela
de5634a817 Pontoon: Update Spanish (Argentina) (es-AR) localization of Firefox Send
Localization authors:
- Gabriela <gmontagu@gmail.com>
2019-03-06 16:31:37 +00:00
Gabriela
bd74be1414 Pontoon: Update Spanish (Argentina) (es-AR) localization of Firefox Send
Localization authors:
- Gabriela <gmontagu@gmail.com>
2019-03-06 16:11:52 +00:00
Fjoerfoks
8c2615c06e Pontoon: Update Frisian (fy-NL) localization of Firefox Send
Localization authors:
- Fjoerfoks <fryskefirefox@gmail.com>
2019-03-06 13:51:20 +00:00
Michael Wolf
f58cc15bbd Pontoon: Update Sorbian, Upper (hsb) localization of Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2019-03-06 13:32:09 +00:00
Fjoerfoks
473774bb5b Pontoon: Update Frisian (fy-NL) localization of Firefox Send
Localization authors:
- Fjoerfoks <fryskefirefox@gmail.com>
2019-03-06 13:32:05 +00:00
Michael Wolf
da2c918f44 Pontoon: Update Sorbian, Lower (dsb) localization of Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2019-03-06 13:13:03 +00:00
Balázs Meskó
b4c6a447e1 Pontoon: Update Hungarian (hu) localization of Firefox Send
Localization authors:
- Rok Žerdin <zerdo90@gmail.com>
- Balázs Meskó <meskobalazs@gmail.com>
2019-03-06 13:12:59 +00:00
Michael Wolf
1846a74d89 Pontoon: Update Sorbian, Lower (dsb) localization of Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2019-03-06 12:51:13 +00:00
Fjoerfoks
112bfce07f Pontoon: Update Frisian (fy-NL) localization of Firefox Send
Localization authors:
- Fjoerfoks <fryskefirefox@gmail.com>
2019-03-06 12:51:10 +00:00
Michael Wolf
d7e02d07f9 Pontoon: Update Sorbian, Upper (hsb) localization of Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2019-03-06 12:12:34 +00:00
Sara Todaro
343aefaa03 Pontoon: Update Italian (it) localization of Firefox Send
Localization authors:
- Sara Todaro <sara.todaro@mozillaitalia.org>
2019-03-06 12:12:31 +00:00
Michael Wolf
10078eac94 Pontoon: Update Sorbian, Upper (hsb) localization of Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2019-03-06 11:51:33 +00:00
Michael Wolf
032b6376ca Pontoon: Update Sorbian, Upper (hsb) localization of Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2019-03-06 11:32:07 +00:00
Michael Wolf
70712188e1 Pontoon: Update Sorbian, Upper (hsb) localization of Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2019-03-06 11:26:22 +00:00
Fjoerfoks
70366e7c94 Pontoon: Update Frisian (fy-NL) localization of Firefox Send
Localization authors:
- Fjoerfoks <fryskefirefox@gmail.com>
2019-03-06 11:26:19 +00:00
Fjoerfoks
f80eed6e2f Pontoon: Update Frisian (fy-NL) localization of Firefox Send
Localization authors:
- Fjoerfoks <fryskefirefox@gmail.com>
2019-03-06 10:51:34 +00:00
Björn I
9183689200 Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Firefox Send
Localization authors:
- Björn I. <bjorni.svindseth@yahoo.com>
2019-03-06 10:33:20 +00:00
Rok Žerdin
85378c393a Pontoon: Update Slovenian (sl) localization of Firefox Send
Localization authors:
- Rok Žerdin <zerdo90@gmail.com>
2019-03-06 10:15:48 +00:00
Björn I
9dcddf1f71 Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Firefox Send
Localization authors:
- Björn I. <bjorni.svindseth@yahoo.com>
2019-03-06 10:15:45 +00:00
Rhoslyn Prys
67093d7c86 Pontoon: Update Welsh (cy) localization of Firefox Send
Localization authors:
- Rhoslyn Prys <rprys@posteo.net>
2019-03-06 09:32:33 +00:00
Rhoslyn Prys
665ddeb416 Pontoon: Update Welsh (cy) localization of Firefox Send
Localization authors:
- Rhoslyn Prys <rprys@posteo.net>
2019-03-06 09:11:12 +00:00
Francesco Lodolo
2623740451 Pontoon: Update Italian (it) localization of Firefox Send
Localization authors:
- Francesco Lodolo <francesco.lodolo@mozillaitalia.org>
2019-03-06 09:11:09 +00:00
Francesco Lodolo
0f7efdee80 Pontoon: Update Italian (it) localization of Firefox Send
Localization authors:
- Francesco Lodolo <francesco.lodolo@mozillaitalia.org>
2019-03-06 08:51:59 +00:00
Rok Žerdin
7bafbc99c5 Pontoon: Update Slovenian (sl) localization of Firefox Send
Localization authors:
- Rok Žerdin <zerdo90@gmail.com>
2019-03-06 07:51:54 +00:00
Quế Tùng
a1e07b5439 Pontoon: Update Vietnamese (vi) localization of Firefox Send
Localization authors:
- Quế Tùng <best.cloney.1301@gmail.com>
2019-03-06 07:11:26 +00:00
Quế Tùng
58a11ccc63 Pontoon: Update Vietnamese (vi) localization of Firefox Send
Localization authors:
- Quế Tùng <best.cloney.1301@gmail.com>
2019-03-06 06:51:43 +00:00
Rok Žerdin
02ad860ea0 Pontoon: Update Slovenian (sl) localization of Firefox Send
Localization authors:
- Rok Žerdin <zerdo90@gmail.com>
2019-03-06 06:12:22 +00:00
莫非前世那一眼
3b2382f9d7 Pontoon: Update Chinese (China) (zh-CN) localization of Firefox Send
Localization authors:
- 莫非前世那一眼 <eloli@foxmail.com>
2019-03-06 04:32:31 +00:00
Marcelo Ghelman
64615d7b76 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Test Pilot: Firefox Send
Localization authors:
- Marcelo Ghelman <marcelo.ghelman@gmail.com>
2019-03-06 01:11:39 +00:00
Marcelo Ghelman
39d57c6d11 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Test Pilot: Firefox Send
Localization authors:
- Marcelo Ghelman <marcelo.ghelman@gmail.com>
2019-03-06 00:51:46 +00:00
Danny Coates
dce8b6e525 fixed cancel button string 2019-03-05 14:44:06 -08:00
Danny Coates
d25c41190a fixes #1143 android ui bug 2019-03-05 14:27:55 -08:00
Balázs Meskó
6c23476713 Pontoon: Update Hungarian (hu) localization of Test Pilot: Firefox Send
Localization authors:
- Balázs Meskó <meskobalazs@gmail.com>
2019-03-05 21:51:27 +00:00
Danny Coates
e7b881e975 added cors mode to /metrics-flow request 2019-03-05 13:31:51 -08:00
Danny Coates
445811931f added accounts.firefox.com to csp connect-src for /metrics-flow 2019-03-05 13:05:51 -08:00
Danny Coates
5e04f367c1 utms for everybody 2019-03-05 12:58:40 -08:00
Andreas Pettersson
9d97a84f29 Pontoon: Update Swedish (sv-SE) localization of Test Pilot: Firefox Send
Localization authors:
- Andreas Pettersson <az@kth.se>
2019-03-05 20:51:23 +00:00
Francesco Lodolo
6ab577dabf Pontoon: Update Italian (it) localization of Test Pilot: Firefox Send
Localization authors:
- Francesco Lodolo <francesco.lodolo@mozillaitalia.org>
2019-03-05 20:51:20 +00:00
Andreas Pettersson
5f6f8b826a Pontoon: Update Swedish (sv-SE) localization of Test Pilot: Firefox Send
Localization authors:
- Andreas Pettersson <az@kth.se>
2019-03-05 20:32:37 +00:00
Marcelo Ghelman
43a2c5bbf3 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Test Pilot: Firefox Send
Localization authors:
- Marcelo Ghelman <marcelo.ghelman@gmail.com>
2019-03-05 20:32:34 +00:00
Marcelo Ghelman
f328d69d0c Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Test Pilot: Firefox Send
Localization authors:
- Marcelo Ghelman <marcelo.ghelman@gmail.com>
2019-03-05 20:12:47 +00:00
Rodrigo
eab0074cdf Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Test Pilot: Firefox Send
Localization authors:
- Rodrigo <rodrigo.mcunha@hotmail.com>
2019-03-05 19:51:56 +00:00
Marcelo Ghelman
1f27da19bc Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Test Pilot: Firefox Send
Localization authors:
- Marcelo Ghelman <marcelo.ghelman@gmail.com>
2019-03-05 19:51:53 +00:00
Rok Žerdin
14dbcfd487 Pontoon: Update Slovenian (sl) localization of Test Pilot: Firefox Send
Localization authors:
- Rok Žerdin <zerdo90@gmail.com>
2019-03-05 19:32:32 +00:00
Michael Köhler
26a55c5258 Pontoon: Update German (de) localization of Test Pilot: Firefox Send
Localization authors:
- Michael Köhler <michael.koehler1@gmx.de>
2019-03-05 19:32:29 +00:00
Kohei Yoshino
18a7feaacb Pontoon: Update English (Canada) (en-CA) localization of Test Pilot: Firefox Send
Localization authors:
- Kohei Yoshino <kohei.yoshino@gmail.com>
2019-03-05 19:32:25 +00:00
Danny Coates
c8ea3a6138 updated vnext strings with latest merge to master 2019-03-05 10:58:27 -08:00
Danny Coates
0ba59bc324 added vnext strings for translation (#1188)
* added vnext strings for translation
2019-03-05 10:33:07 -08:00
John Gruen
7197cc3bea Add legal and final strings (#1185)
* add legal and final strings

* removed unneeded suffixes from string ids

* removed unused strings and simplified string ids for vnext-only strings

* reword nostreams option
2019-03-04 14:13:17 -08:00
Danny Coates
6ab006de61 use email type for signin input tag 2019-03-02 17:05:58 -08:00
Jiri Grönroos
befbd8c1c5 Pontoon: Update Finnish (fi) localization of Test Pilot: Firefox Send
Localization authors:
- Jiri Grönroos <jiri.gronroos@iki.fi>
2019-03-02 15:11:52 +00:00
Danny Coates
3666900f13 removed errant console.log 2019-03-01 16:26:27 -08:00
Danny Coates
1ddfeac81f added md and lg layouts for signin dialog 2019-03-01 16:19:55 -08:00
Danny Coates
8f74ccdb48 a few style tweaks 2019-03-01 14:12:23 -08:00
Danny Coates
4820f175dd updated signin dialog 2019-03-01 12:56:10 -08:00
Danny Coates
1b9182aac7 updated secondary pages style & illustrations 2019-03-01 11:05:59 -08:00
John Gruen
4e7b205dfd update acceptance (#1181) 2019-03-01 09:07:28 -08:00
John Gruen
0ef26b739f update social cards (#1180) 2019-03-01 09:06:04 -08:00
John Gruen
10c7f8ab43 update survey url (#1179) 2019-03-01 09:05:26 -08:00
Danny Coates
421967ea81 updated default config values 2019-02-28 16:39:38 -08:00
Danny Coates
3bd2996c14 tweaked title and illustration styles 2019-02-28 15:53:13 -08:00
Danny Coates
7716ba6e77 added warning page for browsers without streams downloading big files (#1175)
* added warning page for browsers without streams downloading big files

* fixed illustration size in Edge

* updated nostreams style
2019-02-28 14:28:18 -08:00
Danny Coates
eddabac191 updated android app icon 2019-02-28 12:30:00 -08:00
Donovan Preston
a30ea6cddc Another slight speed boost (#1176) 2019-02-28 08:29:10 -08:00
Donovan Preston
5b03c64e8d Fix slow upload by turning on hardware accelleration on the webview (#1173) 2019-02-27 16:04:57 -08:00
Danny Coates
beeb0d16c0 fixed svg style issues 2019-02-27 12:20:10 -08:00
Danny Coates
eb94a4fd14 updated deps 2019-02-27 12:06:11 -08:00
Danny Coates
72ee9c13d2 added illustrations 2019-02-27 11:42:43 -08:00
pyup.io bot
45a270ddce Scheduled weekly dependency update for week 08 (#1168)
* Update flake8 from 3.7.5 to 3.7.7

* Update pytest from 4.2.0 to 4.3.0

* Update pytest-selenium from 1.15.1 to 1.16.0
2019-02-27 10:37:48 -05:00
Danny Coates
f968083f74 added '-' to /api/filelist validation 2019-02-26 19:58:03 -08:00
Danny Coates
72b41c158b added flex-no-shrink to archive info icons 2019-02-26 17:31:53 -08:00
Danny Coates
7c540b8903 updated tiles styles 2019-02-26 17:22:45 -08:00
Danny Coates
4a40c75173 updated dowload page style 2019-02-26 16:03:12 -08:00
Danny Coates
8e104d2a5b added metric target for newest signup button 2019-02-26 15:54:56 -08:00
Danny Coates
1529a86180 updated password ui size 2019-02-26 15:38:55 -08:00
Danny Coates
b6941345a7 updated password input style 2019-02-26 15:06:50 -08:00
Danny Coates
0b8eae11de updated styles 2019-02-26 14:52:37 -08:00
Danny Coates
4cb6646cce updated filelist storage so userid is not used directly 2019-02-26 13:53:11 -08:00
Danny Coates
d55f0247de added padding to android wip screen 2019-02-26 11:11:06 -08:00
Danny Coates
1c44d1d0f9 added /config endpoint, use fewer globals (#1172)
* added /config endpoint, use fewer globals

* fixed integration tests
2019-02-26 10:39:50 -08:00
Danny Coates
8df400a676 found source of double-render, removed old experiment 2019-02-25 14:03:08 -08:00
Danny Coates
cccc1a5383 enabled accounts on Edge 2019-02-25 11:44:44 -08:00
Danny Coates
c6cc5f4ac4 made Inter font-display: optional 2019-02-24 11:10:34 -08:00
Danny Coates
2dce066449 tweaked btn style 2019-02-22 13:59:57 -08:00
Danny Coates
3f4cdd844c updated upload area style. idk how this moved 2019-02-22 13:40:19 -08:00
Danny Coates
2c867e0ae8 fixed modals on other than home page 2019-02-22 13:31:54 -08:00
Danny Coates
c36466d952 updated unsupported page style 2019-02-22 13:16:24 -08:00
Danny Coates
2fd72096ae download page style updates 2019-02-22 12:42:10 -08:00
Danny Coates
08dc5fa23b puffier signin button et al 2019-02-22 12:00:39 -08:00
John Gruen
e19c711548 finish string update (#1167) 2019-02-22 11:13:31 -08:00
John Gruen
c23da8f6b0 Merge pull request #1166 from mozilla/update-strings
update strings
2019-02-22 19:40:55 +01:00
Danny Coates
c8e6e761d0 filled in size placeholder and other malarkey 2019-02-22 10:37:52 -08:00
John Gruen
7449d1c351 update strings 2019-02-22 17:12:30 +01:00
Danny Coates
47d75d8220 adjusted modal background and download preview 2019-02-21 16:43:15 -08:00
Danny Coates
694e05f738 disable accounts on Edge. more crypto errors 2019-02-21 15:38:36 -08:00
Danny Coates
de88885189 replaced cryptofill with webcrypto-liner 2019-02-21 15:20:28 -08:00
Danny Coates
9e919eddb5 beginning to decompose cryptofill to allow dynamic import 2019-02-21 12:22:12 -08:00
Danny Coates
c146c584f6 static require cryptofill for Edge 2019-02-21 11:21:06 -08:00
Danny Coates
6fd3019aba added title to download link 2019-02-21 09:24:43 -08:00
Danny Coates
f0a60d8c8e added control titles 2019-02-20 19:59:29 -08:00
Danny Coates
2169a49d4c made account menu keyboard navible 2019-02-20 16:11:54 -08:00
Danny Coates
b6a703d5de added outline styles for keyboard nav 2019-02-20 15:58:44 -08:00
Danny Coates
060b6835f1 clear password on checkPassword 2019-02-20 11:51:09 -08:00
Danny Coates
fd2b58d96d made main "add files" area keyboard navible 2019-02-20 10:59:05 -08:00
Danny Coates
b1e5073e59 made sign in button keyboard navible 2019-02-20 10:57:32 -08:00
Danny Coates
9d5c6573d9 updated deps 2019-02-19 20:12:12 -08:00
Danny Coates
ec356b703f disable service worker on Edge 2019-02-19 18:53:55 -08:00
Danny Coates
e5f9673521 added window.app for debugging 2019-02-19 14:14:28 -08:00
Danny Coates
2c12b614f0 updated header logo 2019-02-19 13:13:14 -08:00
Danny Coates
2c27665e39 updated favicon 2019-02-19 12:52:09 -08:00
Danny Coates
c1df061669 android style fixes 2019-02-19 11:25:40 -08:00
Danny Coates
41bfe31d61 prefix /api/metrics on android. fixes #1159 2019-02-19 10:46:16 -08:00
Donovan Preston
a42cec97f3 Fix #1145 Fix the back button after logging in. (#1158)
To do so, we clear the webview history once the login process is complete so that the intermediate redirect urls used by the login process are not in the history.

Also, update the versions of some of the libraries we use.
2019-02-19 09:35:37 -08:00
Donovan Preston
fd3caa3cc6 Fix #1150 Make the defaults on android match the defaults on the web. (#1155) 2019-02-19 09:28:25 -08:00
Tim Visée
b76150d4d9 Fix function to calculate encrypted ECE ciphertext length (#1153) 2019-02-18 11:19:15 -08:00
Danny Coates
06c9b126a3 revert puppeteer to 1.11.0 2019-02-18 11:09:37 -08:00
Danny Coates
a2ede30f09 updated password input style 2019-02-15 14:42:09 -08:00
Danny Coates
244fcf5e77 renamed inter beta fonts 2019-02-15 14:41:29 -08:00
Danny Coates
8eaacfea18 use text/plain on /api/metrics 2019-02-15 11:59:39 -08:00
Danny Coates
b30be6e4a2 updated intro image 2019-02-14 16:16:30 -08:00
Danny Coates
5ce35a71ef added missing entrypoint to metrics 2019-02-14 13:00:57 -08:00
Danny Coates
6b6b04e93b a few font adjustments 2019-02-14 12:23:27 -08:00
Danny Coates
21e3095dc9 updated file icon 2019-02-14 12:01:14 -08:00
Danny Coates
2a8a8abfde added Inter font and intro image 2019-02-14 11:39:28 -08:00
Danny Coates
4d8f27e96e adjusted intro layout 2019-02-14 09:33:49 -08:00
Danny Coates
be8e507d25 updated footer links 2019-02-13 13:09:57 -08:00
Danny Coates
26d6606e09 added custom details arrow (needs final svg) 2019-02-13 12:39:53 -08:00
Danny Coates
1c61915b53 styled selectbox 2019-02-13 11:14:53 -08:00
Danny Coates
e9ee7d022c adjusted padding of wip area 2019-02-12 19:14:01 -08:00
Danny Coates
fc37fd1fe3 Work in progress on latest design 2019-02-12 12:27:52 -08:00
Danny Coates
0fa963f1ab implemented amplitude metrics 2019-02-12 12:23:27 -08:00
Danny Coates
d50c0477ea fixed android metrics 2019-02-12 12:21:18 -08:00
Danny Coates
9b37e92a81 implemented amplitude metrics (#1141) 2019-02-12 11:50:06 -08:00
Marwan Mohamad
d6bfb8b1fd Pontoon: Update Gorontalo (gor) localization of Test Pilot: Firefox Send
Localization authors:
- Marwan Mohamad <mar.one818@gmail.com>
2019-02-12 18:52:29 +00:00
pyup.io bot
052f50358e Scheduled weekly dependency update for week 06 (#1148)
* Update flake8 from 3.6.0 to 3.7.5

* Update pytest from 4.1.1 to 4.2.0

* Update pytest-xdist from 1.26.0 to 1.26.1
2019-02-11 19:53:34 -05:00
Danny Coates
1a483cad55 updated deps 2019-02-08 15:58:05 -08:00
Danny Coates
6b33192a55 use default avatar instead of ff logo for users with no avatar 2019-02-08 11:58:42 -08:00
Donovan Preston
66f52b8c41 Fix #1110 Sync the file list on android. 2019-02-08 09:45:37 -08:00
Donovan Preston
16224b3c02 Fix #1108 Hide email input on signup page so that it doesn't hide par… (#1140)
* Fix #1108 Hide email input on signup page so that it doesn't hide part of the bottom of the page

* Fix #1115 Prevent clicking on the button more than once in a row.

* Show the email input on desktop
2019-02-08 09:44:21 -08:00
Danny Coates
41eaa668a1 Merge pull request #1138 from jbuck/vnext-update-google-cloud-storage
Update @google-cloud/storage to v2.4.2 to fix timeouts
2019-02-06 12:07:18 -08:00
Jon Buckley
3ea728e4e0 Update @google-cloud/storage to v2.4.2 to fix timeouts 2019-02-06 13:25:18 -05:00
Danny Coates
cd8ab540f2 revert @google-cloud/storage to 2.1.0 2019-01-31 15:28:18 -08:00
Danny Coates
36225e4f92 android: exclude self from share intent (#1132) 2019-01-30 15:46:43 -05:00
Mark Liang (You-Wen)
b55960d743 fix 1112 (#1128) 2019-01-30 10:59:22 -05:00
Danny Coates
9e3bde2cc9 full page download ui (#1126) 2019-01-30 10:50:17 -05:00
Danny Coates
5eb24065b6 added modal to other pages 2019-01-29 13:08:54 -08:00
Danny Coates
87a517a169 exclude text inputs from paste handler 2019-01-29 12:43:09 -08:00
Danny Coates
c0d8300a8e fixed some scrollbars 2019-01-29 12:06:23 -08:00
Danny Coates
d159825b27 added download icon 2019-01-28 15:44:14 -08:00
Danny Coates
8794b1d101 npm run format 2019-01-24 12:31:20 -08:00
Danny Coates
8227b1420c Merge pull request #1125 from mozilla/dlink
added download link to tile
2019-01-24 12:20:30 -08:00
Danny Coates
dece0969c2 added download link to tile 2019-01-23 15:10:09 -08:00
Danny Coates
7bf8bab864 revert webpack to 4.28.4 2019-01-23 14:05:11 -08:00
Danny Coates
97bf9fdf69 updated deps 2019-01-23 11:46:17 -08:00
Danny Coates
9afe688c79 Merge pull request #1123 from pdehaan/de-testpilot-badge
Remove TestPilot badge from README
2019-01-23 09:47:22 -08:00
Peter deHaan
9f8233c7e4 Remove TestPilot badge 2019-01-23 09:34:56 -08:00
Danny Coates
d8009a64d4 Merge pull request #1119 from mozilla/android-share-icon
Switch to the Android share icon.
2019-01-23 09:11:19 -08:00
Danny Coates
831e39c113 Merge pull request #1122 from mozilla/fix-back-button-crasher
Fixes #1037: Fix back button crasher
2019-01-23 09:10:54 -08:00
Donovan Preston
d1ea261dea Fixes #1037: Fix back button crasher
Java has nulls, and any object reference in Java can be null, but in Kotlin parameters default to not null unless the type is specified as `Type?`; our override of onActivityResult was specifying the type of the intent parameter as `Intent` instead of `Intent?`, causing an exception before our code was called. Figuring out how to turn on "break on all exceptions" in Android Studio (which is non-trivial for some reason) finally showed me the stack trace.
2019-01-23 10:28:57 -05:00
Donovan Preston
73123a690b Switch to the Android share icon. 2019-01-23 09:42:13 -05:00
Danny Coates
16ba74e959 Merge pull request #1106 from mozilla/vnext-hover-states
Fix #1103
2019-01-18 10:25:05 -08:00
Mark Liang
de0a1ddcaa #1103 2019-01-18 16:09:17 +08:00
Danny Coates
01105a0a98 Merge pull request #1091 from mozilla/add-new-metrics
add new metrics md
2019-01-17 11:30:37 -08:00
Danny Coates
339755e292 updated deps 2019-01-16 16:18:50 -08:00
Danny Coates
7d051d5eaf restored accidentally deleted style 2019-01-16 16:18:23 -08:00
Danny Coates
d5a1271bbe fixed account menu z-index on android 2019-01-16 14:58:10 -08:00
Danny Coates
e954a6cb62 typo. fixes #1100 2019-01-16 14:19:33 -08:00
Danny Coates
a6a8fa6528 Merge pull request #1099 from mozilla/android-implement-share-card
Fix #888 Implement share card.
2019-01-16 13:26:41 -08:00
Donovan Preston
c90d811087 Switch to using utils.browserName 2019-01-16 16:20:15 -05:00
Danny Coates
6f39d42165 Merge pull request #1102 from mozilla/btn-style
refactored styles to extract btn
2019-01-16 13:00:21 -08:00
Danny Coates
57422d6406 refactored styles to extract btn 2019-01-16 12:49:11 -08:00
Danny Coates
ae256141da Merge pull request #1098 from mozilla/hide-add-files-button-while-uploading
Fix #1089 On Android, hide the add files button when uploading
2019-01-16 11:01:49 -08:00
Donovan Preston
af61434b72 Fix #888 Implement share card. 2019-01-16 12:05:39 -05:00
Donovan Preston
c0382dd327 Fix #1089 On Android, hide the add files button when uploading 2019-01-16 10:26:52 -05:00
Danny Coates
32a77180b0 Merge pull request #1088 from mozilla/vnext-ui-changes
Update UI
2019-01-15 10:40:11 -08:00
Danny Coates
783d7bfa03 save download count changes to localStorage. fixes #1080 2019-01-15 10:11:51 -08:00
Danny Coates
6e175dd5ca Merge pull request #1087 from mozilla/custom-elements
use custom elements instead of adding css classes for selectors
2019-01-14 11:03:23 -08:00
Mark Liang
38f8a68827 update ux 2019-01-14 16:51:50 +08:00
John Gruen
f6640e4822 add new metrics md 2019-01-11 18:37:01 +01:00
Danny Coates
f402011c82 use custom elements instead of adding css classes for selectors 2019-01-10 16:22:40 -08:00
Danny Coates
742b97cb4b Merge pull request #1086 from mozilla/fix-android-equals-1-npm-start
Make ANDROID=1 npm start work again, as it broke at some point
2019-01-10 15:04:27 -08:00
Danny Coates
3df32e2a22 removed /download from android routes in dev.js since it has no ui 2019-01-10 15:00:03 -08:00
Donovan Preston
52b4c382cb Make ANDROID=1 npm start work again, as it broke at some point 2019-01-10 15:08:16 -05:00
Danny Coates
8e8570c357 use blob instead of stream to get file list. fixes #1084 2019-01-10 11:10:51 -08:00
Danny Coates
4a633c8930 initialize dlimit of ownedfile on upload. fixes #1080 2019-01-10 10:52:52 -08:00
Danny Coates
6cc374865e refactored code/tests around download tests 2019-01-09 17:25:43 -08:00
Danny Coates
6fdb5f4f9f Merge pull request #1078 from dhyey35/vnext
[Integration-Test] Add test for number of downloads, fixes #810
2019-01-09 17:13:21 -08:00
Danny Coates
7f1ce41d9c disable validation and resumable for gcs uploads 2019-01-09 13:36:27 -08:00
Dhyey Thakore
e9a9ead762 [Integration-Test] Add test for number of downloads, fixes #810 2019-01-09 19:33:48 +05:30
Danny Coates
1bb1e8123f Merge pull request #1076 from mozilla/i1059
don't make title a link on android
2019-01-08 14:14:45 -08:00
Danny Coates
65be118e82 clicking signin shows cta. fixes #1073 2019-01-08 14:06:15 -08:00
Danny Coates
ffe8045d82 don't make title a link on android. fixes #1059 2019-01-08 13:53:53 -08:00
Danny Coates
39c1bec91a updated android LIMITS. fixes #1040 #1041 #1039 (#1075) 2019-01-08 16:46:48 -05:00
Danny Coates
eb9fba3da6 updated android to work with changes to app/archive.js (#1074) 2019-01-08 15:46:16 -05:00
Danny Coates
4e0425ad7e fixed text overflow on 404 page. fixes #1025 2019-01-08 11:46:14 -08:00
Danny Coates
06b25dcba6 fixed initial page load rendering for expired downloads and when the upload list isn't empty. fixes #1069 and fixes #1021 2019-01-08 11:24:07 -08:00
Danny Coates
e1bbff0047 Merge pull request #1072 from jbuck/vnext-node-10
Upgrade to Node v10
2019-01-07 12:57:26 -08:00
Jon Buckley
c711b7ce42 Upgrade to Node v10 2019-01-07 15:50:01 -05:00
Danny Coates
b863b10566 updated deps 2019-01-04 12:05:46 -08:00
Danny Coates
7f8700e612 added post-merge hook for npm install 2019-01-04 11:59:30 -08:00
Danny Coates
8c496e3bee don't add zero length files (also directories) 2019-01-03 16:12:40 -08:00
Danny Coates
5e5af03d11 run npm install if needed in buildAssets.sh 2019-01-03 13:56:32 -08:00
Abd ar-Rahman Hamidi
30d7ec50f3 Convert ContentLength of storage to number 2019-01-02 22:16:03 +05:00
Danny Coates
a79400f99f signup dialog changes
- send empty or invalid emails to the standard fxa signup page
- show the signup dialog when file too big and not logged in
2018-12-21 11:40:52 -08:00
Danny Coates
c585c34c01 use one Archive instance for state.archive 2018-12-21 10:54:38 -08:00
Danny Coates
989137342b updated deps 2018-12-19 12:26:26 -08:00
Danny Coates
b71d30fca4 updated puppeteer 2018-12-19 12:25:05 -08:00
Danny Coates
6cc12528b3 fixed some old TODOs 2018-12-18 13:55:46 -08:00
Danny Coates
ac87fdff97 style tweak to user avatar image 2018-12-18 12:50:01 -08:00
Danny Coates
b1db7ac312 simplified app/main.js a bit 2018-12-18 12:27:43 -08:00
Danny Coates
4557a352f8 Merge pull request #1050 from mozilla/hide-preferences
Hide the preferences menu for the beta
2018-12-18 10:02:17 -08:00
Donovan Preston
6c4bf8b37a Hide the preferences menu for the beta 2018-12-18 11:14:22 -05:00
Danny Coates
41d0076add Merge pull request #1046 from mozilla/fix-delete-button
Fix #890  Fix delete by initializing the metrics on android; delete w…
2018-12-17 13:49:05 -08:00
Donovan Preston
cbc847b751 Remove debug prints 2018-12-17 16:42:03 -05:00
Donovan Preston
c71ef9ae84 Fix #890 Fix delete by initializing the metrics on android; delete was trying to use metrics and causing an exception because it hadn't been initialized 2018-12-17 16:40:17 -05:00
Danny Coates
793dfb4f42 initial state refactor 2018-12-13 11:12:06 -08:00
Danny Coates
8cde99d2a2 Merge pull request #1038 from mozilla/fix-npm-run-android
Fix npm run android by removing the <base href> when running under the dev server
2018-12-13 09:27:53 -08:00
Donovan Preston
d217ac14fc Fix npm run android by removing the <base href> when running under the dev server 2018-12-13 11:44:28 -05:00
Mark Liang (You-Wen)
aa156558b6 Update vnext android ui (#1036)
* refine android ui

* fix layout
2018-12-13 11:36:03 -05:00
Danny Coates
09a4d7b9ee fixed filelist sync on initial login and after upload 2018-12-12 10:14:06 -08:00
Danny Coates
e58ebc835c changed upload button label 2018-12-11 15:11:38 -08:00
Danny Coates
4fc4421398 updated deps 2018-12-11 09:48:05 -08:00
Danny Coates
61299dd8ea split serviceWorker and streamDownload capabilities 2018-12-10 12:47:23 -08:00
Danny Coates
81cf84b131 Merge pull request #1031 from mozilla/use-prod-oauth-server
Use the production fxa server and app id
2018-11-27 18:02:01 -08:00
Donovan Preston
e55aa7cb86 Use the production fxa server and app id 2018-11-27 18:17:23 -05:00
Danny Coates
fb782aa147 Merge pull request #1030 from mozilla/rename-to-org-mozilla-sendandroid
Rename package to org.mozilla.sendandroid per https://bugzilla.mozilla.org/show_bug.cgi?id=1494393#c10
2018-11-27 08:35:35 -08:00
Donovan Preston
d1212540a8 Rename package to org.mozilla.sendandroid per Rename package to org.mozilla.sendandroid per https://bugzilla.mozilla.org/show_bug.cgi?id=1494393#c10 2018-11-27 09:34:51 -05:00
Danny Coates
0640902350 moved non-async init earlier in main.js 2018-11-26 16:05:22 -08:00
Danny Coates
7dd20f3c04 removed unused babel-polyfill 2018-11-26 15:41:46 -08:00
Danny Coates
613a70f473 improved serviceworker caching 2018-11-26 13:25:47 -08:00
Danny Coates
bf2399ab88 updated deps 2018-11-26 12:10:10 -08:00
Danny Coates
31ff9aaabe remove cryptofill from layout.js 2018-11-26 11:07:48 -08:00
Danny Coates
87ac8b241b load cryptofill.js async 2018-11-26 10:36:49 -08:00
Danny Coates
5845fa5c05 replace yo-yoify with nanohtml 2018-11-23 13:25:22 -08:00
Danny Coates
d439dbe168 Merge pull request #1024 from mozilla/ws
implemented websocket flow control to prevent over buffering
2018-11-22 13:24:34 -08:00
Danny Coates
531584dbf1 implemented websocket flow control to prevent over buffering 2018-11-22 13:21:39 -08:00
Danny Coates
015067648e fixed initScript version.json path 2018-11-21 14:40:38 -08:00
Danny Coates
d4528848d9 moved jsconfig code into initScript 2018-11-20 12:23:05 -08:00
Danny Coates
416b9902cb added a webmanifest (#1023) 2018-11-20 15:00:32 -05:00
Danny Coates
5028351e6e Merge pull request #1022 from mozilla/new-fxa-clientid
Switch to a fxa clientId created just for Send Android
2018-11-20 09:30:29 -08:00
Donovan Preston
9806dba408 Switch to a fxa clientId created just for Send Android 2018-11-20 12:27:02 -05:00
Danny Coates
1e62aa976d reimplemented l10n using dynamic import() (#1012)
this should greatly reduce the complexity of the l10n code
and build pipeline and eliminate the most common error
seen in sentry logs (no translate function)
2018-11-20 09:50:59 -05:00
Danny Coates
5afa4e5c9b Merge pull request #1010 from mozilla/totalSize
added total size to wip tile
2018-11-19 21:37:31 -08:00
Danny Coates
eb1536878a Merge pull request #1016 from mozilla/api-prefix
Add setApiUrlPrefix and use it in the android version.
2018-11-19 15:24:14 -08:00
Donovan Preston
ae4b8cf0d3 Add setApiUrlPrefix and use it in the android version. 2018-11-19 15:10:57 -05:00
Danny Coates
74d8a12c07 fixes #1013. dragging page elements 2018-11-19 10:48:52 -08:00
Danny Coates
c99697caae fixes #1015. lolwhoops 2018-11-19 10:34:58 -08:00
Danny Coates
b80dd48434 added total size to wip tile 2018-11-16 17:31:37 -08:00
Danny Coates
0dc7398414 removed unused images and testpilot twitter link 2018-11-16 16:23:24 -08:00
Danny Coates
291f02855c removed fast-crc32c since we aren't validating gcs payloads 2018-11-16 15:58:22 -08:00
Danny Coates
b6517c5442 port fix for #1005 to vnext 2018-11-16 13:33:40 -08:00
Danny Coates
4ef303a2c9 updated deps 2018-11-16 13:06:36 -08:00
Danny Coates
fbad1ab55a formatting update 2018-11-16 12:39:36 -08:00
Danny Coates
91a8c66e0c Merge pull request #1007 from mozilla/comp
converting some things to choo/component
2018-11-16 12:35:16 -08:00
Danny Coates
6fdc430c4f delete old service worker caches 2018-11-16 12:32:32 -08:00
Danny Coates
32a55d00b2 don't render expired uploads 2018-11-16 12:30:15 -08:00
Danny Coates
9989f944c3 fixed account ui when not enabled 2018-11-16 10:01:53 -08:00
Danny Coates
660a1947cc try out service worker cache 2018-11-16 09:32:29 -08:00
Danny Coates
037c79730d converting some things to choo/component 2018-11-15 15:43:32 -08:00
Danny Coates
a576d54d64 fixed android height in emulator 2018-11-15 12:22:29 -08:00
Danny Coates
1528acde73 Merge pull request #1006 from mozilla/update-android-ui
Update the android ui to work with the new desktop ui components.
2018-11-15 09:40:42 -08:00
Danny Coates
d67716f26b fixed some element heights at md width 2018-11-15 09:27:17 -08:00
Donovan Preston
43c596fb99 Fix rendering problems with the android ui. 2018-11-15 10:06:35 -05:00
Danny Coates
c72e26c192 a couple android ui tweaks 2018-11-14 21:13:38 -08:00
Donovan Preston
3dc0ca933b Update the android ui to work with the new desktop ui components. 2018-11-14 14:20:32 -05:00
Danny Coates
f9002df490 updated cryptofill for safari ECDH 2018-11-12 11:15:36 -08:00
Danny Coates
1d09a2e694 fixed double file open on chrome 2018-11-08 16:24:32 -08:00
Danny Coates
e9aa9d60af updated deps 2018-11-08 15:12:20 -08:00
Danny Coates
0631abe653 renamed fileManager.js to controller.js 2018-11-08 15:12:07 -08:00
Donovan Preston
cab6f1bafb Implement the mechanics of fxa login on android, but don't show ui fo… (#1000)
* Implement the mechanics of fxa login on android, but don't show ui for it yet. Also, scopedKeys are not yet implemented.

* Hopefully fix the package-lock conflict?

* WIP on android scoped keys

* Finish implementing login.

* created android/user.js to handle android logins
2018-11-08 16:35:19 -05:00
Danny Coates
ffac4ae5b1 Merge pull request #998 from mozilla/i989
Changed sign in area
2018-11-06 21:34:04 -08:00
Danny Coates
e9d5d87691 changed sign in area 2018-11-06 21:30:35 -08:00
Danny Coates
4eca951a1c fixed syncFileList result when logged out 2018-11-06 11:36:20 -08:00
Danny Coates
064077d706 Merge pull request #984 from mozilla/droid-ui-2
wip on using shared ui in android
2018-11-06 11:33:10 -08:00
Danny Coates
76d2d72fb0 revert puppeteer to 1.9.0 to debug circleci 2018-11-06 11:28:54 -08:00
Danny Coates
99f6f53e40 renamed android's index.html to android.html 2018-11-06 11:21:14 -08:00
Danny Coates
732094a5ba Merge remote-tracking branch 'origin/vnext' into droid-ui-2 2018-11-06 10:54:44 -08:00
Danny Coates
6868af11cd add click handler to whole empty area 2018-11-05 20:55:26 -08:00
Danny Coates
ae89f1964f fixes #994. add new files to top of upload area 2018-11-05 16:43:45 -08:00
Danny Coates
63796c8ccb updated deps 2018-11-05 15:58:35 -08:00
Danny Coates
be38392192 log out when the auth token is expired 2018-11-05 15:56:59 -08:00
Danny Coates
d60eb5e022 Merge pull request #995 from mozilla/ui-fix
fix #985-#988, #990-#993
2018-11-05 15:53:20 -08:00
Danny Coates
1ef80febcb fixed filename word-break 2018-11-05 15:46:49 -08:00
Danny Coates
43748295b0 style updated for chrome 2018-11-05 15:00:35 -08:00
Mark Liang
7394d20cb7 fix #985-#988, #990-#993 2018-11-05 16:12:40 +08:00
Danny Coates
eb79ce1835 wip on using shared ui in android 2018-11-02 16:33:16 -07:00
Danny Coates
77a5a377e3 updated deps 2018-11-02 16:07:26 -07:00
Danny Coates
0cf95b30c0 Merge pull request #980 from mozilla/fresh
New UI implementation
2018-11-02 14:10:09 -07:00
Danny Coates
d3a3e241bf Merge pull request #983 from mozilla/fresh-ui-mark-update
Update UI
2018-11-02 14:04:02 -07:00
Danny Coates
1a7510070e fixed footer integration test 2018-11-02 11:57:50 -07:00
Danny Coates
1c063111cc a few style tweaks 2018-11-02 11:28:56 -07:00
Mark Liang
cacb3a898d update ui 2018-11-02 17:42:59 +08:00
Danny Coates
5ebe869c26 fixed intro size on home page 2018-11-01 12:04:14 -07:00
Danny Coates
dee9c0a538 fixed modal placement in responsive view 2018-11-01 11:05:17 -07:00
Danny Coates
90f261a314 moved some styles 2018-11-01 10:44:48 -07:00
Danny Coates
932a2a4576 removed unused code 2018-11-01 10:44:47 -07:00
Danny Coates
6ba3be8a0f updated integration tests for new ui 2018-11-01 10:44:47 -07:00
Danny Coates
891ffc20af added copied text after copy button click 2018-11-01 10:44:47 -07:00
Danny Coates
c359678226 styled dl password input a bit 2018-11-01 10:44:46 -07:00
Danny Coates
26a943939d wip on download page 2018-11-01 10:44:46 -07:00
Danny Coates
12e6eb1666 added password to upload form 2018-11-01 10:44:45 -07:00
Danny Coates
0e5202c470 updated modal 2018-11-01 10:44:45 -07:00
Danny Coates
7ad63ae004 stubbed copy dialog 2018-11-01 10:44:44 -07:00
Danny Coates
d881755814 added purgecss and cssnano 2018-11-01 10:44:16 -07:00
Danny Coates
211404237a added wide layout 2018-11-01 10:43:45 -07:00
Danny Coates
7838ad586d removed old ui 2018-11-01 10:43:44 -07:00
Danny Coates
f0cfc19f8c a new approach for the ui 2018-11-01 10:43:43 -07:00
Danny Coates
cc85486414 wip 2018-11-01 10:43:14 -07:00
Danny Coates
2b81ff1fb3 some wip. still broken 2018-11-01 10:43:14 -07:00
Danny Coates
5b939d2c95 reorged routes/index.js (broken) 2018-11-01 10:43:13 -07:00
John Gruen
8964387331 update ui 2018-11-01 10:43:13 -07:00
Danny Coates
3bf7798323 Merge pull request #963 from mozilla/gcs
WIP: GCS
2018-11-01 10:40:15 -07:00
Danny Coates
9e8e604024 stubbed in gcs (untested) 2018-11-01 10:36:05 -07:00
Danny Coates
d87fb64390 removed keys_jwe from local storage 2018-10-08 11:16:06 -07:00
Danny Coates
97d4f1223f reduce log noise in puppeteer test 2018-10-05 09:52:00 -07:00
Danny Coates
c1bbc97514 updated deps 2018-10-05 09:43:21 -07:00
Danny Coates
23932c0d4c Merge pull request #960 from mozilla/vnext-integration-tests
Vnext integration tests
2018-10-04 15:18:30 -07:00
Danny Coates
76de2b29a5 cleaned up integration test flow 2018-10-04 15:06:39 -07:00
Benjamin Forehand Jr
23d629b80b Added webdriverio integration tests 2018-10-03 11:22:30 -07:00
Danny Coates
bd02b7db8e updated deps & bump version 2018-10-02 13:15:02 -07:00
Danny Coates
7166f4e3d6 improved paste to handle text and pasted file's names 2018-10-01 17:46:09 -07:00
Danny Coates
f7f8944e00 stubbed in signup dialog 2018-09-27 15:46:46 -07:00
Danny Coates
d560fc05cf updated deps 2018-09-27 11:52:00 -07:00
Staś Małolepszy
f8964ebb99 Use FluentResource to parse and serialize FTL files server-side (#952) 2018-09-27 11:49:41 -07:00
Danny Coates
a997a44a23 renamed auth route 2018-09-26 12:22:51 -07:00
Mark Liang (You-Wen)
88db2c1cf4 UI Review German Edition (#950)
* UI changes for longer text

* UI changes for longer text
2018-09-26 10:59:33 -07:00
Danny Coates
307c9d3fa1 tweaked okDialog style 2018-09-26 10:48:37 -07:00
Danny Coates
b0a09ef953 updated .gitignore to exclude xcode userdata 2018-09-26 09:53:30 -07:00
Danny Coates
84657ed149 use firefox logo as logged in default avatar 2018-09-25 13:54:47 -07:00
Danny Coates
3d95848ba3 changed feedback button style 2018-09-25 13:49:46 -07:00
Danny Coates
044138b540 removed background image 2018-09-25 13:39:45 -07:00
Danny Coates
3f098f340e Merge pull request #939 from mozilla/more-android-ui
Add ui for setting max downloads, max time, and password.
2018-09-25 12:15:49 -07:00
Danny Coates
6b9a735bec parameterize download count dropdown on android 2018-09-25 11:36:23 -07:00
Donovan Preston
8b21a54ab4 Add the options route to the dev server 2018-09-25 11:14:17 -07:00
Donovan Preston
a181bb3509 Set the time limit in state so that fileManager can get to it. 2018-09-25 11:14:17 -07:00
Donovan Preston
5ec2486c57 Add ui for setting max downloads, max time, and password. 2018-09-25 11:14:17 -07:00
Danny Coates
fe4eb1d582 updated deps 2018-09-24 16:21:38 -07:00
Danny Coates
294cd0dfa8 reset page expiry options on logout 2018-09-24 15:25:08 -07:00
Danny Coates
e2259ae737 made download count and expiry options server configurable 2018-09-24 15:08:39 -07:00
Danny Coates
b61bf3c867 changed default config to have accounts disabled 2018-09-24 13:04:29 -07:00
Danny Coates
7eb7590f06 fixed getFileList when the response isn't OK 2018-09-24 12:23:46 -07:00
Danny Coates
c8bf3101aa fixed multiple issues with the /signin page. #935 #936 #937 2018-09-24 12:01:39 -07:00
Danny Coates
d34ff79fd7 implemented oauth state parameter 2018-09-21 14:16:56 -07:00
Danny Coates
135f40f65d set default fxa env for localhost 2018-09-20 14:13:07 -07:00
Danny Coates
fb83b324ab fixed download button multi-click. fixes #927 2018-09-20 09:04:02 -07:00
Danny Coates
93e82cf953 disable capabilities.account when no FXA_CLIENT_ID is set 2018-09-19 12:54:27 -07:00
Danny Coates
e3087f008c Merge pull request #932 from mozilla/document-android
Add a small blurb describing how to test the android version.
2018-09-19 09:44:21 -07:00
Danny Coates
ec5d301814 set capabilities.account = false on the server to defer rendering those components. fixes #929 2018-09-19 09:01:19 -07:00
Donovan Preston
da9f4d0ce5 Add a small blurb describing how to test the android version. 2018-09-19 10:19:18 -04:00
Danny Coates
99055b1342 fixed leaky app.state on the server-side. fixes #928 2018-09-18 16:23:58 -07:00
Danny Coates
17a0393ce0 disable upload button while uploading. fixes #927 2018-09-18 12:56:42 -07:00
Danny Coates
3d2c8c2ce2 added deploy_vnext to circle.yml 2018-09-18 11:30:43 -07:00
Danny Coates
7dcf4bcdb9 fixed capabilities.account when localStorage is disabled 2018-09-17 12:05:03 -07:00
Danny Coates
942457b357 added account to capabilities 2018-09-14 13:58:19 -07:00
Danny Coates
3a162d47c5 updated deps 2018-09-14 11:53:13 -07:00
Danny Coates
dc3cffe63b Merge pull request #925 from mozilla/modal
stubbed in modal dialog
2018-09-14 09:40:33 -07:00
Danny Coates
bf83b43866 Merge branch 'vnext' into modal 2018-09-14 09:20:30 -07:00
Danny Coates
7ccf462bf8 implemented PKCE auth (#921)
* implemented PKCE auth

* removed node-jose

* added PKCE tests
2018-09-14 11:00:33 -04:00
Danny Coates
cdc15596df stubbed in modal dialog 2018-09-13 10:37:52 -07:00
Danny Coates
20528eb0d1 added ANDROID environment variable to dev server for hosting the android html 2018-09-10 10:56:59 -07:00
Danny Coates
a8b305a84e Merge pull request #920 from mozilla/ignore-non-data-urls
Ignore messages posted to onmessage that aren't data urls
2018-09-07 10:32:22 -07:00
Donovan Preston
76f9d3ee35 Ignore messages posted to onmessage that aren't data urls 2018-09-07 13:21:30 -04:00
Danny Coates
17ee4e0058 load android ui in dev when browsing to /android (#919) 2018-09-07 13:08:01 -04:00
Danny Coates
041c8ffdd2 updated deps 2018-09-06 23:08:32 -07:00
Danny Coates
35a6c7324d updated babel 2018-09-06 22:52:10 -07:00
Donovan Preston
71ea4e74f6 Implement wss preference url in html; Update to work with the tip of vnext branch; allow viewing the android ui from the webpack server (#918)
* Merge branch 'vnext' of https://github.com/mozilla/send into android-preferences

Fix conflicts

* Implement wss preference url in html; Update to work with the tip of vnext branch; allow viewing the android ui from the webpack server

* Use a try/catch in case localStorage isn't available, which it isn't in a ServiceWorker
2018-09-06 18:56:04 -04:00
Danny Coates
690a705be9 Merge pull request #905 from mozilla/mobile-acceptance-doc
add mobile acceptance criteria
2018-09-06 14:37:42 -07:00
Danny Coates
a1fa36b79c minor serviceWorker tweaks to url matching and 302 redirects 2018-09-05 10:35:36 -07:00
Danny Coates
7c6aabc388 updated fluent to 0.8 2018-09-04 13:30:11 -07:00
Danny Coates
59224516b7 updated dependency minors 2018-09-04 13:13:25 -07:00
Danny Coates
025f040388 adjust streamDownload capability to exclude safari but not chrome 2018-09-04 13:05:11 -07:00
Danny Coates
71b24b05d0 added http logging to the console in dev 2018-09-04 12:09:03 -07:00
Danny Coates
df1c4ef913 emit complete for blob downloads 2018-09-04 11:08:44 -07:00
Danny Coates
353fab8486 Merge pull request #916 from mozilla/fxa
Implemented FxA
2018-09-04 11:07:25 -07:00
Danny Coates
976fd61f23 removed unused crypto functions 2018-09-04 10:41:45 -07:00
Danny Coates
00550872d7 hide signup promo when logged in 2018-08-31 15:15:25 -07:00
Danny Coates
85185d048c added fxa auth to /ws 2018-08-31 14:30:50 -07:00
Danny Coates
fb7176d989 added fxa auth to /params 2018-08-31 11:43:56 -07:00
Danny Coates
718d74fa50 Implemented FxA 2018-08-30 22:10:08 -07:00
John Gruen
c7876f6b7f add mobile acceptance criteria 2018-08-27 11:30:42 +02:00
Danny Coates
70bc2b7656 Merge pull request #904 from mozilla/android-port-to-choo-2
Fix #896 Port Send Android to choo
2018-08-16 12:48:42 -07:00
Donovan Preston
7a48c5201a Fix #896 Port Send Android to choo 2018-08-16 12:07:12 -04:00
Donovan Preston
071e283f87 Implement section 2.1 and parts of section 4.1 from the Send Android spec (#901)
* Fix #877 Implement Start page (Empty State) Design

* Update some kotlin and android sdk things, and update to the latest code in vnext

* Begin implementing the card ui which shows after uploading.

* Implement a progress bar.
2018-08-15 15:29:29 -04:00
Emily
29bafe1bae prevent uploading duplicate files 2018-08-10 13:11:17 -07:00
Emily
37c2926252 Merge branch 'time' into vnext 2018-08-09 15:58:23 -07:00
Emily
650d30c4bc fix merge conflicts 2018-08-09 15:58:02 -07:00
Emily
b89bef6e89 refactor to single bucket 2018-08-09 14:49:52 -07:00
Emily
452ccd068b fixes comment in locales 2018-08-09 10:15:54 -07:00
Emily
4ee497a83f minor ui fixes 2018-08-08 17:24:58 -07:00
Emily
bf16e5c8a9 integrate with new ui 2018-08-08 11:07:09 -07:00
Emily
49b9a1f452 refresh package-lock.json 2018-08-07 15:52:20 -07:00
Danny Coates
13057804ab Merge pull request #876 from mozilla/uitwo
New UI
2018-08-06 08:58:38 -07:00
Emily
894545a6f0 add fxA ui elements 2018-08-03 16:11:13 -07:00
Emily
4c64593262 add cancel buttons 2018-08-03 16:10:00 -07:00
Emily
c9ae76b209 hook multifile to ui 2018-08-03 16:10:00 -07:00
Danny Coates
e42ad175db Merge pull request #870 from mozilla/ios-prototype-3
Implement ios prototype version
2018-08-03 12:03:13 -07:00
Danny Coates
a83e0cfbda fluent_loader no longer needs polyfill with node 10 2018-08-03 10:48:00 -07:00
Danny Coates
e97b8ff42d updated deps & updated node for circleci and docker to 10.x. (8.x should technically still work) 2018-08-02 14:22:11 -07:00
Donovan Preston
3e1f0f1f56 Remove auto-generated copyright lines 2018-08-02 14:24:13 -04:00
Donovan Preston
c13b63ec9c Merge branch 'vnext' of https://github.com/mozilla/send into ios-prototype-3 2018-08-02 14:01:50 -04:00
Danny Coates
a0edff1ead make ece encrypt key extractable for Edge 2018-07-31 15:37:04 -07:00
Danny Coates
4fabd539d1 added exportKey to capabilities check 2018-07-31 15:10:12 -07:00
Danny Coates
9501bf7270 colon in wss url breaks edge when port is not explicit 2018-07-31 12:19:27 -07:00
Danny Coates
9bd96210e5 Merge pull request #875 from mozilla/capabilities
began adding capability flags
2018-07-31 11:42:13 -07:00
Danny Coates
d14aeb29e9 began adding capability flags 2018-07-31 11:29:26 -07:00
Donovan Preston
fd1a3dc251 Merge branch 'vnext' of https://github.com/mozilla/send into ios-prototype-3 2018-07-30 09:44:44 -04:00
Danny Coates
ebbb174c66 Merge pull request #868 from mozilla/multifile
Implemented multi-file upload/download
2018-07-27 16:46:34 -07:00
Danny Coates
7bf104960e Implemented multi-file upload/download 2018-07-27 16:40:52 -07:00
Danny Coates
28131243f9 up default max_file_size to 3gb 2018-07-27 10:39:23 -07:00
Danny Coates
b2aed06328 disable integration tests on vnext 2018-07-27 09:31:22 -07:00
Donovan Preston
ac1c7c2363 Add jpeg 2000 to the list. 2018-07-27 10:50:10 -04:00
Donovan Preston
e3601055fc Implement ios prototype version 2018-07-27 09:20:08 -04:00
Donovan Preston
a80d007e0c Hook up the android kotlin code to the send js code (#860) 2018-07-27 09:11:46 -04:00
Danny Coates
5c7b4ace9a updated deps & re-enabled frontend tests 2018-07-25 12:46:40 -07:00
Danny Coates
5e9e63944b extracted blobSlicer, fixed download cancel tests 2018-07-25 12:30:28 -07:00
Danny Coates
5483dc2506 use actual file size in dl progress. detect cancelled stream 2018-07-23 15:18:38 -07:00
Danny Coates
2afe79c941 Merge pull request #866 from mozilla/sw
Service Worker for streaming
2018-07-23 10:01:47 -07:00
Danny Coates
7673715c65 disabled frontend tests in ci
frontend tests are failing in puppeteer but work in the
browsers.
2018-07-23 09:49:16 -07:00
Danny Coates
38fd349d9b use TransformStream if available 2018-07-19 14:46:12 -07:00
Danny Coates
f32ebd913a send nonce to sw 2018-07-19 13:20:10 -07:00
Danny Coates
86f2a531d4 Merge branch 'vnext' into sw 2018-07-19 12:16:48 -07:00
Danny Coates
f923ff4f87 Merge remote-tracking branch 'origin/master' into vnext 2018-07-19 12:14:57 -07:00
Danny Coates
282cf0b595 use lib for setting content-disposition for more correctness 2018-07-19 12:11:55 -07:00
Danny Coates
f12d3abe79 refactored stream transforms 2018-07-18 16:39:14 -07:00
Danny Coates
f58b6194ce updated streams ponyfill 2018-07-17 11:40:01 -07:00
Danny Coates
f4f8332f96 WIP on shimming streams in firefox 2018-07-13 17:05:19 -07:00
Danny Coates
23c347175a Merge branch 'vnext' into sw 2018-07-13 12:27:39 -07:00
Danny Coates
dd0cb78ea2 Merge remote-tracking branch 'origin/master' into vnext 2018-07-13 12:25:28 -07:00
Danny Coates
3a8172fa63 Merge remote-tracking branch 'origin/vnext' into sw 2018-07-13 12:22:13 -07:00
Danny Coates
2a63a5b103 sourcemaps for prod cuz why not 2018-07-13 11:36:51 -07:00
Danny Coates
787d227761 got webpack production mode running 2018-07-13 11:13:09 -07:00
Danny Coates
1a78f57515 don't set cache header on serviceWorker.js 2018-07-12 20:48:07 -07:00
Danny Coates
5677390a45 added content-length to sw response 2018-07-12 15:32:07 -07:00
Danny Coates
ddeaf8076d added wss to csp connect-src 2018-07-12 14:27:49 -07:00
Danny Coates
ebf6bda467 updated to webpack 4 2018-07-12 13:16:02 -07:00
Emily
b76899a353 fix download cancel 2018-07-12 11:22:49 -07:00
Emily
05696cffd9 Merge branch 'sw' of github.com:mozilla/send into sw
sw
2018-07-11 16:53:01 -07:00
Emily
ff7969a7ef fix download workflow tests 2018-07-11 16:52:46 -07:00
Danny Coates
16d7af843b new dev webpack config for great deving 2018-07-10 10:47:50 -07:00
Emily
6db3009e5f download cancel and progress 2018-07-09 17:00:19 -07:00
Emily
921df9e1aa dupe network request bug 2018-07-09 15:39:06 -07:00
Emily
f98bc0878c saves stream to file 2018-07-06 15:49:50 -07:00
Emily
62ed0a411f sw 2018-07-05 12:40:49 -07:00
Donovan Preston
1f13cf2c5f Merge pull request #856 from mozilla/android-use-local-files
Android use local files
2018-07-02 15:25:35 -04:00
Danny Coates
cc7ea73513 updated deps 2018-06-29 15:14:55 -07:00
Emily
38ef52d3ba uses fetch.body 2018-06-29 09:36:08 -07:00
Emily
5f79a9fb6d fixes downloading files as .part 2018-06-28 11:15:16 -07:00
Danny Coates
9472d5eaa6 added delay when ws.bufferedAmount is high 2018-06-27 09:20:16 -07:00
Danny Coates
126ea8c7e6 use a Duplex stream for EOF 2018-06-25 14:27:56 -07:00
Emily Hou
beccd80902 small storage fix (#858) 2018-06-25 11:52:29 -07:00
Emily Hou
9bfdf86bec Merge pull request #855 from mozilla/streaming
add streaming upload
2018-06-25 11:37:06 -07:00
Emily Hou
9d04514f8e stream footer 2018-06-25 11:26:48 -07:00
Danny Coates
a4cf46c0eb fixed minor streaming nits 2018-06-25 10:57:52 -07:00
Donovan Preston
b5d7e99ba5 Serve ui out of local html files; pass text/plain and image/* data to the webview using a data url 2018-06-22 16:48:21 -04:00
Donovan Preston
c103c7fd7a Update dependencies 2018-06-22 16:47:33 -04:00
Danny Coates
c157e4d31c created server/bin/ for server entrypoints
- added server/bin/test.js for the frontend test runner
2018-06-22 13:34:34 -07:00
Emily Hou
dafe4884fc revisions 2018-06-22 13:17:23 -07:00
Emily Hou
12ccce3016 fix checking file early 2018-06-21 16:36:34 -07:00
Emily Hou
e4a0028f5d add streaming 2018-06-21 13:57:53 -07:00
Danny Coates
863a2e9c29 improved background rendering slightly 2018-06-21 11:28:31 -07:00
Danny Coates
ff092d3d84 Merge pull request #854 from mozilla/uitwo
Some progress on new UI
2018-06-21 10:51:48 -07:00
Danny Coates
207179484c added striped box 2018-06-21 10:32:31 -07:00
Emily Hou
1bd7e4d486 add streaming 2018-06-20 17:05:33 -07:00
Danny Coates
211b1a8576 added background image 2018-06-19 12:58:42 -07:00
Emily Hou
34cb970f11 add dependencies 2018-06-04 11:06:27 -07:00
Emily Hou
a8fef2c0a5 add ece transformers 2018-06-04 10:47:55 -07:00
Emily Hou
fdef37287d Merge pull request #837 from mozilla/refactor-upload
refactored upload away from multipart forms to binary data
2018-06-04 10:01:52 -07:00
Danny Coates
af7a262ef0 refactored upload away from multipart forms to binary data 2018-05-31 14:10:02 -07:00
Danny Coates
f95d6d062c Merge remote-tracking branch 'origin/master' into vnext 2018-05-29 15:12:46 -07:00
Danny Coates
a81c795627 Merge remote-tracking branch 'origin/master' into vnext 2018-05-29 14:41:31 -07:00
Danny Coates
cbe3c819fb Merge pull request #822 from fzzzy/send-android
Initial working proof-of-concept for android.
2018-05-24 12:42:28 -07:00
Donovan Preston
6baf385058 Add a readme 2018-05-24 11:47:13 -04:00
Donovan Preston
82bd1b2adf For some reason build clean produced this diff. 2018-05-23 21:43:38 -04:00
Donovan Preston
b269712c32 Initial working proof-of-concept for android. 2018-05-23 21:37:31 -04:00
Danny Coates
d50a3d4a1f added some links for streaming 2018-05-23 12:17:23 -07:00
485 changed files with 36936 additions and 19181 deletions

View File

@@ -1,70 +1,48 @@
version: 2.0
jobs:
build:
docker:
- image: circleci/node:10
steps:
- checkout
- restore_cache:
key: send-{{ checksum "package-lock.json" }}
- run: npm install
- save_cache:
key: send-{{ checksum "package-lock.json" }}
paths:
- node_modules
- run: npm run build
- persist_to_workspace:
root: .
paths:
- ./dist
test:
docker:
- image: circleci/node:10-browsers
- image: circleci/node:12-browsers
steps:
- checkout
- restore_cache:
key: send-{{ checksum "package-lock.json" }}
- run: npm install
- save_cache:
key: send-{{ checksum "package-lock.json" }}
paths:
- node_modules
- run: npm run check
- run: npm ci
- run: npm run lint
- run: npm run test
- run: npm test
- store_artifacts:
path: coverage
integration_tests:
machine: true
docker:
- image: circleci/node:12-browsers
steps:
- checkout
- attach_workspace:
at: .
- run: npm ci
- run:
name: Install Docker Compose
command: |
set -x
pip install docker-compose>=1.18
docker-compose --version
- run:
command: npm run test-integration
- store_artifacts:
path: coverage/send-test.html
name: Run integration test
command: ./scripts/bin/run-integration-test-circleci.sh
deploy_dev:
machine: true
docker:
- image: circleci/node:12
steps:
- checkout
- attach_workspace:
at: .
- setup_remote_docker
- run: docker login -u $DOCKER_USER -p $DOCKER_PASS
- run: docker build -t mozilla/send:latest .
- run: docker push mozilla/send:latest
deploy_stage:
machine: true
deploy_vnext:
docker:
- image: circleci/node:12
steps:
- checkout
- attach_workspace:
at: .
- setup_remote_docker
- run: docker login -u $DOCKER_USER -p $DOCKER_PASS
- run: docker build -t mozilla/send:vnext .
- run: docker push mozilla/send:vnext
deploy_stage:
docker:
- image: circleci/node:12
steps:
- checkout
- setup_remote_docker
- run: docker login -u $DOCKER_USER -p $DOCKER_PASS
- run: docker build -t mozilla/send:$CIRCLE_TAG .
- run: docker push mozilla/send:$CIRCLE_TAG
@@ -72,44 +50,32 @@ workflows:
version: 2
test_pr:
jobs:
- build:
filters:
branches:
ignore: master
- test:
filters:
branches:
ignore: master
ignore:
- master
- vnext
- integration_tests:
filters:
branches:
ignore: master
requires:
- build
build_and_deploy_dev:
jobs:
- build:
- deploy_dev:
filters:
branches:
only: master
tags:
ignore: /^v.*/
- deploy_dev:
requires:
- build
- deploy_vnext:
filters:
branches:
only: master
only: vnext
tags:
ignore: /^v.*/
build_and_deploy_stage:
jobs:
- build:
filters:
branches:
ignore: /.*/
tags:
only: /^v.*/
- test:
filters:
branches:
@@ -117,8 +83,6 @@ workflows:
tags:
only: /^v.*/
- integration_tests:
requires:
- build
filters:
branches:
ignore: /.*/
@@ -126,7 +90,6 @@ workflows:
only: /^v.*/
- deploy_stage:
requires:
- build
- test
- integration_tests
filters:

View File

@@ -1,11 +1,8 @@
node_modules
.git
.tox
.DS_Store
firefox
assets
docs
public
test
coverage
.circleci
.nyc_output
.vscode
.DS_Store
coverage
docs
firefox
node_modules

View File

@@ -2,3 +2,6 @@ dist
assets
firefox
coverage
android/app/build
app/locale.js
app/capabilities.js

View File

@@ -4,6 +4,7 @@ env:
extends:
- eslint:recommended
- prettier
- plugin:node/recommended
- plugin:security/recommended
@@ -14,18 +15,14 @@ plugins:
root: true
rules:
node/no-deprecated-api: off
node/no-unsupported-features/es-syntax: off
node/no-unsupported-features/node-builtins: off
node/no-unpublished-require: off
node/no-unpublished-import: off
security/detect-non-literal-fs-filename: off
security/detect-object-injection: off
eol-last: [error, always]
eqeqeq: error
no-alert: warn
no-console: warn
no-path-concat: error
no-unused-vars: [error, {argsIgnorePattern: "^_|err|event|next|reject"}]
no-var: error
one-var: [error, never]
prefer-const: error
quotes: [error, single, {avoidEscape: true}]
require-atomic-updates: warn

7
.gitignore vendored
View File

@@ -6,3 +6,10 @@ dist
.nyc_output
.tox
.pytest_cache
*.iml
android/app/src/main/assets
ios/send-ios/assets/ios.js
ios/send-ios/assets/vendor.js
ios/send-ios.xcodeproj/project.xcworkspace/xcuserdata/*
ios/send-ios.xcodeproj/xcuserdata/*
test/integration/downloads

View File

@@ -1,3 +1,4 @@
dist
assets/*.js
android/app/src/main/assets
android/app/build
coverage

View File

@@ -1,7 +0,0 @@
# autogenerated pyup.io config file
# see https://pyup.io/docs/configuration/ for all available options
schedule: every week
requirements:
- test/integration/Pipfile
- test/integration/pipenv.txt

View File

@@ -10,3 +10,4 @@ rules:
declaration-colon-newline-after: null
selector-list-comma-newline-after: null
value-list-comma-newline-after: null
at-rule-no-unknown: null

2
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,2 @@
{
}

15
CODE_OF_CONDUCT.md Normal file
View File

@@ -0,0 +1,15 @@
# Community Participation Guidelines
This repository is governed by Mozilla's code of conduct and etiquette guidelines.
For more details, please read the
[Mozilla Community Participation Guidelines](https://www.mozilla.org/about/governance/policies/participation/).
## How to Report
For more information on how to report violations of the Community Participation Guidelines, please read our '[How to Report](https://www.mozilla.org/about/governance/policies/participation/reporting/)' page.
<!--
## Project Specific Etiquette
In some cases, there will be additional project etiquette i.e.: (https://bugzilla.mozilla.org/page.cgi?id=etiquette.html).
Please update for your project.
-->

View File

@@ -1,72 +1,121 @@
Abdalrahman Hwoij
Abhinav Adduri
Adnan Kičin
Adolfo Jayme Barrientos
Alberto Castro
Alexander Slovesnik
Alfredos-Panagiotis Damkalis
Aman Alam
Amin Mahmudian
Ander Elortondo
Andreas Pettersson
Anesu Chiodza
Anika Dorn
Anish Sheela
Arash Mousavi
Artem Polivanchuk
Ashikur Rahman
Ashok kumar
Balasankar C
Balázs Meskó
Belayet Hossain
Benjamin Forehand Jr
Besnik Bleta
Björn I
Bjørn I
Boopesh Mahendran
Brahim Essaidi
Brainlulz
Breana Gonzales
Christian Elbrianno
Christoph Kührer
Christopher Ramírez
Chuck Harmston
Cloney 173741
Cláudio Esperança
Cristian Silaghi
Cynthia Pereira
Daniel Thorn
Daniela Arcese
Danny Coates
Davide
Derek Tamsen
Dhyey Thakore
Donovan Preston
Edi Santoso
Edmund Huggett
Elisa X
Emily
Emily Hou
Emin Mastizada
Enol
Erica
Erica Wright
Fauzan Alfi
Filip Hruška
Fjoerfoks
Francesco Lodolo
Francesco Lodolo [:flod]
Frederick Villaluna
G12r
Gabriela
Gautam krishna.R
George Raptis
Georgianizator
Gonçalo Matos
Gwenn
Hampus
Hugo
Hugo Abreu
Hyeonseok Shin
Håvar Henriksen
Ian Neal
ItielMaN
Jae Hyeon Park
Jakob Kappel
Jakub Rychlý
Jamie
Jarmo
Jim Spentzos
Jiri Grönroos
Jobava
Joe Becher
Joe ST
Joergen
Johann-S
John Gruen
Jon Buckley
Jon Vadillo
Jonathan Claudius
Jordi Cuevas
Jordi Serratosa
Juan Esteban Ajsivinac Sián
Juan Sián
Juraj Cigáň
Kerim Kalamujić
Khaled Hosny
Kim Ludvigsen
Kim Younggeon
Kohei Yoshino
Lan Glad
Lasse Liehu
Laurent Jouanneau
Lobodzets
LuFlo
Luis A. Sánchez
Luiz Carlos de Morais
Luiz Felipe F M Costa
Luna Jernberg
Mahay Alam Khan
Marcelo Ghelman
Marcelo Poli
Marco Aurélio
Mark Heijl
Mark Liang
Mark Liang (You-Wen)
Marko Andrejić
Martijn Dekker
Marwan Mohamad
Matjaž Horvat
Maykon Chagas
Melo46
@@ -75,24 +124,43 @@ Michael Köhler
Michael Wolf
Michal Stanke
Michal Vašíček
Mikeyy
Miro Rauhala
Mozilla Pontoon
Mozilla-GitHub-Standards
Mozinet
Moḥend Belqasem
Muhend Belkacem
Muḥend Belqasem
Myungjae Won
Nicholas Skinsacos
Nihad
Nihad Suljić
Niksend Mizuhara
Oscar
Paulius
Pedro Burlamaqui Bendahan
Peter deHaan
Pierre Neter
Pin-guang Chen
Piotr Drąg
Quentí
Quế Tùng
Rachel Tublitz
Radu Popescu
Rhoslyn Prys
RickieES
Rimas Kudelis
Rizky Ariestiyansyah
Rob Powell
Robert
Roberto Alvarado
Rodrigo
Rodrigo Guerra
Rok Žerdin
Romi Hardiyanto
Rongjian Zhang
Ruba
Sahithi
Sairam Raavi
Sander Lepik
@@ -101,57 +169,104 @@ Sara Todaro
Sav22999
Schieck :)
Selim Şumlu
Selyan Sliman Amiri
Sidak Singh Aulakh
Slimane Amiri
Slimane Selyan AMIRI
Soumya Himanish Mohapatra
Staś Małolepszy
Suriyaa ✌️️
Tema
Thomas Dalichow
Théo Chevalier
Tiago Morais Morgado
Tim Visée
Tomer Cohen
Tomáš Zelina
Ton
Top
Tymur Faradzhev
Uccen Marzuq
Varghese Thomas
Victor Bychek
Vimal Raghubir
Vitaliy Krutko
Weihang Lo
Wiktor Furman
Wil Clouser
YFdyh000
Yassine Aït-El-Mouden
Yongmin H
You-Wen Liang (Mark)
aaaaalbert
aefgh39622
alamanda
albertdcastro
alex_mayorga
ariestiyansyah
avelper
chilledfrogs
clouserw-mozilla-owner
dgadelha
dskmori
ehuggett
eljuno
emily-hou1
erdem cobanoglu
gautamkrishnar
gmontagu
goofy
hello
hi
ivan.pompa
jesferman1993
jlG
josotrix
jspam
julen
julenx
kenrick95
kumincir
leo.toneff
m4hdi.pdroid
mail
manxmensch
marigalicer
marsf
merianosnikos
mirzet.omerovic.1992
mujeebcpy
p.sanroman.bengoetxea
passionforlife
paul.trevor
pyup.io bot
ravmn
rcmainak
reza.habibi2008
rgpublic
risger
robbp
ruikunai
savemore99.sm
sergio
shikhar-scs
siparon
skystar-p
stripTM
tatalmondmush
tiagomoraismorgado
timvisee
victor.gonzalezro
xcffl
ybouhamam
yoshimitsu002
yusup.ramdani
Μιχάλης
Марко Костић (Marko Kostić)
Ратко Вујановић
صفا الفليج
వీవెన్
ജോയ്സ്
张无忌
新垣结衣松冈茉优长泽雅美门胁麦上野树里石原里美
莫非前世那一眼

View File

@@ -1,17 +1,59 @@
FROM node:10 AS builder
RUN addgroup --gid 10001 app && adduser --disabled-password --gecos '' --gid 10001 --home /app --uid 10001 app
COPY package*.json /app/
WORKDIR /app
RUN npm install --production
##
# Firefox Send - Mozilla
#
# License https://github.com/mozilla/send/blob/master/LICENSE
##
FROM node:10-slim
RUN addgroup --gid 10001 app && adduser --disabled-password --gecos '' --gid 10001 --home /app --uid 10001 app
# Build project
FROM node:12 AS builder
RUN set -x \
# Add user
&& addgroup --gid 10001 app \
&& adduser --disabled-password \
--gecos '' \
--gid 10001 \
--home /app \
--uid 10001 \
app
COPY --chown=app:app . /app
USER app
WORKDIR /app
COPY --chown=app:app --from=builder /app .
COPY --chown=app:app . .
RUN set -x \
# Build
&& PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true npm ci \
&& npm run build
# Main image
FROM node:12-slim
RUN set -x \
# Add user
&& addgroup --gid 10001 app \
&& adduser --disabled-password \
--gecos '' \
--gid 10001 \
--home /app \
--uid 10001 \
app
RUN apt-get update && apt-get -y install \
git-core \
&& rm -rf /var/lib/apt/lists/*
USER app
WORKDIR /app
COPY --chown=app:app package*.json ./
COPY --chown=app:app app app
COPY --chown=app:app common common
COPY --chown=app:app public/locales public/locales
COPY --chown=app:app server server
COPY --chown=app:app --from=builder /app/dist dist
RUN npm ci --production && npm cache clean --force
RUN mkdir -p /app/.config/configstore
RUN ln -s dist/version.json version.json
ENV PORT=1443
EXPOSE $PORT
CMD ["node", "server/prod.js"]
EXPOSE ${PORT}
CMD ["node", "server/bin/prod.js"]

View File

@@ -1,8 +1,6 @@
# Firefox Send
# [![Firefox Send](./assets/icon.svg)](https://send.firefox.com/) Firefox Send
[![BrowserStack Status](https://www.browserstack.com/automate/badge.svg?badge_key=aFFIMHNEWFcrNHJaMU1LRkJnUDhOQkNHMmh2WHBscjJsZHcwK1h0dkhwdz0tLXRpN1RXcysybUtxTFFTVGRtWjVGeHc9PQ==--c56129be8c75941b115c5b5e5d3ed10b3c7dca6b)](https://www.browserstack.com/automate/public-build/aFFIMHNEWFcrNHJaMU1LRkJnUDhOQkNHMmh2WHBscjJsZHcwK1h0dkhwdz0tLXRpN1RXcysybUtxTFFTVGRtWjVGeHc9PQ==--c56129be8c75941b115c5b5e5d3ed10b3c7dca6b)
[![CircleCI](https://img.shields.io/circleci/project/github/mozilla/send.svg)](https://circleci.com/gh/mozilla/send)
[![Available on Test Pilot](https://img.shields.io/badge/available_on-Test_Pilot-0996F8.svg)](https://testpilot.firefox.com/experiments/send)
**Docs:** [FAQ](docs/faq.md), [Encryption](docs/encryption.md), [Build](docs/build.md), [Docker](docs/docker.md), [Metrics](docs/metrics.md), [More](docs/)
@@ -18,6 +16,8 @@
* [Localization](#localization)
* [Contributing](#contributing)
* [Testing](#testing)
* [Deployment](#deployment)
* [Android](#android)
* [License](#license)
---
@@ -30,22 +30,22 @@ A file sharing experiment which allows you to send encrypted files to other user
## Requirements
- [Node.js 8.2+](https://nodejs.org/)
- [Node.js 12.x](https://nodejs.org/)
- [Redis server](https://redis.io/) (optional for development)
- [AWS S3](https://aws.amazon.com/s3/) or compatible service. (optional)
- [AWS S3](https://aws.amazon.com/s3/) or compatible service (optional)
---
## Development
To start an ephemeral development server run:
To start an ephemeral development server, run:
```sh
npm install
npm start
```
Then browse to http://localhost:8080
Then, browse to http://localhost:8080
---
@@ -87,8 +87,20 @@ Pull requests are always welcome! Feel free to check out the list of ["good firs
| ENVIRONMENT | URL
|-------------|-----
| Production | <https://send.firefox.com/>
| Stage | <https://send.stage.mozaws.net/>
| Development | <https://send.dev.mozaws.net/>
| Stage | <https://stage.send.nonprod.cloudops.mozgcp.net/>
| Development | <https://send2.dev.lcip.org/>
---
## Deployment
see also [docs/deployment.md](docs/deployment.md)
---
## Android
The android implementation is contained in the `android` directory, and can be viewed locally for easy testing and editing by running `ANDROID=1 npm start` and then visiting <http://localhost:8080>. CSS and image files are located in the `android/app/src/main/assets` directory.
---

6
android/.eslintrc.yaml Normal file
View File

@@ -0,0 +1,6 @@
env:
browser: true
parserOptions:
sourceType: module

4
android/.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
local.properties
.gradle
build

9
android/README.md Normal file
View File

@@ -0,0 +1,9 @@
Readme
=====
The Send Android app allows you to choose any file from your android device, encrypt it with a password, and get a URL which will allow secure download of the file. By default, this URL will expire after one download or 24 hours.
Building the Send Android app.
=====
First, install Android Studio. Open the `android` directory in Android Studio, plug in your android phone, and press the run button.

19
android/SendAndroid.iml Normal file
View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="SendAndroid" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="java-gradle" name="Java-Gradle">
<configuration>
<option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />
<option name="BUILDABLE" value="false" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

96
android/android.js Normal file
View File

@@ -0,0 +1,96 @@
import 'intl-pluralrules';
import choo from 'choo';
import html from 'choo/html';
import * as Sentry from '@sentry/browser';
import { setApiUrlPrefix, getConstants } from '../app/api';
import metrics from '../app/metrics';
//import assets from '../common/assets';
import Archive from '../app/archive';
import Header from '../app/ui/header';
import storage from '../app/storage';
import controller from '../app/controller';
import User from './user';
import intents from './stores/intents';
import home from './pages/home';
import upload from './pages/upload';
import share from './pages/share';
import preferences from './pages/preferences';
import error from './pages/error';
import { getTranslator } from '../app/locale';
import { setTranslate } from '../app/utils';
import { delay } from '../app/utils';
if (navigator.userAgent === 'Send Android') {
setApiUrlPrefix('https://send.firefox.com');
}
const app = choo();
//app.use(state);
app.use(controller);
app.use(intents);
window.finishLogin = async function(accountInfo) {
while (!(app.state && app.state.user)) {
await delay();
}
await app.state.user.finishLogin(accountInfo);
await app.state.user.syncFileList();
app.emitter.emit('replaceState', '/');
};
function body(main) {
return function(state, emit) {
/*
Disable the preferences menu for now since it is ugly and isn't
relevant to the beta
function clickPreferences(event) {
event.preventDefault();
emit('pushState', '/preferences');
}
const menu = html`<a
id="hamburger"
class="absolute top-0 right-0 z-50"
href="#"
onclick="${clickPreferences}"
>
<img src="${assets.get('preferences.png')}" />
</a>`;
*/
return html`
<body class="flex flex-col items-center font-sans bg-grey-10 h-screen">
${state.cache(Header, 'header').render()} ${main(state, emit)}
</body>
`;
};
}
(async function start() {
const translate = await getTranslator('en-US');
setTranslate(translate);
const { LIMITS, DEFAULTS } = await getConstants();
app.use(state => {
state.LIMITS = LIMITS;
state.DEFAULTS = DEFAULTS;
state.translate = translate;
state.capabilities = {
account: true
}; //TODO
state.archive = new Archive([], DEFAULTS.EXPIRE_SECONDS);
state.storage = storage;
state.user = new User(storage, LIMITS);
state.sentry = Sentry;
});
app.use(metrics);
app.route('/', body(home));
app.route('/upload', upload);
app.route('/share/:id', share);
app.route('/preferences', preferences);
app.route('/error', error);
//app.route('/debugging', require('./pages/debugging').default);
// add /api/filelist
app.mount('body');
})();
window.app = app;

1
android/app/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/build

41
android/app/build.gradle Normal file
View File

@@ -0,0 +1,41 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 27
defaultConfig {
applicationId "org.mozilla.firefoxsend"
minSdkVersion 26
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.github.delight-im:Android-AdvancedWebView:v3.0.0'
implementation "org.mozilla.components:service-firefox-accounts:$android_components_version"
}
task generateAndLinkBundle(type: Exec, description: 'Generate the android.js bundle and link it into the assets directory') {
commandLine './buildAssets.sh'
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn generateAndLinkBundle
}

12
android/app/buildAssets.sh Executable file
View File

@@ -0,0 +1,12 @@
#!/usr/bin/env bash
if [ -d "../../node_modules" ]
then
echo "node_modules already present."
else
echo "node_modules not present, running npm install."
npm install
fi
npm run build
rm -rf src/main/assets
mkdir -p src/main/assets
cp -R ../../dist/* src/main/assets

21
android/app/proguard-rules.pro vendored Normal file
View File

@@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

View File

@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.mozilla.firefoxsend">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing" android:value="false" />
<activity android:name="org.mozilla.firefoxsend.MainActivity" android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
</application>
</manifest>

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View File

@@ -0,0 +1,226 @@
package org.mozilla.firefoxsend
import android.annotation.SuppressLint
import android.content.ComponentName
import android.content.Intent
import android.graphics.Bitmap
import android.net.Uri
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.util.Base64
import android.util.Log
import android.view.View
import android.webkit.*
import im.delight.android.webview.AdvancedWebView
import kotlinx.android.synthetic.main.activity_main.*
import mozilla.components.service.fxa.Config
import mozilla.components.service.fxa.FirefoxAccount
import mozilla.components.service.fxa.FxaResult
import org.json.JSONObject
internal class LoggingWebChromeClient : WebChromeClient() {
override fun onConsoleMessage(cm: ConsoleMessage): Boolean {
Log.d(TAG, String.format("%s @ %d: %s",
cm.message(), cm.lineNumber(), cm.sourceId()))
return true
}
companion object {
private const val TAG = "CONTENT"
}
}
class WebAppInterface(private val mContext: MainActivity) {
@JavascriptInterface
fun beginOAuthFlow() {
mContext.beginOAuthFlow()
}
@JavascriptInterface
fun shareUrl(url: String) {
mContext.shareUrl(url)
}
}
class MainActivity : AppCompatActivity(), AdvancedWebView.Listener {
private var mToShare: String? = null
private var mToCall: String? = null
private var mAccount: FirefoxAccount? = null
@SuppressLint("SetJavaScriptEnabled")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
WebView.setWebContentsDebuggingEnabled(BuildConfig.DEBUG)
webView.apply {
setListener(this@MainActivity, this@MainActivity)
addJavascriptInterface(WebAppInterface(this@MainActivity), JS_INTERFACE_NAME)
setLayerType(View.LAYER_TYPE_HARDWARE, null)
webChromeClient = LoggingWebChromeClient()
settings.apply {
userAgentString = "Send Android"
allowUniversalAccessFromFileURLs = true
javaScriptEnabled = true
}
}
val type = intent.type
if (Intent.ACTION_SEND == intent.action && type != null) {
if (type == "text/plain") {
val sharedText = intent.getStringExtra(Intent.EXTRA_TEXT)
// Log.d(TAG_INTENT, "text/plain $sharedText")
mToShare = "data:text/plain;base64," + Base64.encodeToString(sharedText.toByteArray(), 16).trim()
} else if (type.startsWith("image/")) {
val imageUri = intent.getParcelableExtra(Intent.EXTRA_STREAM) as Uri
// Log.d(TAG_INTENT, "image/ $imageUri")
mToShare = "data:text/plain;base64," + Base64.encodeToString(imageUri.path.toByteArray(), 16).trim()
}
}
webView.loadUrl("file:///android_asset/android.html")
}
fun beginOAuthFlow() {
Config.release().then { value ->
mAccount = FirefoxAccount(value, "20f7931c9054d833", "https://send.firefox.com/fxa/android-redirect.html")
mAccount?.beginOAuthFlow(arrayOf("profile", "https://identity.mozilla.com/apps/send"), true)
?.then { url ->
// Log.d(TAG_CONFIG, "GOT A URL $url")
this@MainActivity.runOnUiThread {
webView.loadUrl(url)
}
FxaResult.fromValue(Unit)
}
// Log.d(TAG_CONFIG, "CREATED FIREFOXACCOUNT")
FxaResult.fromValue(Unit)
}
}
fun shareUrl(url: String) {
val shareIntent = Intent().apply {
action = Intent.ACTION_SEND
type = "text/plain"
putExtra(Intent.EXTRA_TEXT, url)
}
val components = arrayOf(ComponentName(applicationContext, MainActivity::class.java))
val chooser = Intent.createChooser(shareIntent, "")
.putExtra(Intent.EXTRA_EXCLUDE_COMPONENTS, components)
startActivity(chooser)
}
override fun onResume() {
super.onResume()
webView.onResume()
}
override fun onPause() {
webView.onPause()
super.onPause()
}
override fun onDestroy() {
webView.onDestroy()
super.onDestroy()
}
override fun onActivityResult(requestCode: Int, resultCode: Int, intent: Intent?) {
super.onActivityResult(requestCode, resultCode, intent)
webView.onActivityResult(requestCode, resultCode, intent)
}
override fun onBackPressed() {
if (!webView.onBackPressed()) {
return
}
super.onBackPressed()
}
override fun onPageStarted(url: String, favicon: Bitmap?) {
if (url.startsWith("https://send.firefox.com/fxa/android-redirect.html")) {
// We load this here so the user doesn't see the android-redirect.html page
webView.loadUrl("file:///android_asset/android.html")
val uri = Uri.parse(url)
uri.getQueryParameter("code")?.let { code ->
uri.getQueryParameter("state")?.let { state ->
mAccount?.completeOAuthFlow(code, state)?.whenComplete { info ->
mAccount?.getProfile(false)?.then { profile ->
val profileJsonPayload = JSONObject()
.put("accessToken", info.accessToken)
.put("keys", info.keys)
.put("avatar", profile.avatar)
.put("displayName", profile.displayName)
.put("email", profile.email)
.put("uid", profile.uid).toString()
mToCall = "finishLogin($profileJsonPayload)"
this@MainActivity.runOnUiThread {
// Clear the history so that the user can't use the back button to see broken pages
// that were inserted into the history by the login process.
webView.clearHistory()
// We also reload this here because we need to make sure onPageFinished runs after mToCall has been set.
// We can't guarantee that onPageFinished wasn't already called at this point.
webView.loadUrl("file:///android_asset/android.html")
}
FxaResult.fromValue(Unit)
}
}
}
}
}
if (!url.startsWith("file:///android_asset/") && !url.startsWith("https://accounts.firefox.com/")) {
// Don't allow loading anything other than the app in our webview
// It should be possible to do this with shouldOverrideUrlLoading
// but it didn't seem to be working, so this works as a hack.
webView.loadUrl("file:///android_asset/android.html")
Log.d(TAG_MAIN, "BAD URL " + url)
} else {
// Log.d(TAG_MAIN, "onPageStarted " + url)
}
}
override fun onPageFinished(url: String) {
// Log.d(TAG_MAIN, "onPageFinished")
if (mToShare != null) {
// Log.d(TAG_INTENT, mToShare)
webView.postWebMessage(WebMessage(mToShare), Uri.EMPTY)
mToShare = null
}
if (mToCall != null) {
this@MainActivity.runOnUiThread {
webView.evaluateJavascript(mToCall) {
mToCall = null
}
}
}
}
override fun onPageError(errorCode: Int, description: String, failingUrl: String) {
Log.d(TAG_MAIN, "onPageError($errorCode, $description, $failingUrl)")
}
override fun onDownloadRequested(url: String,
suggestedFilename: String,
mimeType: String,
contentLength: Long,
contentDisposition: String,
userAgent: String) {
// Log.d(TAG_MAIN, "onDownloadRequested")
}
override fun onExternalPageRequest(url: String) {
// Log.d(TAG_MAIN, "onExternalPageRequest($url)")
}
companion object {
private const val TAG_MAIN = "MAIN"
private const val TAG_INTENT = "INTENT"
private const val TAG_CONFIG = "CONFIG"
private const val JS_INTERFACE_NAME = "Android"
}
}

View File

@@ -0,0 +1,97 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="92.5"
android:viewportHeight="92.5">
<group android:translateX="27.75"
android:translateY="28.25">
<path
android:pathData="M18.1313,0.0003C8.1363,0.0003 0.0003,7.9743 0.0003,17.7673C0.0003,18.8133 0.8523,19.6643 1.8983,19.6643L16.2333,19.6643L16.2333,29.1093L11.7773,24.6963C11.0413,23.9613 9.8403,23.9613 9.0653,24.6963C8.3293,25.4323 8.3293,26.6323 9.0653,27.4063L16.7753,35.1093C16.8143,35.1483 16.8533,35.1873 16.9303,35.2253L16.9693,35.2253C17.0083,35.2643 17.0463,35.3033 17.0853,35.3033L17.1243,35.3033C17.1633,35.3423 17.2013,35.3423 17.2403,35.3803L17.2793,35.3803C17.3183,35.4193 17.3953,35.4193 17.4343,35.4583C17.4733,35.4963 17.5503,35.4963 17.5893,35.4963C17.6283,35.4963 17.7053,35.5353 17.7443,35.5353L17.7823,35.5353C17.8213,35.5353 17.8603,35.5353 17.9373,35.5743L18.3253,35.5743C18.3643,35.5743 18.4023,35.5743 18.4803,35.5353L18.5193,35.5353C18.5573,35.5353 18.6353,35.4963 18.6743,35.4963C18.7123,35.4963 18.7903,35.4583 18.8293,35.4193C18.8673,35.3803 18.9453,35.3803 18.9843,35.3423C19.0223,35.3033 19.0613,35.3033 19.1003,35.2643L19.1383,35.2643C19.1773,35.2253 19.2163,35.1873 19.2553,35.1873L19.2933,35.1873C19.3323,35.1483 19.3713,35.1093 19.4483,35.0713L27.1583,27.3673C27.8943,26.6323 27.8943,25.4323 27.1583,24.6583C26.4223,23.9223 25.2213,23.9223 24.4463,24.6583L20.0303,29.1093L20.0303,19.7033L34.3643,19.7033C35.4103,19.7033 36.2633,18.8513 36.2633,17.8063C36.2633,7.9743 28.1273,0.0003 18.1313,0.0003ZM3.9133,15.8713C4.8813,9.0963 10.8863,3.8323 18.1313,3.8323C25.3763,3.8323 31.3423,9.0963 32.3113,15.8713L3.9133,15.8713Z"
android:fillType="nonZero">
<aapt:attr name="android:fillColor">
<gradient
android:startY="2.9809632"
android:startX="25.805717"
android:endY="31.687763"
android:endX="8.569217"
android:type="linear">
<item android:offset="0" android:color="#FFFF980E"/>
<item android:offset="0.21" android:color="#FFFF7139"/>
<item android:offset="0.36" android:color="#FFFF5854"/>
<item android:offset="0.46" android:color="#FFFF4F5E"/>
<item android:offset="0.69" android:color="#FFFF3750"/>
<item android:offset="0.86" android:color="#FFF92261"/>
<item android:offset="1" android:color="#FFF5156C"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M18.1313,0.0003C8.1363,0.0003 0.0003,7.9743 0.0003,17.7673C0.0003,18.8133 0.8523,19.6643 1.8983,19.6643L16.2333,19.6643L16.2333,29.1093L11.7773,24.6963C11.0413,23.9613 9.8403,23.9613 9.0653,24.6963C8.3293,25.4323 8.3293,26.6323 9.0653,27.4063L16.7753,35.1093C16.8143,35.1483 16.8533,35.1873 16.9303,35.2253L16.9693,35.2253C17.0083,35.2643 17.0463,35.3033 17.0853,35.3033L17.1243,35.3033C17.1633,35.3423 17.2013,35.3423 17.2403,35.3803L17.2793,35.3803C17.3183,35.4193 17.3953,35.4193 17.4343,35.4583C17.4733,35.4963 17.5503,35.4963 17.5893,35.4963C17.6283,35.4963 17.7053,35.5353 17.7443,35.5353L17.7823,35.5353C17.8213,35.5353 17.8603,35.5353 17.9373,35.5743L18.3253,35.5743C18.3643,35.5743 18.4023,35.5743 18.4803,35.5353L18.5193,35.5353C18.5573,35.5353 18.6353,35.4963 18.6743,35.4963C18.7123,35.4963 18.7903,35.4583 18.8293,35.4193C18.8673,35.3803 18.9453,35.3803 18.9843,35.3423C19.0223,35.3033 19.0613,35.3033 19.1003,35.2643L19.1383,35.2643C19.1773,35.2253 19.2163,35.1873 19.2553,35.1873L19.2933,35.1873C19.3323,35.1483 19.3713,35.1093 19.4483,35.0713L27.1583,27.3673C27.8943,26.6323 27.8943,25.4323 27.1583,24.6583C26.4223,23.9223 25.2213,23.9223 24.4463,24.6583L20.0303,29.1093L20.0303,19.7033L34.3643,19.7033C35.4103,19.7033 36.2633,18.8513 36.2633,17.8063C36.2633,7.9743 28.1273,0.0003 18.1313,0.0003ZM3.9133,15.8713C4.8813,9.0963 10.8863,3.8323 18.1313,3.8323C25.3763,3.8323 31.3423,9.0963 32.3113,15.8713L3.9133,15.8713Z"
android:fillType="nonZero">
<aapt:attr name="android:fillColor">
<gradient
android:startY="2.9809632"
android:startX="25.805717"
android:endY="31.687763"
android:endX="8.569217"
android:type="linear">
<item android:offset="0" android:color="#CCFFF44F"/>
<item android:offset="0.75" android:color="#00FFF44F"/>
<item android:offset="1" android:color="#00FFF44F"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M20.0303,3.9483C26.3833,4.8003 31.4203,9.6773 32.3113,15.8713L23.8653,15.8713C21.7733,15.8713 20.0683,17.5743 20.0683,19.6643L34.3643,19.6643C35.4103,19.6643 36.2633,18.8133 36.2633,17.7673C36.2633,10.9933 31.4593,7.6643 27.3913,5.7673C23.6333,4.0253 20.0303,3.9483 20.0303,3.9483Z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="20.534323"
android:startX="22.366518"
android:endY="7.772023"
android:endX="30.234228"
android:type="linear">
<item android:offset="0" android:color="#FF3A8EE6"/>
<item android:offset="0.24" android:color="#FF5C79F0"/>
<item android:offset="0.63" android:color="#FF9059FF"/>
<item android:offset="1" android:color="#FFC139E6"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M32.2333,15.4453C33.5123,16.4903 34.8293,17.4963 36.0693,18.5803C36.1853,18.3483 36.2633,18.0773 36.2633,17.7673C36.2633,10.9933 31.4593,7.6643 27.3913,5.7673C23.6333,4.0253 20.0303,3.9483 20.0303,3.9483C26.2283,4.7613 31.1873,9.4843 32.2333,15.4453Z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="8.195093"
android:startX="30.235817"
android:endY="12.836453"
android:endX="26.934916"
android:type="linear">
<item android:offset="0" android:color="#7E6E008B"/>
<item android:offset="0.5" android:color="#00C846CB"/>
<item android:offset="1" android:color="#00C846CB"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M32.0013,15.8713L23.8653,15.8713C21.7733,15.8713 20.0683,17.5743 20.0683,19.6643L34.3643,19.6643C34.9453,19.6643 35.4883,19.3933 35.8373,18.9673C34.5583,17.9223 33.2793,16.9163 32.0013,15.8713Z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="18.076923"
android:startX="31.69962"
android:endY="17.594997"
android:endX="23.366179"
android:type="linear">
<item android:offset="0" android:color="#006A2BEA"/>
<item android:offset="0.14" android:color="#006A2BEA"/>
<item android:offset="0.3" android:color="#15662CE6"/>
<item android:offset="0.47" android:color="#2C592FDB"/>
<item android:offset="0.64" android:color="#424534C9"/>
<item android:offset="0.82" android:color="#59283BAF"/>
<item android:offset="0.99" android:color="#7003448D"/>
<item android:offset="1" android:color="#7200458B"/>
</gradient>
</aapt:attr>
</path>
</group>
</vector>

View File

@@ -0,0 +1,97 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="92.5"
android:viewportHeight="92.5">
<group android:translateX="27.75"
android:translateY="28.25">
<path
android:pathData="M18.1313,0.0003C8.1363,0.0003 0.0003,7.9743 0.0003,17.7673C0.0003,18.8133 0.8523,19.6643 1.8983,19.6643L16.2333,19.6643L16.2333,29.1093L11.7773,24.6963C11.0413,23.9613 9.8403,23.9613 9.0653,24.6963C8.3293,25.4323 8.3293,26.6323 9.0653,27.4063L16.7753,35.1093C16.8143,35.1483 16.8533,35.1873 16.9303,35.2253L16.9693,35.2253C17.0083,35.2643 17.0463,35.3033 17.0853,35.3033L17.1243,35.3033C17.1633,35.3423 17.2013,35.3423 17.2403,35.3803L17.2793,35.3803C17.3183,35.4193 17.3953,35.4193 17.4343,35.4583C17.4733,35.4963 17.5503,35.4963 17.5893,35.4963C17.6283,35.4963 17.7053,35.5353 17.7443,35.5353L17.7823,35.5353C17.8213,35.5353 17.8603,35.5353 17.9373,35.5743L18.3253,35.5743C18.3643,35.5743 18.4023,35.5743 18.4803,35.5353L18.5193,35.5353C18.5573,35.5353 18.6353,35.4963 18.6743,35.4963C18.7123,35.4963 18.7903,35.4583 18.8293,35.4193C18.8673,35.3803 18.9453,35.3803 18.9843,35.3423C19.0223,35.3033 19.0613,35.3033 19.1003,35.2643L19.1383,35.2643C19.1773,35.2253 19.2163,35.1873 19.2553,35.1873L19.2933,35.1873C19.3323,35.1483 19.3713,35.1093 19.4483,35.0713L27.1583,27.3673C27.8943,26.6323 27.8943,25.4323 27.1583,24.6583C26.4223,23.9223 25.2213,23.9223 24.4463,24.6583L20.0303,29.1093L20.0303,19.7033L34.3643,19.7033C35.4103,19.7033 36.2633,18.8513 36.2633,17.8063C36.2633,7.9743 28.1273,0.0003 18.1313,0.0003ZM3.9133,15.8713C4.8813,9.0963 10.8863,3.8323 18.1313,3.8323C25.3763,3.8323 31.3423,9.0963 32.3113,15.8713L3.9133,15.8713Z"
android:fillType="nonZero">
<aapt:attr name="android:fillColor">
<gradient
android:startY="2.9809632"
android:startX="25.805717"
android:endY="31.687763"
android:endX="8.569217"
android:type="linear">
<item android:offset="0" android:color="#FFFF980E"/>
<item android:offset="0.21" android:color="#FFFF7139"/>
<item android:offset="0.36" android:color="#FFFF5854"/>
<item android:offset="0.46" android:color="#FFFF4F5E"/>
<item android:offset="0.69" android:color="#FFFF3750"/>
<item android:offset="0.86" android:color="#FFF92261"/>
<item android:offset="1" android:color="#FFF5156C"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M18.1313,0.0003C8.1363,0.0003 0.0003,7.9743 0.0003,17.7673C0.0003,18.8133 0.8523,19.6643 1.8983,19.6643L16.2333,19.6643L16.2333,29.1093L11.7773,24.6963C11.0413,23.9613 9.8403,23.9613 9.0653,24.6963C8.3293,25.4323 8.3293,26.6323 9.0653,27.4063L16.7753,35.1093C16.8143,35.1483 16.8533,35.1873 16.9303,35.2253L16.9693,35.2253C17.0083,35.2643 17.0463,35.3033 17.0853,35.3033L17.1243,35.3033C17.1633,35.3423 17.2013,35.3423 17.2403,35.3803L17.2793,35.3803C17.3183,35.4193 17.3953,35.4193 17.4343,35.4583C17.4733,35.4963 17.5503,35.4963 17.5893,35.4963C17.6283,35.4963 17.7053,35.5353 17.7443,35.5353L17.7823,35.5353C17.8213,35.5353 17.8603,35.5353 17.9373,35.5743L18.3253,35.5743C18.3643,35.5743 18.4023,35.5743 18.4803,35.5353L18.5193,35.5353C18.5573,35.5353 18.6353,35.4963 18.6743,35.4963C18.7123,35.4963 18.7903,35.4583 18.8293,35.4193C18.8673,35.3803 18.9453,35.3803 18.9843,35.3423C19.0223,35.3033 19.0613,35.3033 19.1003,35.2643L19.1383,35.2643C19.1773,35.2253 19.2163,35.1873 19.2553,35.1873L19.2933,35.1873C19.3323,35.1483 19.3713,35.1093 19.4483,35.0713L27.1583,27.3673C27.8943,26.6323 27.8943,25.4323 27.1583,24.6583C26.4223,23.9223 25.2213,23.9223 24.4463,24.6583L20.0303,29.1093L20.0303,19.7033L34.3643,19.7033C35.4103,19.7033 36.2633,18.8513 36.2633,17.8063C36.2633,7.9743 28.1273,0.0003 18.1313,0.0003ZM3.9133,15.8713C4.8813,9.0963 10.8863,3.8323 18.1313,3.8323C25.3763,3.8323 31.3423,9.0963 32.3113,15.8713L3.9133,15.8713Z"
android:fillType="nonZero">
<aapt:attr name="android:fillColor">
<gradient
android:startY="2.9809632"
android:startX="25.805717"
android:endY="31.687763"
android:endX="8.569217"
android:type="linear">
<item android:offset="0" android:color="#CCFFF44F"/>
<item android:offset="0.75" android:color="#00FFF44F"/>
<item android:offset="1" android:color="#00FFF44F"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M20.0303,3.9483C26.3833,4.8003 31.4203,9.6773 32.3113,15.8713L23.8653,15.8713C21.7733,15.8713 20.0683,17.5743 20.0683,19.6643L34.3643,19.6643C35.4103,19.6643 36.2633,18.8133 36.2633,17.7673C36.2633,10.9933 31.4593,7.6643 27.3913,5.7673C23.6333,4.0253 20.0303,3.9483 20.0303,3.9483Z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="20.534323"
android:startX="22.366518"
android:endY="7.772023"
android:endX="30.234228"
android:type="linear">
<item android:offset="0" android:color="#FF3A8EE6"/>
<item android:offset="0.24" android:color="#FF5C79F0"/>
<item android:offset="0.63" android:color="#FF9059FF"/>
<item android:offset="1" android:color="#FFC139E6"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M32.2333,15.4453C33.5123,16.4903 34.8293,17.4963 36.0693,18.5803C36.1853,18.3483 36.2633,18.0773 36.2633,17.7673C36.2633,10.9933 31.4593,7.6643 27.3913,5.7673C23.6333,4.0253 20.0303,3.9483 20.0303,3.9483C26.2283,4.7613 31.1873,9.4843 32.2333,15.4453Z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="8.195093"
android:startX="30.235817"
android:endY="12.836453"
android:endX="26.934916"
android:type="linear">
<item android:offset="0" android:color="#7E6E008B"/>
<item android:offset="0.5" android:color="#00C846CB"/>
<item android:offset="1" android:color="#00C846CB"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M32.0013,15.8713L23.8653,15.8713C21.7733,15.8713 20.0683,17.5743 20.0683,19.6643L34.3643,19.6643C34.9453,19.6643 35.4883,19.3933 35.8373,18.9673C34.5583,17.9223 33.2793,16.9163 32.0013,15.8713Z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="18.076923"
android:startX="31.69962"
android:endY="17.594997"
android:endX="23.366179"
android:type="linear">
<item android:offset="0" android:color="#006A2BEA"/>
<item android:offset="0.14" android:color="#006A2BEA"/>
<item android:offset="0.3" android:color="#15662CE6"/>
<item android:offset="0.47" android:color="#2C592FDB"/>
<item android:offset="0.64" android:color="#424534C9"/>
<item android:offset="0.82" android:color="#59283BAF"/>
<item android:offset="0.99" android:color="#7003448D"/>
<item android:offset="1" android:color="#7200458B"/>
</gradient>
</aapt:attr>
</path>
</group>
</vector>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<im.delight.android.webview.AdvancedWebView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" />

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
</resources>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#220033</color>
</resources>

View File

@@ -0,0 +1,3 @@
<resources>
<string name="app_name">Send</string>
</resources>

View File

@@ -0,0 +1,11 @@
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>

27
android/build.gradle Normal file
View File

@@ -0,0 +1,27 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.3.21'
ext.android_components_version = '0.26.0'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.21"
}
}
allprojects {
repositories {
google()
maven { url "https://maven.mozilla.org/maven2" }
jcenter()
maven { url "https://jitpack.io" }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}

13
android/gradle.properties Normal file
View File

@@ -0,0 +1,13 @@
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx1536m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true

Binary file not shown.

View File

@@ -0,0 +1,6 @@
#Tue Feb 19 08:34:25 EST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip

172
android/gradlew vendored Executable file
View File

@@ -0,0 +1,172 @@
#!/usr/bin/env sh
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=$(save "$@")
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi
exec "$JAVACMD" "$@"

84
android/gradlew.bat vendored Normal file
View File

@@ -0,0 +1,84 @@
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

View File

@@ -0,0 +1,6 @@
env:
browser: true
parserOptions:
sourceType: module

12
android/pages/error.js Normal file
View File

@@ -0,0 +1,12 @@
const html = require('choo/html');
export default function error(_state, _emit) {
return html`
<body>
<div id="white">
<h1>Error</h1>
<p>Sorry, an error occurred.</p>
</div>
</body>
`;
}

69
android/pages/home.js Normal file
View File

@@ -0,0 +1,69 @@
const html = require('choo/html');
const { list } = require('../../app/utils');
const archiveTile = require('../../app/ui/archiveTile');
const modal = require('../../app/ui/modal');
const intro = require('../../app/ui/intro');
const assets = require('../../common/assets');
module.exports = function(state, emit) {
function onchange(event) {
event.preventDefault();
const newFiles = Array.from(event.target.files);
emit('addFiles', { files: newFiles });
}
function onclick() {
document.getElementById('file-upload').click();
}
const archives = state.storage.files
.filter(archive => !archive.expired)
.map(archive => archiveTile(state, emit, archive))
.reverse();
let content = '';
let button = html`
<div
class="bg-blue-50 rounded-full m-4 flex items-center justify-center shadow-lg"
style="width: 56px; height: 56px"
onclick="${onclick}"
>
<img src="${assets.get('add.svg')}" />
</div>
`;
if (state.uploading) {
content = archiveTile.uploading(state, emit);
button = '';
} else if (state.archive.numFiles > 0) {
content = archiveTile.wip(state, emit);
button = '';
} else {
content =
archives.length < 1
? intro(state)
: list(archives, 'h-full overflow-y-auto w-full', 'mb-3 w-full');
}
return html`
<main class="main">
${state.modal && modal(state, emit)}
<section
class="h-full w-full p-6 z-10 overflow-hidden md:flex md:flex-row md:rounded-lg md:shadow-big"
>
${content}
</section>
<div class="fixed right-0 bottom-0 z-20">
${button}
<input
id="file-upload"
class="hidden"
type="file"
multiple
onchange="${onchange}"
onclick="${e => e.stopPropagation()}"
/>
</div>
</main>
`;
};

View File

@@ -0,0 +1,34 @@
const html = require('choo/html');
import { setFileProtocolWssUrl, getFileProtocolWssUrl } from '../../app/api';
export default function preferences(state, emit) {
const wssURL = getFileProtocolWssUrl();
function updateWssUrl(event) {
state.wssURL = event.target.value;
setFileProtocolWssUrl(state.wssURL);
emit('render');
}
function clickDone(event) {
event.preventDefault();
emit('pushState', '/');
}
return html`
<body>
<div id="white">
<div id="preferences">
<a onclick="${clickDone}" href="#"> done </a>
<dl>
<dt>wss url:</dt>
<dd>
<input type="text" onchange="${updateWssUrl}" value="${wssURL}" />
</dd>
</dl>
</div>
</div>
</body>
`;
}

51
android/pages/share.js Normal file
View File

@@ -0,0 +1,51 @@
const html = require('choo/html');
export default function uploadComplete(state, emit) {
const file = state.storage.files[state.storage.files.length - 1];
function onclick(e) {
e.preventDefault();
input.select();
document.execCommand('copy');
input.selectionEnd = input.selectionStart;
copyText.textContent = 'Copied!';
setTimeout(function() {
copyText.textContent = 'Copy link';
}, 2000);
}
function uploadFile(event) {
event.preventDefault();
const target = event.target;
const file = target.files[0];
if (file.size === 0) {
return;
}
emit('pushState', '/upload');
emit('addFiles', { files: [file] });
emit('upload', {});
}
const input = html`
<input id="url" value="${file.url}" readonly="true" />
`;
const copyText = html`
<span>Copy link</span>
`;
return html`<body>
<div id="white">
<div class="card">
<div>The card contents will be here.</div>
<div>Expires after: <span class="expires-after">exp</span></div>
${input}
<div id="copy-link" onclick=${onclick}>
<img id="copy-image" src=${state.getAsset('copy-link.png')} />
${copyText}
</div>
<label id="label" for="input">
<img src=${state.getAsset('cloud-upload.png')} />
</label>
<input id="input" name="input" type="file" onchange=${uploadFile} />
</div>
</body>`;
}

26
android/pages/upload.js Normal file
View File

@@ -0,0 +1,26 @@
const html = require('choo/html');
export default function progressBar(state, emit) {
let percent = 0;
if (state.transfer && state.transfer.progress) {
percent = Math.floor(state.transfer.progressRatio * 100);
}
function onclick(e) {
e.preventDefault();
if (state.uploading) {
emit('cancel');
}
emit('pushState', '/');
}
return html`
<body>
<div id="white">
<div class="card">
<div>${percent}%</div>
<span class="progress" style="width: ${percent}%">.</span>
<div class="cancel" onclick="${onclick}">CANCEL</div>
</div>
</div>
</body>
`;
}

1
android/settings.gradle Normal file
View File

@@ -0,0 +1 @@
include ':app'

20
android/stores/intents.js Normal file
View File

@@ -0,0 +1,20 @@
/* eslint-disable no-console */
export default function intentHandler(state, emitter) {
window.addEventListener(
'message',
event => {
if (typeof event.data !== 'string' || !event.data.startsWith('data:')) {
return;
}
fetch(event.data)
.then(res => res.blob())
.then(blob => {
emitter.emit('addFiles', { files: [blob] });
emitter.emit('upload', {});
})
.catch(e => console.error('ERROR ' + e + ' ' + e.stack));
},
false
);
}

41
android/stores/state.js Normal file
View File

@@ -0,0 +1,41 @@
/* eslint-disable no-console */
import User from '../user';
import storage from '../../app/storage';
export default function initialState(state, emitter) {
const files = [];
Object.assign(state, {
prefix: '/android_asset',
user: new User(storage),
getAsset(name) {
return `${state.prefix}/${name}`;
},
sentry: {
captureException: e => {
console.error('ERROR ' + e + ' ' + e.stack);
}
},
storage: {
files,
remove: function(fileId) {
console.log('REMOVE FILEID', fileId);
},
writeFile: function(file) {
console.log('WRITEFILE', file);
},
addFile: function(file) {
console.log('addfile' + JSON.stringify(file));
files.push(file);
emitter.emit('pushState', `/share/${file.id}`);
},
totalUploads: 0
},
transfer: null,
uploading: false,
settingPassword: false,
passwordSetError: null,
route: '/'
});
}

30
android/user.js Normal file
View File

@@ -0,0 +1,30 @@
/* global Android */
import User from '../app/user';
import { deriveFileListKey } from '../app/fxa';
export default class AndroidUser extends User {
constructor(storage, limits) {
super(storage, limits);
}
async login() {
Android.beginOAuthFlow();
}
startAuthFlow() {
return Promise.resolve();
}
async finishLogin(accountInfo) {
const jwks = JSON.parse(accountInfo.keys);
const ikm = jwks['https://identity.mozilla.com/apps/send'].k;
const profile = {
displayName: accountInfo.displayName,
email: accountInfo.email,
avatar: accountInfo.avatar,
access_token: accountInfo.accessToken
};
profile.fileListKey = await deriveFileListKey(ikm);
this.info = profile;
}
}

View File

@@ -1,16 +1,58 @@
import { arrayToB64, b64ToArray } from './utils';
import { arrayToB64, b64ToArray, delay } from './utils';
import { ECE_RECORD_SIZE } from './ece';
function post(obj) {
let fileProtocolWssUrl = null;
try {
fileProtocolWssUrl = localStorage.getItem('wssURL');
} catch (e) {
// NOOP
}
if (!fileProtocolWssUrl) {
fileProtocolWssUrl = 'wss://send.firefox.com/api/ws';
}
export class ConnectionError extends Error {
constructor(cancelled, duration, size) {
super(cancelled ? '0' : 'connection closed');
this.cancelled = cancelled;
this.duration = duration;
this.size = size;
}
}
export function setFileProtocolWssUrl(url) {
localStorage && localStorage.setItem('wssURL', url);
fileProtocolWssUrl = url;
}
export function getFileProtocolWssUrl() {
return fileProtocolWssUrl;
}
let apiUrlPrefix = '';
export function getApiUrl(path) {
return apiUrlPrefix + path;
}
export function setApiUrlPrefix(prefix) {
apiUrlPrefix = prefix;
}
function post(obj, bearerToken) {
const h = {
'Content-Type': 'application/json'
};
if (bearerToken) {
h['Authentication'] = `Bearer ${bearerToken}`;
}
return {
method: 'POST',
headers: new Headers({
'Content-Type': 'application/json'
}),
headers: new Headers(h),
body: JSON.stringify(obj)
};
}
function parseNonce(header) {
export function parseNonce(header) {
header = header || '';
return header.split(' ')[1];
}
@@ -19,7 +61,10 @@ async function fetchWithAuth(url, params, keychain) {
const result = {};
params = params || {};
const h = await keychain.authHeader();
params.headers = new Headers({ Authorization: h });
params.headers = new Headers({
Authorization: h,
'Content-Type': 'application/json'
});
const response = await fetch(url, params);
result.response = response;
result.ok = response.ok;
@@ -38,33 +83,44 @@ async function fetchWithAuthAndRetry(url, params, keychain) {
}
export async function del(id, owner_token) {
const response = await fetch(`/api/delete/${id}`, post({ owner_token }));
const response = await fetch(
getApiUrl(`/api/delete/${id}`),
post({ owner_token })
);
return response.ok;
}
export async function setParams(id, owner_token, params) {
export async function setParams(id, owner_token, bearerToken, params) {
const response = await fetch(
`/api/params/${id}`,
post({
owner_token,
dlimit: params.dlimit
})
getApiUrl(`/api/params/${id}`),
post(
{
owner_token,
dlimit: params.dlimit
},
bearerToken
)
);
return response.ok;
}
export async function fileInfo(id, owner_token) {
const response = await fetch(`/api/info/${id}`, post({ owner_token }));
const response = await fetch(
getApiUrl(`/api/info/${id}`),
post({ owner_token })
);
if (response.ok) {
const obj = await response.json();
return obj;
}
throw new Error(response.status);
}
export async function metadata(id, keychain) {
const result = await fetchWithAuthAndRetry(
`/api/metadata/${id}`,
getApiUrl(`/api/metadata/${id}`),
{ method: 'GET' },
keychain
);
@@ -72,11 +128,12 @@ export async function metadata(id, keychain) {
const data = await result.response.json();
const meta = await keychain.decryptMetadata(b64ToArray(data.metadata));
return {
size: data.size,
size: meta.size,
ttl: data.ttl,
iv: meta.iv,
name: meta.name,
type: meta.type
type: meta.type,
manifest: meta.manifest,
flagged: data.flagged
};
}
throw new Error(result.response.status);
@@ -85,80 +142,212 @@ export async function metadata(id, keychain) {
export async function setPassword(id, owner_token, keychain) {
const auth = await keychain.authKeyB64();
const response = await fetch(
`/api/password/${id}`,
getApiUrl(`/api/password/${id}`),
post({ owner_token, auth })
);
return response.ok;
}
export function uploadFile(
function asyncInitWebSocket(server) {
return new Promise((resolve, reject) => {
try {
const ws = new WebSocket(server);
ws.addEventListener('open', () => resolve(ws), { once: true });
} catch (e) {
reject(new ConnectionError(false));
}
});
}
function listenForResponse(ws, canceller) {
return new Promise((resolve, reject) => {
function handleClose(event) {
// a 'close' event before a 'message' event means the request failed
ws.removeEventListener('message', handleMessage);
reject(new ConnectionError(canceller.cancelled));
}
function handleMessage(msg) {
ws.removeEventListener('close', handleClose);
try {
const response = JSON.parse(msg.data);
if (response.error) {
throw new Error(response.error);
} else {
resolve(response);
}
} catch (e) {
reject(e);
}
}
ws.addEventListener('message', handleMessage, { once: true });
ws.addEventListener('close', handleClose, { once: true });
});
}
async function upload(
stream,
metadata,
verifierB64,
timeLimit,
dlimit,
bearerToken,
onprogress,
canceller
) {
let size = 0;
const start = Date.now();
const host = window.location.hostname;
const port = window.location.port;
const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
const endpoint =
window.location.protocol === 'file:'
? fileProtocolWssUrl
: `${protocol}//${host}${port ? ':' : ''}${port}/api/ws`;
const ws = await asyncInitWebSocket(endpoint);
try {
const metadataHeader = arrayToB64(new Uint8Array(metadata));
const fileMeta = {
fileMetadata: metadataHeader,
authorization: `send-v1 ${verifierB64}`,
bearer: bearerToken,
timeLimit,
dlimit
};
const uploadInfoResponse = listenForResponse(ws, canceller);
ws.send(JSON.stringify(fileMeta));
const uploadInfo = await uploadInfoResponse;
const completedResponse = listenForResponse(ws, canceller);
const reader = stream.getReader();
let state = await reader.read();
while (!state.done) {
if (canceller.cancelled) {
ws.close();
}
if (ws.readyState !== WebSocket.OPEN) {
break;
}
const buf = state.value;
ws.send(buf);
onprogress(size);
size += buf.length;
state = await reader.read();
while (
ws.bufferedAmount > ECE_RECORD_SIZE * 2 &&
ws.readyState === WebSocket.OPEN &&
!canceller.cancelled
) {
await delay();
}
}
if (ws.readyState === WebSocket.OPEN) {
ws.send(new Uint8Array([0])); //EOF
}
await completedResponse;
uploadInfo.duration = Date.now() - start;
return uploadInfo;
} catch (e) {
e.size = size;
e.duration = Date.now() - start;
throw e;
} finally {
if (![WebSocket.CLOSED, WebSocket.CLOSING].includes(ws.readyState)) {
ws.close();
}
}
}
export function uploadWs(
encrypted,
metadata,
verifierB64,
keychain,
timeLimit,
dlimit,
bearerToken,
onprogress
) {
const xhr = new XMLHttpRequest();
const upload = {
const canceller = { cancelled: false };
return {
cancel: function() {
xhr.abort();
canceller.cancelled = true;
},
result: new Promise(function(resolve, reject) {
xhr.addEventListener('loadend', function() {
const authHeader = xhr.getResponseHeader('WWW-Authenticate');
if (authHeader) {
keychain.nonce = parseNonce(authHeader);
}
if (xhr.status === 200) {
const responseObj = JSON.parse(xhr.responseText);
return resolve({
url: responseObj.url,
id: responseObj.id,
ownerToken: responseObj.owner
});
}
reject(new Error(xhr.status));
});
})
result: upload(
encrypted,
metadata,
verifierB64,
timeLimit,
dlimit,
bearerToken,
onprogress,
canceller
)
};
const dataView = new DataView(encrypted);
const blob = new Blob([dataView], { type: 'application/octet-stream' });
const fd = new FormData();
fd.append('data', blob);
xhr.upload.addEventListener('progress', function(event) {
if (event.lengthComputable) {
onprogress([event.loaded, event.total]);
}
});
xhr.open('post', '/api/upload', true);
xhr.setRequestHeader('X-File-Metadata', arrayToB64(new Uint8Array(metadata)));
xhr.setRequestHeader('Authorization', `send-v1 ${verifierB64}`);
xhr.send(fd);
return upload;
}
function download(id, keychain, onprogress, canceller) {
////////////////////////
async function _downloadStream(id, dlToken, signal) {
const response = await fetch(getApiUrl(`/api/download/${id}`), {
signal: signal,
method: 'GET',
headers: { Authorization: `Bearer ${dlToken}` }
});
if (response.status !== 200) {
throw new Error(response.status);
}
return response.body;
}
async function tryDownloadStream(id, dlToken, signal, tries = 2) {
try {
const result = await _downloadStream(id, dlToken, signal);
return result;
} catch (e) {
if (e.message === '401' && --tries > 0) {
return tryDownloadStream(id, dlToken, signal, tries);
}
if (e.name === 'AbortError') {
throw new Error('0');
}
throw e;
}
}
export function downloadStream(id, dlToken) {
const controller = new AbortController();
function cancel() {
controller.abort();
}
return {
cancel,
result: tryDownloadStream(id, dlToken, controller.signal)
};
}
//////////////////
async function download(id, dlToken, onprogress, canceller) {
const xhr = new XMLHttpRequest();
canceller.oncancel = function() {
xhr.abort();
};
return new Promise(async function(resolve, reject) {
return new Promise(function(resolve, reject) {
xhr.addEventListener('loadend', function() {
canceller.oncancel = function() {};
const authHeader = xhr.getResponseHeader('WWW-Authenticate');
if (authHeader) {
keychain.nonce = parseNonce(authHeader);
}
if (xhr.status !== 200) {
return reject(new Error(xhr.status));
}
const blob = new Blob([xhr.response]);
const fileReader = new FileReader();
fileReader.readAsArrayBuffer(blob);
fileReader.onload = function() {
resolve(this.result);
};
resolve(blob);
});
xhr.addEventListener('progress', function(event) {
@@ -166,28 +355,27 @@ function download(id, keychain, onprogress, canceller) {
onprogress(event.loaded);
}
});
const auth = await keychain.authHeader();
xhr.open('get', `/api/download/${id}`);
xhr.setRequestHeader('Authorization', auth);
xhr.open('get', getApiUrl(`/api/download/blob/${id}`));
xhr.setRequestHeader('Authorization', `Bearer ${dlToken}`);
xhr.responseType = 'blob';
xhr.send();
onprogress(0);
});
}
async function tryDownload(id, keychain, onprogress, canceller, tries = 1) {
async function tryDownload(id, dlToken, onprogress, canceller, tries = 2) {
try {
const result = await download(id, keychain, onprogress, canceller);
const result = await download(id, dlToken, onprogress, canceller);
return result;
} catch (e) {
if (e.message === '401' && --tries > 0) {
return tryDownload(id, keychain, onprogress, canceller, tries);
return tryDownload(id, dlToken, onprogress, canceller, tries);
}
throw e;
}
}
export function downloadFile(id, keychain, onprogress) {
export function downloadFile(id, dlToken, onprogress) {
const canceller = {
oncancel: function() {} // download() sets this
};
@@ -196,6 +384,89 @@ export function downloadFile(id, keychain, onprogress) {
}
return {
cancel,
result: tryDownload(id, keychain, onprogress, canceller, 2)
result: tryDownload(id, dlToken, onprogress, canceller)
};
}
export async function getFileList(bearerToken, kid) {
const headers = new Headers({ Authorization: `Bearer ${bearerToken}` });
const response = await fetch(getApiUrl(`/api/filelist/${kid}`), { headers });
if (response.ok) {
const encrypted = await response.blob();
return encrypted;
}
throw new Error(response.status);
}
export async function setFileList(bearerToken, kid, data) {
const headers = new Headers({ Authorization: `Bearer ${bearerToken}` });
const response = await fetch(getApiUrl(`/api/filelist/${kid}`), {
headers,
method: 'POST',
body: data
});
return response.ok;
}
export function sendMetrics(blob) {
if (!navigator.sendBeacon) {
return;
}
try {
navigator.sendBeacon(getApiUrl('/api/metrics'), blob);
} catch (e) {
console.error(e);
}
}
export async function getConstants() {
const response = await fetch(getApiUrl('/config'));
if (response.ok) {
const obj = await response.json();
return obj;
}
throw new Error(response.status);
}
export async function reportLink(id, keychain, reason) {
const result = await fetchWithAuthAndRetry(
getApiUrl(`/api/report/${id}`),
{
method: 'POST',
body: JSON.stringify({ reason })
},
keychain
);
if (result.ok) {
return;
}
throw new Error(result.response.status);
}
export async function getDownloadToken(id, keychain) {
const result = await fetchWithAuthAndRetry(
getApiUrl(`/api/download/token/${id}`),
{
method: 'GET'
},
keychain
);
if (result.ok) {
return (await result.response.json()).token;
}
throw new Error(result.response.status);
}
export async function downloadDone(id, dlToken) {
const headers = new Headers({ Authorization: `Bearer ${dlToken}` });
const response = await fetch(getApiUrl(`/api/download/done/${id}`), {
headers,
method: 'POST'
});
return response.ok;
}

83
app/archive.js Normal file
View File

@@ -0,0 +1,83 @@
import { blobStream, concatStream } from './streams';
function isDupe(newFile, array) {
for (const file of array) {
if (
newFile.name === file.name &&
newFile.size === file.size &&
newFile.lastModified === file.lastModified
) {
return true;
}
}
return false;
}
export default class Archive {
constructor(files = [], defaultTimeLimit = 86400) {
this.files = Array.from(files);
this.defaultTimeLimit = defaultTimeLimit;
this.timeLimit = defaultTimeLimit;
this.dlimit = 1;
this.password = null;
}
get name() {
return this.files.length > 1 ? 'Send-Archive.zip' : this.files[0].name;
}
get type() {
return this.files.length > 1 ? 'send-archive' : this.files[0].type;
}
get size() {
return this.files.reduce((total, file) => total + file.size, 0);
}
get numFiles() {
return this.files.length;
}
get manifest() {
return {
files: this.files.map(file => ({
name: file.name,
size: file.size,
type: file.type
}))
};
}
get stream() {
return concatStream(this.files.map(file => blobStream(file)));
}
addFiles(files, maxSize, maxFiles) {
if (this.files.length + files.length > maxFiles) {
throw new Error('tooManyFiles');
}
const newFiles = files.filter(
file => file.size > 0 && !isDupe(file, this.files)
);
const newSize = newFiles.reduce((total, file) => total + file.size, 0);
if (this.size + newSize > maxSize) {
throw new Error('fileTooBig');
}
this.files = this.files.concat(newFiles);
return true;
}
remove(file) {
const index = this.files.indexOf(file);
if (index > -1) {
this.files.splice(index, 1);
}
}
clear() {
this.files = [];
this.dlimit = 1;
this.timeLimit = this.defaultTimeLimit;
this.password = null;
}
}

View File

@@ -1,268 +0,0 @@
:root {
--pageBGColor: #fff;
--primaryControlBGColor: #0297f8;
--primaryControlFGColor: #fff;
--primaryControlHoverColor: #0287e8;
--inputTextColor: #737373;
--errorColor: #d70022;
--linkColor: #0094fb;
--textColor: #0c0c0d;
--lightTextColor: #737373;
--successControlBGColor: #05a700;
--successControlFGColor: #fff;
}
html {
background: url('../assets/send_bg.svg');
font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'segoe ui',
'helvetica neue', helvetica, ubuntu, roboto, noto, arial, sans-serif;
font-weight: 200;
background-size: 110%;
background-repeat: no-repeat;
background-position: center top;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'segoe ui',
'helvetica neue', helvetica, ubuntu, roboto, noto, arial, sans-serif;
display: flex;
flex-direction: column;
margin: 0;
min-height: 100vh;
}
input,
select,
textarea,
button {
font-family: inherit;
margin: 0;
}
a {
text-decoration: none;
}
.main {
flex: auto;
max-width: 650px;
margin: 0 auto;
padding: 0 20px;
box-sizing: border-box;
width: 96%;
}
.noscript {
text-align: center;
border: 3px solid var(--errorColor);
border-radius: 6px;
}
.btn {
font-size: 15px;
font-weight: 500;
color: var(--primaryControlFGColor);
cursor: pointer;
text-align: center;
background: var(--primaryControlBGColor);
border: 1px solid var(--primaryControlBGColor);
border-radius: 5px;
}
.btn:hover {
background-color: var(--primaryControlHoverColor);
}
.btn--cancel {
color: var(--errorColor);
background: var(--pageBGColor);
font-size: 15px;
border: 0;
cursor: pointer;
text-decoration: underline;
}
.btn--cancel:disabled {
text-decoration: none;
cursor: auto;
}
.btn--cancel:hover {
background-color: var(--pageBGColor);
}
.input {
flex: 2 0 auto;
border: 1px solid var(--primaryControlBGColor);
border-radius: 6px 0 0 6px;
font-size: 20px;
color: var(--inputTextColor);
font-family: 'SF Pro Text', sans-serif;
letter-spacing: 0;
line-height: 23px;
font-weight: 300;
height: 46px;
padding-left: 10px;
padding-right: 10px;
}
.input--error {
border-color: var(--errorColor);
}
.input--noBtn {
border-radius: 6px;
}
.inputBtn {
flex: auto;
background: var(--primaryControlBGColor);
border-radius: 0 6px 6px 0;
border: 1px solid var(--primaryControlBGColor);
color: var(--primaryControlFGColor);
cursor: pointer;
/* Force flat button look */
/* stylelint-disable-next-line plugin/no-unsupported-browser-features */
appearance: none;
font-size: 15px;
padding-bottom: 3px;
padding-left: 10px;
padding-right: 10px;
white-space: nowrap;
}
.inputBtn:disabled {
cursor: auto;
}
.inputBtn:hover {
background-color: var(--primaryControlHoverColor);
}
.inputBtn--hidden {
display: none;
}
.cursor--pointer {
cursor: pointer;
}
.link {
color: var(--linkColor);
text-decoration: none;
}
.link:focus,
.link:active,
.link:hover {
color: var(--primaryControlHoverColor);
}
.link--action {
text-decoration: underline;
text-align: center;
}
.page {
margin: 0 auto 30px;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
text-align: center;
}
.progressSection {
margin: 0 auto;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
text-align: center;
font-size: 15px;
}
.progressSection__text {
color: var(--lightTextColor);
letter-spacing: -0.4px;
margin-top: 24px;
margin-bottom: 74px;
}
.effect--fadeOut {
opacity: 0;
animation: fadeout 200ms linear;
}
@keyframes fadeout {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
.effect--fadeIn {
opacity: 1;
animation: fadein 200ms linear;
}
@keyframes fadein {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
.error {
color: var(--errorColor);
}
.title {
font-size: 33px;
line-height: 40px;
margin: 20px auto;
text-align: center;
max-width: 520px;
font-family: 'SF Pro Text', sans-serif;
word-wrap: break-word;
}
.description {
font-size: 15px;
line-height: 23px;
max-width: 630px;
text-align: center;
margin: 0 auto 60px;
color: var(--textColor);
width: 92%;
}
@media (max-device-width: 768px), (max-width: 768px) {
.description {
margin: 0 auto 25px;
}
}
@media (max-device-width: 520px), (max-width: 520px) {
.input {
font-size: 22px;
padding: 10px 10px;
border-radius: 6px 6px 0 0;
}
.inputBtn {
border-radius: 0 0 6px 6px;
flex: 0 1 65px;
}
.input--noBtn {
border-radius: 6px;
}
}

116
app/capabilities.js Normal file
View File

@@ -0,0 +1,116 @@
/* global AUTH_CONFIG */
import { browserName, locale } from './utils';
async function checkCrypto() {
try {
const key = await crypto.subtle.generateKey(
{
name: 'AES-GCM',
length: 128
},
true,
['encrypt', 'decrypt']
);
await crypto.subtle.exportKey('raw', key);
await crypto.subtle.encrypt(
{
name: 'AES-GCM',
iv: crypto.getRandomValues(new Uint8Array(12)),
tagLength: 128
},
key,
new ArrayBuffer(8)
);
await crypto.subtle.importKey(
'raw',
crypto.getRandomValues(new Uint8Array(16)),
'PBKDF2',
false,
['deriveKey']
);
await crypto.subtle.importKey(
'raw',
crypto.getRandomValues(new Uint8Array(16)),
'HKDF',
false,
['deriveKey']
);
await crypto.subtle.generateKey(
{
name: 'ECDH',
namedCurve: 'P-256'
},
true,
['deriveBits']
);
return true;
} catch (err) {
try {
window.asmCrypto = await import('asmcrypto.js');
await import('@dannycoates/webcrypto-liner/build/shim');
return true;
} catch (e) {
return false;
}
}
}
function checkStreams() {
try {
new ReadableStream({
pull() {}
});
return true;
} catch (e) {
return false;
}
}
async function polyfillStreams() {
try {
await import('@mattiasbuelens/web-streams-polyfill');
return true;
} catch (e) {
return false;
}
}
export default async function getCapabilities() {
const browser = browserName();
const isMobile = /mobi|android/i.test(navigator.userAgent);
const serviceWorker = 'serviceWorker' in navigator && browser !== 'edge';
let crypto = await checkCrypto();
const nativeStreams = checkStreams();
let polyStreams = false;
if (!nativeStreams) {
polyStreams = await polyfillStreams();
}
let account = typeof AUTH_CONFIG !== 'undefined';
try {
account = account && !!localStorage;
} catch (e) {
account = false;
}
const share =
isMobile &&
typeof navigator.share === 'function' &&
locale().startsWith('en'); // en until strings merge
const standalone =
window.matchMedia('(display-mode: standalone)').matches ||
navigator.standalone;
const mobileFirefox = browser === 'firefox' && isMobile;
return {
account,
crypto,
serviceWorker,
streamUpload: nativeStreams || polyStreams,
streamDownload:
nativeStreams && serviceWorker && browser !== 'safari' && !mobileFirefox,
multifile: nativeStreams || polyStreams,
share,
standalone
};
}

352
app/controller.js Normal file
View File

@@ -0,0 +1,352 @@
import FileSender from './fileSender';
import FileReceiver from './fileReceiver';
import { copyToClipboard, delay, openLinksInNewTab, percent } from './utils';
import * as metrics from './metrics';
import { bytes, locale } from './utils';
import okDialog from './ui/okDialog';
import copyDialog from './ui/copyDialog';
import shareDialog from './ui/shareDialog';
import signupDialog from './ui/signupDialog';
import surveyDialog from './ui/surveyDialog';
export default function(state, emitter) {
let lastRender = 0;
let updateTitle = false;
function render() {
emitter.emit('render');
}
async function checkFiles() {
const changes = await state.user.syncFileList();
const rerender = changes.incoming || changes.downloadCount;
if (rerender) {
render();
}
}
function updateProgress() {
if (updateTitle) {
emitter.emit('DOMTitleChange', percent(state.transfer.progressRatio));
}
render();
}
emitter.on('DOMContentLoaded', () => {
document.addEventListener('blur', () => (updateTitle = true));
document.addEventListener('focus', () => {
updateTitle = false;
emitter.emit('DOMTitleChange', 'Firefox Send');
});
checkFiles();
});
emitter.on('render', () => {
lastRender = Date.now();
});
emitter.on('login', email => {
state.user.login(email);
});
emitter.on('logout', async () => {
await state.user.logout();
metrics.loggedOut({ trigger: 'button' });
emitter.emit('pushState', '/');
});
emitter.on('removeUpload', file => {
state.archive.remove(file);
if (state.archive.numFiles === 0) {
state.archive.clear();
}
render();
});
emitter.on('delete', async ownedFile => {
try {
metrics.deletedUpload({
size: ownedFile.size,
time: ownedFile.time,
speed: ownedFile.speed,
type: ownedFile.type,
ttl: ownedFile.expiresAt - Date.now(),
location
});
state.storage.remove(ownedFile.id);
await ownedFile.del();
} catch (e) {
state.sentry.captureException(e);
}
render();
});
emitter.on('cancel', () => {
state.transfer.cancel();
});
emitter.on('addFiles', async ({ files }) => {
if (files.length < 1) {
return;
}
const maxSize = state.user.maxSize;
try {
state.archive.addFiles(
files,
maxSize,
state.LIMITS.MAX_FILES_PER_ARCHIVE
);
} catch (e) {
if (e.message === 'fileTooBig' && maxSize < state.LIMITS.MAX_FILE_SIZE) {
return emitter.emit('signup-cta', 'size');
}
state.modal = okDialog(
state.translate(e.message, {
size: bytes(maxSize),
count: state.LIMITS.MAX_FILES_PER_ARCHIVE
})
);
}
render();
});
emitter.on('signup-cta', source => {
const query = state.query;
state.user.startAuthFlow(source, {
campaign: query.utm_campaign,
content: query.utm_content,
medium: query.utm_medium,
source: query.utm_source,
term: query.utm_term
});
state.modal = signupDialog(source);
render();
});
emitter.on('authenticate', async (code, oauthState) => {
try {
await state.user.finishLogin(code, oauthState);
await state.user.syncFileList();
emitter.emit('replaceState', '/');
} catch (e) {
emitter.emit('replaceState', '/error');
setTimeout(render);
}
});
emitter.on('upload', async () => {
if (state.storage.files.length >= state.LIMITS.MAX_ARCHIVES_PER_USER) {
state.modal = okDialog(
state.translate('tooManyArchives', {
count: state.LIMITS.MAX_ARCHIVES_PER_USER
})
);
return render();
}
const archive = state.archive;
const sender = new FileSender();
sender.on('progress', updateProgress);
sender.on('encrypting', render);
sender.on('complete', render);
state.transfer = sender;
state.uploading = true;
render();
const links = openLinksInNewTab();
await delay(200);
const start = Date.now();
try {
const ownedFile = await sender.upload(archive, state.user.bearerToken);
state.storage.totalUploads += 1;
const duration = Date.now() - start;
metrics.completedUpload(archive, duration);
state.storage.addFile(ownedFile);
// TODO integrate password into /upload request
if (archive.password) {
emitter.emit('password', {
password: archive.password,
file: ownedFile
});
}
state.modal = state.capabilities.share
? shareDialog(ownedFile.name, ownedFile.url)
: copyDialog(ownedFile.name, ownedFile.url);
} catch (err) {
if (err.message === '0') {
//cancelled. do nothing
metrics.cancelledUpload(archive, err.duration);
render();
} else if (err.message === '401') {
const refreshed = await state.user.refresh();
if (refreshed) {
return emitter.emit('upload');
}
emitter.emit('pushState', '/error');
} else {
// eslint-disable-next-line no-console
console.error(err);
state.sentry.withScope(scope => {
scope.setExtra('duration', err.duration);
scope.setExtra('size', err.size);
state.sentry.captureException(err);
});
metrics.stoppedUpload(archive, err.duration);
emitter.emit('pushState', '/error');
}
} finally {
openLinksInNewTab(links, false);
archive.clear();
state.uploading = false;
state.transfer = null;
await state.user.syncFileList();
render();
}
});
emitter.on('password', async ({ password, file }) => {
try {
state.settingPassword = true;
render();
await file.setPassword(password);
state.storage.writeFile(file);
await delay(1000);
} catch (err) {
// eslint-disable-next-line no-console
console.error(err);
state.passwordSetError = err;
} finally {
state.settingPassword = false;
}
render();
});
emitter.on('getMetadata', async () => {
const file = state.fileInfo;
const receiver = new FileReceiver(file);
try {
await receiver.getMetadata();
state.transfer = receiver;
} catch (e) {
if (e.message === '401' || e.message === '404') {
file.password = null;
file.dead = e.message === '404';
} else {
console.error(e);
return emitter.emit('pushState', '/error');
}
}
render();
});
emitter.on('download', async file => {
state.transfer.on('progress', updateProgress);
state.transfer.on('decrypting', render);
state.transfer.on('complete', render);
const links = openLinksInNewTab();
const size = file.size;
const start = Date.now();
try {
const dl = state.transfer.download({
stream: state.capabilities.streamDownload,
storage: state.storage
});
render();
await dl;
state.storage.totalDownloads += 1;
const duration = Date.now() - start;
metrics.completedDownload({
size,
duration,
password_protected: file.requiresPassword
});
} catch (err) {
if (err.message === '0') {
// download cancelled
state.transfer.reset();
render();
} else {
// eslint-disable-next-line no-console
state.transfer = null;
const location = ['404', '403'].includes(err.message)
? '/404'
: '/error';
if (location === '/error') {
state.sentry.withScope(scope => {
scope.setExtra('duration', err.duration);
scope.setExtra('size', err.size);
scope.setExtra('progress', err.progress);
state.sentry.captureException(err);
});
const duration = Date.now() - start;
metrics.stoppedDownload({
size,
duration,
password_protected: file.requiresPassword
});
}
emitter.emit('pushState', location);
}
} finally {
openLinksInNewTab(links, false);
}
});
emitter.on('copy', ({ url }) => {
copyToClipboard(url);
// metrics.copiedLink({ location });
});
emitter.on('closeModal', () => {
if (
state.PREFS.surveyUrl &&
['copy', 'share'].includes(state.modal.type) &&
locale().startsWith('en') &&
(state.storage.totalUploads > 1 || state.storage.totalDownloads > 0) &&
!state.user.surveyed
) {
state.user.surveyed = true;
state.modal = surveyDialog();
} else {
state.modal = null;
}
render();
});
emitter.on('report', async ({ reason }) => {
try {
const receiver = state.transfer || new FileReceiver(state.fileInfo);
await receiver.reportLink(reason);
render();
} catch (err) {
console.error(err);
if (err.message === '404') {
state.fileInfo = { reported: true };
return render();
}
emitter.emit('pushState', '/error');
}
});
setInterval(() => {
// poll for updates of the upload list
if (!state.modal && state.route === '/') {
checkFiles();
}
}, 2 * 60 * 1000);
setInterval(() => {
// poll for rerendering the file list countdown timers
if (
!state.modal &&
state.route === '/' &&
state.storage.files.length > 0 &&
Date.now() - lastRender > 30000
) {
render();
}
}, 60000);
}

266
app/crc32.js Normal file
View File

@@ -0,0 +1,266 @@
const LOOKUP = Int32Array.from([
0x00000000,
0x77073096,
0xee0e612c,
0x990951ba,
0x076dc419,
0x706af48f,
0xe963a535,
0x9e6495a3,
0x0edb8832,
0x79dcb8a4,
0xe0d5e91e,
0x97d2d988,
0x09b64c2b,
0x7eb17cbd,
0xe7b82d07,
0x90bf1d91,
0x1db71064,
0x6ab020f2,
0xf3b97148,
0x84be41de,
0x1adad47d,
0x6ddde4eb,
0xf4d4b551,
0x83d385c7,
0x136c9856,
0x646ba8c0,
0xfd62f97a,
0x8a65c9ec,
0x14015c4f,
0x63066cd9,
0xfa0f3d63,
0x8d080df5,
0x3b6e20c8,
0x4c69105e,
0xd56041e4,
0xa2677172,
0x3c03e4d1,
0x4b04d447,
0xd20d85fd,
0xa50ab56b,
0x35b5a8fa,
0x42b2986c,
0xdbbbc9d6,
0xacbcf940,
0x32d86ce3,
0x45df5c75,
0xdcd60dcf,
0xabd13d59,
0x26d930ac,
0x51de003a,
0xc8d75180,
0xbfd06116,
0x21b4f4b5,
0x56b3c423,
0xcfba9599,
0xb8bda50f,
0x2802b89e,
0x5f058808,
0xc60cd9b2,
0xb10be924,
0x2f6f7c87,
0x58684c11,
0xc1611dab,
0xb6662d3d,
0x76dc4190,
0x01db7106,
0x98d220bc,
0xefd5102a,
0x71b18589,
0x06b6b51f,
0x9fbfe4a5,
0xe8b8d433,
0x7807c9a2,
0x0f00f934,
0x9609a88e,
0xe10e9818,
0x7f6a0dbb,
0x086d3d2d,
0x91646c97,
0xe6635c01,
0x6b6b51f4,
0x1c6c6162,
0x856530d8,
0xf262004e,
0x6c0695ed,
0x1b01a57b,
0x8208f4c1,
0xf50fc457,
0x65b0d9c6,
0x12b7e950,
0x8bbeb8ea,
0xfcb9887c,
0x62dd1ddf,
0x15da2d49,
0x8cd37cf3,
0xfbd44c65,
0x4db26158,
0x3ab551ce,
0xa3bc0074,
0xd4bb30e2,
0x4adfa541,
0x3dd895d7,
0xa4d1c46d,
0xd3d6f4fb,
0x4369e96a,
0x346ed9fc,
0xad678846,
0xda60b8d0,
0x44042d73,
0x33031de5,
0xaa0a4c5f,
0xdd0d7cc9,
0x5005713c,
0x270241aa,
0xbe0b1010,
0xc90c2086,
0x5768b525,
0x206f85b3,
0xb966d409,
0xce61e49f,
0x5edef90e,
0x29d9c998,
0xb0d09822,
0xc7d7a8b4,
0x59b33d17,
0x2eb40d81,
0xb7bd5c3b,
0xc0ba6cad,
0xedb88320,
0x9abfb3b6,
0x03b6e20c,
0x74b1d29a,
0xead54739,
0x9dd277af,
0x04db2615,
0x73dc1683,
0xe3630b12,
0x94643b84,
0x0d6d6a3e,
0x7a6a5aa8,
0xe40ecf0b,
0x9309ff9d,
0x0a00ae27,
0x7d079eb1,
0xf00f9344,
0x8708a3d2,
0x1e01f268,
0x6906c2fe,
0xf762575d,
0x806567cb,
0x196c3671,
0x6e6b06e7,
0xfed41b76,
0x89d32be0,
0x10da7a5a,
0x67dd4acc,
0xf9b9df6f,
0x8ebeeff9,
0x17b7be43,
0x60b08ed5,
0xd6d6a3e8,
0xa1d1937e,
0x38d8c2c4,
0x4fdff252,
0xd1bb67f1,
0xa6bc5767,
0x3fb506dd,
0x48b2364b,
0xd80d2bda,
0xaf0a1b4c,
0x36034af6,
0x41047a60,
0xdf60efc3,
0xa867df55,
0x316e8eef,
0x4669be79,
0xcb61b38c,
0xbc66831a,
0x256fd2a0,
0x5268e236,
0xcc0c7795,
0xbb0b4703,
0x220216b9,
0x5505262f,
0xc5ba3bbe,
0xb2bd0b28,
0x2bb45a92,
0x5cb36a04,
0xc2d7ffa7,
0xb5d0cf31,
0x2cd99e8b,
0x5bdeae1d,
0x9b64c2b0,
0xec63f226,
0x756aa39c,
0x026d930a,
0x9c0906a9,
0xeb0e363f,
0x72076785,
0x05005713,
0x95bf4a82,
0xe2b87a14,
0x7bb12bae,
0x0cb61b38,
0x92d28e9b,
0xe5d5be0d,
0x7cdcefb7,
0x0bdbdf21,
0x86d3d2d4,
0xf1d4e242,
0x68ddb3f8,
0x1fda836e,
0x81be16cd,
0xf6b9265b,
0x6fb077e1,
0x18b74777,
0x88085ae6,
0xff0f6a70,
0x66063bca,
0x11010b5c,
0x8f659eff,
0xf862ae69,
0x616bffd3,
0x166ccf45,
0xa00ae278,
0xd70dd2ee,
0x4e048354,
0x3903b3c2,
0xa7672661,
0xd06016f7,
0x4969474d,
0x3e6e77db,
0xaed16a4a,
0xd9d65adc,
0x40df0b66,
0x37d83bf0,
0xa9bcae53,
0xdebb9ec5,
0x47b2cf7f,
0x30b5ffe9,
0xbdbdf21c,
0xcabac28a,
0x53b39330,
0x24b4a3a6,
0xbad03605,
0xcdd70693,
0x54de5729,
0x23d967bf,
0xb3667a2e,
0xc4614ab8,
0x5d681b02,
0x2a6f2b94,
0xb40bbe37,
0xc30c8ea1,
0x5a05df1b,
0x2d02ef8d
]);
module.exports = function crc32(uint8Array, previous) {
let crc = previous === 0 ? 0 : ~~previous ^ -1;
for (let i = 0; i < uint8Array.byteLength; i++) {
crc = LOOKUP[(crc ^ uint8Array[i]) & 0xff] ^ (crc >>> 8);
}
return (crc ^ -1) >>> 0;
};

View File

@@ -1,6 +1,3 @@
/* global MAXFILESIZE */
const { bytes } = require('./utils');
export default function(state, emitter) {
emitter.on('DOMContentLoaded', () => {
document.body.addEventListener('dragover', event => {
@@ -9,29 +6,16 @@ export default function(state, emitter) {
}
});
document.body.addEventListener('drop', event => {
if (state.route === '/' && !state.uploading) {
if (
state.route === '/' &&
!state.uploading &&
event.dataTransfer &&
event.dataTransfer.files
) {
event.preventDefault();
document
.querySelector('.uploadArea')
.classList.remove('uploadArea--dragging');
const target = event.dataTransfer;
if (target.files.length === 0) {
return;
}
if (target.files.length > 1) {
// eslint-disable-next-line no-alert
return alert(state.translate('uploadPageMultipleFilesAlert'));
}
const file = target.files[0];
if (file.size === 0) {
return;
}
if (file.size > MAXFILESIZE) {
// eslint-disable-next-line no-alert
alert(state.translate('fileTooBig', { size: bytes(MAXFILESIZE) }));
return;
}
emitter.emit('upload', { file, type: 'drop' });
emitter.emit('addFiles', {
files: Array.from(event.dataTransfer.files)
});
}
});
});

306
app/ece.js Normal file
View File

@@ -0,0 +1,306 @@
import { transformStream } from './streams';
import { concat } from './utils';
const NONCE_LENGTH = 12;
const TAG_LENGTH = 16;
const KEY_LENGTH = 16;
const MODE_ENCRYPT = 'encrypt';
const MODE_DECRYPT = 'decrypt';
export const ECE_RECORD_SIZE = 1024 * 64;
const encoder = new TextEncoder();
function generateSalt(len) {
const randSalt = new Uint8Array(len);
crypto.getRandomValues(randSalt);
return randSalt.buffer;
}
class ECETransformer {
constructor(mode, ikm, rs, salt) {
this.mode = mode;
this.prevChunk;
this.seq = 0;
this.firstchunk = true;
this.rs = rs;
this.ikm = ikm.buffer;
this.salt = salt;
}
async generateKey() {
const inputKey = await crypto.subtle.importKey(
'raw',
this.ikm,
'HKDF',
false,
['deriveKey']
);
return crypto.subtle.deriveKey(
{
name: 'HKDF',
salt: this.salt,
info: encoder.encode('Content-Encoding: aes128gcm\0'),
hash: 'SHA-256'
},
inputKey,
{
name: 'AES-GCM',
length: 128
},
true, // Edge polyfill requires key to be extractable to encrypt :/
['encrypt', 'decrypt']
);
}
async generateNonceBase() {
const inputKey = await crypto.subtle.importKey(
'raw',
this.ikm,
'HKDF',
false,
['deriveKey']
);
const base = await crypto.subtle.exportKey(
'raw',
await crypto.subtle.deriveKey(
{
name: 'HKDF',
salt: this.salt,
info: encoder.encode('Content-Encoding: nonce\0'),
hash: 'SHA-256'
},
inputKey,
{
name: 'AES-GCM',
length: 128
},
true,
['encrypt', 'decrypt']
)
);
return base.slice(0, NONCE_LENGTH);
}
generateNonce(seq) {
if (seq > 0xffffffff) {
throw new Error('record sequence number exceeds limit');
}
const nonce = new DataView(this.nonceBase.slice());
const m = nonce.getUint32(nonce.byteLength - 4);
const xor = (m ^ seq) >>> 0; //forces unsigned int xor
nonce.setUint32(nonce.byteLength - 4, xor);
return new Uint8Array(nonce.buffer);
}
pad(data, isLast) {
const len = data.length;
if (len + TAG_LENGTH >= this.rs) {
throw new Error('data too large for record size');
}
if (isLast) {
return concat(data, Uint8Array.of(2));
} else {
const padding = new Uint8Array(this.rs - len - TAG_LENGTH);
padding[0] = 1;
return concat(data, padding);
}
}
unpad(data, isLast) {
for (let i = data.length - 1; i >= 0; i--) {
if (data[i]) {
if (isLast) {
if (data[i] !== 2) {
throw new Error('delimiter of final record is not 2');
}
} else {
if (data[i] !== 1) {
throw new Error('delimiter of not final record is not 1');
}
}
return data.slice(0, i);
}
}
throw new Error('no delimiter found');
}
createHeader() {
const nums = new DataView(new ArrayBuffer(5));
nums.setUint32(0, this.rs);
return concat(new Uint8Array(this.salt), new Uint8Array(nums.buffer));
}
readHeader(buffer) {
if (buffer.length < 21) {
throw new Error('chunk too small for reading header');
}
const header = {};
const dv = new DataView(buffer.buffer);
header.salt = buffer.slice(0, KEY_LENGTH);
header.rs = dv.getUint32(KEY_LENGTH);
const idlen = dv.getUint8(KEY_LENGTH + 4);
header.length = idlen + KEY_LENGTH + 5;
return header;
}
async encryptRecord(buffer, seq, isLast) {
const nonce = this.generateNonce(seq);
const encrypted = await crypto.subtle.encrypt(
{ name: 'AES-GCM', iv: nonce },
this.key,
this.pad(buffer, isLast)
);
return new Uint8Array(encrypted);
}
async decryptRecord(buffer, seq, isLast) {
const nonce = this.generateNonce(seq);
const data = await crypto.subtle.decrypt(
{
name: 'AES-GCM',
iv: nonce,
tagLength: 128
},
this.key,
buffer
);
return this.unpad(new Uint8Array(data), isLast);
}
async start(controller) {
if (this.mode === MODE_ENCRYPT) {
this.key = await this.generateKey();
this.nonceBase = await this.generateNonceBase();
controller.enqueue(this.createHeader());
} else if (this.mode !== MODE_DECRYPT) {
throw new Error('mode must be either encrypt or decrypt');
}
}
async transformPrevChunk(isLast, controller) {
if (this.mode === MODE_ENCRYPT) {
controller.enqueue(
await this.encryptRecord(this.prevChunk, this.seq, isLast)
);
this.seq++;
} else {
if (this.seq === 0) {
//the first chunk during decryption contains only the header
const header = this.readHeader(this.prevChunk);
this.salt = header.salt;
this.rs = header.rs;
this.key = await this.generateKey();
this.nonceBase = await this.generateNonceBase();
} else {
controller.enqueue(
await this.decryptRecord(this.prevChunk, this.seq - 1, isLast)
);
}
this.seq++;
}
}
async transform(chunk, controller) {
if (!this.firstchunk) {
await this.transformPrevChunk(false, controller);
}
this.firstchunk = false;
this.prevChunk = new Uint8Array(chunk.buffer);
}
async flush(controller) {
//console.log('ece stream ends')
if (this.prevChunk) {
await this.transformPrevChunk(true, controller);
}
}
}
class StreamSlicer {
constructor(rs, mode) {
this.mode = mode;
this.rs = rs;
this.chunkSize = mode === MODE_ENCRYPT ? rs - 17 : 21;
this.partialChunk = new Uint8Array(this.chunkSize); //where partial chunks are saved
this.offset = 0;
}
send(buf, controller) {
controller.enqueue(buf);
if (this.chunkSize === 21 && this.mode === MODE_DECRYPT) {
this.chunkSize = this.rs;
}
this.partialChunk = new Uint8Array(this.chunkSize);
this.offset = 0;
}
//reslice input into record sized chunks
transform(chunk, controller) {
//console.log('Received chunk with %d bytes.', chunk.byteLength)
let i = 0;
if (this.offset > 0) {
const len = Math.min(chunk.byteLength, this.chunkSize - this.offset);
this.partialChunk.set(chunk.slice(0, len), this.offset);
this.offset += len;
i += len;
if (this.offset === this.chunkSize) {
this.send(this.partialChunk, controller);
}
}
while (i < chunk.byteLength) {
const remainingBytes = chunk.byteLength - i;
if (remainingBytes >= this.chunkSize) {
const record = chunk.slice(i, i + this.chunkSize);
i += this.chunkSize;
this.send(record, controller);
} else {
const end = chunk.slice(i, i + remainingBytes);
i += end.byteLength;
this.partialChunk.set(end);
this.offset = end.byteLength;
}
}
}
flush(controller) {
if (this.offset > 0) {
controller.enqueue(this.partialChunk.slice(0, this.offset));
}
}
}
/*
input: a ReadableStream containing data to be transformed
key: Uint8Array containing key of size KEY_LENGTH
rs: int containing record size, optional
salt: ArrayBuffer containing salt of KEY_LENGTH length, optional
*/
export function encryptStream(
input,
key,
rs = ECE_RECORD_SIZE,
salt = generateSalt(KEY_LENGTH)
) {
const mode = 'encrypt';
const inputStream = transformStream(input, new StreamSlicer(rs, mode));
return transformStream(inputStream, new ECETransformer(mode, key, rs, salt));
}
/*
input: a ReadableStream containing data to be transformed
key: Uint8Array containing key of size KEY_LENGTH
rs: int containing record size, optional
*/
export function decryptStream(input, key, rs = ECE_RECORD_SIZE) {
const mode = 'decrypt';
const inputStream = transformStream(input, new StreamSlicer(rs, mode));
return transformStream(inputStream, new ECETransformer(mode, key, rs));
}

View File

@@ -1,38 +1,19 @@
import hash from 'string-hash';
import Account from './ui/account';
const experiments = {
S9wqVl2SQ4ab2yZtqDI3Dw: {
id: 'S9wqVl2SQ4ab2yZtqDI3Dw',
run: function(variant, state, emitter) {
switch (variant) {
case 1:
state.promo = 'blue';
break;
case 2:
state.promo = 'pink';
break;
default:
state.promo = 'grey';
}
emitter.emit('render');
},
signin_button_color: {
eligible: function() {
return (
!/firefox|fxios/i.test(navigator.userAgent) &&
document.querySelector('html').lang === 'en-US'
);
return true;
},
variant: function(state) {
const n = this.luckyNumber(state);
if (n < 0.33) {
return 0;
}
return n < 0.66 ? 1 : 2;
variant: function() {
return ['white-blue', 'blue', 'white-violet', 'violet'][
Math.floor(Math.random() * 4)
];
},
luckyNumber: function(state) {
return luckyNumber(
`${this.id}:${state.storage.get('testpilot_ga__cid')}`
);
run: function(variant, state) {
const account = state.cache(Account, 'account');
account.buttonClass = variant;
}
}
};
@@ -60,23 +41,12 @@ export default function initialize(state, emitter) {
xp.run(+state.query.v, state, emitter);
}
});
if (!state.storage.get('testpilot_ga__cid')) {
// first ever visit. check again after cid is assigned.
emitter.on('DOMContentLoaded', () => {
checkExperiments(state, emitter);
});
const enrolled = state.storage.enrolled;
// single experiment per session for now
const id = Object.keys(enrolled)[0];
if (Object.keys(experiments).includes(id)) {
experiments[id].run(enrolled[id], state, emitter);
} else {
const enrolled = state.storage.enrolled.filter(([id, variant]) => {
const xp = experiments[id];
if (xp) {
xp.run(variant, state, emitter);
}
return !!xp;
});
// single experiment per session for now
if (enrolled.length === 0) {
checkExperiments(state, emitter);
}
checkExperiments(state, emitter);
}
}

View File

@@ -1,231 +0,0 @@
import FileSender from './fileSender';
import FileReceiver from './fileReceiver';
import {
copyToClipboard,
delay,
fadeOut,
openLinksInNewTab,
percent
} from './utils';
import * as metrics from './metrics';
export default function(state, emitter) {
let lastRender = 0;
let updateTitle = false;
function render() {
emitter.emit('render');
}
async function checkFiles() {
const files = state.storage.files.slice();
let rerender = false;
for (const file of files) {
const oldLimit = file.dlimit;
const oldTotal = file.dtotal;
await file.updateDownloadCount();
if (file.dtotal === file.dlimit) {
state.storage.remove(file.id);
rerender = true;
} else if (oldLimit !== file.dlimit || oldTotal !== file.dtotal) {
rerender = true;
}
}
if (rerender) {
render();
}
}
function updateProgress() {
if (updateTitle) {
emitter.emit('DOMTitleChange', percent(state.transfer.progressRatio));
}
render();
}
emitter.on('DOMContentLoaded', () => {
document.addEventListener('blur', () => (updateTitle = true));
document.addEventListener('focus', () => {
updateTitle = false;
emitter.emit('DOMTitleChange', 'Firefox Send');
});
checkFiles();
});
emitter.on('navigate', checkFiles);
emitter.on('render', () => {
lastRender = Date.now();
});
emitter.on('changeLimit', async ({ file, value }) => {
await file.changeLimit(value);
state.storage.writeFile(file);
metrics.changedDownloadLimit(file);
});
emitter.on('delete', async ({ file, location }) => {
try {
metrics.deletedUpload({
size: file.size,
time: file.time,
speed: file.speed,
type: file.type,
ttl: file.expiresAt - Date.now(),
location
});
state.storage.remove(file.id);
await file.del();
} catch (e) {
state.raven.captureException(e);
}
});
emitter.on('cancel', () => {
state.transfer.cancel();
});
emitter.on('upload', async ({ file, type }) => {
const size = file.size;
const sender = new FileSender(file);
sender.on('progress', updateProgress);
sender.on('encrypting', render);
state.transfer = sender;
state.uploading = true;
render();
const links = openLinksInNewTab();
await delay(200);
try {
metrics.startedUpload({ size, type });
const ownedFile = await sender.upload();
ownedFile.type = type;
state.storage.totalUploads += 1;
metrics.completedUpload(ownedFile);
state.storage.addFile(ownedFile);
const cancelBtn = document.getElementById('cancel-upload');
if (cancelBtn) {
cancelBtn.hidden = 'hidden';
}
await delay(1000);
await fadeOut('.page');
emitter.emit('pushState', `/share/${ownedFile.id}`);
} catch (err) {
if (err.message === '0') {
//cancelled. do nothing
metrics.cancelledUpload({ size, type });
render();
} else {
// eslint-disable-next-line no-console
console.error(err);
state.raven.captureException(err);
metrics.stoppedUpload({ size, type, err });
emitter.emit('pushState', '/error');
}
} finally {
openLinksInNewTab(links, false);
state.uploading = false;
state.transfer = null;
}
});
emitter.on('password', async ({ password, file }) => {
try {
state.settingPassword = true;
render();
await file.setPassword(password);
state.storage.writeFile(file);
metrics.addedPassword({ size: file.size });
await delay(1000);
} catch (err) {
// eslint-disable-next-line no-console
console.error(err);
state.passwordSetError = err;
} finally {
state.settingPassword = false;
}
render();
});
emitter.on('getMetadata', async () => {
const file = state.fileInfo;
const receiver = new FileReceiver(file);
try {
await receiver.getMetadata();
state.transfer = receiver;
} catch (e) {
if (e.message === '401') {
file.password = null;
if (!file.requiresPassword) {
return emitter.emit('pushState', '/404');
}
}
}
render();
});
emitter.on('download', async file => {
state.transfer.on('progress', updateProgress);
state.transfer.on('decrypting', render);
const links = openLinksInNewTab();
const size = file.size;
try {
const start = Date.now();
metrics.startedDownload({ size: file.size, ttl: file.ttl });
const dl = state.transfer.download();
render();
await dl;
const time = Date.now() - start;
const speed = size / (time / 1000);
await delay(1000);
await fadeOut('.page');
state.storage.totalDownloads += 1;
state.transfer.reset();
metrics.completedDownload({ size, time, speed });
emitter.emit('pushState', '/completed');
} catch (err) {
if (err.message === '0') {
// download cancelled
state.transfer.reset();
render();
} else {
// eslint-disable-next-line no-console
console.error(err);
state.transfer = null;
const location = err.message === '404' ? '/404' : '/error';
if (location === '/error') {
state.raven.captureException(err);
metrics.stoppedDownload({ size, err });
}
emitter.emit('pushState', location);
}
} finally {
openLinksInNewTab(links, false);
}
});
emitter.on('copy', ({ url, location }) => {
copyToClipboard(url);
metrics.copiedLink({ location });
});
setInterval(() => {
// poll for updates of the download counts
// TODO something for the share page: || state.route === '/share/:id'
if (state.route === '/') {
checkFiles();
}
}, 2 * 60 * 1000);
setInterval(() => {
// poll for rerendering the file list countdown timers
if (
state.route === '/' &&
state.storage.files.length > 0 &&
Date.now() - lastRender > 30000
) {
render();
}
}, 60000);
}

View File

@@ -1,7 +1,16 @@
import Nanobus from 'nanobus';
import Keychain from './keychain';
import { bytes } from './utils';
import { metadata, downloadFile } from './api';
import { delay, bytes, streamToArrayBuffer } from './utils';
import {
downloadFile,
downloadDone,
metadata,
getApiUrl,
reportLink,
getDownloadToken
} from './api';
import { blobStream } from './streams';
import Zip from './zip';
export default class FileReceiver extends Nanobus {
constructor(fileInfo) {
@@ -11,9 +20,14 @@ export default class FileReceiver extends Nanobus {
this.keychain.setPassword(fileInfo.password, fileInfo.url);
}
this.fileInfo = fileInfo;
this.dlToken = null;
this.reset();
}
get id() {
return this.fileInfo.id;
}
get progressRatio() {
return this.progress[0] / this.progress[1];
}
@@ -43,19 +57,41 @@ export default class FileReceiver extends Nanobus {
async getMetadata() {
const meta = await metadata(this.fileInfo.id, this.keychain);
this.keychain.setIV(meta.iv);
this.fileInfo.name = meta.name;
this.fileInfo.type = meta.type;
this.fileInfo.iv = meta.iv;
this.fileInfo.size = +meta.size;
this.fileInfo.manifest = meta.manifest;
this.fileInfo.flagged = meta.flagged;
this.state = 'ready';
}
async download(noSave = false) {
async reportLink(reason) {
await reportLink(this.fileInfo.id, this.keychain, reason);
}
sendMessageToSw(msg) {
return new Promise((resolve, reject) => {
const channel = new MessageChannel();
channel.port1.onmessage = function(event) {
if (event.data === undefined) {
reject('bad response from serviceWorker');
} else if (event.data.error !== undefined) {
reject(event.data.error);
} else {
resolve(event.data);
}
};
navigator.serviceWorker.controller.postMessage(msg, [channel.port2]);
});
}
async downloadBlob(noSave = false) {
this.state = 'downloading';
this.downloadRequest = await downloadFile(
this.fileInfo.id,
this.keychain,
this.dlToken,
p => {
this.progress = [p, this.fileInfo.size];
this.emit('progress');
@@ -67,7 +103,14 @@ export default class FileReceiver extends Nanobus {
this.msg = 'decryptingFile';
this.state = 'decrypting';
this.emit('decrypting');
const plaintext = await this.keychain.decryptFile(ciphertext);
let size = this.fileInfo.size;
let plainStream = this.keychain.decryptStream(blobStream(ciphertext));
if (this.fileInfo.type === 'send-archive') {
const zip = new Zip(this.fileInfo.manifest, plainStream);
plainStream = zip.stream;
size = zip.size;
}
const plaintext = await streamToArrayBuffer(plainStream, size);
if (!noSave) {
await saveFile({
plaintext,
@@ -76,12 +119,122 @@ export default class FileReceiver extends Nanobus {
});
}
this.msg = 'downloadFinish';
this.emit('complete');
this.state = 'complete';
} catch (e) {
this.downloadRequest = null;
throw e;
}
}
async downloadStream(noSave = false) {
const start = Date.now();
const onprogress = p => {
this.progress = [p, this.fileInfo.size];
this.emit('progress');
};
this.downloadRequest = {
cancel: () => {
this.sendMessageToSw({ request: 'cancel', id: this.fileInfo.id });
}
};
try {
this.state = 'downloading';
const info = {
request: 'init',
id: this.fileInfo.id,
filename: this.fileInfo.name,
type: this.fileInfo.type,
manifest: this.fileInfo.manifest,
key: this.fileInfo.secretKey,
requiresPassword: this.fileInfo.requiresPassword,
password: this.fileInfo.password,
url: this.fileInfo.url,
size: this.fileInfo.size,
nonce: this.keychain.nonce,
dlToken: this.dlToken,
noSave
};
await this.sendMessageToSw(info);
onprogress(0);
if (noSave) {
const res = await fetch(getApiUrl(`/api/download/${this.fileInfo.id}`));
if (res.status !== 200) {
throw new Error(res.status);
}
} else {
const downloadPath = `/api/download/${this.fileInfo.id}`;
let downloadUrl = getApiUrl(downloadPath);
if (downloadUrl === downloadPath) {
downloadUrl = `${location.protocol}//${location.host}${downloadPath}`;
}
const a = document.createElement('a');
a.href = downloadUrl;
document.body.appendChild(a);
a.click();
}
let prog = 0;
let hangs = 0;
while (prog < this.fileInfo.size) {
const msg = await this.sendMessageToSw({
request: 'progress',
id: this.fileInfo.id
});
if (msg.progress === prog) {
hangs++;
} else {
hangs = 0;
}
if (hangs > 30) {
// TODO: On Chrome we don't get a cancel
// signal so one is indistinguishable from
// a hang. We may be able to detect
// which end is hung in the service worker
// to improve on this.
const e = new Error('hung download');
e.duration = Date.now() - start;
e.size = this.fileInfo.size;
e.progress = prog;
throw e;
}
prog = msg.progress;
onprogress(prog);
await delay(1000);
}
this.downloadRequest = null;
this.msg = 'downloadFinish';
this.emit('complete');
this.state = 'complete';
} catch (e) {
this.downloadRequest = null;
if (e === 'cancelled' || e.message === '400') {
throw new Error(0);
}
throw e;
}
}
async download({ stream, storage, noSave }) {
this.dlToken = storage.getDownloadToken(this.id);
if (!this.dlToken) {
this.dlToken = await getDownloadToken(this.id, this.keychain);
storage.setDownloadToken(this.id, this.dlToken);
}
if (stream) {
await this.downloadStream(noSave);
} else {
await this.downloadBlob(noSave);
}
await downloadDone(this.id, this.dlToken);
storage.setDownloadToken(this.id);
}
}
async function saveFile(file) {

View File

@@ -1,14 +1,13 @@
/* global EXPIRE_SECONDS */
import Nanobus from 'nanobus';
import OwnedFile from './ownedFile';
import Keychain from './keychain';
import { arrayToB64, bytes } from './utils';
import { uploadFile } from './api';
import { uploadWs } from './api';
import { encryptedSize } from './utils';
export default class FileSender extends Nanobus {
constructor(file) {
constructor() {
super('FileSender');
this.file = file;
this.keychain = new Keychain();
this.reset();
}
@@ -18,7 +17,9 @@ export default class FileSender extends Nanobus {
}
get progressIndefinite() {
return ['fileSizeProgress', 'notifyUploadDone'].indexOf(this.msg) === -1;
return (
['fileSizeProgress', 'notifyUploadEncryptDone'].indexOf(this.msg) === -1
);
}
get sizes() {
@@ -42,67 +43,59 @@ export default class FileSender extends Nanobus {
}
}
readFile() {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsArrayBuffer(this.file);
// TODO: progress?
reader.onload = function(event) {
const plaintext = new Uint8Array(this.result);
resolve(plaintext);
};
reader.onerror = function(err) {
reject(err);
};
});
}
async upload() {
const start = Date.now();
const plaintext = await this.readFile();
async upload(archive, bearerToken) {
if (this.cancelled) {
throw new Error(0);
}
this.msg = 'encryptingFile';
this.emit('encrypting');
const encrypted = await this.keychain.encryptFile(plaintext);
const metadata = await this.keychain.encryptMetadata(this.file);
const totalSize = encryptedSize(archive.size);
const encStream = await this.keychain.encryptStream(archive.stream);
const metadata = await this.keychain.encryptMetadata(archive);
const authKeyB64 = await this.keychain.authKeyB64();
if (this.cancelled) {
throw new Error(0);
}
this.uploadRequest = uploadFile(
encrypted,
this.uploadRequest = uploadWs(
encStream,
metadata,
authKeyB64,
this.keychain,
archive.timeLimit,
archive.dlimit,
bearerToken,
p => {
this.progress = p;
this.progress = [p, totalSize];
this.emit('progress');
}
);
if (this.cancelled) {
throw new Error(0);
}
this.msg = 'fileSizeProgress';
this.emit('progress'); // HACK to kick MS Edge
try {
const result = await this.uploadRequest.result;
const time = Date.now() - start;
this.msg = 'notifyUploadDone';
this.msg = 'notifyUploadEncryptDone';
this.uploadRequest = null;
this.progress = [1, 1];
const secretKey = arrayToB64(this.keychain.rawSecret);
const ownedFile = new OwnedFile({
id: result.id,
url: `${result.url}#${secretKey}`,
name: this.file.name,
size: this.file.size,
time: time,
speed: this.file.size / (time / 1000),
name: archive.name,
size: archive.size,
manifest: archive.manifest,
time: result.duration,
speed: archive.size / (result.duration / 1000),
createdAt: Date.now(),
expiresAt: Date.now() + EXPIRE_SECONDS * 1000,
expiresAt: Date.now() + archive.timeLimit * 1000,
secretKey: secretKey,
nonce: this.keychain.nonce,
ownerToken: result.ownerToken
ownerToken: result.ownerToken,
dlimit: archive.dlimit,
timeLimit: archive.timeLimit
});
return ownedFile;
} catch (e) {
this.msg = 'errorPageHeader';

174
app/fxa.js Normal file
View File

@@ -0,0 +1,174 @@
/* global AUTH_CONFIG */
import { arrayToB64, b64ToArray, concat } from './utils';
const encoder = new TextEncoder();
const decoder = new TextDecoder();
function getOtherInfo(enc) {
const name = encoder.encode(enc);
const length = 256;
const buffer = new ArrayBuffer(name.length + 16);
const dv = new DataView(buffer);
const result = new Uint8Array(buffer);
let i = 0;
dv.setUint32(i, name.length);
i += 4;
result.set(name, i);
i += name.length;
dv.setUint32(i, 0);
i += 4;
dv.setUint32(i, 0);
i += 4;
dv.setUint32(i, length);
return result;
}
async function concatKdf(key, enc) {
if (key.length !== 32) {
throw new Error('unsupported key length');
}
const otherInfo = getOtherInfo(enc);
const buffer = new ArrayBuffer(4 + key.length + otherInfo.length);
const dv = new DataView(buffer);
const concat = new Uint8Array(buffer);
dv.setUint32(0, 1);
concat.set(key, 4);
concat.set(otherInfo, key.length + 4);
const result = await crypto.subtle.digest('SHA-256', concat);
return new Uint8Array(result);
}
export async function prepareScopedBundleKey(storage) {
const keys = await crypto.subtle.generateKey(
{
name: 'ECDH',
namedCurve: 'P-256'
},
true,
['deriveBits']
);
const privateJwk = await crypto.subtle.exportKey('jwk', keys.privateKey);
const publicJwk = await crypto.subtle.exportKey('jwk', keys.publicKey);
const kid = await crypto.subtle.digest(
'SHA-256',
encoder.encode(JSON.stringify(publicJwk))
);
privateJwk.kid = kid;
publicJwk.kid = kid;
storage.set('scopedBundlePrivateKey', JSON.stringify(privateJwk));
return arrayToB64(encoder.encode(JSON.stringify(publicJwk)));
}
export async function decryptBundle(storage, bundle) {
const privateJwk = JSON.parse(storage.get('scopedBundlePrivateKey'));
storage.remove('scopedBundlePrivateKey');
const privateKey = await crypto.subtle.importKey(
'jwk',
privateJwk,
{
name: 'ECDH',
namedCurve: 'P-256'
},
false,
['deriveBits']
);
const jweParts = bundle.split('.');
if (jweParts.length !== 5) {
throw new Error('invalid jwe');
}
const header = JSON.parse(decoder.decode(b64ToArray(jweParts[0])));
const additionalData = encoder.encode(jweParts[0]);
const iv = b64ToArray(jweParts[2]);
const ciphertext = b64ToArray(jweParts[3]);
const tag = b64ToArray(jweParts[4]);
if (header.alg !== 'ECDH-ES' || header.enc !== 'A256GCM') {
throw new Error('unsupported jwe type');
}
const publicKey = await crypto.subtle.importKey(
'jwk',
header.epk,
{
name: 'ECDH',
namedCurve: 'P-256'
},
false,
[]
);
const sharedBits = await crypto.subtle.deriveBits(
{
name: 'ECDH',
public: publicKey
},
privateKey,
256
);
const rawSharedKey = await concatKdf(new Uint8Array(sharedBits), header.enc);
const sharedKey = await crypto.subtle.importKey(
'raw',
rawSharedKey,
{
name: 'AES-GCM'
},
false,
['decrypt']
);
const plaintext = await crypto.subtle.decrypt(
{
name: 'AES-GCM',
iv: iv,
additionalData: additionalData,
tagLength: tag.length * 8
},
sharedKey,
concat(ciphertext, tag)
);
return JSON.parse(decoder.decode(plaintext));
}
export async function preparePkce(storage) {
const verifier = arrayToB64(crypto.getRandomValues(new Uint8Array(64)));
storage.set('pkceVerifier', verifier);
const challenge = await crypto.subtle.digest(
'SHA-256',
encoder.encode(verifier)
);
return arrayToB64(new Uint8Array(challenge));
}
export async function deriveFileListKey(ikm) {
const baseKey = await crypto.subtle.importKey(
'raw',
b64ToArray(ikm),
{ name: 'HKDF' },
false,
['deriveKey']
);
const fileListKey = await crypto.subtle.deriveKey(
{
name: 'HKDF',
salt: new Uint8Array(),
info: encoder.encode('fileList'),
hash: 'SHA-256'
},
baseKey,
{
name: 'AES-GCM',
length: 128
},
true,
['encrypt', 'decrypt']
);
const rawFileListKey = await crypto.subtle.exportKey('raw', fileListKey);
return arrayToB64(new Uint8Array(rawFileListKey));
}
export async function getFileListKey(storage, bundle) {
const jwks = await decryptBundle(storage, bundle);
const jwk = jwks[AUTH_CONFIG.key_scope];
return deriveFileListKey(jwk.k);
}

View File

@@ -1,47 +1,25 @@
import { arrayToB64, b64ToArray } from './utils';
import { decryptStream, encryptStream } from './ece.js';
const encoder = new TextEncoder();
const decoder = new TextDecoder();
export default class Keychain {
constructor(secretKeyB64, nonce, ivB64) {
constructor(secretKeyB64, nonce) {
this._nonce = nonce || 'yRCdyQ1EMSA3mo4rqSkuNQ==';
if (ivB64) {
this.iv = b64ToArray(ivB64);
} else {
this.iv = window.crypto.getRandomValues(new Uint8Array(12));
}
if (secretKeyB64) {
this.rawSecret = b64ToArray(secretKeyB64);
} else {
this.rawSecret = window.crypto.getRandomValues(new Uint8Array(16));
this.rawSecret = crypto.getRandomValues(new Uint8Array(16));
}
this.secretKeyPromise = window.crypto.subtle.importKey(
this.secretKeyPromise = crypto.subtle.importKey(
'raw',
this.rawSecret,
'HKDF',
false,
['deriveKey']
);
this.encryptKeyPromise = this.secretKeyPromise.then(function(secretKey) {
return window.crypto.subtle.deriveKey(
{
name: 'HKDF',
salt: new Uint8Array(),
info: encoder.encode('encryption'),
hash: 'SHA-256'
},
secretKey,
{
name: 'AES-GCM',
length: 128
},
false,
['encrypt', 'decrypt']
);
});
this.metaKeyPromise = this.secretKeyPromise.then(function(secretKey) {
return window.crypto.subtle.deriveKey(
return crypto.subtle.deriveKey(
{
name: 'HKDF',
salt: new Uint8Array(),
@@ -58,7 +36,7 @@ export default class Keychain {
);
});
this.authKeyPromise = this.secretKeyPromise.then(function(secretKey) {
return window.crypto.subtle.deriveKey(
return crypto.subtle.deriveKey(
{
name: 'HKDF',
salt: new Uint8Array(),
@@ -86,17 +64,13 @@ export default class Keychain {
}
}
setIV(ivB64) {
this.iv = b64ToArray(ivB64);
}
setPassword(password, shareUrl) {
this.authKeyPromise = window.crypto.subtle
this.authKeyPromise = crypto.subtle
.importKey('raw', encoder.encode(password), { name: 'PBKDF2' }, false, [
'deriveKey'
])
.then(passwordKey =>
window.crypto.subtle.deriveKey(
crypto.subtle.deriveKey(
{
name: 'PBKDF2',
salt: encoder.encode(shareUrl),
@@ -115,7 +89,7 @@ export default class Keychain {
}
setAuthKey(authKeyB64) {
this.authKeyPromise = window.crypto.subtle.importKey(
this.authKeyPromise = crypto.subtle.importKey(
'raw',
b64ToArray(authKeyB64),
{
@@ -129,13 +103,13 @@ export default class Keychain {
async authKeyB64() {
const authKey = await this.authKeyPromise;
const rawAuth = await window.crypto.subtle.exportKey('raw', authKey);
const rawAuth = await crypto.subtle.exportKey('raw', authKey);
return arrayToB64(new Uint8Array(rawAuth));
}
async authHeader() {
const authKey = await this.authKeyPromise;
const sig = await window.crypto.subtle.sign(
const sig = await crypto.subtle.sign(
{
name: 'HMAC'
},
@@ -145,23 +119,9 @@ export default class Keychain {
return `send-v1 ${arrayToB64(new Uint8Array(sig))}`;
}
async encryptFile(plaintext) {
const encryptKey = await this.encryptKeyPromise;
const ciphertext = await window.crypto.subtle.encrypt(
{
name: 'AES-GCM',
iv: this.iv,
tagLength: 128
},
encryptKey,
plaintext
);
return ciphertext;
}
async encryptMetadata(metadata) {
const metaKey = await this.metaKeyPromise;
const ciphertext = await window.crypto.subtle.encrypt(
const ciphertext = await crypto.subtle.encrypt(
{
name: 'AES-GCM',
iv: new Uint8Array(12),
@@ -170,32 +130,27 @@ export default class Keychain {
metaKey,
encoder.encode(
JSON.stringify({
iv: arrayToB64(this.iv),
name: metadata.name,
type: metadata.type || 'application/octet-stream'
size: metadata.size,
type: metadata.type || 'application/octet-stream',
manifest: metadata.manifest || {}
})
)
);
return ciphertext;
}
async decryptFile(ciphertext) {
const encryptKey = await this.encryptKeyPromise;
const plaintext = await window.crypto.subtle.decrypt(
{
name: 'AES-GCM',
iv: this.iv,
tagLength: 128
},
encryptKey,
ciphertext
);
return plaintext;
encryptStream(plainStream) {
return encryptStream(plainStream, this.rawSecret);
}
decryptStream(cryptotext) {
return decryptStream(cryptotext, this.rawSecret);
}
async decryptMetadata(ciphertext) {
const metaKey = await this.metaKeyPromise;
const plaintext = await window.crypto.subtle.decrypt(
const plaintext = await crypto.subtle.decrypt(
{
name: 'AES-GCM',
iv: new Uint8Array(12),

26
app/locale.js Normal file
View File

@@ -0,0 +1,26 @@
import { FluentBundle } from '@fluent/bundle';
function makeBundle(locale, ftl) {
const bundle = new FluentBundle(locale, { useIsolating: false });
bundle.addMessages(ftl);
return bundle;
}
export async function getTranslator(locale) {
const bundles = [];
const { default: en } = await import('../public/locales/en-US/send.ftl');
if (locale !== 'en-US') {
const { default: ftl } = await import(
`../public/locales/${locale}/send.ftl`
);
bundles.push(makeBundle(locale, ftl));
}
bundles.push(makeBundle('en-US', en));
return function(id, data) {
for (let bundle of bundles) {
if (bundle.hasMessage(id)) {
return bundle.format(bundle.getMessage(id), data);
}
}
};
}

View File

@@ -1,16 +1,393 @@
@import './base.css';
@import './templates/header/header.css';
@import './templates/downloadButton/downloadButton.css';
@import './templates/progress/progress.css';
@import './templates/passwordInput/passwordInput.css';
@import './templates/downloadPassword/downloadPassword.css';
@import './templates/setPasswordSection/setPasswordSection.css';
@import './templates/footer/footer.css';
@import './templates/fxPromo/fxPromo.css';
@import './templates/selectbox/selectbox.css';
@import './templates/fileList/fileList.css';
@import './templates/file/file.css';
@import './templates/popup/popup.css';
@import './pages/welcome/welcome.css';
@import './pages/share/share.css';
@import './pages/unsupported/unsupported.css';
@tailwind base;
html {
line-height: 1.15;
}
@tailwind components;
:not(input) {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
:root {
--violet-gradient: linear-gradient(
-180deg,
rgba(144, 89, 255, 0.8) 0%,
rgba(144, 89, 255, 0.4) 100%
);
}
a {
color: inherit;
text-decoration: none;
}
a:focus {
outline: 1px dotted grey;
}
body {
background-image: url('../assets/bg.svg');
background-position: center;
background-repeat: no-repeat;
background-size: cover;
overflow-x: hidden;
}
.btn {
@apply bg-blue-60;
@apply text-white;
@apply cursor-pointer;
@apply py-4;
@apply px-6;
@apply font-semibold;
}
.btn:hover {
@apply bg-blue-70;
}
.btn:focus {
@apply bg-blue-70;
}
.btn:disabled {
@apply bg-grey-transparent;
cursor: not-allowed;
}
.checkbox {
@apply leading-normal;
@apply select-none;
}
.checkbox > input[type='checkbox'] {
@apply absolute;
@apply opacity-0;
}
.checkbox > label {
@apply cursor-pointer;
}
.checkbox > label::before {
/* @apply bg-grey-10; */
@apply border;
@apply rounded-sm;
content: '';
height: 1.5rem;
width: 1.5rem;
margin-right: 0.5rem;
float: left;
}
.checkbox > label:hover::before {
@apply border-blue-50;
}
.checkbox > input:focus + label::before {
@apply border-blue-50;
}
.checkbox > input:checked + label::before {
@apply bg-blue-50;
@apply border-blue-50;
background-image: url('../assets/lock.svg');
background-position: center;
background-size: 1.25rem;
background-repeat: no-repeat;
}
.checkbox > input:disabled + label {
cursor: auto;
}
.checkbox > input:disabled + label::before {
@apply bg-blue-50;
@apply border-blue-50;
background-image: url('../assets/lock.svg');
background-position: center;
background-size: 1.25rem;
background-repeat: no-repeat;
cursor: auto;
}
details {
overflow: hidden;
}
details > summary::-webkit-details-marker {
display: none;
}
details > summary > svg {
transition: all 0.25s cubic-bezier(0.07, 0.95, 0, 1);
}
details[open] {
overflow-y: auto;
}
details[open] > summary > svg {
transform: rotate(90deg);
}
footer li:hover {
text-decoration: underline;
}
.link-blue {
@apply text-blue-60;
}
.link-blue:hover {
@apply text-blue-70;
}
.link-blue:focus {
@apply text-blue-70;
}
.main-header img {
height: 32px;
width: auto;
}
.intro {
max-width: 100%;
height: unset;
}
.dl-bg {
filter: grayscale(1) opacity(0.15);
}
.main {
display: flex;
position: relative;
max-width: 64rem;
width: 100%;
height: 100%;
}
.main > section {
@apply bg-white;
}
.mozilla-logo {
background-image: url('../assets/mozilla-logo.svg');
background-repeat: no-repeat;
background-size: 100px, 48px;
overflow: hidden;
text-indent: 120%;
white-space: nowrap;
display: inline-block;
height: 32px;
width: 100px;
flex-shrink: 0;
}
#password-msg::after {
content: '\200b';
}
progress {
@apply bg-grey-30;
@apply rounded-sm;
@apply w-full;
@apply h-1;
}
progress::-webkit-progress-bar {
@apply bg-grey-30;
@apply rounded-sm;
@apply w-full;
@apply h-1;
}
progress::-webkit-progress-value {
/* stylelint-disable */
background-image: -webkit-linear-gradient(
-45deg,
transparent 20%,
rgba(255, 255, 255, 0.4) 20%,
rgba(255, 255, 255, 0.4) 40%,
transparent 40%,
transparent 60%,
rgba(255, 255, 255, 0.4) 60%,
rgba(255, 255, 255, 0.4) 80%,
transparent 80%
),
-webkit-linear-gradient(left, #0a84ff, #0a84ff);
/* stylelint-enable */
border-radius: 2px;
background-size: 21px 20px, 100% 100%, 100% 100%;
-webkit-animation: animate-stripes 1s linear infinite;
}
progress::-moz-progress-bar {
/* stylelint-disable */
background-image: -moz-linear-gradient(
135deg,
transparent 20%,
rgba(255, 255, 255, 0.4) 20%,
rgba(255, 255, 255, 0.4) 40%,
transparent 40%,
transparent 60%,
rgba(255, 255, 255, 0.4) 60%,
rgba(255, 255, 255, 0.4) 80%,
transparent 80%
),
-moz-linear-gradient(left, #0a84ff, #0a84ff);
/* stylelint-enable */
border-radius: 2px;
background-size: 21px 20px, 100% 100%, 100% 100%;
animation: animate-stripes 1s linear infinite;
}
@-webkit-keyframes animate-stripes {
100% {
background-position: -21px 0;
}
}
@keyframes animate-stripes {
100% {
background-position: -21px 0;
}
}
select {
background-image: url('../assets/select-arrow.svg');
background-position: calc(100% - 0.75rem);
background-repeat: no-repeat;
}
@screen md {
.main-header img {
height: 48px;
width: auto;
}
.intro {
max-width: unset;
height: unset;
margin-bottom: -3rem;
margin-right: -7rem;
}
.main {
@apply flex-1;
@apply self-center;
@apply items-center;
@apply m-auto;
@apply py-8;
min-height: 42rem;
max-height: 42rem;
width: calc(100% - 3rem);
}
}
@screen dark {
body {
@apply text-grey-10;
background-image: unset;
}
.btn {
@apply bg-blue-40;
@apply text-white;
}
.btn:hover {
@apply bg-blue-50;
}
.btn:focus {
@apply bg-blue-50;
}
.btn:disabled {
@apply bg-grey-80;
}
.link-blue {
@apply text-blue-40;
}
.link-blue:hover {
@apply text-blue-50;
}
.link-blue:focus {
@apply text-blue-50;
}
.main > section {
@apply bg-grey-90;
}
.mozilla-logo {
background-color: white;
border: 1px solid white;
}
@screen md {
.main > section {
@apply border;
@apply border-grey-80;
}
}
}
@tailwind utilities;
@responsive {
.shadow-light {
box-shadow: 0 0 8px 0 rgba(12, 12, 13, 0.1);
}
.shadow-big {
box-shadow: 0 12px 18px 2px rgba(34, 0, 51, 0.04),
0 6px 22px 4px rgba(7, 48, 114, 0.12),
0 6px 10px -4px rgba(14, 13, 26, 0.12);
}
}
@variants focus {
.outline {
outline: 1px dotted grey;
}
}
.word-break-all {
word-break: break-all;
line-break: anywhere;
}
.signin {
backface-visibility: hidden;
border-radius: 6px;
transition-property: transform, background-color;
transition-duration: 250ms;
transition-timing-function: cubic-bezier(0.07, 0.95, 0, 1);
}
.signin:hover,
.signin:focus {
transform: scale(1.0625);
}
.signin:hover:active {
transform: scale(0.9375);
}

View File

@@ -1,54 +1,75 @@
/* global DEFAULTS LIMITS PREFS */
import 'core-js';
import 'fast-text-encoding'; // MS Edge support
import 'fluent-intl-polyfill';
import app from './routes';
import locale from '../common/locales';
import fileManager from './fileManager';
import 'intl-pluralrules';
import choo from 'choo';
import nanotiming from 'nanotiming';
import routes from './routes';
import getCapabilities from './capabilities';
import controller from './controller';
import dragManager from './dragManager';
import pasteManager from './pasteManager';
import { canHasSend } from './utils';
import storage from './storage';
import metrics from './metrics';
import experiments from './experiments';
import Raven from 'raven-js';
import * as Sentry from '@sentry/browser';
import './main.css';
import User from './user';
import { getTranslator } from './locale';
import Archive from './archive';
import { setTranslate, locale } from './utils';
if (navigator.doNotTrack !== '1' && window.RAVEN_CONFIG) {
Raven.config(window.SENTRY_ID, window.RAVEN_CONFIG).install();
if (navigator.doNotTrack !== '1' && window.SENTRY_CONFIG) {
Sentry.init(window.SENTRY_CONFIG);
}
app.use((state, emitter) => {
state.transfer = null;
state.fileInfo = null;
state.translate = locale.getTranslator();
state.storage = storage;
state.raven = Raven;
window.appState = state;
emitter.on('DOMContentLoaded', async function checkSupport() {
let unsupportedReason = null;
if (
// Firefox < 50
/firefox/i.test(navigator.userAgent) &&
parseInt(navigator.userAgent.match(/firefox\/*([^\n\r]*)\./i)[1], 10) < 50
) {
unsupportedReason = 'outdated';
}
const ok = await canHasSend();
if (!ok) {
unsupportedReason = /firefox/i.test(navigator.userAgent)
? 'outdated'
: 'gcm';
}
if (unsupportedReason) {
setTimeout(() =>
emitter.emit('replaceState', `/unsupported/${unsupportedReason}`)
);
}
});
});
if (process.env.NODE_ENV === 'production') {
nanotiming.disabled = true;
}
app.use(metrics);
app.use(fileManager);
app.use(dragManager);
app.use(experiments);
app.use(pasteManager);
(async function start() {
const capabilities = await getCapabilities();
if (
!capabilities.crypto &&
window.location.pathname !== '/unsupported/crypto'
) {
return window.location.assign('/unsupported/crypto');
}
if (capabilities.serviceWorker) {
try {
await navigator.serviceWorker.register('/serviceWorker.js');
await navigator.serviceWorker.ready;
} catch (e) {
// continue but disable streaming downloads
capabilities.streamDownload = false;
}
}
app.mount('body');
const translate = await getTranslator(locale());
setTranslate(translate);
// eslint-disable-next-line require-atomic-updates
window.initialState = {
LIMITS,
DEFAULTS,
PREFS,
archive: new Archive([], DEFAULTS.EXPIRE_SECONDS),
capabilities,
translate,
storage,
sentry: Sentry,
user: new User(storage, LIMITS, window.AUTH_CONFIG),
transfer: null,
fileInfo: null,
locale: locale()
};
const app = routes(choo({ hash: true }));
// eslint-disable-next-line require-atomic-updates
window.app = app;
app.use(experiments);
app.use(metrics);
app.use(controller);
app.use(dragManager);
app.use(pasteManager);
app.mount('body');
})();

View File

@@ -1,297 +1,186 @@
import testPilotGA from 'testpilot-ga/src/TestPilotGA';
import storage from './storage';
let hasLocalStorage = false;
try {
hasLocalStorage = typeof localStorage !== 'undefined';
} catch (e) {
// when disabled, any mention of localStorage throws an error
}
const analytics = new testPilotGA({
an: 'Firefox Send',
ds: 'web',
tid: window.GOOGLE_ANALYTICS_ID
});
import { platform, locale } from './utils';
import { sendMetrics } from './api';
let appState = null;
let experiment = null;
const HOUR = 1000 * 60 * 60;
const events = [];
let session_id = Date.now();
const lang = locale();
export default function initialize(state, emitter) {
appState = state;
emitter.on('DOMContentLoaded', () => {
addExitHandlers();
experiment = storage.enrolled[0];
sendEvent(category(), 'visit', {
cm5: storage.totalUploads,
cm6: storage.files.length,
cm7: storage.totalDownloads
experiment = storage.enrolled;
if (!appState.user.firstAction) {
appState.user.firstAction =
appState.route === '/' ? 'upload' : 'download';
}
const query = appState.query;
addEvent('client_visit', {
entrypoint: appState.route === '/' ? 'upload' : 'download',
referrer: document.referrer,
utm_campaign: query.utm_campaign,
utm_content: query.utm_content,
utm_medium: query.utm_medium,
utm_source: query.utm_source,
utm_term: query.utm_term
});
//TODO restart handlers... somewhere
});
emitter.on('exit', exitEvent);
emitter.on('experiment', experimentEvent);
window.addEventListener('unload', submitEvents);
}
function category() {
switch (appState.route) {
case '/':
case '/share/:id':
return 'sender';
case '/download/:id/:key':
case '/download/:id':
case '/completed':
return 'recipient';
default:
return 'other';
}
function sizeOrder(n) {
return Math.floor(Math.log10(n));
}
function sendEvent() {
const args = Array.from(arguments);
if (experiment && args[2]) {
args[2].xid = experiment[0];
args[2].xvar = experiment[1];
function submitEvents() {
if (navigator.doNotTrack === '1') {
return;
}
return (
hasLocalStorage && analytics.sendEvent.apply(analytics, args).catch(() => 0)
sendMetrics(
new Blob(
[
JSON.stringify({
now: Date.now(),
session_id,
lang,
platform: platform(),
events
})
],
{ type: 'text/plain' } // see http://crbug.com/490015
)
);
events.splice(0);
}
function urlToMetric(url) {
switch (url) {
case 'https://www.mozilla.org/':
return 'mozilla';
case 'https://www.mozilla.org/about/legal':
return 'legal';
case 'https://testpilot.firefox.com/about':
return 'about';
case 'https://testpilot.firefox.com/privacy':
return 'privacy';
case 'https://testpilot.firefox.com/terms':
return 'terms';
case 'https://www.mozilla.org/privacy/websites/#cookies':
return 'cookies';
case 'https://github.com/mozilla/send':
return 'github';
case 'https://twitter.com/FxTestPilot':
return 'twitter';
case 'https://www.mozilla.org/firefox/new/?scene=2':
return 'download-firefox';
case 'https://qsurvey.mozilla.com/s3/txp-firefox-send':
return 'survey';
case 'https://testpilot.firefox.com/':
case 'https://testpilot.firefox.com/experiments/send':
return 'testpilot';
case 'https://www.mozilla.org/firefox/new/?utm_campaign=send-acquisition&utm_medium=referral&utm_source=send.firefox.com':
return 'promo';
default:
return 'other';
async function addEvent(event_type, event_properties) {
const user_id = await appState.user.metricId();
const device_id = await appState.user.deviceId();
const ab_id = Object.keys(experiment)[0];
if (ab_id) {
event_properties.experiment = ab_id;
event_properties.variant = experiment[ab_id];
}
}
function setReferrer(state) {
if (category() === 'sender') {
if (state) {
storage.referrer = `${state}-upload`;
}
} else if (category() === 'recipient') {
if (state) {
storage.referrer = `${state}-download`;
events.push({
device_id,
event_properties,
event_type,
time: Date.now(),
user_id,
user_properties: {
anonymous: !appState.user.loggedIn,
first_action: appState.user.firstAction,
active_count: storage.files.length
}
});
if (events.length === 25) {
submitEvents();
}
}
function externalReferrer() {
if (/^https:\/\/testpilot\.firefox\.com/.test(document.referrer)) {
return 'testpilot';
}
return 'external';
}
function takeReferrer() {
const referrer = storage.referrer || externalReferrer();
storage.referrer = null;
return referrer;
}
function startedUpload(params) {
return sendEvent('sender', 'upload-started', {
cm1: params.size,
cm5: storage.totalUploads,
cm6: storage.files.length + 1,
cm7: storage.totalDownloads,
cd1: params.type,
cd5: takeReferrer()
function cancelledUpload(archive, duration) {
return addEvent('client_upload', {
download_limit: archive.dlimit,
duration: sizeOrder(duration),
file_count: archive.numFiles,
password_protected: !!archive.password,
size: sizeOrder(archive.size),
status: 'cancel',
time_limit: archive.timeLimit
});
}
function cancelledUpload(params) {
setReferrer('cancelled');
return sendEvent('sender', 'upload-stopped', {
cm1: params.size,
cm5: storage.totalUploads,
cm6: storage.files.length,
cm7: storage.totalDownloads,
cd1: params.type,
cd2: 'cancelled'
function completedUpload(archive, duration) {
return addEvent('client_upload', {
download_limit: archive.dlimit,
duration: sizeOrder(duration),
file_count: archive.numFiles,
password_protected: !!archive.password,
size: sizeOrder(archive.size),
status: 'ok',
time_limit: archive.timeLimit
});
}
function completedUpload(params) {
return sendEvent('sender', 'upload-stopped', {
cm1: params.size,
cm2: params.time,
cm3: params.speed,
cm5: storage.totalUploads,
cm6: storage.files.length,
cm7: storage.totalDownloads,
cd1: params.type,
cd2: 'completed'
});
}
function addedPassword(params) {
return sendEvent('sender', 'password-added', {
cm1: params.size,
cm5: storage.totalUploads,
cm6: storage.files.length,
cm7: storage.totalDownloads
});
}
function startedDownload(params) {
return sendEvent('recipient', 'download-started', {
cm1: params.size,
cm4: params.ttl,
cm5: storage.totalUploads,
cm6: storage.files.length,
cm7: storage.totalDownloads
function stoppedUpload(archive, duration = 0) {
return addEvent('client_upload', {
download_limit: archive.dlimit,
duration: sizeOrder(duration),
file_count: archive.numFiles,
password_protected: !!archive.password,
size: sizeOrder(archive.size),
status: 'error',
time_limit: archive.timeLimit
});
}
function stoppedDownload(params) {
return sendEvent('recipient', 'download-stopped', {
cm1: params.size,
cm5: storage.totalUploads,
cm6: storage.files.length,
cm7: storage.totalDownloads,
cd2: 'errored',
cd6: params.err
});
}
function cancelledDownload(params) {
setReferrer('cancelled');
return sendEvent('recipient', 'download-stopped', {
cm1: params.size,
cm5: storage.totalUploads,
cm6: storage.files.length,
cm7: storage.totalDownloads,
cd2: 'cancelled'
});
}
function stoppedUpload(params) {
return sendEvent('sender', 'upload-stopped', {
cm1: params.size,
cm5: storage.totalUploads,
cm6: storage.files.length,
cm7: storage.totalDownloads,
cd1: params.type,
cd2: 'errored',
cd6: params.err
});
}
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
return addEvent('client_download', {
duration: sizeOrder(params.duration),
password_protected: params.password_protected,
size: sizeOrder(params.size),
status: 'error'
});
}
function completedDownload(params) {
return sendEvent('recipient', 'download-stopped', {
cm1: params.size,
cm2: params.time,
cm3: params.speed,
cm5: storage.totalUploads,
cm6: storage.files.length,
cm7: storage.totalDownloads,
cd2: 'completed'
return addEvent('client_download', {
duration: sizeOrder(params.duration),
password_protected: params.password_protected,
size: sizeOrder(params.size),
status: 'ok'
});
}
function deletedUpload(params) {
return sendEvent(category(), 'upload-deleted', {
cm1: params.size,
cm2: params.time,
cm3: params.speed,
cm4: params.ttl,
cm5: storage.totalUploads,
cm6: storage.files.length,
cm7: storage.totalDownloads,
cd1: params.type,
cd4: params.location
});
}
function unsupported(params) {
return sendEvent(category(), 'unsupported', {
cd6: params.err
});
}
function copiedLink(params) {
return sendEvent('sender', 'copied', {
cd4: params.location
});
}
function exitEvent(target) {
return sendEvent(category(), 'exited', {
cd3: urlToMetric(target.currentTarget.href)
function deletedUpload(ownedFile) {
return addEvent('client_delete', {
age: Math.floor((Date.now() - ownedFile.createdAt) / HOUR),
downloaded: ownedFile.dtotal > 0,
status: 'ok'
});
}
function experimentEvent(params) {
return sendEvent(category(), 'experiment', params);
return addEvent('client_experiment', params);
}
// eslint-disable-next-line no-unused-vars
function addExitHandlers() {
const links = Array.from(document.querySelectorAll('a'));
links.forEach(l => {
if (/^http/.test(l.getAttribute('href'))) {
l.addEventListener('click', exitEvent);
}
function submittedSignup(params) {
return addEvent('client_login', {
status: 'ok',
trigger: params.trigger
});
}
function restart(state) {
setReferrer(state);
return sendEvent(category(), 'restarted', {
cd2: state
function canceledSignup(params) {
return addEvent('client_login', {
status: 'cancel',
trigger: params.trigger
});
}
function loggedOut(params) {
addEvent('client_logout', {
status: 'ok',
trigger: params.trigger
});
// flush events and start new anon session
submitEvents();
session_id = Date.now();
}
export {
copiedLink,
startedUpload,
cancelledUpload,
stoppedUpload,
completedUpload,
changedDownloadLimit,
deletedUpload,
startedDownload,
cancelledDownload,
stoppedDownload,
completedDownload,
addedPassword,
restart,
unsupported
submittedSignup,
canceledSignup,
loggedOut
};

View File

@@ -4,11 +4,14 @@ import { del, fileInfo, setParams, setPassword } from './api';
export default class OwnedFile {
constructor(obj) {
if (!obj.manifest) {
throw new Error('invalid file object');
}
this.id = obj.id;
this.url = obj.url;
this.name = obj.name;
this.size = obj.size;
this.type = obj.type;
this.manifest = obj.manifest;
this.time = obj.time;
this.speed = obj.speed;
this.createdAt = obj.createdAt;
@@ -18,6 +21,15 @@ export default class OwnedFile {
this.dtotal = obj.dtotal || 0;
this.keychain = new Keychain(obj.secretKey, obj.nonce);
this._hasPassword = !!obj.hasPassword;
this.timeLimit = obj.timeLimit;
}
get hasPassword() {
return !!this._hasPassword;
}
get expired() {
return this.dlimit === this.dtotal || Date.now() > this.expiresAt;
}
async setPassword(password) {
@@ -38,19 +50,17 @@ export default class OwnedFile {
return del(this.id, this.ownerToken);
}
changeLimit(dlimit) {
changeLimit(dlimit, user = {}) {
if (this.dlimit !== dlimit) {
this.dlimit = dlimit;
return setParams(this.id, this.ownerToken, { dlimit });
return setParams(this.id, this.ownerToken, user.bearerToken, { dlimit });
}
return Promise.resolve(true);
}
get hasPassword() {
return !!this._hasPassword;
}
async updateDownloadCount() {
const oldTotal = this.dtotal;
const oldLimit = this.dlimit;
try {
const result = await fileInfo(this.id, this.ownerToken);
this.dtotal = result.dtotal;
@@ -61,6 +71,7 @@ export default class OwnedFile {
}
// ignore other errors
}
return oldTotal !== this.dtotal || oldLimit !== this.dlimit;
}
toJSON() {
@@ -69,7 +80,7 @@ export default class OwnedFile {
url: this.url,
name: this.name,
size: this.size,
type: this.type,
manifest: this.manifest,
time: this.time,
speed: this.speed,
createdAt: this.createdAt,
@@ -78,7 +89,8 @@ export default class OwnedFile {
ownerToken: this.ownerToken,
dlimit: this.dlimit,
dtotal: this.dtotal,
hasPassword: this.hasPassword
hasPassword: this.hasPassword,
timeLimit: this.timeLimit
};
}
}

View File

@@ -1,5 +0,0 @@
const html = require('choo/html');
module.exports = function() {
return html`<div></div>`;
};

View File

@@ -1,26 +0,0 @@
const html = require('choo/html');
const progress = require('../../templates/progress');
const { fadeOut } = require('../../utils');
module.exports = function(state, emit) {
return html`
<div class="page effect--fadeIn">
<div class="title">
${state.translate('downloadFinish')}
</div>
<div class="description"></div>
${progress(1)}
<div class="progressSection">
<div class="progressSection__text"></div>
</div>
<a class="link link--action"
href="/"
onclick=${sendNew}>${state.translate('sendYourFilesLink')}</a>
</div>`;
async function sendNew(e) {
e.preventDefault();
await fadeOut('.page');
emit('pushState', '/');
}
};

View File

@@ -1,42 +0,0 @@
const html = require('choo/html');
const progress = require('../../templates/progress');
const { bytes } = require('../../utils');
module.exports = function(state, emit) {
const transfer = state.transfer;
const cancelBtn = html`
<button
id="cancel"
class="btn btn--cancel"
title="${state.translate('deletePopupCancel')}"
onclick=${cancel}>
${state.translate('deletePopupCancel')}
</button>`;
return html`
<div class="page effect--fadeIn">
<div class="title">
${state.translate('downloadingPageProgress', {
filename: state.fileInfo.name,
size: bytes(state.fileInfo.size)
})}
</div>
<div class="description">
${state.translate('downloadingPageMessage')}
</div>
${progress(transfer.progressRatio, transfer.progressIndefinite)}
<div class="progressSection">
<div class="progressSection__text">
${state.translate(transfer.msg, transfer.sizes)}
</div>
${transfer.state === 'downloading' ? cancelBtn : null}
</div>
</div>
`;
function cancel() {
const btn = document.getElementById('cancel');
btn.remove();
emit('cancel');
}
};

View File

@@ -1,10 +0,0 @@
const html = require('choo/html');
const assets = require('../../../common/assets');
module.exports = function(state) {
return html`
<div class="page">
<div class="title">${state.translate('errorPageHeader')}</div>
<img src="${assets.get('illustration_error.svg')}"/>
</div>`;
};

View File

@@ -1,32 +0,0 @@
const html = require('choo/html');
const raw = require('choo/html/raw');
module.exports = function(state) {
return html`
<div>
<div class="title">${state.translate('legalHeader')}</div>
${raw(
replaceLinks(state.translate('legalNoticeTestPilot'), [
'https://testpilot.firefox.com/terms',
'https://testpilot.firefox.com/privacy',
'https://testpilot.firefox.com/experiments/send'
])
)}
${raw(
replaceLinks(state.translate('legalNoticeMozilla'), [
'https://www.mozilla.org/privacy/websites/',
'https://www.mozilla.org/about/legal/terms/mozilla/'
])
)}
</div>
`;
};
function replaceLinks(str, urls) {
let i = 0;
const s = str.replace(
/<a>([^<]+)<\/a>/g,
(m, v) => `<a href="${urls[i++]}">${v}</a>`
);
return `<div class="description">${s}</div>`;
}

View File

@@ -1,16 +0,0 @@
const html = require('choo/html');
const assets = require('../../../common/assets');
module.exports = function(state) {
return html`
<div class="page">
<div class="title">${state.translate('expiredPageHeader')}</div>
<img src="${assets.get('illustration_expired.svg')}" id="expired-img">
<div class="description">
${state.translate('uploadPageExplainer')}
</div>
<a class="link link--action" href="/">
${state.translate('sendYourFilesLink')}
</a>
</div>`;
};

View File

@@ -1,40 +0,0 @@
const html = require('choo/html');
const assets = require('../../../common/assets');
const { bytes } = require('../../utils');
module.exports = function(state, pageAction) {
const fileInfo = state.fileInfo;
const size = fileInfo.size
? state.translate('downloadFileSize', { size: bytes(fileInfo.size) })
: '';
const title = fileInfo.name
? state.translate('downloadFileName', { filename: fileInfo.name })
: state.translate('downloadFileTitle');
const info = html`
<div id="dl-file"
data-nonce="${fileInfo.nonce}"
data-requires-password="${fileInfo.requiresPassword}"></div>`;
if (!pageAction) {
return info;
}
return html`
<div class="page">
<div class="title">
<span>${title}</span>
<span>${' ' + size}</span>
</div>
<div class="description">${state.translate('downloadMessage')}</div>
<img
src="${assets.get('illustration_download.svg')}"
title="${state.translate('downloadAltText')}"/>
${pageAction}
<a class="link link--action" href="/">
${state.translate('sendYourFilesLink')}
</a>
${info}
</div>
`;
};

View File

@@ -1,112 +0,0 @@
/* global EXPIRE_SECONDS */
const html = require('choo/html');
const raw = require('choo/html/raw');
const assets = require('../../../common/assets');
const notFound = require('../notFound');
const setPasswordSection = require('../../templates/setPasswordSection');
const selectbox = require('../../templates/selectbox');
const deletePopup = require('../../templates/popup');
const { allowedCopy, delay, fadeOut } = require('../../utils');
module.exports = function(state, emit) {
const file = state.storage.getFileById(state.params.id);
if (!file) {
return notFound(state, emit);
}
return html`
<div id="shareWrapper" class="effect--fadeIn">
${expireInfo(file, state.translate, emit)}
<div class="sharePage">
<div class="sharePage__copyText">
${state.translate('copyUrlFormLabelWithName', { filename: file.name })}
</div>
<div class="copySection">
<input
id="fileUrl"
class="copySection__url"
type="url"
value="${file.url}"
readonly="true"/>
<button id="copyBtn"
class="inputBtn inputBtn--copy"
title="${state.translate('copyUrlFormButton')}"
onclick=${copyLink}>${state.translate('copyUrlFormButton')}</button>
</div>
${setPasswordSection(state, emit)}
<button
class="btn btn--delete"
title="${state.translate('deleteFileButton')}"
onclick=${showPopup}>${state.translate('deleteFileButton')}
</button>
<div class="sharePage__deletePopup">
${deletePopup(
state.translate('deletePopupText'),
state.translate('deletePopupYes'),
state.translate('deletePopupCancel'),
deleteFile
)}
</div>
<a class="link link--action"
href="/"
onclick=${sendNew}>${state.translate('sendAnotherFileLink')}</a>
</div>
</div>
`;
function showPopup() {
const popup = document.querySelector('.popup');
popup.classList.add('popup--show');
popup.focus();
}
async function sendNew(e) {
e.preventDefault();
await fadeOut('#shareWrapper');
emit('pushState', '/');
}
async function copyLink() {
if (allowedCopy()) {
emit('copy', { url: file.url, location: 'success-screen' });
const input = document.getElementById('fileUrl');
input.disabled = true;
input.classList.add('input--copied');
const copyBtn = document.getElementById('copyBtn');
copyBtn.disabled = true;
copyBtn.classList.add('inputBtn--copied');
copyBtn.replaceChild(
html`<img src="${assets.get('check-16.svg')}" class="cursor--pointer">`,
copyBtn.firstChild
);
await delay(2000);
input.disabled = false;
input.classList.remove('input--copied');
copyBtn.disabled = false;
copyBtn.classList.remove('inputBtn--copied');
copyBtn.textContent = state.translate('copyUrlFormButton');
}
}
async function deleteFile() {
emit('delete', { file, location: 'success-screen' });
await fadeOut('#shareWrapper');
emit('pushState', '/');
}
};
function expireInfo(file, translate, emit) {
const hours = Math.floor(EXPIRE_SECONDS / 60 / 60);
const el = html`<div class="title">${raw(
translate('expireInfo', {
downloadCount: '<select></select>',
timespan: translate('timespanHours', { num: hours })
})
)}</div>`;
const select = el.querySelector('select');
const options = [1, 2, 3, 4, 5, 20].filter(i => i > (file.dtotal || 0));
const t = num => translate('downloadCount', { num });
const changed = value => emit('changeLimit', { file, value });
el.replaceChild(selectbox(file.dlimit || 1, options, t, changed), select);
return el;
}

View File

@@ -1,112 +0,0 @@
.sharePage {
margin: 0 auto;
display: flex;
justify-content: center;
flex-direction: column;
width: 100%;
max-width: 640px;
}
.sharePage__copyText {
align-self: flex-start;
margin-top: 60px;
margin-bottom: 10px;
color: var(--textColor);
max-width: 614px;
word-wrap: break-word;
}
.sharePage__deletePopup {
position: relative;
align-self: center;
bottom: 50px;
}
.copySection {
display: flex;
flex-wrap: nowrap;
width: 100%;
}
.copySection__url {
flex: 1;
height: 56px;
border: 1px solid var(--primaryControlBGColor);
border-radius: 6px 0 0 6px;
font-size: 20px;
color: var(--inputTextColor);
font-family: 'SF Pro Text', sans-serif;
letter-spacing: 0;
line-height: 23px;
font-weight: 300;
padding-left: 10px;
}
.copySection__url:disabled {
border: 1px solid var(--successControlBGColor);
background: var(--successControlFGColor);
}
.inputBtn--copy {
flex: 0 1 165px;
padding-bottom: 4px;
}
.input--copied {
border-color: var(--successControlBGColor);
}
.inputBtn--copied,
.inputBtn--copied:hover {
background: var(--successControlBGColor);
border: 1px solid var(--successControlBGColor);
color: var(--successControlFGColor);
}
.btn--delete {
align-self: center;
width: 176px;
height: 44px;
background: #fff;
border-color: rgba(12, 12, 13, 0.3);
margin-top: 50px;
margin-bottom: 12px;
color: #313131;
}
.btn--delete:hover {
background: #efeff1;
}
@media (max-device-width: 768px), (max-width: 768px) {
.copySection {
width: 100%;
}
.copySection__url {
font-size: 18px;
}
}
@media (max-device-width: 520px), (max-width: 520px) {
.copySection {
width: 100%;
flex-direction: column;
padding-left: 0;
}
.copySection__url {
font-size: 22px;
padding: 15px 10px;
border-radius: 6px 6px 0 0;
}
.sharePage__copyText {
text-align: center;
}
.inputBtn--copy {
border-radius: 0 0 6px 6px;
flex: 0 1 65px;
}
}

View File

@@ -1,67 +0,0 @@
const html = require('choo/html');
const assets = require('../../../common/assets');
module.exports = function(state) {
let strings = {};
let why = '';
let url = '';
let buttonAction = '';
if (state.params.reason !== 'outdated') {
strings = unsupportedStrings(state);
why = html`
<div class="description">
<a href="https://github.com/mozilla/send/blob/master/docs/faq.md#why-is-my-browser-not-supported">
${state.translate('notSupportedLink')}
</a>
</div>`;
url =
'https://www.mozilla.org/firefox/new/?utm_campaign=send-acquisition&utm_medium=referral&utm_source=send.firefox.com';
buttonAction = html`
<div class="firefoxDownload__action">
Firefox<br><span class="firefoxDownload__text">${strings.button}</span>
</div>`;
} else {
strings = outdatedStrings(state);
url = 'https://support.mozilla.org/kb/update-firefox-latest-version';
buttonAction = html`
<div class="firefoxDownload__action">
${strings.button}
</div>`;
}
return html`
<div class="unsupportedPage">
<div class="title">${strings.title}</div>
<div class="description">
${strings.description}
</div>
${why}
<a href="${url}" class="firefoxDownload">
<img
src="${assets.get('firefox_logo-only.svg')}"
class="firefoxDownload__logo"
alt="Firefox"/>
${buttonAction}
</a>
<div class="unsupportedPage__info">
${strings.explainer}
</div>
</div>`;
};
function outdatedStrings(state) {
return {
title: state.translate('notSupportedHeader'),
description: state.translate('notSupportedOutdatedDetail'),
button: state.translate('updateFirefox'),
explainer: state.translate('uploadPageExplainer')
};
}
function unsupportedStrings(state) {
return {
title: state.translate('notSupportedHeader'),
description: state.translate('notSupportedDetail'),
button: state.translate('downloadFirefoxButtonSub'),
explainer: state.translate('uploadPageExplainer')
};
}

View File

@@ -1,49 +0,0 @@
.unsupportedPage {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
.unsupportedPage__info {
font-size: 13px;
line-height: 23px;
text-align: center;
color: var(--lightTextColor);
margin: 0 auto 23px;
}
.firefoxDownload {
margin-bottom: 181px;
height: 80px;
background: #98e02b;
border-radius: 3px;
cursor: pointer;
border: 0;
box-shadow: 0 5px 3px rgb(234, 234, 234);
font-family: 'Fira Sans', 'segoe ui', sans-serif;
font-weight: 500;
color: var(--primaryControlFGColor);
font-size: 26px;
display: flex;
justify-content: center;
align-items: center;
line-height: 1;
padding: 0 25px;
}
.firefoxDownload__logo {
width: 70px;
}
.firefoxDownload__action {
text-align: left;
margin-left: 20.4px;
}
.firefoxDownload__text {
font-family: 'Fira Sans', 'segoe ui', sans-serif;
font-weight: 300;
font-size: 18px;
letter-spacing: -0.69px;
}

View File

@@ -1,39 +0,0 @@
const html = require('choo/html');
const progress = require('../../templates/progress');
const { bytes } = require('../../utils');
module.exports = function(state, emit) {
const transfer = state.transfer;
return html`
<div class="page effect--fadeIn">
<div class="title">
${state.translate('uploadingPageProgress', {
filename: transfer.file.name,
size: bytes(transfer.file.size)
})}
</div>
<div class="description"></div>
${progress(transfer.progressRatio, transfer.progressIndefinite)}
<div class="progressSection">
<div class="progressSection__text">
${state.translate(transfer.msg, transfer.sizes)}
</div>
<button
id="cancel-upload"
class="btn btn--cancel"
title="${state.translate('uploadingPageCancel')}"
onclick=${cancel}>
${state.translate('uploadingPageCancel')}
</button>
</div>
</div>
`;
function cancel() {
const btn = document.getElementById('cancel-upload');
btn.disabled = true;
btn.textContent = state.translate('uploadCancelNotification');
emit('cancel');
}
};

View File

@@ -1,84 +0,0 @@
/* global MAXFILESIZE */
const html = require('choo/html');
const assets = require('../../../common/assets');
const fileList = require('../../templates/fileList');
const { bytes, fadeOut } = require('../../utils');
module.exports = function(state, emit) {
// the page flickers if both the server and browser set 'effect--fadeIn'
const fade = state.layout ? '' : 'effect--fadeIn';
return html`
<div id="page-one" class="${fade}">
<div class="title">${state.translate('uploadPageHeader')}</div>
<div class="description">
<div>${state.translate('uploadPageExplainer')}</div>
<a
href="https://testpilot.firefox.com/experiments/send"
class="link">
${state.translate('uploadPageLearnMore')}
</a>
</div>
<div class="uploadArea"
ondragover=${dragover}
ondragleave=${dragleave}>
<img
src="${assets.get('upload.svg')}"
title="${state.translate('uploadSvgAlt')}"/>
<div class="uploadArea__msg">
${state.translate('uploadPageDropMessage')}
</div>
<span class="uploadArea__sizeMsg">
${state.translate('uploadPageSizeMessage')}
</span>
<input id="file-upload"
class="inputFile"
type="file"
name="fileUploaded"
onfocus=${onfocus}
onblur=${onblur}
onchange=${upload} />
<label for="file-upload"
class="btn btn--file"
title="${state.translate('uploadPageBrowseButton1')}">
${state.translate('uploadPageBrowseButton1')}
</label>
</div>
${fileList(state, emit)}
</div>
`;
function dragover(event) {
const div = document.querySelector('.uploadArea');
div.classList.add('uploadArea--dragging');
}
function dragleave(event) {
const div = document.querySelector('.uploadArea');
div.classList.remove('uploadArea--dragging');
}
function onfocus(event) {
event.target.classList.add('inputFile--focused');
}
function onblur(event) {
event.target.classList.remove('inputFile--focused');
}
async function upload(event) {
event.preventDefault();
const target = event.target;
const file = target.files[0];
if (file.size === 0) {
return;
}
if (file.size > MAXFILESIZE) {
// eslint-disable-next-line no-alert
alert(state.translate('fileTooBig', { size: bytes(MAXFILESIZE) }));
return;
}
await fadeOut('#page-one');
emit('upload', { file, type: 'click' });
}
};

View File

@@ -1,65 +0,0 @@
.uploadArea {
border: 3px dashed rgba(0, 148, 251, 0.5);
margin: 0 auto 10px;
height: 255px;
border-radius: 4px;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
text-align: center;
transition: transform 150ms;
padding: 15px;
}
.uploadArea__msg {
font-size: 22px;
color: var(--lightTextColor);
margin: 20px 0 10px;
font-family: 'SF Pro Text', sans-serif;
}
.uploadArea__sizeMsg {
font-style: italic;
font-size: 12px;
line-height: 16px;
color: var(--lightTextColor);
margin-bottom: 22px;
}
.uploadArea--dragging {
border: 5px dashed rgba(0, 148, 251, 0.5);
height: 251px;
transform: scale(1.04);
border-radius: 4.2px;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
text-align: center;
}
.uploadArea--dragging * {
pointer-events: none;
}
.btn--file {
font-size: 20px;
min-width: 240px;
height: 60px;
display: flex;
justify-content: center;
align-items: center;
padding: 0 10px;
}
.inputFile {
opacity: 0;
position: absolute;
}
.inputFile--focused + .btn--file {
background-color: var(--primaryControlHoverColor);
outline: 1px dotted #000;
outline: -webkit-focus-ring-color auto 5px;
}

View File

@@ -1,25 +1,36 @@
/* global MAXFILESIZE */
import { bytes } from './utils';
function getString(item) {
return new Promise(resolve => {
item.getAsString(resolve);
});
}
export default function(state, emitter) {
window.addEventListener('paste', event => {
window.addEventListener('paste', async event => {
if (state.route !== '/' || state.uploading) return;
if (['password', 'text', 'email'].includes(event.target.type)) return;
for (const item of event.clipboardData.items) {
if (!item.type.includes('image')) continue;
const file = item.getAsFile();
if (!file) continue; // Sometimes null
if (file.size > MAXFILESIZE) {
// eslint-disable-next-line no-alert
alert(state.translate('fileTooBig', { size: bytes(MAXFILESIZE) }));
continue;
const items = Array.from(event.clipboardData.items);
const transferFiles = items.filter(item => item.kind === 'file');
const strings = items.filter(item => item.kind === 'string');
if (transferFiles.length) {
const promises = transferFiles.map(async (f, i) => {
const blob = f.getAsFile();
if (!blob) {
return null;
}
const name = await getString(strings[i]);
const file = new File([blob], name, { type: blob.type });
return file;
});
const files = (await Promise.all(promises)).filter(f => !!f);
if (files.length) {
emitter.emit('addFiles', { files });
}
emitter.emit('upload', { file, type: 'paste' });
return; // return here since only one file is allowed to be uploaded at a time
} else if (strings.length) {
strings[0].getAsString(s => {
const file = new File([s], 'pasted.txt', { type: 'text/plain' });
emitter.emit('addFiles', { files: [file] });
});
}
});
}

View File

@@ -2,7 +2,7 @@
`app/` contains the browser code that gets bundled into `app.[hash].js`. It's got all the logic, crypto, and UI. All of it gets used in the browser, and some of it by the server for server side rendering.
The main entrypoint for the browser is [main.js](./main.js) and on the server [routes/index.js](./routes/index.js) gets imported by [/server/routes/pages.js](../server/routes/pages.js)
The main entrypoint for the browser is [main.js](./main.js) and on the server [routes.js](./routes.js) is imported by [/server/routes/pages.js](../server/routes/pages.js)
- `pages` contains display logic an markup for pages
- `routes` contains route definitions and logic

23
app/routes.js Normal file
View File

@@ -0,0 +1,23 @@
const choo = require('choo');
const download = require('./ui/download');
const body = require('./ui/body');
module.exports = function(app = choo({ hash: true })) {
app.route('/', body(require('./ui/home')));
app.route('/download/:id', body(download));
app.route('/download/:id/:key', body(download));
app.route('/unsupported/:reason', body(require('./ui/unsupported')));
app.route('/legal', body(require('./ui/legal')));
app.route('/error', body(require('./ui/error')));
app.route('/blank', body(require('./ui/blank')));
app.route('/oauth', function(state, emit) {
emit('authenticate', state.query.code, state.query.state);
});
app.route('/login', function(state, emit) {
emit('replaceState', '/');
setTimeout(() => emit('render'));
});
app.route('/report', body(require('./ui/report')));
app.route('*', body(require('./ui/notFound')));
return app;
};

View File

@@ -1,60 +0,0 @@
const preview = require('../pages/preview');
const download = require('../pages/download');
const notFound = require('../pages/notFound');
const downloadPassword = require('../templates/downloadPassword');
const downloadButton = require('../templates/downloadButton');
function hasFileInfo() {
return !!document.getElementById('dl-file');
}
function getFileInfoFromDOM() {
const el = document.getElementById('dl-file');
if (!el) {
return null;
}
return {
nonce: el.getAttribute('data-nonce'),
requiresPassword: !!+el.getAttribute('data-requires-password')
};
}
function createFileInfo(state) {
const metadata = getFileInfoFromDOM();
return {
id: state.params.id,
secretKey: state.params.key,
nonce: metadata.nonce,
requiresPassword: metadata.requiresPassword
};
}
module.exports = function(state, emit) {
if (!state.fileInfo) {
// This is a fresh page load
// We need to parse the file info from the server's html
if (!hasFileInfo()) {
return notFound(state, emit);
}
state.fileInfo = createFileInfo(state);
if (!state.fileInfo.requiresPassword) {
emit('getMetadata');
}
}
let pageAction = null; //default state: we don't have file metadata
if (state.transfer) {
const s = state.transfer.state;
if (['downloading', 'decrypting', 'complete'].indexOf(s) > -1) {
// Downloading is in progress
return download(state, emit);
}
// we have file metadata
pageAction = downloadButton(state, emit);
} else if (state.fileInfo.requiresPassword && !state.fileInfo.password) {
// we're waiting on the user for a valid password
pageAction = downloadPassword(state, emit);
}
return preview(state, pageAction);
};

View File

@@ -1,9 +0,0 @@
const welcome = require('../pages/welcome');
const upload = require('../pages/upload');
module.exports = function(state, emit) {
if (state.uploading) {
return upload(state, emit);
}
return welcome(state, emit);
};

View File

@@ -1,58 +0,0 @@
const choo = require('choo');
const html = require('choo/html');
const nanotiming = require('nanotiming');
const download = require('./download');
const header = require('../templates/header');
const footer = require('../templates/footer');
const fxPromo = require('../templates/fxPromo');
nanotiming.disabled = true;
const app = choo();
function banner(state, emit) {
if (state.promo && !state.route.startsWith('/unsupported/')) {
return fxPromo(state, emit);
}
}
function body(template) {
return function(state, emit) {
const b = html`<body>
${banner(state, emit)}
${header(state)}
<main class="main">
<noscript>
<div class="noscript">
<h2>${state.translate('javascriptRequired')}</h2>
<p>
<a class="link" href="https://github.com/mozilla/send/blob/master/docs/faq.md#why-does-firefox-send-require-javascript">
${state.translate('whyJavascript')}
</a>
</p>
<p>${state.translate('enableJavascript')}</p>
</div>
</noscript>
${template(state, emit)}
</main>
${footer(state)}
</body>`;
if (state.layout) {
// server side only
return state.layout(state, b);
}
return b;
};
}
app.route('/', body(require('./home')));
app.route('/share/:id', body(require('../pages/share')));
app.route('/download/:id', body(download));
app.route('/download/:id/:key', body(download));
app.route('/completed', body(require('../pages/completed')));
app.route('/unsupported/:reason', body(require('../pages/unsupported')));
app.route('/legal', body(require('../pages/legal')));
app.route('/error', body(require('../pages/error')));
app.route('/blank', body(require('../pages/blank')));
app.route('*', body(require('../pages/notFound')));
module.exports = app;

175
app/serviceWorker.js Normal file
View File

@@ -0,0 +1,175 @@
import assets from '../common/assets';
import { version } from '../package.json';
import Keychain from './keychain';
import { downloadStream } from './api';
import { transformStream } from './streams';
import Zip from './zip';
import contentDisposition from 'content-disposition';
let noSave = false;
const map = new Map();
const IMAGES = /.*\.(png|svg|jpg)$/;
const VERSIONED_ASSET = /\.[A-Fa-f0-9]{8}\.(js|css|png|svg|jpg)(#\w+)?$/;
const DOWNLOAD_URL = /\/api\/download\/([A-Fa-f0-9]{4,})/;
const FONT = /\.woff2?$/;
self.addEventListener('install', () => {
self.skipWaiting();
});
self.addEventListener('activate', event => {
event.waitUntil(self.clients.claim().then(precache));
});
async function decryptStream(id) {
const file = map.get(id);
if (!file) {
return new Response(null, { status: 400 });
}
try {
let size = file.size;
let type = file.type;
const keychain = new Keychain(file.key, file.nonce);
if (file.requiresPassword) {
keychain.setPassword(file.password, file.url);
}
file.download = downloadStream(id, file.dlToken);
const body = await file.download.result;
const decrypted = keychain.decryptStream(body);
let zipStream = null;
if (file.type === 'send-archive') {
const zip = new Zip(file.manifest, decrypted);
zipStream = zip.stream;
type = 'application/zip';
size = zip.size;
}
const responseStream = transformStream(
zipStream || decrypted,
{
transform(chunk, controller) {
file.progress += chunk.length;
controller.enqueue(chunk);
}
},
function oncancel() {
// NOTE: cancel doesn't currently fire on chrome
// https://bugs.chromium.org/p/chromium/issues/detail?id=638494
file.download.cancel();
map.delete(id);
}
);
const headers = {
'Content-Disposition': contentDisposition(file.filename),
'Content-Type': type,
'Content-Length': size
};
return new Response(responseStream, { headers });
} catch (e) {
if (noSave) {
return new Response(null, { status: e.message });
}
return new Response(null, {
status: 302,
headers: {
Location: `/download/${id}/#${file.key}`
}
});
}
}
async function precache() {
try {
await cleanCache();
const cache = await caches.open(version);
const images = assets.match(IMAGES);
await cache.addAll(images);
} catch (e) {
console.error(e);
// cache will get populated on demand
}
}
async function cleanCache() {
const oldCaches = await caches.keys();
for (const c of oldCaches) {
if (c !== version) {
await caches.delete(c);
}
}
}
function cacheable(url) {
return VERSIONED_ASSET.test(url) || FONT.test(url);
}
async function cachedOrFetched(req) {
const cache = await caches.open(version);
const cached = await cache.match(req);
if (cached) {
return cached;
}
const fetched = await fetch(req);
if (fetched.ok && cacheable(req.url)) {
cache.put(req, fetched.clone());
}
return fetched;
}
self.onfetch = event => {
const req = event.request;
if (req.method !== 'GET') return;
const url = new URL(req.url);
const dlmatch = DOWNLOAD_URL.exec(url.pathname);
if (dlmatch) {
event.respondWith(decryptStream(dlmatch[1]));
} else if (cacheable(url.pathname)) {
event.respondWith(cachedOrFetched(req));
}
};
self.onmessage = event => {
if (event.data.request === 'init') {
noSave = event.data.noSave;
const info = {
key: event.data.key,
nonce: event.data.nonce,
filename: event.data.filename,
requiresPassword: event.data.requiresPassword,
password: event.data.password,
url: event.data.url,
type: event.data.type,
manifest: event.data.manifest,
size: event.data.size,
dlToken: event.data.dlToken,
progress: 0
};
map.set(event.data.id, info);
event.ports[0].postMessage('file info received');
} else if (event.data.request === 'progress') {
const file = map.get(event.data.id);
if (!file) {
event.ports[0].postMessage({ error: 'cancelled' });
} else {
if (file.progress === file.size) {
map.delete(event.data.id);
}
event.ports[0].postMessage({ progress: file.progress });
}
} else if (event.data.request === 'cancel') {
const file = map.get(event.data.id);
if (file) {
if (file.download) {
file.download.cancel();
}
map.delete(event.data.id);
}
event.ports[0].postMessage('download cancelled');
}
};

Some files were not shown because too many files have changed in this diff Show More