From efd97becb615cae98a20aa4d1ea6e5d9517caa4b Mon Sep 17 00:00:00 2001 From: ggurdin Date: Mon, 22 Dec 2025 09:52:00 -0500 Subject: [PATCH] feat: custom SSO login/signup dialog --- lib/l10n/intl_ar.arb | 15 ++ lib/l10n/intl_be.arb | 15 ++ lib/l10n/intl_bn.arb | 15 ++ lib/l10n/intl_bo.arb | 15 ++ lib/l10n/intl_ca.arb | 15 ++ lib/l10n/intl_cs.arb | 15 ++ lib/l10n/intl_da.arb | 15 ++ lib/l10n/intl_de.arb | 15 ++ lib/l10n/intl_el.arb | 15 ++ lib/l10n/intl_en.arb | 5 +- lib/l10n/intl_eo.arb | 15 ++ lib/l10n/intl_es.arb | 15 ++ lib/l10n/intl_et.arb | 15 ++ lib/l10n/intl_eu.arb | 15 ++ lib/l10n/intl_fa.arb | 15 ++ lib/l10n/intl_fi.arb | 15 ++ lib/l10n/intl_fil.arb | 15 ++ lib/l10n/intl_fr.arb | 15 ++ lib/l10n/intl_ga.arb | 15 ++ lib/l10n/intl_gl.arb | 15 ++ lib/l10n/intl_he.arb | 15 ++ lib/l10n/intl_hi.arb | 15 ++ lib/l10n/intl_hr.arb | 15 ++ lib/l10n/intl_hu.arb | 15 ++ lib/l10n/intl_ia.arb | 15 ++ lib/l10n/intl_id.arb | 15 ++ lib/l10n/intl_ie.arb | 15 ++ lib/l10n/intl_it.arb | 15 ++ lib/l10n/intl_ja.arb | 15 ++ lib/l10n/intl_ka.arb | 15 ++ lib/l10n/intl_ko.arb | 15 ++ lib/l10n/intl_lt.arb | 15 ++ lib/l10n/intl_lv.arb | 15 ++ lib/l10n/intl_nb.arb | 15 ++ lib/l10n/intl_nl.arb | 15 ++ lib/l10n/intl_pl.arb | 15 ++ lib/l10n/intl_pt.arb | 15 ++ lib/l10n/intl_pt_BR.arb | 15 ++ lib/l10n/intl_pt_PT.arb | 15 ++ lib/l10n/intl_ro.arb | 15 ++ lib/l10n/intl_ru.arb | 15 ++ lib/l10n/intl_sk.arb | 15 ++ lib/l10n/intl_sl.arb | 15 ++ lib/l10n/intl_sr.arb | 15 ++ lib/l10n/intl_sv.arb | 15 ++ lib/l10n/intl_ta.arb | 15 ++ lib/l10n/intl_te.arb | 15 ++ lib/l10n/intl_th.arb | 15 ++ lib/l10n/intl_tr.arb | 15 ++ lib/l10n/intl_uk.arb | 15 ++ lib/l10n/intl_vi.arb | 15 ++ lib/l10n/intl_yue.arb | 15 ++ lib/l10n/intl_zh.arb | 15 ++ lib/l10n/intl_zh_Hant.arb | 15 ++ lib/pages/login/login.dart | 14 -- lib/pangea/authentication/p_login.dart | 3 - .../login/pages/login_options_view.dart | 9 +- lib/pangea/login/pages/signup.dart | 17 -- lib/pangea/login/pages/signup_view.dart | 15 +- lib/pangea/login/sso_provider_enum.dart | 35 ++++ lib/pangea/login/widgets/p_sso_button.dart | 165 ++++++++++-------- lib/pangea/login/widgets/p_sso_dialog.dart | 107 ++++++++++++ 62 files changed, 1044 insertions(+), 121 deletions(-) create mode 100644 lib/pangea/login/sso_provider_enum.dart create mode 100644 lib/pangea/login/widgets/p_sso_dialog.dart diff --git a/lib/l10n/intl_ar.arb b/lib/l10n/intl_ar.arb index 0b528fbd1..dcc628179 100644 --- a/lib/l10n/intl_ar.arb +++ b/lib/l10n/intl_ar.arb @@ -10927,5 +10927,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "انتظار اكتمال تسجيل الدخول", + "ssoDialogDesc": "لقد فتحنا علامة تبويب جديدة حتى تتمكن من تسجيل الدخول بأمان.", + "ssoDialogHelpText": "🤔 إذا لم ترَ علامة التبويب الجديدة، يرجى التحقق من مانع النوافذ المنبثقة.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_be.arb b/lib/l10n/intl_be.arb index 4346459b5..3758e403a 100644 --- a/lib/l10n/intl_be.arb +++ b/lib/l10n/intl_be.arb @@ -11809,5 +11809,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Чакаем, пакуль ўваход будзе завершаны", + "ssoDialogDesc": "Мы адкрылі новую ўкладку, каб вы маглі бяспечна ўвайсці.", + "ssoDialogHelpText": "🤔 Калі вы не ўбачылі новую ўкладку, калі ласка, праверце свой блакіроўшчык усплывальных акнаў.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_bn.arb b/lib/l10n/intl_bn.arb index 945dda119..b7abdd146 100644 --- a/lib/l10n/intl_bn.arb +++ b/lib/l10n/intl_bn.arb @@ -11814,5 +11814,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "সাইন ইন সম্পন্ন হওয়ার জন্য অপেক্ষা করছে", + "ssoDialogDesc": "আমরা একটি নতুন ট্যাব খুলেছি যাতে আপনি নিরাপদে সাইন ইন করতে পারেন।", + "ssoDialogHelpText": "🤔 যদি আপনি নতুন ট্যাবটি না দেখেন, দয়া করে আপনার পপআপ ব্লকারটি পরীক্ষা করুন।", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_bo.arb b/lib/l10n/intl_bo.arb index dc814c872..e283c6ef5 100644 --- a/lib/l10n/intl_bo.arb +++ b/lib/l10n/intl_bo.arb @@ -10464,5 +10464,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Nunggu kanggo mlebu rampung", + "ssoDialogDesc": "Kita wis mbukak tab anyar supaya sampeyan bisa mlebu kanthi aman.", + "ssoDialogHelpText": "🤔 Yen sampeyan ora ndeleng tab anyar, mangga priksa pemblokir popup sampeyan.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ca.arb b/lib/l10n/intl_ca.arb index 2a960cffb..856356319 100644 --- a/lib/l10n/intl_ca.arb +++ b/lib/l10n/intl_ca.arb @@ -10734,5 +10734,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Esperant que la signatura es completi", + "ssoDialogDesc": "Hem obert una nova pestanya perquè puguis iniciar sessió de manera segura.", + "ssoDialogHelpText": "🤔 Si no has vist la nova pestanya, si us plau, comprova el teu bloquejador de finestres emergents.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_cs.arb b/lib/l10n/intl_cs.arb index f08016a23..ba3ac69d4 100644 --- a/lib/l10n/intl_cs.arb +++ b/lib/l10n/intl_cs.arb @@ -11317,5 +11317,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Čekání na dokončení přihlášení", + "ssoDialogDesc": "Otevřeli jsme novou kartu, abyste se mohli bezpečně přihlásit.", + "ssoDialogHelpText": "🤔 Pokud jste novou kartu neviděli, zkontrolujte prosím blokátor vyskakovacích oken.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_da.arb b/lib/l10n/intl_da.arb index 317dfb988..252980ab9 100644 --- a/lib/l10n/intl_da.arb +++ b/lib/l10n/intl_da.arb @@ -11771,5 +11771,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Venter på, at login skal fuldføres", + "ssoDialogDesc": "Vi har åbnet en ny fane, så du kan logge ind sikkert.", + "ssoDialogHelpText": "🤔 Hvis du ikke så den nye fane, skal du tjekke din popup-blokker.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_de.arb b/lib/l10n/intl_de.arb index 86e527555..61715eeed 100644 --- a/lib/l10n/intl_de.arb +++ b/lib/l10n/intl_de.arb @@ -10717,5 +10717,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Warten auf den Abschluss der Anmeldung", + "ssoDialogDesc": "Wir haben einen neuen Tab geöffnet, damit Sie sich sicher anmelden können.", + "ssoDialogHelpText": "🤔 Wenn Sie den neuen Tab nicht gesehen haben, überprüfen Sie bitte Ihren Popup-Blocker.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_el.arb b/lib/l10n/intl_el.arb index 58f3aafc5..b9f3278f3 100644 --- a/lib/l10n/intl_el.arb +++ b/lib/l10n/intl_el.arb @@ -11768,5 +11768,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Περιμένοντας την ολοκλήρωση της σύνδεσης", + "ssoDialogDesc": "Ανοίξαμε μια νέα καρτέλα ώστε να μπορέσετε να συνδεθείτε με ασφάλεια.", + "ssoDialogHelpText": "🤔 Αν δεν είδατε τη νέα καρτέλα, παρακαλώ ελέγξτε τον αποκλειστή αναδυόμενων παραθύρων σας.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index ba04f02bf..5b76fa0ac 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -5011,5 +5011,8 @@ "type": "String" } } - } + }, + "ssoDialogTitle": "Waiting for sign in to complete", + "ssoDialogDesc": "We opened a new tab so you can sign in securely.", + "ssoDialogHelpText": "🤔 If you didn't see the new tab, please check your popup blocker." } diff --git a/lib/l10n/intl_eo.arb b/lib/l10n/intl_eo.arb index 29fe0db14..f34a559bd 100644 --- a/lib/l10n/intl_eo.arb +++ b/lib/l10n/intl_eo.arb @@ -11799,5 +11799,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Atendante, ke ensaluto finiĝu", + "ssoDialogDesc": "Ni malfermis novan langeton por ke vi povu ensaluti sekure.", + "ssoDialogHelpText": "🤔 Se vi ne vidis la novan langeton, bonvolu kontroli vian popup-blokilon.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_es.arb b/lib/l10n/intl_es.arb index 4805b0e13..376fd8d1e 100644 --- a/lib/l10n/intl_es.arb +++ b/lib/l10n/intl_es.arb @@ -7944,5 +7944,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Esperando a que se complete el inicio de sesión", + "ssoDialogDesc": "Abrimos una nueva pestaña para que puedas iniciar sesión de forma segura.", + "ssoDialogHelpText": "🤔 Si no viste la nueva pestaña, por favor revisa tu bloqueador de ventanas emergentes.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_et.arb b/lib/l10n/intl_et.arb index 43435e236..3b0d0d31a 100644 --- a/lib/l10n/intl_et.arb +++ b/lib/l10n/intl_et.arb @@ -10981,5 +10981,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Ootame sisselogimise lõpetamist", + "ssoDialogDesc": "Avasime uue vahekaart, et saaksite turvaliselt sisse logida.", + "ssoDialogHelpText": "🤔 Kui te ei näinud uut vahekaarti, kontrollige palun oma hüpikakna blokeerijat.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_eu.arb b/lib/l10n/intl_eu.arb index 5548b9793..a2370eccd 100644 --- a/lib/l10n/intl_eu.arb +++ b/lib/l10n/intl_eu.arb @@ -10710,5 +10710,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Saioa hasi arte itxaroten", + "ssoDialogDesc": "Segurtasunez saioa hasi dezazun, fitxa berri bat ireki dugu.", + "ssoDialogHelpText": "🤔 Fitxa berri hori ikusi ez baduzu, mesedez, begiratu zure pop-up blokeatzailea.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_fa.arb b/lib/l10n/intl_fa.arb index 7d41fca7a..0899d59c3 100644 --- a/lib/l10n/intl_fa.arb +++ b/lib/l10n/intl_fa.arb @@ -11442,5 +11442,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "در حال انتظار برای تکمیل ورود", + "ssoDialogDesc": "ما یک تب جدید باز کردیم تا شما بتوانید به صورت امن وارد شوید.", + "ssoDialogHelpText": "🤔 اگر تب جدید را ندیدید، لطفاً مسدودکننده پاپ آپ خود را بررسی کنید.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_fi.arb b/lib/l10n/intl_fi.arb index cb5ebf101..a517980a1 100644 --- a/lib/l10n/intl_fi.arb +++ b/lib/l10n/intl_fi.arb @@ -11333,5 +11333,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Odotetaan kirjautumisen valmistumista", + "ssoDialogDesc": "Avasimme uuden välilehden, jotta voit kirjautua sisään turvallisesti.", + "ssoDialogHelpText": "🤔 Jos et nähnyt uutta välilehteä, tarkista ponnahdusikkunoiden estäjäsi.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_fil.arb b/lib/l10n/intl_fil.arb index b1553cf4a..b14913c37 100644 --- a/lib/l10n/intl_fil.arb +++ b/lib/l10n/intl_fil.arb @@ -11686,5 +11686,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Naghihintay na makumpleto ang pag-sign in", + "ssoDialogDesc": "Nagbukas kami ng bagong tab upang makapag-sign in ka nang ligtas.", + "ssoDialogHelpText": "🤔 Kung hindi mo nakita ang bagong tab, mangyaring suriin ang iyong popup blocker.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_fr.arb b/lib/l10n/intl_fr.arb index 39ae5468c..e06ad1caa 100644 --- a/lib/l10n/intl_fr.arb +++ b/lib/l10n/intl_fr.arb @@ -11034,5 +11034,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "En attente de la connexion", + "ssoDialogDesc": "Nous avons ouvert un nouvel onglet pour que vous puissiez vous connecter en toute sécurité.", + "ssoDialogHelpText": "🤔 Si vous n'avez pas vu le nouvel onglet, veuillez vérifier votre bloqueur de fenêtres contextuelles.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ga.arb b/lib/l10n/intl_ga.arb index 16b5c83bb..0c509cdcc 100644 --- a/lib/l10n/intl_ga.arb +++ b/lib/l10n/intl_ga.arb @@ -10708,5 +10708,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Ag fanacht le síniú isteach a chríochnú", + "ssoDialogDesc": "Osclóimid cluaisín nua ionas gur féidir leat síniú isteach go sábháilte.", + "ssoDialogHelpText": "🤔 Má chonaic tú an cluaisín nua, seiceáil le do thoil do bhacadóir pop-up.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_gl.arb b/lib/l10n/intl_gl.arb index ebe4a5cca..294b5bfbd 100644 --- a/lib/l10n/intl_gl.arb +++ b/lib/l10n/intl_gl.arb @@ -10707,5 +10707,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Agardando a finalización do inicio de sesión", + "ssoDialogDesc": "Abrimos unha nova pestana para que poidas iniciar sesión de forma segura.", + "ssoDialogHelpText": "🤔 Se non ves a nova pestana, por favor, verifica o teu bloqueador de ventás emerxentes.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_he.arb b/lib/l10n/intl_he.arb index 43358f346..df1960bf4 100644 --- a/lib/l10n/intl_he.arb +++ b/lib/l10n/intl_he.arb @@ -11759,5 +11759,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "ממתינים להשלים את הכניסה", + "ssoDialogDesc": "פתחנו לשונית חדשה כדי שתוכל להיכנס בצורה מאובטחת.", + "ssoDialogHelpText": "🤔 אם לא ראית את הלשונית החדשה, אנא בדוק את חוסם הפופ-אפ שלך.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_hi.arb b/lib/l10n/intl_hi.arb index 9063927f2..2e77b12ac 100644 --- a/lib/l10n/intl_hi.arb +++ b/lib/l10n/intl_hi.arb @@ -11795,5 +11795,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "साइन इन पूरा होने की प्रतीक्षा कर रहे हैं", + "ssoDialogDesc": "हमने एक नया टैब खोला है ताकि आप सुरक्षित रूप से साइन इन कर सकें।", + "ssoDialogHelpText": "🤔 यदि आपने नया टैब नहीं देखा, तो कृपया अपने पॉपअप ब्लॉकर की जांच करें।", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_hr.arb b/lib/l10n/intl_hr.arb index 62982bd08..67c8dec40 100644 --- a/lib/l10n/intl_hr.arb +++ b/lib/l10n/intl_hr.arb @@ -11082,5 +11082,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Čekanje na dovršetak prijave", + "ssoDialogDesc": "Otvorili smo novu karticu kako biste se mogli sigurno prijaviti.", + "ssoDialogHelpText": "🤔 Ako niste vidjeli novu karticu, provjerite svoj blokator iskačućih prozora.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_hu.arb b/lib/l10n/intl_hu.arb index c4bd7a847..b2e9262b6 100644 --- a/lib/l10n/intl_hu.arb +++ b/lib/l10n/intl_hu.arb @@ -10711,5 +10711,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Várakozás a bejelentkezés befejezésére", + "ssoDialogDesc": "Megnyitottunk egy új lapot, hogy biztonságosan be tudj jelentkezni.", + "ssoDialogHelpText": "🤔 Ha nem láttad az új lapot, kérlek ellenőrizd a felugró ablak blokkolódat.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ia.arb b/lib/l10n/intl_ia.arb index fcf458470..2a011e9ec 100644 --- a/lib/l10n/intl_ia.arb +++ b/lib/l10n/intl_ia.arb @@ -11788,5 +11788,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Atingindo para a conclusão do login", + "ssoDialogDesc": "Abrimos uma nova aba para que você possa fazer login com segurança.", + "ssoDialogHelpText": "🤔 Se você não viu a nova aba, verifique seu bloqueador de pop-ups.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_id.arb b/lib/l10n/intl_id.arb index d013308fe..c3bedd000 100644 --- a/lib/l10n/intl_id.arb +++ b/lib/l10n/intl_id.arb @@ -10701,5 +10701,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Menunggu penyelesaian masuk", + "ssoDialogDesc": "Kami membuka tab baru agar Anda dapat masuk dengan aman.", + "ssoDialogHelpText": "🤔 Jika Anda tidak melihat tab baru, silakan periksa pemblokir popup Anda.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ie.arb b/lib/l10n/intl_ie.arb index f72db98fd..ff6d3fa98 100644 --- a/lib/l10n/intl_ie.arb +++ b/lib/l10n/intl_ie.arb @@ -11684,5 +11684,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Acht na sign in a chríochnú", + "ssoDialogDesc": "Osclaíomar cluais nua ionas go bhféadfaidh tú síniú isteach go sábháilte.", + "ssoDialogHelpText": "🤔 Má chonaic tú an cluais nua, seiceáil le do thoil do bhacadóir pop-up.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_it.arb b/lib/l10n/intl_it.arb index c0e0c9d85..4f5e626e1 100644 --- a/lib/l10n/intl_it.arb +++ b/lib/l10n/intl_it.arb @@ -10713,5 +10713,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "In attesa del completamento dell'accesso", + "ssoDialogDesc": "Abbiamo aperto una nuova scheda in modo che tu possa accedere in modo sicuro.", + "ssoDialogHelpText": "🤔 Se non hai visto la nuova scheda, controlla il tuo blocco dei popup.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ja.arb b/lib/l10n/intl_ja.arb index cb17100d8..933551a5c 100644 --- a/lib/l10n/intl_ja.arb +++ b/lib/l10n/intl_ja.arb @@ -11500,5 +11500,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "サインインの完了を待っています", + "ssoDialogDesc": "安全にサインインできるように新しいタブを開きました。", + "ssoDialogHelpText": "🤔 新しいタブが表示されない場合は、ポップアップブロッカーを確認してください。", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ka.arb b/lib/l10n/intl_ka.arb index a457ed892..92f63ee92 100644 --- a/lib/l10n/intl_ka.arb +++ b/lib/l10n/intl_ka.arb @@ -11740,5 +11740,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "მოლოდინი შესვლის დასრულებამდე", + "ssoDialogDesc": "ჩვენ გავხსენით ახალი ჩანართი, რათა უსაფრთხოდ შეხვიდეთ.", + "ssoDialogHelpText": "🤔 თუ ახალი ჩანართი არ გინახავთ, გთხოვთ შეამოწმოთ თქვენი პოპ-აპ ბლოკერი.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ko.arb b/lib/l10n/intl_ko.arb index 97028b92a..dd5512a72 100644 --- a/lib/l10n/intl_ko.arb +++ b/lib/l10n/intl_ko.arb @@ -10818,5 +10818,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "로그인 완료 대기 중", + "ssoDialogDesc": "안전하게 로그인할 수 있도록 새 탭을 열었습니다.", + "ssoDialogHelpText": "🤔 새 탭이 보이지 않으면 팝업 차단기를 확인하세요.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_lt.arb b/lib/l10n/intl_lt.arb index cc1a3055f..72de5c2b2 100644 --- a/lib/l10n/intl_lt.arb +++ b/lib/l10n/intl_lt.arb @@ -11515,5 +11515,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Laukiama, kol prisijungimas bus baigtas", + "ssoDialogDesc": "Atidarėme naują skirtuką, kad galėtumėte saugiai prisijungti.", + "ssoDialogHelpText": "🤔 Jei nematėte naujo skirtuko, patikrinkite savo iššokančių langų blokatorių.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_lv.arb b/lib/l10n/intl_lv.arb index f190f93fc..395caa393 100644 --- a/lib/l10n/intl_lv.arb +++ b/lib/l10n/intl_lv.arb @@ -10696,5 +10696,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Gaidām, kamēr pieteikšanās tiks pabeigta", + "ssoDialogDesc": "Mēs atvērām jaunu cilni, lai jūs varētu droši pieteikties.", + "ssoDialogHelpText": "🤔 Ja neredzējāt jauno cilni, lūdzu, pārbaudiet savu uznirstošo logu bloķētāju.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_nb.arb b/lib/l10n/intl_nb.arb index ef70a930b..4e8c8d816 100644 --- a/lib/l10n/intl_nb.arb +++ b/lib/l10n/intl_nb.arb @@ -11803,5 +11803,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Venter på at påloggingen skal fullføres", + "ssoDialogDesc": "Vi åpnet en ny fane slik at du kan logge inn sikkert.", + "ssoDialogHelpText": "🤔 Hvis du ikke så den nye fanen, vennligst sjekk popup-blokkeringen din.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_nl.arb b/lib/l10n/intl_nl.arb index bc4a2aa0b..53b83987a 100644 --- a/lib/l10n/intl_nl.arb +++ b/lib/l10n/intl_nl.arb @@ -10710,5 +10710,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Wachten op het voltooien van de aanmelding", + "ssoDialogDesc": "We hebben een nieuw tabblad geopend zodat je veilig kunt inloggen.", + "ssoDialogHelpText": "🤔 Als je het nieuwe tabblad niet hebt gezien, controleer dan je pop-up blocker.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_pl.arb b/lib/l10n/intl_pl.arb index 9b434accc..95c392083 100644 --- a/lib/l10n/intl_pl.arb +++ b/lib/l10n/intl_pl.arb @@ -10708,5 +10708,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Czekam na zakończenie logowania", + "ssoDialogDesc": "Otworzyliśmy nową kartę, abyś mógł się zalogować bezpiecznie.", + "ssoDialogHelpText": "🤔 Jeśli nie widzisz nowej karty, sprawdź swój blokadę wyskakujących okienek.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_pt.arb b/lib/l10n/intl_pt.arb index 336f9f8f9..5ff7d1554 100644 --- a/lib/l10n/intl_pt.arb +++ b/lib/l10n/intl_pt.arb @@ -11810,5 +11810,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Aguardando a conclusão do login", + "ssoDialogDesc": "Abrimos uma nova aba para que você possa fazer login com segurança.", + "ssoDialogHelpText": "🤔 Se você não viu a nova aba, verifique seu bloqueador de pop-ups.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_pt_BR.arb b/lib/l10n/intl_pt_BR.arb index ebd640669..7d95be64d 100644 --- a/lib/l10n/intl_pt_BR.arb +++ b/lib/l10n/intl_pt_BR.arb @@ -11068,5 +11068,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Aguardando a conclusão do login", + "ssoDialogDesc": "Abrimos uma nova aba para que você possa fazer login com segurança.", + "ssoDialogHelpText": "🤔 Se você não viu a nova aba, verifique seu bloqueador de pop-ups.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_pt_PT.arb b/lib/l10n/intl_pt_PT.arb index a4454c1d5..fed5efac0 100644 --- a/lib/l10n/intl_pt_PT.arb +++ b/lib/l10n/intl_pt_PT.arb @@ -11739,5 +11739,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Aguardando a conclusão do login", + "ssoDialogDesc": "Abrimos uma nova aba para que você possa fazer login com segurança.", + "ssoDialogHelpText": "🤔 Se você não viu a nova aba, verifique seu bloqueador de pop-ups.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ro.arb b/lib/l10n/intl_ro.arb index 543102900..c926aa697 100644 --- a/lib/l10n/intl_ro.arb +++ b/lib/l10n/intl_ro.arb @@ -11445,5 +11445,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Așteptând finalizarea autentificării", + "ssoDialogDesc": "Am deschis un nou tab pentru a te putea autentifica în siguranță.", + "ssoDialogHelpText": "🤔 Dacă nu ai văzut noul tab, te rugăm să verifici blocatorul de feronete.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ru.arb b/lib/l10n/intl_ru.arb index 270bb965c..96a184b39 100644 --- a/lib/l10n/intl_ru.arb +++ b/lib/l10n/intl_ru.arb @@ -10815,5 +10815,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Ожидание завершения входа", + "ssoDialogDesc": "Мы открыли новую вкладку, чтобы вы могли безопасно войти.", + "ssoDialogHelpText": "🤔 Если вы не видите новую вкладку, пожалуйста, проверьте блокировщик всплывающих окон.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_sk.arb b/lib/l10n/intl_sk.arb index 090ee5e68..1bbf03660 100644 --- a/lib/l10n/intl_sk.arb +++ b/lib/l10n/intl_sk.arb @@ -11794,5 +11794,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Čakáme na dokončenie prihlásenia", + "ssoDialogDesc": "Otvárame novú kartu, aby ste sa mohli prihlásiť bezpečne.", + "ssoDialogHelpText": "🤔 Ak ste nevideli novú kartu, skontrolujte prosím svoj blokovač vyskakovacích okien.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_sl.arb b/lib/l10n/intl_sl.arb index 52352f95d..8c82ce6ff 100644 --- a/lib/l10n/intl_sl.arb +++ b/lib/l10n/intl_sl.arb @@ -11791,5 +11791,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Čakanje na dokončanje prijave", + "ssoDialogDesc": "Odprli smo nov zavihek, da se lahko varno prijavite.", + "ssoDialogHelpText": "🤔 Če niste videli novega zavihka, preverite svoj blokator pojavnih oken.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_sr.arb b/lib/l10n/intl_sr.arb index 334877dc5..fce203742 100644 --- a/lib/l10n/intl_sr.arb +++ b/lib/l10n/intl_sr.arb @@ -11812,5 +11812,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Čekanje na završetak prijavljivanja", + "ssoDialogDesc": "Otvorili smo novu karticu kako biste se mogli sigurno prijaviti.", + "ssoDialogHelpText": "🤔 Ako niste videli novu karticu, molimo proverite svoj blokator iskačućih prozora.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_sv.arb b/lib/l10n/intl_sv.arb index cf5715707..e13fbd123 100644 --- a/lib/l10n/intl_sv.arb +++ b/lib/l10n/intl_sv.arb @@ -11188,5 +11188,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Väntar på att inloggningen ska slutföras", + "ssoDialogDesc": "Vi har öppnat en ny flik så att du kan logga in säkert.", + "ssoDialogHelpText": "🤔 Om du inte såg den nya fliken, vänligen kontrollera din popup-blockerare.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ta.arb b/lib/l10n/intl_ta.arb index 304c24259..a6bf21a65 100644 --- a/lib/l10n/intl_ta.arb +++ b/lib/l10n/intl_ta.arb @@ -10934,5 +10934,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "உள்நுழைவுக்கு காத்திருக்கிறேன்", + "ssoDialogDesc": "நாங்கள் நீங்கள் பாதுகாப்பாக உள்நுழைய புதிய தாவலை திறந்துள்ளோம்.", + "ssoDialogHelpText": "🤔 புதிய தாவலை நீங்கள் காணவில்லை என்றால், தயவுசெய்து உங்கள் பாப்-அப் தடுப்பை சரிபார்க்கவும்.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_te.arb b/lib/l10n/intl_te.arb index c2135738d..38541ccfb 100644 --- a/lib/l10n/intl_te.arb +++ b/lib/l10n/intl_te.arb @@ -11799,5 +11799,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "సైన్ ఇన్ పూర్తి కావడానికి వేచి ఉంది", + "ssoDialogDesc": "మీరు సురక్షితంగా సైన్ ఇన్ కావడానికి మేము కొత్త టాబ్‌ను తెరిచాము.", + "ssoDialogHelpText": "🤔 మీరు కొత్త టాబ్‌ను చూడకపోతే, దయచేసి మీ పాప్-అప్ బ్లాకర్‌ను తనిఖీ చేయండి.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_th.arb b/lib/l10n/intl_th.arb index 9cc7fa01e..930f44d09 100644 --- a/lib/l10n/intl_th.arb +++ b/lib/l10n/intl_th.arb @@ -11768,5 +11768,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "รอการลงชื่อเข้าใช้ให้เสร็จสิ้น", + "ssoDialogDesc": "เราได้เปิดแท็บใหม่เพื่อให้คุณลงชื่อเข้าใช้ได้อย่างปลอดภัย", + "ssoDialogHelpText": "🤔 หากคุณไม่เห็นแท็บใหม่ โปรดตรวจสอบตัวบล็อกป๊อปอัปของคุณ", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_tr.arb b/lib/l10n/intl_tr.arb index 62c083503..acc92da05 100644 --- a/lib/l10n/intl_tr.arb +++ b/lib/l10n/intl_tr.arb @@ -10932,5 +10932,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Girişin tamamlanmasını bekliyoruz", + "ssoDialogDesc": "Güvenli bir şekilde giriş yapabilmeniz için yeni bir sekme açtık.", + "ssoDialogHelpText": "🤔 Yeni sekmeyi görmediyseniz, lütfen açılır pencere engelleyicinizi kontrol edin.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_uk.arb b/lib/l10n/intl_uk.arb index c738d6419..197558665 100644 --- a/lib/l10n/intl_uk.arb +++ b/lib/l10n/intl_uk.arb @@ -10704,5 +10704,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Очікування завершення входу", + "ssoDialogDesc": "Ми відкрили нову вкладку, щоб ви могли безпечно увійти.", + "ssoDialogHelpText": "🤔 Якщо ви не побачили нову вкладку, будь ласка, перевірте блокувальник спливаючих вікон.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_vi.arb b/lib/l10n/intl_vi.arb index 1020acd0f..f03a6f71b 100644 --- a/lib/l10n/intl_vi.arb +++ b/lib/l10n/intl_vi.arb @@ -6280,5 +6280,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "Đang chờ hoàn tất đăng nhập", + "ssoDialogDesc": "Chúng tôi đã mở một tab mới để bạn có thể đăng nhập một cách an toàn.", + "ssoDialogHelpText": "🤔 Nếu bạn không thấy tab mới, vui lòng kiểm tra trình chặn popup của bạn.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_yue.arb b/lib/l10n/intl_yue.arb index a8f176f97..b4ef494fc 100644 --- a/lib/l10n/intl_yue.arb +++ b/lib/l10n/intl_yue.arb @@ -11801,5 +11801,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "等待登錄完成", + "ssoDialogDesc": "我們已經打開了一個新標籤,以便您可以安全地登錄。", + "ssoDialogHelpText": "🤔 如果您沒有看到新標籤,請檢查您的彈出窗口阻止程序。", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_zh.arb b/lib/l10n/intl_zh.arb index ec812df5a..75810b19e 100644 --- a/lib/l10n/intl_zh.arb +++ b/lib/l10n/intl_zh.arb @@ -10701,5 +10701,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "等待登录完成", + "ssoDialogDesc": "我们打开了一个新标签页,以便您可以安全地登录。", + "ssoDialogHelpText": "🤔 如果您没有看到新标签页,请检查您的弹出窗口拦截器。", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_zh_Hant.arb b/lib/l10n/intl_zh_Hant.arb index 25d8cc6c9..d06a0fd7a 100644 --- a/lib/l10n/intl_zh_Hant.arb +++ b/lib/l10n/intl_zh_Hant.arb @@ -10708,5 +10708,20 @@ "type": "String" } } + }, + "ssoDialogTitle": "等待登入完成", + "ssoDialogDesc": "我們已開啟一個新標籤頁,以便您安全地登入。", + "ssoDialogHelpText": "🤔 如果您沒有看到新標籤頁,請檢查您的彈出式窗口阻擋器。", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/pages/login/login.dart b/lib/pages/login/login.dart index 55094500f..98e811692 100644 --- a/lib/pages/login/login.dart +++ b/lib/pages/login/login.dart @@ -7,7 +7,6 @@ import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/authentication/p_login.dart'; import 'package:fluffychat/pangea/login/pages/login_options_view.dart'; import 'package:fluffychat/pangea/login/pages/pangea_login_view.dart'; -import 'package:fluffychat/pangea/login/widgets/p_sso_button.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart'; @@ -43,8 +42,6 @@ class LoginController extends State { // #Pangea bool loadingSignIn = false; - bool loadingAppleSSO = false; - bool loadingGoogleSSO = false; final GlobalKey formKey = GlobalKey(); @@ -97,17 +94,6 @@ class LoginController extends State { } } - void setLoadingSSO(bool loading, SSOProvider provider) { - if (provider == SSOProvider.apple) { - loadingAppleSSO = loading; - loadingGoogleSSO = false; - } else if (provider == SSOProvider.google) { - loadingGoogleSSO = loading; - loadingAppleSSO = false; - } - if (mounted) setState(() {}); - } - void login() async => pLoginAction(controller: this, context: context); // void login() async { // final matrix = Matrix.of(context); diff --git a/lib/pangea/authentication/p_login.dart b/lib/pangea/authentication/p_login.dart index ff65cbb42..b805ce72c 100644 --- a/lib/pangea/authentication/p_login.dart +++ b/lib/pangea/authentication/p_login.dart @@ -6,7 +6,6 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/login/login.dart'; import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart'; -import 'package:fluffychat/pangea/login/widgets/p_sso_button.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/fluffy_chat_app.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; @@ -27,8 +26,6 @@ void pLoginAction({ ), onError: (e, s) { controller.setLoadingSignIn(false); - controller.setLoadingSSO(false, SSOProvider.apple); - controller.setLoadingSSO(false, SSOProvider.google); return e is MatrixException ? e.errorMessage : L10n.of(context).oopsSomethingWentWrong; diff --git a/lib/pangea/login/pages/login_options_view.dart b/lib/pangea/login/pages/login_options_view.dart index d12f6b32f..5ef1bc512 100644 --- a/lib/pangea/login/pages/login_options_view.dart +++ b/lib/pangea/login/pages/login_options_view.dart @@ -8,6 +8,7 @@ import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/login/login.dart'; import 'package:fluffychat/pangea/common/widgets/pangea_logo_svg.dart'; +import 'package:fluffychat/pangea/login/sso_provider_enum.dart'; import 'package:fluffychat/pangea/login/widgets/p_sso_button.dart'; class LoginOptionsView extends StatelessWidget { @@ -35,17 +36,13 @@ class LoginOptionsView extends StatelessWidget { spacing: 16.0, mainAxisAlignment: MainAxisAlignment.end, children: [ - PangeaSsoButton( + const PangeaSsoButton( provider: SSOProvider.apple, title: "Apple", - loading: controller.loadingAppleSSO, - setLoading: controller.setLoadingSSO, ), - PangeaSsoButton( + const PangeaSsoButton( provider: SSOProvider.google, title: "Google", - loading: controller.loadingGoogleSSO, - setLoading: controller.setLoadingSSO, ), ElevatedButton( onPressed: () => context.go('/home/login/email'), diff --git a/lib/pangea/login/pages/signup.dart b/lib/pangea/login/pages/signup.dart index 3028cc26e..a30527363 100644 --- a/lib/pangea/login/pages/signup.dart +++ b/lib/pangea/login/pages/signup.dart @@ -7,7 +7,6 @@ import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart'; import 'package:fluffychat/pangea/login/pages/signup_view.dart'; import 'package:fluffychat/pangea/login/pages/signup_with_email_view.dart'; -import 'package:fluffychat/pangea/login/widgets/p_sso_button.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -34,9 +33,6 @@ class SignupPageController extends State { String? emailText; bool loadingSignup = false; - bool loadingAppleSSO = false; - bool loadingGoogleSSO = false; - bool showPassword = false; bool noEmailWarningConfirmed = false; bool displaySecondPasswordField = false; @@ -70,17 +66,6 @@ class SignupPageController extends State { super.dispose(); } - void setLoadingSSO(bool loading, SSOProvider provider) { - if (provider == SSOProvider.apple) { - loadingAppleSSO = loading; - loadingGoogleSSO = false; - } else if (provider == SSOProvider.google) { - loadingGoogleSSO = loading; - loadingAppleSSO = false; - } - if (mounted) setState(() {}); - } - void setSignupError(String? error) { signupError = error; if (mounted) setState(() {}); @@ -162,8 +147,6 @@ class SignupPageController extends State { onError: (e, s) { setState(() { loadingSignup = false; - loadingAppleSSO = false; - loadingGoogleSSO = false; }); if (e.toString().contains("Request has been canceled")) { Navigator.of(context).pop(); diff --git a/lib/pangea/login/pages/signup_view.dart b/lib/pangea/login/pages/signup_view.dart index caa985e98..8492775ca 100644 --- a/lib/pangea/login/pages/signup_view.dart +++ b/lib/pangea/login/pages/signup_view.dart @@ -9,6 +9,7 @@ import 'package:url_launcher/url_launcher_string.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/common/widgets/pangea_logo_svg.dart'; +import 'package:fluffychat/pangea/login/sso_provider_enum.dart'; import 'package:fluffychat/pangea/login/widgets/p_sso_button.dart'; import 'signup.dart'; @@ -45,18 +46,8 @@ class SignupPageView extends StatelessWidget { fontWeight: FontWeight.bold, ), ), - PangeaSsoButton( - provider: SSOProvider.google, - setLoading: controller.setLoadingSSO, - loading: controller.loadingGoogleSSO, - validator: validator, - ), - PangeaSsoButton( - provider: SSOProvider.apple, - setLoading: controller.setLoadingSSO, - loading: controller.loadingAppleSSO, - validator: validator, - ), + const PangeaSsoButton(provider: SSOProvider.google), + const PangeaSsoButton(provider: SSOProvider.apple), ElevatedButton( onPressed: () => context.go( '/home/language/signup/email', diff --git a/lib/pangea/login/sso_provider_enum.dart b/lib/pangea/login/sso_provider_enum.dart new file mode 100644 index 000000000..f98e81058 --- /dev/null +++ b/lib/pangea/login/sso_provider_enum.dart @@ -0,0 +1,35 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; + +enum SSOProvider { + google, + apple; + + String get id { + switch (this) { + case SSOProvider.google: + return "oidc-google"; + case SSOProvider.apple: + return "oidc-apple"; + } + } + + String get asset { + switch (this) { + case SSOProvider.google: + return "assets/pangea/google.svg"; + case SSOProvider.apple: + return "assets/pangea/apple.svg"; + } + } + + String description(BuildContext context) { + switch (this) { + case SSOProvider.google: + return L10n.of(context).withGoogle; + case SSOProvider.apple: + return L10n.of(context).withApple; + } + } +} diff --git a/lib/pangea/login/widgets/p_sso_button.dart b/lib/pangea/login/widgets/p_sso_button.dart index 2b2125bee..d89c0e0e1 100644 --- a/lib/pangea/login/widgets/p_sso_button.dart +++ b/lib/pangea/login/widgets/p_sso_button.dart @@ -1,81 +1,116 @@ +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_svg/flutter_svg.dart'; -import 'package:matrix/matrix_api_lite/model/matrix_exception.dart'; +import 'package:flutter_web_auth_2/flutter_web_auth_2.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; +import 'package:universal_html/html.dart' as html; -import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pages/homeserver_picker/homeserver_picker.dart'; -import 'package:fluffychat/pangea/login/utils/sso_login_action.dart'; -import 'package:fluffychat/widgets/future_loading_dialog.dart'; - -enum SSOProvider { google, apple } - -extension on SSOProvider { - String get id { - switch (this) { - case SSOProvider.google: - return "oidc-google"; - case SSOProvider.apple: - return "oidc-apple"; - } - } - - String get asset { - switch (this) { - case SSOProvider.google: - return "assets/pangea/google.svg"; - case SSOProvider.apple: - return "assets/pangea/apple.svg"; - } - } - - String description(BuildContext context) { - switch (this) { - case SSOProvider.google: - return L10n.of(context).withGoogle; - case SSOProvider.apple: - return L10n.of(context).withApple; - } - } -} +import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart'; +import 'package:fluffychat/pangea/login/sso_provider_enum.dart'; +import 'package:fluffychat/pangea/login/widgets/p_sso_dialog.dart'; +import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:fluffychat/widgets/fluffy_chat_app.dart'; +import 'package:fluffychat/widgets/matrix.dart'; class PangeaSsoButton extends StatelessWidget { - final String? title; final SSOProvider provider; - - final Function(bool, SSOProvider) setLoading; - final bool loading; - final bool? Function()? validator; + final String? title; const PangeaSsoButton({ required this.provider, - required this.setLoading, this.title, - this.loading = false, - this.validator, super.key, }); - Future _runSSOLogin(BuildContext context) async { - setLoading(true, provider); - await showFutureLoadingDialog( - context: context, - future: () async => pangeaSSOLoginAction( - IdentityProvider( - id: provider.id, - name: provider.name, + Future _runSSOLogin(BuildContext context) => showAdaptiveDialog( + context: context, + builder: (context) => SSODialog( + future: () => _ssoAction( + IdentityProvider( + id: provider.id, + name: provider.name, + ), + context, + ), ), - context, - ), - onError: (e, s) { - setLoading(false, provider); - return e is MatrixException - ? e.errorMessage - : L10n.of(context).oopsSomethingWentWrong; - }, - onDismiss: () => setLoading(false, provider), + ); + + Future _ssoAction( + IdentityProvider provider, + BuildContext context, + ) async { + final bool isDefaultPlatform = (PlatformInfos.isMobile || + PlatformInfos.isWeb || + PlatformInfos.isMacOS); + final redirectUrl = kIsWeb + ? Uri.parse(html.window.location.href) + .resolveUri( + Uri(pathSegments: ['auth.html']), + ) + .toString() + : isDefaultPlatform + ? '${AppConfig.appOpenUrlScheme.toLowerCase()}://login' + : 'http://localhost:3001//login'; + final client = await Matrix.of(context).getLoginClient(); + final url = client.homeserver!.replace( + path: '/_matrix/client/v3/login/sso/redirect/${provider.id ?? ''}', + queryParameters: {'redirectUrl': redirectUrl}, ); - setLoading(false, provider); + + final urlScheme = isDefaultPlatform + ? Uri.parse(redirectUrl).scheme + : "http://localhost:3001"; + String result; + try { + result = await FlutterWebAuth2.authenticate( + url: url.toString(), + callbackUrlScheme: urlScheme, + ); + } catch (err) { + if (err is PlatformException && err.code == 'CANCELED') { + debugPrint("user cancelled SSO login"); + return; + } + rethrow; + } + final token = Uri.parse(result).queryParameters['loginToken']; + if (token?.isEmpty ?? false) return; + + final redirect = client.onLoginStateChanged.stream + .where((state) => state == LoginState.loggedIn) + .first + .then( + (_) { + final route = FluffyChatApp.router.state.fullPath; + if (route == null || + (!route.contains("/rooms") && !route.contains('registration'))) { + context.go('/rooms'); + } + }, + ).timeout(const Duration(seconds: 30)); + + final loginRes = await client.login( + LoginType.mLoginToken, + token: token, + initialDeviceDisplayName: PlatformInfos.clientName, + ); + + if (client.onLoginStateChanged.value == LoginState.loggedIn) { + final route = FluffyChatApp.router.state.fullPath; + if (route == null || + (!route.contains("/rooms") && !route.contains('registration'))) { + context.go('/rooms'); + } + } else { + await redirect; + } + + GoogleAnalytics.login(provider.name!, loginRes.userId); } @override @@ -102,13 +137,7 @@ class PangeaSsoButton extends StatelessWidget { Text(title ?? provider.description(context)), ], ), - onPressed: () { - if (validator != null) { - final valid = validator!.call() ?? false; - if (!valid) return; - } - _runSSOLogin(context); - }, + onPressed: () => _runSSOLogin(context), ); } } diff --git a/lib/pangea/login/widgets/p_sso_dialog.dart b/lib/pangea/login/widgets/p_sso_dialog.dart new file mode 100644 index 000000000..f5efda082 --- /dev/null +++ b/lib/pangea/login/widgets/p_sso_dialog.dart @@ -0,0 +1,107 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; + +import 'package:flutter_linkify/flutter_linkify.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/utils/localized_exception_extension.dart'; +import 'package:fluffychat/utils/url_launcher.dart'; +import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart'; +import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; + +class SSODialog extends StatefulWidget { + final Future Function() future; + const SSODialog({ + super.key, + required this.future, + }); + + @override + SSODialogState createState() => SSODialogState(); +} + +class SSODialogState extends State { + Timer? _hintTimer; + bool _showHint = false; + Object? _error; + + @override + void initState() { + super.initState(); + _runFuture(); + _hintTimer = Timer(const Duration(seconds: 5), () { + if (mounted) { + setState(() => _showHint = true); + } + }); + } + + @override + void dispose() { + _hintTimer?.cancel(); + super.dispose(); + } + + Future _runFuture() async { + try { + await widget.future(); + } catch (e) { + setState(() => _error = e); + } + } + + @override + Widget build(BuildContext context) { + return AlertDialog.adaptive( + title: _error == null + ? ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 256), + child: Text(L10n.of(context).ssoDialogTitle), + ) + : Icon( + Icons.error_outline_outlined, + color: Theme.of(context).colorScheme.error, + size: 48, + ), + content: ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 256), + child: _error == null + ? Column( + mainAxisSize: MainAxisSize.min, + children: [ + SelectableLinkify( + text: L10n.of(context).ssoDialogDesc, + textScaleFactor: MediaQuery.textScalerOf(context).scale(1), + linkStyle: TextStyle( + color: Theme.of(context).colorScheme.primary, + decorationColor: Theme.of(context).colorScheme.primary, + ), + options: const LinkifyOptions(humanize: false), + onOpen: (url) => UrlLauncher(context, url.url).launchUrl(), + ), + const SizedBox(height: 16), + _showHint + ? Text( + L10n.of(context).ssoDialogHelpText, + style: Theme.of(context).textTheme.bodySmall, + ) + : const SizedBox( + height: 16.0, + width: 16.0, + child: CircularProgressIndicator.adaptive(), + ), + ], + ) + : Text(_error!.toLocalizedString(context)), + ), + actions: [ + AdaptiveDialogAction( + onPressed: () => + Navigator.of(context).pop(OkCancelResult.cancel), + child: Text(L10n.of(context).cancel), + ), + ], + ); + } +}