From e9f83aee90a2a5bce7e820f4cf627a3d83e38592 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Fri, 19 May 2023 08:28:02 +0200
Subject: [PATCH 1/2] Autosync the updated translations (#2524)
Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>
---
src/App/Resources/AppResources.bn.resx | 26 +--
src/App/Resources/AppResources.fa.resx | 12 +-
src/App/Resources/AppResources.hi.resx | 210 ++++++++++++-------------
src/App/Resources/AppResources.uk.resx | 4 +-
store/apple/hi/copy.resx | 44 +++---
store/google/hi/copy.resx | 48 +++---
6 files changed, 172 insertions(+), 172 deletions(-)
diff --git a/src/App/Resources/AppResources.bn.resx b/src/App/Resources/AppResources.bn.resx
index c7c2ff9fb..974ad9da4 100644
--- a/src/App/Resources/AppResources.bn.resx
+++ b/src/App/Resources/AppResources.bn.resx
@@ -346,7 +346,7 @@
Confirmation message after successfully deleting a login.
- Submit
+ জমা দিনSync
@@ -356,7 +356,7 @@
ধন্যবাদ
- Tools
+ টুলসThe title for the tools page.
@@ -379,7 +379,7 @@
Confirmation message after successfully copying a value to the clipboard.
- Verify fingerprint
+ আঙ্গুলের ছাপ যাচাই করুনপ্রধান পাসওয়ার্ড যাচাইকরণ
@@ -397,7 +397,7 @@
আমাদের ওয়েবসাইটে ঢু মেরে আসুন
- Visit our website to get help, news, email us, and/or learn more about how to use Bitwarden.
+ সাহায্য পেতে, খবর পেতে, আমাদের ইমেল করতে এবং/অথবা বিটওয়ার্ডেন কীভাবে ব্যবহার করবেন সে সম্পর্কে আরও জানতে আমাদের ওয়েবসাইট দেখুন।ওয়েবসাইট
@@ -413,7 +413,7 @@
আপনার নতুন অ্যাকাউন্ট তৈরি করা হয়েছে! আপনি এখন লগইন করতে পারবেন।
- Add an Item
+ একটি আইটেম যোগ করুনApp extension
@@ -440,13 +440,13 @@
Bitwarden Auto-fill Service
- Use the Bitwarden accessibility service to auto-fill your logins.
+ আপনার লগইনগুলি স্বয়ংক্রিয়ভাবে পূরণ করতে বিটওয়ার্ডেন অ্যাক্সেসিবিলিটি পরিষেবা ব্যবহার করুন৷ইমেইল পরিবর্তন করুন
- You can change your email address on the bitwarden.com web vault. Do you want to visit the website now?
+ আপনি bitwarden.com ওয়েব ভল্টে আপনার ইমেল ঠিকানা পরিবর্তন করতে পারেন। আপনি কি এখনই ওয়েবসাইট ভিজিট করতে চান?প্রধান পাসওয়ার্ড পরিবর্তন
@@ -511,7 +511,7 @@
প্রিয়
- Fingerprint
+ আঙুলের ছাপপাসওয়ার্ড তৈরি করুন
@@ -584,7 +584,7 @@
যদি আপনি আপনার পাসওয়ার্ড ভুলে যান তাহলে একটি প্রধান পাসওয়ার্ডের ইঙ্গিতটি আপনাকে মনে করাতে সাহায্য করতে পারে।
- Master password must be at least {0} characters long.
+ মাস্টার পাসওয়ার্ড কমপক্ষে {0} অক্ষরের হতে হবে।সর্বনিম্ন সংখ্যা
@@ -595,7 +595,7 @@
Minimum special characters for password generator settings
- More settings
+ আরও সেটিংসYou must log into the main Bitwarden app before you can use the extension.
@@ -684,7 +684,7 @@
Item saved
- Submitting...
+ জমা দেওয়া হচ্ছে...Message shown when interacting with the server
@@ -717,7 +717,7 @@
Unlock with PIN code
- Validating
+ কার্যকর করা হচ্ছেMessage shown when interacting with the server
@@ -876,7 +876,7 @@
Unable to download file.
- Your device cannot open this type of file.
+ আপনার ডিভাইস এই ধরনের ফাইল খুলতে পারে না।ডাউনলোড হচ্ছে...
diff --git a/src/App/Resources/AppResources.fa.resx b/src/App/Resources/AppResources.fa.resx
index 176f0eda3..6ac80f876 100644
--- a/src/App/Resources/AppResources.fa.resx
+++ b/src/App/Resources/AppResources.fa.resx
@@ -1753,10 +1753,10 @@
Confirmation alert message when soft-deleting a cipher.
- Biometric unlock for this account is disabled pending verification of master password.
+ باز کردن قفل بیومتریک برای این حساب کاربری در انتظار تأیید کلمه عبور اصلی غیرفعال است.
- Autofill biometric unlock for this account is disabled pending verification of master password.
+ باز کردن قفل پر کردن خودکار بیومتریک برای این حساب کاربری در انتظار تأیید کلمه عبور اصلی غیرفعال است.فعال کردن همگامسازی در نوسازی
@@ -2144,10 +2144,10 @@
سیاستهای سازمانتان بر مهلت زمانی گاوصندوق شما تأثیر میگذارد. حداکثر زمان مجاز گاوصندوق {0} ساعت و {1} دقیقه است
- Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is {0} hour(s) and {1} minute(s). Your vault timeout action is set to {2}.
+ سیاستهای سازمانتان بر مهلت زمانی گاوصندوق شما تأثیر میگذارد. حداکثر زمان مجاز گاوصندوق {0} ساعت و {1} دقیقه است. عملگر مهلت زمانی گاوصندوق شما روی {2} تنظیم شده است.
- Your organization policies have set your vault timeout action to {0}.
+ سباستهای سازمان شما، عملگر زمانبندی گاوصندوق شما را روی {0} تنظیم کرده است.مهلت زمانی شما بیش از محدودیت های تعیین شده توسط سازمانتان است.
@@ -2611,9 +2611,9 @@
هیچ موردی وجود ندارد که با جستجو مطابقت داشته باشد
- Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.
+ کلمه عبور اصلی شما با یک یا چند سیاست سازمانتان مطابقت ندارد. برای دسترسی به گاوصندوق، باید همین حالا کلمه عبور اصلی خود را بهروز کنید. در صورت ادامه، شما از نشست فعلی خود خارج میشوید و باید دوباره وارد سیستم شوید. نشست فعال در دستگاه های دیگر ممکن است تا یک ساعت همچنان فعال باقی بمانند.
- Current master password
+ کلمه عبور اصلی فعلی
diff --git a/src/App/Resources/AppResources.hi.resx b/src/App/Resources/AppResources.hi.resx
index b257e3fac..1c0e9face 100644
--- a/src/App/Resources/AppResources.hi.resx
+++ b/src/App/Resources/AppResources.hi.resx
@@ -118,14 +118,14 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
- बारे में
+ हमारे बारे मेंजोड़ेंAdd/create a new entity (verb).
- नया फोल्डर जोड़ें
+ फोल्डर जोड़ेंचीज़ जोड़ें
@@ -136,11 +136,11 @@
Alert title when something goes wrong.
- वापस जाएं
+ पीछे जाएंNavigate back to the previous screen.
- bitwarden
+ बिटवार्डनApp name. Shouldn't ever change.
@@ -156,105 +156,105 @@
The button text that allows a user to copy the login's password to their clipboard.
- उपयोगकर्ता नाम की प्रतिलिपि बनाएँ
+ यूज़रनाम कॉपी करेंThe button text that allows a user to copy the login's username to their clipboard.
- क्रेडिट्स
+ क्रेडिटTitle for page that we use to give credit to resources that we use.
- मिटाए
+ मिटाएंDelete an entity (verb).
- मिटाया जा रहा हैं
+ मिटाया जा रहा हैं...Message shown when interacting with the server
- क्या आप वास्तव में हटाना चाहते हैं? इसे नष्ट नहीं किया जा सकता है
+ पक्का मिटाएं? इसे अंडू नहीं किया जा सकता।Confirmation alert message when deleteing something.
- संशोधन करें
+ बदलाव करें
- फ़ोल्डर संपादित करें
+ फोल्डर बदलाव करेंईमेलShort label for an email address.
- ई-मेल पता
+ ईमेल पताFull label for a email address.हमें ईमेल करें
- सहायता प्राप्त करने या प्रतिक्रिया छोड़ने के लिए हमें ईमेल करें।
+ मदद लेने या फीडबैक देने के लिए हमें ईमेल करें।
- अपना पिन डालें
+ अपना पिन कोड डालें।
- पसंदीदा
+ मनपसंदTitle for your favorite items in the vault.
- बग रिपोर्ट दर्ज करें
+ बग रिपोर्ट भेजें
- हमारे GitHub भंडार में एक मुद्दे को बताएं।
+ हमारे गिटहब रिपॉज़िटरी में समस्या बताएं।
- फिंगरप्रिंट से सत्यापन करें
+ फिंगरप्रिंट से सत्यापन करें।
- फ़ोल्डर
+ फोल्डरLabel for a folder.
- नया फ़ोल्डर बनाया गया
+ नया फोल्डर बनाया गया।
- फ़ोल्डर को हटाया
+ फोल्डर मिटाया गया।
- कोई फ़ोल्डर नहीं है
+ कोई फोल्डर नहीं हैItems that have no folder specified go in this special "catch-all" folder.
- फ़ोल्डर्स
+ फोल्डर
- फ़ोल्डर अद्यतन हुआ
+ फोल्डर सेव हुआ
- वेबसाइट पर जाएँ
+ वेबसाइट पर जाएंThe button text that allows user to launch the website to their web browser.
- सहायता और सुझाव
+ मदद और फीडबैक
- छुपायें
+ छुपाएंHide a secret value that is currently shown (password).
- जारी रखने से पहले कृपया इंटरनेट से जुड़े।
+ जारी रखने से पहले इंटरनेट से जुड़ें।Description message for the alert when internet connection is required to continue.
- इंटरनेट से जुड़िए।
+ इंटरनेट कनेक्शन चाहिएTitle for the alert when internet connection is required to continue.
- मास्टर पासवर्ड गलत है। फिर कोशिश करें।
+ मुख्य पासवर्ड गलत है। वापस कोशिश करें।
- पिन गलत है। फिर कोशिश करें।
+ पिन गलत है। वापस कोशिश करें।खोलें
@@ -269,38 +269,38 @@
Title for login page. (noun)
- लॉग आउट
+ लॉग आउट करेंThe log out button text (verb).
- क्या आप वाकई लॉग आउट करना चाहते हैं?
+ पक्का लॉग आउट करें?खाता हटाएं
- क्या आप वाकई यह खाता हटाना चाहते हैं?
+ पक्का खाता हटाएं?
- Account already added
+ खाता पहले से जोड़ा गया
- Would you like to switch to it now?
+ अभी खाता इस्तेमाल करें?
- मास्टर / मुख्य पासवर्ड
+ मुख्य पासवर्डLabel for a master password.
- अतिरिक्त
+ औरText to define that there are more options things to see.
- मेरी तिजोरी
+ मेरा तिजोरीThe title for the vault page.
- Authenticator
+ सत्यापन करनेवालाAuthenticator TOTP feature
@@ -311,11 +311,11 @@
नहीं
- टिप्पणियाँ
+ नोटLabel for notes.
- ठीक
+ ठीक हैAcknowledgement.
@@ -323,69 +323,69 @@
Label for a password.
- सहेजें
+ सेव करेंButton text for a save operation (verb).
- Move
+ ले जाएंसेव हो रहा है...Message shown when interacting with the server
- सेटिंग्स
+ सेटिंगThe title for the settings page.
- दिखाएँ
+ दिखाएंReveal a hidden value (password).
- आइटम हटा दिया गया है।
+ चीज़ मिटाया गया।Confirmation message after successfully deleting a login.जमा करें
- संकालन
+ सिंकThe title for the sync page.
- धन्यवाद
+ शुक्रिया
- उपकरण
+ औज़ारThe title for the tools page.
- URI
+ यूआरआईLabel for a uri/url.
- अंगुलिछाप से खोलें
+ फिंगरप्रिंट से खोलें
- उपयोगकर्ता नाम:
+ यूज़रनामLabel for a username.
- {0} की आश्यकता है।
+ {0} फील्ड चाहिए।Validation message for when a form field is left blank and is required to be entered.
- {0} कॉपी कर लिया गया है।
+ {0} कॉपी कियाConfirmation message after successfully copying a value to the clipboard.
- अंगुलिछाप दें
+ फिंगरप्रिंट सत्यापित करें
- मास्टर पासवर्ड बताएं।
+ मुख्य पासवर्ड सत्यापित करें
- पिन बताएं।
+ पिन सत्यापित करें।संस्करण
@@ -394,29 +394,29 @@
देखें
- हमारी वेबसाइट पर जाएँ
+ हमारी वेबसाइट पर जाएं
- Visit our website to get help, news, email us, and/or learn more about how to use bitwarden.
+ मदद लेने, खबर लेने, हमें ईमेल करने, और/या बिटवार्डन के इस्तेमाल के बारे में ज़्यादा जानने के लिए हमारी वेबसाइट पर जाएं।वेबसाइटLabel for a website.
- हाँ
+ हांखाता
- अपना नया खाता बनाया गया है! अब आप लॉग ऑन कर सकते हैं।
+ आपका नया खाता बनाया गया! अब आप लॉग इन कर सकते हैं।
- आइटम जोड़ें
+ चीज़ जोड़ें
- ऐप का विस्तारण
+ ऐप एक्सटेंशनUse the bitwarden accessibility service to auto-fill your logins across apps and the web.
@@ -776,10 +776,10 @@
सक्षम
- Off
+ बंद
- On
+ चालूस्थिति
@@ -1096,16 +1096,16 @@ Scanning will happen automatically.
मध्य नाम
- Mr
+ श्री
- Mrs
+ श्रीमती
- Ms
+ श्रीमती
- Mx
+ मैक्सनवंबर
@@ -2274,7 +2274,7 @@ Scanning will happen automatically.
Vault: {0}
- All
+ सबTOTP
@@ -2365,13 +2365,13 @@ select Add TOTP to store the key safely
Login denied
- Approve login requests
+ लॉगइन मांग मानेUse this device to approve login requests made from other devices.
- Allow notifications
+ सूचना देने देंReceive push notifications for new login requests
@@ -2522,99 +2522,99 @@ Do you want to switch to this account?
Resend notification
- Need another option?
+ दूसरा ऑप्शन चाहिए?
- View all log in options
+ ऑप्शन में सारे लॉग देखें
- This request is no longer valid
+ ये मांग अब मान्य नहीं है
- Pending login requests
+ लंबित लॉगइन मांगे
- Decline all requests
+ सारे मांग नकारे
- Are you sure you want to decline all pending login requests?
+ सारे लंबित लॉगइन मांग पक्का नकारें?
- Requests declined
+ मांग नकारे गए
- No pending requests
+ कोई लंबित मांग नहीं
- Enable camera permission to use the scanner
+ स्कैनर इस्तेमाल करने के लिए कैमरा अनुमति दें
- Language
+ भाषा
- The language has been changed to {0}. Please restart the app to see the change
+ भाषा {0} में बदली गई। बदलाव देखने के लिए ऐप बंद करके वापस खोलें।
- Language change requires app restart
+ भाषा बदलाव के लिए ऐप बंद करके खोलना पड़ेगा
- Default (System)
+ डिफॉल्ट (सिस्टम)
- Important
+ ज़रूरी
- Your master password cannot be recovered if you forget it! {0} characters minimum.
+ आप अपना मुख्य पासवर्ड भूलने के बाद वापस नहीं ले सकते। {0} अक्षर कम-से-कम।
- Weak Master Password
+ कमज़ोर मुख्य पासवर्ड
- Weak password identified. Use a strong password to protect your account. Are you sure you want to use a weak password?
+ पासवर्ड कमज़ोर है। अपना खाता महफूज़ रखने के लिए एक ताकतवर पासवर्ड इस्तेमाल करें। कमज़ोर पासवर्ड पक्का इस्तेमाल करें?
- Weak
+ कमज़ोर
- Good
+ अच्छा
- Strong
+ ताकतवर
- Check known data breaches for this password
+ पुराने डाटा लीक में इस पासवर्ड को खोजें
- Exposed Master Password
+ मुख्य पासवर्ड लीक हुआ था
- Password found in a data breach. Use a unique password to protect your account. Are you sure you want to use an exposed password?
+ पासवर्ड एक डाटा लीक में मिला। अपना खाता महफूज़ रखने के लिए एक खास पासवर्ड इस्तेमाल करें। लीक हुआ पासवर्ड इस्तेमाल करें?
- Weak and Exposed Master Password
+ कमज़ोर और लीक हुआ मुख्य पासवर्ड
- Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?
+ पासवर्ड कमज़ोर है और एक डाटा लीक में मिला। अपना खाता महफूज़ रखने के लिए एक ताकतवर और खास पासवर्ड इस्तेमाल करें। ये पासवर्ड पक्का इस्तेमाल करें?
- Organization SSO identifier required.
+ संगठन एसएसओ पहचान चाहिए।
- Add the key to an existing or new item
+ चाबी एक मौजूदा या नए चीज़ में जोड़ें
- There are no items in your vault that match "{0}"
+ आपके तिजोरी में ऐसी कोई भी चीज़ नहीं है जो "{0}" से मेल खाती है
- Search for an item or add a new item
+ चीज़ खोजें या नया चीज़ जोड़ें
- There are no items that match the search
+ कोई भी चीज़ खोज शब्द से मेल नहीं खाता
- Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.
+ आपका मुख्य पासवर्ड आपके संगठन के एक या उससे ज़्यादा नीति को नहीं मानता। तिजोरी एक्सेस करने के लिए आपको अपना मुख्य पासवर्ड अभी बदलना होगा। ये करने से आप अपने चालू सत्र से लॉग आउट हो जाएंगे, जिसके वजह से आपको वापस लॉग इन करना पड़ेगा। दूसरे डिवाइसों पर चालू सत्र एक घंटे तक सक्रिय रह सकते हैं।
- Current master password
+ चालू मुख्य पासवर्ड
diff --git a/src/App/Resources/AppResources.uk.resx b/src/App/Resources/AppResources.uk.resx
index 9a1b37c3a..d02f69588 100644
--- a/src/App/Resources/AppResources.uk.resx
+++ b/src/App/Resources/AppResources.uk.resx
@@ -1753,10 +1753,10 @@
Confirmation alert message when soft-deleting a cipher.
- Biometric unlock for this account is disabled pending verification of master password.
+ Біометричне розблокування для цього облікового запису вимкнено. Очікується перевірка головного пароля.
- Autofill biometric unlock for this account is disabled pending verification of master password.
+ Біометричне розблокування під час автозаповнення для цього облікового запису вимкнено. Очікується перевірка головного пароля.Дозволити синхронізацію жестом
diff --git a/store/apple/hi/copy.resx b/store/apple/hi/copy.resx
index 10bff1f84..1f9138b79 100644
--- a/store/apple/hi/copy.resx
+++ b/store/apple/hi/copy.resx
@@ -118,55 +118,55 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
- Bitwarden पासवर्ड मैनेजर
+ बिटवार्डन पासवर्ड मैनेजरMax 30 characters
- Bitwarden, Inc. is the parent company of 8bit Solutions LLC.
+ बिटवार्डन अंतरराष्ट्रीय कॉरपोरेशन, 8बिट सॉल्यूश्नस एलएलसी की मूल कंपनी है।
-NAMED BEST PASSWORD MANAGER BY THE VERGE, U.S. NEWS & WORLD REPORT, CNET, AND MORE.
+द वर्ज, यूएस न्यूज़ एंड वर्ल्ड रिपोर्ट, सीनेट, और कई दूसरे मीडिया संगठन द्वारा बोला गया दुनिया का सबसे बेहतरीन पासवर्ड मैनेजर।
-Manage, store, secure, and share unlimited passwords across unlimited devices from anywhere. Bitwarden delivers open source password management solutions to everyone, whether at home, at work, or on the go.
+अनगिनत पासवर्ड मैनेज, स्टोर, महफूज़, और शेयर करें कही से भी। बिटवार्डन देता है ओपन सोर्स पासवर्ड मैनेजमेंट सुविधा सबको, चाहे वो घर पर हो, दफ्तर पर हो, या घूम रहे हो।
-Generate strong, unique, and random passwords based on security requirements for every website you frequent.
+आप जिन वेबसाइट पर जाते है उनके लिए बनाएं ताकतवर, खास, और बेतरतीब पासवर्ड उनकी सुरक्षा ज़रूरतो के हिसाब से।
-Bitwarden Send quickly transmits encrypted information --- files and plaintext -- directly to anyone.
+बिटवार्डन सेंड किसी को भी एन्क्रिप्टेड जानकारी, फाइल और सादा टेक्सट, तुरंत भेजें।
-Bitwarden offers Teams and Enterprise plans for companies so you can securely share passwords with colleagues.
+बिटवार्डन कंपनियों के लिए टीम और बिज़नेस प्लान भी देता है ताकि आप अपने साथ काम करनेवालो के साथ पासवर्ड शेयर करे सुरक्षित होकर।
-Why Choose Bitwarden:
+बिटवार्डन को क्यों चुनें:
-World-Class Encryption
-Passwords are protected with advanced end-to-end encryption (AES-256 bit, salted hashtag, and PBKDF2 SHA-256) so your data stays secure and private.
+ताकतवर एन्क्रिप्शन
+पासवर्ड एडवांस एंड-टू-एंड एन्क्रिप्शन (एईएस-256 बिट, सॉल्टेड हैशटैग, और पीबीकेडीएफ2 शा-256) के साथ सुरक्षित रखा जाता है ताकि आपका डाटा महफूज़ और निजी रहे।
-Built-in Password Generator
-Generate strong, unique, and random passwords based on security requirements for every website you frequent.
+पहले से बना पासवर्ड जेनरेटर
+आप जिन वेबसाइट पर जाते है उनके लिए बनाएं ताकतवर, खास, और बेतरतीब पासवर्ड उनकी सुरक्षा ज़रूरतो के हिसाब से।
-Global Translations
-Bitwarden translations exist in 40 languages and are growing, thanks to our global community.
+अंतरराष्ट्रीय अनुवाद
+40 से ज़्यादा भाषा में बिटवार्डन इस्तेमाल करें, जिसे लिखा है हमारी अंतरराष्ट्रीय दोस्तो ने।
-Cross-Platform Applications
-Secure and share sensitive data within your Bitwarden Vault from any browser, mobile device, or desktop OS, and more.
+कई प्लेनफॉर्म पर मौजूद
+अपने बिटवार्डन तिजोरी से संवेदनशील डाटा महफूज़ और शेयर करें किसी भी ब्राउज़र, फोन, या डेस्कटॉप जैसे डिवाइसो से।
Max 4000 characters
- बिटवर्डन, 8 बिट, पासवर्ड, फ्री पासवर्ड मैनेजर, पासवर्ड मैनेजर, लॉगिन मैनेजर
+ बिटवर्डन, 8 बिट, पासवर्ड, मुफ्त पासवर्ड मैनेजर, पासवर्ड मैनेजर, लॉगइन मैनेजरMax 100 characters
- एक सुरक्षित तिजोरी से अपने सभी लॉगिन और पासवर्ड प्रबंधित करें
+ एक सुरक्षित तिजोरी से अपने सारे लॉगइन और पासवर्ड मैनेज करें
- स्वचालित रूप से मजबूत, यादृच्छिक और सुरक्षित पासवर्ड उत्पन्न करते हैं
+ अपनेआप ताकतवर, बेतरतीब, और महफूज़ पासवर्ड बनाएं
- टच आईडी, पिन कोड या मास्टर पासवर्ड से अपनी तिजोरी को सुरक्षित रखें
+ टच आईडी, पिन कोड, या मुख्य पासवर्ड से अपनी तिजोरी सुरक्षित रखें
- सफारी, क्रोम और अन्य सैकड़ों ऐप्स से ऑटो-फिल लॉगिन करें
+ सफारी, क्रोम, और सैकड़ों दूसरे ऐप से अपनेआप भरकर लॉगइन करें
- कई उपकरणों से अपने Vault को सिंक और एक्सेस करें
+ अपने तिजोरी को अलग-अलग डिवाइसो से सिंक और एक्सेस करें
diff --git a/store/google/hi/copy.resx b/store/google/hi/copy.resx
index 1d1420e6e..62790245b 100644
--- a/store/google/hi/copy.resx
+++ b/store/google/hi/copy.resx
@@ -118,61 +118,61 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
- bitwarden Password Manager
+ बिटवार्डन पासवर्ड मैनेजरMax 30 characters
- bitwarden is a login and password manager that helps keep you safe while online.
+ बिटवाडर्न एक लॉगइन और पासवर्ड मैनेजर है जो आपको ऑनलाइन महफूज़ रखता है।Max 80 characters
- Bitwarden, Inc. is the parent company of 8bit Solutions LLC.
+ बिटवार्डन अंतरराष्ट्रीय कॉरपोरेशन, 8बिट सॉल्यूश्नस एलएलसी की मूल कंपनी है।
-NAMED BEST PASSWORD MANAGER BY THE VERGE, U.S. NEWS & WORLD REPORT, CNET, AND MORE.
+द वर्ज, यूएस न्यूज़ एंड वर्ल्ड रिपोर्ट, सीनेट, और कई दूसरे मीडिया संगठन द्वारा बोला गया दुनिया का सबसे बेहतरीन पासवर्ड मैनेजर।
-Manage, store, secure, and share unlimited passwords across unlimited devices from anywhere. Bitwarden delivers open source password management solutions to everyone, whether at home, at work, or on the go.
+अनगिनत पासवर्ड मैनेज, स्टोर, महफूज़, और शेयर करें कही से भी। बिटवार्डन देता है ओपन सोर्स पासवर्ड मैनेजमेंट सुविधा सबको, चाहे वो घर पर हो, दफ्तर पर हो, या घूम रहे हो।
-Generate strong, unique, and random passwords based on security requirements for every website you frequent.
+आप जिन वेबसाइट पर जाते है उनके लिए बनाएं ताकतवर, खास, और बेतरतीब पासवर्ड उनकी सुरक्षा ज़रूरतो के हिसाब से।
-Bitwarden Send quickly transmits encrypted information --- files and plaintext -- directly to anyone.
+बिटवार्डन सेंड किसी को भी एन्क्रिप्टेड जानकारी, फाइल और सादा टेक्सट, तुरंत भेजें।
-Bitwarden offers Teams and Enterprise plans for companies so you can securely share passwords with colleagues.
+बिटवार्डन कंपनियों के लिए टीम और बिज़नेस प्लान भी देता है ताकि आप अपने साथ काम करनेवालो के साथ पासवर्ड शेयर करे सुरक्षित होकर।
-Why Choose Bitwarden:
+बिटवार्डन को क्यों चुनें:
-World-Class Encryption
-Passwords are protected with advanced end-to-end encryption (AES-256 bit, salted hashtag, and PBKDF2 SHA-256) so your data stays secure and private.
+ताकतवर एन्क्रिप्शन
+पासवर्ड एडवांस एंड-टू-एंड एन्क्रिप्शन (एईएस-256 बिट, सॉल्टेड हैशटैग, और पीबीकेडीएफ2 शा-256) के साथ सुरक्षित रखा जाता है ताकि आपका डाटा महफूज़ और निजी रहे।
-Built-in Password Generator
-Generate strong, unique, and random passwords based on security requirements for every website you frequent.
+पहले से बना पासवर्ड जेनरेटर
+आप जिन वेबसाइट पर जाते है उनके लिए बनाएं ताकतवर, खास, और बेतरतीब पासवर्ड उनकी सुरक्षा ज़रूरतो के हिसाब से।
-Global Translations
-Bitwarden translations exist in 40 languages and are growing, thanks to our global community.
+अंतरराष्ट्रीय अनुवाद
+40 से ज़्यादा भाषा में बिटवार्डन इस्तेमाल करें, जिसे लिखा है हमारी अंतरराष्ट्रीय दोस्तो ने।
-Cross-Platform Applications
-Secure and share sensitive data within your Bitwarden Vault from any browser, mobile device, or desktop OS, and more.
+कई प्लेनफॉर्म पर मौजूद
+अपने बिटवार्डन तिजोरी से संवेदनशील डाटा महफूज़ और शेयर करें किसी भी ब्राउज़र, फोन, या डेस्कटॉप जैसे डिवाइसो से।
Max 4000 characters
- आपके सभी उपकरणों के लिए एक सुरक्षित और मुफ्त पासवर्ड प्रबंधक
+ आपके सारे डिवाइसो के लिए एक सुरक्षित और मुफ्त पासवर्ड मैनेजर
- एक सुरक्षित तिजोरी से अपने सभी लॉगिन और पासवर्ड प्रबंधित करें
+ एक सुरक्षित तिजोरी से अपने सारे लॉगइन और पासवर्ड मैनेज करें
- स्वचालित रूप से मजबूत, यादृच्छिक और सुरक्षित पासवर्ड उत्पन्न करते हैं
+ अपनेआप ताकतवर, बेतरतीब, और महफूज़ पासवर्ड बनाएं
- टच आईडी, पिन कोड या मास्टर पासवर्ड से अपनी तिजोरी को सुरक्षित रखें
+ फिंगरप्रिंट, पिन कोड, या मुख्य पासवर्ड से अपनी तिजोरी सुरक्षित रखें
- अपने वेब ब्राउज़र और अन्य एप्लिकेशन के भीतर से जल्दी से लॉगिन करें
+ अपने वेब ब्राउज़र और दूसरे ऐप से जल्दी लॉगइन करें
- कई उपकरणों से अपने वॉल्ट को सिंक और एक्सेस करें
+ अपने तिजोरी को अलग-अलग डिवाइसों से सिंक और एक्सेस करें
-- फ़ोन
+- फोन
- टैबलेट
- डेस्कटॉप
- वेब
From 65307f6eabfcfc3ab513284e816f85140c1f0cb7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bispo?=
Date: Fri, 19 May 2023 12:42:41 +0100
Subject: [PATCH 2/2] [PM-1351][PM-190] Add a mobile service to retrieve
feature flags from API (#2431)
---
src/App/App.xaml.cs | 8 ++
.../Accounts/EnvironmentPageViewModel.cs | 4 +-
src/App/Pages/Accounts/HomePage.xaml | 26 +++++--
src/App/Pages/Accounts/HomePage.xaml.cs | 18 +++--
src/App/Pages/Accounts/HomePageViewModel.cs | 77 ++++++++++++++++++-
src/App/Pages/Accounts/LoginPageViewModel.cs | 14 +++-
src/App/Resources/AppResources.Designer.cs | 51 +++++++++++-
src/App/Resources/AppResources.resx | 19 ++++-
src/Core/Abstractions/IApiService.cs | 1 +
src/Core/Abstractions/IConfigService.cs | 15 ++++
src/Core/Abstractions/IStateService.cs | 2 +
src/Core/Constants.cs | 3 +
src/Core/Models/Data/EnvironmentUrlData.cs | 11 +++
src/Core/Models/Response/ConfigResponse.cs | 31 ++++++++
src/Core/Services/ApiService.cs | 10 +++
src/Core/Services/ConfigService.cs | 77 +++++++++++++++++++
src/Core/Services/StateService.cs | 10 +++
src/Core/Utilities/ServiceContainer.cs | 2 +
18 files changed, 355 insertions(+), 24 deletions(-)
create mode 100644 src/Core/Abstractions/IConfigService.cs
create mode 100644 src/Core/Models/Response/ConfigResponse.cs
create mode 100644 src/Core/Services/ConfigService.cs
diff --git a/src/App/App.xaml.cs b/src/App/App.xaml.cs
index 059159eb7..aa839370b 100644
--- a/src/App/App.xaml.cs
+++ b/src/App/App.xaml.cs
@@ -38,6 +38,7 @@ namespace Bit.App
private readonly IFileService _fileService;
private readonly IAccountsManager _accountsManager;
private readonly IPushNotificationService _pushNotificationService;
+ private readonly IConfigService _configService;
private static bool _isResumed;
// these variables are static because the app is launching new activities on notification click, creating new instances of App.
private static bool _pendingCheckPasswordlessLoginRequests;
@@ -61,6 +62,7 @@ namespace Bit.App
_fileService = ServiceContainer.Resolve();
_accountsManager = ServiceContainer.Resolve("accountsManager");
_pushNotificationService = ServiceContainer.Resolve();
+ _configService = ServiceContainer.Resolve();
_accountsManager.Init(() => Options, this);
@@ -169,6 +171,10 @@ namespace Bit.App
new NavigationPage(new UpdateTempPasswordPage()));
});
}
+ else if (message.Command == "syncCompleted")
+ {
+ await _configService.GetAsync(true);
+ }
else if (message.Command == Constants.PasswordlessLoginRequestKey
|| message.Command == "unlocked"
|| message.Command == AccountsManagerMessageCommands.ACCOUNT_SWITCH_COMPLETED)
@@ -293,6 +299,8 @@ namespace Bit.App
// Reset delay on every start
_vaultTimeoutService.DelayLockAndLogoutMs = null;
}
+
+ await _configService.GetAsync();
_messagingService.Send("startEventTimer");
}
diff --git a/src/App/Pages/Accounts/EnvironmentPageViewModel.cs b/src/App/Pages/Accounts/EnvironmentPageViewModel.cs
index 90fc8e698..abac94084 100644
--- a/src/App/Pages/Accounts/EnvironmentPageViewModel.cs
+++ b/src/App/Pages/Accounts/EnvironmentPageViewModel.cs
@@ -3,6 +3,7 @@ using System.Threading.Tasks;
using System.Windows.Input;
using Bit.App.Resources;
using Bit.Core.Abstractions;
+using Bit.Core.Models.Data;
using Bit.Core.Utilities;
using Xamarin.CommunityToolkit.ObjectModel;
@@ -18,7 +19,8 @@ namespace Bit.App.Pages
_environmentService = ServiceContainer.Resolve("environmentService");
PageTitle = AppResources.Settings;
- BaseUrl = _environmentService.BaseUrl;
+ BaseUrl = _environmentService.BaseUrl == EnvironmentUrlData.DefaultEU.Base || EnvironmentUrlData.DefaultUS.Base == _environmentService.BaseUrl ?
+ string.Empty : _environmentService.BaseUrl;
WebVaultUrl = _environmentService.WebVaultUrl;
ApiUrl = _environmentService.ApiUrl;
IdentityUrl = _environmentService.IdentityUrl;
diff --git a/src/App/Pages/Accounts/HomePage.xaml b/src/App/Pages/Accounts/HomePage.xaml
index 0bb2b6ebf..b44a243f9 100644
--- a/src/App/Pages/Accounts/HomePage.xaml
+++ b/src/App/Pages/Accounts/HomePage.xaml
@@ -25,10 +25,6 @@
AutomationProperties.IsInAccessibleTree="True"
AutomationProperties.Name="{u:I18n Account}" />
-
@@ -66,7 +62,27 @@
+ Margin="0, 6, 0 ,0">
+
+
+
+
+
+
+
diff --git a/src/App/Pages/Accounts/HomePage.xaml.cs b/src/App/Pages/Accounts/HomePage.xaml.cs
index cc5fdeccc..c374afe9f 100644
--- a/src/App/Pages/Accounts/HomePage.xaml.cs
+++ b/src/App/Pages/Accounts/HomePage.xaml.cs
@@ -15,6 +15,8 @@ namespace Bit.App.Pages
private readonly AppOptions _appOptions;
private IBroadcasterService _broadcasterService;
+ readonly LazyResolve _logger = new LazyResolve();
+
public HomePage(AppOptions appOptions = null)
{
_broadcasterService = ServiceContainer.Resolve("broadcasterService");
@@ -70,6 +72,14 @@ namespace Bit.App.Pages
});
}
});
+ try
+ {
+ await _vm.UpdateEnvironment();
+ }
+ catch (Exception ex)
+ {
+ _logger.Value?.Exception(ex);
+ }
}
protected override bool OnBackButtonPressed()
@@ -128,14 +138,6 @@ namespace Bit.App.Pages
await Navigation.PushModalAsync(new NavigationPage(page));
}
- private void Environment_Clicked(object sender, EventArgs e)
- {
- if (DoOnce())
- {
- _vm.StartEnvironmentAction();
- }
- }
-
private async Task StartEnvironmentAsync()
{
await _accountListOverlay.HideAsync();
diff --git a/src/App/Pages/Accounts/HomePageViewModel.cs b/src/App/Pages/Accounts/HomePageViewModel.cs
index d8a962141..f0ac6e699 100644
--- a/src/App/Pages/Accounts/HomePageViewModel.cs
+++ b/src/App/Pages/Accounts/HomePageViewModel.cs
@@ -4,7 +4,10 @@ using Bit.App.Abstractions;
using Bit.App.Controls;
using Bit.App.Resources;
using Bit.App.Utilities;
+using Bit.Core;
using Bit.Core.Abstractions;
+using Bit.Core.Models.Data;
+using Bit.Core.Models.Response;
using Bit.Core.Services;
using Bit.Core.Utilities;
using Xamarin.CommunityToolkit.ObjectModel;
@@ -17,16 +20,19 @@ namespace Bit.App.Pages
{
private readonly IStateService _stateService;
private readonly IMessagingService _messagingService;
+ private readonly IPlatformUtilsService _platformUtilsService;
+ private readonly ILogger _logger;
+ private readonly IEnvironmentService _environmentService;
+ private readonly IAccountsManager _accountManager;
+ private readonly IConfigService _configService;
private bool _showCancelButton;
private bool _rememberEmail;
private string _email;
+ private string _selectedEnvironmentName;
private bool _isEmailEnabled;
private bool _canLogin;
- private IPlatformUtilsService _platformUtilsService;
- private ILogger _logger;
- private IEnvironmentService _environmentService;
- private IAccountsManager _accountManager;
+ private bool _displayEuEnvironment;
public HomeViewModel()
{
@@ -36,6 +42,7 @@ namespace Bit.App.Pages
_logger = ServiceContainer.Resolve();
_environmentService = ServiceContainer.Resolve();
_accountManager = ServiceContainer.Resolve();
+ _configService = ServiceContainer.Resolve();
PageTitle = AppResources.Bitwarden;
@@ -49,6 +56,8 @@ namespace Bit.App.Pages
onException: _logger.Exception, allowsMultipleExecutions: false);
CloseCommand = new AsyncCommand(async () => await Device.InvokeOnMainThreadAsync(CloseAction),
onException: _logger.Exception, allowsMultipleExecutions: false);
+ ShowEnvironmentPickerCommand = new AsyncCommand(ShowEnvironmentPickerAsync,
+ onException: _logger.Exception, allowsMultipleExecutions: false);
InitAsync().FireAndForget();
}
@@ -71,6 +80,13 @@ namespace Bit.App.Pages
additionalPropertyNames: new[] { nameof(CanContinue) });
}
+ public string SelectedEnvironmentName
+ {
+ get => $"{_selectedEnvironmentName} {BitwardenIcons.AngleDown}";
+ set => SetProperty(ref _selectedEnvironmentName, value);
+ }
+
+ public string RegionText => $"{AppResources.Region}:";
public bool CanContinue => !string.IsNullOrEmpty(Email);
public FormattedString CreateAccountText
@@ -101,11 +117,13 @@ namespace Bit.App.Pages
public AsyncCommand ContinueCommand { get; }
public AsyncCommand CloseCommand { get; }
public AsyncCommand CreateAccountCommand { get; }
+ public AsyncCommand ShowEnvironmentPickerCommand { get; }
public async Task InitAsync()
{
Email = await _stateService.GetRememberedEmailAsync();
RememberEmail = !string.IsNullOrEmpty(Email);
+ _displayEuEnvironment = await _configService.GetFeatureFlagBoolAsync(Constants.DisplayEuEnvironmentFlag, forceRefresh: true);
}
public async Task ContinueToLoginStepAsync()
@@ -144,5 +162,56 @@ namespace Bit.App.Pages
await _platformUtilsService.ShowDialogAsync(AppResources.GenericErrorMessage, AppResources.AnErrorHasOccurred, AppResources.Ok);
}
}
+
+ public async Task ShowEnvironmentPickerAsync()
+ {
+ var options = _displayEuEnvironment
+ ? new string[] { AppResources.US, AppResources.EU, AppResources.SelfHosted }
+ : new string[] { AppResources.US, AppResources.SelfHosted };
+
+ await Device.InvokeOnMainThreadAsync(async () =>
+ {
+ var result = await Page.DisplayActionSheet(AppResources.DataRegion, AppResources.Cancel, null, options);
+
+ if (result is null || result == AppResources.Cancel)
+ {
+ return;
+ }
+
+ if (result == AppResources.SelfHosted)
+ {
+ StartEnvironmentAction?.Invoke();
+ return;
+ }
+
+ await _environmentService.SetUrlsAsync(result == AppResources.EU ? EnvironmentUrlData.DefaultEU : EnvironmentUrlData.DefaultUS);
+ SelectedEnvironmentName = result;
+ });
+ }
+
+ public async Task UpdateEnvironment()
+ {
+ var environmentsSaved = await _stateService.GetPreAuthEnvironmentUrlsAsync();
+ if (environmentsSaved == null || environmentsSaved.IsEmpty)
+ {
+ await _environmentService.SetUrlsAsync(EnvironmentUrlData.DefaultUS);
+ environmentsSaved = EnvironmentUrlData.DefaultUS;
+ SelectedEnvironmentName = AppResources.US;
+ return;
+ }
+
+ if (environmentsSaved.Base == EnvironmentUrlData.DefaultUS.Base)
+ {
+ SelectedEnvironmentName = AppResources.US;
+ }
+ else if (environmentsSaved.Base == EnvironmentUrlData.DefaultEU.Base)
+ {
+ SelectedEnvironmentName = AppResources.EU;
+ }
+ else
+ {
+ SelectedEnvironmentName = AppResources.SelfHosted;
+ }
+ }
}
}
diff --git a/src/App/Pages/Accounts/LoginPageViewModel.cs b/src/App/Pages/Accounts/LoginPageViewModel.cs
index cebdffdb3..1bf9b91c1 100644
--- a/src/App/Pages/Accounts/LoginPageViewModel.cs
+++ b/src/App/Pages/Accounts/LoginPageViewModel.cs
@@ -41,6 +41,7 @@ namespace Bit.App.Pages
private bool _isEmailEnabled;
private bool _isKnownDevice;
private bool _isExecutingLogin;
+ private string _environmentHostName;
public LoginPageViewModel()
{
@@ -115,6 +116,16 @@ namespace Bit.App.Pages
set => SetProperty(ref _isKnownDevice, value);
}
+ public string EnvironmentDomainName
+ {
+ get => _environmentHostName;
+ set => SetProperty(ref _environmentHostName, value,
+ additionalPropertyNames: new string[]
+ {
+ nameof(LoggingInAsText)
+ });
+ }
+
public AccountSwitchingOverlayViewModel AccountSwitchingOverlayViewModel { get; }
public Command LogInCommand { get; }
public Command TogglePasswordCommand { get; }
@@ -122,7 +133,7 @@ namespace Bit.App.Pages
public ICommand LogInWithDeviceCommand { get; }
public string ShowPasswordIcon => ShowPassword ? BitwardenIcons.EyeSlash : BitwardenIcons.Eye;
public string PasswordVisibilityAccessibilityText => ShowPassword ? AppResources.PasswordIsVisibleTapToHide : AppResources.PasswordIsNotVisibleTapToShow;
- public string LoggingInAsText => string.Format(AppResources.LoggingInAsX, Email);
+ public string LoggingInAsText => string.Format(AppResources.LoggingInAsXOnY, Email, EnvironmentDomainName);
public bool IsIosExtension { get; set; }
public bool CanRemoveAccount { get; set; }
public Action StartTwoFactorAction { get; set; }
@@ -151,6 +162,7 @@ namespace Bit.App.Pages
Email = await _stateService.GetRememberedEmailAsync();
}
CanRemoveAccount = await _stateService.GetActiveUserEmailAsync() != Email;
+ EnvironmentDomainName = CoreHelpers.GetDomain((await _stateService.GetPreAuthEnvironmentUrlsAsync())?.Base);
IsKnownDevice = await _apiService.GetKnownDeviceAsync(Email, await _appIdService.GetAppIdAsync());
}
catch (ApiException apiEx) when (apiEx.Error.StatusCode == System.Net.HttpStatusCode.Unauthorized)
diff --git a/src/App/Resources/AppResources.Designer.cs b/src/App/Resources/AppResources.Designer.cs
index 2245d5f78..3810c9cf9 100644
--- a/src/App/Resources/AppResources.Designer.cs
+++ b/src/App/Resources/AppResources.Designer.cs
@@ -1750,6 +1750,15 @@ namespace Bit.App.Resources {
}
}
+ ///
+ /// Looks up a localized string similar to Data region.
+ ///
+ public static string DataRegion {
+ get {
+ return ResourceManager.GetString("DataRegion", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Password updated.
///
@@ -2326,6 +2335,15 @@ namespace Bit.App.Resources {
}
}
+ ///
+ /// Looks up a localized string similar to EU.
+ ///
+ public static string EU {
+ get {
+ return ResourceManager.GetString("EU", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Exact.
///
@@ -3569,11 +3587,11 @@ namespace Bit.App.Resources {
}
///
- /// Looks up a localized string similar to Logging in as {0}.
+ /// Looks up a localized string similar to Logging in as {0} on {1}.
///
- public static string LoggingInAsX {
+ public static string LoggingInAsXOnY {
get {
- return ResourceManager.GetString("LoggingInAsX", resourceCulture);
+ return ResourceManager.GetString("LoggingInAsXOnY", resourceCulture);
}
}
@@ -5129,6 +5147,15 @@ namespace Bit.App.Resources {
}
}
+ ///
+ /// Looks up a localized string similar to Region.
+ ///
+ public static string Region {
+ get {
+ return ResourceManager.GetString("Region", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Remember me.
///
@@ -5462,6 +5489,15 @@ namespace Bit.App.Resources {
}
}
+ ///
+ /// Looks up a localized string similar to Self-hosted.
+ ///
+ public static string SelfHosted {
+ get {
+ return ResourceManager.GetString("SelfHosted", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Self-hosted environment.
///
@@ -6524,6 +6560,15 @@ namespace Bit.App.Resources {
}
}
+ ///
+ /// Looks up a localized string similar to US.
+ ///
+ public static string US {
+ get {
+ return ResourceManager.GetString("US", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Use another two-step login method.
///
diff --git a/src/App/Resources/AppResources.resx b/src/App/Resources/AppResources.resx
index 5e9c48694..a94cdb2b4 100644
--- a/src/App/Resources/AppResources.resx
+++ b/src/App/Resources/AppResources.resx
@@ -2496,8 +2496,8 @@ Do you want to switch to this account?Get master password hint
-
- Logging in as {0}
+
+ Logging in as {0} on {1}Not you?
@@ -2610,6 +2610,21 @@ Do you want to switch to this account?
There are no items that match the search
+
+ US
+
+
+ EU
+
+
+ Self-hosted
+
+
+ Data region
+
+
+ Region
+
Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.
diff --git a/src/Core/Abstractions/IApiService.cs b/src/Core/Abstractions/IApiService.cs
index 19930ce55..0c2474439 100644
--- a/src/Core/Abstractions/IApiService.cs
+++ b/src/Core/Abstractions/IApiService.cs
@@ -92,5 +92,6 @@ namespace Bit.Core.Abstractions
Task GetUsernameFromAsync(ForwardedEmailServiceType service, UsernameGeneratorConfig config);
Task GetKnownDeviceAsync(string email, string deviceIdentifier);
Task GetOrgDomainSsoDetailsAsync(string email);
+ Task GetConfigsAsync();
}
}
diff --git a/src/Core/Abstractions/IConfigService.cs b/src/Core/Abstractions/IConfigService.cs
new file mode 100644
index 000000000..285288d2f
--- /dev/null
+++ b/src/Core/Abstractions/IConfigService.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Threading.Tasks;
+using Bit.Core.Models.Response;
+
+namespace Bit.Core.Abstractions
+{
+ public interface IConfigService
+ {
+ Task GetAsync(bool forceRefresh = false);
+ Task GetFeatureFlagBoolAsync(string key, bool forceRefresh = false, bool defaultValue = false);
+ Task GetFeatureFlagStringAsync(string key, bool forceRefresh = false, string defaultValue = null);
+ Task GetFeatureFlagIntAsync(string key, bool forceRefresh = false, int defaultValue = 0);
+ }
+}
+
diff --git a/src/Core/Abstractions/IStateService.cs b/src/Core/Abstractions/IStateService.cs
index 4062599af..355acd093 100644
--- a/src/Core/Abstractions/IStateService.cs
+++ b/src/Core/Abstractions/IStateService.cs
@@ -174,5 +174,7 @@ namespace Bit.Core.Abstractions
Task SetPreLoginEmailAsync(string value);
string GetLocale();
void SetLocale(string locale);
+ ConfigResponse GetConfigs();
+ void SetConfigs(ConfigResponse value);
}
}
diff --git a/src/Core/Constants.cs b/src/Core/Constants.cs
index 0f4b0915c..73863f580 100644
--- a/src/Core/Constants.cs
+++ b/src/Core/Constants.cs
@@ -41,6 +41,9 @@
public const string NotificationDataType = "Type";
public const string PasswordlessLoginRequestKey = "passwordlessLoginRequest";
public const string PreLoginEmailKey = "preLoginEmailKey";
+ public const string ConfigsKey = "configsKey";
+ public const string DisplayEuEnvironmentFlag = "display-eu-environment";
+
///
/// This key is used to store the value of "ShouldConnectToWatch" of the last user that had logged in
/// which is used to handle Apple Watch state logic
diff --git a/src/Core/Models/Data/EnvironmentUrlData.cs b/src/Core/Models/Data/EnvironmentUrlData.cs
index 744541e19..ae57f804b 100644
--- a/src/Core/Models/Data/EnvironmentUrlData.cs
+++ b/src/Core/Models/Data/EnvironmentUrlData.cs
@@ -2,6 +2,9 @@
{
public class EnvironmentUrlData
{
+ public static EnvironmentUrlData DefaultUS = new EnvironmentUrlData { Base = "https://vault.bitwarden.com" };
+ public static EnvironmentUrlData DefaultEU = new EnvironmentUrlData { Base = "https://vault.bitwarden.eu" };
+
public string Base { get; set; }
public string Api { get; set; }
public string Identity { get; set; }
@@ -9,5 +12,13 @@
public string Notifications { get; set; }
public string WebVault { get; set; }
public string Events { get; set; }
+
+ public bool IsEmpty => string.IsNullOrEmpty(Base)
+ && string.IsNullOrEmpty(Api)
+ && string.IsNullOrEmpty(Identity)
+ && string.IsNullOrEmpty(Icons)
+ && string.IsNullOrEmpty(Notifications)
+ && string.IsNullOrEmpty(WebVault)
+ && string.IsNullOrEmpty(Events);
}
}
diff --git a/src/Core/Models/Response/ConfigResponse.cs b/src/Core/Models/Response/ConfigResponse.cs
new file mode 100644
index 000000000..d171a4bad
--- /dev/null
+++ b/src/Core/Models/Response/ConfigResponse.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+
+namespace Bit.Core.Models.Response
+{
+ public class ConfigResponse
+ {
+ public string Version { get; set; }
+ public string GitHash { get; set; }
+ public ServerConfigResponse Server { get; set; }
+ public EnvironmentConfigResponse Environment { get; set; }
+ public IDictionary FeatureStates { get; set; }
+ public DateTime ExpiresOn { get; set; }
+ }
+
+ public class ServerConfigResponse
+ {
+ public string Name { get; set; }
+ public string Url { get; set; }
+ }
+
+ public class EnvironmentConfigResponse
+ {
+ public string Vault { get; set; }
+ public string Api { get; set; }
+ public string Identity { get; set; }
+ public string Notifications { get; set; }
+ public string Sso { get; set; }
+ }
+}
+
diff --git a/src/Core/Services/ApiService.cs b/src/Core/Services/ApiService.cs
index d486ac2c4..436916aff 100644
--- a/src/Core/Services/ApiService.cs
+++ b/src/Core/Services/ApiService.cs
@@ -585,6 +585,16 @@ namespace Bit.Core.Services
#endregion
+ #region Configs
+
+ public async Task GetConfigsAsync()
+ {
+ var accessToken = await _tokenService.GetTokenAsync();
+ return await SendAsync