diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 5f928781e..d40a19ef1 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -30,14 +30,14 @@ src/watchOS @bitwarden/team-vault-dev src/Core/Services/EmailForwarders @bitwarden/team-tools-dev ## Crowdin Sync files ## -src/App/Resources @bitwarden/team-tools-dev +src/Core/Resources/Localization @bitwarden/team-tools-dev src/watchOS/bitwarden/bitwarden\ WatchKit\ Extension/Localization @bitwarden/team-tools-dev store/apple @bitwarden/team-tools-dev store/google @bitwarden/team-tools-dev ## Locales ## -src/App/Resources/AppResources.Designer.cs -src/App/Resources/AppResources.resx +src/Core/Resources/Localization/AppResources.Designer.cs +src/Core/Resources/Localization/AppResources.resx src/watchOS/bitwarden/bitwarden\ WatchKit\ Extension/Localization/en.lproj store/apple/en store/google/en diff --git a/.github/secrets/GoogleService-Info.plist.gpg b/.github/secrets/GoogleService-Info.plist.gpg deleted file mode 100644 index 6f04d0929..000000000 Binary files a/.github/secrets/GoogleService-Info.plist.gpg and /dev/null differ diff --git a/.github/secrets/app_fdroid-keystore.jks.gpg b/.github/secrets/app_fdroid-keystore.jks.gpg deleted file mode 100644 index 3c1db4912..000000000 Binary files a/.github/secrets/app_fdroid-keystore.jks.gpg and /dev/null differ diff --git a/.github/secrets/app_play-keystore.jks.gpg b/.github/secrets/app_play-keystore.jks.gpg deleted file mode 100644 index 32d9aa720..000000000 Binary files a/.github/secrets/app_play-keystore.jks.gpg and /dev/null differ diff --git a/.github/secrets/app_upload-keystore.jks.gpg b/.github/secrets/app_upload-keystore.jks.gpg deleted file mode 100644 index b723c00a0..000000000 Binary files a/.github/secrets/app_upload-keystore.jks.gpg and /dev/null differ diff --git a/.github/secrets/bitwarden-mobile-key.p12.gpg b/.github/secrets/bitwarden-mobile-key.p12.gpg deleted file mode 100644 index 85949be8c..000000000 Binary files a/.github/secrets/bitwarden-mobile-key.p12.gpg and /dev/null differ diff --git a/.github/secrets/dist_autofill.mobileprovision.gpg b/.github/secrets/dist_autofill.mobileprovision.gpg deleted file mode 100644 index de955c7b3..000000000 Binary files a/.github/secrets/dist_autofill.mobileprovision.gpg and /dev/null differ diff --git a/.github/secrets/dist_bitwarden.mobileprovision.gpg b/.github/secrets/dist_bitwarden.mobileprovision.gpg deleted file mode 100644 index 02433fe19..000000000 Binary files a/.github/secrets/dist_bitwarden.mobileprovision.gpg and /dev/null differ diff --git a/.github/secrets/dist_extension.mobileprovision.gpg b/.github/secrets/dist_extension.mobileprovision.gpg deleted file mode 100644 index fe25aafd8..000000000 Binary files a/.github/secrets/dist_extension.mobileprovision.gpg and /dev/null differ diff --git a/.github/secrets/dist_share_extension.mobileprovision.gpg b/.github/secrets/dist_share_extension.mobileprovision.gpg deleted file mode 100644 index aca9437c2..000000000 Binary files a/.github/secrets/dist_share_extension.mobileprovision.gpg and /dev/null differ diff --git a/.github/secrets/dist_watch_app.mobileprovision.gpg b/.github/secrets/dist_watch_app.mobileprovision.gpg deleted file mode 100644 index b7f4d4901..000000000 Binary files a/.github/secrets/dist_watch_app.mobileprovision.gpg and /dev/null differ diff --git a/.github/secrets/dist_watch_app_extension.mobileprovision.gpg b/.github/secrets/dist_watch_app_extension.mobileprovision.gpg deleted file mode 100644 index cc843f27a..000000000 Binary files a/.github/secrets/dist_watch_app_extension.mobileprovision.gpg and /dev/null differ diff --git a/.github/secrets/google-services.json.gpg b/.github/secrets/google-services.json.gpg deleted file mode 100644 index a999db757..000000000 --- a/.github/secrets/google-services.json.gpg +++ /dev/null @@ -1,3 +0,0 @@ -  KY#(EI֐߄T?)l"=|'em/~' F>lb[+RiL"~V:paڵel%8t튖y> $GITHUB_OUTPUT fi + android: name: Android runs-on: windows-2022 @@ -67,7 +69,8 @@ jobs: matrix: variant: ["prod", "qa"] env: - android_folder_path: src/App/Platforms/Android + android_folder_path: src\App\Platforms\Android + android_folder_path_bash: src/App/Platforms/Android steps: - name: Setup NuGet uses: nuget/setup-nuget@296fd3ccf8528660c91106efefe2364482f86d6f # v1.2.0 @@ -77,9 +80,7 @@ jobs: - name: Set up .NET uses: actions/setup-dotnet@4d6c8fcf3c8f7a60068d26b594648e99df24cee3 # v4.0.0 with: - dotnet-version: | - 3.1.x - 8.0.x + dotnet-version: '8.0.x' - name: Set up MSBuild uses: microsoft/setup-msbuild@ede762b26a2de8d110bb5a3db4d7e0e080c0e917 # v1.3.3 @@ -95,7 +96,8 @@ jobs: - name: Install Microsoft OpenJDK 11 run: | choco install microsoft-openjdk11 --no-progress - Write-Output "JAVA_HOME=$(Get-ChildItem -Path 'C:\Program Files\Microsoft\jdk*' | Select -First 1 -ExpandProperty FullName)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + Write-Output "JAVA_HOME=$(Get-ChildItem -Path 'C:\Program Files\Microsoft\jdk*' | ` + Select -First 1 -ExpandProperty FullName)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append Write-Output "Java Home: $env:JAVA_HOME" - name: Print environment @@ -111,27 +113,34 @@ jobs: with: fetch-depth: 0 - - name: Decrypt secrets - env: - DECRYPT_FILE_PASSWORD: ${{ secrets.DECRYPT_FILE_PASSWORD }} - run: | - mkdir -p ~/secrets + - name: Login to Azure - CI Subscription + uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + with: + creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} - gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \ - --output ./${{ env.main_app_folder_path }}/app_play-keystore.jks ./.github/secrets/app_play-keystore.jks.gpg - gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \ - --output ./${{ env.main_app_folder_path }}/app_upload-keystore.jks ./.github/secrets/app_upload-keystore.jks.gpg - gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \ - --output $HOME/secrets/play_creds.json ./.github/secrets/play_creds.json.gpg + - name: Download secrets + env: + ACCOUNT_NAME: bitwardenci + CONTAINER_NAME: mobile + run: | + mkdir -p $HOME/secrets + + az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \ + --name app_play-keystore.jks --file ./${{ env.android_folder_path_bash }}/app_play-keystore.jks --output none + az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \ + --name app_upload-keystore.jks --file ./${{ env.android_folder_path_bash }}/app_upload-keystore.jks --output none + az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \ + --name play_creds.json --file $HOME/secrets/play_creds.json --output none shell: bash - - name: Decrypt secrets - Google Services + - name: Download secrets - Google Services if: ${{ matrix.variant == 'prod' }} env: - DECRYPT_FILE_PASSWORD: ${{ secrets.DECRYPT_FILE_PASSWORD }} + ACCOUNT_NAME: bitwardenci + CONTAINER_NAME: mobile run: | - gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \ - --output ./${{ env.android_folder_path }}/google-services.json ./.github/secrets/google-services.json.gpg + az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \ + --name google-services.json --file ./${{ env.android_folder_path_bash }}/google-services.json --output none shell: bash - name: Increment version @@ -143,7 +152,7 @@ jobs: echo "########################################" sed -i "s/android:versionCode=\"1\"/android:versionCode=\"$BUILD_NUMBER\"/" \ - ./${{ env.android_folder_path }}/AndroidManifest.xml + ./${{ env.android_folder_path_bash }}/AndroidManifest.xml shell: bash - name: Restore packages @@ -152,78 +161,70 @@ jobs: - name: Restore tools run: dotnet tool restore - # - name: Verify Format - # run: dotnet tool run dotnet-format --check + # - name: Run Core tests + # run: | + # dotnet test test/Core.Test/Core.Test.csproj --logger "trx;LogFileName=test-results.trx" ` + # /p:CustomConstants=UT - - name: Run Core tests - run: dotnet test test/Core.Test/Core.Test.csproj --logger "trx;LogFileName=test-results.trx" /p:CustomConstants=UT - - - name: Report test results - uses: dorny/test-reporter@eaa763f6ffc21c7a37837f56cd5f9737f27fc6c8 # v1.8.0 - if: always() - with: - name: Test Results - path: "**/test-results.trx" - reporter: dotnet-trx - fail-on-error: true + # - name: Report test results + # uses: dorny/test-reporter@eaa763f6ffc21c7a37837f56cd5f9737f27fc6c8 # v1.8.0 + # if: always() + # with: + # name: Test Results + # path: "**/test-results.trx" + # reporter: dotnet-trx + # fail-on-error: true - name: Build Play Store publisher if: ${{ matrix.variant == 'prod' }} - run: dotnet build ./store/google/Publisher/Publisher.csproj -p:Configuration=Release + run: dotnet build .\store\google\Publisher\Publisher.csproj /p:Configuration=Release - name: Setup Android build (${{ matrix.variant }}) run: dotnet cake build.cake --target Android --variant ${{ matrix.variant }} - - name: Build Android - run: | - $configuration = "Release"; - $projToBuild = $($env:GITHUB_WORKSPACE + "/${{ env.main_app_project_path }}"); - - Write-Output "########################################" - Write-Output "##### Build $configuration Configuration" - Write-Output "########################################" - - dotnet build $projToBuild -c $configuration -f ${{ env.target-net-version }}-android - - - name: Sign Android Build + - name: Build & Sign Android env: PLAY_KEYSTORE_PASSWORD: ${{ secrets.PLAY_KEYSTORE_PASSWORD }} UPLOAD_KEYSTORE_PASSWORD: ${{ secrets.UPLOAD_KEYSTORE_PASSWORD }} run: | - $projToBuild = $($env:GITHUB_WORKSPACE + "/${{ env.main_app_project_path }}"); + $projToBuild = "$($env:GITHUB_WORKSPACE)/${{ env.main_app_project_path }}"; $packageName = "com.x8bit.bitwarden"; if ("${{ matrix.variant }}" -ne "prod") { $packageName = "com.x8bit.bitwarden.${{ matrix.variant }}"; } - Write-Output "########################################" Write-Output "##### Sign Google Play Bundle Release Configuration" - Write-Output "########################################" - dotnet publish $projToBuild -c Release -f ${{ env.target-net-version }}-android /p:AndroidPackageFormats=aab /p:AndroidKeyStore=true /p:AndroidSigningKeyStore=$("app_upload-keystore.jks") /p:AndroidSigningKeyAlias=upload /p:AndroidSigningKeyPass="$($env:UPLOAD_KEYSTORE_PASSWORD)" /p:AndroidSigningStorePass="$($env:UPLOAD_KEYSTORE_PASSWORD)" --no-restore + $signingUploadKeyStore = "$($env:GITHUB_WORKSPACE)\${{ env.android_folder_path }}\app_upload-keystore.jks" + dotnet publish $projToBuild -c Release -f ${{ env.target-net-version }}-android ` + /p:AndroidPackageFormats=aab ` + /p:AndroidKeyStore=true ` + /p:AndroidSigningKeyStore=$signingUploadKeyStore ` + /p:AndroidSigningKeyAlias=upload ` + /p:AndroidSigningKeyPass="$($env:UPLOAD_KEYSTORE_PASSWORD)" ` + /p:AndroidSigningStorePass="$($env:UPLOAD_KEYSTORE_PASSWORD)" --no-restore - Write-Output "########################################" Write-Output "##### Copy Google Play Bundle to project root" - Write-Output "########################################" - $signedAabPath = $($env:GITHUB_WORKSPACE + "/${{ env.main_app_folder_path }}/bin/Release/${{ env.target-net-version }}-android/publish/$($packageName)-Signed.aab"); - $signedAabDestPath = $($env:GITHUB_WORKSPACE + "/$($packageName).aab"); + $signedAabPath = "$($env:GITHUB_WORKSPACE)\${{ env.main_app_folder_path }}\bin\Release\${{ env.target-net-version }}-android\publish\$($packageName)-Signed.aab"; + $signedAabDestPath = "$($env:GITHUB_WORKSPACE)\$($packageName).aab"; Copy-Item $signedAabPath $signedAabDestPath - Write-Output "########################################" Write-Output "##### Sign APK Release Configuration" - Write-Output "########################################" - dotnet publish $projToBuild -c Release -f ${{ env.target-net-version }}-android /p:AndroidKeyStore=true /p:AndroidSigningKeyStore=$("app_play-keystore.jks") /p:AndroidSigningKeyAlias=bitwarden /p:AndroidSigningKeyPass="$($env:PLAY_KEYSTORE_PASSWORD)" /p:AndroidSigningStorePass="$($env:PLAY_KEYSTORE_PASSWORD)" --no-restore + $signingPlayKeyStore = "$($env:GITHUB_WORKSPACE)\${{ env.android_folder_path }}\app_play-keystore.jks" + dotnet publish $projToBuild -c Release -f ${{ env.target-net-version }}-android ` + /p:AndroidKeyStore=true ` + /p:AndroidSigningKeyStore=$signingPlayKeyStore ` + /p:AndroidSigningKeyAlias=bitwarden ` + /p:AndroidSigningKeyPass="$($env:PLAY_KEYSTORE_PASSWORD)" ` + /p:AndroidSigningStorePass="$($env:PLAY_KEYSTORE_PASSWORD)" --no-restore - Write-Output "########################################" Write-Output "##### Copy Release APK to project root" - Write-Output "########################################" - - $signedApkPath = $($env:GITHUB_WORKSPACE + "/${{ env.main_app_folder_path }}/bin/Release/${{ env.target-net-version }}-android/publish/$($packageName)-Signed.apk"); - $signedApkDestPath = $($env:GITHUB_WORKSPACE + "/$($packageName).apk"); + $signedApkPath = "$($env:GITHUB_WORKSPACE)\${{ env.main_app_folder_path }}\bin\Release\${{ env.target-net-version }}-android\publish\$($packageName)-Signed.apk"; + $signedApkDestPath = "$($env:GITHUB_WORKSPACE)\$($packageName).apk"; Copy-Item $signedApkPath $signedApkDestPath - name: Upload Prod .aab artifact @@ -285,13 +286,12 @@ jobs: || (github.ref == 'refs/heads/rc' && needs.setup.outputs.hotfix_branch_exists == 0) || github.ref == 'refs/heads/hotfix-rc' ) }} run: | - PUBLISHER_PATH="$GITHUB_WORKSPACE/store/google/Publisher/bin/Release/netcoreapp3.1/Publisher.dll" - CREDS_PATH="$HOME/secrets/play_creds.json" - AAB_PATH="$GITHUB_WORKSPACE/com.x8bit.bitwarden.aab" - TRACK="internal" + $publisherPath = "$($env:GITHUB_WORKSPACE)\store\google\Publisher\bin\Release\net8.0\Publisher.dll" + $credsPath = "$($HOME)\secrets\play_creds.json" + $aabPath = "$($env:GITHUB_WORKSPACE)\com.x8bit.bitwarden.aab" + $track = "internal" - dotnet $PUBLISHER_PATH $CREDS_PATH $AAB_PATH $TRACK - shell: bash + dotnet $publisherPath $credsPath $aabPath $track f-droid: @@ -339,23 +339,26 @@ jobs: - name: Checkout repo uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - name: Decrypt secrets - env: - DECRYPT_FILE_PASSWORD: ${{ secrets.DECRYPT_FILE_PASSWORD }} - run: | - mkdir -p ~/secrets + - name: Login to Azure - CI Subscription + uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + with: + creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} - gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \ - --output ./${{ env.main_app_folder_path }}/app_fdroid-keystore.jks ./.github/secrets/app_fdroid-keystore.jks.gpg + - name: Download secrets + env: + ACCOUNT_NAME: bitwardenci + CONTAINER_NAME: mobile + FILE: app_fdroid-keystore.jks + run: | + mkdir -p $HOME/secrets + az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME --name $FILE \ + --file $HOME/secrets/$FILE --output none shell: bash - name: Increment version run: | BUILD_NUMBER=$((3000 + $GITHUB_RUN_NUMBER)) - - echo "########################################" echo "##### Setting Version Code $BUILD_NUMBER" - echo "########################################" sed -i "s/android:versionCode=\"1\"/android:versionCode=\"$BUILD_NUMBER\"/" \ ./${{ env.android_manifest_path }} @@ -368,16 +371,12 @@ jobs: $androidManifest = $($env:GITHUB_WORKSPACE + "/${{ env.android_manifest_path }}"); - Write-Output "########################################" - Write-Output "##### Backup project files" - Write-Output "########################################" + Write-Output "##### Back up project files" Copy-Item $androidManifest $($androidManifest + ".original"); Copy-Item $appPath $($appPath + ".original"); - Write-Output "########################################" Write-Output "##### Cleanup Android Manifest" - Write-Output "########################################" $xml=New-Object XML; $xml.Load($androidManifest); @@ -395,9 +394,7 @@ jobs: $configuration = "Release"; $projToBuild = $($env:GITHUB_WORKSPACE + "/${{ env.main_app_project_path }}"); - Write-Output "########################################" - Write-Output "##### Build $configuration FDROID - Write-Output "########################################" + Write-Output "##### Build $configuration FDROID" dotnet build $projToBuild -c $configuration -f ${{ env.target-net-version }}-android /p:CustomConstants="FDROID" @@ -408,15 +405,11 @@ jobs: $projToBuild = $($env:GITHUB_WORKSPACE + "/${{ env.main_app_project_path }}"); $packageName = "com.x8bit.bitwarden"; - Write-Output "########################################" Write-Output "##### Sign FDroid" - Write-Output "########################################" dotnet publish $projToBuild -c Release -f ${{ env.target-net-version }}-android /p:AndroidKeyStore=true /p:AndroidSigningKeyStore=$("app_fdroid-keystore.jks") /p:AndroidSigningKeyAlias=bitwarden /p:AndroidSigningKeyPass="$($env:FDROID_KEYSTORE_PASSWORD)" /p:AndroidSigningStorePass="$($env:FDROID_KEYSTORE_PASSWORD)" /p:CustomConstants="FDROID" --no-restore - Write-Output "########################################" Write-Output "##### Copy FDroid apk to project root" - Write-Output "########################################" $signedApkPath = $($env:GITHUB_WORKSPACE + "/${{ env.main_app_folder_path }}/bin/Release/${{ env.target-net-version }}-android/publish/$($packageName)-Signed.apk"); $signedApkDestPath = $($env:GITHUB_WORKSPACE + "/com.x8bit.bitwarden-fdroid.apk"); @@ -442,6 +435,7 @@ jobs: path: ./bw-fdroid-apk-sha256.txt if-no-files-found: error + ios: name: Apple iOS runs-on: macos-13 @@ -495,42 +489,42 @@ jobs: keyvault: "bitwarden-ci" secrets: "appcenter-ios-token" - - name: Decrypt secrets + - name: Download Provisioning Profiles secrets env: - DECRYPT_FILE_PASSWORD: ${{ secrets.DECRYPT_FILE_PASSWORD }} + ACCOUNT_NAME: bitwardenci + CONTAINER_NAME: profiles run: | - mkdir -p ~/secrets + mkdir -p $HOME/secrets + profiles=( + "dist_autofill.mobileprovision" + "dist_bitwarden.mobileprovision" + "dist_extension.mobileprovision" + "dist_share_extension.mobileprovision" + "dist_bitwarden_watch_app.mobileprovision" + "dist_bitwarden_watch_app_extension.mobileprovision" + ) - gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \ - --output $HOME/secrets/bitwarden-mobile-key.p12 ./.github/secrets/bitwarden-mobile-key.p12.gpg - gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \ - --output $HOME/secrets/iphone-distribution-cert.p12 ./.github/secrets/iphone-distribution-cert.p12.gpg - gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \ - --output $HOME/secrets/dist_autofill.mobileprovision ./.github/secrets/dist_autofill.mobileprovision.gpg - gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \ - --output $HOME/secrets/dist_bitwarden.mobileprovision ./.github/secrets/dist_bitwarden.mobileprovision.gpg - gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \ - --output $HOME/secrets/dist_extension.mobileprovision ./.github/secrets/dist_extension.mobileprovision.gpg - gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \ - --output $HOME/secrets/dist_share_extension.mobileprovision \ - ./.github/secrets/dist_share_extension.mobileprovision.gpg - gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \ - --output $HOME/secrets/dist_watch_app.mobileprovision \ - ./.github/secrets/dist_watch_app.mobileprovision.gpg - gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \ - --output $HOME/secrets/dist_watch_app_extension.mobileprovision \ - ./.github/secrets/dist_watch_app_extension.mobileprovision.gpg - gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \ - --output ./src/watchOS/bitwarden/GoogleService-Info.plist ./.github/secrets/GoogleService-Info.plist.gpg + for FILE in "${profiles[@]}" + do + az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME --name $FILE \ + --file $HOME/secrets/$FILE --output none + done + + - name: Download Google Services secret + env: + ACCOUNT_NAME: bitwardenci + CONTAINER_NAME: mobile + FILE: GoogleService-Info.plist + run: | + mkdir -p $HOME/secrets + az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME --name $FILE \ + --file $HOME/secrets/$FILE --output none - name: Increment version run: | BUILD_NUMBER=$((100 + $GITHUB_RUN_NUMBER)) - echo "########################################" echo "##### Setting CFBundleVersion $BUILD_NUMBER" - echo "########################################" - echo "### CFBundleVersion $BUILD_NUMBER" >> $GITHUB_STEP_SUMMARY perl -0777 -pi.bak -e 's/CFBundleVersion<\/key>\s*1<\/string>/CFBundleVersion<\/key>\n\t'"$BUILD_NUMBER"'<\/string>/' ./${{ env.ios_folder_path }}/Info.plist @@ -538,30 +532,30 @@ jobs: perl -0777 -pi.bak -e 's/CFBundleVersion<\/key>\s*1<\/string>/CFBundleVersion<\/key>\n\t'"$BUILD_NUMBER"'<\/string>/' ./src/iOS.Autofill/Info.plist perl -0777 -pi.bak -e 's/CFBundleVersion<\/key>\s*1<\/string>/CFBundleVersion<\/key>\n\t'"$BUILD_NUMBER"'<\/string>/' ./src/iOS.ShareExtension/Info.plist cd src/watchOS/bitwarden - agvtool new-version -all $BUILD_NUMBER + agvtool new-version -all $BUILD_NUMBER - name: Update Entitlements run: | - echo "########################################" echo "##### Updating Entitlements" - echo "########################################" - perl -0777 -pi.bak -e 's/aps-environment<\/key>\s*development<\/string>/aps-environment<\/key>\n\tproduction<\/string>/' ./${{ env.ios_folder_path }}/Entitlements.plist + + - name: Get certificates + run: | + mkdir -p $HOME/certificates + az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/ios-distribution | + jq -r .value | base64 -d > $HOME/certificates/ios-distribution.p12 - name: Set up Keychain env: KEYCHAIN_PASSWORD: ${{ secrets.IOS_KEYCHAIN_PASSWORD }} - MOBILE_KEY_PASSWORD: ${{ secrets.IOS_KEY_PASSWORD }} - DIST_CERT_PASSWORD: ${{ secrets.IOS_DIST_CERT_PASSWORD }} run: | security create-keychain -p $KEYCHAIN_PASSWORD build.keychain security default-keychain -s build.keychain security unlock-keychain -p $KEYCHAIN_PASSWORD build.keychain security set-keychain-settings -lut 1200 build.keychain - security import ~/secrets/bitwarden-mobile-key.p12 -k build.keychain -P $MOBILE_KEY_PASSWORD \ - -T /usr/bin/codesign -T /usr/bin/security - security import ~/secrets/iphone-distribution-cert.p12 -k build.keychain -P $DIST_CERT_PASSWORD \ - -T /usr/bin/codesign -T /usr/bin/security + + security import $HOME/certificates/ios-distribution.p12 -k build.keychain -P "" -T /usr/bin/codesign \ + -T /usr/bin/security security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k $KEYCHAIN_PASSWORD build.keychain - name: Set up provisioning profiles @@ -570,8 +564,8 @@ jobs: BITWARDEN_PROFILE_PATH=$HOME/secrets/dist_bitwarden.mobileprovision EXTENSION_PROFILE_PATH=$HOME/secrets/dist_extension.mobileprovision SHARE_EXTENSION_PROFILE_PATH=$HOME/secrets/dist_share_extension.mobileprovision - WATCH_APP_PROFILE_PATH=$HOME/secrets/dist_watch_app.mobileprovision - WATCH_APP_EXTENSION_PROFILE_PATH=$HOME/secrets/dist_watch_app_extension.mobileprovision + WATCH_APP_PROFILE_PATH=$HOME/secrets/dist_bitwarden_watch_app.mobileprovision + WATCH_APP_EXTENSION_PROFILE_PATH=$HOME/secrets/dist_bitwarden_watch_app_extension.mobileprovision PROFILES_DIR_PATH=$HOME/Library/MobileDevice/Provisioning\ Profiles mkdir -p "$PROFILES_DIR_PATH" @@ -599,68 +593,44 @@ jobs: - name: Bulid WatchApp run: | - echo "########################################" echo "##### Build WatchApp with Release Configuration" - echo "########################################" - xcodebuild archive -workspace ./src/watchOS/bitwarden/bitwarden.xcodeproj/project.xcworkspace -configuration Release -scheme bitwarden\ WatchKit\ App -archivePath ./src/watchOS/bitwarden - echo "########################################" - echo "##### Done" - echo "########################################" - - name: Archive Build for App Store run: | - Write-Output "########################################" - Write-Output "##### Archive for Release ios-arm64 - Write-Output "########################################" - + echo "##### Archive for Release ios-arm64" dotnet publish ${{ env.main_app_project_path }} -c Release -f ${{ env.target-net-version }}-ios /p:RuntimeIdentifier=ios-arm64 /p:ArchiveOnBuild=true /p:MtouchUseLlvm=false - Write-Output "########################################" - Write-Output "##### Done" - Write-Output "########################################" - shell: pwsh - - name: Archive Build for Mobile Automation run: | - Write-Output "########################################" - Write-Output "##### Archive Debug for iossimulator-x64 - Write-Output "########################################" - + echo "##### Archive Debug for iossimulator-x64" dotnet build ${{ env.main_app_project_path }} -c Debug -f ${{ env.target-net-version }}-ios /p:RuntimeIdentifier=iossimulator-x64 /p:ArchiveOnBuild=true /p:MtouchUseLlvm=false - - Write-Output "########################################" - Write-Output "##### Done" - Write-Output "########################################" - ls ~/Library/Developer/Xcode/Archives - shell: pwsh + ls $HOME/Library/Developer/Xcode/Archives - name: Export .ipa for App Store + env: + EXPORT_OPTIONS_PATH: ./.github/resources/export-options-app-store.plist + EXPORT_PATH: ./bitwarden-export run: | - EXPORT_OPTIONS_PATH="./.github/resources/export-options-app-store.plist" ARCHIVE_PATH="$HOME/Library/Developer/Xcode/Archives/*/*.xcarchive" - EXPORT_PATH="./bitwarden-export" - xcodebuild -exportArchive -archivePath $ARCHIVE_PATH -exportPath $EXPORT_PATH \ -exportOptionsPlist $EXPORT_OPTIONS_PATH - name: Export .app for Automation CI + env: + ARCHIVE_PATH: ./${{ env.main_app_folder_path }}/bin/Debug/${{ env.target-net-version }}-ios/iossimulator-x64 + EXPORT_PATH: ./bitwarden-export run: | - ARCHIVE_PATH="./${{ env.main_app_folder_path }}/bin/Debug/${{ env.target-net-version }}-ios/iossimulator-x64" - EXPORT_PATH="./bitwarden-export" - zip -r -q ${{ env.app_ci_output_filename }}.app.zip $ARCHIVE_PATH mv ${{ env.app_ci_output_filename }}.app.zip $EXPORT_PATH - name: Copy all dSYMs files to upload + env: + EXPORT_PATH: ./bitwarden-export + WATCH_ARCHIVE_DSYMS_PATH: ./src/watchOS/bitwarden.xcarchive/dSYMs/ + WATCH_DSYMS_EXPORT_PATH: ./bitwarden-export/Watch_dSYMs run: | ARCHIVE_DSYMS_PATH="$HOME/Library/Developer/Xcode/Archives/*/*.xcarchive/dSYMs" - EXPORT_PATH="./bitwarden-export" - - WATCH_ARCHIVE_DSYMS_PATH="./src/watchOS/bitwarden.xcarchive/dSYMs/" - WATCH_DSYMS_EXPORT_PATH="$EXPORT_PATH/Watch_dSYMs" - cp -r -v $ARCHIVE_DSYMS_PATH $EXPORT_PATH mkdir $WATCH_DSYMS_EXPORT_PATH cp -r -v $WATCH_ARCHIVE_DSYMS_PATH $WATCH_DSYMS_EXPORT_PATH @@ -709,10 +679,7 @@ jobs: || (github.ref == 'refs/heads/rc' && needs.setup.outputs.hotfix_branch_exists == 0) || github.ref == 'refs/heads/hotfix-rc' run: | - echo "########################################" echo "##### Uploading Watch dSYMs to Firebase" - echo "########################################" - find "$HOME/Library/Developer/XCode/DerivedData" -name "upload-symbols" -exec chmod +x {} \; -exec {} -gsp "./src/watchOS/bitwarden/GoogleService-Info.plist" -p ios "./bitwarden-export/Watch_dSYMs" \; - name: Validate app in App Store @@ -728,7 +695,6 @@ jobs: run: | xcrun altool --validate-app --type ios --file "./bitwarden-export/Bitwarden.ipa" \ --username "$APPLE_ID_USERNAME" --password "$APPLE_ID_PASSWORD" - shell: bash - name: Deploy to App Store if: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5da27b909..b469a7268 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -176,13 +176,14 @@ jobs: - name: Install Node dependencies run: npm install - - name: Decrypt secrets + - name: Download secrets env: - DECRYPT_FILE_PASSWORD: ${{ secrets.DECRYPT_FILE_PASSWORD }} + ACCOUNT_NAME: bitwardenci + CONTAINER_NAME: mobile run: | - mkdir -p ~/secrets - gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \ - --output ./store/fdroid/keystore.jks ./.github/secrets/store_fdroid-keystore.jks.gpg + mkdir -p $HOME/secrets + az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \ + --name store_fdroid-keystore.jks --file ./store/fdroid/keystore.jks --output none - name: Compile for F-Droid Store env: diff --git a/src/App/Platforms/Android/AndroidManifest.xml b/src/App/Platforms/Android/AndroidManifest.xml index 526782deb..9f703c01b 100644 --- a/src/App/Platforms/Android/AndroidManifest.xml +++ b/src/App/Platforms/Android/AndroidManifest.xml @@ -1,5 +1,5 @@  - + diff --git a/src/App/Platforms/iOS/Info.plist b/src/App/Platforms/iOS/Info.plist index a89c66880..d82c64a97 100644 --- a/src/App/Platforms/iOS/Info.plist +++ b/src/App/Platforms/iOS/Info.plist @@ -11,7 +11,7 @@ CFBundleIdentifier com.8bit.bitwarden CFBundleShortVersionString - 2024.2.2 + 2024.2.1 CFBundleVersion 1 CFBundleIconName diff --git a/src/Core/App.xaml.cs b/src/Core/App.xaml.cs index 25b882d72..b94e95df6 100644 --- a/src/Core/App.xaml.cs +++ b/src/Core/App.xaml.cs @@ -108,6 +108,8 @@ namespace Bit.App } } + public bool HasNavigatedToAccessibilitySettings { get; set; } + protected override Window CreateWindow(IActivationState activationState) { //When executing from AutofillExternalActivity we don't have "Options" so we need to filter "manually" @@ -146,6 +148,18 @@ namespace Bit.App _hasNavigatedToAutofillWindow = false; } + // WORKAROUND: This workaround is similar to the one above (_hasNavigatedToAutofillWindow) related with Accessibility Services but this one specifically + // is due to trying to open the Accessibility Settings Page for enabled/disabling + if(HasNavigatedToAccessibilitySettings) + { + homePage.PerformNavigationOnAccountChangedOnLoad = true; + // this is needed because when coming back from AutofillWindow OnResume won't be called and we need this flag + // so that void Navigate(NavigationTarget navTarget, INavigationParams navParams) doesn't enqueue the navigation + // and it performs it directly. + _isResumed = true; + HasNavigatedToAccessibilitySettings = false; + } + //If we have an existing MainAppWindow we can use that one var mainAppWindow = Windows.OfType().FirstOrDefault(); if (mainAppWindow != null) diff --git a/src/Core/Pages/Accounts/EnvironmentPage.xaml.cs b/src/Core/Pages/Accounts/EnvironmentPage.xaml.cs index fb4a28d08..5724faaa4 100644 --- a/src/Core/Pages/Accounts/EnvironmentPage.xaml.cs +++ b/src/Core/Pages/Accounts/EnvironmentPage.xaml.cs @@ -1,6 +1,7 @@ using Bit.Core.Abstractions; using Bit.Core.Resources.Localization; using Bit.Core.Utilities; +using Microsoft.Maui.Platform; namespace Bit.App.Pages { @@ -26,7 +27,7 @@ namespace Bit.App.Pages _apiEntry.ReturnCommand = new Command(() => _identityEntry.Focus()); _identityEntry.ReturnType = ReturnType.Next; _identityEntry.ReturnCommand = new Command(() => _iconsEntry.Focus()); - _vm.SubmitSuccessAction = () => MainThread.BeginInvokeOnMainThread(async () => await SubmitSuccessAsync()); + _vm.SubmitSuccessTask = () => MainThread.InvokeOnMainThreadAsync(SubmitSuccessAsync); _vm.CloseAction = async () => { await Navigation.PopModalAsync(); @@ -37,6 +38,12 @@ namespace Bit.App.Pages { _platformUtilsService.ShowToast("success", null, AppResources.EnvironmentSaved); await Navigation.PopModalAsync(); +#if ANDROID + if (Platform.CurrentActivity.CurrentFocus != null) + { + Platform.CurrentActivity.HideKeyboard(Platform.CurrentActivity.CurrentFocus); + } +#endif } private void Close_Clicked(object sender, EventArgs e) diff --git a/src/Core/Pages/Accounts/EnvironmentPageViewModel.cs b/src/Core/Pages/Accounts/EnvironmentPageViewModel.cs index f003fcbd4..f70d0e60d 100644 --- a/src/Core/Pages/Accounts/EnvironmentPageViewModel.cs +++ b/src/Core/Pages/Accounts/EnvironmentPageViewModel.cs @@ -44,7 +44,7 @@ namespace Bit.App.Pages public string WebVaultUrl { get; set; } public string IconsUrl { get; set; } public string NotificationsUrls { get; set; } - public Action SubmitSuccessAction { get; set; } + public Func SubmitSuccessTask { get; set; } public Action CloseAction { get; set; } public async Task SubmitAsync() @@ -73,7 +73,10 @@ namespace Bit.App.Pages IconsUrl = resUrls.Icons; NotificationsUrls = resUrls.Notifications; - SubmitSuccessAction?.Invoke(); + if (SubmitSuccessTask != null) + { + await SubmitSuccessTask(); + } } public bool ValidateUrls() diff --git a/src/Core/Pages/Accounts/LoginPasswordlessPage.xaml b/src/Core/Pages/Accounts/LoginPasswordlessPage.xaml index 3a03e79dc..fd3bede19 100644 --- a/src/Core/Pages/Accounts/LoginPasswordlessPage.xaml +++ b/src/Core/Pages/Accounts/LoginPasswordlessPage.xaml @@ -39,7 +39,7 @@ FontSize="Small" FontAttributes="Bold"/> diff --git a/src/Core/Pages/Settings/AutofillSettingsPageViewModel.android.cs b/src/Core/Pages/Settings/AutofillSettingsPageViewModel.android.cs index 2343df0a1..067532f14 100644 --- a/src/Core/Pages/Settings/AutofillSettingsPageViewModel.android.cs +++ b/src/Core/Pages/Settings/AutofillSettingsPageViewModel.android.cs @@ -191,6 +191,11 @@ namespace Bit.App.Pages await MainThread.InvokeOnMainThreadAsync(() => TriggerPropertyChanged(nameof(UseAccessibility))); return; } + +#if ANDROID + // WORKAROUND: Set workaround property to avoid an issue when launching the app after being in Accessibility Settings. More Info on App.xaml.cs + ((App)Application.Current).HasNavigatedToAccessibilitySettings = true; +#endif _deviceActionService.OpenAccessibilitySettings(); } diff --git a/src/Core/Pages/Settings/LoginPasswordlessRequestsListPage.xaml b/src/Core/Pages/Settings/LoginPasswordlessRequestsListPage.xaml index 8f5a9a2d3..4735bf14b 100644 --- a/src/Core/Pages/Settings/LoginPasswordlessRequestsListPage.xaml +++ b/src/Core/Pages/Settings/LoginPasswordlessRequestsListPage.xaml @@ -39,7 +39,7 @@ FontSize="Small" FontAttributes="Bold"/> await UpdateVaultButtonTitleAsync()); + try + { + await ForcePasswordResetIfNeededAsync(); + } + catch (Exception ex) + { + _logger.Value.Exception(ex); + } } }); await UpdateVaultButtonTitleAsync(); diff --git a/src/Core/Resources/Localization/AppResources.af.resx b/src/Core/Resources/Localization/AppResources.af.resx index b7c2ca369..1f3262f07 100644 --- a/src/Core/Resources/Localization/AppResources.af.resx +++ b/src/Core/Resources/Localization/AppResources.af.resx @@ -2876,4 +2876,13 @@ Wil u na die rekening omskakel? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.ar.resx b/src/Core/Resources/Localization/AppResources.ar.resx index 30cec859e..fdd43741a 100644 --- a/src/Core/Resources/Localization/AppResources.ar.resx +++ b/src/Core/Resources/Localization/AppResources.ar.resx @@ -118,7 +118,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - عن + عن التطبيق أضِف @@ -276,7 +276,7 @@ هل أنت متأكد من أنك تريد تسجيل الخروج؟ - إزالة الحساب + أزِل الحساب هل أنت متأكد من أنك تريد إزالة هذا الحساب؟ @@ -2877,4 +2877,13 @@ أعدنّ ميزة إلغاء القُفْل لتغيير إجراء مهلة المخزن الخاص بك. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.az.resx b/src/Core/Resources/Localization/AppResources.az.resx index d94320aac..7bc87e1a2 100644 --- a/src/Core/Resources/Localization/AppResources.az.resx +++ b/src/Core/Resources/Localization/AppResources.az.resx @@ -2875,4 +2875,13 @@ Bu hesaba keçmək istəyirsiniz? Anbar vaxt bitməsi əməliyyatınızı dəyişdirmək üçün bir kilid açma seçimi qurun. + + Hesabınız üçün Duo iki addımlı giriş tələb olunur. + + + Giriş etməni tamamlamaq üçün Duo-dakı addımları izləyin. + + + Duo-nu başlat + diff --git a/src/Core/Resources/Localization/AppResources.be.resx b/src/Core/Resources/Localization/AppResources.be.resx index 50d41faf2..9688eda5b 100644 --- a/src/Core/Resources/Localization/AppResources.be.resx +++ b/src/Core/Resources/Localization/AppResources.be.resx @@ -2876,4 +2876,13 @@ Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.bg.resx b/src/Core/Resources/Localization/AppResources.bg.resx index 354dcd39d..fcc809408 100644 --- a/src/Core/Resources/Localization/AppResources.bg.resx +++ b/src/Core/Resources/Localization/AppResources.bg.resx @@ -2876,4 +2876,13 @@ Задайте начин за отключване, за да може да промените действието при изтичане на времето за достъп до трезора. + + Вашата регистрация изисква двустепенно удостоверяване чрез Duo. + + + Следвайте стъпките от Duo, за да завършите вписването. + + + Стартиране на Duo + diff --git a/src/Core/Resources/Localization/AppResources.bn.resx b/src/Core/Resources/Localization/AppResources.bn.resx index fd8f9ff4a..8edc953db 100644 --- a/src/Core/Resources/Localization/AppResources.bn.resx +++ b/src/Core/Resources/Localization/AppResources.bn.resx @@ -2877,4 +2877,13 @@ Do you want to switch to this account? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.bs.resx b/src/Core/Resources/Localization/AppResources.bs.resx index 53bd193fd..7455a7741 100644 --- a/src/Core/Resources/Localization/AppResources.bs.resx +++ b/src/Core/Resources/Localization/AppResources.bs.resx @@ -2875,4 +2875,13 @@ Skeniranje će biti izvršeno automatski. Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.ca.resx b/src/Core/Resources/Localization/AppResources.ca.resx index 9e0156c30..8be4ed852 100644 --- a/src/Core/Resources/Localization/AppResources.ca.resx +++ b/src/Core/Resources/Localization/AppResources.ca.resx @@ -2876,4 +2876,13 @@ Voleu canviar a aquest compte? Configura una opció de desbloqueig per canviar l'acció de temps d'espera de la caixa forta. + + Es requereix l'inici de sessió en dos passos de DUO al vostre compte. + + + Seguiu els passos de Duo per acabar d'iniciar la sessió. + + + Inicia DUO + diff --git a/src/Core/Resources/Localization/AppResources.cs.resx b/src/Core/Resources/Localization/AppResources.cs.resx index 815e2ef21..47b944f30 100644 --- a/src/Core/Resources/Localization/AppResources.cs.resx +++ b/src/Core/Resources/Localization/AppResources.cs.resx @@ -2875,4 +2875,13 @@ Chcete se přepnout na tento účet? Nastavte volbu odemknutí, abyste změnili časový limit Vašeho trezoru. + + Pro Váš účet je vyžadováno dvoufázové přihlášení DUO. + + + Postupujte podle kroků od DUO pro dokončení přihlášení. + + + Spustit DUO + diff --git a/src/Core/Resources/Localization/AppResources.cy.resx b/src/Core/Resources/Localization/AppResources.cy.resx index 0e93680a6..ebe713e1a 100644 --- a/src/Core/Resources/Localization/AppResources.cy.resx +++ b/src/Core/Resources/Localization/AppResources.cy.resx @@ -2877,4 +2877,13 @@ Do you want to switch to this account? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.da.resx b/src/Core/Resources/Localization/AppResources.da.resx index ba4da272c..9cd979152 100644 --- a/src/Core/Resources/Localization/AppResources.da.resx +++ b/src/Core/Resources/Localization/AppResources.da.resx @@ -2876,4 +2876,13 @@ Vil du skifte til denne konto? Opsæt en oplåsningsmetode for at ændre Bokstimeouthandlingen. + + Duo-totrinsindlogning kræves for kontoen. + + + Følg trinnene fra Duo for at færdiggøre indlogningen. + + + Start Duo + diff --git a/src/Core/Resources/Localization/AppResources.de.resx b/src/Core/Resources/Localization/AppResources.de.resx index 37ce33c0e..c86e46eef 100644 --- a/src/Core/Resources/Localization/AppResources.de.resx +++ b/src/Core/Resources/Localization/AppResources.de.resx @@ -2875,4 +2875,13 @@ Möchtest du zu diesem Konto wechseln? Richte eine Entsperroption ein, um deine Aktion bei Tresor-Timeout zu ändern. + + Für dein Konto ist die Duo Zwei-Faktor-Authentifizierung erforderlich. + + + Folge den Schritten von Duo, um die Anmeldung abzuschließen. + + + Duo starten + diff --git a/src/Core/Resources/Localization/AppResources.el.resx b/src/Core/Resources/Localization/AppResources.el.resx index ccc0ad470..9d8d50d51 100644 --- a/src/Core/Resources/Localization/AppResources.el.resx +++ b/src/Core/Resources/Localization/AppResources.el.resx @@ -2875,4 +2875,13 @@ Ρυθμίστε μια επιλογή κλειδώματος για να αλλάξετε την ενέργεια στη λήξη χρόνου του vault σας. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.en-GB.resx b/src/Core/Resources/Localization/AppResources.en-GB.resx index 7d5e88831..db9bafacc 100644 --- a/src/Core/Resources/Localization/AppResources.en-GB.resx +++ b/src/Core/Resources/Localization/AppResources.en-GB.resx @@ -2876,4 +2876,13 @@ Do you want to switch to this account? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.en-IN.resx b/src/Core/Resources/Localization/AppResources.en-IN.resx index 3765c510b..63043e11a 100644 --- a/src/Core/Resources/Localization/AppResources.en-IN.resx +++ b/src/Core/Resources/Localization/AppResources.en-IN.resx @@ -2890,4 +2890,13 @@ Do you want to switch to this account? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.es.resx b/src/Core/Resources/Localization/AppResources.es.resx index 63cecf1ff..f8d58382c 100644 --- a/src/Core/Resources/Localization/AppResources.es.resx +++ b/src/Core/Resources/Localization/AppResources.es.resx @@ -2878,4 +2878,13 @@ seleccione Agregar TOTP para almacenar la clave de forma segura Configura una opción de desbloqueo para cambiar tu acción de tiempo de espera de tu caja fuerte. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.et.resx b/src/Core/Resources/Localization/AppResources.et.resx index 22f66841d..244703b40 100644 --- a/src/Core/Resources/Localization/AppResources.et.resx +++ b/src/Core/Resources/Localization/AppResources.et.resx @@ -2876,4 +2876,13 @@ Soovid selle konto peale lülituda? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.eu.resx b/src/Core/Resources/Localization/AppResources.eu.resx index 11ac0ffaf..95e3cac70 100644 --- a/src/Core/Resources/Localization/AppResources.eu.resx +++ b/src/Core/Resources/Localization/AppResources.eu.resx @@ -2875,4 +2875,13 @@ Kontu honetara aldatu nahi duzu? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.fa.resx b/src/Core/Resources/Localization/AppResources.fa.resx index 5d4cf2d33..a9af40d91 100644 --- a/src/Core/Resources/Localization/AppResources.fa.resx +++ b/src/Core/Resources/Localization/AppResources.fa.resx @@ -2877,4 +2877,13 @@ Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.fi.resx b/src/Core/Resources/Localization/AppResources.fi.resx index 42c1c2f65..636c39364 100644 --- a/src/Core/Resources/Localization/AppResources.fi.resx +++ b/src/Core/Resources/Localization/AppResources.fi.resx @@ -2877,4 +2877,13 @@ Haluatko vaihtaa tähän tiliin? Muuta holvisi aikakatkaisutoimintoa määrittämällä lukituksen avaustapa. + + Tilillesi kirjautuminen vaatii Duo-vahvistuksen. + + + Viimeistele kirjautuminen seuraamalla Duon ohjeita. + + + Avaa Duo + diff --git a/src/Core/Resources/Localization/AppResources.fil.resx b/src/Core/Resources/Localization/AppResources.fil.resx index 57a3b644d..43bd3a4ff 100644 --- a/src/Core/Resources/Localization/AppResources.fil.resx +++ b/src/Core/Resources/Localization/AppResources.fil.resx @@ -2877,4 +2877,13 @@ Gusto mo bang pumunta sa account na ito? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.fr.resx b/src/Core/Resources/Localization/AppResources.fr.resx index 239cd3f56..c18fce3f9 100644 --- a/src/Core/Resources/Localization/AppResources.fr.resx +++ b/src/Core/Resources/Localization/AppResources.fr.resx @@ -2877,4 +2877,13 @@ Voulez-vous basculer vers ce compte ? Configurez une méthode de déverrouillage pour modifier l'action après délai d'expiration de votre coffre. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.gl.resx b/src/Core/Resources/Localization/AppResources.gl.resx index ef486a762..c0c83ca99 100644 --- a/src/Core/Resources/Localization/AppResources.gl.resx +++ b/src/Core/Resources/Localization/AppResources.gl.resx @@ -2877,4 +2877,13 @@ Do you want to switch to this account? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.he.resx b/src/Core/Resources/Localization/AppResources.he.resx index de7228d88..8d614516a 100644 --- a/src/Core/Resources/Localization/AppResources.he.resx +++ b/src/Core/Resources/Localization/AppResources.he.resx @@ -2879,4 +2879,13 @@ Do you want to switch to this account? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.hi.resx b/src/Core/Resources/Localization/AppResources.hi.resx index 7d5bf8ad5..eaf05bc7b 100644 --- a/src/Core/Resources/Localization/AppResources.hi.resx +++ b/src/Core/Resources/Localization/AppResources.hi.resx @@ -2876,4 +2876,13 @@ Do you want to switch to this account? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.hr.resx b/src/Core/Resources/Localization/AppResources.hr.resx index 743f77fca..68ae1686b 100644 --- a/src/Core/Resources/Localization/AppResources.hr.resx +++ b/src/Core/Resources/Localization/AppResources.hr.resx @@ -2874,4 +2874,13 @@ Za promjenu vremena isteka trezora, odredi način otključavanja. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.hu.resx b/src/Core/Resources/Localization/AppResources.hu.resx index c3547a5fd..e22f1cd65 100644 --- a/src/Core/Resources/Localization/AppResources.hu.resx +++ b/src/Core/Resources/Localization/AppResources.hu.resx @@ -2875,4 +2875,13 @@ Szeretnénk átváltani erre a fiókra? Állítsunk be egy feloldási módot a széf időkifutási műveletének módosításához. + + DUO kétlépéses bejelentkezés szükséges a fiókhoz. + + + Kövessük a Duo lépéseit a bejelentkezés befejezéséhez. + + + Duo indítása + diff --git a/src/Core/Resources/Localization/AppResources.id.resx b/src/Core/Resources/Localization/AppResources.id.resx index 52559c5c1..13ca51ca9 100644 --- a/src/Core/Resources/Localization/AppResources.id.resx +++ b/src/Core/Resources/Localization/AppResources.id.resx @@ -2876,4 +2876,13 @@ Do you want to switch to this account? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.it.resx b/src/Core/Resources/Localization/AppResources.it.resx index 0b27473be..d899a46cf 100644 --- a/src/Core/Resources/Localization/AppResources.it.resx +++ b/src/Core/Resources/Localization/AppResources.it.resx @@ -2876,4 +2876,13 @@ Vuoi passare a questo account? Imposta un metodo di sblocco per modificare l'azione timeout cassaforte. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.ja.resx b/src/Core/Resources/Localization/AppResources.ja.resx index fd990c96b..bcd09acc6 100644 --- a/src/Core/Resources/Localization/AppResources.ja.resx +++ b/src/Core/Resources/Localization/AppResources.ja.resx @@ -2876,4 +2876,13 @@ 保管庫のタイムアウト動作を変更するには、ロック解除方法を設定してください。 + + アカウントには Duo 二段階認証が必要です。 + + + Duo の手順に従ってログインを完了してください。 + + + Duo を起動 + diff --git a/src/Core/Resources/Localization/AppResources.ka.resx b/src/Core/Resources/Localization/AppResources.ka.resx index ef486a762..c0c83ca99 100644 --- a/src/Core/Resources/Localization/AppResources.ka.resx +++ b/src/Core/Resources/Localization/AppResources.ka.resx @@ -2877,4 +2877,13 @@ Do you want to switch to this account? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.kn.resx b/src/Core/Resources/Localization/AppResources.kn.resx index fc53fac84..947866d87 100644 --- a/src/Core/Resources/Localization/AppResources.kn.resx +++ b/src/Core/Resources/Localization/AppResources.kn.resx @@ -2877,4 +2877,13 @@ Do you want to switch to this account? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.ko.resx b/src/Core/Resources/Localization/AppResources.ko.resx index ee02a707c..1d5e6c981 100644 --- a/src/Core/Resources/Localization/AppResources.ko.resx +++ b/src/Core/Resources/Localization/AppResources.ko.resx @@ -2876,4 +2876,13 @@ Do you want to switch to this account? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.lt.resx b/src/Core/Resources/Localization/AppResources.lt.resx index 9f570744c..5f2739c6e 100644 --- a/src/Core/Resources/Localization/AppResources.lt.resx +++ b/src/Core/Resources/Localization/AppResources.lt.resx @@ -2877,4 +2877,13 @@ Ar norite pereiti prie šios paskyros? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.lv.resx b/src/Core/Resources/Localization/AppResources.lv.resx index 641e7d0ef..399a0559e 100644 --- a/src/Core/Resources/Localization/AppResources.lv.resx +++ b/src/Core/Resources/Localization/AppResources.lv.resx @@ -2877,4 +2877,13 @@ Vai pārslēgties uz šo kontu? Jāuzstāda atslēgšanas iespēja, lai mainītu glabātavas noildzes darbību. + + Kontam ir nepieciešama Duo divpakāpju pieteikšanās. + + + Jāseko Duo norādēm, lai pabeigtu pieteikšanos. + + + Palaist Duo + diff --git a/src/Core/Resources/Localization/AppResources.ml.resx b/src/Core/Resources/Localization/AppResources.ml.resx index 6f45dd60e..0f60e0c06 100644 --- a/src/Core/Resources/Localization/AppResources.ml.resx +++ b/src/Core/Resources/Localization/AppResources.ml.resx @@ -2876,4 +2876,13 @@ Do you want to switch to this account? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.mr.resx b/src/Core/Resources/Localization/AppResources.mr.resx index 620dcfb17..494b1b60a 100644 --- a/src/Core/Resources/Localization/AppResources.mr.resx +++ b/src/Core/Resources/Localization/AppResources.mr.resx @@ -2877,4 +2877,13 @@ Do you want to switch to this account? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.my.resx b/src/Core/Resources/Localization/AppResources.my.resx index ef486a762..c0c83ca99 100644 --- a/src/Core/Resources/Localization/AppResources.my.resx +++ b/src/Core/Resources/Localization/AppResources.my.resx @@ -2877,4 +2877,13 @@ Do you want to switch to this account? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.nb.resx b/src/Core/Resources/Localization/AppResources.nb.resx index 329f82d82..a0d95dc48 100644 --- a/src/Core/Resources/Localization/AppResources.nb.resx +++ b/src/Core/Resources/Localization/AppResources.nb.resx @@ -2877,4 +2877,13 @@ Vil du bytte til denne kontoen? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.ne.resx b/src/Core/Resources/Localization/AppResources.ne.resx index ef486a762..c0c83ca99 100644 --- a/src/Core/Resources/Localization/AppResources.ne.resx +++ b/src/Core/Resources/Localization/AppResources.ne.resx @@ -2877,4 +2877,13 @@ Do you want to switch to this account? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.nl.resx b/src/Core/Resources/Localization/AppResources.nl.resx index 47974a496..8392a8113 100644 --- a/src/Core/Resources/Localization/AppResources.nl.resx +++ b/src/Core/Resources/Localization/AppResources.nl.resx @@ -2876,4 +2876,13 @@ Wilt u naar dit account wisselen? Stel een ontgrendelingsmethode in om je kluis time-out actie te wijzigen. + + Jouw account vereist Duo-tweestapsaanmelding. + + + Volg de stappen van Duo om in te loggen. + + + Duo starten + diff --git a/src/Core/Resources/Localization/AppResources.nn.resx b/src/Core/Resources/Localization/AppResources.nn.resx index 0c1de4042..258ca1a3d 100644 --- a/src/Core/Resources/Localization/AppResources.nn.resx +++ b/src/Core/Resources/Localization/AppResources.nn.resx @@ -2877,4 +2877,13 @@ Do you want to switch to this account? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.or.resx b/src/Core/Resources/Localization/AppResources.or.resx index b696360ea..57f4a1e5e 100644 --- a/src/Core/Resources/Localization/AppResources.or.resx +++ b/src/Core/Resources/Localization/AppResources.or.resx @@ -2877,4 +2877,13 @@ Do you want to switch to this account? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.pl.resx b/src/Core/Resources/Localization/AppResources.pl.resx index 4a5f94625..8511de8bb 100644 --- a/src/Core/Resources/Localization/AppResources.pl.resx +++ b/src/Core/Resources/Localization/AppResources.pl.resx @@ -2876,4 +2876,13 @@ Czy chcesz przełączyć się na to konto? Ustaw opcje odblokowania, aby zmienić czas blokowania sejfu. + + Dwustopniowe logowanie Duo jest wymagane dla Twojego konta. + + + Wykonaj kroki od Duo, aby zakończyć logowanie. + + + Uruchom Duo + diff --git a/src/Core/Resources/Localization/AppResources.pt-BR.resx b/src/Core/Resources/Localization/AppResources.pt-BR.resx index b6f12df13..d40384d4f 100644 --- a/src/Core/Resources/Localization/AppResources.pt-BR.resx +++ b/src/Core/Resources/Localization/AppResources.pt-BR.resx @@ -2877,4 +2877,13 @@ Você deseja mudar para esta conta? Configure um método de desbloqueio para alterar o tempo limite do cofre. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.pt-PT.resx b/src/Core/Resources/Localization/AppResources.pt-PT.resx index 93566ea21..3bbbd9859 100644 --- a/src/Core/Resources/Localization/AppResources.pt-PT.resx +++ b/src/Core/Resources/Localization/AppResources.pt-PT.resx @@ -2826,7 +2826,7 @@ Deseja mudar para esta conta? Continuar para a loja de aplicações? - Torne a sua conta mais segura configurando a verificação em dois passos na aplicação Web Bitwarden. + Torne a sua conta mais segura configurando a verificação de dois passos na aplicação Web Bitwarden. Pode alterar a sua palavra-passe mestra na aplicação Web Bitwarden. @@ -2875,4 +2875,13 @@ Deseja mudar para esta conta? Configure uma opção de desbloqueio para alterar a ação de tempo limite do seu cofre. + + A verificação de dois passos Duo é necessária para a sua conta. + + + Siga os passos do Duo para concluir o início de sessão. + + + Iniciar o Duo + diff --git a/src/Core/Resources/Localization/AppResources.ro.resx b/src/Core/Resources/Localization/AppResources.ro.resx index bd6023a3b..7a0100966 100644 --- a/src/Core/Resources/Localization/AppResources.ro.resx +++ b/src/Core/Resources/Localization/AppResources.ro.resx @@ -2876,4 +2876,13 @@ Doriți să comutați la acest cont? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.ru.resx b/src/Core/Resources/Localization/AppResources.ru.resx index 8438f0323..7f38096de 100644 --- a/src/Core/Resources/Localization/AppResources.ru.resx +++ b/src/Core/Resources/Localization/AppResources.ru.resx @@ -2878,4 +2878,13 @@ Настройте опцию разблокировки для изменения действия по тайм-ауту хранилища. + + Для вашего аккаунта требуется двухэтапная аутентификация Duo. + + + Следуйте указаниям Duo, чтобы завершить авторизацию. + + + Запустить Duo + diff --git a/src/Core/Resources/Localization/AppResources.si.resx b/src/Core/Resources/Localization/AppResources.si.resx index b0098f73d..2c0f4c0f6 100644 --- a/src/Core/Resources/Localization/AppResources.si.resx +++ b/src/Core/Resources/Localization/AppResources.si.resx @@ -2877,4 +2877,13 @@ Do you want to switch to this account? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.sk.resx b/src/Core/Resources/Localization/AppResources.sk.resx index 1f181fca6..c5f29583b 100644 --- a/src/Core/Resources/Localization/AppResources.sk.resx +++ b/src/Core/Resources/Localization/AppResources.sk.resx @@ -2876,4 +2876,13 @@ Chcete prepnúť na toto konto? Nastavte možnosť odomknutia, aby ste zmenili akciu pri vypršaní času trezoru. + + Pre váš účet je potrebné dvojstupňové prihlásenie Duo. + + + Postupujte podľa krokov z aplikácie Duo a dokončite prihlasovanie. + + + Spustiť Duo + diff --git a/src/Core/Resources/Localization/AppResources.sl.resx b/src/Core/Resources/Localization/AppResources.sl.resx index ad03bc10b..29a0d1b84 100644 --- a/src/Core/Resources/Localization/AppResources.sl.resx +++ b/src/Core/Resources/Localization/AppResources.sl.resx @@ -2876,4 +2876,13 @@ Do you want to switch to this account? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.sr.resx b/src/Core/Resources/Localization/AppResources.sr.resx index 914204593..a72b50188 100644 --- a/src/Core/Resources/Localization/AppResources.sr.resx +++ b/src/Core/Resources/Localization/AppResources.sr.resx @@ -2878,4 +2878,13 @@ Подесите опцију откључавања да бисте променили радњу временског ограничења сефа. + + Duo пријава у два корака је потребна за ваш налог. + + + Пратите кораке од Duo да завршите пријављивање. + + + Покренути Duo + diff --git a/src/Core/Resources/Localization/AppResources.sv.resx b/src/Core/Resources/Localization/AppResources.sv.resx index 93de0df88..7c4388a5f 100644 --- a/src/Core/Resources/Localization/AppResources.sv.resx +++ b/src/Core/Resources/Localization/AppResources.sv.resx @@ -2878,4 +2878,13 @@ Vill du byta till detta konto? Ställ in ett upplåsningsalternativ för att ändra vad som händer när tidsgränsen uppnås. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.ta.resx b/src/Core/Resources/Localization/AppResources.ta.resx index 94a1c3e23..f2ba06fd2 100644 --- a/src/Core/Resources/Localization/AppResources.ta.resx +++ b/src/Core/Resources/Localization/AppResources.ta.resx @@ -2877,4 +2877,13 @@ Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.te.resx b/src/Core/Resources/Localization/AppResources.te.resx index ef486a762..c0c83ca99 100644 --- a/src/Core/Resources/Localization/AppResources.te.resx +++ b/src/Core/Resources/Localization/AppResources.te.resx @@ -2877,4 +2877,13 @@ Do you want to switch to this account? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.th.resx b/src/Core/Resources/Localization/AppResources.th.resx index 41992dcdc..ce7401904 100644 --- a/src/Core/Resources/Localization/AppResources.th.resx +++ b/src/Core/Resources/Localization/AppResources.th.resx @@ -2884,4 +2884,13 @@ Do you want to switch to this account? Set up an unlock option to change your vault timeout action. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.tr.resx b/src/Core/Resources/Localization/AppResources.tr.resx index a60350d93..3b01aae44 100644 --- a/src/Core/Resources/Localization/AppResources.tr.resx +++ b/src/Core/Resources/Localization/AppResources.tr.resx @@ -2875,4 +2875,13 @@ Bu hesaba geçmek ister misiniz? Kasa zaman aşımı eyleminizi değiştirmek için bir kilit açma yöntemi ayarlayın. + + Hesabınız için Duo'ya iki adımlı giriş yapmanız gerekiyor. + + + Oturum açmayı tamamlamak için Duo'daki adımları izleyin. + + + Duo'yu başlat + diff --git a/src/Core/Resources/Localization/AppResources.uk.resx b/src/Core/Resources/Localization/AppResources.uk.resx index 46d91f395..49744ef44 100644 --- a/src/Core/Resources/Localization/AppResources.uk.resx +++ b/src/Core/Resources/Localization/AppResources.uk.resx @@ -2876,4 +2876,13 @@ Налаштуйте спосіб розблокування, щоб змінити час очікування сховища. + + Для вашого облікового запису необхідна двоетапна перевірка з Duo. + + + Виконайте дії з Duo для завершення входу. + + + Запустити Duo + diff --git a/src/Core/Resources/Localization/AppResources.vi.resx b/src/Core/Resources/Localization/AppResources.vi.resx index 7f1cf476d..3ea17c90b 100644 --- a/src/Core/Resources/Localization/AppResources.vi.resx +++ b/src/Core/Resources/Localization/AppResources.vi.resx @@ -2877,4 +2877,13 @@ Bạn có muốn chuyển sang tài khoản này không? Thiết lập khóa khi hết thời gian chờ kho. + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/Core/Resources/Localization/AppResources.zh-Hans.resx b/src/Core/Resources/Localization/AppResources.zh-Hans.resx index eaa11b475..02f1d1fe0 100644 --- a/src/Core/Resources/Localization/AppResources.zh-Hans.resx +++ b/src/Core/Resources/Localization/AppResources.zh-Hans.resx @@ -2876,4 +2876,13 @@ 设置解锁选项以更改您的密码库超时操作。 + + 您的账户要求使用 Duo 两步登录。 + + + 按照 Duo 的步骤完成登录。 + + + 启动 Duo + diff --git a/src/Core/Resources/Localization/AppResources.zh-Hant.resx b/src/Core/Resources/Localization/AppResources.zh-Hant.resx index 9253fb692..45988c656 100644 --- a/src/Core/Resources/Localization/AppResources.zh-Hant.resx +++ b/src/Core/Resources/Localization/AppResources.zh-Hant.resx @@ -2876,4 +2876,13 @@ 設定一個解鎖方式來變更您的密碼庫逾時動作。 + + Duo two-step login is required for your account. + + + Follow the steps from Duo to finish logging in. + + + Launch Duo + diff --git a/src/iOS.Autofill/CredentialProviderViewController.cs b/src/iOS.Autofill/CredentialProviderViewController.cs index 53643e55c..7f0f4e9ca 100644 --- a/src/iOS.Autofill/CredentialProviderViewController.cs +++ b/src/iOS.Autofill/CredentialProviderViewController.cs @@ -598,7 +598,11 @@ namespace Bit.iOS.Autofill ThemeManager.ApplyResourcesTo(environmentPage); if (environmentPage.BindingContext is EnvironmentPageViewModel vm) { - vm.SubmitSuccessAction = () => DismissViewController(false, () => LaunchHomePage()); + vm.SubmitSuccessTask = async () => + { + await DismissViewControllerAsync(false); + await MainThread.InvokeOnMainThreadAsync(() => LaunchHomePage()); + }; vm.CloseAction = () => DismissViewController(false, () => LaunchHomePage()); } diff --git a/src/iOS.Autofill/Info.plist b/src/iOS.Autofill/Info.plist index d7d964b94..71b88905c 100644 --- a/src/iOS.Autofill/Info.plist +++ b/src/iOS.Autofill/Info.plist @@ -11,7 +11,7 @@ CFBundleIdentifier com.8bit.bitwarden.autofill CFBundleShortVersionString - 2024.2.2 + 2024.2.1 CFBundleVersion 1 CFBundleLocalizations diff --git a/src/iOS.Extension/Info.plist b/src/iOS.Extension/Info.plist index c4d38502e..24289c18e 100644 --- a/src/iOS.Extension/Info.plist +++ b/src/iOS.Extension/Info.plist @@ -11,7 +11,7 @@ CFBundleIdentifier com.8bit.bitwarden.find-login-action-extension CFBundleShortVersionString - 2024.2.2 + 2024.2.1 CFBundleLocalizations en diff --git a/src/iOS.Extension/LoadingViewController.cs b/src/iOS.Extension/LoadingViewController.cs index b3874fa64..75d8cc8a6 100644 --- a/src/iOS.Extension/LoadingViewController.cs +++ b/src/iOS.Extension/LoadingViewController.cs @@ -18,6 +18,7 @@ using Bit.iOS.Core.Views; using Bit.iOS.Extension.Models; using CoreNFC; using Foundation; +using Microsoft.Maui.ApplicationModel; using Microsoft.Maui.Controls; using Microsoft.Maui.Platform; using MobileCoreServices; @@ -528,7 +529,11 @@ namespace Bit.iOS.Extension ThemeManager.ApplyResourcesTo(environmentPage); if (environmentPage.BindingContext is EnvironmentPageViewModel vm) { - vm.SubmitSuccessAction = () => DismissViewController(false, () => LaunchHomePage()); + vm.SubmitSuccessTask = async () => + { + await DismissViewControllerAsync(false); + await MainThread.InvokeOnMainThreadAsync(() => LaunchHomePage()); + }; vm.CloseAction = () => DismissViewController(false, () => LaunchHomePage()); } diff --git a/src/iOS.ShareExtension/Info.plist b/src/iOS.ShareExtension/Info.plist index 7bbd05352..ba68616b6 100644 --- a/src/iOS.ShareExtension/Info.plist +++ b/src/iOS.ShareExtension/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType XPC! CFBundleShortVersionString - 2024.2.2 + 2024.2.1 CFBundleVersion 1 MinimumOSVersion diff --git a/src/iOS.ShareExtension/LoadingViewController.cs b/src/iOS.ShareExtension/LoadingViewController.cs index 22cb86fb8..acf295d56 100644 --- a/src/iOS.ShareExtension/LoadingViewController.cs +++ b/src/iOS.ShareExtension/LoadingViewController.cs @@ -17,6 +17,7 @@ using Bit.iOS.Core.Views; using Bit.iOS.ShareExtension.Models; using CoreNFC; using Foundation; +using Microsoft.Maui.ApplicationModel; using Microsoft.Maui.Controls; using Microsoft.Maui.Platform; using MobileCoreServices; @@ -321,7 +322,11 @@ namespace Bit.iOS.ShareExtension ThemeManager.ApplyResourcesTo(environmentPage); if (environmentPage.BindingContext is EnvironmentPageViewModel vm) { - vm.SubmitSuccessAction = () => DismissAndLaunch(() => LaunchHomePage()); + vm.SubmitSuccessTask = async () => + { + await DismissViewControllerAsync(false); + await MainThread.InvokeOnMainThreadAsync(() => LaunchHomePage()); + }; vm.CloseAction = () => DismissAndLaunch(() => LaunchHomePage()); } diff --git a/store/google/Publisher/Publisher.csproj b/store/google/Publisher/Publisher.csproj index bedaef882..b610268f8 100644 --- a/store/google/Publisher/Publisher.csproj +++ b/store/google/Publisher/Publisher.csproj @@ -2,13 +2,13 @@ Exe - netcoreapp3.1 + net8.0 Bit.Publisher Debug;Release;FDroid - +