mirror of
https://github.com/bitwarden/mobile
synced 2025-12-16 00:03:22 +00:00
Compare commits
1 Commits
v2024.5.1
...
mobiletf/p
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2cdb5a9c74 |
4
.github/workflows/build-beta.yml
vendored
4
.github/workflows/build-beta.yml
vendored
@@ -24,7 +24,7 @@ jobs:
|
||||
hotfix_branch_exists: ${{ steps.branch-check.outputs.hotfix_branch_exists }}
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5
|
||||
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
||||
with:
|
||||
submodules: 'true'
|
||||
|
||||
@@ -80,7 +80,7 @@ jobs:
|
||||
echo "GitHub event: $GITHUB_EVENT"
|
||||
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5
|
||||
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
ref: ${{ inputs.ref }}
|
||||
|
||||
14
.github/workflows/build.yml
vendored
14
.github/workflows/build.yml
vendored
@@ -21,7 +21,7 @@ jobs:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5
|
||||
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
||||
|
||||
- name: Set up CLOC
|
||||
run: |
|
||||
@@ -40,7 +40,7 @@ jobs:
|
||||
hotfix_branch_exists: ${{ steps.branch-check.outputs.hotfix_branch_exists }}
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5
|
||||
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
||||
with:
|
||||
submodules: 'true'
|
||||
|
||||
@@ -109,7 +109,7 @@ jobs:
|
||||
echo "GitHub event: $GITHUB_EVENT"
|
||||
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5
|
||||
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -335,7 +335,7 @@ jobs:
|
||||
echo "GitHub event: $GITHUB_EVENT"
|
||||
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5
|
||||
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
||||
|
||||
- name: Login to Azure - CI Subscription
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
@@ -470,7 +470,7 @@ jobs:
|
||||
echo "GitHub event: $GITHUB_EVENT"
|
||||
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5
|
||||
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
||||
with:
|
||||
submodules: 'true'
|
||||
|
||||
@@ -718,7 +718,7 @@ jobs:
|
||||
_CROWDIN_PROJECT_ID: "269690"
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5
|
||||
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
||||
|
||||
- name: Login to Azure - CI Subscription
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
@@ -733,7 +733,7 @@ jobs:
|
||||
secrets: "crowdin-api-token"
|
||||
|
||||
- name: Upload Sources
|
||||
uses: crowdin/github-action@8c663f791efc0498270241e9923a8853c99a3a8e # v1.20.3
|
||||
uses: crowdin/github-action@67705afb6985401459cd143d5f5f00c9dc212f23 # v1.20.2
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }}
|
||||
|
||||
2
.github/workflows/cleanup-rc-branch.yml
vendored
2
.github/workflows/cleanup-rc-branch.yml
vendored
@@ -24,7 +24,7 @@ jobs:
|
||||
secrets: "github-pat-bitwarden-devops-bot-repo-scope"
|
||||
|
||||
- name: Checkout main
|
||||
uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5
|
||||
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
||||
with:
|
||||
ref: main
|
||||
token: ${{ steps.retrieve-bot-secrets.outputs.github-pat-bitwarden-devops-bot-repo-scope }}
|
||||
|
||||
4
.github/workflows/crowdin-pull.yml
vendored
4
.github/workflows/crowdin-pull.yml
vendored
@@ -15,7 +15,7 @@ jobs:
|
||||
_CROWDIN_PROJECT_ID: "269690"
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5
|
||||
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
||||
|
||||
- name: Login to Azure - CI Subscription
|
||||
uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
|
||||
@@ -30,7 +30,7 @@ jobs:
|
||||
secrets: "crowdin-api-token, github-gpg-private-key, github-gpg-private-key-passphrase"
|
||||
|
||||
- name: Download translations
|
||||
uses: crowdin/github-action@8c663f791efc0498270241e9923a8853c99a3a8e # v1.20.3
|
||||
uses: crowdin/github-action@67705afb6985401459cd143d5f5f00c9dc212f23 # v1.20.2
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }}
|
||||
|
||||
55
.github/workflows/release.yml
vendored
55
.github/workflows/release.yml
vendored
@@ -38,7 +38,7 @@ jobs:
|
||||
fi
|
||||
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5
|
||||
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
||||
|
||||
- name: Check Release Version
|
||||
id: version
|
||||
@@ -65,6 +65,7 @@ jobs:
|
||||
description: 'Deployment ${{ steps.version.outputs.version }} from branch ${{ steps.branch.outputs.branch-name }}'
|
||||
task: release
|
||||
|
||||
|
||||
- name: Download all artifacts
|
||||
if: ${{ inputs.release_type != 'Dry Run' }}
|
||||
uses: dawidd6/action-download-artifact@09f2f74827fd3a8607589e5ad7f9398816f540fe # v3.1.4
|
||||
@@ -125,7 +126,7 @@ jobs:
|
||||
if: inputs.fdroid_publish
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5
|
||||
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
||||
|
||||
- name: Download F-Droid .apk artifact
|
||||
if: ${{ inputs.release_type != 'Dry Run' }}
|
||||
@@ -151,7 +152,9 @@ jobs:
|
||||
node-version: '16.x'
|
||||
|
||||
- name: Set up F-Droid server
|
||||
run: pip install git+https://gitlab.com/fdroid/fdroidserver.git
|
||||
run: |
|
||||
sudo apt-get -qq update
|
||||
sudo apt-get -qqy install --no-install-recommends fdroidserver wget
|
||||
|
||||
- name: Set up Git credentials
|
||||
env:
|
||||
@@ -164,10 +167,9 @@ jobs:
|
||||
|
||||
- name: Print environment
|
||||
run: |
|
||||
echo "Node Version: $(node --version)"
|
||||
echo "NPM Version: $(npm --version)"
|
||||
echo "Git Version: $(git --version)"
|
||||
echo "F-Droid Server Version: $(fdroid --version)"
|
||||
node --version
|
||||
npm --version
|
||||
git --version
|
||||
echo "GitHub ref: $GITHUB_REF"
|
||||
echo "GitHub event: $GITHUB_EVENT"
|
||||
|
||||
@@ -192,30 +194,27 @@ jobs:
|
||||
env:
|
||||
FDROID_STORE_KEYSTORE_PASSWORD: ${{ secrets.FDROID_STORE_KEYSTORE_PASSWORD }}
|
||||
run: |
|
||||
# Create required directories.
|
||||
cd $GITHUB_WORKSPACE
|
||||
mkdir dist
|
||||
mkdir -p store/temp/fdroid
|
||||
mkdir -p store/fdroid/repo
|
||||
|
||||
# Configure F-Droid server.
|
||||
cp CNAME dist/
|
||||
chmod 600 store/fdroid/config.yml store/fdroid/keystore.jks
|
||||
cp CNAME ./dist
|
||||
cd store
|
||||
chmod 600 fdroid/config.py fdroid/keystore.jks
|
||||
mkdir -p temp/fdroid
|
||||
TEMP_DIR="$GITHUB_WORKSPACE/store/temp/fdroid"
|
||||
echo "keypass: $FDROID_STORE_KEYSTORE_PASSWORD" >> store/fdroid/config.yml
|
||||
echo "keystorepass: $FDROID_STORE_KEYSTORE_PASSWORD" >> store/fdroid/config.yml
|
||||
echo "local_copy_dir: $TEMP_DIR" >> store/fdroid/config.yml
|
||||
mv $GITHUB_WORKSPACE/com.x8bit.bitwarden-fdroid.apk store/fdroid/repo/
|
||||
|
||||
# Run update and deploy.
|
||||
cd store/fdroid
|
||||
cd fdroid
|
||||
echo "keypass=\"$FDROID_STORE_KEYSTORE_PASSWORD\"" >>config.py
|
||||
echo "keystorepass=\"$FDROID_STORE_KEYSTORE_PASSWORD\"" >>config.py
|
||||
echo "local_copy_dir=\"$TEMP_DIR\"" >>config.py
|
||||
mkdir -p repo
|
||||
mv $GITHUB_WORKSPACE/com.x8bit.bitwarden-fdroid.apk ./repo/
|
||||
fdroid update
|
||||
fdroid deploy
|
||||
cd ../..
|
||||
|
||||
# Move files for distribution.
|
||||
rm -rf store/temp/fdroid/archive
|
||||
mv -v store/temp/fdroid dist
|
||||
cp store/fdroid/index.html store/fdroid/btn.png store/fdroid/qr.png dist/fdroid
|
||||
fdroid server update
|
||||
cd ..
|
||||
rm -rf temp/fdroid/archive
|
||||
mv -v temp/fdroid ../dist
|
||||
cd fdroid
|
||||
cp index.html btn.png qr.png ../../dist/fdroid
|
||||
cd $GITHUB_WORKSPACE
|
||||
|
||||
- name: Deploy to gh-pages
|
||||
if: ${{ inputs.release_type != 'Dry Run' }}
|
||||
|
||||
4
.github/workflows/version-bump.yml
vendored
4
.github/workflows/version-bump.yml
vendored
@@ -27,7 +27,7 @@ jobs:
|
||||
version: ${{ inputs.version_number_override }}
|
||||
|
||||
- name: Checkout Branch
|
||||
uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5
|
||||
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
||||
with:
|
||||
ref: main
|
||||
|
||||
@@ -264,7 +264,7 @@ jobs:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Checkout Branch
|
||||
uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5
|
||||
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
||||
with:
|
||||
ref: main
|
||||
|
||||
|
||||
@@ -1,26 +1,31 @@
|
||||
using Android.App;
|
||||
using System.Diagnostics;
|
||||
using Android.App;
|
||||
using Android.Content;
|
||||
using Android.Content.PM;
|
||||
using Android.OS;
|
||||
using Android.Runtime;
|
||||
using AndroidX.Activity.Result;
|
||||
using AndroidX.Activity.Result.Contract;
|
||||
using AndroidX.Credentials;
|
||||
using AndroidX.Credentials.Exceptions;
|
||||
using AndroidX.Credentials.Provider;
|
||||
using AndroidX.Credentials.WebAuthn;
|
||||
using Bit.App.Droid.Utilities;
|
||||
using Bit.App.Abstractions;
|
||||
using Bit.Core.Abstractions;
|
||||
using Bit.Core.Utilities;
|
||||
using Bit.Core.Resources.Localization;
|
||||
using Bit.Core.Utilities.Fido2;
|
||||
using Bit.Core.Services;
|
||||
using Bit.App.Droid.Utilities;
|
||||
using Bit.App.Platforms.Android.Autofill;
|
||||
using AndroidX.Credentials.Exceptions;
|
||||
using Bit.Core.Abstractions;
|
||||
using Bit.Core.Resources.Localization;
|
||||
using Bit.Core.Services;
|
||||
using Bit.Core.Utilities;
|
||||
using Bit.Core.Utilities.Fido2;
|
||||
using Org.Json;
|
||||
|
||||
namespace Bit.Droid.Autofill
|
||||
{
|
||||
[Activity(
|
||||
NoHistory = true,
|
||||
LaunchMode = LaunchMode.SingleTop)]
|
||||
NoHistory = false,
|
||||
LaunchMode = LaunchMode.SingleInstance)]
|
||||
[Register("com.x8bit.bitwarden.CredentialProviderSelectionActivity")]
|
||||
public class CredentialProviderSelectionActivity : MauiAppCompatActivity
|
||||
{
|
||||
private LazyResolve<IFido2MediatorService> _fido2MediatorService = new LazyResolve<IFido2MediatorService>();
|
||||
@@ -31,6 +36,8 @@ namespace Bit.Droid.Autofill
|
||||
private LazyResolve<IUserVerificationMediatorService> _userVerificationMediatorService = new LazyResolve<IUserVerificationMediatorService>();
|
||||
private LazyResolve<IDeviceActionService> _deviceActionService = new LazyResolve<IDeviceActionService>();
|
||||
|
||||
private ActivityResultLauncher _activityResultLauncher;
|
||||
|
||||
protected override void OnCreate(Bundle bundle)
|
||||
{
|
||||
Intent?.Validate();
|
||||
@@ -100,8 +107,14 @@ namespace Bit.Droid.Autofill
|
||||
cipherId,
|
||||
false,
|
||||
() => hasVaultBeenUnlockedInThisTransaction,
|
||||
RpId
|
||||
);
|
||||
RpId
|
||||
);
|
||||
|
||||
_activityResultLauncher = RegisterForActivityResult(new ActivityResultContracts.StartActivityForResult(),
|
||||
new ActivityResultCallback(result =>
|
||||
{
|
||||
_fido2GetAssertionUserInterface.Value.ConfirmVaultUnlocked(result.ResultCode == (int)Result.Ok);
|
||||
}));
|
||||
|
||||
var clientAssertParams = new Fido2ClientAssertCredentialParams
|
||||
{
|
||||
@@ -171,6 +184,19 @@ namespace Bit.Droid.Autofill
|
||||
}
|
||||
}
|
||||
|
||||
public void LaunchToUnlock()
|
||||
{
|
||||
if (_activityResultLauncher is null)
|
||||
{
|
||||
throw new InvalidOperationException("There is no activity result launcher available");
|
||||
}
|
||||
|
||||
var intent = new Intent(this, typeof(MainActivity));
|
||||
intent.PutExtra(CredentialProviderConstants.Fido2CredentialAction, CredentialProviderConstants.Fido2CredentialNeedsUnlockingAgainBecauseImmediateTimeout);
|
||||
|
||||
_activityResultLauncher.Launch(intent);
|
||||
}
|
||||
|
||||
private void FailAndFinish()
|
||||
{
|
||||
var result = new Intent();
|
||||
@@ -180,4 +206,12 @@ namespace Bit.Droid.Autofill
|
||||
Finish();
|
||||
}
|
||||
}
|
||||
|
||||
public class ActivityResultCallback : Java.Lang.Object, IActivityResultCallback
|
||||
{
|
||||
readonly Action<ActivityResult> _callback;
|
||||
public ActivityResultCallback(Action<ActivityResult> callback) => _callback = callback;
|
||||
public ActivityResultCallback(TaskCompletionSource<ActivityResult> tcs) => _callback = tcs.SetResult;
|
||||
public void OnActivityResult(Java.Lang.Object p0) => _callback((ActivityResult)p0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using Bit.Core.Abstractions;
|
||||
using Bit.Core.Services;
|
||||
using Bit.Core.Utilities.Fido2;
|
||||
using Bit.Droid.Autofill;
|
||||
|
||||
namespace Bit.App.Platforms.Android.Autofill
|
||||
{
|
||||
@@ -10,6 +11,11 @@ namespace Bit.App.Platforms.Android.Autofill
|
||||
bool userVerified,
|
||||
Func<bool> hasVaultBeenUnlockedInThisTransaction,
|
||||
string rpId);
|
||||
|
||||
/// <summary>
|
||||
/// Call this after the vault was unlocked so that Fido2 credential autofill can proceed.
|
||||
/// </summary>
|
||||
void ConfirmVaultUnlocked(bool unlocked);
|
||||
}
|
||||
|
||||
public class Fido2GetAssertionUserInterface : Core.Utilities.Fido2.Fido2GetAssertionUserInterface, IFido2AndroidGetAssertionUserInterface
|
||||
@@ -19,6 +25,8 @@ namespace Bit.App.Platforms.Android.Autofill
|
||||
private readonly ICipherService _cipherService;
|
||||
private readonly IUserVerificationMediatorService _userVerificationMediatorService;
|
||||
|
||||
private TaskCompletionSource<bool> _unlockVaultTcs;
|
||||
|
||||
public Fido2GetAssertionUserInterface(IStateService stateService,
|
||||
IVaultTimeoutService vaultTimeoutService,
|
||||
ICipherService cipherService,
|
||||
@@ -46,11 +54,38 @@ namespace Bit.App.Platforms.Android.Autofill
|
||||
{
|
||||
if (!await _stateService.IsAuthenticatedAsync() || await _vaultTimeoutService.IsLockedAsync())
|
||||
{
|
||||
// this should never happen but just in case.
|
||||
throw new InvalidOperationException("Not authed or vault locked");
|
||||
if (await _stateService.GetVaultTimeoutAsync() != 0)
|
||||
{
|
||||
// this should never happen but just in case.
|
||||
throw new InvalidOperationException("Not authed or vault locked");
|
||||
}
|
||||
|
||||
// if vault timeout is immediate, then we need to unlock the vault
|
||||
if (!await NavigateAndWaitForUnlockAsync())
|
||||
{
|
||||
throw new InvalidOperationException("Couldn't unlock with immediate timeout");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void ConfirmVaultUnlocked(bool unlocked) => _unlockVaultTcs?.TrySetResult(unlocked);
|
||||
|
||||
private async Task<bool> NavigateAndWaitForUnlockAsync()
|
||||
{
|
||||
var credentialProviderSelectionActivity = Platform.CurrentActivity as CredentialProviderSelectionActivity;
|
||||
if (credentialProviderSelectionActivity == null)
|
||||
{
|
||||
throw new InvalidOperationException("Can't get current activity");
|
||||
}
|
||||
|
||||
_unlockVaultTcs?.TrySetCanceled();
|
||||
_unlockVaultTcs = new TaskCompletionSource<bool>();
|
||||
|
||||
credentialProviderSelectionActivity.LaunchToUnlock();
|
||||
|
||||
return await _unlockVaultTcs.Task;
|
||||
}
|
||||
|
||||
private async Task<bool> VerifyUserAsync(string selectedCipherId, Fido2UserVerificationPreference userVerificationPreference, string rpId, bool vaultUnlockedDuringThisTransaction)
|
||||
{
|
||||
try
|
||||
|
||||
@@ -23,11 +23,14 @@ using Resource = Bit.Core.Resource;
|
||||
using Application = Android.App.Application;
|
||||
using Bit.Core.Services;
|
||||
using Bit.Core.Utilities.Fido2;
|
||||
using Bit.Core.Utilities;
|
||||
|
||||
namespace Bit.Droid.Services
|
||||
{
|
||||
public class DeviceActionService : IDeviceActionService
|
||||
{
|
||||
public const int DELAY_LOCK_LOGOUT_FOR_FIDO2_AUTOFILL_ON_IMMEDIATE_TIMEOUT_MS = 15000;
|
||||
|
||||
private readonly IStateService _stateService;
|
||||
private readonly IMessagingService _messagingService;
|
||||
private AlertDialog _progressDialog;
|
||||
@@ -578,6 +581,15 @@ namespace Bit.Droid.Services
|
||||
{
|
||||
await ExecuteFido2GetCredentialAsync(appOptions);
|
||||
}
|
||||
else if (appOptions.Fido2CredentialAction == CredentialProviderConstants.Fido2CredentialNeedsUnlockingAgainBecauseImmediateTimeout
|
||||
&&
|
||||
ServiceContainer.TryResolve<IVaultTimeoutService>(out var vaultTimeoutService))
|
||||
{
|
||||
vaultTimeoutService.DelayLockAndLogoutMs = DELAY_LOCK_LOGOUT_FOR_FIDO2_AUTOFILL_ON_IMMEDIATE_TIMEOUT_MS;
|
||||
|
||||
activity.SetResult(Result.Ok);
|
||||
activity.Finish();
|
||||
}
|
||||
else if (appOptions.Fido2CredentialAction == CredentialProviderConstants.Fido2CredentialCreate)
|
||||
{
|
||||
await ExecuteFido2CreateCredentialAsync();
|
||||
|
||||
@@ -25,7 +25,6 @@ namespace Bit.App.Pages
|
||||
_broadcasterService = ServiceContainer.Resolve<IBroadcasterService>();
|
||||
_vm = BindingContext as LoginPageViewModel;
|
||||
_vm.Page = this;
|
||||
_vm.FromIosExtension = _appOptions?.IosExtension ?? false;
|
||||
_vm.StartTwoFactorAction = () => MainThread.BeginInvokeOnMainThread(async () => await StartTwoFactorAsync());
|
||||
_vm.LogInSuccessAction = () => MainThread.BeginInvokeOnMainThread(async () => await LogInSuccessAsync());
|
||||
_vm.LogInWithDeviceAction = () => StartLoginWithDeviceAsync().FireAndForget();
|
||||
|
||||
@@ -19,7 +19,6 @@ namespace Bit.App.Pages
|
||||
_vm.Email = email;
|
||||
_vm.AuthRequestType = authRequestType;
|
||||
_vm.AuthingWithSso = authingWithSso;
|
||||
_vm.FromIosExtension = _appOptions?.IosExtension ?? false;
|
||||
_vm.StartTwoFactorAction = () => MainThread.BeginInvokeOnMainThread(async () => await StartTwoFactorAsync());
|
||||
_vm.LogInSuccessAction = () => MainThread.BeginInvokeOnMainThread(async () => await LogInSuccessAsync());
|
||||
_vm.UpdateTempPasswordAction = () => MainThread.BeginInvokeOnMainThread(async () => await UpdateTempPasswordAsync());
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
using Bit.App.Models;
|
||||
|
||||
namespace Bit.App.Pages
|
||||
namespace Bit.App.Pages
|
||||
{
|
||||
public partial class RegisterPage : BaseContentPage
|
||||
{
|
||||
@@ -8,12 +6,11 @@ namespace Bit.App.Pages
|
||||
|
||||
private bool _inputFocused;
|
||||
|
||||
public RegisterPage(HomePage homePage, AppOptions appOptions = null)
|
||||
public RegisterPage(HomePage homePage)
|
||||
{
|
||||
InitializeComponent();
|
||||
_vm = BindingContext as RegisterPageViewModel;
|
||||
_vm.Page = this;
|
||||
_vm.FromIosExtension = appOptions?.IosExtension ?? false;
|
||||
_vm.RegistrationSuccess = () => MainThread.BeginInvokeOnMainThread(async () => await RegistrationSuccessAsync(homePage));
|
||||
_vm.CloseAction = async () =>
|
||||
{
|
||||
|
||||
@@ -28,7 +28,6 @@ namespace Bit.App.Pages
|
||||
_vm = BindingContext as TwoFactorPageViewModel;
|
||||
_vm.Page = this;
|
||||
_vm.AuthingWithSso = authingWithSso ?? false;
|
||||
_vm.FromIosExtension = _appOptions?.IosExtension ?? false;
|
||||
_vm.StartSetPasswordAction = () =>
|
||||
MainThread.BeginInvokeOnMainThread(async () => await StartSetPasswordAsync());
|
||||
_vm.TwoFactorAuthSuccessAction = () =>
|
||||
|
||||
@@ -11,13 +11,6 @@ using Bit.Core.Models.Request;
|
||||
using Bit.Core.Resources.Localization;
|
||||
using Bit.Core.Utilities;
|
||||
using Newtonsoft.Json;
|
||||
using Bit.Core.Services;
|
||||
|
||||
#if IOS
|
||||
using WebAuthenticator = Bit.Core.Utilities.MAUI.WebAuthenticator;
|
||||
using WebAuthenticatorResult = Bit.Core.Utilities.MAUI.WebAuthenticatorResult;
|
||||
using WebAuthenticatorOptions = Bit.Core.Utilities.MAUI.WebAuthenticatorOptions;
|
||||
#endif
|
||||
|
||||
namespace Bit.App.Pages
|
||||
{
|
||||
@@ -143,7 +136,6 @@ namespace Bit.App.Pages
|
||||
nameof(ShowTryAgain),
|
||||
});
|
||||
}
|
||||
|
||||
public ICommand SubmitCommand { get; }
|
||||
public ICommand MoreCommand { get; }
|
||||
public ICommand AuthenticateWithDuoFramelessCommand { get; }
|
||||
@@ -269,11 +261,7 @@ namespace Bit.App.Pages
|
||||
authResult = await WebAuthenticator.AuthenticateAsync(new WebAuthenticatorOptions
|
||||
{
|
||||
Url = new Uri(url),
|
||||
CallbackUrl = new Uri(Constants.DuoCallback),
|
||||
#if IOS
|
||||
ShouldUseSharedApplicationKeyWindow = FromIosExtension
|
||||
#endif
|
||||
|
||||
CallbackUrl = new Uri(Constants.DuoCallback)
|
||||
});
|
||||
}
|
||||
catch (TaskCanceledException)
|
||||
@@ -360,9 +348,6 @@ namespace Bit.App.Pages
|
||||
Url = new Uri(url),
|
||||
CallbackUrl = new Uri(callbackUri),
|
||||
PrefersEphemeralWebBrowserSession = true,
|
||||
#if IOS
|
||||
ShouldUseSharedApplicationKeyWindow = FromIosExtension
|
||||
#endif
|
||||
};
|
||||
authResult = await WebAuthenticator.AuthenticateAsync(options);
|
||||
}
|
||||
|
||||
@@ -6,12 +6,6 @@ using Bit.App.Utilities;
|
||||
using Bit.Core.Abstractions;
|
||||
using Microsoft.Maui.Authentication;
|
||||
|
||||
#if IOS
|
||||
using WebAuthenticator = Bit.Core.Utilities.MAUI.WebAuthenticator;
|
||||
using WebAuthenticatorResult = Bit.Core.Utilities.MAUI.WebAuthenticatorResult;
|
||||
using WebAuthenticatorOptions = Bit.Core.Utilities.MAUI.WebAuthenticatorOptions;
|
||||
#endif
|
||||
|
||||
namespace Bit.App.Pages
|
||||
{
|
||||
public abstract class CaptchaProtectedViewModel : BaseViewModel
|
||||
@@ -22,8 +16,6 @@ namespace Bit.App.Pages
|
||||
protected abstract IPlatformUtilsService platformUtilsService { get; }
|
||||
protected string _captchaToken = null;
|
||||
|
||||
public bool FromIosExtension { get; set; }
|
||||
|
||||
protected async Task<bool> HandleCaptchaAsync(string captchaSiteKey, bool needsCaptcha, Func<Task> onSuccess)
|
||||
{
|
||||
if (!needsCaptcha)
|
||||
@@ -69,9 +61,6 @@ namespace Bit.App.Pages
|
||||
Url = new Uri(url),
|
||||
CallbackUrl = new Uri(callbackUri),
|
||||
PrefersEphemeralWebBrowserSession = false,
|
||||
#if IOS
|
||||
ShouldUseSharedApplicationKeyWindow = FromIosExtension
|
||||
#endif
|
||||
};
|
||||
authResult = await WebAuthenticator.AuthenticateAsync(options);
|
||||
}
|
||||
|
||||
@@ -2140,10 +2140,10 @@ Scanning will happen automatically.</value>
|
||||
<value>Your organisation policies are affecting your vault timeout. Maximum allowed vault timeout is {0} hour(s) and {1} minute(s)</value>
|
||||
</data>
|
||||
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
|
||||
<value>Your organisation policies are affecting your vault timeout. Maximum allowed vault timeout is {0} hour(s) and {1} minute(s). Your vault timeout action is set to {2}.</value>
|
||||
<value>Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is {0} hour(s) and {1} minute(s). Your vault timeout action is set to {2}.</value>
|
||||
</data>
|
||||
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
|
||||
<value>Your organisation policies have set your vault timeout action to {0}.</value>
|
||||
<value>Your organization policies have set your vault timeout action to {0}.</value>
|
||||
</data>
|
||||
<data name="VaultTimeoutToLarge" xml:space="preserve">
|
||||
<value>Your vault timeout exceeds the restrictions set by your organisation.</value>
|
||||
@@ -2626,7 +2626,7 @@ Do you want to switch to this account?</value>
|
||||
<value>Region</value>
|
||||
</data>
|
||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||
<value>Your master password does not meet one or more of your organisation policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
|
||||
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
|
||||
</data>
|
||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||
<value>Current master password</value>
|
||||
@@ -2768,7 +2768,7 @@ Do you want to switch to this account?</value>
|
||||
<value>Account security</value>
|
||||
</data>
|
||||
<data name="BitwardenHelpCenter" xml:space="preserve">
|
||||
<value>Bitwarden Help Centre</value>
|
||||
<value>Bitwarden Help Center</value>
|
||||
</data>
|
||||
<data name="ContactBitwardenSupport" xml:space="preserve">
|
||||
<value>Contact Bitwarden support</value>
|
||||
@@ -2827,7 +2827,7 @@ Do you want to switch to this account?</value>
|
||||
<comment>The parameter is an URL, like bitwarden.com.</comment>
|
||||
</data>
|
||||
<data name="ContinueToHelpCenter" xml:space="preserve">
|
||||
<value>Continue to Help centre?</value>
|
||||
<value>Continue to Help center?</value>
|
||||
</data>
|
||||
<data name="ContinueToContactSupport" xml:space="preserve">
|
||||
<value>Continue to contact support?</value>
|
||||
@@ -2852,7 +2852,7 @@ Do you want to switch to this account?</value>
|
||||
<comment>The parameter is an URL, like vault.bitwarden.com.</comment>
|
||||
</data>
|
||||
<data name="LearnMoreAboutHowToUseBitwardenOnTheHelpCenter" xml:space="preserve">
|
||||
<value>Learn more about how to use Bitwarden on the Help centre.</value>
|
||||
<value>Learn more about how to use Bitwarden on the Help center.</value>
|
||||
</data>
|
||||
<data name="ContactSupportDescriptionLong" xml:space="preserve">
|
||||
<value>Can’t find what you are looking for? Reach out to Bitwarden support on bitwarden.com.</value>
|
||||
@@ -2864,7 +2864,7 @@ Do you want to switch to this account?</value>
|
||||
<value>Explore more features of your Bitwarden account on the web app.</value>
|
||||
</data>
|
||||
<data name="LearnAboutOrganizationsDescriptionLong" xml:space="preserve">
|
||||
<value>Bitwarden allows you to share your vault items with others by using an organisation. Learn more on the bitwarden.com website.</value>
|
||||
<value>Bitwarden allows you to share your vault items with others by using an organization. Learn more on the bitwarden.com website.</value>
|
||||
</data>
|
||||
<data name="RateAppDescriptionLong" xml:space="preserve">
|
||||
<value>Help others find out if Bitwarden is right for them. Visit the app store and leave a rating now.</value>
|
||||
@@ -2883,10 +2883,10 @@ Do you want to switch to this account?</value>
|
||||
<value>Account logged out.</value>
|
||||
</data>
|
||||
<data name="YourOrganizationPermissionsWereUpdatedRequeringYouToSetAMasterPassword" xml:space="preserve">
|
||||
<value>Your organisation permissions were updated, requiring you to set a master password.</value>
|
||||
<value>Your organization permissions were updated, requiring you to set a master password.</value>
|
||||
</data>
|
||||
<data name="YourOrganizationRequiresYouToSetAMasterPassword" xml:space="preserve">
|
||||
<value>Your organisation requires you to set a master password.</value>
|
||||
<value>Your organization requires you to set a master password.</value>
|
||||
</data>
|
||||
<data name="SetUpAnUnlockOptionToChangeYourVaultTimeoutAction" xml:space="preserve">
|
||||
<value>Set up an unlock option to change your vault timeout action.</value>
|
||||
@@ -2975,10 +2975,10 @@ Do you want to switch to this account?</value>
|
||||
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
||||
</data>
|
||||
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||
<value>Unassigned organisation items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||
<value>Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||
</data>
|
||||
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||
<value>On May 16, 2024, unassigned organisation items will no longer be visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||
<value>On May 16, 2024, unassigned organization items will no longer be visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||
</data>
|
||||
<data name="RemindMeLater" xml:space="preserve">
|
||||
<value>Remind me later</value>
|
||||
|
||||
@@ -2154,10 +2154,10 @@ Scanning will happen automatically.</value>
|
||||
<value>Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is {0} hour(s) and {1} minute(s)</value>
|
||||
</data>
|
||||
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
|
||||
<value>Your organisation policies are affecting your vault timeout. Maximum allowed vault timeout is {0} hour(s) and {1} minute(s). Your vault timeout action is set to {2}.</value>
|
||||
<value>Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is {0} hour(s) and {1} minute(s). Your vault timeout action is set to {2}.</value>
|
||||
</data>
|
||||
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
|
||||
<value>Your organisation policies have set your vault timeout action to {0}.</value>
|
||||
<value>Your organization policies have set your vault timeout action to {0}.</value>
|
||||
</data>
|
||||
<data name="VaultTimeoutToLarge" xml:space="preserve">
|
||||
<value>Your vault timeout exceeds the restrictions set by your organization.</value>
|
||||
@@ -2610,7 +2610,7 @@ Do you want to switch to this account?</value>
|
||||
<value>Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?</value>
|
||||
</data>
|
||||
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
|
||||
<value>Organisation SSO identifier required.</value>
|
||||
<value>Organization SSO identifier required.</value>
|
||||
</data>
|
||||
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
|
||||
<value>Add the key to an existing or new item</value>
|
||||
@@ -2640,7 +2640,7 @@ Do you want to switch to this account?</value>
|
||||
<value>Region</value>
|
||||
</data>
|
||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||
<value>Your master password does not meet one or more of your organisation policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
|
||||
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
|
||||
</data>
|
||||
<data name="CurrentMasterPassword" xml:space="preserve">
|
||||
<value>Current master password</value>
|
||||
@@ -2782,7 +2782,7 @@ Do you want to switch to this account?</value>
|
||||
<value>Account security</value>
|
||||
</data>
|
||||
<data name="BitwardenHelpCenter" xml:space="preserve">
|
||||
<value>Bitwarden Help Centre</value>
|
||||
<value>Bitwarden Help Center</value>
|
||||
</data>
|
||||
<data name="ContactBitwardenSupport" xml:space="preserve">
|
||||
<value>Contact Bitwarden support</value>
|
||||
@@ -2841,7 +2841,7 @@ Do you want to switch to this account?</value>
|
||||
<comment>The parameter is an URL, like bitwarden.com.</comment>
|
||||
</data>
|
||||
<data name="ContinueToHelpCenter" xml:space="preserve">
|
||||
<value>Continue to Help centre?</value>
|
||||
<value>Continue to Help center?</value>
|
||||
</data>
|
||||
<data name="ContinueToContactSupport" xml:space="preserve">
|
||||
<value>Continue to contact support?</value>
|
||||
@@ -2866,7 +2866,7 @@ Do you want to switch to this account?</value>
|
||||
<comment>The parameter is an URL, like vault.bitwarden.com.</comment>
|
||||
</data>
|
||||
<data name="LearnMoreAboutHowToUseBitwardenOnTheHelpCenter" xml:space="preserve">
|
||||
<value>Learn more about how to use Bitwarden on the Help centre.</value>
|
||||
<value>Learn more about how to use Bitwarden on the Help center.</value>
|
||||
</data>
|
||||
<data name="ContactSupportDescriptionLong" xml:space="preserve">
|
||||
<value>Can’t find what you are looking for? Reach out to Bitwarden support on bitwarden.com.</value>
|
||||
@@ -2878,7 +2878,7 @@ Do you want to switch to this account?</value>
|
||||
<value>Explore more features of your Bitwarden account on the web app.</value>
|
||||
</data>
|
||||
<data name="LearnAboutOrganizationsDescriptionLong" xml:space="preserve">
|
||||
<value>Bitwarden allows you to share your vault items with others by using an organisation. Learn more on the bitwarden.com website.</value>
|
||||
<value>Bitwarden allows you to share your vault items with others by using an organization. Learn more on the bitwarden.com website.</value>
|
||||
</data>
|
||||
<data name="RateAppDescriptionLong" xml:space="preserve">
|
||||
<value>Help others find out if Bitwarden is right for them. Visit the app store and leave a rating now.</value>
|
||||
@@ -2897,10 +2897,10 @@ Do you want to switch to this account?</value>
|
||||
<value>Account logged out.</value>
|
||||
</data>
|
||||
<data name="YourOrganizationPermissionsWereUpdatedRequeringYouToSetAMasterPassword" xml:space="preserve">
|
||||
<value>Your organisation permissions were updated, requiring you to set a master password.</value>
|
||||
<value>Your organization permissions were updated, requiring you to set a master password.</value>
|
||||
</data>
|
||||
<data name="YourOrganizationRequiresYouToSetAMasterPassword" xml:space="preserve">
|
||||
<value>Your organisation requires you to set a master password.</value>
|
||||
<value>Your organization requires you to set a master password.</value>
|
||||
</data>
|
||||
<data name="SetUpAnUnlockOptionToChangeYourVaultTimeoutAction" xml:space="preserve">
|
||||
<value>Set up an unlock option to change your vault timeout action.</value>
|
||||
@@ -2989,10 +2989,10 @@ Do you want to switch to this account?</value>
|
||||
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
||||
</data>
|
||||
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||
<value>Unassigned organisation items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||
<value>Unassigned organization items are no longer visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||
</data>
|
||||
<data name="OrganizationUnassignedItemsMessageSelfHost041624DescriptionLong" xml:space="preserve">
|
||||
<value>On May 16, 2024, unassigned organisation items will no longer be visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||
<value>On May 16, 2024, unassigned organization items will no longer be visible in the All Vaults view and only accessible via the Admin Console. Assign these items to a collection from the Admin Console to make them visible.</value>
|
||||
</data>
|
||||
<data name="RemindMeLater" xml:space="preserve">
|
||||
<value>Remind me later</value>
|
||||
|
||||
@@ -118,25 +118,25 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="About" xml:space="preserve">
|
||||
<value>Acerca de</value>
|
||||
<value>About</value>
|
||||
</data>
|
||||
<data name="Add" xml:space="preserve">
|
||||
<value>Engadir</value>
|
||||
<value>Add</value>
|
||||
<comment>Add/create a new entity (verb).</comment>
|
||||
</data>
|
||||
<data name="AddFolder" xml:space="preserve">
|
||||
<value>Engadir cartafol</value>
|
||||
<value>Add Folder</value>
|
||||
</data>
|
||||
<data name="AddItem" xml:space="preserve">
|
||||
<value>Engadir elemento</value>
|
||||
<value>Add Item</value>
|
||||
<comment>The title for the add item page.</comment>
|
||||
</data>
|
||||
<data name="AnErrorHasOccurred" xml:space="preserve">
|
||||
<value>Produciuse un erro.</value>
|
||||
<value>An error has occurred.</value>
|
||||
<comment>Alert title when something goes wrong.</comment>
|
||||
</data>
|
||||
<data name="Back" xml:space="preserve">
|
||||
<value>Atrás</value>
|
||||
<value>Back</value>
|
||||
<comment>Navigate back to the previous screen.</comment>
|
||||
</data>
|
||||
<data name="Bitwarden" xml:space="preserve">
|
||||
@@ -144,155 +144,155 @@
|
||||
<comment>App name. Shouldn't ever change.</comment>
|
||||
</data>
|
||||
<data name="Cancel" xml:space="preserve">
|
||||
<value>Cancelar</value>
|
||||
<value>Cancel</value>
|
||||
<comment>Cancel an operation.</comment>
|
||||
</data>
|
||||
<data name="Copy" xml:space="preserve">
|
||||
<value>Copiar</value>
|
||||
<value>Copy</value>
|
||||
<comment>Copy some value to your clipboard.</comment>
|
||||
</data>
|
||||
<data name="CopyPassword" xml:space="preserve">
|
||||
<value>Copiar contrasinal</value>
|
||||
<value>Copy password</value>
|
||||
<comment>The button text that allows a user to copy the login's password to their clipboard.</comment>
|
||||
</data>
|
||||
<data name="CopyUsername" xml:space="preserve">
|
||||
<value>Copiar nome de usuario</value>
|
||||
<value>Copy username</value>
|
||||
<comment>The button text that allows a user to copy the login's username to their clipboard.</comment>
|
||||
</data>
|
||||
<data name="Credits" xml:space="preserve">
|
||||
<value>Créditos</value>
|
||||
<value>Credits</value>
|
||||
<comment>Title for page that we use to give credit to resources that we use.</comment>
|
||||
</data>
|
||||
<data name="Delete" xml:space="preserve">
|
||||
<value>Borrar</value>
|
||||
<value>Delete</value>
|
||||
<comment>Delete an entity (verb).</comment>
|
||||
</data>
|
||||
<data name="Deleting" xml:space="preserve">
|
||||
<value>Borrando...</value>
|
||||
<value>Deleting...</value>
|
||||
<comment>Message shown when interacting with the server</comment>
|
||||
</data>
|
||||
<data name="DoYouReallyWantToDelete" xml:space="preserve">
|
||||
<value>Vostede realmente quere borrar? Isto non pode ser desfeito.</value>
|
||||
<value>Do you really want to delete? This cannot be undone.</value>
|
||||
<comment>Confirmation alert message when deleteing something.</comment>
|
||||
</data>
|
||||
<data name="Edit" xml:space="preserve">
|
||||
<value>Editar</value>
|
||||
<value>Edit</value>
|
||||
</data>
|
||||
<data name="EditFolder" xml:space="preserve">
|
||||
<value>Editar cartafol</value>
|
||||
<value>Edit folder</value>
|
||||
</data>
|
||||
<data name="Email" xml:space="preserve">
|
||||
<value>Correo electrónico</value>
|
||||
<value>Email</value>
|
||||
<comment>Short label for an email address.</comment>
|
||||
</data>
|
||||
<data name="EmailAddress" xml:space="preserve">
|
||||
<value>Enderezo de correo electrónico</value>
|
||||
<value>Email address</value>
|
||||
<comment>Full label for a email address.</comment>
|
||||
</data>
|
||||
<data name="EmailUs" xml:space="preserve">
|
||||
<value>Envíanos un correo</value>
|
||||
<value>Email us</value>
|
||||
</data>
|
||||
<data name="EmailUsDescription" xml:space="preserve">
|
||||
<value>Envíanos un correo directamente para obter axuda ou deixar comentarios.</value>
|
||||
<value>Email us directly to get help or leave feedback.</value>
|
||||
</data>
|
||||
<data name="EnterPIN" xml:space="preserve">
|
||||
<value>Introduza o seu código PIN.</value>
|
||||
<value>Enter your PIN code.</value>
|
||||
</data>
|
||||
<data name="Favorites" xml:space="preserve">
|
||||
<value>Favoritos</value>
|
||||
<value>Favorites</value>
|
||||
<comment>Title for your favorite items in the vault.</comment>
|
||||
</data>
|
||||
<data name="FileBugReport" xml:space="preserve">
|
||||
<value>Presentar un informe de fallo</value>
|
||||
<value>File a bug report</value>
|
||||
</data>
|
||||
<data name="FileBugReportDescription" xml:space="preserve">
|
||||
<value>Abrir unha incidencia no noso repositorio de GitHub.</value>
|
||||
<value>Open an issue at our GitHub repository.</value>
|
||||
</data>
|
||||
<data name="FingerprintDirection" xml:space="preserve">
|
||||
<value>Emprega a túa pegada dactilar para verificar.</value>
|
||||
<value>Use your fingerprint to verify.</value>
|
||||
</data>
|
||||
<data name="Folder" xml:space="preserve">
|
||||
<value>Cartafol</value>
|
||||
<value>Folder</value>
|
||||
<comment>Label for a folder.</comment>
|
||||
</data>
|
||||
<data name="FolderCreated" xml:space="preserve">
|
||||
<value>Creouse un novo cartafol.</value>
|
||||
<value>New folder created.</value>
|
||||
</data>
|
||||
<data name="FolderDeleted" xml:space="preserve">
|
||||
<value>Cartafol eliminado.</value>
|
||||
<value>Folder deleted.</value>
|
||||
</data>
|
||||
<data name="FolderNone" xml:space="preserve">
|
||||
<value>Sen cartafois</value>
|
||||
<value>No Folder</value>
|
||||
<comment>Items that have no folder specified go in this special "catch-all" folder.</comment>
|
||||
</data>
|
||||
<data name="Folders" xml:space="preserve">
|
||||
<value>Cartafois</value>
|
||||
<value>Folders</value>
|
||||
</data>
|
||||
<data name="FolderUpdated" xml:space="preserve">
|
||||
<value>Cartafol gardado</value>
|
||||
<value>Folder saved</value>
|
||||
</data>
|
||||
<data name="GoToWebsite" xml:space="preserve">
|
||||
<value>Ir á páxina web</value>
|
||||
<value>Go to website</value>
|
||||
<comment>The button text that allows user to launch the website to their web browser.</comment>
|
||||
</data>
|
||||
<data name="HelpAndFeedback" xml:space="preserve">
|
||||
<value>Axuda e comentarios</value>
|
||||
<value>Help and feedback</value>
|
||||
</data>
|
||||
<data name="Hide" xml:space="preserve">
|
||||
<value>Agochar</value>
|
||||
<value>Hide</value>
|
||||
<comment>Hide a secret value that is currently shown (password).</comment>
|
||||
</data>
|
||||
<data name="InternetConnectionRequiredMessage" xml:space="preserve">
|
||||
<value>Por favor conéctese a Internet antes de continuar.</value>
|
||||
<value>Please connect to the internet before continuing.</value>
|
||||
<comment>Description message for the alert when internet connection is required to continue.</comment>
|
||||
</data>
|
||||
<data name="InternetConnectionRequiredTitle" xml:space="preserve">
|
||||
<value>Requírese unha conexión a Internet</value>
|
||||
<value>Internet connection required</value>
|
||||
<comment>Title for the alert when internet connection is required to continue.</comment>
|
||||
</data>
|
||||
<data name="InvalidMasterPassword" xml:space="preserve">
|
||||
<value>Contrasinal mestre non válido. Téntao de novo.</value>
|
||||
<value>Invalid master password. Try again.</value>
|
||||
</data>
|
||||
<data name="InvalidPIN" xml:space="preserve">
|
||||
<value>PIN non válido. Téntao de novo.</value>
|
||||
<value>Invalid PIN. Try again.</value>
|
||||
</data>
|
||||
<data name="Launch" xml:space="preserve">
|
||||
<value>Abrir</value>
|
||||
<value>Launch</value>
|
||||
<comment>The button text that allows user to launch the website to their web browser.</comment>
|
||||
</data>
|
||||
<data name="LogIn" xml:space="preserve">
|
||||
<value>Iniciar sesión</value>
|
||||
<value>Log In</value>
|
||||
<comment>The login button text (verb).</comment>
|
||||
</data>
|
||||
<data name="LogInNoun" xml:space="preserve">
|
||||
<value>Inicio de sesión</value>
|
||||
<value>Login</value>
|
||||
<comment>Title for login page. (noun)</comment>
|
||||
</data>
|
||||
<data name="LogOut" xml:space="preserve">
|
||||
<value>Pechar sesión</value>
|
||||
<value>Log out</value>
|
||||
<comment>The log out button text (verb).</comment>
|
||||
</data>
|
||||
<data name="LogoutConfirmation" xml:space="preserve">
|
||||
<value>Estás seguro de que queres pechar a sesión?</value>
|
||||
<value>Are you sure you want to log out?</value>
|
||||
</data>
|
||||
<data name="RemoveAccount" xml:space="preserve">
|
||||
<value>Eliminar conta</value>
|
||||
<value>Remove account</value>
|
||||
</data>
|
||||
<data name="RemoveAccountConfirmation" xml:space="preserve">
|
||||
<value>Estás seguro de que queres eliminar a conta?</value>
|
||||
<value>Are you sure you want to remove this account?</value>
|
||||
</data>
|
||||
<data name="AccountAlreadyAdded" xml:space="preserve">
|
||||
<value>Conta xa engadida</value>
|
||||
<value>Account already added</value>
|
||||
</data>
|
||||
<data name="SwitchToAlreadyAddedAccountConfirmation" xml:space="preserve">
|
||||
<value>Gustaríache cambiar a ela agora?</value>
|
||||
<value>Would you like to switch to it now?</value>
|
||||
</data>
|
||||
<data name="MasterPassword" xml:space="preserve">
|
||||
<value>Contrasinal mestre</value>
|
||||
<value>Master password</value>
|
||||
<comment>Label for a master password.</comment>
|
||||
</data>
|
||||
<data name="More" xml:space="preserve">
|
||||
<value>Máis</value>
|
||||
<value>More</value>
|
||||
<comment>Text to define that there are more options things to see.</comment>
|
||||
</data>
|
||||
<data name="MyVault" xml:space="preserve">
|
||||
|
||||
@@ -2330,16 +2330,16 @@ pilih Tambahkan TOTP untuk menyimpan kunci dengan aman</value>
|
||||
<value>Login attempt by {0} on {1}</value>
|
||||
</data>
|
||||
<data name="DeviceType" xml:space="preserve">
|
||||
<value>Jenis perangkat</value>
|
||||
<value>Device type</value>
|
||||
</data>
|
||||
<data name="IpAddress" xml:space="preserve">
|
||||
<value>Alamat IP</value>
|
||||
<value>IP address</value>
|
||||
</data>
|
||||
<data name="Time" xml:space="preserve">
|
||||
<value>Waktu</value>
|
||||
<value>Time</value>
|
||||
</data>
|
||||
<data name="Near" xml:space="preserve">
|
||||
<value>Dekat</value>
|
||||
<value>Near</value>
|
||||
</data>
|
||||
<data name="ConfirmLogIn" xml:space="preserve">
|
||||
<value>Confirm login</value>
|
||||
@@ -2348,10 +2348,10 @@ pilih Tambahkan TOTP untuk menyimpan kunci dengan aman</value>
|
||||
<value>Deny login</value>
|
||||
</data>
|
||||
<data name="JustNow" xml:space="preserve">
|
||||
<value>Baru saja</value>
|
||||
<value>Just now</value>
|
||||
</data>
|
||||
<data name="XMinutesAgo" xml:space="preserve">
|
||||
<value>{0} menit yang lalu</value>
|
||||
<value>{0} minutes ago</value>
|
||||
</data>
|
||||
<data name="LogInAccepted" xml:space="preserve">
|
||||
<value>Login confirmed</value>
|
||||
@@ -2399,19 +2399,19 @@ pilih Tambahkan TOTP untuk menyimpan kunci dengan aman</value>
|
||||
<value>Forwarded email alias</value>
|
||||
</data>
|
||||
<data name="RandomWord" xml:space="preserve">
|
||||
<value>Kata acak</value>
|
||||
<value>Random word</value>
|
||||
</data>
|
||||
<data name="EmailRequiredParenthesis" xml:space="preserve">
|
||||
<value>Email (wajib)</value>
|
||||
<value>Email (required)</value>
|
||||
</data>
|
||||
<data name="DomainNameRequiredParenthesis" xml:space="preserve">
|
||||
<value>Domain name (required)</value>
|
||||
</data>
|
||||
<data name="APIKeyRequiredParenthesis" xml:space="preserve">
|
||||
<value>Key API (wajib)</value>
|
||||
<value>API key (required)</value>
|
||||
</data>
|
||||
<data name="Service" xml:space="preserve">
|
||||
<value>Layanan</value>
|
||||
<value>Service</value>
|
||||
</data>
|
||||
<data name="AddyIo" xml:space="preserve">
|
||||
<value>addy.io</value>
|
||||
@@ -2450,7 +2450,7 @@ pilih Tambahkan TOTP untuk menyimpan kunci dengan aman</value>
|
||||
<value>Email Type</value>
|
||||
</data>
|
||||
<data name="WebsiteRequired" xml:space="preserve">
|
||||
<value>Situs web (wajib)</value>
|
||||
<value>Website (required)</value>
|
||||
</data>
|
||||
<data name="UnknownXErrorMessage" xml:space="preserve">
|
||||
<value>Unknown {0} error occurred.</value>
|
||||
@@ -2545,13 +2545,13 @@ Do you want to switch to this account?</value>
|
||||
<value>No pending requests</value>
|
||||
</data>
|
||||
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
|
||||
<value>Aktifkan izin kamera untuk menggunakan pemindai</value>
|
||||
<value>Enable camera permission to use the scanner</value>
|
||||
</data>
|
||||
<data name="Language" xml:space="preserve">
|
||||
<value>Bahasa</value>
|
||||
<value>Language</value>
|
||||
</data>
|
||||
<data name="LanguageChangeXDescription" xml:space="preserve">
|
||||
<value>Bahasa telah diubah ke {0}. Silakan mulai ulang aplikasi untuk melihat perubahan</value>
|
||||
<value>The language has been changed to {0}. Please restart the app to see the change</value>
|
||||
</data>
|
||||
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
|
||||
<value>Language change requires app restart</value>
|
||||
@@ -2563,25 +2563,25 @@ Do you want to switch to this account?</value>
|
||||
<value>Important</value>
|
||||
</data>
|
||||
<data name="YourMasterPasswordCannotBeRecoveredIfYouForgetItXCharactersMinimum" xml:space="preserve">
|
||||
<value>Sandi utama Anda tidak akan bisa dipulihkan jika Anda lupa! Setidaknya {0} karakter.</value>
|
||||
<value>Your master password cannot be recovered if you forget it! {0} characters minimum.</value>
|
||||
</data>
|
||||
<data name="WeakMasterPassword" xml:space="preserve">
|
||||
<value>Sandi Utama Lemah</value>
|
||||
<value>Weak Master Password</value>
|
||||
</data>
|
||||
<data name="WeakPasswordIdentifiedUseAStrongPasswordToProtectYourAccount" xml:space="preserve">
|
||||
<value>Sandi lemah ditemukan. Gunakan sandi yang kuat untuk melindungi akun Anda. Apakah Anda yakin ingin menggunakan sandi yang lemah?</value>
|
||||
<value>Weak password identified. Use a strong password to protect your account. Are you sure you want to use a weak password?</value>
|
||||
</data>
|
||||
<data name="Weak" xml:space="preserve">
|
||||
<value>Lemah</value>
|
||||
<value>Weak</value>
|
||||
</data>
|
||||
<data name="Good" xml:space="preserve">
|
||||
<value>Baik</value>
|
||||
<value>Good</value>
|
||||
</data>
|
||||
<data name="Strong" xml:space="preserve">
|
||||
<value>Kuat</value>
|
||||
<value>Strong</value>
|
||||
</data>
|
||||
<data name="CheckKnownDataBreachesForThisPassword" xml:space="preserve">
|
||||
<value>Periksa pelanggaran data yang diketahui untuk kata sandi ini</value>
|
||||
<value>Check known data breaches for this password</value>
|
||||
</data>
|
||||
<data name="ExposedMasterPassword" xml:space="preserve">
|
||||
<value>Exposed Master Password</value>
|
||||
@@ -2611,7 +2611,7 @@ Do you want to switch to this account?</value>
|
||||
<value>There are no items that match the search</value>
|
||||
</data>
|
||||
<data name="US" xml:space="preserve">
|
||||
<value>AS</value>
|
||||
<value>US</value>
|
||||
</data>
|
||||
<data name="EU" xml:space="preserve">
|
||||
<value>EU</value>
|
||||
@@ -2653,16 +2653,16 @@ Do you want to switch to this account?</value>
|
||||
<value>Passkey</value>
|
||||
</data>
|
||||
<data name="Passkeys" xml:space="preserve">
|
||||
<value>Passkey</value>
|
||||
<value>Passkeys</value>
|
||||
</data>
|
||||
<data name="Application" xml:space="preserve">
|
||||
<value>Aplikasi</value>
|
||||
<value>Application</value>
|
||||
</data>
|
||||
<data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve">
|
||||
<value>You cannot edit passkey application because it would invalidate the passkey</value>
|
||||
</data>
|
||||
<data name="PasskeyWillNotBeCopied" xml:space="preserve">
|
||||
<value>Passkey tidak akan disalin</value>
|
||||
<value>Passkey will not be copied</value>
|
||||
</data>
|
||||
<data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve">
|
||||
<value>The passkey will not be copied to the cloned item. Do you want to continue cloning this item?</value>
|
||||
@@ -2759,25 +2759,25 @@ Do you want to switch to this account?</value>
|
||||
<value>Logging in on</value>
|
||||
</data>
|
||||
<data name="Vault" xml:space="preserve">
|
||||
<value>Brankas</value>
|
||||
<value>Vault</value>
|
||||
</data>
|
||||
<data name="Appearance" xml:space="preserve">
|
||||
<value>Tampilan</value>
|
||||
<value>Appearance</value>
|
||||
</data>
|
||||
<data name="AccountSecurity" xml:space="preserve">
|
||||
<value>Keamanan akun</value>
|
||||
<value>Account security</value>
|
||||
</data>
|
||||
<data name="BitwardenHelpCenter" xml:space="preserve">
|
||||
<value>Pusat Bantuan Bitwarden</value>
|
||||
<value>Bitwarden Help Center</value>
|
||||
</data>
|
||||
<data name="ContactBitwardenSupport" xml:space="preserve">
|
||||
<value>Hubungi dukungan Bitwarden</value>
|
||||
<value>Contact Bitwarden support</value>
|
||||
</data>
|
||||
<data name="CopyAppInformation" xml:space="preserve">
|
||||
<value>Salin informasi aplikasi</value>
|
||||
<value>Copy app information</value>
|
||||
</data>
|
||||
<data name="SyncNow" xml:space="preserve">
|
||||
<value>Sinkronkan sekarang</value>
|
||||
<value>Sync now</value>
|
||||
</data>
|
||||
<data name="UnlockOptions" xml:space="preserve">
|
||||
<value>Unlock options</value>
|
||||
@@ -2793,25 +2793,25 @@ Do you want to switch to this account?</value>
|
||||
<comment>A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing.</comment>
|
||||
</data>
|
||||
<data name="OneHourAndOneMinute" xml:space="preserve">
|
||||
<value>Satu jam satu menit</value>
|
||||
<value>One hour and one minute</value>
|
||||
</data>
|
||||
<data name="OneHourAndXMinute" xml:space="preserve">
|
||||
<value>1 jam {0} menit</value>
|
||||
<value>One hour and {0} minutes</value>
|
||||
</data>
|
||||
<data name="XHoursAndOneMinute" xml:space="preserve">
|
||||
<value>{0} jam 1 menit</value>
|
||||
<value>{0} hours and one minute</value>
|
||||
</data>
|
||||
<data name="XHoursAndYMinutes" xml:space="preserve">
|
||||
<value>{0} jam {1} menit</value>
|
||||
<value>{0} hours and {1} minutes</value>
|
||||
</data>
|
||||
<data name="XHours" xml:space="preserve">
|
||||
<value>{0} jam</value>
|
||||
<value>{0} hours</value>
|
||||
</data>
|
||||
<data name="PasskeyManagementExplanationLong" xml:space="preserve">
|
||||
<value>Use Bitwarden to save new passkeys and log in with passkeys stored in your vault.</value>
|
||||
</data>
|
||||
<data name="AutofillServicesExplanationLong" xml:space="preserve">
|
||||
<value>Android Autofill Framework digunakan untuk membantu Anda mengisi informasi login ke aplikasi lain di perangkat Anda.</value>
|
||||
<value>The Android Autofill Framework is used to assist in filling login information into other apps on your device.</value>
|
||||
</data>
|
||||
<data name="UseInlineAutofillExplanationLong" xml:space="preserve">
|
||||
<value>Use inline autofill if your selected keyboard supports it. Otherwise, use the default overlay.</value>
|
||||
|
||||
@@ -1440,7 +1440,7 @@ Skanning skjer automatisk.</value>
|
||||
<value>Vel ei samskipnad du ynskjer å flytta denne oppføringa til. Ved å flytta ei oppføring til ei samskipnad fører ein eigarskapen til oppføringa til den samskipnaden. Du vil ikkje lenger ha bein eigarskap til denne oppføringa etter ho er flytta.</value>
|
||||
</data>
|
||||
<data name="NumberOfWords" xml:space="preserve">
|
||||
<value>Antal ord</value>
|
||||
<value>Number of words</value>
|
||||
</data>
|
||||
<data name="Passphrase" xml:space="preserve">
|
||||
<value>Passphrase</value>
|
||||
@@ -1492,7 +1492,7 @@ Skanning skjer automatisk.</value>
|
||||
<value>Set your PIN code for unlocking Bitwarden. Your PIN settings will be reset if you ever fully log out of the application.</value>
|
||||
</data>
|
||||
<data name="LoggedInAsOn" xml:space="preserve">
|
||||
<value>Logga inn som {0} på {1}.</value>
|
||||
<value>Logged in as {0} on {1}.</value>
|
||||
<comment>ex: Logged in as user@example.com on bitwarden.com.</comment>
|
||||
</data>
|
||||
<data name="VaultLockedMasterPassword" xml:space="preserve">
|
||||
@@ -1550,13 +1550,13 @@ Skanning skjer automatisk.</value>
|
||||
<value>Brigda fargetemaet på appen</value>
|
||||
</data>
|
||||
<data name="ThemeDefault" xml:space="preserve">
|
||||
<value>Standard (System)</value>
|
||||
<value>Default (System)</value>
|
||||
</data>
|
||||
<data name="DefaultDarkTheme" xml:space="preserve">
|
||||
<value>Standard mørkt tema</value>
|
||||
<value>Default dark theme</value>
|
||||
</data>
|
||||
<data name="CopyNotes" xml:space="preserve">
|
||||
<value>Kopier notat</value>
|
||||
<value>Copy note</value>
|
||||
</data>
|
||||
<data name="Exit" xml:space="preserve">
|
||||
<value>Far ut</value>
|
||||
@@ -1565,7 +1565,7 @@ Skanning skjer automatisk.</value>
|
||||
<value>Er du trygg på at du vil fara ut av Bitwarden?</value>
|
||||
</data>
|
||||
<data name="PINRequireMasterPasswordRestart" xml:space="preserve">
|
||||
<value>Vil du krevje opplåsing med superpassordet ditt når programmet startast på nytt?</value>
|
||||
<value>Do you want to require unlocking with your master password when the application is restarted?</value>
|
||||
</data>
|
||||
<data name="Black" xml:space="preserve">
|
||||
<value>Svart</value>
|
||||
@@ -1583,7 +1583,7 @@ Skanning skjer automatisk.</value>
|
||||
<value>Auto-fill blocked URIs</value>
|
||||
</data>
|
||||
<data name="AskToAddLogin" xml:space="preserve">
|
||||
<value>Spør om å leggje til innlogging</value>
|
||||
<value>Ask to add login</value>
|
||||
</data>
|
||||
<data name="AskToAddLoginDescription" xml:space="preserve">
|
||||
<value>Ask to add an item if one isn't found in your vault.</value>
|
||||
@@ -1632,7 +1632,7 @@ Skanning skjer automatisk.</value>
|
||||
<value>3. On the Android App Settings screen for Bitwarden, go to the "Display over other apps" options (under Advanced) and tap the toggle to allow overlay support.</value>
|
||||
</data>
|
||||
<data name="OverlayPermission" xml:space="preserve">
|
||||
<value>Løyve</value>
|
||||
<value>Permission</value>
|
||||
</data>
|
||||
<data name="BitwardenAutofillServiceOpenOverlayPermissionSettings" xml:space="preserve">
|
||||
<value>Open Overlay Permission Settings</value>
|
||||
@@ -1647,19 +1647,19 @@ Skanning skjer automatisk.</value>
|
||||
<value>Granted</value>
|
||||
</data>
|
||||
<data name="FileFormat" xml:space="preserve">
|
||||
<value>Filformat</value>
|
||||
<value>File format</value>
|
||||
</data>
|
||||
<data name="ExportVaultMasterPasswordDescription" xml:space="preserve">
|
||||
<value>Enter your master password to export your vault data.</value>
|
||||
</data>
|
||||
<data name="SendVerificationCodeToEmail" xml:space="preserve">
|
||||
<value>Send ein stadfestingskode til e-posten din</value>
|
||||
<value>Send a verification code to your email</value>
|
||||
</data>
|
||||
<data name="CodeSent" xml:space="preserve">
|
||||
<value>Kode sendt!</value>
|
||||
</data>
|
||||
<data name="ConfirmYourIdentity" xml:space="preserve">
|
||||
<value>Stadfest identiteten din for å fortsetje.</value>
|
||||
<value>Confirm your identity to continue.</value>
|
||||
</data>
|
||||
<data name="ExportVaultWarning" xml:space="preserve">
|
||||
<value>This export contains your vault 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.</value>
|
||||
@@ -1671,7 +1671,7 @@ Skanning skjer automatisk.</value>
|
||||
<value>Account encryption keys are unique to each Bitwarden user account, so you can't import an encrypted export into a different account.</value>
|
||||
</data>
|
||||
<data name="ExportVaultConfirmationTitle" xml:space="preserve">
|
||||
<value>Stadfest eksportering av kvelv</value>
|
||||
<value>Confirm vault export</value>
|
||||
<comment>Title for the alert to confirm vault exports.</comment>
|
||||
</data>
|
||||
<data name="Warning" xml:space="preserve">
|
||||
@@ -1771,7 +1771,7 @@ Skanning skjer automatisk.</value>
|
||||
<value>Currently unable to login with SSO</value>
|
||||
</data>
|
||||
<data name="SetMasterPassword" xml:space="preserve">
|
||||
<value>Set hovudpassord</value>
|
||||
<value>Set master password</value>
|
||||
</data>
|
||||
<data name="SetMasterPasswordSummary" xml:space="preserve">
|
||||
<value>In order to complete logging in with SSO, please set a master password to access and protect your vault.</value>
|
||||
@@ -1804,7 +1804,7 @@ Skanning skjer automatisk.</value>
|
||||
<value>Passordet møter ikkje samskipnadskrava. Ver venleg og les retningslinene og freista om att.</value>
|
||||
</data>
|
||||
<data name="Loading" xml:space="preserve">
|
||||
<value>Lastar</value>
|
||||
<value>Loading</value>
|
||||
</data>
|
||||
<data name="AcceptPolicies" xml:space="preserve">
|
||||
<value>By activating this switch you agree to the following:
|
||||
|
||||
@@ -422,7 +422,7 @@
|
||||
<value>Сервис Ауто-попуњавања</value>
|
||||
</data>
|
||||
<data name="SetBitwardenAsPasskeyManagerDescription" xml:space="preserve">
|
||||
<value>Поставити Bitwarden као добављача приступног кључа у подешавањима уређаја.</value>
|
||||
<value>Set Bitwarden as your passkey provider in device settings.</value>
|
||||
</data>
|
||||
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
|
||||
<value>Избегавај двосмислене карактере</value>
|
||||
@@ -1195,7 +1195,7 @@
|
||||
<value>Windows Hello</value>
|
||||
</data>
|
||||
<data name="BitwardenCredentialProviderGoToSettings" xml:space="preserve">
|
||||
<value>Нисмо успели да аутоматски отворимо мени за подешавања Андроид провајдера акредитива за вас. Можете да се крећете до менија подешавања добављача акредитива ручно из Андроид подешавања > Систем > Лозинке и налози > Лозинке, приступни кључени.</value>
|
||||
<value>We were unable to automatically open the Android credential provider settings menu for you. You can navigate to the credential provider settings menu manually from Android Settings > System > Passwords & accounts > Passwords, passkeys and data services.</value>
|
||||
</data>
|
||||
<data name="BitwardenAutofillGoToSettings" xml:space="preserve">
|
||||
<value>Нисмо могли аутоматски да отворимо мени за подешавања Ауто-пуњења. До менија подешавања ауто-пуњења можете ручно да дођете из Андроид подешавања > Систем > Језици и унос > Напредно > Сервис ауто-пуњења.</value>
|
||||
@@ -1823,7 +1823,7 @@
|
||||
<value>Bitwarden треба пажњу - Омогућите „Преко“ у „Сервиси Ауто-пуњења“ из подешавања Bitwarden-а</value>
|
||||
</data>
|
||||
<data name="PasskeyManagement" xml:space="preserve">
|
||||
<value>Управљање приступачног кључа</value>
|
||||
<value>Passkey management</value>
|
||||
</data>
|
||||
<data name="AutofillServices" xml:space="preserve">
|
||||
<value>Сервиси Ауто-пуњења</value>
|
||||
@@ -2810,7 +2810,7 @@
|
||||
<value>{0} сати/а</value>
|
||||
</data>
|
||||
<data name="PasskeyManagementExplanationLong" xml:space="preserve">
|
||||
<value>Употребити Bitwarden да сачувате нове приступне кључеве и пријавите се са приступним кључевима ускладиштеним у вашем трезору.</value>
|
||||
<value>Use Bitwarden to save new passkeys and log in with passkeys stored in your vault.</value>
|
||||
</data>
|
||||
<data name="AutofillServicesExplanationLong" xml:space="preserve">
|
||||
<value>Android Autofill Framework се користи за помоћ при попуњавању података за пријаву у друге апликације на вашем уређају.</value>
|
||||
@@ -2841,7 +2841,7 @@
|
||||
<value>Настави на радњу апликације?</value>
|
||||
</data>
|
||||
<data name="ContinueToDeviceSettings" xml:space="preserve">
|
||||
<value>Желите ли да наставите на подешавања уређаја?</value>
|
||||
<value>Continue to device Settings?</value>
|
||||
</data>
|
||||
<data name="TwoStepLoginDescriptionLong" xml:space="preserve">
|
||||
<value>Учините свој налог сигурнијим подешавањем пријаве у два корака у Bitwarden веб апликацији.</value>
|
||||
@@ -2894,25 +2894,25 @@
|
||||
<value>Подесите опцију откључавања да бисте променили радњу временског ограничења сефа.</value>
|
||||
</data>
|
||||
<data name="ChooseALoginToSaveThisPasskeyTo" xml:space="preserve">
|
||||
<value>Изаберите пријаву да бисте сачували овај приступни кључ</value>
|
||||
<value>Choose a login to save this passkey to</value>
|
||||
</data>
|
||||
<data name="SavePasskeyAsNewLogin" xml:space="preserve">
|
||||
<value>Сачувати приступни кључ као нову пријаву</value>
|
||||
<value>Save passkey as new login</value>
|
||||
</data>
|
||||
<data name="SavePasskey" xml:space="preserve">
|
||||
<value>Сачувати приступни кључ</value>
|
||||
<value>Save passkey</value>
|
||||
</data>
|
||||
<data name="PasskeysForX" xml:space="preserve">
|
||||
<value>Приступни кључ за {0}</value>
|
||||
<value>Passkeys for {0}</value>
|
||||
</data>
|
||||
<data name="PasswordsForX" xml:space="preserve">
|
||||
<value>Лозинке за {0}</value>
|
||||
<value>Passwords for {0}</value>
|
||||
</data>
|
||||
<data name="OverwritePasskey" xml:space="preserve">
|
||||
<value>Заменити приступни кључ?</value>
|
||||
<value>Overwrite passkey?</value>
|
||||
</data>
|
||||
<data name="ThisItemAlreadyContainsAPasskeyAreYouSureYouWantToOverwriteTheCurrentPasskey" xml:space="preserve">
|
||||
<value>Ова ставка већ садржи приступни кључ. Да ли сте сигурни да желите да замените тренутни приступни кључ?</value>
|
||||
<value>This item already contains a passkey. Are you sure you want to overwrite the current passkey?</value>
|
||||
</data>
|
||||
<data name="DuoTwoStepLoginIsRequiredForYourAccount" xml:space="preserve">
|
||||
<value>Duo пријава у два корака је потребна за ваш налог. </value>
|
||||
@@ -2924,57 +2924,57 @@
|
||||
<value>Покренути Duo</value>
|
||||
</data>
|
||||
<data name="VerificationRequiredByX" xml:space="preserve">
|
||||
<value>Потребдна верификација {0}</value>
|
||||
<value>Verification required by {0}</value>
|
||||
</data>
|
||||
<data name="VerificationRequiredForThisActionSetUpAnUnlockMethodInBitwardenToContinue" xml:space="preserve">
|
||||
<value>За ову радњу је потребна верификација. Подесите метод откључавања у Bitwarden да би наставили.</value>
|
||||
<value>Verification required for this action. Set up an unlock method in Bitwarden to continue.</value>
|
||||
</data>
|
||||
<data name="ErrorCreatingPasskey" xml:space="preserve">
|
||||
<value>Грешка у креацији приступачног кључа</value>
|
||||
<value>Error creating passkey</value>
|
||||
</data>
|
||||
<data name="ErrorReadingPasskey" xml:space="preserve">
|
||||
<value>Грешка у читању приступачног кључа</value>
|
||||
<value>Error reading passkey</value>
|
||||
</data>
|
||||
<data name="ThereWasAProblemCreatingAPasskeyForXTryAgainLater" xml:space="preserve">
|
||||
<value>Дошло је до проблема при креирању приступачког кључа за {0}. Покушајте поново касније.</value>
|
||||
<value>There was a problem creating a passkey for {0}. Try again later.</value>
|
||||
<comment>The parameter is the RpId</comment>
|
||||
</data>
|
||||
<data name="ThereWasAProblemReadingAPasskeyForXTryAgainLater" xml:space="preserve">
|
||||
<value>Дошло је до проблема при читању приступачког кључа за {0}. Покушајте поново касније.</value>
|
||||
<value>There was a problem reading your passkey for {0}. Try again later.</value>
|
||||
<comment>The parameter is the RpId</comment>
|
||||
</data>
|
||||
<data name="VerifyingIdentityEllipsis" xml:space="preserve">
|
||||
<value>Верификација идентитета...</value>
|
||||
<value>Verifying identity...</value>
|
||||
</data>
|
||||
<data name="Passwords" xml:space="preserve">
|
||||
<value>Лозинке</value>
|
||||
<value>Passwords</value>
|
||||
</data>
|
||||
<data name="UnknownAccount" xml:space="preserve">
|
||||
<value>Непознат налог</value>
|
||||
<value>Unknown account</value>
|
||||
</data>
|
||||
<data name="SetUpAutofill" xml:space="preserve">
|
||||
<value>Подесити ауто-пуњење</value>
|
||||
<value>Set up auto-fill</value>
|
||||
</data>
|
||||
<data name="GetInstantAccessToYourPasswordsAndPasskeys" xml:space="preserve">
|
||||
<value>Имајте инстантни приступ Вашим лозинкама и приступачним кључевима!</value>
|
||||
<value>Get instant access to your passwords and passkeys!</value>
|
||||
</data>
|
||||
<data name="SetUpAutoFillDescriptionLong" xml:space="preserve">
|
||||
<value>Да бисте подесили ауто-пуњење лозинки и управљање приступним кључевима, подесите Bitwarden као ваш омиљени провајдер у подешавањима iOS-а.</value>
|
||||
<value>To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings.</value>
|
||||
</data>
|
||||
<data name="FirstDotGoToYourDeviceSettingsPasswordsPasswordOptions" xml:space="preserve">
|
||||
<value>1. Идите на подешавања уређаја > Лозинке > Опције лозинке</value>
|
||||
<value>1. Go to your device's Settings > Passwords > Password Options</value>
|
||||
</data>
|
||||
<data name="SecondDotTurnOnAutoFill" xml:space="preserve">
|
||||
<value>2. Омогућите ауто-пуњење</value>
|
||||
<value>2. Turn on AutoFill</value>
|
||||
</data>
|
||||
<data name="ThirdDotSelectBitwardenToUseForPasswordsAndPasskeys" xml:space="preserve">
|
||||
<value>3. Одабрати "Bitwarden" за употребу за лозинке</value>
|
||||
<value>3. Select "Bitwarden" to use for passwords and passkeys</value>
|
||||
</data>
|
||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVault" xml:space="preserve">
|
||||
<value>Ваш приступни кључ ће бити сачуван у вашем Bitwarden сефу</value>
|
||||
<value>Your passkey will be saved to your Bitwarden vault</value>
|
||||
</data>
|
||||
<data name="YourPasskeyWillBeSavedToYourBitwardenVaultForX" xml:space="preserve">
|
||||
<value>Ваш приступни кључ ће бити сачуван у вашем Bitwarden сефу за {0}</value>
|
||||
<value>Your passkey will be saved to your Bitwarden vault for {0}</value>
|
||||
</data>
|
||||
<data name="OrganizationUnassignedItemsMessageUSEUDescriptionLong" xml:space="preserve">
|
||||
<value>Недодељене ставке организације више нису видљиве у приказу Сви сефови и доступне су само преко Админ конзоле. Доделите ове ставке колекцији са Админ конзолом да бисте их учинили видљивим.</value>
|
||||
@@ -2989,21 +2989,21 @@
|
||||
<value>Напомена</value>
|
||||
</data>
|
||||
<data name="PasskeysNotSupportedForThisApp" xml:space="preserve">
|
||||
<value>Приступни кључеви нису подржани за ову апликацију</value>
|
||||
<value>Passkeys not supported for this app</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseBrowserIsNotPrivileged" xml:space="preserve">
|
||||
<value>Passkey operation failed because browser is not privileged</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseBrowserSignatureDoesNotMatch" xml:space="preserve">
|
||||
<value>Операција лозинке није успела јер се потпис прегледача не подудара</value>
|
||||
<value>Passkey operation failed because browser signature does not match</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseOfMissingAssetLinks" xml:space="preserve">
|
||||
<value>Операција лозинке није успела због недостајућих веза средстава</value>
|
||||
<value>Passkey operation failed because of missing asset links</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseAppNotFoundInAssetLinks" xml:space="preserve">
|
||||
<value>Операција лозинке није успела јер апликација није пронађена у везама за средства</value>
|
||||
<value>Passkey operation failed because app not found in asset links</value>
|
||||
</data>
|
||||
<data name="PasskeyOperationFailedBecauseAppCouldNotBeVerified" xml:space="preserve">
|
||||
<value>Операција лозинке није успела јер апликација није могла да се верификује</value>
|
||||
<value>Passkey operation failed because app could not be verified</value>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
public const string Fido2CredentialCreate = "fido2CredentialCreate";
|
||||
public const string Fido2CredentialGet = "fido2CredentialGet";
|
||||
public const string Fido2CredentialAction = "fido2CredentialAction";
|
||||
public const string Fido2CredentialNeedsUnlockingAgainBecauseImmediateTimeout = "fido2CredentialNeedsUnlockingAgainBecauseImmediateTimeout";
|
||||
public const string CredentialProviderCipherId = "credentialProviderCipherId";
|
||||
public const string CredentialDataIntentExtra = "CREDENTIAL_DATA";
|
||||
public const string CredentialIdIntentExtra = "credId";
|
||||
|
||||
@@ -617,9 +617,8 @@ namespace Bit.iOS.Autofill
|
||||
|
||||
private void LaunchRegisterFlow()
|
||||
{
|
||||
var appOptions = new AppOptions { IosExtension = true };
|
||||
var registerPage = new RegisterPage(null, appOptions);
|
||||
var app = new App.App(appOptions);
|
||||
var registerPage = new RegisterPage(null);
|
||||
var app = new App.App(new AppOptions { IosExtension = true });
|
||||
ThemeManager.SetTheme(app.Resources);
|
||||
ThemeManager.ApplyResourcesTo(registerPage);
|
||||
if (registerPage.BindingContext is RegisterPageViewModel vm)
|
||||
@@ -697,9 +696,8 @@ namespace Bit.iOS.Autofill
|
||||
|
||||
private void LaunchTwoFactorFlow(bool authingWithSso)
|
||||
{
|
||||
var appOptions = new AppOptions { IosExtension = true };
|
||||
var twoFactorPage = new TwoFactorPage(authingWithSso, appOptions);
|
||||
var app = new App.App(appOptions);
|
||||
var twoFactorPage = new TwoFactorPage(authingWithSso);
|
||||
var app = new App.App(new AppOptions { IosExtension = true });
|
||||
ThemeManager.SetTheme(app.Resources);
|
||||
ThemeManager.ApplyResourcesTo(twoFactorPage);
|
||||
if (twoFactorPage.BindingContext is TwoFactorPageViewModel vm)
|
||||
|
||||
20
store/fdroid/config.py
Normal file
20
store/fdroid/config.py
Normal file
@@ -0,0 +1,20 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
repo_url = "https://mobileapp.bitwarden.com/fdroid/repo"
|
||||
repo_name = "Bitwarden F-Droid Repo"
|
||||
repo_icon = "fdroid-icon.png"
|
||||
repo_description = """
|
||||
F-Droid repo for Bitwarden.
|
||||
"""
|
||||
|
||||
archive_older = 2
|
||||
archive_url = "https://does.not.exist"
|
||||
archive_name = "Bitwarden Archive Repo"
|
||||
archive_icon = "fdroid-icon.png"
|
||||
archive_description = """
|
||||
F-Droid archive repo for Bitwarden.
|
||||
"""
|
||||
|
||||
repo_keyalias = "bitwarden-Virtual-Machine"
|
||||
keystore = "keystore.jks"
|
||||
keydname = "CN=bitwarden-Virtual-Machine, OU=F-Droid"
|
||||
@@ -1,18 +0,0 @@
|
||||
---
|
||||
|
||||
repo_url: https://mobileapp.bitwarden.com/fdroid/repo
|
||||
repo_name: Bitwarden F-Droid Repo
|
||||
repo_icon: fdroid-icon.png
|
||||
repo_description: >-
|
||||
F-Droid repo for Bitwarden.
|
||||
|
||||
archive_older: 2
|
||||
archive_url: https://does.not.exist/archive
|
||||
archive_name: Bitwarden Archive Repo
|
||||
archive_icon: fdroid-icon.png
|
||||
archive_description: >-
|
||||
F-Droid archive repo for Bitwarden.
|
||||
|
||||
repo_keyalias: bitwarden-Virtual-Machine
|
||||
keystore: keystore.jks
|
||||
keydname: CN=bitwarden-Virtual-Machine, OU=F-Droid
|
||||
Reference in New Issue
Block a user