1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-17 08:43:33 +00:00

Merge branch 'master' into ps/PM-2841/remove-swal

This commit is contained in:
Will Martin
2023-09-05 11:14:40 -04:00
committed by GitHub
288 changed files with 5062 additions and 1783 deletions

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 جيغابايت وحدة تخزين مشفرة لمرفقات الملفات."
},
"ppremiumSignUpTwoStep": {
"message": "خيارات تسجيل الدخول الإضافية من خطوتين مثل YubiKey و FIDO U2F و Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "نظافة كلمة المرور، صحة الحساب، وتقارير خرق البيانات للحفاظ على سلامة خزنتك."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "Fayl qoşmaları üçün 1 GB şifrələnmiş saxlama sahəsi"
},
"ppremiumSignUpTwoStep": {
"message": "YubiKey, FIDO U2F və Duo kimi iki mərhələli giriş seçimləri"
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Anbarınızın təhlükəsiyini təmin etmək üçün parol gigiyenası, hesab sağlamlığı və verilənlərin pozulması hesabatları."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 ГБ зашыфраванага сховішча для далучаных файлаў."
},
"ppremiumSignUpTwoStep": {
"message": "Дадатковыя варыянты двухэтапнага ўваходу, такія як YubiKey, FIDO U2F і Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Гігіена пароляў, здароўе ўліковага запісу і справаздачы аб уцечках даных для забеспячэння бяспекі вашага сховішча."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1GB пространство за файлове, които се шифрират."
},
"ppremiumSignUpTwoStep": {
"message": "Двустепенно удостоверяване чрез YubiKey, FIDO U2F и Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Проверки в списъците с публикувани пароли, проверка на регистрациите и доклади за пробивите в сигурността, което спомага трезорът ви да е допълнително защитен."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "ফাইল সংযুক্তির জন্য ১ জিবি এনক্রিপ্টেড স্থান।"
},
"ppremiumSignUpTwoStep": {
"message": "YubiKey, FIDO U2F, ও Duo এর মতো অতিরিক্ত দ্বি-পদক্ষেপ লগইন বিকল্পগুলি।"
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "আপনার ভল্টটি সুরক্ষিত রাখতে পাসওয়ার্ড স্বাস্থ্যকরন, অ্যাকাউন্ট স্বাস্থ্য এবং ডেটা লঙ্ঘনের প্রতিবেদন।"

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB encrypted storage for file attachments."
},
"ppremiumSignUpTwoStep": {
"message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Password hygiene, account health, and data breach reports to keep your vault safe."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB d'emmagatzematge xifrat per als fitxers adjunts."
},
"ppremiumSignUpTwoStep": {
"message": "Opcions addicionals d'inici de sessió en dues passes com ara YubiKey, FIDO U2F i Duo."
"premiumSignUpTwoStepOptions": {
"message": "Opcions propietàries de doble factor com ara YubiKey i Duo."
},
"ppremiumSignUpReports": {
"message": "Requisits d'higiene de la contrasenya, salut del compte i informe d'infraccions de dades per mantenir la seguretat de la vostra caixa forta."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB šifrovaného úložiště pro přílohy."
},
"ppremiumSignUpTwoStep": {
"message": "Další možnosti dvoufázového přihlášení, jako je například YubiKey, FIDO U2F a Duo."
"premiumSignUpTwoStepOptions": {
"message": "Volby proprietálních dvoufázových přihlášení jako je YubiKey a Duo."
},
"ppremiumSignUpReports": {
"message": "Reporty o hygieně Vašich hesel, zdraví účtu a narušeních bezpečnosti."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB encrypted storage for file attachments."
},
"ppremiumSignUpTwoStep": {
"message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Password hygiene, account health, and data breach reports to keep your vault safe."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB krypteret lager til vedhæftede filer."
},
"ppremiumSignUpTwoStep": {
"message": "Yderligere to-trins login muligheder såsom YubiKey, FIDO U2F og Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietære totrins-login muligheder, såsom YubiKey og Duo."
},
"ppremiumSignUpReports": {
"message": "Adgangskodehygiejne, kontosundhed og rapporter om datalæk til at holde din boks sikker."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB verschlüsselter Speicherplatz für Dateianhänge."
},
"ppremiumSignUpTwoStep": {
"message": "Zusätzliche Zweifaktor-Anmeldung über YubiKey, FIDO U2F, und Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietäre Optionen für die Zwei-Faktor Authentifizierung wie YubiKey und Duo."
},
"ppremiumSignUpReports": {
"message": "Berichte über Kennworthygiene, Kontostatus und Datenschutzverletzungen, um deinen Tresor sicher zu halten."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB κρυπτογραφημένο αποθηκευτικό χώρο για συνημμένα αρχεία."
},
"ppremiumSignUpTwoStep": {
"message": "Πρόσθετες επιλογές σύνδεσης δύο βημάτων, όπως το YubiKey, το FIDO U2F και το Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Ασφάλεια κωδικών, υγεία λογαριασμού και αναφορές παραβίασης δεδομένων για να διατηρήσετε ασφαλές το vault σας."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB encrypted storage for file attachments."
},
"ppremiumSignUpTwoStep": {
"message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Password hygiene, account health, and data breach reports to keep your vault safe."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB encrypted storage for file attachments."
},
"ppremiumSignUpTwoStep": {
"message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Password hygiene, account health, and data breach reports to keep your vault safe."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB encrypted storage for file attachments."
},
"ppremiumSignUpTwoStep": {
"message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Password hygiene, account health, and data breach reports to keep your vault safe."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB de espacio cifrado en disco para adjuntos."
},
"ppremiumSignUpTwoStep": {
"message": "Métodos de autenticación en dos pasos adicionales como YubiKey, FIDO U2F y Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Higiene de contraseña, salud de la cuenta e informes de violaciones de datos para mantener su caja fuerte segura."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB ulatuses krüpteeritud salvestusruum."
},
"ppremiumSignUpTwoStep": {
"message": "Lisavõimalused kaheastmeliseks kinnitamiseks, näiteks YubiKey, FIDO U2F ja Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Parooli hügieen, konto seisukord ja andmelekete raportid aitavad hoidlat turvalisena hoida."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "Eranskinentzako 1GB-eko zifratutako biltegia."
},
"ppremiumSignUpTwoStep": {
"message": "YubiKey, FIDO U2F eta Duo bezalako bi urratseko saio hasierarako aukera gehigarriak."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Pasahitzaren higienea, kontuaren egoera eta datu-bortxaketen txostenak, kutxa gotorra seguru mantentzeko."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "۱ گیگابایت فضای ذخیره سازی رمزگذاری شده برای پیوست های پرونده."
},
"ppremiumSignUpTwoStep": {
"message": "گزینه‌های ورود دو مرحله‌ای اضافی مانند YubiKey, FIDO U2F و Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "گزارش‌های بهداشت رمز عبور، سلامت حساب و نقض داده‌ها برای ایمن نگهداشتن گاوصندوق شما."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 Gt salattua tallennustilaa tiedostoliitteille."
},
"ppremiumSignUpTwoStep": {
"message": "Muita kaksivaiheisen kirjautumisen todennusmenetelmiä kuten YubiKey, FIDO U2F ja Duo Security."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Salasanahygienian, tilin terveyden ja tietovuotojen raportointitoiminnot pitävät holvisi turvassa."
@@ -2310,7 +2310,7 @@
"message": "pakollinen"
},
"search": {
"message": "Etsi"
"message": "Hae"
},
"inputMinLength": {
"message": "Syötteen tulee sisältää ainakin $COUNT$ merkkiä.",

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB encrypted storage para sa mga file attachment."
},
"ppremiumSignUpTwoStep": {
"message": "Dagdag na dalawang hakbang na login option gaya ng YubiKey, FIDO U2F, at Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Pasahod higiyena, kalusugan ng account, at mga ulat sa data breach upang panatilihing ligtas ang iyong vault."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 Go de stockage chiffré pour les fichiers joints."
},
"ppremiumSignUpTwoStep": {
"message": "Options additionnelles d'identification à deux étapes telles que YubiKey, FIDO U2F et Duo."
"premiumSignUpTwoStepOptions": {
"message": "Options de connexion propriétaires à deux facteurs telles que YubiKey et Duo."
},
"ppremiumSignUpReports": {
"message": "Hygiène du mot de passe, santé du compte et rapports sur les brèches de données pour assurer la sécurité de votre coffre."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB encrypted storage for file attachments."
},
"ppremiumSignUpTwoStep": {
"message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Password hygiene, account health, and data breach reports to keep your vault safe."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 ג'יגה של מקום אחסון עבור קבצים מצורפים."
},
"ppremiumSignUpTwoStep": {
"message": "אפשרויות כניסה דו שלבית מתקדמות כמו YubiKey, FIDO U2F, וגם Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "היגיינת סיסמאות, מצב בריאות החשבון, ודיווחים מעודכנים על פרצות חדשות בכדי לשמור על הכספת שלך בטוחה."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB of encrypted file storage."
},
"ppremiumSignUpTwoStep": {
"message": "अतिरिक्त दो-चरण लॉगिन विकल्प जैसे YubiKey, FIDO U2F, और डुओ।"
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "अपनी वॉल्ट को सुरक्षित रखने के लिए पासवर्ड स्वच्छता, खाता स्वास्थ्य और डेटा उल्लंघन रिपोर्ट।"

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB šifriranog prostora za pohranu podataka."
},
"ppremiumSignUpTwoStep": {
"message": "Dodatne mogućnosti za prijavu dvostrukom autentifikacijom kao što su YubiKey, FIDO U2F i Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Higijenu lozinki, zdravlje računa i izvještaje o krađi podatak radi zaštite svojeg trezora."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB titkosított tárhely a fájlmellékleteknek."
},
"ppremiumSignUpTwoStep": {
"message": "További két lépcsős bejelentkezés lehetőségek, mint például YubiKey, FIDO U2F és Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Jelszó higiénia, fiók biztonság és adatszivárgási jelentések a széf biztonsága érdekében."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB penyimpanan berkas yang dienkripsi."
},
"ppremiumSignUpTwoStep": {
"message": "Pilihan info masuk dua langkah tambahan seperti YubiKey, FIDO U2F, dan Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Kebersihan kata sandi, kesehatan akun, dan laporan kebocoran data untuk tetap menjaga keamanan brankas Anda."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB di spazio di archiviazione criptato per gli allegati."
},
"ppremiumSignUpTwoStep": {
"message": "Più opzioni di verifica in due passaggi come YubiKey, FIDO U2F, e Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Sicurezza delle password, integrità dell'account, e rapporti su violazioni di dati per mantenere sicura la tua cassaforte."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1GB の暗号化されたファイルストレージ"
},
"ppremiumSignUpTwoStep": {
"message": "YubiKey、FIDO U2F、Duoなどの追加の2段階認証ログインオプション"
"premiumSignUpTwoStepOptions": {
"message": "YubiKey、Duo などのプロプライエタリな2段階認証オプション"
},
"ppremiumSignUpReports": {
"message": "保管庫を安全に保つための、パスワードやアカウントの健全性、データ侵害に関するレポート"

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB encrypted storage for file attachments."
},
"ppremiumSignUpTwoStep": {
"message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Password hygiene, account health, and data breach reports to keep your vault safe."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB encrypted storage for file attachments."
},
"ppremiumSignUpTwoStep": {
"message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Password hygiene, account health, and data breach reports to keep your vault safe."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "ಫೈಲ್ ಲಗತ್ತುಗಳಿಗಾಗಿ 1 ಜಿಬಿ ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡಿದ ಸಂಗ್ರಹ."
},
"ppremiumSignUpTwoStep": {
"message": "ಹೆಚ್ಚುವರಿ ಎರಡು-ಹಂತದ ಲಾಗಿನ್ ಆಯ್ಕೆಗಳಾದ ಯೂಬಿಕೆ, ಎಫ್‌ಐಡಿಒ ಯು 2 ಎಫ್, ಮತ್ತು ಡ್ಯುವೋ."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "ನಿಮ್ಮ ವಾಲ್ಟ್ ಅನ್ನು ಸುರಕ್ಷಿತವಾಗಿರಿಸಲು ಪಾಸ್ವರ್ಡ್ ನೈರ್ಮಲ್ಯ, ಖಾತೆ ಆರೋಗ್ಯ ಮತ್ತು ಡೇಟಾ ಉಲ್ಲಂಘನೆ ವರದಿಗಳು."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1GB의 암호화된 파일 저장소."
},
"ppremiumSignUpTwoStep": {
"message": "YubiKey나 FIDO U2F, Duo 등의 추가적인 2단계 인증 옵션."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "보관함을 안전하게 유지하기 위한 암호 위생, 계정 상태, 데이터 유출 보고서"

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB užšifruotos vietos diske bylų prisegimams."
},
"ppremiumSignUpTwoStep": {
"message": "Papildomos dviejų žingsių prisijungimo opcijos, tokios kaip YubiKey, FIDO U2F ir Duo."
"premiumSignUpTwoStepOptions": {
"message": "Patentuotos dviejų žingsnių prisijungimo parinktys, tokios kaip YubiKey ir Duo."
},
"ppremiumSignUpReports": {
"message": "Slaptažodžio higiena, prieigos sveikata ir duomenų nutekinimo ataskaitos, kad tavo saugyklas būtų saugus."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB šifrētas krātuves datņu pielikumiem."
},
"ppremiumSignUpTwoStep": {
"message": "Tādas papildu divpakāpju pieteikšanās iespējas kā YubiKey, FIDO U2F un Duo."
"premiumSignUpTwoStepOptions": {
"message": "Tādas slēgtā pirmavota divpakāpju pieteikšanās iespējas kā YubiKey un Duo."
},
"ppremiumSignUpReports": {
"message": "Paroļu higiēnas, konta veselības un datu noplūžu pārskati, lai uzturētu glabātavu drošu."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "ഫയൽ അറ്റാച്ചുമെന്റുകൾക്കായി 1 ജിബി എൻക്രിപ്റ്റുചെയ്‌ത സംഭരണം."
},
"ppremiumSignUpTwoStep": {
"message": "രണ്ട്-ഘട്ട പ്രവേശന ഓപ്ഷനുകളായ Yubikey, FIDO U2F, Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "നിങ്ങളുടെ വാൾട് സൂക്ഷിക്കുന്നതിന്. പാസ്‌വേഡ് ശുചിത്വം, അക്കൗണ്ട് ആരോഗ്യം, ഡാറ്റ ലംഘന റിപ്പോർട്ടുകൾ."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB encrypted storage for file attachments."
},
"ppremiumSignUpTwoStep": {
"message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Password hygiene, account health, and data breach reports to keep your vault safe."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB encrypted storage for file attachments."
},
"ppremiumSignUpTwoStep": {
"message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Password hygiene, account health, and data breach reports to keep your vault safe."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB med kryptert fillagring for filvedlegg."
},
"ppremiumSignUpTwoStep": {
"message": "Ytterligere 2-trinnsinnloggingsmuligheter, slik som YubiKey, FIDO U2F, og Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Passordhygiene, kontohelse, og databruddsrapporter som holder hvelvet ditt trygt."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB encrypted storage for file attachments."
},
"ppremiumSignUpTwoStep": {
"message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Password hygiene, account health, and data breach reports to keep your vault safe."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB versleutelde opslag voor bijlagen."
},
"ppremiumSignUpTwoStep": {
"message": "Extra opties voor tweestapsaanmelding zoals YubiKey, FIDO U2F en Duo."
"premiumSignUpTwoStepOptions": {
"message": "Eigen opties voor tweestapsaanmelding zoals YubiKey en Duo."
},
"ppremiumSignUpReports": {
"message": "Wachtwoordhygiëne, gezondheid van je account en datalekken om je kluis veilig te houden."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB encrypted storage for file attachments."
},
"ppremiumSignUpTwoStep": {
"message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Password hygiene, account health, and data breach reports to keep your vault safe."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB encrypted storage for file attachments."
},
"ppremiumSignUpTwoStep": {
"message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Password hygiene, account health, and data breach reports to keep your vault safe."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB miejsca na zaszyfrowane załączniki."
},
"ppremiumSignUpTwoStep": {
"message": "Dodatkowe opcje logowania dwustopniowego, takie jak klucze YubiKey, FIDO U2F oraz Duo."
"premiumSignUpTwoStepOptions": {
"message": "Własnościowe opcje logowania dwuetapowego, takie jak YubiKey i Duo."
},
"ppremiumSignUpReports": {
"message": "Raporty bezpieczeństwa haseł, stanu konta i raporty wycieków danych, aby Twoje dane były bezpieczne."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB de armazenamento de arquivos encriptados."
},
"ppremiumSignUpTwoStep": {
"message": "Opções de autenticação de duas etapas adicionais como YubiKey, FIDO U2F, e Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Higiene de senha, saúde da conta, e relatórios sobre violação de dados para manter o seu cofre seguro."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB de armazenamento encriptado para anexos de ficheiros."
},
"ppremiumSignUpTwoStep": {
"message": "Opções adicionais de verificação de dois passos, como YubiKey, FIDO U2F e Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Higiene de palavras-passe, saúde da conta e relatórios de violação de dados para manter o seu cofre seguro."

View File

@@ -196,13 +196,13 @@
"message": "Ajutor și feedback"
},
"helpCenter": {
"message": "Bitwarden Help center"
"message": "Centrul de Ajutor Bitwarden"
},
"communityForums": {
"message": "Explore Bitwarden community forums"
"message": "Explorează forumurile comunității Bitwarden"
},
"contactSupport": {
"message": "Contact Bitwarden support"
"message": "Contactați asistența Bitwarden"
},
"sync": {
"message": "Sincronizare"
@@ -442,7 +442,7 @@
"message": "Este necesară rescrierea parolei principale."
},
"masterPasswordMinlength": {
"message": "Master password must be at least $VALUE$ characters long.",
"message": "Parola principală trebuie să aibă cel puțin $VALUE$ caractere.",
"description": "The Master Password must be at least a specific number of characters long.",
"placeholders": {
"value": {
@@ -634,10 +634,10 @@
"message": "Actualizare"
},
"notificationUnlockDesc": {
"message": "Unlock your Bitwarden vault to complete the auto-fill request."
"message": "Deblochează seiful Bitwarden pentru a finaliza solicitarea de completare automată."
},
"notificationUnlock": {
"message": "Unlock"
"message": "Deblocare"
},
"enableContextMenuItem": {
"message": "Afișați opțiunile meniului contextual"
@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB spațiu de stocare criptat pentru atașamente de fișiere."
},
"ppremiumSignUpTwoStep": {
"message": "Opțiuni adiționale de conectare în două etape, cum ar fi YubiKey, FIDO U2F și Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Rapoarte privind igiena parolelor, sănătatea contului și breșele de date pentru a vă păstra seiful în siguranță."
@@ -985,7 +985,7 @@
"message": "Dacă se detectează un formular de autentificare, completați-l automat la încărcarea paginii web."
},
"experimentalFeature": {
"message": "Compromised or untrusted websites can exploit auto-fill on page load."
"message": "Site-urile web compromise sau nesigure pot exploata funcția de autocompletare la încărcarea paginii."
},
"learnMoreAboutAutofill": {
"message": "Learn more about auto-fill"
@@ -1468,7 +1468,7 @@
"message": "Articolul s-a completat automat "
},
"insecurePageWarning": {
"message": "Warning: This is an unsecured HTTP page, and any information you submit can potentially be seen and changed by others. This Login was originally saved on a secure (HTTPS) page."
"message": "Avertisment: Aceasta este o pagină HTTP nesecurizată și orice informație pe care o trimiteți poate fi văzută și modificată de alte persoane. Această Parolă a fost salvată inițial pe o pagină securizată (HTTPS)."
},
"insecurePageWarningFillPrompt": {
"message": "Do you still wish to fill this login?"

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 ГБ зашифрованного хранилища для вложенных файлов."
},
"ppremiumSignUpTwoStep": {
"message": "Дополнительные варианты двухэтапной аутентификации, такие как YubiKey, FIDO U2F и Duo."
"premiumSignUpTwoStepOptions": {
"message": "Проприетарные варианты двухэтапной аутентификации, такие как YubiKey или Duo."
},
"ppremiumSignUpReports": {
"message": "Гигиена паролей, здоровье аккаунта и отчеты об утечках данных для обеспечения безопасности вашего хранилища."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "ගොනු ඇමුණුම් සඳහා 1 GB සංකේතාත්මක ගබඩා."
},
"ppremiumSignUpTwoStep": {
"message": "එවැනි YuBiKey, FIDO U2F, සහ Duo ලෙස අතිරේක පියවර දෙකක් පිවිසුම් විකල්ප."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "ඔබගේ සුරක්ෂිතාගාරය ආරක්ෂිතව තබා ගැනීම සඳහා මුරපදය සනීපාරක්ෂාව, ගිණුම් සෞඛ්යය සහ දත්ත උල්ලං ach නය වාර්තා කරයි."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB šifrovaného úložiska."
},
"ppremiumSignUpTwoStep": {
"message": "Ďalšie možnosti dvojstupňového prihlásenia ako YubiKey, FIDO U2F a Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Správy o sile hesla, zabezpečení účtov a únikoch dát ktoré vám pomôžu udržať vaše kontá v bezpečí."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB šifriranega prostora za shrambo podatkov."
},
"ppremiumSignUpTwoStep": {
"message": "Dodatne možnosti za prijavo v dveh korakih, n.pr. YubiKey, FIDO U2F in Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Higiena gesel, zdravje računa in poročila o kraji podatkov, ki vam pomagajo ohraniti varnost vašega trezorja."

View File

@@ -339,7 +339,7 @@
"message": "Остало"
},
"unlockMethodNeededToChangeTimeoutActionDesc": {
"message": "Set up an unlock method to change your vault timeout action."
"message": "Подесите метод откључавања да бисте променили радњу временског ограничења сефа."
},
"rateExtension": {
"message": "Оцени овај додатак"
@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1ГБ шифровано складиште за прилоге."
},
"ppremiumSignUpTwoStep": {
"message": "Додатне опције пријаве у два корака као што су YubiKey, FIDO U2F, и Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Извештаји о хигијени лозинки, здравственом стању налога и кршењу података да бисте заштитили сеф."
@@ -1606,10 +1606,10 @@
"message": "Биометрија прегледача није подржана на овом уређају."
},
"biometricsFailedTitle": {
"message": "Biometrics failed"
"message": "Биометрија није успела"
},
"biometricsFailedDesc": {
"message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support."
"message": "Биометрија се не може завршити, размислите о коришћењу главне лозинке или одјавите се. Ако се ово настави, контактирајте подршку Bitwarden-а."
},
"nativeMessaginPermissionErrorTitle": {
"message": "Дозвола није дата"
@@ -2153,7 +2153,7 @@
"message": "Обавештење је послато на ваш уређај."
},
"loginInitiated": {
"message": "Login initiated"
"message": "Пријава је покренута"
},
"exposedMasterPassword": {
"message": "Изложена главна лозинка"
@@ -2240,25 +2240,25 @@
"message": "Отвара се у новом прозору"
},
"deviceApprovalRequired": {
"message": "Device approval required. Select an approval option below:"
"message": "Потребно је одобрење уређаја. Изаберите опцију одобрења испод:"
},
"rememberThisDevice": {
"message": "Remember this device"
"message": "Запамти овај уређај"
},
"uncheckIfPublicDevice": {
"message": "Uncheck if using a public device"
"message": "Искључите ако се користи јавни уређај"
},
"approveFromYourOtherDevice": {
"message": "Approve from your other device"
"message": "Одобри са мојим другим уређајем"
},
"requestAdminApproval": {
"message": "Request admin approval"
"message": "Затражити одобрење администратора"
},
"approveWithMasterPassword": {
"message": "Approve with master password"
"message": "Одобрити са главном лозинком"
},
"ssoIdentifierRequired": {
"message": "Organization SSO identifier is required."
"message": "Потребан је SSO идентификатор организације."
},
"eu": {
"message": "EU",
@@ -2280,40 +2280,40 @@
"message": "Приказ"
},
"accountSuccessfullyCreated": {
"message": "Account successfully created!"
"message": "Налог је успешно креиран!"
},
"adminApprovalRequested": {
"message": "Admin approval requested"
"message": "Захтевано је одобрење администратора"
},
"adminApprovalRequestSentToAdmins": {
"message": "Your request has been sent to your admin."
"message": "Ваш захтев је послат вашем администратору."
},
"youWillBeNotifiedOnceApproved": {
"message": "You will be notified once approved."
"message": "Бићете обавештени када буде одобрено."
},
"troubleLoggingIn": {
"message": "Trouble logging in?"
"message": "Имате проблема са пријављивањем?"
},
"loginApproved": {
"message": "Login approved"
"message": "Пријава је одобрена"
},
"userEmailMissing": {
"message": "User email missing"
"message": "Недостаје имејл корисника"
},
"deviceTrusted": {
"message": "Device trusted"
"message": "Уређај поуздан"
},
"inputRequired": {
"message": "Input is required."
"message": "Унос је потребан."
},
"required": {
"message": "required"
"message": "обавезно"
},
"search": {
"message": "Search"
"message": "Тражи"
},
"inputMinLength": {
"message": "Input must be at least $COUNT$ characters long.",
"message": "Унос трба имати најмање $COUNT$ слова.",
"placeholders": {
"count": {
"content": "$1",
@@ -2322,7 +2322,7 @@
}
},
"inputMaxLength": {
"message": "Input must not exceed $COUNT$ characters in length.",
"message": "Унос не сме бити већи од $COUNT$ карактера.",
"placeholders": {
"count": {
"content": "$1",
@@ -2331,7 +2331,7 @@
}
},
"inputForbiddenCharacters": {
"message": "The following characters are not allowed: $CHARACTERS$",
"message": "Следећи знакови нису дозвољени: $CHARACTERS$",
"placeholders": {
"characters": {
"content": "$1",
@@ -2340,7 +2340,7 @@
}
},
"inputMinValue": {
"message": "Input value must be at least $MIN$.",
"message": "Вредност мора бити најмање $MIN$.",
"placeholders": {
"min": {
"content": "$1",
@@ -2349,7 +2349,7 @@
}
},
"inputMaxValue": {
"message": "Input value must not exceed $MAX$.",
"message": "Вредност не сме бити већа од $MAX$.",
"placeholders": {
"max": {
"content": "$1",
@@ -2358,17 +2358,17 @@
}
},
"multipleInputEmails": {
"message": "1 or more emails are invalid"
"message": "1 или више имејлова су неважећи"
},
"inputTrimValidator": {
"message": "Input must not contain only whitespace.",
"message": "Унос не сме да садржи само размак.",
"description": "Notification to inform the user that a form's input can't contain only whitespace."
},
"inputEmail": {
"message": "Input is not an email address."
"message": "Унос није имејл."
},
"fieldsNeedAttention": {
"message": "$COUNT$ field(s) above need your attention.",
"message": "$COUNT$ поље(а) изнад захтевај(у) вашу пажњу.",
"placeholders": {
"count": {
"content": "$1",
@@ -2377,22 +2377,22 @@
}
},
"selectPlaceholder": {
"message": "-- Select --"
"message": "-- Одабрати --"
},
"multiSelectPlaceholder": {
"message": "-- Type to filter --"
"message": "-- Тип за филтрирање --"
},
"multiSelectLoading": {
"message": "Retrieving options..."
"message": "Преузимање опција..."
},
"multiSelectNotFound": {
"message": "No items found"
"message": "Нема предмета"
},
"multiSelectClearAll": {
"message": "Clear all"
"message": "Обриши све"
},
"plusNMore": {
"message": "+ $QUANTITY$ more",
"message": "+ још $QUANTITY$",
"placeholders": {
"quantity": {
"content": "$1",
@@ -2401,10 +2401,10 @@
}
},
"submenu": {
"message": "Submenu"
"message": "Под-мени"
},
"toggleCollapse": {
"message": "Toggle collapse",
"message": "Промени проширење",
"description": "Toggling an expand/collapse state."
}
}

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB lagring av krypterade filer."
},
"ppremiumSignUpTwoStep": {
"message": "Ytterligare alternativ för tvåstegsverifiering såsom YubiKey, FIDO U2F och Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Lösenordshygien, kontohälsa och dataintrångsrapporter för att hålla ditt valv säkert."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB encrypted storage for file attachments."
},
"ppremiumSignUpTwoStep": {
"message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Password hygiene, account health, and data breach reports to keep your vault safe."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB of encrypted file storage."
},
"ppremiumSignUpTwoStep": {
"message": "ตัวเลือกการเข้าสู่ระบบแบบสองขั้นตอนเพิ่มเติม เช่น YubiKey, FIDO U2F และ Duo"
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "สุขอนามัยของรหัสผ่าน ความสมบูรณ์ของบัญชี และรายงานการละเมิดข้อมูลเพื่อให้ตู้นิรภัยของคุณปลอดภัย"

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "Dosya ekleri için 1 GB şifrelenmiş depolama."
},
"ppremiumSignUpTwoStep": {
"message": "YubiKey, FIDO U2F ve Duo gibi iki aşamalı giriş seçenekleri."
"premiumSignUpTwoStepOptions": {
"message": "YubiKey ve Duo gibi marka bazlı iki aşamalı giriş seçenekleri."
},
"ppremiumSignUpReports": {
"message": "Kasanızı güvende tutmak için parola hijyeni, hesap sağlığı ve veri ihlali raporları."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 ГБ зашифрованого сховища для файлів."
},
"ppremiumSignUpTwoStep": {
"message": "Додаткові можливості двоетапної перевірки, наприклад, YubiKey, FIDO U2F та Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Гігієна паролів, здоров'я облікового запису, а також звіти про вразливості даних, щоб зберігати ваше сховище в безпеці."
@@ -2304,16 +2304,16 @@
"message": "Довірений пристрій"
},
"inputRequired": {
"message": "Input is required."
"message": "Необхідно ввести дані."
},
"required": {
"message": "required"
"message": "обов'язково"
},
"search": {
"message": "Search"
"message": "Пошук"
},
"inputMinLength": {
"message": "Input must be at least $COUNT$ characters long.",
"message": "Введені дані мають бути довжиною принаймні $COUNT$ символів.",
"placeholders": {
"count": {
"content": "$1",
@@ -2322,7 +2322,7 @@
}
},
"inputMaxLength": {
"message": "Input must not exceed $COUNT$ characters in length.",
"message": "Вхідне значення не повинно перевищувати $COUNT$ символів.",
"placeholders": {
"count": {
"content": "$1",
@@ -2331,7 +2331,7 @@
}
},
"inputForbiddenCharacters": {
"message": "The following characters are not allowed: $CHARACTERS$",
"message": "Вказані символи заборонені: $CHARACTERS$",
"placeholders": {
"characters": {
"content": "$1",
@@ -2340,7 +2340,7 @@
}
},
"inputMinValue": {
"message": "Input value must be at least $MIN$.",
"message": "Значення має бути принаймні $MIN$.",
"placeholders": {
"min": {
"content": "$1",
@@ -2349,7 +2349,7 @@
}
},
"inputMaxValue": {
"message": "Input value must not exceed $MAX$.",
"message": "Значення не може перевищувати $MAX$.",
"placeholders": {
"max": {
"content": "$1",
@@ -2358,17 +2358,17 @@
}
},
"multipleInputEmails": {
"message": "1 or more emails are invalid"
"message": "1 або більше адрес е-пошти недійсні"
},
"inputTrimValidator": {
"message": "Input must not contain only whitespace.",
"message": "Введене значення не повинно містити лише пробіл.",
"description": "Notification to inform the user that a form's input can't contain only whitespace."
},
"inputEmail": {
"message": "Input is not an email address."
"message": "Введені дані не є адресою е-пошти."
},
"fieldsNeedAttention": {
"message": "$COUNT$ field(s) above need your attention.",
"message": "$COUNT$ поле (поля) вище потребують вашої уваги.",
"placeholders": {
"count": {
"content": "$1",
@@ -2377,22 +2377,22 @@
}
},
"selectPlaceholder": {
"message": "-- Select --"
"message": "-- Оберіть--"
},
"multiSelectPlaceholder": {
"message": "-- Type to filter --"
"message": "-- Введіть для фільтрування --"
},
"multiSelectLoading": {
"message": "Retrieving options..."
"message": "Параметри отримання..."
},
"multiSelectNotFound": {
"message": "No items found"
"message": "Нічого не знайдено"
},
"multiSelectClearAll": {
"message": "Clear all"
"message": "Очистити все"
},
"plusNMore": {
"message": "+ $QUANTITY$ more",
"message": "+ ще $QUANTITY$",
"placeholders": {
"quantity": {
"content": "$1",
@@ -2401,10 +2401,10 @@
}
},
"submenu": {
"message": "Submenu"
"message": "Підменю"
},
"toggleCollapse": {
"message": "Toggle collapse",
"message": "Згорнути/розгорнути",
"description": "Toggling an expand/collapse state."
}
}

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1GB bộ nhớ lưu trữ tập tin được mã hóa."
},
"ppremiumSignUpTwoStep": {
"message": "Tuỳ chọn đăng nhập 2 bước bổ sung như YubiKey, FIDO U2F, và Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "Thanh lọc mật khẩu, kiểm tra an toàn tài khoản và các báo cáo rò rĩ dữ liệu là để giữ cho kho của bạn an toàn."

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "1 GB 文件附件加密存储。"
},
"ppremiumSignUpTwoStep": {
"message": "额外的两步登录选项,如 YubiKey、FIDO U2F 和 Duo"
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "密码健康、账户体检以及数据泄露报告,保障您的密码库安全。"

View File

@@ -795,8 +795,8 @@
"ppremiumSignUpStorage": {
"message": "用於檔案附件的 1 GB 加密儲存空間。"
},
"ppremiumSignUpTwoStep": {
"message": "YubiKey、FIDO U2F 和 Duo 等額外的兩步驟登入選項。"
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"ppremiumSignUpReports": {
"message": "密碼健康度檢查、提供帳戶體檢以及資料外洩報告,以保障您的密碼庫安全。"

View File

@@ -1,7 +1,6 @@
import { mock, MockProxy } from "jest-mock-extended";
import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service";
import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction";
import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status";
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
import { CipherRepromptType } from "@bitwarden/common/vault/enums/cipher-reprompt-type";
@@ -14,7 +13,6 @@ describe("CipherContextMenuHandler", () => {
let mainContextMenuHandler: MockProxy<MainContextMenuHandler>;
let authService: MockProxy<AuthService>;
let cipherService: MockProxy<CipherService>;
let userVerificationService: MockProxy<UserVerificationService>;
let sut: CipherContextMenuHandler;
@@ -22,17 +20,10 @@ describe("CipherContextMenuHandler", () => {
mainContextMenuHandler = mock();
authService = mock();
cipherService = mock();
userVerificationService = mock();
userVerificationService.hasMasterPassword.mockResolvedValue(true);
jest.spyOn(MainContextMenuHandler, "removeAll").mockResolvedValue();
sut = new CipherContextMenuHandler(
mainContextMenuHandler,
authService,
cipherService,
userVerificationService
);
sut = new CipherContextMenuHandler(mainContextMenuHandler, authService, cipherService);
});
afterEach(() => jest.resetAllMocks());
@@ -78,7 +69,7 @@ describe("CipherContextMenuHandler", () => {
expect(mainContextMenuHandler.noLogins).toHaveBeenCalledTimes(1);
});
it("only adds valid ciphers", async () => {
it("only adds login ciphers including ciphers that require reprompt", async () => {
authService.getAuthStatus.mockResolvedValue(AuthenticationStatus.Unlocked);
mainContextMenuHandler.init.mockResolvedValue(true);
@@ -90,47 +81,6 @@ describe("CipherContextMenuHandler", () => {
name: "Test Cipher",
login: { username: "Test Username" },
};
cipherService.getAllDecryptedForUrl.mockResolvedValue([
null, // invalid cipher
undefined, // invalid cipher
{ type: CipherType.Card }, // invalid cipher
{ type: CipherType.Login, reprompt: CipherRepromptType.Password }, // invalid cipher
realCipher, // valid cipher
] as any[]);
await sut.update("https://test.com");
expect(cipherService.getAllDecryptedForUrl).toHaveBeenCalledTimes(1);
expect(cipherService.getAllDecryptedForUrl).toHaveBeenCalledWith("https://test.com");
expect(mainContextMenuHandler.loadOptions).toHaveBeenCalledTimes(2);
expect(mainContextMenuHandler.loadOptions).toHaveBeenCalledWith(
"Test Cipher (Test Username)",
"5",
"https://test.com",
realCipher
);
});
it("adds ciphers with master password reprompt if the user does not have a master password", async () => {
authService.getAuthStatus.mockResolvedValue(AuthenticationStatus.Unlocked);
// User does not have a master password, or has one but hasn't logged in with it (key connector user or TDE user)
userVerificationService.hasMasterPasswordAndMasterKeyHash.mockResolvedValue(false);
mainContextMenuHandler.init.mockResolvedValue(true);
const realCipher = {
id: "5",
type: CipherType.Login,
reprompt: CipherRepromptType.None,
name: "Test Cipher",
login: { username: "Test Username" },
};
const repromptCipher = {
id: "6",
type: CipherType.Login,
@@ -143,8 +93,8 @@ describe("CipherContextMenuHandler", () => {
null, // invalid cipher
undefined, // invalid cipher
{ type: CipherType.Card }, // invalid cipher
repromptCipher, // valid cipher
realCipher, // valid cipher
repromptCipher,
] as any[]);
await sut.update("https://test.com");
@@ -153,7 +103,6 @@ describe("CipherContextMenuHandler", () => {
expect(cipherService.getAllDecryptedForUrl).toHaveBeenCalledWith("https://test.com");
// Should call this twice, once for each valid cipher
expect(mainContextMenuHandler.loadOptions).toHaveBeenCalledTimes(2);
expect(mainContextMenuHandler.loadOptions).toHaveBeenCalledWith(

View File

@@ -1,5 +1,4 @@
import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service";
import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction";
import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status";
import { StateFactory } from "@bitwarden/common/platform/factories/state-factory";
import { Utils } from "@bitwarden/common/platform/misc/utils";
@@ -12,7 +11,6 @@ import {
authServiceFactory,
AuthServiceInitOptions,
} from "../../auth/background/service-factories/auth-service.factory";
import { userVerificationServiceFactory } from "../../auth/background/service-factories/user-verification-service.factory";
import { Account } from "../../models/account";
import { CachedServices } from "../../platform/background/service-factories/factory-options";
import { BrowserApi } from "../../platform/browser/browser-api";
@@ -39,8 +37,7 @@ export class CipherContextMenuHandler {
constructor(
private mainContextMenuHandler: MainContextMenuHandler,
private authService: AuthService,
private cipherService: CipherService,
private userVerificationService: UserVerificationService
private cipherService: CipherService
) {}
static async create(cachedServices: CachedServices) {
@@ -69,9 +66,6 @@ export class CipherContextMenuHandler {
clipboardWriteCallback: NOT_IMPLEMENTED,
win: self,
},
stateMigrationServiceOptions: {
stateFactory: stateFactory,
},
stateServiceOptions: {
stateFactory: stateFactory,
},
@@ -79,8 +73,7 @@ export class CipherContextMenuHandler {
return new CipherContextMenuHandler(
await MainContextMenuHandler.mv3Create(cachedServices),
await authServiceFactory(cachedServices, serviceOptions),
await cipherServiceFactory(cachedServices, serviceOptions),
await userVerificationServiceFactory(cachedServices, serviceOptions)
await cipherServiceFactory(cachedServices, serviceOptions)
);
}
@@ -180,11 +173,7 @@ export class CipherContextMenuHandler {
}
private async updateForCipher(url: string, cipher: CipherView) {
if (
cipher == null ||
cipher.type !== CipherType.Login ||
(await this.userVerificationService.hasMasterPasswordAndMasterKeyHash())
) {
if (cipher == null || cipher.type !== CipherType.Login) {
return;
}

View File

@@ -3,6 +3,7 @@ import { mock, MockProxy } from "jest-mock-extended";
import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service";
import { TotpService } from "@bitwarden/common/abstractions/totp.service";
import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service";
import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction";
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
import { CipherRepromptType } from "@bitwarden/common/vault/enums/cipher-reprompt-type";
import { CipherType } from "@bitwarden/common/vault/enums/cipher-type";
@@ -63,6 +64,7 @@ describe("ContextMenuClickedHandler", () => {
let cipherService: MockProxy<CipherService>;
let totpService: MockProxy<TotpService>;
let eventCollectionService: MockProxy<EventCollectionService>;
let userVerificationService: MockProxy<UserVerificationService>;
let sut: ContextMenuClickedHandler;
@@ -82,7 +84,8 @@ describe("ContextMenuClickedHandler", () => {
authService,
cipherService,
totpService,
eventCollectionService
eventCollectionService,
userVerificationService
);
});

View File

@@ -1,6 +1,7 @@
import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service";
import { TotpService } from "@bitwarden/common/abstractions/totp.service";
import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service";
import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction";
import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status";
import { EventType } from "@bitwarden/common/enums";
import { StateFactory } from "@bitwarden/common/platform/factories/state-factory";
@@ -14,6 +15,7 @@ import {
AuthServiceInitOptions,
} from "../../auth/background/service-factories/auth-service.factory";
import { totpServiceFactory } from "../../auth/background/service-factories/totp-service.factory";
import { userVerificationServiceFactory } from "../../auth/background/service-factories/user-verification-service.factory";
import LockedVaultPendingNotificationsItem from "../../background/models/lockedVaultPendingNotificationsItem";
import { eventCollectionServiceFactory } from "../../background/service-factories/event-collection-service.factory";
import { Account } from "../../models/account";
@@ -56,7 +58,8 @@ export class ContextMenuClickedHandler {
private authService: AuthService,
private cipherService: CipherService,
private totpService: TotpService,
private eventCollectionService: EventCollectionService
private eventCollectionService: EventCollectionService,
private userVerificationService: UserVerificationService
) {}
static async mv3Create(cachedServices: CachedServices) {
@@ -85,9 +88,6 @@ export class ContextMenuClickedHandler {
clipboardWriteCallback: NOT_IMPLEMENTED,
win: self,
},
stateMigrationServiceOptions: {
stateFactory: stateFactory,
},
stateServiceOptions: {
stateFactory: stateFactory,
},
@@ -109,7 +109,8 @@ export class ContextMenuClickedHandler {
await authServiceFactory(cachedServices, serviceOptions),
await cipherServiceFactory(cachedServices, serviceOptions),
await totpServiceFactory(cachedServices, serviceOptions),
await eventCollectionServiceFactory(cachedServices, serviceOptions)
await eventCollectionServiceFactory(cachedServices, serviceOptions),
await userVerificationServiceFactory(cachedServices, serviceOptions)
);
}
@@ -204,7 +205,7 @@ export class ContextMenuClickedHandler {
return;
}
if (cipher.reprompt !== CipherRepromptType.None) {
if (await this.isPasswordRepromptRequired(cipher)) {
await BrowserApi.tabSendMessageData(tab, "passwordReprompt", {
cipherId: cipher.id,
action: AUTOFILL_ID,
@@ -218,7 +219,7 @@ export class ContextMenuClickedHandler {
this.copyToClipboard({ text: cipher.login.username, tab: tab });
break;
case COPY_PASSWORD_ID:
if (cipher.reprompt !== CipherRepromptType.None) {
if (await this.isPasswordRepromptRequired(cipher)) {
await BrowserApi.tabSendMessageData(tab, "passwordReprompt", {
cipherId: cipher.id,
action: COPY_PASSWORD_ID,
@@ -230,7 +231,7 @@ export class ContextMenuClickedHandler {
break;
case COPY_VERIFICATIONCODE_ID:
if (cipher.reprompt !== CipherRepromptType.None) {
if (await this.isPasswordRepromptRequired(cipher)) {
await BrowserApi.tabSendMessageData(tab, "passwordReprompt", {
cipherId: cipher.id,
action: COPY_VERIFICATIONCODE_ID,
@@ -246,6 +247,13 @@ export class ContextMenuClickedHandler {
}
}
private async isPasswordRepromptRequired(cipher: CipherView): Promise<boolean> {
return (
cipher.reprompt === CipherRepromptType.Password &&
(await this.userVerificationService.hasMasterPasswordAndMasterKeyHash())
);
}
private async getIdentifier(tab: chrome.tabs.Tab, info: chrome.contextMenus.OnClickData) {
return new Promise<string>((resolve, reject) => {
BrowserApi.sendTabsMessage(

View File

@@ -79,9 +79,6 @@ export class MainContextMenuHandler {
logServiceOptions: {
isDev: false,
},
stateMigrationServiceOptions: {
stateFactory: stateFactory,
},
stateServiceOptions: {
stateFactory: stateFactory,
},

View File

@@ -768,8 +768,16 @@
// Detect if within an iframe, and the iframe is sandboxed
function isSandboxed() {
// self.origin is 'null' if inside a frame with sandboxed csp or iframe tag
return self.origin == null || self.origin === 'null';
// self.origin is 'null' if inside a frame with sandboxed csp or iframe tag
if (String(self.origin).toLowerCase() === "null") {
return true;
}
if (window.frameElement?.hasAttribute("sandbox")) {
return true;
}
return location.hostname === "";
}
function doFill(fillScript) {

View File

@@ -849,7 +849,15 @@ function fill(document: Document, fillScript: AutofillScript) {
// Detect if within an iframe, and the iframe is sandboxed
function isSandboxed() {
// self.origin is 'null' if inside a frame with sandboxed csp or iframe tag
return self.origin == null || self.origin === "null";
if (String(self.origin).toLowerCase() === "null") {
return true;
}
if (window.frameElement?.hasAttribute("sandbox")) {
return true;
}
return location.hostname === "";
}
function doFill(fillScript: AutofillScript) {

View File

@@ -59,7 +59,6 @@ import { EncryptServiceImplementation } from "@bitwarden/common/platform/service
import { MultithreadEncryptServiceImplementation } from "@bitwarden/common/platform/services/cryptography/multithread-encrypt.service.implementation";
import { FileUploadService } from "@bitwarden/common/platform/services/file-upload/file-upload.service";
import { MemoryStorageService } from "@bitwarden/common/platform/services/memory-storage.service";
import { StateMigrationService } from "@bitwarden/common/platform/services/state-migration.service";
import { SystemService } from "@bitwarden/common/platform/services/system.service";
import { WebCryptoFunctionService } from "@bitwarden/common/platform/services/web-crypto-function.service";
import { AvatarUpdateService } from "@bitwarden/common/services/account/avatar-update.service";
@@ -177,7 +176,6 @@ export default class MainBackground {
searchService: SearchServiceAbstraction;
notificationsService: NotificationsServiceAbstraction;
stateService: StateServiceAbstraction;
stateMigrationService: StateMigrationService;
systemService: SystemServiceAbstraction;
eventCollectionService: EventCollectionServiceAbstraction;
eventUploadService: EventUploadServiceAbstraction;
@@ -262,17 +260,11 @@ export default class MainBackground {
new KeyGenerationService(this.cryptoFunctionService)
)
: new MemoryStorageService();
this.stateMigrationService = new StateMigrationService(
this.storageService,
this.secureStorageService,
new StateFactory(GlobalState, Account)
);
this.stateService = new BrowserStateService(
this.storageService,
this.secureStorageService,
this.memoryStorageService,
this.logService,
this.stateMigrationService,
new StateFactory(GlobalState, Account)
);
this.platformUtilsService = new BrowserPlatformUtilsService(
@@ -635,7 +627,8 @@ export default class MainBackground {
this.authService,
this.cipherService,
this.totpService,
this.eventCollectionService
this.eventCollectionService,
this.userVerificationService
);
this.contextMenusBackground = new ContextMenusBackground(contextMenuClickedHandler);
@@ -670,8 +663,7 @@ export default class MainBackground {
this.cipherContextMenuHandler = new CipherContextMenuHandler(
this.mainContextMenuHandler,
this.authService,
this.cipherService,
this.userVerificationService
this.cipherService
);
}
}

View File

@@ -1,40 +0,0 @@
import { StateFactory } from "@bitwarden/common/platform/factories/state-factory";
import { GlobalState } from "@bitwarden/common/platform/models/domain/global-state";
import { StateMigrationService } from "@bitwarden/common/platform/services/state-migration.service";
import { Account } from "../../../models/account";
import { CachedServices, factory, FactoryOptions } from "./factory-options";
import {
diskStorageServiceFactory,
DiskStorageServiceInitOptions,
secureStorageServiceFactory,
SecureStorageServiceInitOptions,
} from "./storage-service.factory";
type StateMigrationServiceFactoryOptions = FactoryOptions & {
stateMigrationServiceOptions: {
stateFactory: StateFactory<GlobalState, Account>;
};
};
export type StateMigrationServiceInitOptions = StateMigrationServiceFactoryOptions &
DiskStorageServiceInitOptions &
SecureStorageServiceInitOptions;
export function stateMigrationServiceFactory(
cache: { stateMigrationService?: StateMigrationService } & CachedServices,
opts: StateMigrationServiceInitOptions
): Promise<StateMigrationService> {
return factory(
cache,
"stateMigrationService",
opts,
async () =>
new StateMigrationService(
await diskStorageServiceFactory(cache, opts),
await secureStorageServiceFactory(cache, opts),
opts.stateMigrationServiceOptions.stateFactory
)
);
}

View File

@@ -6,10 +6,6 @@ import { BrowserStateService } from "../../services/browser-state.service";
import { CachedServices, factory, FactoryOptions } from "./factory-options";
import { logServiceFactory, LogServiceInitOptions } from "./log-service.factory";
import {
stateMigrationServiceFactory,
StateMigrationServiceInitOptions,
} from "./state-migration-service.factory";
import {
diskStorageServiceFactory,
secureStorageServiceFactory,
@@ -30,8 +26,7 @@ export type StateServiceInitOptions = StateServiceFactoryOptions &
DiskStorageServiceInitOptions &
SecureStorageServiceInitOptions &
MemoryStorageServiceInitOptions &
LogServiceInitOptions &
StateMigrationServiceInitOptions;
LogServiceInitOptions;
export async function stateServiceFactory(
cache: { stateService?: BrowserStateService } & CachedServices,
@@ -47,7 +42,6 @@ export async function stateServiceFactory(
await secureStorageServiceFactory(cache, opts),
await memoryStorageServiceFactory(cache, opts),
await logServiceFactory(cache, opts),
await stateMigrationServiceFactory(cache, opts),
opts.stateServiceOptions.stateFactory,
opts.stateServiceOptions.useAccountCache
)

View File

@@ -47,9 +47,6 @@ const doAutoFillLogin = async (tab: chrome.tabs.Tab): Promise<void> => {
stateServiceOptions: {
stateFactory: new StateFactory(GlobalState, Account),
},
stateMigrationServiceOptions: {
stateFactory: new StateFactory(GlobalState, Account),
},
apiServiceOptions: {
logoutCallback: () => Promise.resolve(),
},
@@ -94,9 +91,6 @@ const doGeneratePasswordToClipboard = async (tab: chrome.tabs.Tab): Promise<void
clipboardWriteCallback: () => Promise.resolve(),
win: self,
},
stateMigrationServiceOptions: {
stateFactory: stateFactory,
},
stateServiceOptions: {
stateFactory: stateFactory,
},

View File

@@ -23,9 +23,6 @@ export async function onInstallListener(details: chrome.runtime.InstalledDetails
stateServiceOptions: {
stateFactory: new StateFactory(GlobalState, Account),
},
stateMigrationServiceOptions: {
stateFactory: new StateFactory(GlobalState, Account),
},
};
const environmentService = await environmentServiceFactory(cache, opts);

View File

@@ -272,9 +272,6 @@ export class UpdateBadge {
stateServiceOptions: {
stateFactory: new StateFactory(GlobalState, Account),
},
stateMigrationServiceOptions: {
stateFactory: new StateFactory(GlobalState, Account),
},
apiServiceOptions: {
logoutCallback: () => Promise.reject("not implemented"),
},

View File

@@ -12,7 +12,6 @@ class BrowserPopoutWindowService implements BrowserPopupWindowServiceInterface {
};
async openUnlockPrompt(senderWindowId: number) {
await this.closeUnlockPrompt();
await this.openSingleActionPopout(
senderWindowId,
"popup/index.html?uilocation=popout",
@@ -36,8 +35,6 @@ class BrowserPopoutWindowService implements BrowserPopupWindowServiceInterface {
action: string;
}
) {
await this.closePasswordRepromptPrompt();
const promptWindowPath =
"popup/index.html#/view-cipher" +
"?uilocation=popout" +
@@ -73,18 +70,16 @@ class BrowserPopoutWindowService implements BrowserPopupWindowServiceInterface {
const popupWindow = await BrowserApi.createWindow(windowOptions);
if (!singleActionPopoutKey) {
return;
}
await this.closeSingleActionPopout(singleActionPopoutKey);
this.singleActionPopoutTabIds[singleActionPopoutKey] = popupWindow?.tabs[0].id;
}
private async closeSingleActionPopout(popoutKey: string) {
const tabId = this.singleActionPopoutTabIds[popoutKey];
if (!tabId) {
return;
if (tabId) {
await BrowserApi.removeTab(tabId);
}
await BrowserApi.removeTab(tabId);
this.singleActionPopoutTabIds[popoutKey] = null;
}
}

View File

@@ -8,7 +8,6 @@ import {
import { StateFactory } from "@bitwarden/common/platform/factories/state-factory";
import { GlobalState } from "@bitwarden/common/platform/models/domain/global-state";
import { State } from "@bitwarden/common/platform/models/domain/state";
import { StateMigrationService } from "@bitwarden/common/platform/services/state-migration.service";
import { SendType } from "@bitwarden/common/tools/send/enums/send-type";
import { SendView } from "@bitwarden/common/tools/send/models/view/send.view";
@@ -26,7 +25,6 @@ describe("Browser State Service", () => {
let secureStorageService: MockProxy<AbstractStorageService>;
let diskStorageService: MockProxy<AbstractStorageService>;
let logService: MockProxy<LogService>;
let stateMigrationService: MockProxy<StateMigrationService>;
let stateFactory: MockProxy<StateFactory<GlobalState, Account>>;
let useAccountCache: boolean;
@@ -39,7 +37,6 @@ describe("Browser State Service", () => {
secureStorageService = mock();
diskStorageService = mock();
logService = mock();
stateMigrationService = mock();
stateFactory = mock();
// turn off account cache for tests
useAccountCache = false;
@@ -64,7 +61,6 @@ describe("Browser State Service", () => {
secureStorageService,
memoryStorageService,
logService,
stateMigrationService,
stateFactory,
useAccountCache
);

View File

@@ -1,7 +1,6 @@
import { BehaviorSubject } from "rxjs";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { StateMigrationService } from "@bitwarden/common/platform/abstractions/state-migration.service";
import {
AbstractStorageService,
AbstractMemoryStorageService,
@@ -41,7 +40,6 @@ export class BrowserStateService
secureStorageService: AbstractStorageService,
memoryStorageService: AbstractMemoryStorageService,
logService: LogService,
stateMigrationService: StateMigrationService,
stateFactory: StateFactory<GlobalState, Account>,
useAccountCache = true
) {
@@ -50,7 +48,6 @@ export class BrowserStateService
secureStorageService,
memoryStorageService,
logService,
stateMigrationService,
stateFactory,
useAccountCache
);

View File

@@ -24,10 +24,10 @@ $gray-light: #777;
$text-muted: $gray-light;
$brand-primary: #175ddc;
$brand-danger: #dd4b39;
$brand-success: #00a65a;
$brand-danger: #c83522;
$brand-success: #017e45;
$brand-info: #555555;
$brand-warning: #bf7e16;
$brand-warning: #8b6609;
$brand-primary-accent: #1252a3;
$background-color: #f0f0f0;
@@ -43,6 +43,10 @@ $button-color: lighten($text-color, 40%);
$button-color-primary: darken($brand-primary, 8%);
$button-color-danger: darken($brand-danger, 10%);
$code-color: #c01176;
$code-color-dark: #f08dc7;
$code-color-nord: #dbb1d5;
$solarizedDarkBase03: #002b36;
$solarizedDarkBase02: #073642;
$solarizedDarkBase01: #586e75;
@@ -122,7 +126,7 @@ $themes: (
// light has no hover so use same color
webkitCalendarPickerHoverFilter: invert(46%) sepia(69%) saturate(6397%) hue-rotate(211deg)
brightness(85%) contrast(103%),
codeColor: #e83e8c,
codeColor: $code-color,
),
dark: (
textColor: #ffffff,
@@ -184,7 +188,7 @@ $themes: (
hue-rotate(184deg) brightness(87%) contrast(93%),
webkitCalendarPickerHoverFilter: brightness(0) saturate(100%) invert(100%) sepia(0%)
saturate(0%) hue-rotate(93deg) brightness(103%) contrast(103%),
codeColor: #e83e8c,
codeColor: $code-color-dark,
),
nord: (
textColor: $nord5,
@@ -237,7 +241,7 @@ $themes: (
passwordCountText: $nord5,
calloutBorderColor: $nord0,
calloutBackgroundColor: $nord2,
toastTextColor: #ffffff,
toastTextColor: #000000,
svgSuffix: "-dark.svg",
transparentColor: rgba(0, 0, 0, 0),
dateInputColorScheme: dark,
@@ -246,7 +250,7 @@ $themes: (
// has no hover so use same color
webkitCalendarPickerHoverFilter: brightness(0) saturate(100%) invert(94%) sepia(5%)
saturate(454%) hue-rotate(185deg) brightness(93%) contrast(96%),
codeColor: #e83e8c,
codeColor: $code-color-nord,
),
solarizedDark: (
textColor: $solarizedDarkBase2,
@@ -299,7 +303,7 @@ $themes: (
passwordCountText: $solarizedDarkBase2,
calloutBorderColor: $solarizedDarkBase03,
calloutBackgroundColor: $solarizedDarkBase01,
toastTextColor: #ffffff,
toastTextColor: #000000,
svgSuffix: "-solarized.svg",
transparentColor: rgba(0, 0, 0, 0),
dateInputColorScheme: dark,
@@ -307,7 +311,7 @@ $themes: (
hue-rotate(138deg) brightness(92%) contrast(90%),
webkitCalendarPickerHoverFilter: brightness(0) saturate(100%) invert(94%) sepia(10%)
saturate(462%) hue-rotate(345deg) brightness(103%) contrast(87%),
codeColor: #e83e8c,
codeColor: $code-color-dark,
),
);

View File

@@ -47,7 +47,6 @@ import { I18nService as I18nServiceAbstraction } from "@bitwarden/common/platfor
import { LogService as LogServiceAbstraction } from "@bitwarden/common/platform/abstractions/log.service";
import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
import { StateMigrationService } from "@bitwarden/common/platform/abstractions/state-migration.service";
import {
StateService as BaseStateServiceAbstraction,
StateService,
@@ -442,36 +441,23 @@ function getBgService<T>(service: keyof MainBackground) {
provide: MEMORY_STORAGE,
useFactory: getBgService<AbstractStorageService>("memoryStorageService"),
},
{
provide: StateMigrationService,
useFactory: getBgService<StateMigrationService>("stateMigrationService"),
deps: [],
},
{
provide: StateServiceAbstraction,
useFactory: (
storageService: AbstractStorageService,
secureStorageService: AbstractStorageService,
memoryStorageService: AbstractMemoryStorageService,
logService: LogServiceAbstraction,
stateMigrationService: StateMigrationService
logService: LogServiceAbstraction
) => {
return new BrowserStateService(
storageService,
secureStorageService,
memoryStorageService,
logService,
stateMigrationService,
new StateFactory(GlobalState, Account)
);
},
deps: [
AbstractStorageService,
SECURE_STORAGE,
MEMORY_STORAGE,
LogServiceAbstraction,
StateMigrationService,
],
deps: [AbstractStorageService, SECURE_STORAGE, MEMORY_STORAGE, LogServiceAbstraction],
},
{
provide: UsernameGenerationServiceAbstraction,

View File

@@ -22,7 +22,7 @@
</li>
<li>
<i class="bwi bwi-li bwi-check text-success" aria-hidden="true"></i>
{{ "ppremiumSignUpTwoStep" | i18n }}
{{ "premiumSignUpTwoStepOptions" | i18n }}
</li>
<li>
<i class="bwi bwi-li bwi-check text-success" aria-hidden="true"></i>

View File

@@ -170,8 +170,8 @@ export class ViewComponent extends BaseViewComponent {
switch (this.loadAction) {
case AUTOFILL_ID:
this.fillCipher();
return;
await this.fillCipher();
break;
case COPY_USERNAME_ID:
await this.copy(this.cipher.login.username, "username", "Username");
break;
@@ -186,7 +186,7 @@ export class ViewComponent extends BaseViewComponent {
}
if (this.inPopout && this.loadAction) {
this.close();
setTimeout(() => this.close(), 1000);
}
}
@@ -238,10 +238,6 @@ export class ViewComponent extends BaseViewComponent {
const didAutofill = await this.doAutofill();
if (didAutofill) {
this.platformUtilsService.showToast("success", null, this.i18nService.t("autoFillSuccess"));
if (this.inPopout) {
this.close();
}
}
}

View File

@@ -37,7 +37,6 @@ import { EnvironmentService } from "@bitwarden/common/platform/services/environm
import { FileUploadService } from "@bitwarden/common/platform/services/file-upload/file-upload.service";
import { MemoryStorageService } from "@bitwarden/common/platform/services/memory-storage.service";
import { NoopMessagingService } from "@bitwarden/common/platform/services/noop-messaging.service";
import { StateMigrationService } from "@bitwarden/common/platform/services/state-migration.service";
import { StateService } from "@bitwarden/common/platform/services/state.service";
import { AuditService } from "@bitwarden/common/services/audit.service";
import { OrganizationUserServiceImplementation } from "@bitwarden/common/services/organization-user/organization-user.service.implementation";
@@ -136,7 +135,6 @@ export class Main {
keyConnectorService: KeyConnectorService;
userVerificationService: UserVerificationService;
stateService: StateService;
stateMigrationService: StateMigrationService;
organizationService: OrganizationService;
providerService: ProviderService;
twoFactorService: TwoFactorService;
@@ -188,18 +186,11 @@ export class Main {
this.memoryStorageService = new MemoryStorageService();
this.stateMigrationService = new StateMigrationService(
this.storageService,
this.secureStorageService,
new StateFactory(GlobalState, Account)
);
this.stateService = new StateService(
this.storageService,
this.secureStorageService,
this.memoryStorageService,
this.logService,
this.stateMigrationService,
new StateFactory(GlobalState, Account)
);

View File

@@ -298,9 +298,12 @@ export class Program {
.option("-p, --passphrase", "Generate a passphrase.")
.option("--length <length>", "Length of the password.")
.option("--words <words>", "Number of words.")
.option("--minNumber <count>", "Minimum number of numeric characters.")
.option("--minSpecial <count>", "Minimum number of special characters.")
.option("--separator <separator>", "Word separator.")
.option("-c, --capitalize", "Title case passphrase.")
.option("--includeNumber", "Passphrase includes number.")
.option("--ambiguous", "Avoid ambiguous characters.")
.on("--help", () => {
writeLn("\n Notes:");
writeLn("");

View File

@@ -1,5 +1,6 @@
import { StateService } from "@bitwarden/common/platform/abstractions/state.service";
import { PasswordGenerationServiceAbstraction } from "@bitwarden/common/tools/generator/password";
import { PasswordGeneratorOptions } from "@bitwarden/common/tools/generator/password/password-generator-options";
import { Response } from "../models/response";
import { StringResponse } from "../models/response/string.response";
@@ -13,7 +14,7 @@ export class GenerateCommand {
async run(cmdOptions: Record<string, any>): Promise<Response> {
const normalizedOptions = new Options(cmdOptions);
const options = {
const options: PasswordGeneratorOptions = {
uppercase: normalizedOptions.uppercase,
lowercase: normalizedOptions.lowercase,
number: normalizedOptions.number,
@@ -24,6 +25,9 @@ export class GenerateCommand {
numWords: normalizedOptions.words,
capitalize: normalizedOptions.capitalize,
includeNumber: normalizedOptions.includeNumber,
minNumber: normalizedOptions.minNumber,
minSpecial: normalizedOptions.minSpecial,
ambiguous: normalizedOptions.ambiguous,
};
const enforcedOptions = (await this.stateService.getIsAuthenticated())
@@ -47,6 +51,9 @@ class Options {
words: number;
capitalize: boolean;
includeNumber: boolean;
minNumber: number;
minSpecial: number;
ambiguous: boolean;
constructor(passedOptions: Record<string, any>) {
this.uppercase = CliUtils.convertBooleanOption(passedOptions?.uppercase);
@@ -55,10 +62,13 @@ class Options {
this.special = CliUtils.convertBooleanOption(passedOptions?.special);
this.capitalize = CliUtils.convertBooleanOption(passedOptions?.capitalize);
this.includeNumber = CliUtils.convertBooleanOption(passedOptions?.includeNumber);
this.length = passedOptions?.length != null ? parseInt(passedOptions?.length, null) : 14;
this.ambiguous = CliUtils.convertBooleanOption(passedOptions?.ambiguous);
this.length = CliUtils.convertNumberOption(passedOptions?.length, 14);
this.type = passedOptions?.passphrase ? "passphrase" : "password";
this.separator = passedOptions?.separator == null ? "-" : passedOptions.separator + "";
this.words = passedOptions?.words != null ? parseInt(passedOptions.words, null) : 3;
this.separator = CliUtils.convertStringOption(passedOptions?.separator, "-");
this.words = CliUtils.convertNumberOption(passedOptions?.words, 3);
this.minNumber = CliUtils.convertNumberOption(passedOptions?.minNumber, 1);
this.minSpecial = CliUtils.convertNumberOption(passedOptions?.minSpecial, 1);
if (!this.uppercase && !this.lowercase && !this.special && !this.number) {
this.lowercase = true;

View File

@@ -253,4 +253,20 @@ export class CliUtils {
static convertBooleanOption(optionValue: any) {
return optionValue || optionValue === "" ? true : false;
}
static convertNumberOption(optionValue: any, defaultValue: number) {
try {
if (optionValue != null) {
const numVal = parseInt(optionValue);
return !Number.isNaN(numVal) ? numVal : defaultValue;
}
return defaultValue;
} catch {
return defaultValue;
}
}
static convertStringOption(optionValue: any, defaultValue: string) {
return optionValue != null ? String(optionValue) : defaultValue;
}
}

View File

@@ -1,7 +1,7 @@
{
"name": "@bitwarden/desktop",
"description": "A secure and free password manager for all of your devices.",
"version": "2023.8.2",
"version": "2023.8.3",
"keywords": [
"bitwarden",
"password",

View File

@@ -28,7 +28,6 @@ import {
} from "@bitwarden/common/platform/abstractions/log.service";
import { MessagingService as MessagingServiceAbstraction } from "@bitwarden/common/platform/abstractions/messaging.service";
import { PlatformUtilsService as PlatformUtilsServiceAbstraction } from "@bitwarden/common/platform/abstractions/platform-utils.service";
import { StateMigrationService as StateMigrationServiceAbstraction } from "@bitwarden/common/platform/abstractions/state-migration.service";
import { StateService as StateServiceAbstraction } from "@bitwarden/common/platform/abstractions/state.service";
import { AbstractStorageService } from "@bitwarden/common/platform/abstractions/storage.service";
import { SystemService as SystemServiceAbstraction } from "@bitwarden/common/platform/abstractions/system.service";
@@ -134,7 +133,6 @@ const RELOAD_CALLBACK = new InjectionToken<() => any>("RELOAD_CALLBACK");
SECURE_STORAGE,
MEMORY_STORAGE,
LogService,
StateMigrationServiceAbstraction,
STATE_FACTORY,
STATE_SERVICE_USE_CACHE,
],

View File

@@ -182,6 +182,6 @@ export class LoginComponent extends BaseLoginComponent implements OnDestroy {
private focusInput() {
const email = this.loggedEmail;
document.getElementById(email == null || email === "" ? "email" : "masterPassword").focus();
document.getElementById(email == null || email === "" ? "email" : "masterPassword")?.focus();
}
}

View File

@@ -1077,8 +1077,8 @@
"premiumSignUpStorage": {
"message": "1 GG geënkripteerde berging vir lêeraanhegsels."
},
"premiumSignUpTwoStep": {
"message": "Bykomende tweestapaantekenopsies soos YubiKey, FIDO U2F en Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"premiumSignUpReports": {
"message": "Wagwoordhigiëne, rekeningwelstand en databreukverslae om u kluis veilig te hou."

View File

@@ -1077,8 +1077,8 @@
"premiumSignUpStorage": {
"message": "1 جيغابايت وحدة تخزين مشفرة لمرفقات الملفات."
},
"premiumSignUpTwoStep": {
"message": "خيارات تسجيل الدخول الإضافية من خطوتين مثل YubiKey و FIDO U2F و Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"premiumSignUpReports": {
"message": "نظافة كلمة المرور، صحة الحساب، وتقارير خرق البيانات للحفاظ على سلامة خزنتك."

View File

@@ -1077,8 +1077,8 @@
"premiumSignUpStorage": {
"message": "Fayl qoşmaları üçün 1 GB şifrələnmiş saxlama sahəsi."
},
"premiumSignUpTwoStep": {
"message": "YubiKey, FIDO U2F və Duo kimi iki mərhələli giriş seçimləri."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"premiumSignUpReports": {
"message": "Anbarınızın təhlükəsiyini təmin etmək üçün parol gigiyenası, hesab sağlamlığı və verilənlərin pozulması hesabatları."

View File

@@ -1077,8 +1077,8 @@
"premiumSignUpStorage": {
"message": "1 ГБ зашыфраванага сховішча для далучаных файлаў."
},
"premiumSignUpTwoStep": {
"message": "Дадатковыя варыянты двухэтапнага ўваходу, такія як YubiKey, FIDO U2F і Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"premiumSignUpReports": {
"message": "Гігіена пароляў, здароўе ўліковага запісу і справаздачы аб уцечках даных для забеспячэння бяспекі вашага сховішча."

View File

@@ -1077,8 +1077,8 @@
"premiumSignUpStorage": {
"message": "1 ГБ пространство за файлове, които се шифроват."
},
"premiumSignUpTwoStep": {
"message": "Двустепенно удостоверяване чрез YubiKey, FIDO U2F и Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"premiumSignUpReports": {
"message": "Проверки в списъците с публикувани пароли, проверка на регистрациите и доклади за пробивите в сигурността, което спомага трезорът ви да е допълнително защитен."

View File

@@ -1077,8 +1077,8 @@
"premiumSignUpStorage": {
"message": "ফাইল সংযুক্তির জন্য ১ জিবি এনক্রিপ্টেড স্থান।"
},
"premiumSignUpTwoStep": {
"message": "YubiKey, FIDO U2F, ও Duo এর মতো অতিরিক্ত দ্বি-পদক্ষেপ লগইন বিকল্পগুলি।"
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"premiumSignUpReports": {
"message": "আপনার ভল্টটি সুরক্ষিত রাখতে পাসওয়ার্ড স্বাস্থ্যকরন, অ্যাকাউন্ট স্বাস্থ্য এবং ডেটা লঙ্ঘনের প্রতিবেদন।"

View File

@@ -1077,8 +1077,8 @@
"premiumSignUpStorage": {
"message": "1 GB šifriranog prostora za pohranu podataka."
},
"premiumSignUpTwoStep": {
"message": "Dodatne mogućnosti za prijavu u dva koraka kao što su YubiKey, FIDO U2F i Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"premiumSignUpReports": {
"message": "Higijenu lozinki, zdravlje računa i izvještaje o krađi podataka radi zaštite svojeg trezora."

View File

@@ -1077,8 +1077,8 @@
"premiumSignUpStorage": {
"message": "1 GB d'emmagatzematge xifrat per als fitxers adjunts."
},
"premiumSignUpTwoStep": {
"message": "Opcions addicionals d'inici de sessió en dues passes com ara YubiKey, FIDO U2F i Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"premiumSignUpReports": {
"message": "Requisits d'higiene de la contrasenya, salut del compte i informe d'infraccions de dades per mantenir la seguretat de la vostra caixa forta."

View File

@@ -1077,8 +1077,8 @@
"premiumSignUpStorage": {
"message": "1 GB šifrovaného uložiště pro přílohy."
},
"premiumSignUpTwoStep": {
"message": "Další možnosti dvoufázového přihlášení, jako je například YubiKey, FIDO U2F a Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"premiumSignUpReports": {
"message": "Reporty o hygieně Vašich hesel, zdraví účtu a narušeních bezpečnosti."

View File

@@ -1077,8 +1077,8 @@
"premiumSignUpStorage": {
"message": "1 GB encrypted storage for file attachments."
},
"premiumSignUpTwoStep": {
"message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietary two-step login options such as YubiKey and Duo."
},
"premiumSignUpReports": {
"message": "Password hygiene, account health, and data breach reports to keep your vault safe."

View File

@@ -1077,8 +1077,8 @@
"premiumSignUpStorage": {
"message": "1 GB krypteret lagerplads til filvedhæftninger."
},
"premiumSignUpTwoStep": {
"message": "Yderligere totrins-loginmuligheder, såsom YubiKey, FIDO U2F og Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietære totrins-login muligheder, såsom YubiKey og Duo."
},
"premiumSignUpReports": {
"message": "Adgangskodehygiejne, kontosundhed og rapporter om datalæk til at holde din boks sikker."

View File

@@ -1077,8 +1077,8 @@
"premiumSignUpStorage": {
"message": "1 GB verschlüsselter Speicherplatz für Dateianhänge."
},
"premiumSignUpTwoStep": {
"message": "Zusätzliche Zwei-Faktor-Anmeldung über YubiKey, FIDO U2F, und Duo."
"premiumSignUpTwoStepOptions": {
"message": "Proprietäre Optionen für die Zwei-Faktor Authentifizierung wie YubiKey und Duo."
},
"premiumSignUpReports": {
"message": "Berichte über Kennworthygiene, Kontostatus und Datenschutzverletzungen, um Ihren Tresor sicher zu halten."

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