diff --git a/.github/workflows/build-authenticator.yml b/.github/workflows/build-authenticator.yml
index 6d55e6d0b1..fdc8861846 100644
--- a/.github/workflows/build-authenticator.yml
+++ b/.github/workflows/build-authenticator.yml
@@ -32,6 +32,7 @@ env:
permissions:
contents: read
packages: read
+ id-token: write
jobs:
build:
@@ -122,9 +123,18 @@ jobs:
bundle install --jobs 4 --retry 3
- name: Log in to Azure
- uses: Azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2.3.0
+ uses: bitwarden/gh-actions/azure-login@main
with:
- creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
+ subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+ tenant_id: ${{ secrets.AZURE_TENANT_ID }}
+ client_id: ${{ secrets.AZURE_CLIENT_ID }}
+
+ - name: Get Azure Key Vault secrets
+ id: get-kv-secrets
+ uses: bitwarden/gh-actions/get-keyvault-secrets@main
+ with:
+ keyvault: gh-android
+ secrets: "BWA-AAB-KEYSTORE-STORE-PASSWORD,BWA-AAB-KEYSTORE-KEY-PASSWORD,BWA-APK-KEYSTORE-STORE-PASSWORD,BWA-APK-KEYSTORE-KEY-PASSWORD"
- name: Retrieve secrets
env:
@@ -168,6 +178,9 @@ jobs:
az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \
--name authenticator_play_store-creds.json --file ${{ github.workspace }}/secrets/authenticator_play_store-creds.json --output none
+ - name: AZ Logout
+ uses: bitwarden/gh-actions/azure-logout@main
+
- name: Verify Play Store credentials
if: ${{ inputs.publish-to-play-store }}
run: |
@@ -222,18 +235,18 @@ jobs:
run: |
bundle exec fastlane bundleAuthenticatorRelease \
storeFile:${{ github.workspace }}/keystores/authenticator_aab-keystore.jks \
- storePassword:'${{ secrets.BWA_AAB_KEYSTORE_STORE_PASSWORD }}' \
+ storePassword:'${{ steps.get-kv-secrets.outputs.BWA-AAB-KEYSTORE-STORE-PASSWORD }}' \
keyAlias:authenticatorupload \
- keyPassword:'${{ secrets.BWA_AAB_KEYSTORE_KEY_PASSWORD }}'
+ keyPassword:'${{ steps.get-kv-secrets.outputs.BWA-AAB-KEYSTORE-KEY-PASSWORD }}'
- name: Generate release Play Store APK
if: ${{ matrix.variant == 'apk' }}
run: |
bundle exec fastlane buildAuthenticatorRelease \
storeFile:${{ github.workspace }}/keystores/authenticator_apk-keystore.jks \
- storePassword:'${{ secrets.BWA_APK_KEYSTORE_STORE_PASSWORD }}' \
+ storePassword:'${{ steps.get-kv-secrets.outputs.BWA-APK-KEYSTORE-STORE-PASSWORD }}' \
keyAlias:bitwardenauthenticator \
- keyPassword:'${{ secrets.BWA_APK_KEYSTORE_KEY_PASSWORD }}'
+ keyPassword:'${{ steps.get-kv-secrets.outputs.BWA-APK-KEYSTORE-KEY-PASSWORD }}'
- name: Upload release Play Store .aab artifact
if: ${{ matrix.variant == 'aab' }}
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 193681d0dc..a70fd67996 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -33,6 +33,7 @@ env:
permissions:
contents: read
packages: read
+ id-token: write
jobs:
build:
@@ -130,9 +131,18 @@ jobs:
bundle install --jobs 4 --retry 3
- name: Log in to Azure
- uses: Azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2.3.0
+ uses: bitwarden/gh-actions/azure-login@main
with:
- creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
+ subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+ tenant_id: ${{ secrets.AZURE_TENANT_ID }}
+ client_id: ${{ secrets.AZURE_CLIENT_ID }}
+
+ - name: Get Azure Key Vault secrets
+ id: get-kv-secrets
+ uses: bitwarden/gh-actions/get-keyvault-secrets@main
+ with:
+ keyvault: gh-android
+ secrets: "UPLOAD-KEYSTORE-PASSWORD,UPLOAD-BETA-KEYSTORE-PASSWORD,UPLOAD-BETA-KEY-PASSWORD,PLAY-KEYSTORE-PASSWORD,PLAY-BETA-KEYSTORE-PASSWORD,PLAY-BETA-KEY-PASSWORD"
- name: Retrieve secrets
env:
@@ -169,6 +179,9 @@ jobs:
az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \
--name app_play_prod_firebase-creds.json --file ${{ github.workspace }}/secrets/app_play_prod_firebase-creds.json --output none
+ - name: Log out from Azure
+ uses: bitwarden/gh-actions/azure-logout@main
+
- name: Validate Gradle wrapper
uses: gradle/actions/wrapper-validation@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
@@ -216,48 +229,48 @@ jobs:
- name: Generate release Play Store bundle
if: ${{ matrix.variant == 'prod' && matrix.artifact == 'aab' }}
env:
- UPLOAD_KEYSTORE_PASSWORD: ${{ secrets.UPLOAD_KEYSTORE_PASSWORD }}
+ UPLOAD-KEYSTORE-PASSWORD: ${{ steps.get-kv-secrets.outputs.UPLOAD-KEYSTORE-PASSWORD }}
run: |
bundle exec fastlane bundlePlayStoreRelease \
storeFile:app_upload-keystore.jks \
- storePassword:${{ env.UPLOAD_KEYSTORE_PASSWORD }} \
+ storePassword:${{ env.UPLOAD-KEYSTORE-PASSWORD }} \
keyAlias:upload \
- keyPassword:${{ env.UPLOAD_KEYSTORE_PASSWORD }}
+ keyPassword:${{ env.UPLOAD-KEYSTORE-PASSWORD }}
- name: Generate beta Play Store bundle
if: ${{ (matrix.variant == 'prod') && (matrix.artifact == 'aab') }}
env:
- UPLOAD_BETA_KEYSTORE_PASSWORD: ${{ secrets.UPLOAD_BETA_KEYSTORE_PASSWORD }}
- UPLOAD_BETA_KEY_PASSWORD: ${{ secrets.UPLOAD_BETA_KEY_PASSWORD }}
+ UPLOAD-BETA-KEYSTORE-PASSWORD: ${{ steps.get-kv-secrets.outputs.UPLOAD-BETA-KEYSTORE-PASSWORD }}
+ UPLOAD-BETA-KEY-PASSWORD: ${{ steps.get-kv-secrets.outputs.UPLOAD-BETA-KEY-PASSWORD }}
run: |
bundle exec fastlane bundlePlayStoreBeta \
storeFile:app_beta_upload-keystore.jks \
- storePassword:${{ env.UPLOAD_BETA_KEYSTORE_PASSWORD }} \
+ storePassword:${{ env.UPLOAD-BETA-KEYSTORE-PASSWORD }} \
keyAlias:bitwarden-beta-upload \
- keyPassword:${{ env.UPLOAD_BETA_KEY_PASSWORD }}
+ keyPassword:${{ env.UPLOAD-BETA-KEY-PASSWORD }}
- name: Generate release Play Store APK
if: ${{ (matrix.variant == 'prod') && (matrix.artifact == 'apk') }}
env:
- PLAY_KEYSTORE_PASSWORD: ${{ secrets.PLAY_KEYSTORE_PASSWORD }}
+ PLAY-KEYSTORE-PASSWORD: ${{ steps.get-kv-secrets.outputs.PLAY-KEYSTORE-PASSWORD }}
run: |
bundle exec fastlane assemblePlayStoreReleaseApk \
storeFile:app_play-keystore.jks \
- storePassword:${{ env.PLAY_KEYSTORE_PASSWORD }} \
+ storePassword:${{ env.PLAY-KEYSTORE-PASSWORD }} \
keyAlias:bitwarden \
- keyPassword:${{ env.PLAY_KEYSTORE_PASSWORD }}
+ keyPassword:${{ env.PLAY-KEYSTORE-PASSWORD }}
- name: Generate beta Play Store APK
if: ${{ (matrix.variant == 'prod') && (matrix.artifact == 'apk') }}
env:
- PLAY_BETA_KEYSTORE_PASSWORD: ${{ secrets.PLAY_BETA_KEYSTORE_PASSWORD }}
- PLAY_BETA_KEY_PASSWORD: ${{ secrets.PLAY_BETA_KEY_PASSWORD }}
+ PLAY-BETA-KEYSTORE-PASSWORD: ${{ steps.get-kv-secrets.outputs.PLAY-BETA-KEYSTORE-PASSWORD }}
+ PLAY-BETA-KEY-PASSWORD: ${{ steps.get-kv-secrets.outputs.PLAY-BETA-KEY-PASSWORD }}
run: |
bundle exec fastlane assemblePlayStoreBetaApk \
storeFile:app_beta_play-keystore.jks \
- storePassword:${{ env.PLAY_BETA_KEYSTORE_PASSWORD }} \
+ storePassword:${{ env.PLAY-BETA-KEYSTORE-PASSWORD }} \
keyAlias:bitwarden-beta \
- keyPassword:${{ env.PLAY_BETA_KEY_PASSWORD }}
+ keyPassword:${{ env.PLAY-BETA-KEY-PASSWORD }}
- name: Generate debug Play Store APKs
if: ${{ (matrix.variant != 'prod') && (matrix.artifact == 'apk') }}
@@ -429,9 +442,18 @@ jobs:
bundle install --jobs 4 --retry 3
- name: Log in to Azure
- uses: Azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2.3.0
+ uses: bitwarden/gh-actions/azure-login@main
with:
- creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
+ subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+ tenant_id: ${{ secrets.AZURE_TENANT_ID }}
+ client_id: ${{ secrets.AZURE_CLIENT_ID }}
+
+ - name: Get Azure Key Vault secrets
+ id: get-kv-secrets
+ uses: bitwarden/gh-actions/get-keyvault-secrets@main
+ with:
+ keyvault: gh-android
+ secrets: "FDROID-KEYSTORE-PASSWORD,FDROID-BETA-KEYSTORE-PASSWORD,FDROID-BETA-KEY-PASSWORD"
- name: Retrieve secrets
env:
@@ -454,6 +476,9 @@ jobs:
az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \
--name app_fdroid_firebase-creds.json --file ${{ github.workspace }}/secrets/app_fdroid_firebase-creds.json --output none
+ - name: Log out from Azure
+ uses: bitwarden/gh-actions/azure-logout@main
+
- name: Validate Gradle wrapper
uses: gradle/actions/wrapper-validation@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
@@ -508,7 +533,7 @@ jobs:
echo "Version Number: $VERSION_CODE" >> $GITHUB_STEP_SUMMARY
- name: Generate F-Droid artifacts
env:
- FDROID_STORE_PASSWORD: ${{ secrets.FDROID_KEYSTORE_PASSWORD }}
+ FDROID_STORE_PASSWORD: ${{ steps.get-kv-secrets.outputs.FDROID-KEYSTORE-PASSWORD }}
run: |
bundle exec fastlane assembleFDroidReleaseApk \
storeFile:app_fdroid-keystore.jks \
@@ -518,14 +543,14 @@ jobs:
- name: Generate F-Droid Beta Artifacts
env:
- FDROID_BETA_KEYSTORE_PASSWORD: ${{ secrets.FDROID_BETA_KEYSTORE_PASSWORD }}
- FDROID_BETA_KEY_PASSWORD: ${{ secrets.FDROID_BETA_KEY_PASSWORD }}
+ FDROID-BETA-KEYSTORE-PASSWORD: ${{ steps.get-kv-secrets.outputs.FDROID-BETA-KEYSTORE-PASSWORD }}
+ FDROID-BETA-KEY-PASSWORD: ${{ steps.get-kv-secrets.outputs.FDROID-BETA-KEY-PASSWORD }}
run: |
bundle exec fastlane assembleFDroidBetaApk \
storeFile:app_beta_fdroid-keystore.jks \
- storePassword:"${{ env.FDROID_BETA_KEYSTORE_PASSWORD }}" \
+ storePassword:"${{ env.FDROID-BETA-KEYSTORE-PASSWORD }}" \
keyAlias:bitwarden-beta \
- keyPassword:"${{ env.FDROID_BETA_KEY_PASSWORD }}"
+ keyPassword:"${{ env.FDROID-BETA-KEY-PASSWORD }}"
- name: Upload F-Droid .apk artifact
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
diff --git a/.github/workflows/crowdin-pull.yml b/.github/workflows/crowdin-pull.yml
index 59d5f81009..5f42757cb4 100644
--- a/.github/workflows/crowdin-pull.yml
+++ b/.github/workflows/crowdin-pull.yml
@@ -13,6 +13,7 @@ jobs:
permissions:
contents: write
pull-requests: write
+ id-token: write
strategy:
matrix:
include:
@@ -28,10 +29,19 @@ jobs:
- name: Checkout repo
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- - name: Login to Azure - CI Subscription
- uses: Azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2.3.0
+ - name: Log in to Azure
+ uses: bitwarden/gh-actions/azure-login@main
with:
- creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
+ subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+ tenant_id: ${{ secrets.AZURE_TENANT_ID }}
+ client_id: ${{ secrets.AZURE_CLIENT_ID }}
+
+ - name: Get Azure Key Vault secrets
+ id: get-kv-secrets
+ uses: bitwarden/gh-actions/get-keyvault-secrets@main
+ with:
+ keyvault: gh-org-bitwarden
+ secrets: "BW-GHAPP-ID,BW-GHAPP-KEY"
- name: Retrieve secrets
id: retrieve-secrets
@@ -40,12 +50,15 @@ jobs:
keyvault: "bitwarden-ci"
secrets: "crowdin-api-token, github-gpg-private-key, github-gpg-private-key-passphrase"
+ - name: Log out from Azure
+ uses: bitwarden/gh-actions/azure-logout@main
+
- name: Generate GH App token
uses: actions/create-github-app-token@3ff1caaa28b64c9cc276ce0a02e2ff584f3900c5 # v2.0.2
id: app-token
with:
- app-id: ${{ secrets.BW_GHAPP_ID }}
- private-key: ${{ secrets.BW_GHAPP_KEY }}
+ app-id: ${{ steps.get-kv-secrets.outputs.BW-GHAPP-ID }}
+ private-key: ${{ steps.get-kv-secrets.outputs.BW-GHAPP-KEY }}
- name: Download translations for ${{ matrix.name }}
uses: crowdin/github-action@b8012bd5491b8aa8578b73ab5b5f5e7c94aaa6e2 # v2.7.0
diff --git a/.github/workflows/crowdin-push.yml b/.github/workflows/crowdin-push.yml
index e9ac7a2d8f..3a9c59ac0e 100644
--- a/.github/workflows/crowdin-push.yml
+++ b/.github/workflows/crowdin-push.yml
@@ -13,14 +13,17 @@ jobs:
runs-on: ubuntu-24.04
permissions:
contents: read
+ id-token: write
steps:
- name: Check out repo
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Log in to Azure
- uses: Azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2.3.0
+ uses: bitwarden/gh-actions/azure-login@main
with:
- creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
+ subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+ tenant_id: ${{ secrets.AZURE_TENANT_ID }}
+ client_id: ${{ secrets.AZURE_CLIENT_ID }}
- name: Retrieve secrets
id: retrieve-secrets
@@ -40,6 +43,9 @@ jobs:
upload_sources: true
upload_translations: false
+ - name: Log out from Azure
+ uses: bitwarden/gh-actions/azure-logout@main
+
- name: Upload sources for Authenticator
uses: crowdin/github-action@b8012bd5491b8aa8578b73ab5b5f5e7c94aaa6e2 # v2.7.0
env:
diff --git a/.github/workflows/github-release.yml b/.github/workflows/github-release.yml
index 345b7416a2..8d11eaf831 100644
--- a/.github/workflows/github-release.yml
+++ b/.github/workflows/github-release.yml
@@ -21,6 +21,7 @@ jobs:
runs-on: ubuntu-24.04
permissions:
contents: write
+ id-token: write
steps:
- name: Check out repository
@@ -115,6 +116,23 @@ jobs:
find $ARTIFACTS_PATH -type f
fi
+ - name: Log in to Azure
+ uses: bitwarden/gh-actions/azure-login@main
+ with:
+ subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+ tenant_id: ${{ secrets.AZURE_TENANT_ID }}
+ client_id: ${{ secrets.AZURE_CLIENT_ID }}
+
+ - name: Get Azure Key Vault secrets
+ id: get-kv-secrets
+ uses: bitwarden/gh-actions/get-keyvault-secrets@main
+ with:
+ keyvault: gh-android
+ secrets: "JIRA-API-EMAIL,JIRA-API-TOKEN"
+
+ - name: Log out from Azure
+ uses: bitwarden/gh-actions/azure-logout@main
+
- name: Get product release notes
id: get_release_notes
env:
@@ -122,8 +140,8 @@ jobs:
ARTIFACT_RUN_ID: ${{ inputs.artifact-run-id }}
_VERSION_NAME: ${{ steps.get_release_info.outputs.version_name }}
_RELEASE_TICKET_ID: ${{ inputs.release-ticket-id }}
- _JIRA_API_EMAIL: ${{ secrets.JIRA_API_EMAIL }}
- _JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
+ _JIRA_API_EMAIL: ${{ steps.get-kv-secrets.outputs.JIRA-API-EMAIL }}
+ _JIRA_API_TOKEN: ${{ steps.get-kv-secrets.outputs.JIRA-API-TOKEN }}
run: |
echo "Getting product release notes"
product_release_notes=$(python3 .github/scripts/jira-get-release-notes/jira_release_notes.py $_RELEASE_TICKET_ID $_JIRA_API_EMAIL $_JIRA_API_TOKEN)
diff --git a/.github/workflows/publish-github-release.yml b/.github/workflows/publish-github-release.yml
index e752d4921a..e6192e60e4 100644
--- a/.github/workflows/publish-github-release.yml
+++ b/.github/workflows/publish-github-release.yml
@@ -1,14 +1,36 @@
-name: Publish GitHub Release as newest
+name: Publish Password Manager and Authenticator GitHub Release as newest
on:
workflow_dispatch:
+ schedule:
+ - cron: '0 3 * * 1-5'
-permissions: {}
+permissions:
+ contents: write
+ id-token: write
+ actions: read
jobs:
- stub:
- runs-on: ubuntu-24.04
- name: Stub
- steps:
- - name: Stub
- run: echo "This is a stub job to trigger the workflow."
+ publish-release-password-manager:
+ name: Publish Password Manager Release
+ uses: bitwarden/gh-actions/.github/workflows/_publish-mobile-github-release.yml@main
+ with:
+ release_name: "Password Manager"
+ workflow_name: "publish-github-release.yml"
+ credentials_filename: "play_creds.json"
+ project_type: android
+ check_release_command: >
+ bundle exec fastlane getLatestPlayStoreVersion package_name:com.x8bit.bitwarden track:production
+ secrets: inherit
+
+ publish-release-authenticator:
+ name: Publish Authenticator Release
+ uses: bitwarden/gh-actions/.github/workflows/_publish-mobile-github-release.yml@main
+ with:
+ release_name: "Authenticator"
+ workflow_name: "publish-github-release.yml"
+ credentials_filename: "authenticator_play_store-creds.json"
+ project_type: android
+ check_release_command: >
+ bundle exec fastlane getLatestPlayStoreVersion package_name:com.bitwarden.authenticator track:production
+ secrets: inherit
diff --git a/.github/workflows/scan-ci.yml b/.github/workflows/scan-ci.yml
index 0091ece10f..8a4246426f 100644
--- a/.github/workflows/scan-ci.yml
+++ b/.github/workflows/scan-ci.yml
@@ -13,6 +13,7 @@ jobs:
permissions:
contents: read
security-events: write
+ id-token: write
steps:
- name: Check out repo
@@ -20,14 +21,31 @@ jobs:
with:
fetch-depth: 0
+ - name: Log in to Azure
+ uses: bitwarden/gh-actions/azure-login@main
+ with:
+ subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+ tenant_id: ${{ secrets.AZURE_TENANT_ID }}
+ client_id: ${{ secrets.AZURE_CLIENT_ID }}
+
+ - name: Get Azure Key Vault secrets
+ id: get-kv-secrets
+ uses: bitwarden/gh-actions/get-keyvault-secrets@main
+ with:
+ keyvault: gh-org-bitwarden
+ secrets: "CHECKMARX-TENANT,CHECKMARX-CLIENT-ID,CHECKMARX-SECRET"
+
+ - name: Log out from Azure
+ uses: bitwarden/gh-actions/azure-logout@main
+
- name: Scan with Checkmarx
uses: checkmarx/ast-github-action@ef93013c95adc60160bc22060875e90800d3ecfc # 2.3.19
with:
project_name: ${{ github.repository }}
- cx_tenant: ${{ secrets.CHECKMARX_TENANT }}
+ cx_tenant: ${{ steps.get-kv-secrets.outputs.CHECKMARX-TENANT }}
base_uri: https://ast.checkmarx.net/
- cx_client_id: ${{ secrets.CHECKMARX_CLIENT_ID }}
- cx_client_secret: ${{ secrets.CHECKMARX_SECRET }}
+ cx_client_id: ${{ steps.get-kv-secrets.outputs.CHECKMARX-CLIENT-ID }}
+ cx_client_secret: ${{ steps.get-kv-secrets.outputs.CHECKMARX-SECRET }}
additional_params: |
--report-format sarif \
--filter "state=TO_VERIFY;PROPOSED_NOT_EXPLOITABLE;CONFIRMED;URGENT" \
@@ -43,17 +61,36 @@ jobs:
runs-on: ubuntu-24.04
permissions:
contents: read
+ id-token: write
steps:
+
- name: Check out repo
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
+ - name: Log in to Azure
+ uses: bitwarden/gh-actions/azure-login@main
+ with:
+ subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+ tenant_id: ${{ secrets.AZURE_TENANT_ID }}
+ client_id: ${{ secrets.AZURE_CLIENT_ID }}
+
+ - name: Get Azure Key Vault secrets
+ id: get-kv-secrets
+ uses: bitwarden/gh-actions/get-keyvault-secrets@main
+ with:
+ keyvault: gh-org-bitwarden
+ secrets: "SONAR-TOKEN"
+
+ - name: Log out from Azure
+ uses: bitwarden/gh-actions/azure-logout@main
+
- name: Scan with SonarCloud
uses: sonarsource/sonarqube-scan-action@aa494459d7c39c106cc77b166de8b4250a32bb97 # v5.1.0
env:
- SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
+ SONAR_TOKEN: ${{ steps.get-kv-secrets.outputs.SONAR-TOKEN }}
with:
args: >
-Dsonar.organization=${{ github.repository_owner }}
diff --git a/.github/workflows/scan.yml b/.github/workflows/scan.yml
index f72bc72c7f..9fe35a9af5 100644
--- a/.github/workflows/scan.yml
+++ b/.github/workflows/scan.yml
@@ -28,6 +28,7 @@ jobs:
contents: read
pull-requests: write
security-events: write
+ id-token: write
steps:
- name: Check out repo
@@ -35,16 +36,33 @@ jobs:
with:
ref: ${{ github.event.pull_request.head.sha }}
+ - name: Log in to Azure
+ uses: bitwarden/gh-actions/azure-login@main
+ with:
+ subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+ tenant_id: ${{ secrets.AZURE_TENANT_ID }}
+ client_id: ${{ secrets.AZURE_CLIENT_ID }}
+
+ - name: Get Azure Key Vault secrets
+ id: get-kv-secrets
+ uses: bitwarden/gh-actions/get-keyvault-secrets@main
+ with:
+ keyvault: gh-org-bitwarden
+ secrets: "CHECKMARX-TENANT,CHECKMARX-CLIENT-ID,CHECKMARX-SECRET"
+
+ - name: Log out from Azure
+ uses: bitwarden/gh-actions/azure-logout@main
+
- name: Scan with Checkmarx
uses: checkmarx/ast-github-action@ef93013c95adc60160bc22060875e90800d3ecfc # 2.3.19
env:
INCREMENTAL: "${{ contains(github.event_name, 'pull_request') && '--sast-incremental' || '' }}"
with:
project_name: ${{ github.repository }}
- cx_tenant: ${{ secrets.CHECKMARX_TENANT }}
+ cx_tenant: ${{ steps.get-kv-secrets.outputs.CHECKMARX-TENANT }}
base_uri: https://ast.checkmarx.net/
- cx_client_id: ${{ secrets.CHECKMARX_CLIENT_ID }}
- cx_client_secret: ${{ secrets.CHECKMARX_SECRET }}
+ cx_client_id: ${{ steps.get-kv-secrets.outputs.CHECKMARX-CLIENT-ID }}
+ cx_client_secret: ${{ steps.get-kv-secrets.outputs.CHECKMARX-SECRET }}
additional_params: |
--report-format sarif \
--filter "state=TO_VERIFY;PROPOSED_NOT_EXPLOITABLE;CONFIRMED;URGENT" \
@@ -64,6 +82,7 @@ jobs:
permissions:
contents: read
pull-requests: write
+ id-token: write
steps:
- name: Check out repo
@@ -72,10 +91,27 @@ jobs:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}
+ - name: Log in to Azure
+ uses: bitwarden/gh-actions/azure-login@main
+ with:
+ subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+ tenant_id: ${{ secrets.AZURE_TENANT_ID }}
+ client_id: ${{ secrets.AZURE_CLIENT_ID }}
+
+ - name: Get Azure Key Vault secrets
+ id: get-kv-secrets
+ uses: bitwarden/gh-actions/get-keyvault-secrets@main
+ with:
+ keyvault: gh-org-bitwarden
+ secrets: "SONAR-TOKEN"
+
+ - name: Log out from Azure
+ uses: bitwarden/gh-actions/azure-logout@main
+
- name: Scan with SonarCloud
uses: sonarsource/sonarqube-scan-action@aa494459d7c39c106cc77b166de8b4250a32bb97 # v5.1.0
env:
- SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
+ SONAR_TOKEN: ${{ steps.get-kv-secrets.outputs.SONAR-TOKEN }}
with:
args: >
-Dsonar.organization=${{ github.repository_owner }}
diff --git a/.ruby-version b/.ruby-version
index bea438e9ad..4d9d11cf50 100644
--- a/.ruby-version
+++ b/.ruby-version
@@ -1 +1 @@
-3.3.1
+3.4.2
diff --git a/Gemfile b/Gemfile
index 32ff931186..89fcb9af06 100644
--- a/Gemfile
+++ b/Gemfile
@@ -7,3 +7,12 @@ gem 'time'
plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
eval_gemfile(plugins_path) if File.exist?(plugins_path)
+
+# Since ruby 3.4.0 these are not included in the standard library
+gem 'abbrev'
+gem 'logger'
+gem 'mutex_m'
+gem 'csv'
+
+# Starting with Ruby 3.5.0, these are not included in the standard library
+gem 'ostruct'
diff --git a/Gemfile.lock b/Gemfile.lock
index ff6bf0e437..799609e1fa 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -5,6 +5,7 @@ GEM
base64
nkf
rexml
+ abbrev (0.1.2)
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
artifactory (3.0.17)
@@ -34,6 +35,7 @@ GEM
colored2 (3.1.2)
commander (4.6.0)
highline (~> 2.0.0)
+ csv (3.3.5)
date (3.4.1)
declarative (0.0.20)
digest-crc (0.7.0)
@@ -179,6 +181,7 @@ GEM
nkf (0.2.0)
optparse (0.6.0)
os (1.1.4)
+ ostruct (0.6.1)
plist (3.7.2)
public_suffix (6.0.2)
rake (13.3.0)
@@ -230,12 +233,17 @@ PLATFORMS
ruby
DEPENDENCIES
+ abbrev
+ csv
fastlane
fastlane-plugin-firebase_app_distribution
+ logger
+ mutex_m
+ ostruct
time
RUBY VERSION
- ruby 3.3.1p55
+ ruby 3.4.2p28
BUNDLED WITH
- 2.6.6
+ 2.6.9
diff --git a/app/src/debug/res/xml/network_security_config.xml b/app/src/debug/res/xml/network_security_config.xml
new file mode 100644
index 0000000000..53a4b88f21
--- /dev/null
+++ b/app/src/debug/res/xml/network_security_config.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ bitwarden.com
+ bitwarden.eu
+ bitwarden.pw
+
+
+
+
+
+
+
diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/util/CipherListViewExtensions.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/util/CipherListViewExtensions.kt
new file mode 100644
index 0000000000..885eb182e8
--- /dev/null
+++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/util/CipherListViewExtensions.kt
@@ -0,0 +1,18 @@
+package com.x8bit.bitwarden.data.autofill.util
+
+import com.bitwarden.vault.CardListView
+import com.bitwarden.vault.CipherListView
+import com.bitwarden.vault.CipherListViewType
+import com.bitwarden.vault.LoginListView
+
+/**
+ * Returns the [LoginListView] if the cipher is of type [CipherListViewType.Login], otherwise null.
+ */
+val CipherListView.login: LoginListView?
+ get() = (this.type as? CipherListViewType.Login)?.v1
+
+/**
+ * Returns the [CardListView] if the cipher is of type [CipherListViewType.Card], otherwise null.
+ */
+val CipherListView.card: CardListView?
+ get() = (this.type as? CipherListViewType.Card)?.v1
diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/repository/AuthenticatorBridgeRepositoryImpl.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/repository/AuthenticatorBridgeRepositoryImpl.kt
index fcb5bf2bd4..82518ded52 100644
--- a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/repository/AuthenticatorBridgeRepositoryImpl.kt
+++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/repository/AuthenticatorBridgeRepositoryImpl.kt
@@ -141,6 +141,7 @@ class AuthenticatorBridgeRepositoryImpl(
decryptedUserKey = decryptedUserKey,
),
signingKey = null,
+ securityState = null,
),
)
.flatMap { result ->
diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/TotpCodeManager.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/TotpCodeManager.kt
index 2f3ead330b..fd6a4bb5f9 100644
--- a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/TotpCodeManager.kt
+++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/TotpCodeManager.kt
@@ -1,6 +1,7 @@
package com.x8bit.bitwarden.data.vault.manager
import com.bitwarden.core.data.repository.model.DataState
+import com.bitwarden.vault.CipherListView
import com.bitwarden.vault.CipherView
import com.x8bit.bitwarden.data.vault.manager.model.VerificationCodeItem
import kotlinx.coroutines.flow.StateFlow
@@ -18,6 +19,15 @@ interface TotpCodeManager {
cipherList: List,
): StateFlow>>
+ /**
+ * Flow for getting a DataState with multiple verification code items for the given
+ * [cipherListViews].
+ */
+ fun getTotpCodesForCipherListViewsStateFlow(
+ userId: String,
+ cipherListViews: List,
+ ): StateFlow>>
+
/**
* Flow for getting a DataState with a single verification code item.
*/
@@ -25,4 +35,13 @@ interface TotpCodeManager {
userId: String,
cipher: CipherView,
): StateFlow>
+
+ /**
+ * Flow for getting a DataState with a single verification code item for the given
+ * [cipherListView].
+ */
+ fun getTotpCodeStateFlow(
+ userId: String,
+ cipherListView: CipherListView,
+ ): StateFlow>
}
diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/TotpCodeManagerImpl.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/TotpCodeManagerImpl.kt
index 3acb6e4bd6..469cefd1c9 100644
--- a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/TotpCodeManagerImpl.kt
+++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/TotpCodeManagerImpl.kt
@@ -3,8 +3,10 @@ package com.x8bit.bitwarden.data.vault.manager
import com.bitwarden.core.DateTime
import com.bitwarden.core.data.repository.model.DataState
import com.bitwarden.data.manager.DispatcherManager
+import com.bitwarden.vault.CipherListView
import com.bitwarden.vault.CipherRepromptType
import com.bitwarden.vault.CipherView
+import com.x8bit.bitwarden.data.autofill.util.login
import com.x8bit.bitwarden.data.vault.datasource.sdk.VaultSdkSource
import com.x8bit.bitwarden.data.vault.manager.model.VerificationCodeItem
import kotlinx.coroutines.CoroutineScope
@@ -36,6 +38,9 @@ class TotpCodeManagerImpl(
private val mutableVerificationCodeStateFlowMap =
mutableMapOf>>()
+ private val mutableCipherListViewVerificationCodeStateFlowMap =
+ mutableMapOf>>()
+
override fun getTotpCodesStateFlow(
userId: String,
cipherList: List,
@@ -73,6 +78,43 @@ class TotpCodeManagerImpl(
cipher = cipher,
)
+ override fun getTotpCodesForCipherListViewsStateFlow(
+ userId: String,
+ cipherListViews: List,
+ ): StateFlow>> {
+ // Generate state flows
+ val stateFlows = cipherListViews.map { cipherListView ->
+ getTotpCodeStateFlowInternal(userId, cipherListView)
+ }
+ return combine(stateFlows) { results ->
+ when {
+ results.any { it is DataState.Loading } -> {
+ DataState.Loading
+ }
+
+ else -> {
+ DataState.Loaded(
+ data = results.mapNotNull { (it as DataState.Loaded).data },
+ )
+ }
+ }
+ }
+ .stateIn(
+ scope = unconfinedScope,
+ started = SharingStarted.WhileSubscribed(),
+ initialValue = DataState.Loading,
+ )
+ }
+
+ override fun getTotpCodeStateFlow(
+ userId: String,
+ cipherListView: CipherListView,
+ ): StateFlow> =
+ getTotpCodeStateFlowInternal(
+ userId = userId,
+ cipherListView = cipherListView,
+ )
+
@Suppress("LongMethod")
private fun getTotpCodeStateFlowInternal(
userId: String,
@@ -108,7 +150,6 @@ class TotpCodeManagerImpl(
.onSuccess { response ->
item = VerificationCodeItem(
code = response.code,
- totpCode = totpCode,
periodSeconds = response.period.toInt(),
timeLeftSeconds = response.period.toInt() -
time % response.period.toInt(),
@@ -129,12 +170,9 @@ class TotpCodeManagerImpl(
return@flow
}
} else {
- item?.let {
- item = it.copy(
- timeLeftSeconds = it.periodSeconds -
- (time % it.periodSeconds),
- )
- }
+ item = item.copy(
+ timeLeftSeconds = item.periodSeconds - (time % item.periodSeconds),
+ )
}
item?.let {
@@ -154,6 +192,78 @@ class TotpCodeManagerImpl(
)
}
}
+
+ @Suppress("LongMethod")
+ private fun getTotpCodeStateFlowInternal(
+ userId: String,
+ cipherListView: CipherListView?,
+ ): StateFlow> {
+ val cipherId = cipherListView?.id ?: return MutableStateFlow(DataState.Loaded(null))
+ cipherListView.login?.totp ?: return MutableStateFlow(DataState.Loaded(null))
+
+ return mutableCipherListViewVerificationCodeStateFlowMap.getOrPut(cipherListView) {
+ // Define a per-item scope so that we can clear the Flow from the scope when it is
+ // no longer needed.
+ val itemScope = CoroutineScope(dispatcherManager.unconfined)
+
+ flow> {
+
+ var item: VerificationCodeItem? = null
+ while (currentCoroutineContext().isActive) {
+ val dateTime = clock.instant()
+ val time = dateTime.epochSecond.toInt()
+ if (item == null || item.isExpired(clock = clock)) {
+ vaultSdkSource
+ .generateTotpForCipherListView(
+ cipherListView = cipherListView,
+ userId = userId,
+ time = dateTime,
+ )
+ .onSuccess { response ->
+ item = VerificationCodeItem(
+ code = response.code,
+ periodSeconds = response.period.toInt(),
+ timeLeftSeconds = response.period.toInt() -
+ time % response.period.toInt(),
+ issueTime = clock.millis(),
+ uriLoginViewList = cipherListView.login?.uris,
+ id = cipherId,
+ name = cipherListView.name,
+ username = cipherListView.login?.username,
+ hasPasswordReprompt = when (cipherListView.reprompt) {
+ CipherRepromptType.PASSWORD -> true
+ CipherRepromptType.NONE -> false
+ },
+ orgUsesTotp = cipherListView.organizationUseTotp,
+ )
+ }
+ .onFailure {
+ emit(DataState.Loaded(null))
+ return@flow
+ }
+ } else {
+ item = item.copy(
+ timeLeftSeconds = item.periodSeconds - (time % item.periodSeconds),
+ )
+ }
+
+ item?.let {
+ emit(DataState.Loaded(it))
+ }
+ delay(ONE_SECOND_MILLISECOND)
+ }
+ }
+ .onCompletion {
+ mutableCipherListViewVerificationCodeStateFlowMap.remove(cipherListView)
+ itemScope.cancel()
+ }
+ .stateIn(
+ scope = itemScope,
+ started = SharingStarted.WhileSubscribed(),
+ initialValue = DataState.Loading,
+ )
+ }
+ }
}
private fun VerificationCodeItem.isExpired(clock: Clock): Boolean {
diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/VaultLockManagerImpl.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/VaultLockManagerImpl.kt
index 54d7fee5b7..1938450278 100644
--- a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/VaultLockManagerImpl.kt
+++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/VaultLockManagerImpl.kt
@@ -183,6 +183,7 @@ class VaultLockManagerImpl(
method = initUserCryptoMethod,
userId = userId,
signingKey = null,
+ securityState = null,
),
)
.flatMap { result ->
diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/model/VerificationCodeItem.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/model/VerificationCodeItem.kt
index fadc0f357b..8dbf54fd07 100644
--- a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/model/VerificationCodeItem.kt
+++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/manager/model/VerificationCodeItem.kt
@@ -6,7 +6,6 @@ import com.bitwarden.vault.LoginUriView
* Models the items returned by the TotpCodeManager.
*
* @property code The verification code for the item.
- * @property totpCode The totp code for the item.
* @property periodSeconds The time span where the code is valid in seconds.
* @property timeLeftSeconds The seconds remaining until a new code is required.
* @property issueTime The time the verification code was issued.
@@ -19,7 +18,6 @@ import com.bitwarden.vault.LoginUriView
*/
data class VerificationCodeItem(
val code: String,
- val totpCode: String,
val periodSeconds: Int,
val timeLeftSeconds: Int,
val issueTime: Long,
diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/VaultRepository.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/VaultRepository.kt
index 26a5157e55..77afe195cc 100644
--- a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/VaultRepository.kt
+++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/VaultRepository.kt
@@ -9,6 +9,7 @@ import com.bitwarden.sdk.Fido2CredentialStore
import com.bitwarden.send.SendType
import com.bitwarden.send.SendView
import com.bitwarden.vault.CipherListView
+import com.bitwarden.vault.CipherType
import com.bitwarden.vault.CipherView
import com.bitwarden.vault.CollectionView
import com.bitwarden.vault.FolderView
@@ -262,6 +263,12 @@ interface VaultRepository : CipherManager, VaultLockManager {
/**
* Attempt to get the user's vault data for export.
+ *
+ * @param format The export format to use.
+ * @param restrictedTypes A list of restricted types to export.
*/
- suspend fun exportVaultDataToString(format: ExportFormat): ExportVaultDataResult
+ suspend fun exportVaultDataToString(
+ format: ExportFormat,
+ restrictedTypes: List,
+ ): ExportVaultDataResult
}
diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryImpl.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryImpl.kt
index ffcd8dd2de..3e5bd673ac 100644
--- a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryImpl.kt
+++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryImpl.kt
@@ -931,7 +931,10 @@ class VaultRepositoryImpl(
}
}
- override suspend fun exportVaultDataToString(format: ExportFormat): ExportVaultDataResult {
+ override suspend fun exportVaultDataToString(
+ format: ExportFormat,
+ restrictedTypes: List,
+ ): ExportVaultDataResult {
val userId = activeUserId
?: return ExportVaultDataResult.Error(error = NoActiveUserException())
val folders = vaultDiskSource
@@ -945,7 +948,11 @@ class VaultRepositoryImpl(
.firstOrNull()
.orEmpty()
.map { it.toEncryptedSdkCipher() }
- .filter { it.collectionIds.isEmpty() && it.deletedDate == null }
+ .filter {
+ it.collectionIds.isEmpty() &&
+ it.deletedDate == null &&
+ !restrictedTypes.contains(it.type)
+ }
return vaultSdkSource
.exportVaultDataToString(
diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginViewModel.kt
index 83f157c018..2a9139ea8b 100644
--- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginViewModel.kt
+++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginViewModel.kt
@@ -122,6 +122,13 @@ class TwoFactorLoginViewModel @Inject constructor(
.map { TwoFactorLoginAction.Internal.ReceiveWebAuthResult(webAuthResult = it) }
.onEach(::sendAction)
.launchIn(viewModelScope)
+
+ viewModelScope.launch {
+ // If the auth method is email and it is not to verify the device, call resendEmail.
+ if (state.authMethod == TwoFactorAuthMethod.EMAIL && !state.isNewDeviceVerification) {
+ sendAction(TwoFactorLoginAction.Internal.SendVerificationCodeEmail)
+ }
+ }
}
override fun handleAction(action: TwoFactorLoginAction) {
@@ -159,6 +166,10 @@ class TwoFactorLoginViewModel @Inject constructor(
is TwoFactorLoginAction.Internal.ReceiveResendEmailResult -> {
handleReceiveResendEmailResult(action)
}
+
+ TwoFactorLoginAction.Internal.SendVerificationCodeEmail -> {
+ handleSendVerificationCodeEmail()
+ }
}
}
@@ -476,6 +487,20 @@ class TwoFactorLoginViewModel @Inject constructor(
* Resend the verification code email.
*/
private fun handleResendEmailClick() {
+ sendVerificationCodeEmail(isUserInitiated = true)
+ }
+
+ /**
+ * send the verification code email without user interaction.
+ */
+ private fun handleSendVerificationCodeEmail() {
+ sendVerificationCodeEmail(isUserInitiated = false)
+ }
+
+ /**
+ * Send the verification code email.
+ */
+ private fun sendVerificationCodeEmail(isUserInitiated: Boolean) {
// Ensure that the user is in fact verifying with email.
if (state.authMethod != TwoFactorAuthMethod.EMAIL) {
return
@@ -500,7 +525,7 @@ class TwoFactorLoginViewModel @Inject constructor(
sendAction(
TwoFactorLoginAction.Internal.ReceiveResendEmailResult(
resendEmailResult = result,
- isUserInitiated = true,
+ isUserInitiated = isUserInitiated,
),
)
}
@@ -821,5 +846,10 @@ sealed class TwoFactorLoginAction {
data class ReceiveWebAuthResult(
val webAuthResult: WebAuthResult,
) : Internal()
+
+ /**
+ * Indicates that the verification code email should be sent.
+ */
+ data object SendVerificationCodeEmail : Internal()
}
}
diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/exportvault/ExportVaultViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/exportvault/ExportVaultViewModel.kt
index 3420d5fc26..b5c192eedc 100644
--- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/exportvault/ExportVaultViewModel.kt
+++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/exportvault/ExportVaultViewModel.kt
@@ -9,6 +9,7 @@ import com.bitwarden.network.model.PolicyTypeJson
import com.bitwarden.ui.platform.base.BaseViewModel
import com.bitwarden.ui.util.Text
import com.bitwarden.ui.util.asText
+import com.bitwarden.vault.CipherType
import com.x8bit.bitwarden.R
import com.x8bit.bitwarden.data.auth.datasource.sdk.model.PasswordStrength
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
@@ -16,7 +17,9 @@ import com.x8bit.bitwarden.data.auth.repository.model.PasswordStrengthResult
import com.x8bit.bitwarden.data.auth.repository.model.RequestOtpResult
import com.x8bit.bitwarden.data.auth.repository.model.ValidatePasswordResult
import com.x8bit.bitwarden.data.auth.repository.model.VerifyOtpResult
+import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager
import com.x8bit.bitwarden.data.platform.manager.PolicyManager
+import com.x8bit.bitwarden.data.platform.manager.model.FlagKey
import com.x8bit.bitwarden.data.vault.manager.FileManager
import com.x8bit.bitwarden.data.vault.repository.VaultRepository
import com.x8bit.bitwarden.data.vault.repository.model.ExportVaultDataResult
@@ -41,15 +44,16 @@ private const val KEY_STATE = "state"
/**
* Manages application state for the Export Vault screen.
*/
-@Suppress("TooManyFunctions")
+@Suppress("TooManyFunctions", "LongParameterList")
@HiltViewModel
class ExportVaultViewModel @Inject constructor(
private val authRepository: AuthRepository,
- policyManager: PolicyManager,
+ private val policyManager: PolicyManager,
savedStateHandle: SavedStateHandle,
private val vaultRepository: VaultRepository,
private val fileManager: FileManager,
private val clock: Clock,
+ private val featureFlagManager: FeatureFlagManager,
) : BaseViewModel(
initialState = savedStateHandle[KEY_STATE]
?: ExportVaultState(
@@ -433,6 +437,7 @@ class ExportVaultViewModel @Inject constructor(
state.passwordInput
},
),
+ restrictedTypes = getRestrictedItemTypes(),
)
sendAction(
@@ -454,6 +459,22 @@ class ExportVaultViewModel @Inject constructor(
)
}
}
+
+ private fun getRestrictedItemTypes(): List {
+ val isRemoveCardPolicyFeatureEnabled =
+ featureFlagManager.getFeatureFlag(FlagKey.RemoveCardPolicy)
+ if (!isRemoveCardPolicyFeatureEnabled) {
+ return emptyList()
+ }
+
+ val hasActiveRestrictItemTypesPolicy =
+ policyManager.getActivePolicies(type = PolicyTypeJson.RESTRICT_ITEM_TYPES).isNotEmpty()
+ if (!hasActiveRestrictItemTypesPolicy) {
+ return emptyList()
+ }
+
+ return listOf(CipherType.CARD)
+ }
}
/**
diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModel.kt
index 51124c5ee0..ffafb95ccd 100644
--- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModel.kt
+++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModel.kt
@@ -120,7 +120,6 @@ class VaultItemViewModel @Inject constructor(
TotpCodeItemData(
periodSeconds = it.periodSeconds,
timeLeftSeconds = it.timeLeftSeconds,
- totpCode = it.totpCode,
verificationCode = it.code,
)
}
diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/model/TotpCodeItemData.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/model/TotpCodeItemData.kt
index 5bc6cebef7..63f01dc876 100644
--- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/model/TotpCodeItemData.kt
+++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/model/TotpCodeItemData.kt
@@ -9,12 +9,10 @@ import kotlinx.parcelize.Parcelize
* @property periodSeconds The period for the verification code.
* @property timeLeftSeconds The time left for the verification timer.
* @property verificationCode The verification code for the item.
- * @property totpCode The totp code for the item.
*/
@Parcelize
data class TotpCodeItemData(
val periodSeconds: Int,
val timeLeftSeconds: Int,
val verificationCode: String,
- val totpCode: String,
) : Parcelable
diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml
index a69d040178..ffa550912c 100644
--- a/app/src/main/res/values-af-rZA/strings.xml
+++ b/app/src/main/res/values-af-rZA/strings.xml
@@ -170,7 +170,7 @@
Waarmerktoep
Voer die 6-syferbevestigingskode van u waarmerktoep in.
Voer die 6-syferbevestigingskode in wat aan %1$s gestuur is.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
Terugstelkode
Remember
Remember email
diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml
index d9f2e8313c..7c18e66d4e 100644
--- a/app/src/main/res/values-ar-rSA/strings.xml
+++ b/app/src/main/res/values-ar-rSA/strings.xml
@@ -170,7 +170,7 @@
تطبيق المُصادَقة
أدخل رمز التحقق من 6 أرقام من تطبيق المصادقة الخاص بك.
أدخل رمز التحقق المكون من 6 أرقام الذي تم ارساله إلى %1$s.
- نحن لا نعرف هذا الجهاز. أدخل رمز التحقق المكون من 8 أرقام الذي تم مراسلته بالبريد الإلكتروني إلى %1$s.
+ نحن لا نعرف هذا الجهاز. أدخل رمز التحقق المكون من 8 أرقام الذي تم مراسلته بالبريد الإلكتروني إلى [%1$s].
رمز الاسترداد
تذكر
تذكر البريد الإلكتروني
diff --git a/app/src/main/res/values-az-rAZ/strings.xml b/app/src/main/res/values-az-rAZ/strings.xml
index 0ccdbdfe04..e91f9dd404 100644
--- a/app/src/main/res/values-az-rAZ/strings.xml
+++ b/app/src/main/res/values-az-rAZ/strings.xml
@@ -170,7 +170,7 @@
Kimlik doğrulayıcı tətbiqi
Kimlik doğrulayıcı tətbiqindən 6 rəqəmli doğrulama kodunu daxil edin.
%1$s ünvanına göndərilən e-poçtdakı 6 rəqəmli doğrulama kodunu daxil edin.
- Bu cihazı tanımırıq. %1$s ünvanına göndərilən 8 rəqəmli doğrulama kodunu daxil edin.
+ Bu cihazı tanımırıq. [%1$s] ünvanına göndərilən 8 rəqəmli doğrulama kodunu daxil edin.
Bərpa kodu
Xatırla
E-poçtu xatırla
diff --git a/app/src/main/res/values-be-rBY/strings.xml b/app/src/main/res/values-be-rBY/strings.xml
index 0a17011054..e3ac55d8ba 100644
--- a/app/src/main/res/values-be-rBY/strings.xml
+++ b/app/src/main/res/values-be-rBY/strings.xml
@@ -170,7 +170,7 @@
Праграма аўтэнтыфікацыі
Увядзіце 6 лічбаў праверачнага кода з вашай праграмы аўтэнтыфікацыі.
Увядзіце 6 лічбаў праверачнага кода, які быў адпраўлены на %1$s.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
Код аднаўлення
Remember
Remember email
diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml
index ca721cbcb1..5d268ab68e 100644
--- a/app/src/main/res/values-bg-rBG/strings.xml
+++ b/app/src/main/res/values-bg-rBG/strings.xml
@@ -170,7 +170,7 @@
Приложение за удостоверяване
Въведете шестцифрения код за потвърждение от приложението за удостоверяване.
Въведете шестцифрения код за потвърждение, който е бил изпратен на %1$s.
- Това устройство е непознато. Въведете 8-цифрения код за потвърждаване, който беше изпратен на %1$s.
+ Това устройство е непознато. Въведете 8-цифрения код за потвърждаване, който беше изпратен на [%1$s].
Код за възстановяване
Запомняне
Запомняне на е-пощата
diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml
index 1be1bf711d..6e449d4613 100644
--- a/app/src/main/res/values-bn-rBD/strings.xml
+++ b/app/src/main/res/values-bn-rBD/strings.xml
@@ -170,7 +170,7 @@
Authenticator app
Enter the 6 digit verification code from your authenticator app.
Enter the 6 digit verification code that was emailed to %1$s.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
পুনরুদ্ধার কোড
Remember
Remember email
diff --git a/app/src/main/res/values-bs-rBA/strings.xml b/app/src/main/res/values-bs-rBA/strings.xml
index e018a944c0..14875a6f29 100644
--- a/app/src/main/res/values-bs-rBA/strings.xml
+++ b/app/src/main/res/values-bs-rBA/strings.xml
@@ -170,7 +170,7 @@
Aplikacije za potvrdu autentičnosti
Unesite 6-ocifreni verifikacioni kod iz Vaše aplikacije za potvrdu autentičnosti.
Unesite 6-ocifreni verifikacioni kod koji je e-poštom poslan na %1$s.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
Kod za oporavak
Remember
Remember email
diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml
index 245bd4134a..5adf40717e 100644
--- a/app/src/main/res/values-ca-rES/strings.xml
+++ b/app/src/main/res/values-ca-rES/strings.xml
@@ -170,7 +170,7 @@
Aplicació autenticadora
Introduïu el codi de verificació de 6 dígits de l\'aplicació autenticadora.
Introduïu el codi de verificació de 6 dígits que s\'ha enviat per correu electrònic a %1$s.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
Codi de recuperació
Recorda-ho
Recorda el correu electronic
diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml
index 7e659aae94..afe008605e 100644
--- a/app/src/main/res/values-cs-rCZ/strings.xml
+++ b/app/src/main/res/values-cs-rCZ/strings.xml
@@ -170,7 +170,7 @@
Ověřovací aplikace
Zadejte 6místný kód z ověřovací aplikace.
Zadejte 6místný kód z e-mailu, který byl zaslán na %1$s.
- Toto zařízení nelze rozpoznat. Zadejte osmimístný ověřovací kód, který byl zaslán e-mailem na %1$s.
+ Toto zařízení nepoznáváme. Zadejte kód zaslaný na Váš e-mail pro ověření Vaší totožnosti.
Kód pro obnovení
Zapamatovat
Pamatovat si e-mail
diff --git a/app/src/main/res/values-cy-rGB/strings.xml b/app/src/main/res/values-cy-rGB/strings.xml
index ae1a1548e6..651cf49785 100644
--- a/app/src/main/res/values-cy-rGB/strings.xml
+++ b/app/src/main/res/values-cy-rGB/strings.xml
@@ -170,7 +170,7 @@
Ap dilysu
Rhowch y cod dilysu 6 nod o\'ch ap dilysu.
Rhowch y cod dilysu 6 nod anfonwyd i %1$s.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
Cod adfer
Remember
Remember email
diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml
index 02a37e5238..9ec53b9901 100644
--- a/app/src/main/res/values-da-rDK/strings.xml
+++ b/app/src/main/res/values-da-rDK/strings.xml
@@ -170,7 +170,7 @@
Godkender-app
Angiv den 6-cifrede bekræftelseskode fra godkender-appen.
Angiv den 6-cifrede bekræftelseskode e-mailet til %1$s.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
Gendannelseskode
Husk
Husk e-mail
diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml
index 60a642118a..5c84871fb4 100644
--- a/app/src/main/res/values-de-rDE/strings.xml
+++ b/app/src/main/res/values-de-rDE/strings.xml
@@ -170,7 +170,7 @@
Authenticator App
Gib den 6-stelligen Verifizierungscode aus deiner Authenticator App ein.
Gib den 6-stelligen Bestätigungscode ein, der an %1$s gesendet wurde.
- Wir erkennen dieses Gerät nicht. Gib den 8-stelligen Verifizierungscode ein, der an %1$s gesendet wurde.
+ Wir erkennen dieses Gerät nicht. Gib den 8-stelligen Verifizierungscode ein, der an [%1$s] gesendet wurde.
Wiederherstellungscode
Merken
E-Mail-Adresse merken
diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml
index b20747f05c..a1aaf45dee 100644
--- a/app/src/main/res/values-el-rGR/strings.xml
+++ b/app/src/main/res/values-el-rGR/strings.xml
@@ -170,7 +170,7 @@
Εφαρμογή αυθεντικοποίησης
Εισάγετε τον 6ψήφιο κωδικό από την εφαρμογή επαλήθευσης.
Εισαγωγή 6ψήφιου κωδικού επαλήθευσης που σταλθηκε με μήνυμα στο %1$s.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
Κωδικός ανάκτησης
Απομνημόνευση
Απομνημόνευση email
diff --git a/app/src/main/res/values-en-rGB/strings.xml b/app/src/main/res/values-en-rGB/strings.xml
index 12375eb3d0..8c85af8fe3 100644
--- a/app/src/main/res/values-en-rGB/strings.xml
+++ b/app/src/main/res/values-en-rGB/strings.xml
@@ -170,7 +170,7 @@
Authenticator app
Enter the 6 digit verification code from your authenticator app.
Enter the 6 digit verification code that was emailed to %1$s.
- We don\'t recognise this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognise this device. Enter the 8 digit verification code that was emailed to [%1$s].
Recovery code
Remember
Remember email
diff --git a/app/src/main/res/values-en-rIN/strings.xml b/app/src/main/res/values-en-rIN/strings.xml
index 82f6a44fca..14a16266d8 100644
--- a/app/src/main/res/values-en-rIN/strings.xml
+++ b/app/src/main/res/values-en-rIN/strings.xml
@@ -170,7 +170,7 @@
Authenticator app
Enter the 6 digit verification code from your authenticator app.
Enter the 6 digit verification code that was emailed to %1$s.
- We don\'t recognise this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognise this device. Enter the 8 digit verification code that was emailed to [%1$s].
Recovery code
Remember
Remember email
diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml
index bf16e2a9f8..d7023583f4 100644
--- a/app/src/main/res/values-es-rES/strings.xml
+++ b/app/src/main/res/values-es-rES/strings.xml
@@ -170,7 +170,7 @@
Aplicación de autenticación
Introduce el código de verificación de 6 dígitos de tu aplicación autenticadora.
Introduce el código de verificación de 6 dígitos que ha sido enviado por correo a %1$s.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
Código de recuperación
Recordar
Recordar correo electrónico
diff --git a/app/src/main/res/values-et-rEE/strings.xml b/app/src/main/res/values-et-rEE/strings.xml
index 42287d55b7..20e67ada39 100644
--- a/app/src/main/res/values-et-rEE/strings.xml
+++ b/app/src/main/res/values-et-rEE/strings.xml
@@ -170,7 +170,7 @@
Autentimise rakendus
Sisesta autentimise rakendusest 6 kohaline number.
Sisesta 6 kohaline number, mis saadeti e-posti aadressile %1$s.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
Taastamise kood
Remember
Remember email
diff --git a/app/src/main/res/values-eu-rES/strings.xml b/app/src/main/res/values-eu-rES/strings.xml
index 5d3846e24b..b57c7f248f 100644
--- a/app/src/main/res/values-eu-rES/strings.xml
+++ b/app/src/main/res/values-eu-rES/strings.xml
@@ -170,7 +170,7 @@
Autentifikazio aplikazioa
Sartu zure autentifikazio aplikazioaren 6 digituko egiaztatze-kodea.
Sartu %1$s-era bidalitako 6 digituko egiaztatze-kodea.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
Berreskuratze-kodea
Remember
Remember email
diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml
index cf9e78740a..b8ac815040 100644
--- a/app/src/main/res/values-fa-rIR/strings.xml
+++ b/app/src/main/res/values-fa-rIR/strings.xml
@@ -170,7 +170,7 @@
برنامه احراز هویت
کد ۶ رقمی تأیید را از برنامه احراز هویت وارد کنید.
کد ۶ رقمی تأیید را که به %1$s ایمیل شده را وارد کنید.
- ما این دستگاه را نمیشناسیم. کد تأیید 8 رقمی را که به %1$s ایمیل شده است، وارد کنید.
+ ما این دستگاه را نمیشناسیم. کد تأیید 8 رقمی را که به [%1$s] ایمیل شده است، وارد کنید.
کد بازیابی
به خاطر بسپار
ایمیل را به خاطر بسپار
diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml
index 7c102ba745..c48bb82d01 100644
--- a/app/src/main/res/values-fi-rFI/strings.xml
+++ b/app/src/main/res/values-fi-rFI/strings.xml
@@ -170,7 +170,7 @@
Todennussovellus
Syötä todennussovelluksesi näyttämä kuusinumeroinen todennuskoodi.
Syötä osoitteeseen %1$s lähetetty kuusinumeroinen todennuskoodi.
- Laitetta ei tunnisteta. Syötä osoitteeseen %1$s lähetetty kahdeksan numeroinen vahvistuskoodi.
+ Laitetta ei tunnisteta. Syötä osoitteeseen [%1$s] lähetetty kahdeksan numeroinen vahvistuskoodi.
Palautuskoodi
Muista
Muista sähköpostiosoite
diff --git a/app/src/main/res/values-fil-rPH/strings.xml b/app/src/main/res/values-fil-rPH/strings.xml
index dca271d89e..252cd60823 100644
--- a/app/src/main/res/values-fil-rPH/strings.xml
+++ b/app/src/main/res/values-fil-rPH/strings.xml
@@ -170,7 +170,7 @@
Authenticator app
Ilagay ang 6 na numerong code pamberipika mula sa authenticator app mo.
Ilagay ang 6 na numerong code pamberipikang in-email sa %1$s.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
Code pang-recover
Remember
Remember email
diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml
index b1e88404ab..5b9fdd5591 100644
--- a/app/src/main/res/values-fr-rFR/strings.xml
+++ b/app/src/main/res/values-fr-rFR/strings.xml
@@ -170,7 +170,7 @@
Application d\'authentification
Saisissez le code de vérification à 6 chiffres depuis votre application d\'authentification.
Saisissez le code de vérification à 6 chiffres qui a été envoyé par courriel à %1$s.
- Nous ne reconnaissons pas cet appareil. Entrez le code de vérification à 8 chiffres qui a été envoyé à %1$s.
+ Nous ne reconnaissons pas cet appareil. Entrez le code de vérification à 8 chiffres qui a été envoyé à [%1$s].
Code de récupération
Remember
Se souvenir de l\'e-mail
@@ -567,7 +567,7 @@ sélectionnez « Ajouter un TOTP » pour stocker la clé en toute sécurité
Courriel (requis)
domain name
Nom de domaine (requis)
- API key
+ Clé API
Clé API (requise)
Service
addy.io
@@ -576,7 +576,7 @@ sélectionnez « Ajouter un TOTP » pour stocker la clé en toute sécurité
DuckDuckGo
Fastmail
ForwardEmail
- API access token (required)
+ Jeton d’accès API (requis)
Jeton d\'accès API
Êtes-vous sûr(e) de vouloir remplacer le nom d\'utilisateur actuel ?
Générer un nom d\'utilisateur
diff --git a/app/src/main/res/values-gl-rES/strings.xml b/app/src/main/res/values-gl-rES/strings.xml
index c25dc1093a..2624581374 100644
--- a/app/src/main/res/values-gl-rES/strings.xml
+++ b/app/src/main/res/values-gl-rES/strings.xml
@@ -170,7 +170,7 @@
Aplicación de autenticación
Insire o código de 6 díxitos da túa aplicación de autenticación.
Insire o código de verificación de 6 díxitos enviado a %1$s.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
Código de recuperación
Lembrar
Lembrar correo
diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml
index fd7747c828..e2ff501730 100644
--- a/app/src/main/res/values-hi-rIN/strings.xml
+++ b/app/src/main/res/values-hi-rIN/strings.xml
@@ -170,7 +170,7 @@
ऑथेंटिकेटर ऐप
अपने ऑथेंटिकेटर ऐप से वेरिफिकेशन कोड डालें।
%1$s को ईमेल किया गया वेरिफिकेशन कोड डालें।
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
रिकवरी कोड
Remember
Remember email
diff --git a/app/src/main/res/values-hr-rHR/strings.xml b/app/src/main/res/values-hr-rHR/strings.xml
index 0f59091287..0ed4325b2e 100644
--- a/app/src/main/res/values-hr-rHR/strings.xml
+++ b/app/src/main/res/values-hr-rHR/strings.xml
@@ -170,7 +170,7 @@
Autentifikatorska aplikacija
Unesi 6-znamenkasti kôd za provjeru iz autentifikatorske aplikacije.
Unesi 6-znamenkasti kôd za provjeru poslan e-poštom na %1$s
- Ne prepoznajemo ovaj uređaj. Unesi 8-znamenkasti kôd za provjeru poslan e-poštom na %1$s.
+ Ne prepoznajemo ovaj uređaj. Unesi 8-znamenkasti kôd za provjeru poslan e-poštom na [%1$s].
Kôd za oporavak
Zapamti
Zapamti adresu e-pošte
diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml
index 63898438ec..dae1c9e174 100644
--- a/app/src/main/res/values-hu-rHU/strings.xml
+++ b/app/src/main/res/values-hu-rHU/strings.xml
@@ -170,7 +170,7 @@
Hitelesítő alkalmazás
Add meg a 6 számjegyű ellenőrző kódot a hitelesítő alkalmazásodból.
6 számjegyű ellenőrző kód megadása, ami %1$s e-mail címre lett küldve.
- Nem ismerhető fel ez az eszköz. Írjuk be a 8 számjegyű ellenőrző kódot, amelyet emailben lett elküldve %1$s email címre.
+ Nem ismerhető fel ez az eszköz. Írjuk be a 8 számjegyű ellenőrző kódot, amelyet emailben lett elküldve [%1$s] email címre.
Helyreállító kód
Megjegyzés
Email cím megjegyzése
diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml
index d1d407beb4..1f4701c600 100644
--- a/app/src/main/res/values-in-rID/strings.xml
+++ b/app/src/main/res/values-in-rID/strings.xml
@@ -170,7 +170,7 @@
Aplikasi Autentikasi
Masukkan 6 digit kode verifikasi dari aplikasi autentikasi Anda.
Masukkan 6 digit kode verifikasi yang dikirim melalui email ke %1$s.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
Kode Pemulihan
Remember
Remember email
diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml
index 8a0e4f5481..c324722cb9 100644
--- a/app/src/main/res/values-it-rIT/strings.xml
+++ b/app/src/main/res/values-it-rIT/strings.xml
@@ -170,7 +170,7 @@
App di autenticazione
Inserisci il codice di verifica a 6 cifre dell\'app di autenticazione
Inserisci il codice di verifica a 6 cifre inviato a %1$s
- Dispositivo non riconosciuto. Inserisci il codice di verifica a 8 cifre inviato a %1$s.
+ Dispositivo non riconosciuto. Inserisci il codice di verifica a 8 cifre inviato a [%1$s].
Codice di recupero
Ricorda
Ricorda l\'indirizzo email
@@ -356,117 +356,117 @@ La scansione è automatica.
Cancellazione automatica degli appunti
Cancella automaticamente i valori copiati negli appunti dopo un determinato periodo di tempo
Metodo di corrispondenza degli URL predefinito
- Scegli il modo predefinito in cui il rilevamento della corrispondenza URI è gestito per i login quando si eseguono azioni come il riempimento automatico.
+ Scegli il metodo predefinito con cui viene rilevata la corrispondenza tra l\'URL di un sito web e quello salvato in un login
Tema
- Cambia il tema dell\'app.
+ Cambia il tema dell\'applicazione
Copia le note
Chiudi
Vuoi davvero chiudere Bitwarden?
- Richiedi la password principale al riavvio dell\'app?
+ Richiedi la password principale dopo il riavvio
Vuoi richiedere lo sblocco con la password principale quando l\'app viene riavviata?
- Chiedi di aggiungere nuovi login
- Chiedi di aggiungere un nuovo elemento se non ce n\'è uno nella tua cassaforte.
- Al riavvio dell\'app
+ Proposta per nuovi login
+ Proponi di aggiungere un login quando non è presente nella cassaforte
+ Dopo il riavvio dell\'app
Iniziale maiuscola
- Include un numero
+ Numero casuale
Scarica
- La tua sessione è scaduta.
+ Sessione scaduta
Autenticazione biometrica
Biometria
Autenticazione biometrica fallita
- Effettua l\'accesso con la tua parola d\'accesso principale o il PIN e riabilita l\'accesso biometrico nelle impostazioni.
+ Effettua l\'accesso con la password principale o il codice PIN. Puoi riabilitare l\'autenticazione biometrica nelle impostazioni.
Sblocca con la biometria
- Formato file
- Inserisci la tua password principale per esportare i dati della tua cassaforte.
- Invia un codice di verifica alla tua email
- Codice inviato!
- Conferma la tua identità per continuare.
- Questa esportazione contiene i dati della tua cassaforte in un formato non crittografato. Non salvare o inviare il file esportato attraverso canali non protetti (come le email). Eliminalo immediatamente dopo l\'utilizzo.
- Questo file esportato sarà protetto e richiederà la password del file per decifrarlo.
- Conferma l\'esportazione della cassaforte
+ Formato del file
+ Inserisci la password principale dell\'account Bitwarden
+ Invia un codice di verifica all\'indirizzo email
+ Codice inviato
+ Conferma la tua identità per continuare
+ Questa esportazione contiene i dati della cassaforte in un formato non crittografato. Non salvare, inviare o condividere il file esportato tramite mezzi non protetti (come le email). Elimina il file il prima possibile.
+ Questa esportazione contiene i dati della cassaforte in un formato crittografato. Sarà necessario inserire la password del file per decrittografarlo.
+ Esporta la cassaforte
Avviso
- Si è verificato un problema esportando la tua cassaforte. Se il problema persiste, esportala dalla cassaforte web.
+ Esportazione della cassaforte non riuscita. Prova a esportare la cassaforte dall\'app web.
Cassaforte esportata
Copia
- Una o più politiche dell\'organizzazione stanno influenzando le impostazioni del tuo generatore
- Si è verificato un problema salvando questo allegato. Se il problema persiste, prova a salvarlo dalla cassaforte web.
+ Il generatore di password è limitato dalle politiche dell\'organizzazione
+ Salvataggio dell\'allegato non riuscito. Prova a salvare l\'allegato dall\'app web.
Allegato salvato
- Abilita il \"Servizio di accessibilità per il riempimento automatico\" dalle impostazioni di Bitwarden per usare il pop-up di riempimento automatico.
+ Abilita il servizio di accessibilità per il riempimento automatico dalle impostazioni di Bitwarden per usare il popup di riempimento automatico
Nessun campo password rilevato
- Eliminazione in corso...
+ Eliminazione in corso
Elemento eliminato
Ripristina
- Ripristino in corso...
+ Ripristino in corso
Elemento ripristinato
Cestino
- Vuoi davvero eliminare definitivamente questo elemento? L\'azione non può essere annullata.
+ Vuoi davvero eliminare definitivamente questo elemento? Questa azione non può essere annullata.
Vuoi davvero ripristinare questo elemento?
Vuoi davvero eliminare questo elemento?
- Sblocco biometrico per questo account disabilitato in attesa della verifica della password principale.
+ Sblocco biometrico bloccato. Conferma della password principale necessaria.
Gesto di sincronizzazione
- Sincronizza la cassaforte trascinando verso il basso.
+ Sincronizza la cassaforte quando scorri verso il basso.
Single Sign-On aziendale
- Effettua l\'accesso velocemente con il portale di accesso (SSO) della tua organizzazione. Inserisci l\'identificativo dell\'organizzazione per iniziare.
+ Effettua l\'accesso velocemente con il portale di accesso SSO dell\'organizzazione. Inserisci l\'identificativo dell\'organizzazione per iniziare.
Identificativo dell\'organizzazione
- Al momento è impossibile effettuare l\'accesso con SSO
- Imposta password principale
- Una o più politiche dell\'organizzazione richiedono che la tua password principale soddisfi questi requisiti:
+ Accesso con SSO non riuscito
+ Imposta la password principale
+ Le politiche dell\'organizzazione richiedono che la password principale soddisfi questi requisiti:
Punteggio minimo di complessità: %1$s
- Lunghezza minima di %1$s
+ Lunghezza minima: %1$s
Contiene almeno un carattere maiuscolo
Contiene almeno un carattere minuscolo
- Contiene uno o più numeri
+ Contiene almeno un numero
Contiene almeno uno dei seguenti caratteri speciali: %1$s
- Inserisci una password valida
- La password non soddisfa i requisiti dell\'organizzazione. Controlla i criteri password dell\'organizzazione e riprova.
- Caricamento in corso...
+ Password non valida
+ La password non soddisfa i requisiti dell\'organizzazione. Controlla i requisiti e prova con un\'altra password.
+ Caricamento in corso
Accetta i Termini di Servizio e l\'Informativa sulla Privacy
Termini di Servizio
Informativa sulla Privacy
Gestione delle passkey
Servizi di riempimento automatico
- Suggerimenti riempimento automatico
+ Suggerimenti per il riempimento automatico
In linea (incluso nella tastiera)
Popup (sopra il campo da compilare)
Usa il servizio di accessibilità
Necessario per usare il riquadro di azione rapida di riempimento automatico.
- Una politica dell\'organizzazione sta influenzando le tue opzioni di proprietà.
+ Le opzioni di proprietà sono limitate dalle politiche dell\'organizzazione
Send
- Invia dettagli
+ Dettagli del Send
Tutti i Send
Testo
- Testo da condividere
+ Testo condiviso
Testo
Nascondi il testo per impostazione predefinita
File
Eliminazione programmata
Orario
- Il Send sarà eliminato definitivamente nella data e all\'ora specificate.
- In attesa di eliminazione
+ Il Send verrà eliminato definitivamente dopo il periodo di tempo specificato
+ Eliminazione in attesa
Scaduto
Scade alle %s
Scade domani
Scade il %s
- Ferma il tracciamento su %1$s a %2$s
- Numero massimo di accessi
- Il numero di accessi complessivi consentiti al Send.
- Numero massimo di accessi raggiunto
- Numero di accessi attuali
- Password aggiuntiva
- La password per accedere al Send (facoltativa).
+ Ferma il tracciamento il %1$s alle %2$s
+ Limite di accessi
+ Il Send verrà disabilitato al superamento del limite di accessi specificati (opzionale)
+ Limite di accessi raggiunto
+ Numero di accessi attuali: %s
+ Password del Send
+ Imposta la password necessaria per accedere al Send (opzionale)
Rimuovi la password
- Rimozione della password in corso...
+ Rimozione della password in corso
Password rimossa
- Aggiungi un Send
+ Crea un Send
Copia il link
- Condividi link
+ Condividi il link
Link del Send
- Cerca Send
+ Cerca nei Send
Modifica il Send
- Modifica file Send
- Modifica testo Send
- Nuovo file Send
- Nuovo testo Send
+ Modifica il file Send
+ Modifica il testo Send
+ Crea un file Send
+ Crea un testo Send
Vuoi davvero eliminare questo Send?
Send eliminato
Send aggiornato
diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml
index 54170a69ef..448c7c2634 100644
--- a/app/src/main/res/values-iw-rIL/strings.xml
+++ b/app/src/main/res/values-iw-rIL/strings.xml
@@ -170,7 +170,7 @@
יישום מאמת
הזן את קוד האימות בן 6 הספרות מהיישום המאמת שלך.
הזן את קוד האימות בן 6 הספרות שנשלח בדוא\"ל אל %1$s.
- אנחנו לא מזהים את המכשיר הזה. הזן את קוד האימות בן 8 הספרות שנשלח בדוא\"ל אל %1$s.
+ אנחנו לא מזהים את המכשיר הזה. הזן את קוד האימות בן 8 הספרות שנשלח בדוא\"ל אל [%1$s].
קוד שחזור
זכור
זכור דוא\"ל
diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml
index a1d641d6da..0049a8cb10 100644
--- a/app/src/main/res/values-ja-rJP/strings.xml
+++ b/app/src/main/res/values-ja-rJP/strings.xml
@@ -170,7 +170,7 @@
認証アプリ
認証アプリに表示された6桁の認証コードを入力してください。
%1$s に送信された6桁の認証コードを入力してください。
- このデバイスは未確認です。本人確認のため、 %1$s に送信されたメールに書かれている 8 桁の認証コードを入力してください。
+ このデバイスは未確認です。本人確認のため、 [%1$s] に送信されたメールに書かれている 8 桁の認証コードを入力してください。
リカバリーコード
ログイン状態を記憶
メールアドレスを記録
diff --git a/app/src/main/res/values-ka-rGE/strings.xml b/app/src/main/res/values-ka-rGE/strings.xml
index 11f5cc8a41..4c24394b8a 100644
--- a/app/src/main/res/values-ka-rGE/strings.xml
+++ b/app/src/main/res/values-ka-rGE/strings.xml
@@ -170,7 +170,7 @@
Authenticator app
Enter the 6 digit verification code from your authenticator app.
Enter the 6 digit verification code that was emailed to %1$s.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
Recovery code
Remember
Remember email
diff --git a/app/src/main/res/values-kn-rIN/strings.xml b/app/src/main/res/values-kn-rIN/strings.xml
index 4768d58f44..c17f0c09fc 100644
--- a/app/src/main/res/values-kn-rIN/strings.xml
+++ b/app/src/main/res/values-kn-rIN/strings.xml
@@ -170,7 +170,7 @@
ದೃಢೀಕರಣ ಅಪ್ಲಿಕೇಶನ್
ನಿಮ್ಮ ದೃಢೀಕರಣ ಅಪ್ಲಿಕೇಶನ್ನಿಂದ 6 ಅಂಕಿಯ ಪರಿಶೀಲನಾ ಕೋಡ್ ಅನ್ನು ನಮೂದಿಸಿ.
%1$s ಇಮೇಲ್ ಮಾಡಲಾದ 6 ಅಂಕಿಯ ಪರಿಶೀಲನಾ ಕೋಡ್ ಅನ್ನು ನಮೂದಿಸಿ.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
ಮರುಪಡೆಯುವಿಕೆ ಕೋಡ್
Remember
Remember email
diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml
index 63e1f008a3..2e0d752291 100644
--- a/app/src/main/res/values-ko-rKR/strings.xml
+++ b/app/src/main/res/values-ko-rKR/strings.xml
@@ -170,7 +170,7 @@
인증 앱
인증 앱에서 6자리 인증 코드를 입력하세요.
%1$s 주소로 전송된 6자리 인증 코드를 입력하세요.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
복구 코드
Remember
Remember email
diff --git a/app/src/main/res/values-lt-rLT/strings.xml b/app/src/main/res/values-lt-rLT/strings.xml
index 9f41728d48..a736d6b02c 100644
--- a/app/src/main/res/values-lt-rLT/strings.xml
+++ b/app/src/main/res/values-lt-rLT/strings.xml
@@ -170,7 +170,7 @@
Autentifikavimo programa
Įveskite 6 skaitmenų patvirtinimo kodą iš autentifikavimo programos.
Įveskite 6 skaitmenų patvirtinimo kodą, kuris buvo išsiųstas el. paštu %1$s.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
Atstatymo rėžimas
Remember
Remember email
diff --git a/app/src/main/res/values-lv-rLV/strings.xml b/app/src/main/res/values-lv-rLV/strings.xml
index 5ef24f8ecd..03b78062d1 100644
--- a/app/src/main/res/values-lv-rLV/strings.xml
+++ b/app/src/main/res/values-lv-rLV/strings.xml
@@ -170,7 +170,7 @@
Autentificētāja lietotne
Jāievada 6 ciparu apliecinājuma kods no autentificētāja lietotnes.
Jāievada 6 ciparu apliecinājuma kods, kas tika nosūtīts uz %1$s.
- Mēs neatpazīstam šo ierīci. Jāievada 8 ciparu apliecinājuma kods, kas tika nosūtīts %1$s.
+ Mēs neatpazīstam šo ierīci. Jāievada 8 ciparu apliecinājuma kods, kas tika nosūtīts [%1$s].
Atgūšanas kods
Atcerēties
Atcerēties e-pasta adresi
diff --git a/app/src/main/res/values-ml-rIN/strings.xml b/app/src/main/res/values-ml-rIN/strings.xml
index 96616fd873..e0dd29260c 100644
--- a/app/src/main/res/values-ml-rIN/strings.xml
+++ b/app/src/main/res/values-ml-rIN/strings.xml
@@ -170,7 +170,7 @@
ഓതന്റിക്കേറ്റർ ആപ്പ്
തങ്ങളുടെ ഓതന്റിക്കേറ്റർ അപ്ലിക്കേഷനിൽ നിന്ന് 6 അക്ക സ്ഥിരീകരണ കോഡ് നൽകുക.
%1$sൽ ഇമെയിൽ ചെയ്ത 6 അക്ക സ്ഥിരീകരണ കോഡ് നൽകുക.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
റിക്കവറി കോഡ്
Remember
Remember email
diff --git a/app/src/main/res/values-mr-rIN/strings.xml b/app/src/main/res/values-mr-rIN/strings.xml
index 549141fed9..a3a87390f0 100644
--- a/app/src/main/res/values-mr-rIN/strings.xml
+++ b/app/src/main/res/values-mr-rIN/strings.xml
@@ -170,7 +170,7 @@
Authenticator app
Enter the 6 digit verification code from your authenticator app.
Enter the 6 digit verification code that was emailed to %1$s.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
Recovery code
Remember
Remember email
diff --git a/app/src/main/res/values-my-rMM/strings.xml b/app/src/main/res/values-my-rMM/strings.xml
index 11f5cc8a41..4c24394b8a 100644
--- a/app/src/main/res/values-my-rMM/strings.xml
+++ b/app/src/main/res/values-my-rMM/strings.xml
@@ -170,7 +170,7 @@
Authenticator app
Enter the 6 digit verification code from your authenticator app.
Enter the 6 digit verification code that was emailed to %1$s.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
Recovery code
Remember
Remember email
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index 2376757f70..45fd326f77 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -170,7 +170,7 @@
Autentiseringsapp
Skriv inn den 6-sifrede verifiseringskoden som står på din autentiseringsapp.
Skriv inn den 6-sifrede verifiseringskoden som ble sendt til %1$s.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
Gjenopprettingskode
Husk
Husk e-postadressen
diff --git a/app/src/main/res/values-ne-rNP/strings.xml b/app/src/main/res/values-ne-rNP/strings.xml
index 11f5cc8a41..4c24394b8a 100644
--- a/app/src/main/res/values-ne-rNP/strings.xml
+++ b/app/src/main/res/values-ne-rNP/strings.xml
@@ -170,7 +170,7 @@
Authenticator app
Enter the 6 digit verification code from your authenticator app.
Enter the 6 digit verification code that was emailed to %1$s.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
Recovery code
Remember
Remember email
diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml
index e1f24d8d66..6c174629ec 100644
--- a/app/src/main/res/values-nl-rNL/strings.xml
+++ b/app/src/main/res/values-nl-rNL/strings.xml
@@ -170,7 +170,7 @@
Authenticatie-app
Voer de 6-cijferige verificatiecode uit je authenticatie-app in.
Voer de 6-cijferige verificatiecode in die via e-mail is verstuurd naar %1$s.
- We herkennen dit apparaat niet. Voer de 8-cijferige verificatiecode in die gemaild is naar %1$s.
+ We herkennen dit apparaat niet. Voer de 8-cijferige verificatiecode in die gemaild is naar [%1$s].
Herstelcode
Onthouden
E-mailadres onthouden
diff --git a/app/src/main/res/values-nn-rNO/strings.xml b/app/src/main/res/values-nn-rNO/strings.xml
index b0815a1931..2ca251be23 100644
--- a/app/src/main/res/values-nn-rNO/strings.xml
+++ b/app/src/main/res/values-nn-rNO/strings.xml
@@ -170,7 +170,7 @@
Authenticator app
Enter the 6 digit verification code from your authenticator app.
Enter the 6 digit verification code that was emailed to %1$s.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
Gjenopprettingskode
Remember
Remember email
diff --git a/app/src/main/res/values-or-rIN/strings.xml b/app/src/main/res/values-or-rIN/strings.xml
index 6648d7806f..76904eb0fa 100644
--- a/app/src/main/res/values-or-rIN/strings.xml
+++ b/app/src/main/res/values-or-rIN/strings.xml
@@ -170,7 +170,7 @@
Authenticator app
Enter the 6 digit verification code from your authenticator app.
Enter the 6 digit verification code that was emailed to %1$s.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
Recovery code
Remember
Remember email
diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml
index d7d2bc6643..44d5c52e3e 100644
--- a/app/src/main/res/values-pl-rPL/strings.xml
+++ b/app/src/main/res/values-pl-rPL/strings.xml
@@ -170,7 +170,7 @@
Aplikacja uwierzytelniająca
Wpisz 6-cyfrowy kod weryfikacyjny z aplikacji uwierzytelniającej.
Wpisz 6-cyfrowy kod weryfikacyjny wysłany na adres %1$s.
- Nie rozpoznajemy tego urządzenia. Wpisz 8-cyfrowy kod weryfikacyjny, który został wysłany na adres %1$s.
+ Nie rozpoznajemy tego urządzenia. Wpisz 8-cyfrowy kod weryfikacyjny, który został wysłany na adres [%1$s].
Kod odzyskiwania
Zapamiętaj
Zapamiętaj adres e-mail
@@ -496,10 +496,10 @@ Skanowanie nastąpi automatycznie.
Uwierzytelnianie WebAuthn
Wróć do aplikacji
Zasada organizacji umożliwia administratorom organizacji zmianę Twojego hasła głównego.
- Zasady organizacji mają wpływ na czas blokowania aplikacji. Maksymalny dozwolony czas wynosi %1$s godz. i %2$s min.
- Zasady organizacji mają wpływ na czas blokowania aplikacji. Maksymalny dozwolony czas wynosi %1$s godz. i %2$s min. Twój czas blokowania aplikacji to %3$s.
- Zasada organizacji wymusza czas blokowania aplikacji na %1$s.
- Czas blokowania aplikacji przekracza limit określony przez organizację.
+ Zasady organizacji mają wpływ na czas blokowania sejfu. Maksymalny dozwolony czas wynosi %1$s godz. i %2$s min.
+ Zasady organizacji mają wpływ na czas blokowania sejfu. Maksymalny dozwolony czas wynosi %1$s godz. i %2$s min. Twój czas blokowania sejfu to %3$s.
+ Zasady organizacji wymuszają sposób blokowania sejfu na %1$s.
+ Czas blokowania sejfu przekracza limit określony przez organizację.
Co najmniej jedna zasada organizacji uniemożliwia wyeksportowanie osobistego sejfu.
Dodaj konto
Odblokowane
@@ -678,7 +678,7 @@ Czy chcesz przełączyć się na to konto?
Bitwarden pozwala na udostępnianie zawartości sejfu innym użytkownikom za pośrednictwem organizacji. Dowiedz się więcej na stronie bitwarden.com.
Utworzono %1$s
Twoja organizacja wymaga ustawienia hasła głównego.
- Ustaw metodę odblokowania, aby zmienić czas blokowania aplikacji.
+ Ustaw opcje odblokowania, aby zmienić czas blokowania sejfu.
Zapisz klucz dostępu jako nowe dane logowania
Zastąpić klucz dostępu?
Element zawiera już klucz dostępu. Czy na pewno chcesz zastąpić obecny klucz dostępu?
@@ -689,7 +689,7 @@ Czy chcesz przełączyć się na to konto?
Klucze dostępu nie są obsługiwane dla tej aplikacji
Operacja klucza dostępu nie powiodła się, ponieważ przeglądarka nie jest dozwolona
Operacja klucza dostępu nie powiodła się, ponieważ podpis przeglądarki się nie zgadza
- Operacja klucza dostępu nie powiodła się, ponieważ brakuje połączeń zasobów
+ Operacja klucza dostępu nie powiodła się, ponieważ brakuje powiązań zasobów
Operacja klucza dostępu nie powiodła się, ponieważ aplikacja nie mogła zostać zweryfikowana
Potwierdź hasło pliku
Hasło pliku
@@ -706,7 +706,7 @@ Czy chcesz przełączyć się na to konto?
Utwórz konto na:
Wysłaliśmy wiadomość na adres %1$s.
Kontynuując, akceptujesz Regulamin i Politykę prywatności
- Aktywując, akceptujesz Regulamin i Politykę prywatności
+ Zaznaczając tę opcję, akceptujesz Regulamin i Politykę prywatności
Anuluj subskrypcję
Sprawdź swoją pocztę e-mail
Otwórz aplikację poczty e-mail
@@ -746,7 +746,7 @@ Czy chcesz przełączyć się na to konto?
Dowiedz się więcej o sposobach zapobiegania blokowaniu konta
Pomoc z geolokalizacjami serwera.
Adres e-mail (wymagane)
- "Kliknij link w wiadomości e-mail, aby zweryfikować adres e-mail i utworzyć konto."
+ "Kliknij link w wiadomości, aby zweryfikować adres e-mail i utworzyć konto."
Zmień adres e-mail
Dalej
Bitwarden nie może odzyskać utraconego hasła głównego.
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 44276d12ed..3f807eb347 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -170,7 +170,7 @@
Aplicativo de Autenticação
Digite o código de verificação de 6 dígitos do seu aplicativo de autenticação.
Digite o código de verificação de 6 dígitos que foi enviado por e-mail para %1$s.
- Não reconhecemos este dispositivo. Digite o código de verificação de 8 dígitos que foi enviado por e-mail para %1$s.
+ Não reconhecemos este dispositivo. Digite o código de verificação de 8 dígitos que foi enviado por e-mail para [%1$s].
Código de Recuperação
Lembrar
Lembrar e-mail
diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml
index c557251705..d7b30fb8b1 100644
--- a/app/src/main/res/values-pt-rPT/strings.xml
+++ b/app/src/main/res/values-pt-rPT/strings.xml
@@ -170,7 +170,7 @@
Aplicação de autenticação
Introduza o código de verificação de 6 dígitos da sua aplicação de autenticação.
Introduza o código de verificação de 6 dígitos que foi enviado por e-mail para %1$s.
- Não reconhecemos este dispositivo. Introduza o código de verificação de 8 dígitos que foi enviado por e-mail para %1$s.
+ Não reconhecemos este dispositivo. Introduza o código de verificação de 8 dígitos que foi enviado por e-mail para [%1$s].
Código de recuperação
Memorizar
Memorizar e-mail
diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml
index 8f7a66336f..909cd73aae 100644
--- a/app/src/main/res/values-ro-rRO/strings.xml
+++ b/app/src/main/res/values-ro-rRO/strings.xml
@@ -170,7 +170,7 @@
Aplicația Autentificator
Introducere cod de verificare din 6 cifre din aplicația de autentificare.
Introducere cod de verificare din 6 cifre, care a fost trimis prin e-mail la %1$s.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
Cod de recuperare
Remember
Remember email
diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml
index bb12271fd1..a1fa9ac3d4 100644
--- a/app/src/main/res/values-ru-rRU/strings.xml
+++ b/app/src/main/res/values-ru-rRU/strings.xml
@@ -170,7 +170,7 @@
Приложение-аутентификатор
Введите 6-значный код подтверждения из вашего приложения-аутентификатора.
Введите 6-значный код подтверждения, который был отправлен на %1$s.
- Мы не распознали это устройство. Введите 8-значный код подтверждения, который был отправлен на email %1$s.
+ Мы не распознали это устройство. Введите 8-значный код подтверждения, который был отправлен на email [%1$s].
Код восстановления
Запомнить
Запомнить email
diff --git a/app/src/main/res/values-si-rLK/strings.xml b/app/src/main/res/values-si-rLK/strings.xml
index 02648f5128..699581d86e 100644
--- a/app/src/main/res/values-si-rLK/strings.xml
+++ b/app/src/main/res/values-si-rLK/strings.xml
@@ -170,7 +170,7 @@
Authenticator app
Enter the 6 digit verification code from your authenticator app.
Enter the 6 digit verification code that was emailed to %1$s.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
ප්රතිසාධන කේතය
Remember
Remember email
diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml
index 178242cf92..b354ed7ae8 100644
--- a/app/src/main/res/values-sk-rSK/strings.xml
+++ b/app/src/main/res/values-sk-rSK/strings.xml
@@ -170,7 +170,7 @@
Overovacia aplikácia
Zadajte 6-miestny verifikačný kód z vašej overovacej aplikácie.
Zadajte 6-miestny verifikačný kód, ktorý bol zaslaný e-mailom na %1$s.
- Nespoznávame toto zariadenie. Zadajte 8-miestny overovací kód zaslaný na %1$s.
+ Nespoznávame toto zariadenie. Zadajte 8-miestny overovací kód zaslaný na [%1$s].
Záchranný kód
Zapamätať si
Zapamätať si e-mail
diff --git a/app/src/main/res/values-sl-rSI/strings.xml b/app/src/main/res/values-sl-rSI/strings.xml
index 74c1e0d93e..5af2c0b8ae 100644
--- a/app/src/main/res/values-sl-rSI/strings.xml
+++ b/app/src/main/res/values-sl-rSI/strings.xml
@@ -170,7 +170,7 @@
Avtentikacijska aplikacija
Vnesite 6 mestno številčno verifikacijsko kodo z vaše avtentifikacijske aplikacije.
Vnesite 6-mestno verifikacijsko kodo, ki vam je bila poslana na %1$s.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
Koda za obnovitev
Remember
Remember email
diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml
index c6cf9ab9ca..b19726678e 100644
--- a/app/src/main/res/values-sr-rSP/strings.xml
+++ b/app/src/main/res/values-sr-rSP/strings.xml
@@ -170,7 +170,7 @@
Апликација Аутентификатор
Унесите шестоцифрени верификациони код из апликације за утврђивање аутентичности.
Унесите шестоцифрени верификациони код који је послан на %1$s.
- Не препознајемо овај уређај. Унесите 8-цифрени верификациони кôд који је послат на %1$s.
+ Не препознајемо овај уређај. Унесите 8-цифрени верификациони кôд који је послат на [%1$s].
Шифра за опоравак
Запамти ме
Запамти адресу е-поште
diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml
index 60a72d2132..30223c99cd 100644
--- a/app/src/main/res/values-sv-rSE/strings.xml
+++ b/app/src/main/res/values-sv-rSE/strings.xml
@@ -3,7 +3,7 @@
Om
Lägg till mapp
Lägg till objekt
- Ett fel har inträffat.
+ Ett fel har inträffat
Tillbaka
Bitwarden
Avbryt
@@ -49,7 +49,7 @@
"Skicka namn (krävs)"
Nej
Anteckningar
- Private notes
+ Privata anteckningar
Okej
Lösenord
Spara
@@ -86,10 +86,10 @@
Redigera kort
Redigera identitet
Redigera anteckning
- Edit passkey
+ Redigera inloggningsnyckel
Ange ditt kontos e-postadress för att hämta din huvudlösenordsledtråd.
Favorit
- Unfavorite
+ Avmarkera som favorit
Fingeravtryck
Generera lösenord
Hämta huvudlösenordsledtråd
@@ -121,14 +121,14 @@
Ny identitet
Det finns inga anteckningar i ditt valv.
Ny anteckning
- New passkey
+ Ny huvudnyckel
Nytt objekt
Ny SSH-nyckel
- There are no text Sends in your vault.
- There are no file Sends in your vault.
+ Det finns inga textmeddelanden i ditt valv.
+ Det finns inga filöverföringar i ditt valv.
Det finns inga SSH-nycklar i ditt valv.
- New text Send
- New file Send
+ Ny text Skicka
+ Ny fil Skicka
Inget användarnamn
Alternativ
Annat
@@ -137,8 +137,8 @@
Vi har skickat ett mejl till dig med din huvudlösenordsledtråd.
Är du säker på att du vill skriva över det nuvarande lösenordet?
Ange huvudlösenordet igen
- Re-type new master password (required)
- Re-type master password (required)
+ Skriv in det nya huvudlösenordet (krävs)
+ Skriv in huvudlösenordet igen (krävs)
Sök i valvet
Välj
Objektinformation
@@ -154,7 +154,7 @@
Visa kort
Visa identitet
Visa anteckning
- View passkey
+ Visa nyckeln
Bitwarden webbvalv
Objekt
Objekt för %1$s
@@ -170,7 +170,7 @@
Autentiseringsapp
Ange den 6-siffriga verifieringskoden från din autentiseringsapp.
Ange den 6-siffriga verifieringskoden som skickades till %1$s.
- Vi känner inte igen den här enheten. Ange den 8-siffriga verifieringskoden som skickades till %1$s.
+ Vi känner inte igen den här enheten. Ange den 8-siffriga verifieringskoden som skickades till [%1$s].
Återställningskod
Kom ihåg
Kom ihåg e-post
@@ -205,7 +205,7 @@ Skanningen sker automatiskt.
Läs mer
API-server-URL
Klientcertifikat (mTLS)
- Certificate used for client authentication.
+ Certifikat som används för klientautentisering.
Anpassad miljö
För avancerade användare. Du kan ange bas-URL:en för varje tjänst oberoende av varandra.
Miljö-URL:er har sparats.
@@ -265,7 +265,7 @@ Skanningen sker automatiskt.
Adress
Utgång
Visa webbplatsikoner
- Visa en identifierbar bild bredvid varje inloggning.
+ Visa en identifierbar bild bredvid varje inloggning
Ikonserver-URL
Valvet är låst
Gå till mitt valv
@@ -273,11 +273,11 @@ Skanningen sker automatiskt.
Det finns inga objekt i samlingen.
Det finns inga objekt i den här mappen.
Det finns inga objekt i papperskorgen.
- Assist with filling username and password fields in other apps and on the web.
+ Hjälp med att fylla i fält för användarnamn och lösenord i andra appar och på webben.
Bitwardens tjänst för automatisk ifyllnad använder Android Autofill Framework för att hjälpa till att fylla i inloggningsuppgifter i andra appar på din enhet.
Det gick inte att automatiskt öppna inställningsmenyn för Android automatisk ifyllnad. Du kan navigera till menyn manuellt från Android inställningar > System > Språk och inmatning > Avancerat > Tjänsten autofyll.
Anpassat fältnamn
- Boolean
+ Boolesk
Dold
Länkad
Text
@@ -296,8 +296,8 @@ Skanningen sker automatiskt.
Fyll i automatiskt och spara
Organisation
Försök igen
- Created: %1$s
- Password last updated: %1$s
+ Skapad: %1$s
+ Lösenordet senast uppdaterat: %1$s
Senast redigerad: %1$s
Ogiltig e-postadress.
Kort
@@ -307,13 +307,13 @@ Skanningen sker automatiskt.
Säkra anteckningar
Personlig information
Kontaktuppgifter
- Check password for data breaches
+ Kontrollera lösenord för dataintrång
Detta lösenord har avslöjats %1$s gång(er) i dataintrång. Du bör ändra det.
Detta lösenord hittades inte i några kända dataintrång. Det bör vara säkert att använda.
Identitetsnamn
Värde
Lösenordshistorik
- Password history: %1$s
+ Lösenordshistorik: %1$s
Typer
Inga lösenord att lista.
Sök bland Sends-filer
@@ -358,7 +358,7 @@ Skanningen sker automatiskt.
Standardmatchning för URI
Välj standardalternativet för hur matchning av URI är hanterat för inloggningar när du utför operationer såsom automatisk ifyllnad.
Tema
- Ändra appens färgtema.
+ Ändra appens färgtema
Kopiera anteckning
Avsluta
Är du säker på att du vill avsluta Bitwarden?
@@ -425,11 +425,11 @@ Skanningen sker automatiskt.
Integritetspolicy
Nyckelhantering
Tjänster för automatisk ifyllnad
- Display autofill suggestions
- Inline (shows in keyboard)
- Popup (shows over input field)
+ Visa förslag på autofyllning
+ Inline (visas i tangentbordet)
+ Popup (visas över inmatningsfältet)
Använd tillgänglighet
- Required to use the Autofill Quick-Action Tile.
+ Krävs för att använda Autofill Quick-Action Tile.
En organisationspolicy påverkar dina ägarskapsalternativ.
Send
Skicka detaljer
@@ -447,7 +447,7 @@ Skanningen sker automatiskt.
Går ut den %s
Går ut imorgon
Går ut den %s
- Stops logging on %1$s at %2$s
+ Slutar logga in på %1$s vid %2$s
Maximalt antal åtkomster
Om angivet kommer användare inte längre kunna komma åt denna Send när det maximala antalet åtkomster har uppnåtts.
Det maximala antalet åtkomster har uppnåtts
@@ -463,13 +463,13 @@ Skanningen sker automatiskt.
Send-länk
Sök bland Send
Redigera Send
- Edit file Send
- Edit text Send
- New file Send
- New text Send
+ Redigera fil Skicka
+ Redigera text Skicka
+ Ny fil Skicka
+ Ny text Skicka
Är du säker på att du vill radera denna Send?
Send har raderats
- Send updated
+ Skicka uppdaterat
1 dag
2 dagar
3 dagar
@@ -509,7 +509,7 @@ Skanningen sker automatiskt.
Radera konto
Radering av ditt konto är permanent
Ditt konto och all associerad data raderas och kan inte återställas. Är du säker på att du vill fortsätta?
- Ditt konto har raderats permanent.
+ Ditt konto har raderats permanent
Ogiltig verifieringskod
Send-kod
Skickar
@@ -534,10 +534,10 @@ Skanningen sker automatiskt.
Skanna QR-kod
Kan inte skanna QR-koden? Ange nyckeln manuellt
Autentiseringsnyckel
- Authenticator key help
+ Hjälp med autentiseringsnyckel
Ange nyckel manuellt
Lägg till TOTP
- Set up authenticator key
+ Konfigurera autentiseringsnyckel
När nyckeln har matats in,
välj Lägg till TOTP för att lagra nyckeln på ett säkert sätt
Att ställa in låsalternativ till “Aldrig” håller ditt valv tillgängligt för alla med tillgång till din enhet. Om du använder det här alternativet bör du se till att du håller din enhet ordentligt skyddad.
@@ -576,7 +576,7 @@ välj Lägg till TOTP för att lagra nyckeln på ett säkert sätt
DuckDuckGo
Fastmail
ForwardEmail
- API access token (required)
+ API-åtkomsttoken (krävs)
API-åtkomsttoken
Är du säker på att du vill ersätta nuvarande användarnamn?
Generera användarnamn
@@ -681,27 +681,27 @@ Vill du byta till detta konto?
Din organisation kräver att du anger ett huvudlösenord.
Ställ in ett upplåsningsalternativ för att ändra vad som händer när tidsgränsen uppnås.
Spara nyckel som ny inloggning
- Skriv över passkey?
+ Skriv över inloggningsnyckel?
Detta objekt innehåller redan en passnyckel. Är du säker på att du vill skriva över den aktuella passnyckeln?
Duo tvåstegsverifiering krävs för ditt konto.
Följ stegen från Duo för att slutföra inloggningen.
Starta Duo
- Din passkey kommer att sparas i ditt Bitwarden-valv för %1$s
- Passkeys not supported for this app
- Passkey operation failed because browser is not privileged
- Passkey operation failed because browser signature does not match
- Passkey operation failed because of missing asset links
- Passkey operation failed because app could not be verified
+ Din inloggningsnyckel kommer att sparas i ditt Bitwarden-valv för %1$s
+ Inloggningsnycklar stöds inte för den här appen
+ Passkey-operationen misslyckades eftersom webbläsaren inte är privilegierad
+ Passkey-operationen misslyckades eftersom webbläsarens signatur inte stämmer överens
+ Passkey-operationen misslyckades på grund av saknade tillgångslänkar
+ Passkey-operationen misslyckades eftersom appen inte kunde verifieras
Bekräfta fillösenord
Fillösenord
Lösenordsskyddad
- This password will be used to export and import this file
- Autofill suggestion
- Continue to complete WebAuthn verification.
+ Detta lösenord kommer att användas för att exportera och importera denna fil
+ Autofyll-förslag
+ Fortsätt för att slutföra WebAuthn-verifieringen.
Starta WebAuthn
- There was an error starting WebAuthn two factor authentication
- Self-hosted server URL
- Passkey operation failed because user could not be verified.
+ Det uppstod ett fel vid start av WebAuthns tvåfaktorsautentisering
+ URL för server med egen hosting
+ Passkey-operationen misslyckades eftersom användaren inte kunde verifieras.
Användarverifiering
Skapa konto på
Skapa konto på:
@@ -722,30 +722,30 @@ Vill du byta till detta konto?
Dina data, när och var du behöver dem
Spara obegränsat antal lösenord på obegränsat antal enheter med Bitwarden-appar för mobiler, webbläsare och datorer.
Ta bort nyckel
- Passkey removed
- What makes a password strong?
+ Passkey borttagen
+ Vad gör ett lösenord starkt?
Ett säkert lösenord som är lätt att komma ihåg
Kontoinställningar
Ställ in upplåsning
Ställ in senare
Ställ in upplåsning senare?
- You can return to complete this step anytime from Account Security in Settings.
+ Du kan återgå till att slutföra detta steg när som helst från kontosäkerhet i Inställningar.
Bekräfta
- Set up biometrics or choose a PIN code to quickly access your vault and Autofill your logins.
+ Ställ in biometri eller välj en PIN-kod för att snabbt komma åt ditt valv och fylla i dina inloggningsuppgifter automatiskt.
Förlora aldrig åtkomst till ditt valv
- The best way to make sure you can always access your vault is to set up safeguards from the start.
- One of the best ways to create a secure and memorable password is to use a passphrase. \nHere’s how:
+ Det bästa sättet att säkerställa att du alltid har tillgång till ditt valv är att ställa in säkerhetsåtgärder från början.
+ Ett av de bästa sätten att skapa ett säkert och minnesvärt lösenord är att använda en lösenordsfras. \nSå här gör du:
Skapa en ledtråd
- Your hint will be sent to you via email when you request it.
+ Din ledtråd skickas till dig via e-post när du begär det.
Skriv ner ditt lösenord
Var noga med att förvara ditt skriftliga lösenord på en hemlig och säker plats.
Förhindra kontoutlåsning
Generera huvudlösenord
Generera
Skriv ner detta lösenord och håll det säkert någonstans.
- Learn about other ways to prevent account lockout
- Learn about ways to prevent account lockout
- Help with server geolocations.
+ Läs mer om andra sätt att förhindra att kontot spärras
+ Läs om hur du kan förhindra att ditt konto spärras
+ Hjälp med servergeolokalisering.
E-postadress (obligatoriskt)
"Välj länken i e-postmeddelandet för att verifiera din e-postadress och fortsätta skapa ditt konto. "
Ändra e-postadress
@@ -756,21 +756,21 @@ Vill du byta till detta konto?
Välj ett unikt och starkt lösenord för att hålla din information säker.
%1$s tecken
Utgången länk
- Please restart registration or try logging in. You may already have an account.
+ Starta om registreringen eller försök logga in. Du kanske redan har ett konto.
Starta om registrering
- Authenticator Sync
- Allow authenticator syncing
- There was an issue validating the registration token.
+ Synkronisering av autentiserare
+ Tillåt synkronisering av autentiserare
+ Det uppstod ett problem med valideringen av registreringstoken.
Slå på Autofyll
Använd autofyll för att logga in på dina konton med ett tryck.
Slå på senare
Slå på autofyll senare?
- You can return to complete this step anytime in Settings.
- You can now explore everything Bitwarden has to offer and start managing your passwords securely.
+ Du kan återgå till detta steg när som helst i Inställningar.
+ Du kan nu utforska allt som Bitwarden har att erbjuda och börja hantera dina lösenord på ett säkert sätt.
Du är klar!
- Error connecting with the Duo service. Use a different two-step login method or contact Duo for assistance.
+ Fel vid anslutning till Duo-tjänsten. Använd en annan tvåstegsinloggningsmetod eller kontakta Duo för hjälp.
Huvudlösenordsledtråd
- New master password hint
+ Ny ledtråd för huvudlösenord
Kom igång
Spara och skydda din data
Valvet skyddar mer än bara lösenord. Lagra säkra inloggningar, identiteter, kort och anteckningar säkert här.
@@ -779,19 +779,19 @@ Vill du byta till detta konto?
Skicka känslig information, säkert
Importera sparade inloggningar
Använd en dator för att importera inloggningar från en befintlig lösenordshanterare
- You can return to complete this step anytime in Vault Settings.
+ Du kan återgå till att slutföra detta steg när som helst i Vault Settings.
Importera inloggningar senare
Importera inloggningar senare?
- Do you have a computer available?
- The following instructions will guide you through importing logins from your desktop or laptop computer
+ Har du tillgång till en dator?
+ Följande instruktioner hjälper dig att importera inloggningar från din stationära eller bärbara dator
Importera inloggningar
- From your computer, follow these instructions to export saved passwords from your browser or other password manager. Then, safely import them to Bitwarden.
- Give your vault a head start
- Unlock with biometrics requires strong biometric authentication and may not be compatible with all biometric options on this device.
- Unlock with biometrics requires strong biometric authentication and is not compatible with the biometrics options available on this device.
- On your computer, log in to your current browser or password manager.
- Export your passwords. This option is usually found in your settings.
- Select Import data in the web app, then Done below to finish syncing.
+ Från din dator följer du dessa instruktioner för att exportera sparade lösenord från din webbläsare eller annan lösenordshanterare. Sedan kan du importera dem till Bitwarden på ett säkert sätt.
+ Ge ditt valv ett försprång
+ Låsa upp med biometri kräver stark biometrisk autentisering och är kanske inte kompatibelt med alla biometriska alternativ på den här enheten.
+ Låsa upp med biometri kräver stark biometrisk autentisering och är inte kompatibelt med de biometriska alternativ som finns tillgängliga på den här enheten.
+ Logga in på din dator med din nuvarande webbläsare eller lösenordshanterare.
+ Exportera dina lösenord. Det här alternativet finns vanligtvis i dina inställningar.
+ Välj Importera data i webbappen och sedan Klar nedan för att avsluta synkroniseringen.
Steg 1 av 3
Exportera dina sparade inloggningar
Du kan ta bort denna fil efter importen är färdig.
@@ -801,94 +801,94 @@ Vill du byta till detta konto?
Logga in på Bitwarden
Steg 3 av 3
Importera inloggningar till Bitwarden
- In the Bitwarden navigation, find the Tools option and select Import data.
- Fill out the form and import your saved password file.
- For your security, be sure to delete your saved password file.
- Need help? Check out import help.
- Save the exported file somewhere on your computer you can find easily.
- This is not a recognized Bitwarden server. You may need to check with your provider or update your server.
+ I Bitwarden-navigeringen hittar du alternativet Verktyg och väljer Importera data.
+ Fyll i formuläret och importera din sparade lösenordsfil.
+ För din egen säkerhets skull bör du ta bort din sparade lösenordsfil.
+ Behöver du hjälp? Kolla in importhjälp.
+ Spara den exporterade filen på ett ställe på datorn som du lätt kan hitta.
+ Detta är inte en erkänd Bitwarden-server. Du kan behöva kontrollera med din leverantör eller uppdatera din server.
Synkroniserar inloggningar...
Hämta ner webbläsartillägget
Gå till bitwarden.com/download för att integrera Bitwarden i din favoritwebbläsare och få en smidig upplevelse.
Använd webbappen
Logga in på bitwarden.com för att enkelt hantera ditt konto och uppdatera inställningarna.
Autofyll lösenord
- Set up autofill on all your devices to login with a single tap anywhere.
- Import Successful!
- Manage your logins from anywhere with Bitwarden tools for web and desktop.
+ Ställ in autofyll på alla dina enheter för att logga in med ett enda tryck var som helst.
+ Importen lyckades!
+ Hantera dina inloggningar var som helst med Bitwardens verktyg för webben och datorn.
Bitwarden-verktyg
Jag fattar
Inga inloggningar importerades
- Import error
- Logins imported
- Remember to delete your imported password file from your computer
+ Importfel
+ Inloggningar importerade
+ Kom ihåg att radera den importerade lösenordsfilen från din dator
SSH-nyckel
Offentlig nyckel
Privat nyckel
SSH-nycklar
Kopiera offentlig nyckel
Kopiera fingeravtryck
- Enable notifications
- Log in quickly and easily across devices
- Bitwarden can notify you each time you receive a new login request from another device.
+ Aktivera aviseringar
+ Logga in snabbt och enkelt på alla enheter
+ Bitwarden kan meddela dig varje gång du får en ny inloggningsbegäran från en annan enhet.
Hoppa över nu
Klar
%1$s av %2$s
- Copy identity name
+ Kopiera identitetsnamn
Kopiera företag
Kopiera personnummer
Kopiera passnummer
- Copy license number
+ Kopiera licensnummer
Kopiera e-postadress
Kopiera telefonnummer
Kopiera adress
- Biometrics are no longer supported on this device
- You’ve been logged out because your device’s biometrics don’t meet the latest security requirements. To update settings, log in once again or contact your administrator for access.
- CXP Import
- CXP Export
- Choose three or four random words
- Pick three or four random, unrelated words that you can easily remember. Think of objects, places, or things you like.
- Combine those words together
- Put the words together in any order to form your passphrase. Use hyphens, spaces, or leave them as one long word—your choice!
- Make it yours
- Add a number or symbol to make it even stronger. Now you have a unique, secure, and memorable passphrase!
- "Need some inspiration?"
- "Check out the passphrase generator"
- We couldn’t verify the server’s certificate. The certificate chain or proxy settings on your device or your Bitwarden server may not be set up correctly.
- Review flow launched!
+ Biometri stöds inte längre på den här enheten
+ Du har loggats ut eftersom din enhets biometriska data inte uppfyller de senaste säkerhetskraven. För att uppdatera inställningarna, logga in igen eller kontakta din administratör för åtkomst.
+ CXP-import
+ CXP-export
+ Välj tre eller fyra slumpmässiga ord
+ Välj tre eller fyra slumpmässiga, orelaterade ord som du lätt kan komma ihåg. Tänk på föremål, platser eller saker som du tycker om.
+ Kombinera dessa ord tillsammans
+ Sätt ihop orden i valfri ordning för att bilda din lösenordsfras. Använd bindestreck, mellanslag eller låt dem vara ett enda långt ord - dittval!
+ Gör den till din
+ Lägg till en siffra eller symbol för att göra den ännu starkare. Nu har du en unik, säker och minnesvärd lösenordsfras!
+ "Behöver du lite inspiration?"
+ "Kolla in lösenordsfrasgeneratorn"
+ Vi kunde inte verifiera serverns certifikat. Certifikatkedjan eller proxyinställningarna på din enhet eller din Bitwarden-server kanske inte är korrekt konfigurerade.
+ Granskningsflödet lanserat!
Kopiera privat nyckel
Inloggningsuppgifter
Alternativ för autofyll
Använd denna knapp för att generera ett nytt unikt lösenord.
1 AV 3
2 AV 3
- You’ll only need to set up Authenticator Key for logins that require two-factor authentication with a code. The key will continuously generate six-digit codes you can use to log in.
+ Du behöver bara ställa in Authenticator Key för inloggningar som kräver tvåfaktorsautentisering med en kod. Nyckeln kommer kontinuerligt att generera sexsiffriga koder som du kan använda för att logga in.
3 AV 3
- You must add a web address to use autofill to access this account.
+ Du måste lägga till en webbadress för att använda autofyll för att komma åt det här kontot.
Ömsesidig TLS
- Single tap passkey creation
- Single tap passkey sign-on
- Learn about new logins
- We\'ll walk you through the key features to add a new login.
+ Skapa passerkort med en enda knapptryckning
+ Inloggning med en knapptryckning och nyckel
+ Lär dig mer om nya inloggningar
+ Vi guidar dig genom de viktigaste funktionerna för att lägga till en ny inloggning.
Utforska generatorn
- Learn more about generating secure login credentials with a guided tour.
+ Lär dig mer om hur du genererar säkra inloggningsuppgifter med en guidad tur.
Importera klientcertifikat
- Enter the client certificate password and the desired alias for this certificate.
+ Ange lösenordet för klientcertifikatet och önskat alias för detta certifikat.
Alias
- "Use the generator to create secure passwords, passphrases and usernames. "
- Passphrases are strong passwords that are often easier to remember and type than random passwords. They are helpful for logging into accounts where Autofill is not available, like a streaming service on your TV.
- Unique usernames add an extra layer of security and can help prevent hackers from finding your accounts.
+ "Använd generatorn för att skapa säkra lösenord, lösenordsfraser och användarnamn. "
+ Passfras är starka lösenord som ofta är lättare att komma ihåg och skriva än slumpmässiga lösenord. De är användbara för att logga in på konton där Autofill inte är tillgängligt, t.ex. en streamingtjänst på din TV.
+ Unika användarnamn ger ett extra lager av säkerhet och kan hjälpa till att förhindra att hackare hittar dina konton.
1 AV 6
2 AV 6
3 AV 6
4 AV 6
5 AV 6
6 AV 6
- Use these options to adjust your password to meet your account website\'s requirements.
- "After you save your new password to Bitwarden, don’t forget to update it on your account website. "
+ Använd dessa alternativ för att justera ditt lösenord så att det uppfyller kraven på din kontowebbplats.
+ "När du har sparat ditt nya lösenord i Bitwarden, glöm inte att uppdatera det på ditt kontos webbplats. "
Verifiera din identitet
Fel vid inläsning av certifikat
- Certificate alias
+ Alias för certifikat
Importera certifikat
Välj systemcertifikat
Certifikat installerat
@@ -896,42 +896,42 @@ Vill du byta till detta konto?
Certifikattypen stöds inte
Certifikatets lösenord är felaktigt
Ogiltig certifikatkedja
- Using a system certificate is less secure than storing the certificate with Bitwarden. Continuing will display a list of available system certificates if one is already installed.
+ Att använda ett systemcertifikat är mindre säkert än att lagra certifikatet i Bitwarden. Continuing visar en lista över tillgängliga systemcertifikat om ett sådant redan är installerat.
Länk
- Passkey operation failed because host URL is not present in request.
- Passkey operation failed because app signature is invalid.
- Passkey registration failed due to an internal error.
- Passkey operation failed because relying party cannot be identified.
- Passkey operation failed because the selected item does not exist.
- Passkey operation failed because user is locked out.
- Passkey operation failed because user verification was cancelled.
- Passkey operation failed because the request is invalid.
- Passkey operation failed because user verification attempts exceeded.
- Passkey operation failed because no item was selected.
- Passkey operation failed because the request is unsupported.
- Self-host server URL
- Use Brave autofill integration
- Use Chrome autofill integration
- Use Chrome autofill integration (Beta)
- Improves login filling for supported websites on selected browsers. Once enabled, you’ll be directed to browser settings to enable third-party autofill.
+ Passkey-operationen misslyckades eftersom värd-URL:en inte finns med i begäran.
+ Passkey-operationen misslyckades eftersom appens signatur är ogiltig.
+ Passkey-registreringen misslyckades på grund av ett internt fel.
+ Passkey-operationen misslyckades eftersom den förlitande parten inte kan identifieras.
+ Passkey-operationen misslyckades eftersom det valda objektet inte finns.
+ Passkey-operationen misslyckades eftersom användaren är utelåst.
+ Passkey-operationen misslyckades eftersom användarverifieringen avbröts.
+ Passkey-operationen misslyckades eftersom begäran är ogiltig.
+ Passkey-operationen misslyckades eftersom antalet försök att verifiera användaren överskreds.
+ Passkey-operationen misslyckades eftersom inget objekt valdes.
+ Passkey-operationen misslyckades eftersom begäran inte stöds.
+ URL för server med egen värd
+ Använd Brave autofyll-integration
+ Använd Chrome autofyll-integration
+ Använd Chrome autofyll-integration (Beta)
+ Förbättrar inloggning för webbplatser som stöds i utvalda webbläsare. När den är aktiverad kommer du att hänvisas till webbläsarinställningarna för att aktivera autofyll från tredje part.
Visa mer
- No folder
- Show less
- Add field
+ Ingen mapp
+ Visa mindre
+ Lägg till fält
%s...
- Share error details
- Flight recorder
- Flight recorder help
- View recorded logs
- Enable flight recorder
- Recorded logs
- No logs recorded
- Experiencing an issue?
- Enable temporary logging to collect and inspect logs locally. When enabled, application states and network calls may be logged—never sensitive vault information.
- To get started, set a logging duration. Logging
will automatically turn off after this period, giving you time to capture activity while reproducing
any issues.
- Logs will be automatically deleted after 30 days. Bitwarden is only able to access your log data when you share it.
- For details on what is and isn’t logged, visit the\nBitwarden help center.
- Logging duration
+ Dela felinformation
+ Färdskrivare
+ Hjälp med färdskrivare
+ Visa inspelade loggar
+ Aktivera färdskrivare
+ Inspelade loggar
+ Inga loggar registrerade
+ Upplever du ett problem?
+ Aktivera tillfällig loggning för att samla in och inspektera loggar lokalt. När det är aktiverat kan programstatus och nätverksanrop loggas - aldrig känslig valvinformation.
+ För att komma igång ställer du in en loggningsperiod. Loggningen stängs av automatiskt efter denna period, vilket ger dig tid att registrera aktivitet och samtidigt återskapa eventuella problem.
+ Loggar raderas automatiskt efter 30 dagar. Bitwarden kan endast komma åt dina loggdata när du delar dem.
+ För mer information om vad som loggas och inte loggas, besök\nBitwardenshjälpcenter.
+ Loggningens varaktighet
1 timme
8 timmar
24 timmar
@@ -939,54 +939,54 @@ Vill du byta till detta konto?
Radera alla
Dela alla
Kunde inte dela
- Please try again or select a different log.
- The log file you are trying to share has been removed.
+ Vänligen försök igen eller välj en annan logg.
+ Den loggfil som du försöker dela har tagits bort.
Ta bort logg
- Do you really want to delete this log?
+ Vill du verkligen radera den här loggen?
Radera loggar
- Do you really want to delete all recorded logs?
- Confirm Key Connector domain
- Key Connector domain:
+ Vill du verkligen radera alla inspelade loggar?
+ Bekräfta Key Connector-domän
+ Key Connector-domän:
Organisation:
- A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator.
- Please confirm the domain below with your organization administrator.\n\nKey Connector domain:\n%1$s
- Flight recorder on
- Flight recorder will be active until %1$s at %2$s. Return to settings to deactivate now.
+ Ett huvudlösenord krävs inte längre för medlemmar i följande organisation. Vänligen bekräfta domänen nedan med din organisationsadministratör.
+ Vänligen bekräfta domänen nedan med din organisationsadministratör.\n\nKey Connector-domän:\n%1$s
+ Färdskrivare på
+ Färdskrivaren kommer att vara aktiv tills %1$s vid %2$s. Återgå till inställningarna för att avaktivera nu.
Gå till inställningar
- All logs deleted
- Log deleted
+ Alla loggar raderade
+ Loggen raderad
Appinställningar
Ersätt befintligt certifikat?
- A certificate with the alias \"%s\" already exists. Do you want to replace it?\nReplacing the certificate may impact your connection to any environments currently using it.
+ Ett certifikat med aliaset \"%s\" finns redan. Vill du byta ut det? Att byta ut certifikatet kan påverka din anslutning till alla miljöer som använder det för närvarande.
Ersätt certifikat
- Unable to read certificate.
- Cannot delete your account
- This action cannot be completed because your account is owned by an organization. Contact your organization administrator for additional details.
- This account will soon be deleted. Log in at %1$s to continue using Bitwarden.
- View file Send
- View text Send
- Delete Send
- Missing Send re-sync your vault
+ Det går inte att läsa certifikatet.
+ Det går inte att radera ditt konto
+ Den här åtgärden kan inte slutföras eftersom ditt konto ägs av en organisation. Kontakta din organisationsadministratör om du vill ha mer information.
+ Detta konto kommer snart att raderas. Logga in på %1$s för att fortsätta använda Bitwarden.
+ Visa fil Skicka
+ Visa text Skicka
+ Radera Skicka
+ Saknas Skicka synkronisera ditt valv igen
Dynamiska färger
- Apply dynamic colors based on your wallpaper
- Dynamic colors uses the system colors and may not meet all accessibility guidelines.
- Passkey operation failed because browser (%1$s) is not recognized. Select \"Trust\" to add %1$s to the list of locally trusted applications.
- Passkey operation failed because the browser is not trusted.
- Trust
- These are applications or browsers that Bitwarden does not trust by default, but you trust to perform passkey operations.
- These are applications not included in the Google Play Store, but Bitwarden trusts to perform passkey operations after community members use and report them as safe.
+ Applicera dynamiska färger baserat på din tapet
+ Dynamiska färger använder systemfärgerna och uppfyller kanske inte alla riktlinjer för tillgänglighet.
+ Passkey-operationen misslyckades eftersom webbläsaren (%1$s) inte känns igen. Välj \"Trust\" för att lägga till %1$s i listan över lokalt betrodda program.
+ Passkey-operationen misslyckades eftersom webbläsaren inte är pålitlig.
+ Förtroende
+ Det här är program eller webbläsare som Bitwarden inte litar på som standard, men som du litar på för att utföra nyckeloperationer.
+ Det här är applikationer som inte ingår i Google Play Store, men Bitwarden litar på att utföra passskey-operationer efter att medlemmar i samhället använder och rapporterar dem som säkra.
Det här är program som Google anser vara säkra och finns tillgängliga i Googles Play Store.
Betrodd av dig
Betrodd av gemenskapen
Betrodd av Google
- To protect users from phishing attempts, by default, Bitwarden only completes passkey operations through applications or web browsers trusted by Google or the Bitwarden community.
- About privileged applications
- Learn more about privileged apps
- Privileged apps
+ För att skydda användare från nätfiskeförsök genomför Bitwarden som standard endast passerkortsoperationer via program eller webbläsare som är betrodda av Google eller Bitwarden-communityn.
+ Om privilegierade applikationer
+ Läs mer om privilegierade appar
+ Privilegierade appar
Okänd webbläsare
- Learn more about using passkeys with Bitwarden.
- All trusted apps
- Are you sure you want to stop trusting %s?
- Installed apps
- Delete %s
+ Läs mer om hur du använder inloggningsnycklar med Bitwarden.
+ Alla betrodda appar
+ Är du säker på att du inte längre vill lita på %s?
+ Installerade appar
+ Radera %s
diff --git a/app/src/main/res/values-ta-rIN/strings.xml b/app/src/main/res/values-ta-rIN/strings.xml
index fc0a75499a..6ecb3b271d 100644
--- a/app/src/main/res/values-ta-rIN/strings.xml
+++ b/app/src/main/res/values-ta-rIN/strings.xml
@@ -170,7 +170,7 @@
அங்கீகரிப்பான் செயலி
உங்கள் அங்கீகார செயலியிலிருந்து ௬ இலக்க சரிபார்ப்புக் குறியீட்டை உள்ளிடவும்.
%1$s க்கு மின்னஞ்சல் செய்த ௬ இலக்க சரிபார்ப்புக் குறியீட்டை உள்ளிடவும்.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
மீட்புக் குறியீடு
Remember
Remember email
diff --git a/app/src/main/res/values-te-rIN/strings.xml b/app/src/main/res/values-te-rIN/strings.xml
index 11f5cc8a41..4c24394b8a 100644
--- a/app/src/main/res/values-te-rIN/strings.xml
+++ b/app/src/main/res/values-te-rIN/strings.xml
@@ -170,7 +170,7 @@
Authenticator app
Enter the 6 digit verification code from your authenticator app.
Enter the 6 digit verification code that was emailed to %1$s.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
Recovery code
Remember
Remember email
diff --git a/app/src/main/res/values-th-rTH/strings.xml b/app/src/main/res/values-th-rTH/strings.xml
index cc539e3d6f..9b8717d6a5 100644
--- a/app/src/main/res/values-th-rTH/strings.xml
+++ b/app/src/main/res/values-th-rTH/strings.xml
@@ -170,7 +170,7 @@
แอป Authenticator
ป้อนรหัสยืนยัน 6 หลักจากคุณแอป authenticator
ป้อนรหัสยืนยัน6หลักที่ส่งอีเมลไปที่ %1$s
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
รหัสกู้คืน
Remember
Remember email
diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml
index 4a44db30f8..190b8b5ffc 100644
--- a/app/src/main/res/values-tr-rTR/strings.xml
+++ b/app/src/main/res/values-tr-rTR/strings.xml
@@ -170,7 +170,7 @@
Kimlik doğrulama uygulaması
Kimlik doğrulama uygulamanızdaki 6 haneli doğrulama kodunu girin.
%1$s adresine e-postayla gönderdiğimiz 6 haneli doğrulama kodunu girin.
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
Kurtarma kodu
Hatırla
E-postayı hatırla
diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml
index fa146282df..d74cf032b4 100644
--- a/app/src/main/res/values-uk-rUA/strings.xml
+++ b/app/src/main/res/values-uk-rUA/strings.xml
@@ -170,7 +170,7 @@
Програма автентифікації
Введіть 6-значний код підтвердження з програми автентифікації.
Введіть 6-значний код підтвердження, надісланий на %1$s.
- Ми не впізнаємо цей пристрій. Введіть восьмизначний код підтвердження, надісланий на %1$s.
+ Ми не впізнаємо цей пристрій. Введіть восьмизначний код підтвердження, надісланий на [%1$s].
Код відновлення
Запам\'ятати
Запам\'ятати е-пошту
diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml
index cb8ea48be9..e295a67f77 100644
--- a/app/src/main/res/values-vi-rVN/strings.xml
+++ b/app/src/main/res/values-vi-rVN/strings.xml
@@ -62,7 +62,7 @@
Đồng bộ
Đường dẫn (URI)
Trang web (URI)
- Tên người dùng
+ Tên đăng nhập
Vui lòng nhập %1$s.
Bạn phải đính kèm một tệp để lưu Send này.
Đã sao chép %1$s
@@ -102,7 +102,7 @@
1 phút
4 giờ
Tức thì
- Đăng xuất sẽ xóa toàn bộ quyền truy cập vào kho của bạn và yêu cầu xác minh lại sau khi hết thời gian chờ. Bạn có chắc chắn muốn sử dụng cài đặt này không?
+ Đăng xuất sẽ xóa toàn bộ quyền truy cập vào kho của bạn và yêu cầu xác minh lại sau khi đóng kho. Bạn có chắc chắn muốn sử dụng cài đặt này không?
Đang đăng nhập...
Đăng nhập Bitwarden
Mật khẩu nhập lại không trùng khớp.
@@ -129,7 +129,7 @@
Không có khóa SSH nào trong kho của bạn.
Send văn bản mới
Send tập tin mới
- Không tên người dùng
+ Không tên đăng nhập
Tùy chọn
Khác
Trình tạo mật khẩu
@@ -170,8 +170,8 @@
Ứng dụng xác thực
Nhập mã xác nhận 6 chữ số từ ứng dụng xác thực của bạn.
Nhập mã xác nhận 6 chữ số đã được gửi tới email %1$s.
- Chúng tôi không nhận diện được thiết bị này. Vui lòng nhập mã xác minh 8 chữ số đã được gửi đến email %1$s.
- Mã phục hồi
+ Chúng tôi không nhận diện được thiết bị này. Vui lòng nhập mã xác minh 8 chữ số đã được gửi đến email [%1$s].
+ Mã khôi phục
Ghi nhớ
Ghi nhớ email
Gửi lại mã
@@ -191,7 +191,7 @@
Hướng máy ảnh của bạn vào mã QR.
Quá trình quét sẽ diễn ra tự động.
Sao chép TOTP
- Nếu tài khoản đăng nhập có khóa xác thực, mã xác minh TOTP sẽ được sao chép vào bộ nhớ tạm khi bạn tự động điền thông tin đăng nhập.
+ Nếu tài khoản đăng nhập có khóa xác thực, mã xác minh TOTP sẽ được sao chép vào bảng nhớ tạm khi bạn tự động điền thông tin đăng nhập.
Tự động sao chép mã TOTP
Cần là thành viên Cao cấp để sử dụng tính năng này.
Đã xóa tệp đính kèm
@@ -273,7 +273,7 @@ Quá trình quét sẽ diễn ra tự động.
Không có mục nào trong bộ sưu tập này.
Không có mục nào trong thư mục này.
Không có gì trong thùng rác
- Hỗ trợ điền tên người dùng và mật khẩu vào các trường tương ứng trong các ứng dụng khác và trên trang web.
+ Hỗ trợ điền tên đăng nhập và mật khẩu vào các trường tương ứng trong các ứng dụng khác và trên trang web.
Dịch vụ tự động điền của Bitwarden sử dụng Khung Tự động điền của Android để hỗ trợ điền thông tin đăng nhập, thẻ tín dụng và thông tin danh tính vào các ứng dụng khác trên thiết bị của bạn.
Chúng tôi không thể mở cài đặt tự động điền cho bạn. Bạn có thể đi đến cài đặt tự động điền theo cách thủ công bằng cách vào Cài đặt > Hệ thống > Ngôn ngữ và nhập liệu > Nâng cao > Dịch vụ tự động điền.
Tên trường tùy chỉnh
@@ -309,7 +309,7 @@ Quá trình quét sẽ diễn ra tự động.
Thông tin liên hệ
Kiểm tra xem mật khẩu có bị lộ
Mật khẩu này đã bị lộ %1$s lần trong các vụ rò rỉ dữ liệu. Bạn nên thay đổi nó.
- Mật khẩu này không được tìm thấy trong các vụ rò rỉ dữ liệu nào trước đây. Nó an toàn để sử dụng.
+ Không tìm thấy mật khẩu này trong các vụ rò rỉ dữ liệu trước đây. Nó an toàn để sử dụng.
Tên định danh
Giá trị
Lịch sử mật khẩu
@@ -353,8 +353,8 @@ Quá trình quét sẽ diễn ra tự động.
30 giây
20 giây
2 phút
- Xóa bộ nhớ tạm
- Tự động xóa mọi thứ đã sao chép khỏi bộ nhớ tạm.
+ Xóa bảng nhớ tạm
+ Tự động xóa mọi thứ đã sao chép khỏi bảng nhớ tạm.
Cách nhận diện đường dẫn (URI)
Chọn cách thức mặc định hệ thống so khớp đường dẫn (URI) để xử lý đăng nhập khi thực hiện các thao tác như tự động điền.
Chủ đề
@@ -408,8 +408,8 @@ Quá trình quét sẽ diễn ra tự động.
Đăng nhập một lần cho doanh nghiệp
Đăng nhập nhanh chóng thông qua cổng đăng nhập một lần của tổ chức của bạn. Vui lòng nhập mã định danh của tổ chức để bắt đầu.
Mã định danh tổ chức
- Hiện tại không thể đăng nhập bằng SSO
- Tạo mật khẩu chính
+ Hiện tại không thể đăng nhập bằng Đăng nhập một lần
+ Đặt mật khẩu chính
Các chính sách của tổ chức yêu cầu mật khẩu chính của bạn phải đáp ứng các yêu cầu sau:
Độ mạnh tối thiểu %1$s
Độ dài tối thiểu %1$s
@@ -420,7 +420,7 @@ Quá trình quét sẽ diễn ra tự động.
Mật khẩu không đúng
Mật khẩu không đáp ứng yêu cầu của tổ chức. Vui lòng kiểm tra chính sách mật khẩu và thử lại.
Đang tải
- Điều khoản Dịch vụ và Chính sách Bảo mật chưa được xác nhận.
+ Bạn chưa đồng ý với Điều khoản Dịch vụ và Chính sách Bảo mật.
Điều khoản Dịch vụ
Chính sách Bảo mật
Quản lý mã khoá
@@ -447,7 +447,7 @@ Quá trình quét sẽ diễn ra tự động.
Hết hạn vào %s
Hết hạn ngày mai
Hết hạn vào %s
- Ngừng đăng nhập %1$s vào %2$s
+ Ngừng ghi %1$s lúc %2$s
Số lần truy cập tối đa
Nếu được thiết lập, người dùng sẽ không thể truy cập Send này khi đã đạt tới số lần truy cập tối đa.
Đã vượt số lần truy cập tối đa
@@ -497,8 +497,8 @@ Quá trình quét sẽ diễn ra tự động.
Quay lại ứng dụng
Tổ chức này có chính sách doanh nghiệp sẽ tự động đặt lại mật khẩu chính cho bạn. Đăng ký sẽ cho phép quản trị viên tổ chức thay đổi mật khẩu chính của bạn.
Tổ chức của bạn đã đặt thời gian mở kho tối đa là %1$s giờ và %2$s phút.
- Chính sách tổ chức của bạn đang ảnh hưởng đến thời gian mở kho. Thời gian mở kho tối đa là %1$s giờ và %2$s phút. Kho sẽ %3$s sau khi hết thời gian mở kho.
- Tổ chức của bạn sẽ %1$s sau khi hết thời gian mở kho.
+ Chính sách tổ chức của bạn đang ảnh hưởng đến thời gian mở kho. Thời gian mở kho tối đa là %1$s giờ và %2$s phút. Kho sẽ %3$s sau khi đóng kho.
+ Tổ chức bạn đã thiết lập hành động sau khi đóng kho là %1$s.
Thời gian mở kho vượt quá giới hạn do tổ chức của bạn đặt ra.
Các chính sách của tổ chức ngăn cản bạn xuất kho lưu trữ cá nhân của mình.
Thêm tài khoản
@@ -559,7 +559,7 @@ chọn Thêm TOTP để lưu khóa an toàn
Phê duyệt yêu cầu đăng nhập
Không, cảm ơn
Phê duyệt đăng nhập cho %1$s
- Loại tên người dùng
+ Loại tên đăng nhập
Địa chỉ email có hậu tố
Catch-all email
Địa chỉ email thay thế
@@ -578,13 +578,13 @@ chọn Thêm TOTP để lưu khóa an toàn
ForwardEmail
Token truy cập API (bắt buộc)
Token truy cập API
- Bạn có chắc chắn muốn ghi đè lên tên người dùng hiện tại không?
- Tạo tên người dùng
+ Bạn có chắc chắn muốn ghi đè lên tên đăng nhập hiện tại không?
+ Tạo tên đăng nhập
Sử dụng tính năng địa chỉ phụ của nhà cung cấp dịch vụ email của bạn
Sử dụng hộp thư bạn đã thiết lập để nhận tất cả email gửi đến tên miền của bạn.
Tạo một địa chỉ email ảo bằng dịch vụ chuyển tiếp email bên ngoài.
Thông báo về Dịch vụ Trợ năng
- Bitwarden sử dụng Dịch vụ trợ năng để tìm kiếm các trường đăng nhập trong ứng dụng và trang web, sau đó thiết lập ID trường thích hợp để nhập tên người dùng & mật khẩu khi tìm thấy ứng dụng hoặc trang web tương ứng. Chúng tôi không lưu trữ bất kỳ thông tin nào được dịch vụ cung cấp, cũng như không cố gắng kiểm soát bất kỳ yếu tố nào trên màn hình ngoài việc nhập thông tin đăng nhập.
+ Bitwarden sử dụng Dịch vụ trợ năng để tìm kiếm các trường đăng nhập trong ứng dụng và trang web, sau đó thiết lập ID trường thích hợp để nhập tên đăng nhập & mật khẩu khi tìm thấy ứng dụng hoặc trang web tương ứng. Chúng tôi không lưu trữ bất kỳ thông tin nào được dịch vụ cung cấp, cũng như không cố gắng kiểm soát bất kỳ yếu tố nào trên màn hình ngoài việc nhập thông tin đăng nhập.
Đồng ý
Từ chối
Yêu cầu đăng nhập đã hết hạn.
@@ -629,7 +629,7 @@ Bạn có muốn chuyển sang tài khoản này không?
Phê duyệt bằng thiết bị khác
Yêu cầu quản trị viên phê duyệt
Phê duyệt bằng mật khẩu chính
- Tắt khi sử dụng thiết bị công cộng
+ Tắt nếu sử dụng thiết bị công cộng
Lưu thiết bị này
Mã khoá
Mã khóa sẽ không được sao chép
@@ -658,8 +658,8 @@ Bạn có muốn chuyển sang tài khoản này không?
Trung tâm hỗ trợ Bitwarden
Đồng bộ ngay
Tùy chọn mở khóa
- Thời gian hết phiên
- Hành động sau khi hết phiên
+ Thời gian đóng kho
+ Hành động sau khi đóng kho
Cụm từ xác thực tài khoản
Sử dụng Bitwarden để lưu các mã khoá mới và đăng nhập bằng các mã khoá đã lưu trong kho của bạn.
Cho phép Bitwarden sử dụng thông tin đăng nhập đã lưu của bạn để đăng nhập vào các ứng dụng khác trên thiết bị của bạn.
@@ -679,7 +679,7 @@ Bạn có muốn chuyển sang tài khoản này không?
Bitwarden cho phép bạn chia sẻ các mục trong kho lưu trữ với người khác bằng cách tạo một tổ chức. Tìm hiểu thêm trên bitwarden.com.
Tạo bởi %1$s
Tổ chức của bạn yêu cầu bạn thiết lập mật khẩu chính.
- Thiết lập phương thức mở khóa để thay đổi hành động hết thời gian mở kho.
+ Thiết lập phương thức mở khóa để thay đổi hành động khi đóng kho.
Lưu mã khoá như đăng nhập mới
Ghi đè mã khoá?
Mục này đã chứa mã khoá. Bạn có chắc muốn ghi đè mã khoá hiện tại không?
@@ -877,7 +877,7 @@ Bạn có muốn chuyển sang tài khoản này không?
Tên gọi
"Sử dụng trình tạo để tạo mật khẩu, cụm mật khẩu và tên người dùng an toàn. "
Cụm mật khẩu là mật khẩu mạnh, thường dễ nhớ và dễ nhập hơn mật khẩu ngẫu nhiên. Chúng hữu ích khi đăng nhập vào các tài khoản không có tính năng Tự động điền, như dịch vụ phát trực tuyến trên TV của bạn.
- Tên người dùng duy nhất giúp tăng cường bảo mật và có thể ngăn chặn tin tặc tìm ra tài khoản của bạn.
+ Tên đăng nhập duy nhất giúp tăng cường bảo mật và có thể ngăn chặn tin tặc tìm ra tài khoản của bạn.
1 TRONG 6
2 TRONG 6
3 TRONG 6
@@ -927,7 +927,7 @@ Bạn có muốn chuyển sang tài khoản này không?
Nhật ký đã lưu
Chưa ghi nhật ký nào
Bạn đang gặp vấn đề?
- Bật tính năng ghi nhật ký tạm thời để thu thập và kiểm tra nhật cục bộ. Khi tính năng này được bật, trạng thái ứng dụng và các yêu cầu mạng có thể được ghi lại—không bao giờ gồm thông tin nhạy cảm trong kho lưu trữ.
+ Bật tính năng ghi nhật ký tạm thời để thu thập và kiểm tra cục bộ. Khi tính năng này được bật, trạng thái ứng dụng và các yêu cầu mạng có thể được ghi lại—không bao giờ bao gồm thông tin nhạy cảm trong kho lưu trữ.
Để bắt đầu, hãy thiết lập thời gian ghi nhật ký. Ghi nhật ký
sẽ tự động tắt sau khoảng thời gian này, cho phép bạn ghi lại hoạt động trong quá trình tái hiện
các vấn đề.
@@ -969,7 +969,7 @@ các vấn đề.
Xem văn bản Send
Xóa Send
Thiếu Send, đồng bộ lại kho của bạn
- Màu động
+ Màu sắc tự động điều chỉnh
Dựa theo hình nền của bạn
Màu sắc động sử dụng các màu hệ thống và có thể khó nhìn.
Vận hành mã khóa thất bại vì trình duyệt (%1$s) không được nhận diện. Chọn \"Tin tưởng\" để thêm %1$s vào danh sách các ứng dụng được tin cậy cục bộ.
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index c494ce3d02..64a076c779 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -170,7 +170,7 @@
验证器 App
请输入您的验证器 App 中的 6 位数验证码。
请输入发送到 %1$s 的 6 位数验证码。
- 我们无法识别这个设备。请输入发送到 %1$s 的 8 位数验证码。
+ 我们无法识别这个设备。请输入发送到您电子邮箱中的代码以验证您的身份。
恢复代码
记住
记住电子邮箱
@@ -980,7 +980,7 @@
被您信任
被社区信任
被 Google 信任
- 为保护用户免遭钓鱼攻击,默认情况下,Bitwarden 仅允许使用被 Google 或 Bitwarden 社区信任的网页浏览器完成通行密钥操作。
+ 为保护用户免遭钓鱼攻击,默认情况下,Bitwarden 仅使用被 Google 或 Bitwarden 社区信任的应用程序或网页浏览器完成通行密钥操作。
关于特权 App
进一步了解特权 App
特权 App
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 90cc12dcde..1ad110b6e6 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -170,7 +170,7 @@
驗證器應用程式
輸入驗證器應用程式提供的 6 位數驗證碼。
輸入已傳送至電子郵件信箱 %1$s 的 6 位數驗證碼。
- We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.
+ We don\'t recognize this device. Enter the code sent to your email to verify your identity.
復原代碼
Remember
Remember email
diff --git a/app/src/main/res/xml/network_security_config.xml b/app/src/main/res/xml/network_security_config.xml
index 53a4b88f21..3e49bd3da6 100644
--- a/app/src/main/res/xml/network_security_config.xml
+++ b/app/src/main/res/xml/network_security_config.xml
@@ -1,9 +1,7 @@
-
+
diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/util/CipherListViewExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/util/CipherListViewExtensionsTest.kt
new file mode 100644
index 0000000000..630ef69e17
--- /dev/null
+++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/util/CipherListViewExtensionsTest.kt
@@ -0,0 +1,60 @@
+package com.x8bit.bitwarden.data.autofill.util
+
+import com.bitwarden.vault.CipherListViewType
+import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCardListView
+import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCipherListView
+import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockLoginListView
+import org.junit.jupiter.api.Test
+import org.junit.jupiter.api.assertNotNull
+import org.junit.jupiter.api.assertNull
+
+class CipherListViewExtensionsTest {
+
+ @Test
+ fun `login should return LoginListView when type is Login`() {
+ val cipherListView = createMockCipherListView(
+ number = 1,
+ type = CipherListViewType.Login(createMockLoginListView(1)),
+ )
+ val loginListView = cipherListView.login
+ assertNotNull(loginListView)
+ }
+
+ @Test
+ fun `login should return null when type is not Login`() {
+ val cipherListViews = listOf(
+ createMockCipherListView(number = 1, type = CipherListViewType.SecureNote),
+ createMockCipherListView(
+ number = 2,
+ type = CipherListViewType.Card(createMockCardListView(number = 2)),
+ ),
+ createMockCipherListView(number = 3, type = CipherListViewType.SshKey),
+ createMockCipherListView(number = 4, type = CipherListViewType.Identity),
+ )
+ cipherListViews.forEach { assertNull(it.login) }
+ }
+
+ @Test
+ fun `card should return CardListView when type is Card`() {
+ val cipherListView = createMockCipherListView(
+ number = 1,
+ type = CipherListViewType.Card(createMockCardListView(number = 1)),
+ )
+ val cardListView = cipherListView.card
+ assertNotNull(cardListView)
+ }
+
+ @Test
+ fun `card should return null when type is not Card`() {
+ listOf(
+ createMockCipherListView(
+ number = 1,
+ type = CipherListViewType.Login(createMockLoginListView(1)),
+ ),
+ createMockCipherListView(number = 2, type = CipherListViewType.SecureNote),
+ createMockCipherListView(number = 3, type = CipherListViewType.SshKey),
+ createMockCipherListView(number = 4, type = CipherListViewType.Identity),
+ )
+ .forEach { assertNull(it.card) }
+ }
+}
diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/sdk/repository/SdkCipherRepositoryTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/sdk/repository/SdkCipherRepositoryTest.kt
index e546b4b565..5bb5f3064e 100644
--- a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/sdk/repository/SdkCipherRepositoryTest.kt
+++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/sdk/repository/SdkCipherRepositoryTest.kt
@@ -13,6 +13,7 @@ import io.mockk.just
import io.mockk.mockk
import io.mockk.mockkStatic
import io.mockk.runs
+import io.mockk.unmockkStatic
import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.Assertions.assertEquals
@@ -41,7 +42,7 @@ class SdkCipherRepositoryTest {
@AfterEach
fun tearDown() {
- mockkStatic(
+ unmockkStatic(
SyncResponseJson.Cipher::toEncryptedSdkCipher,
Cipher::toEncryptedNetworkCipherResponse,
)
diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/repository/AuthenticatorBridgeRepositoryTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/repository/AuthenticatorBridgeRepositoryTest.kt
index 3368c8ee24..99a0ff2a34 100644
--- a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/repository/AuthenticatorBridgeRepositoryTest.kt
+++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/repository/AuthenticatorBridgeRepositoryTest.kt
@@ -94,6 +94,7 @@ class AuthenticatorBridgeRepositoryTest {
decryptedUserKey = USER_1_UNLOCK_KEY,
),
signingKey = null,
+ securityState = null,
),
)
} returns InitializeCryptoResult.Success.asSuccess()
@@ -109,6 +110,7 @@ class AuthenticatorBridgeRepositoryTest {
decryptedUserKey = USER_2_UNLOCK_KEY,
),
signingKey = null,
+ securityState = null,
),
)
} returns InitializeCryptoResult.Success.asSuccess()
@@ -206,6 +208,7 @@ class AuthenticatorBridgeRepositoryTest {
decryptedUserKey = USER_2_UNLOCK_KEY,
),
signingKey = null,
+ securityState = null,
),
)
scopedVaultSdkSource.initializeOrganizationCrypto(
@@ -244,6 +247,7 @@ class AuthenticatorBridgeRepositoryTest {
decryptedUserKey = USER_1_UNLOCK_KEY,
),
signingKey = null,
+ securityState = null,
),
)
scopedVaultSdkSource.initializeOrganizationCrypto(
@@ -266,6 +270,7 @@ class AuthenticatorBridgeRepositoryTest {
decryptedUserKey = USER_2_UNLOCK_KEY,
),
signingKey = null,
+ securityState = null,
),
)
scopedVaultSdkSource.initializeOrganizationCrypto(
@@ -300,6 +305,7 @@ class AuthenticatorBridgeRepositoryTest {
decryptedUserKey = USER_1_UNLOCK_KEY,
),
signingKey = null,
+ securityState = null,
),
)
} returns InitializeCryptoResult.AuthenticationError(error = Throwable()).asSuccess()
@@ -321,6 +327,7 @@ class AuthenticatorBridgeRepositoryTest {
decryptedUserKey = USER_1_UNLOCK_KEY,
),
signingKey = null,
+ securityState = null,
),
)
scopedVaultSdkSource.initializeCrypto(
@@ -334,6 +341,7 @@ class AuthenticatorBridgeRepositoryTest {
decryptedUserKey = USER_2_UNLOCK_KEY,
),
signingKey = null,
+ securityState = null,
),
)
scopedVaultSdkSource.initializeOrganizationCrypto(
diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSourceTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSourceTest.kt
index 996bad15ee..9d1c871b9d 100644
--- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSourceTest.kt
+++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/VaultSdkSourceTest.kt
@@ -1,6 +1,5 @@
package com.x8bit.bitwarden.data.vault.datasource.sdk
-import com.bitwarden.core.DateTime
import com.bitwarden.core.DeriveKeyConnectorRequest
import com.bitwarden.core.DerivePinKeyResponse
import com.bitwarden.core.InitOrgCryptoRequest
@@ -71,6 +70,9 @@ import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.Test
import java.security.MessageDigest
+import java.time.Clock
+import java.time.Instant
+import java.time.ZoneOffset
@Suppress("LargeClass")
class VaultSdkSourceTest {
@@ -1030,7 +1032,7 @@ class VaultSdkSourceTest {
val totpResponse = TotpResponse("TestCode", 30u)
coEvery { clientVault.generateTotp(any(), any()) } returns totpResponse
- val time = DateTime.now()
+ val time = FIXED_CLOCK.instant()
val result = vaultSdkSource.generateTotp(
userId = userId,
totp = "Totp",
@@ -1469,3 +1471,7 @@ private val DEFAULT_FIDO_2_AUTH_REQUEST = AuthenticateFido2CredentialRequest(
isUserVerificationSupported = true,
selectedCipherView = createMockCipherView(number = 1),
)
+private val FIXED_CLOCK: Clock = Clock.fixed(
+ Instant.parse("2023-10-27T12:00:00Z"),
+ ZoneOffset.UTC,
+)
diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherListViewUtil.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherListViewUtil.kt
new file mode 100644
index 0000000000..335f41e512
--- /dev/null
+++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherListViewUtil.kt
@@ -0,0 +1,123 @@
+package com.x8bit.bitwarden.data.vault.datasource.sdk.model
+
+import com.bitwarden.vault.CardListView
+import com.bitwarden.vault.CipherListView
+import com.bitwarden.vault.CipherListViewType
+import com.bitwarden.vault.CipherPermissions
+import com.bitwarden.vault.CipherRepromptType
+import com.bitwarden.vault.CopyableCipherFields
+import com.bitwarden.vault.Fido2CredentialListView
+import com.bitwarden.vault.LocalDataView
+import com.bitwarden.vault.LoginListView
+import com.bitwarden.vault.LoginUriView
+import java.time.Instant
+import java.time.ZonedDateTime
+
+/**
+ * Default date time used for [ZonedDateTime] properties of mock objects.
+ */
+private const val DEFAULT_TIMESTAMP = "2023-10-27T12:00:00Z"
+
+/**
+ * Creates a mock [CipherListView] for testing. Defaults to a Login cipher. Set [type] to override
+ * the default behavior.
+ */
+@Suppress("LongParameterList")
+fun createMockCipherListView(
+ number: Int,
+ id: String = "mockId-$number",
+ organizationId: String? = "mockOrganizationId-$number",
+ folderId: String? = "mockId-$number",
+ type: CipherListViewType = CipherListViewType.Login(
+ createMockLoginListView(number = 1),
+ ),
+ reprompt: CipherRepromptType = CipherRepromptType.NONE,
+ name: String = "mockName-$number",
+ favorite: Boolean = false,
+ collectionIds: List = listOf("mockId-$number"),
+ revisionDate: Instant = Instant.parse(DEFAULT_TIMESTAMP),
+ creationDate: Instant = Instant.parse(DEFAULT_TIMESTAMP),
+ attachments: UInt = 0U,
+ organizationUseTotp: Boolean = false,
+ edit: Boolean = false,
+ viewPassword: Boolean = false,
+ permissions: CipherPermissions? = createMockSdkCipherPermissions(),
+ localData: LocalDataView? = null,
+ key: String = "mockKey-$number",
+ subtitle: String = "mockSubtitle-$number",
+ hasOldAttachments: Boolean = false,
+ copyableFields: List = emptyList(),
+ isDeleted: Boolean = false,
+): CipherListView = CipherListView(
+ id = id,
+ organizationId = organizationId,
+ folderId = folderId,
+ type = type,
+ reprompt = reprompt,
+ name = name,
+ favorite = favorite,
+ collectionIds = collectionIds,
+ revisionDate = revisionDate,
+ creationDate = creationDate,
+ deletedDate = if (isDeleted) Instant.parse(DEFAULT_TIMESTAMP) else null,
+ attachments = attachments,
+ organizationUseTotp = organizationUseTotp,
+ edit = edit,
+ viewPassword = viewPassword,
+ permissions = permissions,
+ localData = localData,
+ key = key,
+ subtitle = subtitle,
+ hasOldAttachments = hasOldAttachments,
+ copyableFields = copyableFields,
+)
+
+/**
+ * Creates a mock [LoginListView] for testing.
+ */
+@Suppress("LongParameterList")
+fun createMockLoginListView(
+ number: Int,
+ fido2Credentials: List = listOf(
+ createMockFido2CredentialListView(number = 1),
+ ),
+ hasFido2: Boolean = true,
+ username: String = "mockUsername-$number",
+ totp: String? = "mockTotp-$number",
+ uris: List = listOf(createMockUriView(number = 1)),
+): LoginListView = LoginListView(
+ fido2Credentials = fido2Credentials,
+ hasFido2 = hasFido2,
+ username = username,
+ totp = totp,
+ uris = uris,
+)
+
+/**
+ * Creates a mock [Fido2CredentialListView] for testing.
+ */
+@Suppress("LongParameterList")
+fun createMockFido2CredentialListView(
+ number: Int,
+ credentialId: String = "mockCredentialId-$number",
+ rpId: String = "mockRpId-$number",
+ userHandle: String = "mockUserHandle-$number",
+ userName: String = "mockUserName-$number",
+ userDisplayName: String = "mockUserDisplayName-$number",
+): Fido2CredentialListView = Fido2CredentialListView(
+ credentialId = credentialId,
+ rpId = rpId,
+ userHandle = userHandle,
+ userName = userName,
+ userDisplayName = userDisplayName,
+)
+
+/**
+ * Creates a mock [CardListView] for testing.
+ */
+fun createMockCardListView(
+ number: Int,
+ brand: String = "mockBrand-$number",
+): CardListView = CardListView(
+ brand = brand,
+)
diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/TotpCodeManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/TotpCodeManagerTest.kt
index a40245df00..579b4b0c59 100644
--- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/TotpCodeManagerTest.kt
+++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/TotpCodeManagerTest.kt
@@ -6,10 +6,13 @@ import com.bitwarden.core.data.util.asFailure
import com.bitwarden.core.data.util.asSuccess
import com.bitwarden.data.datasource.disk.base.FakeDispatcherManager
import com.bitwarden.data.manager.DispatcherManager
+import com.bitwarden.vault.CipherListViewType
import com.bitwarden.vault.CipherRepromptType
import com.bitwarden.vault.TotpResponse
import com.x8bit.bitwarden.data.vault.datasource.sdk.VaultSdkSource
+import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCipherListView
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCipherView
+import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockLoginListView
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockLoginView
import com.x8bit.bitwarden.data.vault.manager.model.VerificationCodeItem
import com.x8bit.bitwarden.ui.vault.feature.verificationcode.util.createVerificationCodeItem
@@ -129,4 +132,125 @@ class TotpCodeManagerTest {
assertEquals(DataState.Loaded(null), awaitItem())
}
}
+
+ @Test
+ @Suppress("MaxLineLength")
+ fun `getTotpCodesForCipherListViewsStateFlow should have loaded data with a valid values passed in`() =
+ runTest {
+ val cipherListViews = listOf(
+ createMockCipherListView(number = 1),
+ )
+ val totpResponse = TotpResponse("123456", 30u)
+ coEvery {
+ vaultSdkSource.generateTotpForCipherListView(
+ userId = any(),
+ cipherListView = any(),
+ time = any(),
+ )
+ } returns totpResponse.asSuccess()
+
+ val expected = createVerificationCodeItem()
+
+ totpCodeManager.getTotpCodesForCipherListViewsStateFlow(userId, cipherListViews).test {
+ assertEquals(DataState.Loaded(listOf(expected)), awaitItem())
+ }
+ }
+
+ @Test
+ @Suppress("MaxLineLength")
+ fun `getTotpCodesForCipherListViewsStateFlow should have loaded data with empty list if no totp code is provided`() =
+ runTest {
+ val totpResponse = TotpResponse("123456", 30u)
+ coEvery {
+ vaultSdkSource.generateTotpForCipherListView(
+ userId = any(),
+ cipherListView = any(),
+ time = any(),
+ )
+ } returns totpResponse.asSuccess()
+
+ val cipherListView = createMockCipherListView(
+ number = 1,
+ type = CipherListViewType.Login(
+ createMockLoginListView(
+ number = 1,
+ totp = null,
+ ),
+ ),
+ )
+
+ totpCodeManager.getTotpCodesForCipherListViewsStateFlow(userId, listOf(cipherListView))
+ .test {
+ assertEquals(DataState.Loaded(emptyList()), awaitItem())
+ }
+ }
+
+ @Suppress("MaxLineLength")
+ @Test
+ fun `getTotpCodesForCipherListViewsStateFlow should have loaded data with empty list if unable to generate auth code`() =
+ runTest {
+ coEvery {
+ vaultSdkSource.generateTotpForCipherListView(
+ userId = any(),
+ cipherListView = any(),
+ time = any(),
+ )
+ } returns Exception().asFailure()
+
+ val cipherListView = createMockCipherListView(
+ number = 1,
+ type = CipherListViewType.Login(createMockLoginListView(number = 1)),
+ )
+
+ totpCodeManager.getTotpCodesForCipherListViewsStateFlow(userId, listOf(cipherListView)).test {
+ assertEquals(DataState.Loaded(emptyList()), awaitItem())
+ }
+ }
+
+ @Test
+ @Suppress("MaxLineLength")
+ fun `getTotpCodeStateFlow from CipherListView should have loaded item with valid data passed in`() =
+ runTest {
+ val totpResponse = TotpResponse("123456", 30u)
+ coEvery {
+ vaultSdkSource.generateTotpForCipherListView(
+ userId = any(),
+ cipherListView = any(),
+ time = any(),
+ )
+ } returns totpResponse.asSuccess()
+
+ val cipherListView = createMockCipherListView(
+ number = 1,
+ reprompt = CipherRepromptType.PASSWORD,
+ )
+
+ val expected = createVerificationCodeItem().copy(hasPasswordReprompt = true)
+
+ totpCodeManager.getTotpCodeStateFlow(userId, cipherListView).test {
+ assertEquals(DataState.Loaded(expected), awaitItem())
+ }
+ }
+
+ @Test
+ fun `getTotpCodeFlow from CipherListView should have null data if unable to get item`() =
+ runTest {
+ val totpResponse = TotpResponse("123456", 30u)
+ coEvery {
+ vaultSdkSource.generateTotp(
+ userId = any(),
+ totp = any(),
+ time = any(),
+ )
+ } returns totpResponse.asSuccess()
+
+ val cipherListView = createMockCipherListView(
+ number = 1,
+ type = CipherListViewType.SshKey,
+ )
+
+ totpCodeManager.getTotpCodeStateFlow(userId, cipherListView).test {
+ assertEquals(DataState.Loaded(null), awaitItem())
+ }
+ }
}
diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/VaultLockManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/VaultLockManagerTest.kt
index 8005c480a4..62dabc134f 100644
--- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/VaultLockManagerTest.kt
+++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/manager/VaultLockManagerTest.kt
@@ -749,6 +749,7 @@ class VaultLockManagerTest {
decryptedUserKey = userAutoUnlockKey,
),
signingKey = null,
+ securityState = null,
),
)
} returns InitializeCryptoResult.Success.asSuccess()
@@ -774,6 +775,7 @@ class VaultLockManagerTest {
decryptedUserKey = userAutoUnlockKey,
),
signingKey = null,
+ securityState = null,
),
)
trustedDeviceManager.trustThisDeviceIfNecessary(userId = USER_ID)
@@ -907,6 +909,7 @@ class VaultLockManagerTest {
userKey = userKey,
),
signingKey = null,
+ securityState = null,
),
)
} returns InitializeCryptoResult.Success.asSuccess()
@@ -973,6 +976,7 @@ class VaultLockManagerTest {
userKey = userKey,
),
signingKey = null,
+ securityState = null,
),
)
vaultSdkSource.initializeOrganizationCrypto(
@@ -1007,6 +1011,7 @@ class VaultLockManagerTest {
userKey = userKey,
),
signingKey = null,
+ securityState = null,
),
)
} returns InitializeCryptoResult.Success.asSuccess()
@@ -1084,6 +1089,7 @@ class VaultLockManagerTest {
userKey = userKey,
),
signingKey = null,
+ securityState = null,
),
)
vaultSdkSource.initializeOrganizationCrypto(
@@ -1119,6 +1125,7 @@ class VaultLockManagerTest {
userKey = userKey,
),
signingKey = null,
+ securityState = null,
),
)
} returns InitializeCryptoResult.AuthenticationError(error = error).asSuccess()
@@ -1166,6 +1173,7 @@ class VaultLockManagerTest {
userKey = userKey,
),
signingKey = null,
+ securityState = null,
),
)
}
@@ -1194,6 +1202,7 @@ class VaultLockManagerTest {
userKey = userKey,
),
signingKey = null,
+ securityState = null,
),
)
} returns InitializeCryptoResult.Success.asSuccess()
@@ -1248,6 +1257,7 @@ class VaultLockManagerTest {
userKey = userKey,
),
signingKey = null,
+ securityState = null,
),
)
}
@@ -1283,6 +1293,7 @@ class VaultLockManagerTest {
userKey = userKey,
),
signingKey = null,
+ securityState = null,
),
)
} returns error.asFailure()
@@ -1329,6 +1340,7 @@ class VaultLockManagerTest {
userKey = userKey,
),
signingKey = null,
+ securityState = null,
),
)
}
@@ -1357,6 +1369,7 @@ class VaultLockManagerTest {
userKey = userKey,
),
signingKey = null,
+ securityState = null,
),
)
} returns InitializeCryptoResult.Success.asSuccess()
@@ -1410,6 +1423,7 @@ class VaultLockManagerTest {
userKey = userKey,
),
signingKey = null,
+ securityState = null,
),
)
}
@@ -1444,6 +1458,7 @@ class VaultLockManagerTest {
userKey = userKey,
),
signingKey = null,
+ securityState = null,
),
)
} returns InitializeCryptoResult.Success.asSuccess()
@@ -1504,6 +1519,7 @@ class VaultLockManagerTest {
userKey = userKey,
),
signingKey = null,
+ securityState = null,
),
)
}
@@ -1630,6 +1646,7 @@ class VaultLockManagerTest {
userKey = userKey,
),
signingKey = null,
+ securityState = null,
),
)
} coAnswers {
@@ -1677,6 +1694,7 @@ class VaultLockManagerTest {
userKey = userKey,
),
signingKey = null,
+ securityState = null,
),
)
} returns InitializeCryptoResult.Success.asSuccess()
@@ -1713,6 +1731,7 @@ class VaultLockManagerTest {
userKey = userKey,
),
signingKey = null,
+ securityState = null,
),
)
}
diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryTest.kt
index bf83c055dc..cfc294d4bf 100644
--- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryTest.kt
+++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryTest.kt
@@ -15,6 +15,7 @@ import com.bitwarden.data.datasource.disk.base.FakeDispatcherManager
import com.bitwarden.data.manager.DispatcherManager
import com.bitwarden.exporters.ExportFormat
import com.bitwarden.fido.Fido2CredentialAutofillView
+import com.bitwarden.network.model.CipherTypeJson
import com.bitwarden.network.model.CreateFileSendResponse
import com.bitwarden.network.model.CreateSendJsonResponse
import com.bitwarden.network.model.FolderJsonRequest
@@ -41,6 +42,7 @@ import com.bitwarden.network.service.SyncService
import com.bitwarden.sdk.Fido2CredentialStore
import com.bitwarden.send.SendType
import com.bitwarden.send.SendView
+import com.bitwarden.vault.CipherType
import com.bitwarden.vault.CipherView
import com.bitwarden.vault.CollectionView
import com.bitwarden.vault.Folder
@@ -3178,7 +3180,7 @@ class VaultRepositoryTest {
)
every {
- totpCodeManager.getTotpCodeStateFlow(userId = userId, any())
+ totpCodeManager.getTotpCodeStateFlow(userId = userId, cipher = any())
} returns stateFlow
setupDataStateFlow(userId = userId)
@@ -4405,7 +4407,63 @@ class VaultRepositoryTest {
} returns "TestResult".asSuccess()
val expected = ExportVaultDataResult.Success(vaultData = "TestResult")
- val result = vaultRepository.exportVaultDataToString(format = format)
+ val result = vaultRepository.exportVaultDataToString(
+ format = format,
+ restrictedTypes = emptyList(),
+ )
+
+ coVerify {
+ vaultSdkSource.exportVaultDataToString(
+ userId = userId,
+ ciphers = listOf(userCipher.toEncryptedSdkCipher()),
+ folders = listOf(createMockSdkFolder(1)),
+ format = ExportFormat.Json,
+ )
+ }
+
+ assertEquals(
+ expected,
+ result,
+ )
+ }
+
+ @Test
+ fun `exportVaultDataToString with restrictedTypes should filter out restricted cipher types`() =
+ runTest {
+ val format = ExportFormat.Json
+ fakeAuthDiskSource.userState = MOCK_USER_STATE
+ val userId = "mockId-1"
+
+ val userCipher = createMockCipher(1).copy(
+ type = CipherTypeJson.LOGIN,
+ collectionIds = null,
+ deletedDate = null,
+ )
+ val userCipherCard = createMockCipher(2).copy(
+ type = CipherTypeJson.CARD,
+ collectionIds = null,
+ deletedDate = null,
+ )
+ val deletedCipher = createMockCipher(2).copy(collectionIds = null)
+ val orgCipher = createMockCipher(3).copy(deletedDate = null)
+
+ coEvery {
+ vaultDiskSource.getCiphersFlow(userId)
+ } returns flowOf(listOf(userCipher, userCipherCard, deletedCipher, orgCipher))
+
+ coEvery {
+ vaultDiskSource.getFolders(userId)
+ } returns flowOf(listOf(createMockFolder(1)))
+
+ coEvery {
+ vaultSdkSource.exportVaultDataToString(userId, any(), any(), format)
+ } returns "TestResult".asSuccess()
+
+ val expected = ExportVaultDataResult.Success(vaultData = "TestResult")
+ val result = vaultRepository.exportVaultDataToString(
+ format = format,
+ restrictedTypes = listOf(CipherType.CARD),
+ )
coVerify {
vaultSdkSource.exportVaultDataToString(
@@ -4442,7 +4500,10 @@ class VaultRepositoryTest {
} returns error.asFailure()
val expected = ExportVaultDataResult.Error(error = error)
- val result = vaultRepository.exportVaultDataToString(format = format)
+ val result = vaultRepository.exportVaultDataToString(
+ format = format,
+ restrictedTypes = emptyList(),
+ )
assertEquals(
expected,
diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginViewModelTest.kt
index 36b3490fd4..185a35a7b1 100644
--- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginViewModelTest.kt
+++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginViewModelTest.kt
@@ -97,6 +97,64 @@ class TwoFactorLoginViewModelTest : BaseViewModelTest() {
}
}
+ @Test
+ fun `init with email auth method and not new device verification should call resendEmail`() {
+ val initialState = DEFAULT_STATE.copy(
+ authMethod = TwoFactorAuthMethod.EMAIL,
+ isNewDeviceVerification = false,
+ )
+ coEvery { authRepository.resendVerificationCodeEmail() } returns ResendEmailResult.Success
+
+ createViewModel(state = initialState)
+
+ coVerify(exactly = 1) {
+ authRepository.resendVerificationCodeEmail()
+ }
+ }
+
+ @Test
+ fun `init with email auth method and new device verification should not call resendEmail`() {
+ val initialState = DEFAULT_STATE.copy(
+ authMethod = TwoFactorAuthMethod.EMAIL,
+ isNewDeviceVerification = true,
+ )
+ coEvery { authRepository.resendVerificationCodeEmail() } returns ResendEmailResult.Success
+
+ createViewModel(state = initialState)
+
+ coVerify(exactly = 0) {
+ authRepository.resendVerificationCodeEmail()
+ }
+ }
+
+ @Test
+ @Suppress("MaxLineLength")
+ fun `init with non-email auth method and not new device verification should not call resendEmail`() {
+ val initialState = DEFAULT_STATE.copy(
+ authMethod = TwoFactorAuthMethod.AUTHENTICATOR_APP,
+ isNewDeviceVerification = false,
+ )
+ coEvery { authRepository.resendVerificationCodeEmail() } returns ResendEmailResult.Success
+
+ createViewModel(state = initialState)
+
+ coVerify(exactly = 0) {
+ authRepository.resendVerificationCodeEmail()
+ }
+ }
+
+ @Test
+ @Suppress("MaxLineLength")
+ fun `init with non-email auth method and new device verification should not call resendEmail`() {
+ val initialState = DEFAULT_STATE.copy(
+ authMethod = TwoFactorAuthMethod.AUTHENTICATOR_APP,
+ isNewDeviceVerification = true,
+ )
+ createViewModel(state = initialState)
+
+ coVerify(exactly = 0) { authRepository.resendVerificationCodeEmail() }
+ }
+
@Test
fun `yubiKeyResultFlow update should populate the input field and attempt login`() {
val initialState = DEFAULT_STATE.copy(authMethod = TwoFactorAuthMethod.YUBI_KEY)
@@ -899,6 +957,27 @@ class TwoFactorLoginViewModelTest : BaseViewModelTest() {
)
}
+ @Test
+ @Suppress("MaxLineLength")
+ fun `sendVerificationCodeEmail with isUserInitiated false should not show loading and snackbar on success`() =
+ runTest {
+ coEvery { authRepository.resendVerificationCodeEmail() } returns ResendEmailResult.Success
+ val viewModel = createViewModel()
+ // Simulate initial email send (not user initiated)
+ viewModel.trySendAction(
+ TwoFactorLoginAction.Internal.ReceiveResendEmailResult(
+ ResendEmailResult.Success,
+ isUserInitiated = false,
+ ),
+ )
+ viewModel.stateEventFlow(backgroundScope) { stateFlow, eventFlow ->
+ // No loading dialog
+ assertEquals(DEFAULT_STATE, stateFlow.awaitItem())
+ // No snackbar
+ eventFlow.expectNoEvents()
+ }
+ }
+
@Test
fun `ResendEmailClick returns success should emit ShowSnackbar`() = runTest {
coEvery {
diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/exportvault/ExportVaultViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/exportvault/ExportVaultViewModelTest.kt
index 4511cd36da..4ddb129e24 100644
--- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/exportvault/ExportVaultViewModelTest.kt
+++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/exportvault/ExportVaultViewModelTest.kt
@@ -9,6 +9,7 @@ import com.bitwarden.network.model.PolicyTypeJson
import com.bitwarden.network.model.createMockPolicy
import com.bitwarden.ui.platform.base.BaseViewModelTest
import com.bitwarden.ui.util.asText
+import com.bitwarden.vault.CipherType
import com.x8bit.bitwarden.R
import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus
import com.x8bit.bitwarden.data.auth.datasource.sdk.model.PasswordStrength
@@ -18,8 +19,10 @@ import com.x8bit.bitwarden.data.auth.repository.model.RequestOtpResult
import com.x8bit.bitwarden.data.auth.repository.model.UserState
import com.x8bit.bitwarden.data.auth.repository.model.ValidatePasswordResult
import com.x8bit.bitwarden.data.auth.repository.model.VerifyOtpResult
+import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager
import com.x8bit.bitwarden.data.platform.manager.PolicyManager
import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState
+import com.x8bit.bitwarden.data.platform.manager.model.FlagKey
import com.x8bit.bitwarden.data.vault.manager.FileManager
import com.x8bit.bitwarden.data.vault.repository.VaultRepository
import com.x8bit.bitwarden.data.vault.repository.model.ExportVaultDataResult
@@ -49,6 +52,9 @@ class ExportVaultViewModelTest : BaseViewModelTest() {
every {
getActivePolicies(type = PolicyTypeJson.DISABLE_PERSONAL_VAULT_EXPORT)
} returns emptyList()
+ every {
+ getActivePolicies(type = PolicyTypeJson.RESTRICT_ITEM_TYPES)
+ } returns emptyList()
}
private val clock: Clock = Clock.fixed(
@@ -57,10 +63,27 @@ class ExportVaultViewModelTest : BaseViewModelTest() {
)
private val vaultRepository: VaultRepository = mockk {
- coEvery { exportVaultDataToString(any()) } returns ExportVaultDataResult.Success("data")
+ coEvery {
+ exportVaultDataToString(
+ format = any(),
+ restrictedTypes = emptyList(),
+ )
+ } returns ExportVaultDataResult.Success("data")
+ coEvery {
+ exportVaultDataToString(
+ format = any(),
+ restrictedTypes = listOf(CipherType.CARD),
+ )
+ } returns ExportVaultDataResult.Success("data")
}
private val fileManager: FileManager = mockk()
+ private val featureFlagManager: FeatureFlagManager = mockk {
+ every {
+ getFeatureFlag(FlagKey.RemoveCardPolicy)
+ } returns false
+ }
+
@Test
fun `initial state should be correct`() = runTest {
every {
@@ -106,7 +129,62 @@ class ExportVaultViewModelTest : BaseViewModelTest() {
viewModel.trySendAction(ExportVaultAction.ConfirmExportVaultClicked)
coVerify {
- vaultRepository.exportVaultDataToString(any())
+ vaultRepository.exportVaultDataToString(any(), emptyList())
+ }
+ }
+
+ @Suppress("MaxLineLength")
+ @Test
+ fun `ConfirmExportVaultClicked correct password should call exportVaultDataToString with restricted item types when policy and feature flags enabled`() {
+ val password = "password"
+ coEvery {
+ authRepository.validatePassword(
+ password = password,
+ )
+ } returns ValidatePasswordResult.Success(isValid = true)
+ every {
+ policyManager.getActivePolicies(type = PolicyTypeJson.RESTRICT_ITEM_TYPES)
+ } returns listOf(createMockPolicy())
+ every {
+ featureFlagManager.getFeatureFlag(FlagKey.RemoveCardPolicy)
+ } returns true
+
+ val viewModel = createViewModel()
+ viewModel.trySendAction(ExportVaultAction.PasswordInputChanged(password))
+
+ viewModel.trySendAction(ExportVaultAction.ConfirmExportVaultClicked)
+
+ coVerify {
+ vaultRepository.exportVaultDataToString(
+ format = any(),
+ restrictedTypes = listOf(CipherType.CARD),
+ )
+ }
+ }
+
+ @Suppress("MaxLineLength")
+ @Test
+ fun `ConfirmExportVaultClicked correct password should call exportVaultDataToString without restricted item types when policy is disabled and feature flag is enabled`() {
+ val password = "password"
+ coEvery {
+ authRepository.validatePassword(
+ password = password,
+ )
+ } returns ValidatePasswordResult.Success(isValid = true)
+ every {
+ featureFlagManager.getFeatureFlag(FlagKey.RemoveCardPolicy)
+ } returns true
+
+ val viewModel = createViewModel()
+ viewModel.trySendAction(ExportVaultAction.PasswordInputChanged(password))
+
+ viewModel.trySendAction(ExportVaultAction.ConfirmExportVaultClicked)
+
+ coVerify {
+ vaultRepository.exportVaultDataToString(
+ format = any(),
+ restrictedTypes = listOf(),
+ )
}
}
@@ -135,7 +213,7 @@ class ExportVaultViewModelTest : BaseViewModelTest() {
viewModel.stateFlow.value,
)
coVerify {
- vaultRepository.exportVaultDataToString(any())
+ vaultRepository.exportVaultDataToString(any(), emptyList())
}
}
@@ -168,7 +246,7 @@ class ExportVaultViewModelTest : BaseViewModelTest() {
viewModel.stateFlow.value,
)
coVerify(exactly = 0) {
- vaultRepository.exportVaultDataToString(any())
+ vaultRepository.exportVaultDataToString(any(), emptyList())
}
}
@@ -214,6 +292,7 @@ class ExportVaultViewModelTest : BaseViewModelTest() {
authRepository.validatePassword(password)
vaultRepository.exportVaultDataToString(
format = ExportFormat.EncryptedJson(filePassword),
+ restrictedTypes = emptyList(),
)
}
}
@@ -746,6 +825,7 @@ class ExportVaultViewModelTest : BaseViewModelTest() {
fileManager = fileManager,
vaultRepository = vaultRepository,
clock = clock,
+ featureFlagManager = featureFlagManager,
)
}
diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreenTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreenTest.kt
index 44a341be1d..c268c2ef1a 100644
--- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreenTest.kt
+++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreenTest.kt
@@ -2103,7 +2103,6 @@ class VaultItemScreenTest : BitwardenComposeTest() {
periodSeconds = 30,
timeLeftSeconds = 15,
verificationCode = "123456",
- totpCode = "testCode",
),
),
),
@@ -3226,7 +3225,6 @@ private val DEFAULT_LOGIN: VaultItemState.ViewState.Content.ItemType.Login =
periodSeconds = 30,
timeLeftSeconds = 15,
verificationCode = "123456",
- totpCode = "testCode",
),
fido2CredentialCreationDateText = null,
canViewTotpCode = true,
diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModelTest.kt
index 27e7147a8c..945eb5c01b 100644
--- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModelTest.kt
+++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModelTest.kt
@@ -2482,7 +2482,6 @@ class VaultItemViewModelTest : BaseViewModelTest() {
periodSeconds = 30,
timeLeftSeconds = 30,
verificationCode = "123456",
- totpCode = "mockTotp-1",
)
private fun setupMockUri() {
@@ -2549,8 +2548,6 @@ class VaultItemViewModelTest : BaseViewModelTest() {
passwordRevisionDate = R.string.password_last_updated.asText("12/31/69 06:16 PM"),
isPremiumUser = true,
totpCodeItemData = TotpCodeItemData(
- totpCode = "otpauth://totp/Example:alice@google.com" +
- "?secret=JBSWY3DPEHPK3PXP&issuer=Example",
verificationCode = "123456",
timeLeftSeconds = 15,
periodSeconds = 30,
diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/util/CipherViewExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/util/CipherViewExtensionsTest.kt
index 098f459bea..7c535c9395 100644
--- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/util/CipherViewExtensionsTest.kt
+++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/util/CipherViewExtensionsTest.kt
@@ -48,7 +48,6 @@ class CipherViewExtensionsTest {
periodSeconds = 30,
timeLeftSeconds = 15,
verificationCode = "123456",
- totpCode = "testCode",
),
clock = fixedClock,
canDelete = true,
@@ -82,7 +81,6 @@ class CipherViewExtensionsTest {
periodSeconds = 30,
timeLeftSeconds = 15,
verificationCode = "123456",
- totpCode = "testCode",
),
clock = fixedClock,
canDelete = true,
@@ -122,7 +120,6 @@ class CipherViewExtensionsTest {
periodSeconds = 30,
timeLeftSeconds = 15,
verificationCode = "123456",
- totpCode = "testCode",
),
clock = fixedClock,
canDelete = true,
diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/util/VaultItemTestUtil.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/util/VaultItemTestUtil.kt
index b2007b802b..61d2c43951 100644
--- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/util/VaultItemTestUtil.kt
+++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/util/VaultItemTestUtil.kt
@@ -278,7 +278,6 @@ fun createLoginContent(isEmpty: Boolean): VaultItemState.ViewState.Content.ItemT
periodSeconds = 30,
timeLeftSeconds = 15,
verificationCode = "123456",
- totpCode = "testCode",
)
.takeUnless { isEmpty },
fido2CredentialCreationDateText = R.string.created_x
diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/verificationcode/util/VerificationCodeDataUtil.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/verificationcode/util/VerificationCodeDataUtil.kt
index ba8fbe4014..8b0b980b71 100644
--- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/verificationcode/util/VerificationCodeDataUtil.kt
+++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/verificationcode/util/VerificationCodeDataUtil.kt
@@ -6,7 +6,6 @@ import com.x8bit.bitwarden.data.vault.manager.model.VerificationCodeItem
fun createVerificationCodeItem(number: Int = 1) =
VerificationCodeItem(
code = "123456",
- totpCode = "mockTotp-$number",
periodSeconds = 30,
id = "mockId-$number",
issueTime = 1698408000000,
diff --git a/authenticator/src/main/res/values-af-rZA/strings.xml b/authenticator/src/main/res/values-af-rZA/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-af-rZA/strings.xml
+++ b/authenticator/src/main/res/values-af-rZA/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-ar-rSA/strings.xml b/authenticator/src/main/res/values-ar-rSA/strings.xml
index 3fc1f6ecef..db435972b0 100644
--- a/authenticator/src/main/res/values-ar-rSA/strings.xml
+++ b/authenticator/src/main/res/values-ar-rSA/strings.xml
@@ -116,7 +116,7 @@
تخزين جميع تسجيلات الدخول الخاصة بك ومزامنة رموز التحقق مباشرة مع تطبيق المصادقة.
تنزيل الآن
المزامنة مع تطبيق Bitwarden
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
غير قادر على مزامنة الرموز من تطبيق Bitwarden. تأكد من تحديث كلا التطبيقين. لا يزال بإمكانك الوصول إلى الرموز الموجودة في تطبيق Bitwarden.
%1$s | %2$s
المزامنة مع تطبيق Bitwarden
diff --git a/authenticator/src/main/res/values-az-rAZ/strings.xml b/authenticator/src/main/res/values-az-rAZ/strings.xml
index bb202f9881..697ea071c3 100644
--- a/authenticator/src/main/res/values-az-rAZ/strings.xml
+++ b/authenticator/src/main/res/values-az-rAZ/strings.xml
@@ -116,7 +116,7 @@
Bütün girişlərinizi saxlayın və doğrulama kodlarını birbaşa Authenticator tətbiqi ilə sinxronlaşdırın.
İndi endir
Bitwarden tətbiqi ilə sinxronlaşdır
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Kodlar, Bitwarden tətbiqindən sinxronlaşdırıla bilmir. Hər iki tətbiqin güncəl olduğuna əmin olun. Mövcud kodlarınıza Bitwarden tətbiqində müraciət etməyə davam edə bilərsiniz.
%1$s | %2$s
Bitwarden tətbiqi ilə sinxronlaşdır
diff --git a/authenticator/src/main/res/values-be-rBY/strings.xml b/authenticator/src/main/res/values-be-rBY/strings.xml
index 2be731dd0a..972fa2009d 100644
--- a/authenticator/src/main/res/values-be-rBY/strings.xml
+++ b/authenticator/src/main/res/values-be-rBY/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-bg-rBG/strings.xml b/authenticator/src/main/res/values-bg-rBG/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-bg-rBG/strings.xml
+++ b/authenticator/src/main/res/values-bg-rBG/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-bn-rBD/strings.xml b/authenticator/src/main/res/values-bn-rBD/strings.xml
index 53b15f4787..4b25cfac20 100644
--- a/authenticator/src/main/res/values-bn-rBD/strings.xml
+++ b/authenticator/src/main/res/values-bn-rBD/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-bs-rBA/strings.xml b/authenticator/src/main/res/values-bs-rBA/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-bs-rBA/strings.xml
+++ b/authenticator/src/main/res/values-bs-rBA/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-ca-rES/strings.xml b/authenticator/src/main/res/values-ca-rES/strings.xml
index 2570730bfa..d7dcf0fc7b 100644
--- a/authenticator/src/main/res/values-ca-rES/strings.xml
+++ b/authenticator/src/main/res/values-ca-rES/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Descarregueu ara
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-cs-rCZ/strings.xml b/authenticator/src/main/res/values-cs-rCZ/strings.xml
index 739faa140c..f9a2f06ba2 100644
--- a/authenticator/src/main/res/values-cs-rCZ/strings.xml
+++ b/authenticator/src/main/res/values-cs-rCZ/strings.xml
@@ -116,7 +116,7 @@
Uložte všechny Vaše přihlašovací údaje a synchronizujte ověřovací kódy přímo s ověřovací aplikací.
Stáhnout nyní
Synchronizovat s aplikací Bitwarden
- Tato funkce zatím není dostupná pro vlastní hostované uživatele. Další informace
+ Další informace
Nelze synchronizovat kódy z aplikace Bitwarden. Zkontrolujte, zda jsou obě aplikace aktuální. Ke stávajícím kódům máte stále přístup v aplikaci Bitwarden.
%1$s | %2$s (%3$d)
Synchronizovat s aplikací Bitwarden
diff --git a/authenticator/src/main/res/values-cy-rGB/strings.xml b/authenticator/src/main/res/values-cy-rGB/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-cy-rGB/strings.xml
+++ b/authenticator/src/main/res/values-cy-rGB/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-da-rDK/strings.xml b/authenticator/src/main/res/values-da-rDK/strings.xml
index fb3b37d00f..42ee90cf6e 100644
--- a/authenticator/src/main/res/values-da-rDK/strings.xml
+++ b/authenticator/src/main/res/values-da-rDK/strings.xml
@@ -116,7 +116,7 @@
Gem alle logins og synk bekræftelseskoder direkte med Authenticator-appen.
Download nu
Synk med Bitwarden-appen
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Kan ikke synke koder fra Bitwarden-appen. Sørg for, at begge apps er opdaterede. Eksisterende koder kan stadig tilgås i Bitwarden-appen.
%1$s | %2$s
Synk med Bitwarden-appen
diff --git a/authenticator/src/main/res/values-de-rDE/strings.xml b/authenticator/src/main/res/values-de-rDE/strings.xml
index 038bdbd3e7..e87ec07961 100644
--- a/authenticator/src/main/res/values-de-rDE/strings.xml
+++ b/authenticator/src/main/res/values-de-rDE/strings.xml
@@ -116,7 +116,7 @@
Speicher alle deine Zugangsdaten und synchronisiere Verifizierungscodes direkt mit der Authenticator-App.
Jetzt herunterladen
Mit der Bitwarden-App synchronisieren
- Diese Funktion ist für selbst gehostete Benutzer noch nicht verfügbar. Erfahre mehr
+ Learn more
Codes aus der Bitwarden-App konnten nicht synchronisiert werden. Stelle sicher, dass beide Apps auf dem neusten Stand sind. Du kannst weiterhin auf deine existierenden Codes in der Bitwarden-App zugreifen.
%1$s | %2$s
Mit der Bitwarden-App synchronisieren
diff --git a/authenticator/src/main/res/values-el-rGR/strings.xml b/authenticator/src/main/res/values-el-rGR/strings.xml
index 1280648fbc..2fc319d564 100644
--- a/authenticator/src/main/res/values-el-rGR/strings.xml
+++ b/authenticator/src/main/res/values-el-rGR/strings.xml
@@ -116,7 +116,7 @@
Αποθηκεύστε όλες τις συνδέσεις σας και συγχρονίστε απευθείας τους κωδικούς επαλήθευσης με το Authenticator.
Λήψη τώρα
Συγχρονισμός με την εφαρμογή Bitwarden
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Δεν είναι δυνατός ο συγχρονισμός κωδικών από το Bitwarden. Βεβαιωθείτε ότι έχουν ενημερωθεί και οι δύο εφαρμογές. Μπορείτε ακόμα να αποκτήσετε πρόσβαση στους υπάρχοντες κωδικούς σας στο Bitwarden.
%1$s | %2$s
Συγχρονισμός με την εφαρμογή Bitwarden
diff --git a/authenticator/src/main/res/values-en-rGB/strings.xml b/authenticator/src/main/res/values-en-rGB/strings.xml
index 1f5d8484d1..31edb00e6e 100644
--- a/authenticator/src/main/res/values-en-rGB/strings.xml
+++ b/authenticator/src/main/res/values-en-rGB/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-en-rIN/strings.xml b/authenticator/src/main/res/values-en-rIN/strings.xml
index 1f5d8484d1..31edb00e6e 100644
--- a/authenticator/src/main/res/values-en-rIN/strings.xml
+++ b/authenticator/src/main/res/values-en-rIN/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-es-rES/strings.xml b/authenticator/src/main/res/values-es-rES/strings.xml
index 8d7e2e90f5..cc727de76f 100644
--- a/authenticator/src/main/res/values-es-rES/strings.xml
+++ b/authenticator/src/main/res/values-es-rES/strings.xml
@@ -116,7 +116,7 @@
Almacena todos tus inicios de sesión y sincroniza los códigos de verificación directamente con la aplicación Authenticator.
Descargar ahora
Sincronizar con la aplicación Bitwarden
- Esta característica aún no está disponible para usuarios autoalojados. Más información
+ Learn more
No se pueden sincronizar los códigos desde la aplicación de Bitwarden. Asegúrate de que ambas aplicaciones estén actualizadas. Aún puedes acceder a tus códigos existentes en la aplicación de Bitwarden.
%1$s | %2$s
Sincronizar con la aplicación Bitwarden
diff --git a/authenticator/src/main/res/values-et-rEE/strings.xml b/authenticator/src/main/res/values-et-rEE/strings.xml
index 4c76cc75df..7897667f67 100644
--- a/authenticator/src/main/res/values-et-rEE/strings.xml
+++ b/authenticator/src/main/res/values-et-rEE/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Laadi kohe alla
Sünkroniseeri Bitwardeni rakendusega
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-eu-rES/strings.xml b/authenticator/src/main/res/values-eu-rES/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-eu-rES/strings.xml
+++ b/authenticator/src/main/res/values-eu-rES/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-fa-rIR/strings.xml b/authenticator/src/main/res/values-fa-rIR/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-fa-rIR/strings.xml
+++ b/authenticator/src/main/res/values-fa-rIR/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-fi-rFI/strings.xml b/authenticator/src/main/res/values-fi-rFI/strings.xml
index d1ed616a6b..dcfb8860d6 100644
--- a/authenticator/src/main/res/values-fi-rFI/strings.xml
+++ b/authenticator/src/main/res/values-fi-rFI/strings.xml
@@ -116,7 +116,7 @@
Varastoi kaikki kirjautumistietosi ja synkronoi vahvistuskoodit suoraan todentajasovelluksella.
Lataa nyt
Synkronoi Bitwarden sovelluksen kanssa
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Koodien synkronointi Bitwarden sovelluksesta epäonnistui. Varmista, että molemmat sovellukset ovat ajan tasalla. Voit edelleen käyttää olemassa olevia koodejasi Bitwarden sovelluksessa.
%1$s | %2$s
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-fil-rPH/strings.xml b/authenticator/src/main/res/values-fil-rPH/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-fil-rPH/strings.xml
+++ b/authenticator/src/main/res/values-fil-rPH/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-fr-rFR/strings.xml b/authenticator/src/main/res/values-fr-rFR/strings.xml
index 2747eb83ca..2176c0ee66 100644
--- a/authenticator/src/main/res/values-fr-rFR/strings.xml
+++ b/authenticator/src/main/res/values-fr-rFR/strings.xml
@@ -15,34 +15,34 @@
Bitwarden Authenticator
Nom
Add Item Rotation
- Scan a QR code
- Scan QR code
- Point your camera at the QR code.
- Cannot scan QR code? Enter key manually
+ Scanner un code QR
+ Scanner le code QR
+ Pointez votre caméra sur le code QR.
+ Impossible de scanner le code QR ? Saisir la clé manuellement
Saisir la clé manuellement
- Cannot add authenticator key?
+ Problème lors de l\'ajout de la clé d\'authentification ?
No thanks
Paramètres
Enable camera permission to use the scanner
Empty Item Listing
You don\'t have any items to display.
- Add a new code to secure your accounts.
- Add code
- Cannot read key.
- Verification code added
+ Ajouter un nouveau code pour sécuriser vos comptes.
+ Ajouter le code
+ Impossible de lire la clé.
+ Code de vérification ajouté
Nom d\'utilisateur
- Refresh period
- Algorithm
+ Fréquence de mise à jour
+ Algorithme
Hide
Show
- Advanced
+ Avancé
Collapse advanced options
- Number of digits
+ Nombre de chiffres
Sauvegarder
Le champ %1$s est requis.
%d seconds
Saving
- Item saved
+ Élément enregistré
Information
OTP type
Codes de vérification
@@ -51,33 +51,33 @@
Clear
Search codes
Options
- Try again
+ Réessayer
Apparence
- Par défaut (Système)
+ Par défaut (système)
Thème
Sombre
Clair
La langue a été changée en %1$s. Veuillez redémarrer l\'application pour voir le changement
- Secure your accounts with Bitwarden Authenticator
+ Sécurisez vos comptes avec Bitwarden Authenticator
Get verification codes for all your accounts that support 2-step verification.
- Use your device camera to scan codes
- Scan the QR code in your 2-step verification settings for any account.
+ Utilisez l\'appareil photo pour scanner les codes
+ Scanner le code QR dans les paramètres de double authentification pour n\'importe quel compte.
Sign in using unique codes
When using 2-step verification, you\'ll enter your username and password and a code generated in this app.
- Skip
- Help
- Launch tutorial
+ Passer
+ Aide
+ Lancer le tutoriel
%1$s copié
Delete item
Élément supprimé
Supprimer
Do you really want to permanently delete? This cannot be undone.
- Data
- Export
+ Données
+ Exporter
Loading
Confirm export
This export contains your data in an unencrypted format. You should not store or send the exported file over unsecure channels (such as email). Delete it immediately after you are done using it.
- File format
+ Format de fichier
There was a problem exporting your vault. If the problem persists, you\'ll need to export from the web vault.
Data exported successfully
Déverrouiller avec %1$s
@@ -94,48 +94,48 @@
Privacy policy
Poursuivre vers la politique de confidentialité ?
Check out our privacy policy on bitwarden.com
- Key
+ Clé
Create Verification code
- Key is required.
+ La clé est obligatoire.
Name is required.
Submit crash logs
There was a problem importing your vault.
File Source
- Import
+ Importer
Vault import successful
- Key is invalid.
- Favorite
+ La clé est invalide.
+ Favori
Favoris
- Backup
- Data backup
- Bitwarden Authenticator data is backed up and can be restored with your regularly scheduled device backups.
+ Sauvegarder
+ Sauvegarde des données
+ Les données de Bitwarden Authenticator sont sauvegardées et peuvent être restaurées avec vos sauvegardes d\'appareil programmées régulièrement.
En savoir plus
Importing from 2FAS password protected files is not supported. Try again with an exported file that is not password protected.
Importing Bitwarden CSV files is not supported. Try again with an exported JSON file.
- Download the Bitwarden app
+ Télécharger l\'app Bitwarden
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
- Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Synchroniser avec l\'app Bitwarden
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
- Sync with the Bitwarden app
+ Synchroniser avec l\'app Bitwarden
In order to view all of your verification codes, you’ll need to allow for syncing on all of your accounts.
Take me to the app settings
Something went wrong
Please try again
Copy to Bitwarden vault
- Default save option
- Save to Bitwarden
- Save here
+ Option de sauvegarde par défaut
+ Enregistrer sur Bitwarden
+ Enregistrer ici
None
- Select where you would like to save new verification codes.
+ Sélectionner où vous souhaitez sauvegarder les nouveaux codes de vérification.
Confirm
Verification code created
Save this authenticator key here, or add it to a login in your Bitwarden app.
Save option as default
Account synced from Bitwarden app
- Local codes (%1$d)
+ Codes locaux (%1$d)
Required Information Missing
"Required info is missing (e.g., ‘services’ or ‘secret’). Check your file and try again. Visit bitwarden.com/help for support"
"File Could Not Be Processed"
diff --git a/authenticator/src/main/res/values-gl-rES/strings.xml b/authenticator/src/main/res/values-gl-rES/strings.xml
index 41858eda7b..01f2e9ae71 100644
--- a/authenticator/src/main/res/values-gl-rES/strings.xml
+++ b/authenticator/src/main/res/values-gl-rES/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-hi-rIN/strings.xml b/authenticator/src/main/res/values-hi-rIN/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-hi-rIN/strings.xml
+++ b/authenticator/src/main/res/values-hi-rIN/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-hr-rHR/strings.xml b/authenticator/src/main/res/values-hr-rHR/strings.xml
index 83714a607c..4fbed1c5f2 100644
--- a/authenticator/src/main/res/values-hr-rHR/strings.xml
+++ b/authenticator/src/main/res/values-hr-rHR/strings.xml
@@ -116,7 +116,7 @@
Pohrani sve svoje prijave i sinkroniziraj kôdove za provjeru izravno s aplikacijom Autentifikator.
Preuzmi sada
Sinkroniziraj s Bitwarden aplikacijom
- Ova značajka još nije dostupna za korsnike na vlastitom poslužitelju. Saznaj više
+ Saznaj više
Nije moguće sinkronizirati kodove iz aplikacije Bitwarden. Provjeri jesu li obje aplikacije ažurirane. I dalje možeš pristupiti svojim postojećim kodovima u aplikaciji Bitwarden.
%1$s | %2$s (%3$d)
Sinkroniziraj s Bitwardenom
diff --git a/authenticator/src/main/res/values-hu-rHU/strings.xml b/authenticator/src/main/res/values-hu-rHU/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-hu-rHU/strings.xml
+++ b/authenticator/src/main/res/values-hu-rHU/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-in-rID/strings.xml b/authenticator/src/main/res/values-in-rID/strings.xml
index c41a879a30..a0baae7f45 100644
--- a/authenticator/src/main/res/values-in-rID/strings.xml
+++ b/authenticator/src/main/res/values-in-rID/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-it-rIT/strings.xml b/authenticator/src/main/res/values-it-rIT/strings.xml
index 010a08ef6b..930354a967 100644
--- a/authenticator/src/main/res/values-it-rIT/strings.xml
+++ b/authenticator/src/main/res/values-it-rIT/strings.xml
@@ -116,7 +116,7 @@
Memorizza tutti i login e sincronizza i codici di verifica direttamente con l\'app Authenticator.
Scarica adesso
Sincronizza con l\'app Bitwarden
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Impossibile sincronizzare i codici dall\'app Bitwarden. Assicurati che entrambe le app siano aggiornate. Puoi comunque accedere ai tuoi codici esistenti nell\'app Bitwarden.
%1$s | %2$s
Sincronizza con l\'app Bitwarden
diff --git a/authenticator/src/main/res/values-iw-rIL/strings.xml b/authenticator/src/main/res/values-iw-rIL/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-iw-rIL/strings.xml
+++ b/authenticator/src/main/res/values-iw-rIL/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-ja-rJP/strings.xml b/authenticator/src/main/res/values-ja-rJP/strings.xml
index 7d09d25162..b562970c5e 100644
--- a/authenticator/src/main/res/values-ja-rJP/strings.xml
+++ b/authenticator/src/main/res/values-ja-rJP/strings.xml
@@ -116,7 +116,7 @@
すべてのログイン情報を格納し、認証アプリに認証コードを直接同期します。
今すぐダウンロード
Bitwarden アプリと同期
- セルフホスティングのユーザーは、まだこの機能をご利用いただけません。 詳細
+ Learn more
Bitwarden アプリからコードを同期できません。両方のアプリが最新であることを確認してください。既存のコードには Bitwarden アプリでアクセスできます。
%1$s | %2$s
Bitwarden アプリと同期
diff --git a/authenticator/src/main/res/values-ka-rGE/strings.xml b/authenticator/src/main/res/values-ka-rGE/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-ka-rGE/strings.xml
+++ b/authenticator/src/main/res/values-ka-rGE/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-kn-rIN/strings.xml b/authenticator/src/main/res/values-kn-rIN/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-kn-rIN/strings.xml
+++ b/authenticator/src/main/res/values-kn-rIN/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-ko-rKR/strings.xml b/authenticator/src/main/res/values-ko-rKR/strings.xml
index 696eb584a6..60115bf19c 100644
--- a/authenticator/src/main/res/values-ko-rKR/strings.xml
+++ b/authenticator/src/main/res/values-ko-rKR/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-lt-rLT/strings.xml b/authenticator/src/main/res/values-lt-rLT/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-lt-rLT/strings.xml
+++ b/authenticator/src/main/res/values-lt-rLT/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-lv-rLV/strings.xml b/authenticator/src/main/res/values-lv-rLV/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-lv-rLV/strings.xml
+++ b/authenticator/src/main/res/values-lv-rLV/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-ml-rIN/strings.xml b/authenticator/src/main/res/values-ml-rIN/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-ml-rIN/strings.xml
+++ b/authenticator/src/main/res/values-ml-rIN/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-mr-rIN/strings.xml b/authenticator/src/main/res/values-mr-rIN/strings.xml
index 77c739ebbd..a8fbeb0ce2 100644
--- a/authenticator/src/main/res/values-mr-rIN/strings.xml
+++ b/authenticator/src/main/res/values-mr-rIN/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-my-rMM/strings.xml b/authenticator/src/main/res/values-my-rMM/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-my-rMM/strings.xml
+++ b/authenticator/src/main/res/values-my-rMM/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-nb-rNO/strings.xml b/authenticator/src/main/res/values-nb-rNO/strings.xml
index 23334859c2..4781237bbf 100644
--- a/authenticator/src/main/res/values-nb-rNO/strings.xml
+++ b/authenticator/src/main/res/values-nb-rNO/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Last ned nå
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-ne-rNP/strings.xml b/authenticator/src/main/res/values-ne-rNP/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-ne-rNP/strings.xml
+++ b/authenticator/src/main/res/values-ne-rNP/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-nl-rNL/strings.xml b/authenticator/src/main/res/values-nl-rNL/strings.xml
index 22413d9178..9b4f04ad21 100644
--- a/authenticator/src/main/res/values-nl-rNL/strings.xml
+++ b/authenticator/src/main/res/values-nl-rNL/strings.xml
@@ -116,7 +116,7 @@
Sla al je logins op en synchroniseer verificatiecodes direct met de Authenticator app.
Nu downloaden
Synchroniseren met Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Kan geen codes synchroniseren vanuit de Bitwarden app. Zorg ervoor dat beide apps up-to-date zijn. Je hebt nog steeds toegang tot je bestaande codes in de Bitwarden app.
%1$s | %2$s
Synchroniseren met de Bitwarden app
diff --git a/authenticator/src/main/res/values-nn-rNO/strings.xml b/authenticator/src/main/res/values-nn-rNO/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-nn-rNO/strings.xml
+++ b/authenticator/src/main/res/values-nn-rNO/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-or-rIN/strings.xml b/authenticator/src/main/res/values-or-rIN/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-or-rIN/strings.xml
+++ b/authenticator/src/main/res/values-or-rIN/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-pl-rPL/strings.xml b/authenticator/src/main/res/values-pl-rPL/strings.xml
index fd89048ab1..bd8b5e1f03 100644
--- a/authenticator/src/main/res/values-pl-rPL/strings.xml
+++ b/authenticator/src/main/res/values-pl-rPL/strings.xml
@@ -116,7 +116,7 @@
Przechowuj wszystkie swoje logowania i synchronizuj kody weryfikacyjne bezpośrednio z aplikacją Authenticator.
Pobierz teraz
Synchronizacja z aplikacją Bitwarden
- Ta funkcja nie jest jeszcze dostępna dla użytkowników korzystających z hostingu samodzielnego. Dowiedz się więcej
+ Dowiedz się więcej
Nie można zsynchronizować kodów z aplikacji Bitwarden. Upewnij się, że obie aplikacje są aktualne. Nadal możesz uzyskać dostęp do istniejących kodów w aplikacji Bitwarden.
%1$s | %2$s
Synchronizuj z aplikacją Bitwarden
diff --git a/authenticator/src/main/res/values-pt-rBR/strings.xml b/authenticator/src/main/res/values-pt-rBR/strings.xml
index 0e1e57e0e0..8e250eb78a 100644
--- a/authenticator/src/main/res/values-pt-rBR/strings.xml
+++ b/authenticator/src/main/res/values-pt-rBR/strings.xml
@@ -116,7 +116,7 @@
Armazene todos os seus logins e sincronize códigos de verificação diretamente com o app Autenticador.
Baixe agora
Sincronizar com o aplicativo Bitwarden
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Não é possível sincronizar os códigos do aplicativo Bitwarden. Certifique-se de que ambos os aplicativos estão atualizados. Você ainda pode acessar os códigos existentes no aplicativo Bitwarden.
%1$s ├%2$s
Sincronizar com o aplicativo Bitwarden
diff --git a/authenticator/src/main/res/values-pt-rPT/strings.xml b/authenticator/src/main/res/values-pt-rPT/strings.xml
index b71c24ea2f..a32ea354e4 100644
--- a/authenticator/src/main/res/values-pt-rPT/strings.xml
+++ b/authenticator/src/main/res/values-pt-rPT/strings.xml
@@ -116,7 +116,7 @@
Armazene todas as suas credenciais e sincronize os códigos de verificação diretamente com a app Authenticator.
Descarregar agora
Sincronizar com a app Bitwarden
- Esta funcionalidade ainda não está disponível para utilizadores auto-hospedados. Saiba mais
+ Saber mais
Não é possível sincronizar códigos da app Bitwarden. Certifique-se de que ambas as aplicações estão atualizadas. Ainda pode aceder aos seus códigos existentes na app Bitwarden.
%1$s | %2$s (%3$d)
Sincronizar com a app Bitwarden
diff --git a/authenticator/src/main/res/values-ro-rRO/strings.xml b/authenticator/src/main/res/values-ro-rRO/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-ro-rRO/strings.xml
+++ b/authenticator/src/main/res/values-ro-rRO/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-ru-rRU/strings.xml b/authenticator/src/main/res/values-ru-rRU/strings.xml
index 66f29d8dcb..58c27d41ee 100644
--- a/authenticator/src/main/res/values-ru-rRU/strings.xml
+++ b/authenticator/src/main/res/values-ru-rRU/strings.xml
@@ -118,7 +118,7 @@
Храните все свои логины и синхронизируйте коды проверки непосредственно с приложением \"Аутентификатор\".
Скачать сейчас
Синхронизация с приложением Bitwarden
- Эта функция пока недоступна для пользователей, использующих собственный хостинг. Узнать больше
+ Узнать больше
Невозможно синхронизировать коды из приложения Bitwarden. Убедитесь, что оба приложения обновлены. Вы по-прежнему можете получить доступ к существующим кодам в приложении Bitwarden.
%1$s | %2$s
Синхронизация с приложением Bitwarden
diff --git a/authenticator/src/main/res/values-si-rLK/strings.xml b/authenticator/src/main/res/values-si-rLK/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-si-rLK/strings.xml
+++ b/authenticator/src/main/res/values-si-rLK/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-sk-rSK/strings.xml b/authenticator/src/main/res/values-sk-rSK/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-sk-rSK/strings.xml
+++ b/authenticator/src/main/res/values-sk-rSK/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-sl-rSI/strings.xml b/authenticator/src/main/res/values-sl-rSI/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-sl-rSI/strings.xml
+++ b/authenticator/src/main/res/values-sl-rSI/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-sr-rSP/strings.xml b/authenticator/src/main/res/values-sr-rSP/strings.xml
index 7f4ab43ff4..6d38b46443 100644
--- a/authenticator/src/main/res/values-sr-rSP/strings.xml
+++ b/authenticator/src/main/res/values-sr-rSP/strings.xml
@@ -116,7 +116,7 @@
Чувајте све своје пријаве и синхронизујте верификационе кôдове директно са апликацијом Authenticator.
Преузми сада
Синхронизујте са апликацијом Bitwarden
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Није могуће синхронизовати кодове из апликације Bitwarden. Уверите се да су обе апликације ажуриране. И даље можете да приступите својим постојећим кодовима у апликацији Bitwarden.
%1$s | %2$s
Синхронизујте са апликацијом Bitwarden
diff --git a/authenticator/src/main/res/values-sv-rSE/strings.xml b/authenticator/src/main/res/values-sv-rSE/strings.xml
index fd71f7a265..3bdf5067ea 100644
--- a/authenticator/src/main/res/values-sv-rSE/strings.xml
+++ b/authenticator/src/main/res/values-sv-rSE/strings.xml
@@ -16,9 +16,9 @@
Namn
Lägg till objektrotation
Skanna en QR-kod
- Skanna QR-kod
+ Skanna QR-kod
Rikta din kamera mot QR-koden.
- Kan inte skanna QR-koden? Ange nyckeln manuellt
+ Kan du inte skanna QR-koden? Ange nyckeln manuellt
Ange nyckel manuellt.
Kan inte lägga till authenticator-nyckeln?
Nej tack
@@ -59,7 +59,7 @@
Ljust
Språket har ändrats till %1$s. Starta om appen för att aktivera ändringen
Säkra dina konton med Bitwarden Authenticator
- Få verifieringskoder för alla dina konton som stöder tvåstegsverifiering.
+ Få verifieringskoder för alla dina konton som har stöd för tvåstegsverifiering.
Använd enhetens kamera för att skanna koder
Skanna QR-koden i inställningarna för din tvåstegsverifiering för alla konton.
Logga in med unika koder
@@ -103,7 +103,7 @@
Filkälla
Importera
Import av valv lyckades
- Nyckel är ogiltig.
+ Nyckeln är ogiltig.
Favorit
Favoriter
Säkerhetskopiera
@@ -116,17 +116,17 @@
Spara alla inloggningar och synkronisera verifieringskoder direkt med Authenticator-appen.
Ladda ner nu
Synkronisera med Bitwarden-appen
- Denna funktion är ännu inte tillgänglig för användare med egen hosting. Läs mer
+ Läs mer
Det går inte att synkronisera koder från Bitwarden-appen. Se till att båda apparna är uppdaterade. Du kan fortfarande komma åt dina befintliga koder i Bitwarden-appen.
%1$s | %2$s
Synkronisera med Bitwarden-appen
För att kunna se alla dina verifieringskoder måste du tillåta synkronisering på alla dina konton.
Ta mig till appinställningarna
- Något gick fel
+ Någonting gick fel
Försök igen
Kopiera till Bitwarden-valv
- Standardalternativ
- Spara på Bitwarden
+ Spara alternativ som standard
+ Spara till Bitwarden
Spara här
Ingen
Välj var du vill spara nya verifieringskoder.
@@ -135,11 +135,11 @@
Spara denna autentiseringsnyckel här eller lägg till den i en inloggning i din Bitwarden-app.
Spara alternativ som standard
Konto synkroniserat från Bitwarden-appen
- Lokala koder
+ Lokala koder (%1$d)
Nödvändig information saknas
- "Nödvändig information saknas (t.ex. ”services” eller ”secret”). Kontrollera din fil och försök igen. Besök bitwarden.com/help för support."
+ "Nödvändig information saknas (t.ex. ”services” eller ”secret”). Kontrollera din fil och försök igen. Besök bitwarden.com/help för support"
"Filen kunde inte behandlas"
- "Filen kunde inte bearbetas. Kontrollera att det är giltig JSON och försök igen. Behöver du hjälp? Besök bitwarden.com/help"
+ "Filen kunde inte behandlas. Kontrollera att det är giltig JSON och försök igen. Behöver du hjälp? Besök bitwarden.com/help"
Få hjälp
Expandera avancerade alternativ
Lokala objekt är expanderade, klicka för att fälla in.
diff --git a/authenticator/src/main/res/values-ta-rIN/strings.xml b/authenticator/src/main/res/values-ta-rIN/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-ta-rIN/strings.xml
+++ b/authenticator/src/main/res/values-ta-rIN/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-te-rIN/strings.xml b/authenticator/src/main/res/values-te-rIN/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-te-rIN/strings.xml
+++ b/authenticator/src/main/res/values-te-rIN/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-th-rTH/strings.xml b/authenticator/src/main/res/values-th-rTH/strings.xml
index 371b0a15ac..a8ce7f09ec 100644
--- a/authenticator/src/main/res/values-th-rTH/strings.xml
+++ b/authenticator/src/main/res/values-th-rTH/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-tr-rTR/strings.xml b/authenticator/src/main/res/values-tr-rTR/strings.xml
index 50666b8532..e4640e1f1f 100644
--- a/authenticator/src/main/res/values-tr-rTR/strings.xml
+++ b/authenticator/src/main/res/values-tr-rTR/strings.xml
@@ -116,7 +116,7 @@
Tüm giriş bilgilerinizi saklayın ve doğrulama kodlarını doğrudan Authenticator uygulaması ile senkronize edin.
Şimdi indir
Bitwarden uygulaması ile senkronize et
- Bu özellik, kendi kendine barındırılan kullanıcılar için henüz mevcut değil. Daha fazla bilgi edinin
+ Daha fazlasını öğren
Bitwarden uygulamasından kodlar senkronize edilemiyor. Her iki uygulamanın da güncel olduğundan emin olun. Bitwarden uygulamasında mevcut kodlarınıza hala erişebilirsiniz.
%1$s | %2$s
Bitwarden uygulaması ile senkronize et
diff --git a/authenticator/src/main/res/values-uk-rUA/strings.xml b/authenticator/src/main/res/values-uk-rUA/strings.xml
index da107ede1f..78aa6c03d8 100644
--- a/authenticator/src/main/res/values-uk-rUA/strings.xml
+++ b/authenticator/src/main/res/values-uk-rUA/strings.xml
@@ -116,7 +116,7 @@
Зберігайте всі паролі та синхронізуйте коди підтвердження безпосередньо з програмою Authenticator.
Завантажити
Синхронізувати з програмою Bitwarden
- Ця функція ще недоступна користувачам із власним розміщенням сховища. Докладніше
+ Докладніше
Неможливо синхронізувати коди з програмою Bitwarden. Переконайтеся, що у вас найновіші версії обох програм. Ви все одно можете отримати доступ до наявних кодів у програмі Bitwarden.
%1$s | %2$s (%3$d)
Синхронізувати з програмою Bitwarden
diff --git a/authenticator/src/main/res/values-vi-rVN/strings.xml b/authenticator/src/main/res/values-vi-rVN/strings.xml
index 2fd7bbe7d2..6e57c963f3 100644
--- a/authenticator/src/main/res/values-vi-rVN/strings.xml
+++ b/authenticator/src/main/res/values-vi-rVN/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
Sync with the Bitwarden app
diff --git a/authenticator/src/main/res/values-zh-rCN/strings.xml b/authenticator/src/main/res/values-zh-rCN/strings.xml
index 671ce1307c..dd32cf9f22 100644
--- a/authenticator/src/main/res/values-zh-rCN/strings.xml
+++ b/authenticator/src/main/res/values-zh-rCN/strings.xml
@@ -117,7 +117,7 @@
保存您所有的登录信息并直接与身份验证器 App 同步验证码。
现在就下载
与 Bitwarden App 同步
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
无法从 Bitwarden App 同步代码,请确保这两个应用程序都是最新的。您仍然可以在 Bitwarden App 中访问您现有的代码。
%1$s | %2$s
与 Bitwarden App 同步
diff --git a/authenticator/src/main/res/values-zh-rTW/strings.xml b/authenticator/src/main/res/values-zh-rTW/strings.xml
index db8b6450a8..8f5f2d2b60 100644
--- a/authenticator/src/main/res/values-zh-rTW/strings.xml
+++ b/authenticator/src/main/res/values-zh-rTW/strings.xml
@@ -116,7 +116,7 @@
Store all of your logins and sync verification codes directly with the Authenticator app.
Download now
Sync with Bitwarden app
- This feature is not yet available for self-hosted users. Learn more
+ Learn more
Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.
%1$s | %2$s (%3$d)
與 Bitwarden 應用程式同步
diff --git a/authenticatorbridge/README.md b/authenticatorbridge/README.md
index 6c57e6283c..fd9fa6012a 100644
--- a/authenticatorbridge/README.md
+++ b/authenticatorbridge/README.md
@@ -47,13 +47,27 @@ Some things to note:
## Dependencies
+> [!IMPORTANT]
+> The SDK does not come packaged with these dependencies, so consumers of the SDK must provide them.
+
+### Module Dependencies
+
+The following is a list of project modules required by the SDK.
+
+- **bitwarden-core**
+ - [Core](../core)
+ - Purpose: Internal platform tools and extensions
+ - License: [LICENSE](../LICENSE.txt)
+
+- **bitwarden-annotations**
+ - [Annotations](../annotation)
+ - Purpose: Internal annotations used by the SDK.
+ - License: [LICENSE](../LICENSE.txt)
+
### Application Dependencies
The following is a list of all third-party dependencies required by the SDK.
-> [!IMPORTANT]
-> The SDK does not come packaged with these dependencies, so consumers of the SDK must provide them.
-
- **AndroidX Appcompat**
- https://developer.android.com/jetpack/androidx/releases/appcompat
- Purpose: Allows access to new APIs on older API versions.
diff --git a/fastlane/Fastfile b/fastlane/Fastfile
index 3b708483df..454b806547 100644
--- a/fastlane/Fastfile
+++ b/fastlane/Fastfile
@@ -265,6 +265,40 @@ platform :android do
releaseNotes
end
+ desc "Get latest published version for a given package name and Play Store track"
+ lane :getLatestPlayStoreVersion do |options|
+ package_name = options[:package_name]
+ track = options[:track]
+ # Hardcoding paths for now, it will simplify transitioning to the new build .env files
+ case package_name
+ when "com.x8bit.bitwarden", "com.x8bit.bitwarden.beta"
+ json_key = "secrets/play_creds.json"
+ when "com.bitwarden.authenticator"
+ json_key = "secrets/authenticator_play_store-creds.json"
+ else
+ UI.important "Unexpected package name: #{package_name}, using default play store json key"
+ json_key = "secrets/play_creds.json"
+ end
+
+ release_name = google_play_track_release_names(
+ package_name: package_name,
+ track: track,
+ json_key: json_key,
+ )
+
+ version_code = google_play_track_version_codes(
+ package_name: package_name,
+ track: track,
+ json_key: json_key,
+ )
+
+ latest_version_name = release_name.first
+ latest_version_number = version_code.first.to_s.strip
+
+ UI.message("version_name: #{latest_version_name}")
+ UI.message("version_number: #{latest_version_number}")
+ end
+
# Authenticator
desc "Apply build version information"
fastlane_require "time"
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index a3f56cc4e3..1995df6f4b 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -25,7 +25,7 @@ androidxRoom = "2.7.2"
androidxSecurityCrypto = "1.1.0-beta01"
androidxSplash = "1.1.0-rc01"
androidxWork = "2.10.2"
-bitwardenSdk = "1.0.0-20250708.105256-238"
+bitwardenSdk = "1.0.0-20250715.111352-243"
crashlytics = "3.0.4"
detekt = "1.23.8"
espressoCore = "3.6.1"