1
0
mirror of https://github.com/bitwarden/mobile synced 2026-02-26 01:13:28 +00:00

Compare commits

..

2 Commits

Author SHA1 Message Date
Todd Martin
3e9d3787d8 Removed check for OS type before setting current push token on state. 2022-11-13 10:42:18 -05:00
Todd Martin
5b53c0c48f Added code to update PushToken that is used on login.
(cherry picked from commit 264b6791372b6a5d6c8c4f9e3c7e393b3ec4392b)
2022-11-13 10:27:29 -05:00
76 changed files with 111 additions and 385 deletions

View File

@@ -11,9 +11,6 @@ on:
workflow_dispatch:
inputs: {}
env:
BASE_PKG_NAME: com.x8bit.bitwarden
jobs:
cloc:
name: CLOC
@@ -177,11 +174,11 @@ jobs:
UPLOAD_KEYSTORE_PASSWORD: ${{ secrets.UPLOAD_KEYSTORE_PASSWORD }}
run: |
$androidPath = $($env:GITHUB_WORKSPACE + "/src/Android/Android.csproj");
$packageName = "";
$packageName = "com.x8bit.bitwarden";
if ("${{ matrix.variant }}" -ne "prod")
{
$packageName = "${{ env.BASE_PKG_NAME }}.${{ matrix.variant }}";
$packageName = "com.x8bit.bitwarden.${{ matrix.variant }}";
}
Write-Output "########################################"
Write-Output "##### Sign Google Play Bundle Release Configuration"
@@ -222,24 +219,24 @@ jobs:
if: ${{ matrix.variant == 'prod' }}
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: ${{ env.BASE_PKG_NAME }}.aab
path: ./${{ env.BASE_PKG_NAME }}.aab
name: com.x8bit.bitwarden.aab
path: ./com.x8bit.bitwarden.aab
if-no-files-found: error
- name: Upload Prod .apk artifact
if: ${{ matrix.variant == 'prod' }}
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: ${{ env.BASE_PKG_NAME }}.apk
path: ./${{ env.BASE_PKG_NAME }}.apk
name: com.x8bit.bitwarden.apk
path: ./com.x8bit.bitwarden.apk
if-no-files-found: error
- name: Upload Other .apk artifact
if: ${{ matrix.variant != 'prod' }}
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: ${{ env.BASE_PKG_NAME }}.${{ matrix.variant }}.apk
path: ./${{ env.BASE_PKG_NAME }}.${{ matrix.variant }}.apk
name: com.x8bit.bitwarden.${{ matrix.variant }}.apk
path: ./com.x8bit.bitwarden.${{ matrix.variant }}.apk
if-no-files-found: error
- name: Deploy to Play Store
@@ -251,10 +248,10 @@ jobs:
run: |
PUBLISHER_PATH="$GITHUB_WORKSPACE/store/google/Publisher/bin/Release/netcoreapp3.1/Publisher.dll"
CREDS_PATH="$HOME/secrets/play_creds.json"
AAB_PATH="$GITHUB_WORKSPACE/${{env:BASE_PKG_NAME}}.aab"
AAB_PATH="$GITHUB_WORKSPACE/com.x8bit.bitwarden.aab"
TRACK="internal"
dotnet $PUBLISHER_PATH $CREDS_PATH $AAB_PATH $TRACK ${{env:BASE_PKG_NAME}}
dotnet $PUBLISHER_PATH $CREDS_PATH $AAB_PATH $TRACK
shell: bash
@@ -427,8 +424,8 @@ jobs:
Write-Output "##### Copy FDroid apk to project root"
Write-Output "########################################"
$signedApkPath = $($env:GITHUB_WORKSPACE + "/src/Android/bin/FDroid/$env:BASE_PKG_NAME-Signed.apk");
$signedApkDestPath = $($env:GITHUB_WORKSPACE + "/$env:BASE_PKG_NAME-fdroid.apk");
$signedApkPath = $($env:GITHUB_WORKSPACE + "/src/Android/bin/FDroid/com.x8bit.bitwarden-Signed.apk");
$signedApkDestPath = $($env:GITHUB_WORKSPACE + "/com.x8bit.bitwarden-fdroid.apk");
Copy-Item $signedApkPath $signedApkDestPath
shell: pwsh
@@ -436,8 +433,8 @@ jobs:
- name: Upload F-Droid .apk artifact
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
with:
name: ${{ env.BASE_PKG_NAME }}.apk
path: ./${{ env.BASE_PKG_NAME }}.apk
name: com.x8bit.bitwarden-fdroid.apk
path: ./com.x8bit.bitwarden-fdroid.apk
if-no-files-found: error

View File

@@ -20,9 +20,6 @@ on:
default: true
type: boolean
env:
BASE_PKG_NAME: com.x8bit.bitwarden
jobs:
release:
name: Create Release
@@ -58,7 +55,6 @@ jobs:
echo "::set-output name=branch-name::$BRANCH_NAME"
- name: Create GitHub deployment
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
uses: chrnorm/deployment-action@1b599fe41a0ef1f95191e7f2eec4743f2d7dfc48
id: deployment
with:
@@ -92,9 +88,9 @@ jobs:
if: ${{ github.event.inputs.release_type != 'Dry Run' }}
uses: ncipollo/release-action@40bb172bd05f266cf9ba4ff965cb61e9ee5f6d01 # v1.9.0
with:
artifacts: "./${{ BASE_PKG_NAME }}.aab/${{ BASE_PKG_NAME }}.aab,
./${{ BASE_PKG_NAME }}.apk/${{ BASE_PKG_NAME }}.apk,
./${{ BASE_PKG_NAME }}-fdroid.apk/${{ BASE_PKG_NAME }}-fdroid.apk,
artifacts: "./com.x8bit.bitwarden.aab/com.x8bit.bitwarden.aab,
./com.x8bit.bitwarden.apk/com.x8bit.bitwarden.apk,
./com.x8bit.bitwarden-fdroid.apk/com.x8bit.bitwarden-fdroid.apk,
./Bitwarden iOS.zip"
commit: ${{ github.sha }}
tag: v${{ steps.version.outputs.version }}
@@ -104,7 +100,7 @@ jobs:
draft: true
- name: Update deployment status to Success
if: ${{ github.event.inputs.release_type != 'Dry Run' && success() }}
if: ${{ success() }}
uses: chrnorm/deployment-status@07b3930847f65e71c9c6802ff5a402f6dfb46b86
with:
token: '${{ secrets.GITHUB_TOKEN }}'
@@ -112,7 +108,7 @@ jobs:
deployment-id: ${{ steps.deployment.outputs.deployment_id }}
- name: Update deployment status to Failure
if: ${{ github.event.inputs.release_type != 'Dry Run' && failure() }}
if: ${{ failure() }}
uses: chrnorm/deployment-status@07b3930847f65e71c9c6802ff5a402f6dfb46b86
with:
token: '${{ secrets.GITHUB_TOKEN }}'
@@ -136,7 +132,7 @@ jobs:
workflow: build.yml
workflow_conclusion: success
branch: ${{ needs.release.outputs.branch-name }}
name: ${{ BASE_PKG_NAME }}-fdroid.apk
name: com.x8bit.bitwarden-fdroid.apk
- name: Dry Run - Download F-Droid .apk artifact
if: ${{ github.event.inputs.release_type == 'Dry Run' }}
@@ -145,7 +141,7 @@ jobs:
workflow: build.yml
workflow_conclusion: success
branch: master
name: ${{ BASE_PKG_NAME }}-fdroid.apk
name: com.x8bit.bitwarden-fdroid.apk
- name: Set up Node
uses: actions/setup-node@1f8c6b94b26d0feae1e387ca63ccbdc44d27b561 # v2.5.1
@@ -201,7 +197,7 @@ jobs:
echo "keystorepass=\"$FDROID_STORE_KEYSTORE_PASSWORD\"" >>config.py
echo "local_copy_dir=\"$TEMP_DIR\"" >>config.py
mkdir -p repo
mv $GITHUB_WORKSPACE/${{ BASE_PKG_NAME }}-fdroid.apk ./repo/
mv $GITHUB_WORKSPACE/com.x8bit.bitwarden-fdroid.apk ./repo/
fdroid update
fdroid server update
cd ..

View File

@@ -147,6 +147,7 @@ namespace Bit.App
}
else if (message.Command == Constants.PasswordlessLoginRequestKey
|| message.Command == "unlocked"
|| message.Command == "syncCompleted"
|| message.Command == AccountsManagerMessageCommands.ACCOUNT_SWITCH_COMPLETED)
{
lock (_processingLoginRequestLock)
@@ -204,11 +205,11 @@ namespace Bit.App
FingerprintPhrase = loginRequestData.RequestFingerprint,
RequestDate = loginRequestData.CreationDate,
DeviceType = loginRequestData.RequestDeviceType,
Origin = loginRequestData.Origin
Origin = loginRequestData.Origin,
});
await _stateService.SetPasswordlessLoginNotificationAsync(null);
_pushNotificationService.DismissLocalNotification(Constants.PasswordlessNotificationId);
if (!loginRequestData.IsExpired)
if (loginRequestData.CreationDate.ToUniversalTime().AddMinutes(Constants.PasswordlessNotificationTimeoutInMinutes) > DateTime.UtcNow)
{
await Device.InvokeOnMainThreadAsync(() => Application.Current.MainPage.Navigation.PushModalAsync(new NavigationPage(page)));
}

View File

@@ -128,7 +128,7 @@ namespace Bit.App.Pages
{
var response = await _authService.GetPasswordlessLoginResponseAsync(_requestId, _requestAccessCode);
if (response.RequestApproved == null || !response.RequestApproved.Value)
if (!response.RequestApproved)
{
return;
}

View File

@@ -100,7 +100,7 @@ namespace Bit.App.Pages
private async Task UpdateRequestTime()
{
TriggerPropertyChanged(nameof(TimeOfRequestText));
if (LoginRequest?.IsExpired ?? false)
if (DateTime.UtcNow > LoginRequest?.RequestDate.ToUniversalTime().AddMinutes(Constants.PasswordlessNotificationTimeoutInMinutes))
{
StopRequestTimeUpdater();
await _platformUtilsService.ShowDialogAsync(AppResources.LoginRequestHasAlreadyExpired);
@@ -110,21 +110,13 @@ namespace Bit.App.Pages
private async Task PasswordlessLoginAsync(bool approveRequest)
{
if (LoginRequest.IsExpired)
if (LoginRequest.RequestDate.ToUniversalTime().AddMinutes(Constants.PasswordlessNotificationTimeoutInMinutes) <= DateTime.UtcNow)
{
await _platformUtilsService.ShowDialogAsync(AppResources.LoginRequestHasAlreadyExpired);
await Page.Navigation.PopModalAsync();
return;
}
var loginRequestData = await _authService.GetPasswordlessLoginRequestByIdAsync(LoginRequest.Id);
if (loginRequestData.RequestApproved.HasValue && loginRequestData.ResponseDate.HasValue)
{
await _platformUtilsService.ShowDialogAsync(AppResources.ThisRequestIsNoLongerValid);
await Page.Navigation.PopModalAsync();
return;
}
await _deviceActionService.ShowLoadingAsync(AppResources.Loading);
await _authService.PasswordlessLoginAsync(LoginRequest.Id, LoginRequest.PubKey, approveRequest);
await _deviceActionService.HideLoadingAsync();
@@ -179,7 +171,5 @@ namespace Bit.App.Pages
public string DeviceType { get; set; }
public string IpAddress { get; set; }
public bool IsExpired => RequestDate.ToUniversalTime().AddMinutes(Constants.PasswordlessNotificationTimeoutInMinutes) < DateTime.UtcNow;
}
}

View File

@@ -90,7 +90,6 @@ namespace Bit.App.Pages
try
{
await _deviceActionService.ShowLoadingAsync(AppResources.Syncing);
await _syncService.SyncPasswordlessLoginRequestsAsync();
var success = await _syncService.FullSyncAsync(true);
await _deviceActionService.HideLoadingAsync();
if (success)

View File

@@ -189,7 +189,6 @@ namespace Bit.App.Pages
if (await _stateService.GetSyncOnRefreshAsync() && Refreshing && !SyncRefreshing)
{
SyncRefreshing = true;
await _syncService.SyncPasswordlessLoginRequestsAsync();
await _syncService.FullSyncAsync(false);
return;
}

View File

@@ -5876,15 +5876,6 @@ namespace Bit.App.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to This request is no longer valid.
/// </summary>
public static string ThisRequestIsNoLongerValid {
get {
return ResourceManager.GetString("ThisRequestIsNoLongerValid", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 3 days.
/// </summary>

View File

@@ -2508,7 +2508,4 @@ Do you want to switch to this account?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -2509,7 +2509,4 @@
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -2507,7 +2507,4 @@ Bu hesaba keçmək istəyirsiniz?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Bütün giriş etmə seçimlərinə bax</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>Bu tələb artıq yararsızdır</value>
</data>
</root>

View File

@@ -1622,7 +1622,7 @@
<value>Біяметрычныя праверка</value>
</data>
<data name="Biometrics" xml:space="preserve">
<value>біяметрыяй</value>
<value>Біяметрыяй</value>
</data>
<data name="UseBiometricsToUnlock" xml:space="preserve">
<value>Выкарыстоўваць біяметрычныя даныя для разблакіроўкі</value>
@@ -2508,7 +2508,4 @@
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Паглядзець усе варыянты ўваходу</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>Гэты запыт больш не дзейнічае</value>
</data>
</root>

View File

@@ -2509,7 +2509,4 @@ select Add TOTP to store the key safely</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Вижте всички възможности за вписване</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>Тази зявка вече не е приложима</value>
</data>
</root>

View File

@@ -2509,7 +2509,4 @@ Do you want to switch to this account?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -2508,7 +2508,4 @@ Do you want to switch to this account?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -2485,7 +2485,7 @@ Voleu canviar a aquest compte?</value>
<value>No sou vosaltres?</value>
</data>
<data name="LogInWithMasterPassword" xml:space="preserve">
<value>Inicia sessió amb la contrasenya mestra</value>
<value>Inicia sessió amb la teua contrasenya mestra</value>
</data>
<data name="LogInWithAnotherDevice" xml:space="preserve">
<value>Inicia sessió amb un altre dispositiu</value>
@@ -2508,7 +2508,4 @@ Voleu canviar a aquest compte?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Veure totes les opcions d'inici de sessió</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>Aquesta sol·licitud ja no és vàlida</value>
</data>
</root>

View File

@@ -1457,11 +1457,11 @@ Načtení proběhne automaticky.</value>
<value>Nejsou k dispozici žádné složky k zobrazení.</value>
</data>
<data name="FingerprintPhrase" xml:space="preserve">
<value>Fráze otisku účtu</value>
<value>Fráze otisku prstu</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="YourAccountsFingerprint" xml:space="preserve">
<value>Fráze otisku vašeho účtu</value>
<value>Fráze otisku prstu vašeho účtu</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="LearnOrgConfirmation" xml:space="preserve">
@@ -2468,47 +2468,44 @@ select Add TOTP to store the key safely</value>
<value>Požadavek na přihlášení již vypršel.</value>
</data>
<data name="LoginAttemptFromXDoYouWantToSwitchToThisAccount" xml:space="preserve">
<value>Pokus o přihlášení z:
<value>Login attempt from:
{0}
Chcete se přepnout na tento účet?</value>
Do you want to switch to this account?</value>
</data>
<data name="NewAroundHere" xml:space="preserve">
<value>Jste tu noví?</value>
<value>New around here?</value>
</data>
<data name="GetMasterPasswordwordHint" xml:space="preserve">
<value>Získat nápovědu pro hlavní heslo</value>
<value>Get master password hint</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Přihlášování jako {0}</value>
<value>Logging in as {0}</value>
</data>
<data name="NotYou" xml:space="preserve">
<value>Nejste to vy?</value>
<value>Not you?</value>
</data>
<data name="LogInWithMasterPassword" xml:space="preserve">
<value>Přihlásit se pomocí hlavního hesla</value>
<value>Log in with master password</value>
</data>
<data name="LogInWithAnotherDevice" xml:space="preserve">
<value>Přihlásit se pomocí jiného zařízení</value>
<value>Log In with another device</value>
</data>
<data name="LogInInitiated" xml:space="preserve">
<value>Přihlášení zahájeno</value>
<value>Log in initiated</value>
</data>
<data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve">
<value>Na vaše zařízení bylo odesláno oznámení.</value>
<value>A notification has been sent to your device.</value>
</data>
<data name="PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice" xml:space="preserve">
<value>Ujistěte se, že je váš trezor odemčen a fráze otisku prstu se shodují s druhým zařízením.</value>
<value>Please make sure your vault is unlocked and the Fingerprint phrase matches on the other device.</value>
</data>
<data name="ResendNotification" xml:space="preserve">
<value>Odeslat oznámení znovu</value>
<value>Resend notification</value>
</data>
<data name="NeedAnotherOption" xml:space="preserve">
<value>Potřebujete jinou možnost?</value>
<value>Need another option?</value>
</data>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Zobrazit všechny možnosti přihlášení</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>Tento požadavek již není platný</value>
<value>View all log in options</value>
</data>
</root>

View File

@@ -2508,7 +2508,4 @@ Vil du skifte til denne konto?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Vis alle indlogningsmuligheder</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>Anmodningen er ikke længere gyldig</value>
</data>
</root>

View File

@@ -229,7 +229,7 @@
<value>Ordner</value>
</data>
<data name="FolderUpdated" xml:space="preserve">
<value>Ordner aktualisiert</value>
<value>Ordner wurde aktualisiert</value>
</data>
<data name="GoToWebsite" xml:space="preserve">
<value>Webseite besuchen</value>
@@ -342,7 +342,7 @@
<comment>Reveal a hidden value (password).</comment>
</data>
<data name="ItemDeleted" xml:space="preserve">
<value>Eintrag gelöscht</value>
<value>Eintrag wurde gelöscht</value>
<comment>Confirmation message after successfully deleting a login.</comment>
</data>
<data name="Submit" xml:space="preserve">
@@ -416,7 +416,7 @@
<value>Neuer Eintrag</value>
</data>
<data name="AppExtension" xml:space="preserve">
<value>App-Erweiterung</value>
<value>App Erweiterung</value>
</data>
<data name="AutofillAccessibilityDescription" xml:space="preserve">
<value>Verwende den Bitwarden Dienst in den Bedienungshilfen, um deine Zugangsdaten in Apps und im Web automatisch ausfüllen zu lassen.</value>
@@ -428,7 +428,7 @@
<value>Mehrdeutige Zeichen vermeiden</value>
</data>
<data name="BitwardenAppExtension" xml:space="preserve">
<value>Bitwarden App-Erweiterung</value>
<value>Bitwarden App Erweiterung</value>
</data>
<data name="BitwardenAppExtensionAlert2" xml:space="preserve">
<value>Die einfachste Möglichkeit, neue Anmeldedaten zu Ihrem Tresor hinzuzufügen, ist die Bitwarden App Erweiterung. Erfahren Sie mehr über die Bitwarden App Erweiterung, indem Sie zu dem "Einstellungen"-Bildschirm navigieren.</value>
@@ -477,13 +477,13 @@
<value>Gebe die E-Mail Adresse deines Kontos ein, um den Hinweis für dein Master-Passwort zu erhalten.</value>
</data>
<data name="ExntesionReenable" xml:space="preserve">
<value>App-Erweiterung wieder aktivieren</value>
<value>App Erweiterung wieder aktivieren</value>
</data>
<data name="ExtensionAlmostDone" xml:space="preserve">
<value>Fast geschafft!</value>
</data>
<data name="ExtensionEnable" xml:space="preserve">
<value>App-Erweiterung aktivieren</value>
<value>App Erweiterung aktivieren</value>
</data>
<data name="ExtensionInSafari" xml:space="preserve">
<value>In Safari findest du Bitwarden unter dem Teilen-Symbol (Hinweis: scrolle auf der untersten Zeile des Menüs nach rechts).</value>
@@ -647,7 +647,7 @@
<value>Bist du sicher, dass du das aktuelle Passwort überschreiben möchtest?</value>
</data>
<data name="PushNotificationAlert" xml:space="preserve">
<value>Bitwarden aktualisiert deinen Tresor mit Push-Benachrichtigungen. Für die bestmögliche Benutzererfahrung tippe im folgenden Dialogfenster auf "Ok", um Push-Benachrichtigungen zu aktivieren.</value>
<value>Bitwarden aktualisiert deinen Tresor mit Pushbenachrichtigungen. Für die bestmögliche Benutzererfahrung tippe im folgenden Dialogfenster auf "Ok", um Pushbenachrichtigungen zu aktivieren.</value>
<comment>Push notifications for apple products</comment>
</data>
<data name="RateTheApp" xml:space="preserve">
@@ -705,10 +705,10 @@
<comment>What Apple calls their fingerprint reader.</comment>
</data>
<data name="TwoStepLogin" xml:space="preserve">
<value>Zwei-Faktor-Authentifizierung</value>
<value>Zwei-Faktor Authentifizierung</value>
</data>
<data name="TwoStepLoginConfirmation" xml:space="preserve">
<value>Mit der Zwei-Faktor-Authentifizierung wird dein Account zusätzlich abgesichert, da jede Anmeldung durch einen Sicherheitscode, eine Authentifizierungs-App, SMS, einen Anruf oder eine E-Mail verifiziert werden muss. Die Zwei-Faktor-Authentifizierung kann im Web-Tresor unter bitwarden.com aktiviert werden. Möchtest du die Seite jetzt öffnen?</value>
<value>Mit der Zwei-Faktor Authentifizierung wird dein Account zusätzlich abgesichert, da jede Anmeldung durch einen Sicherheitscode, eine Authentifizierungs-App, SMS, einen Anruf oder eine E-Mail verifiziert werden muss. Die Zwei-Faktor Authentifizierung kann im Bitwarden.com Web-Tresor aktiviert werden. Möchtest du die Seite jetzt öffnen?</value>
</data>
<data name="UnlockWith" xml:space="preserve">
<value>Mit {0} entsperren</value>
@@ -831,7 +831,7 @@
<comment>For 2FA whenever there are no available providers on this device.</comment>
</data>
<data name="NoTwoStepAvailable" xml:space="preserve">
<value>Dieses Konto hat eine aktive Zwei-Faktor-Authentifizierung, allerdings wird keiner der konfigurierten Zwei-Faktor-Anbieter von diesem Gerät unterstützt. Bitte nutzen Sie ein unterstütztes Gerät und / oder fügen Sie zusätzliche Anbieter hinzu, die von mehr Geräten unterstützt werden (wie eine Authentifizierungs-App).</value>
<value>Dieses Konto hat eine aktive Zwei-Faktor Authentifizierung, allerdings wird keiner der konfigurierten Zwei-Faktor Anbieter von diesem Gerät unterstützt. Bitte nutzen Sie ein unterstütztes Gerät und / oder fügen Sie zusätzliche Anbieter hinzu, die von mehr Geräten unterstützt werden (wie eine Authentifizierungs-App).</value>
</data>
<data name="RecoveryCodeTitle" xml:space="preserve">
<value>Wiederherstellungscode</value>
@@ -1726,7 +1726,7 @@ Das Scannen erfolgt automatisch.</value>
<comment>Message shown when interacting with the server</comment>
</data>
<data name="ItemRestored" xml:space="preserve">
<value>Eintrag wiederhergestellt</value>
<value>Eintrag wurde wiederhergestellt</value>
<comment>Confirmation message after successfully restoring a soft-deleted item</comment>
</data>
<data name="Trash" xml:space="preserve">
@@ -2507,7 +2507,4 @@ Möchtest du zu diesem Konto wechseln?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Alle Anmelde-Optionen anzeigen</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>Diese Anfrage ist nicht mehr gültig</value>
</data>
</root>

View File

@@ -2508,7 +2508,4 @@ Do you want to switch to this account?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -2517,7 +2517,4 @@ Do you want to switch to this account?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -2522,7 +2522,4 @@ Do you want to switch to this account?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -2509,7 +2509,4 @@ seleccione Agregar TOTP para almacenar la clave de forma segura</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Ver todas las opciones de inicio de sesión</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>Esta solicitud ya no es válida</value>
</data>
</root>

View File

@@ -2491,24 +2491,21 @@ Soovid selle konto peale lülituda?</value>
<value>Logi sisse läbi teise seadme</value>
</data>
<data name="LogInInitiated" xml:space="preserve">
<value>Sisselogimine on käivitatud</value>
<value>Log in initiated</value>
</data>
<data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve">
<value>Sinu seadmesse saadeti teavitus.</value>
<value>A notification has been sent to your device.</value>
</data>
<data name="PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice" xml:space="preserve">
<value>Veendu, et hoidla on lahti lukustatud ja sõrmejälje fraasid seadmete vahel ühtivad.</value>
<value>Please make sure your vault is unlocked and the Fingerprint phrase matches on the other device.</value>
</data>
<data name="ResendNotification" xml:space="preserve">
<value>Saada märguanne uuesti</value>
<value>Resend notification</value>
</data>
<data name="NeedAnotherOption" xml:space="preserve">
<value>Soovid teist valikut kasutada?</value>
<value>Need another option?</value>
</data>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Vaata kõiki valikuid</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>See päring ei ole enam kehtiv</value>
<value>View all log in options</value>
</data>
</root>

View File

@@ -2507,7 +2507,4 @@ Kontu honetara aldatu nahi duzu?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Ikusi erregistro guztiak ezarpenetan</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -2509,7 +2509,4 @@
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -1762,7 +1762,7 @@ Koodi luetaan automaattisesti.</value>
<value>Synkronoidaan holvi alasveto-eleellä.</value>
</data>
<data name="LogInSso" xml:space="preserve">
<value>Yrityksen kertakirjautuminen (SSO)</value>
<value>Kertakirjautuminen (SSO)</value>
</data>
<data name="LogInSsoSummary" xml:space="preserve">
<value>Kirjaudu sisään käyttäen organisaatiosi kertakirjautumista (SSO). Syötä organisaatiosi tunniste aloittaaksesi.</value>
@@ -1810,8 +1810,7 @@ Koodi luetaan automaattisesti.</value>
<value>Ladataan</value>
</data>
<data name="AcceptPolicies" xml:space="preserve">
<value>Valitsemalla tämän hyväksyt seuraavat:
</value>
<value>Aktivoimalla tämän valinnan hyväksyt seuraavat: </value>
</data>
<data name="AcceptPoliciesError" xml:space="preserve">
<value>Palveluehtoja ja tietosuojakäytäntöä ei ole vahvistettu.</value>
@@ -2507,9 +2506,6 @@ Haluatko vaihtaa tähän tiliin?</value>
<value>Tarvitsetko toisen vaihtoehdon?</value>
</data>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Näytä kaikki kirjautumisvaihtoehdot</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>Pyyntö ei ole enää voimassa.</value>
<value>Näytä kaikki kirjautumisvalinnat</value>
</data>
</root>

View File

@@ -2509,7 +2509,4 @@ Do you want to switch to this account?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -2508,7 +2508,4 @@ Voulez-vous basculer vers ce compte ?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Voir toutes les options de connexion</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>Cette demande n'est plus valide</value>
</data>
</root>

View File

@@ -2511,7 +2511,4 @@ Do you want to switch to this account?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -2510,7 +2510,4 @@ Do you want to switch to this account?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -2506,7 +2506,4 @@
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Pogledaj sve mogućnosti prijave</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -2507,7 +2507,4 @@ Szeretnénk átváltani erre a fiókra?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Összes bejelentkezési opció megtekintése</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>A kérés már nem érvényes.</value>
</data>
</root>

View File

@@ -2508,7 +2508,4 @@ Do you want to switch to this account?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -2491,24 +2491,21 @@ Vuoi passare a questo account?</value>
<value>Accedi con un altro dispositivo</value>
</data>
<data name="LogInInitiated" xml:space="preserve">
<value>Login avviato</value>
<value>Log in initiated</value>
</data>
<data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve">
<value>Una notifica è stata inviata al tuo dispositivo.</value>
<value>A notification has been sent to your device.</value>
</data>
<data name="PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice" xml:space="preserve">
<value>Assicurati che la tua cassaforte sia sbloccata e che la "frase impronta" corrisponda sull'altro dispositivo.</value>
<value>Please make sure your vault is unlocked and the Fingerprint phrase matches on the other device.</value>
</data>
<data name="ResendNotification" xml:space="preserve">
<value>Invia nuova notifica</value>
<value>Resend notification</value>
</data>
<data name="NeedAnotherOption" xml:space="preserve">
<value>Hai bisogno di un'altra opzione?</value>
<value>Need another option?</value>
</data>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Visualizza tutte le opzioni di accesso</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>La richiesta non è più valida</value>
<value>View all log in options</value>
</data>
</root>

View File

@@ -2508,7 +2508,4 @@
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>すべてのログインオプションを表示</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>このリクエストは無効になりました</value>
</data>
</root>

View File

@@ -2509,7 +2509,4 @@ Do you want to switch to this account?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -2509,7 +2509,4 @@ Do you want to switch to this account?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -2508,7 +2508,4 @@ Do you want to switch to this account?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -2509,7 +2509,4 @@ Do you want to switch to this account?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -2508,7 +2508,4 @@ Vai pārslēgties uz šo kontu?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Apskatīt visas pierakstīšanās iespējas</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>Šis pieprasījums vairs nav derīgs</value>
</data>
</root>

View File

@@ -2508,7 +2508,4 @@ Do you want to switch to this account?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -2509,7 +2509,4 @@ Vil du bytte til denne kontoen?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -2508,7 +2508,4 @@ Wilt u naar dit account wisselen?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>Dit verzoek is niet langer geldig</value>
</data>
</root>

View File

@@ -2509,7 +2509,4 @@ Do you want to switch to this account?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -2508,7 +2508,4 @@ Czy chcesz przełączyć się na to konto?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Zobacz wszystkie sposoby logowania</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>Ta prośba nie jest już ważna</value>
</data>
</root>

View File

@@ -2492,24 +2492,21 @@ Você deseja mudar para esta conta?</value>
<value>Entrar com outro dispositivo</value>
</data>
<data name="LogInInitiated" xml:space="preserve">
<value>Login iniciado</value>
<value>Log in initiated</value>
</data>
<data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve">
<value>Uma notificação foi enviada para seu dispositivo.</value>
<value>A notification has been sent to your device.</value>
</data>
<data name="PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice" xml:space="preserve">
<value>Por favor, certifique-se de que o seu cofre esteja desbloqueado e a frase de identificação corresponda ao outro dispositivo.</value>
<value>Please make sure your vault is unlocked and the Fingerprint phrase matches on the other device.</value>
</data>
<data name="ResendNotification" xml:space="preserve">
<value>Reenviar notificação</value>
<value>Resend notification</value>
</data>
<data name="NeedAnotherOption" xml:space="preserve">
<value>Precisa de outra opção?</value>
<value>Need another option?</value>
</data>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Ver todas as opções de login</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>Este pedido não é mais válido</value>
<value>View all log in options</value>
</data>
</root>

View File

@@ -2508,7 +2508,4 @@ Deseja mudar para esta conta?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>Este pedido já não é válido</value>
</data>
</root>

View File

@@ -2509,7 +2509,4 @@ Do you want to switch to this account?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -2508,7 +2508,4 @@ Doriți să comutați la acest cont?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -1635,7 +1635,7 @@
<value>3. На экране настроек приложений Android для Bitwarden перейдите в раздел "Отображение поверх других приложений" (в разделе "Дополнительно") и коснитесь переключателя, чтобы включить поддержку наложения.</value>
</data>
<data name="OverlayPermission" xml:space="preserve">
<value>Разрешение</value>
<value>Разрешения</value>
</data>
<data name="BitwardenAutofillServiceOpenOverlayPermissionSettings" xml:space="preserve">
<value>Открыть настройки разрешения наложения</value>
@@ -2508,7 +2508,4 @@
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Посмотреть все варианты авторизации</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>Этот запрос больше не действителен</value>
</data>
</root>

View File

@@ -2509,7 +2509,4 @@ Do you want to switch to this account?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -2508,7 +2508,4 @@ Chcete prepnúť na toto konto?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Zobraziť všetky možnosti prihlásenia</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>Táto požiadavka už nie je platná</value>
</data>
</root>

View File

@@ -2509,7 +2509,4 @@ Do you want to switch to this account?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -2493,24 +2493,21 @@
<value>Пријавите се са другим уређајем</value>
</data>
<data name="LogInInitiated" xml:space="preserve">
<value>Пријава је покренута</value>
<value>Log in initiated</value>
</data>
<data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve">
<value>Обавештење је послато на ваш уређај.</value>
<value>A notification has been sent to your device.</value>
</data>
<data name="PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice" xml:space="preserve">
<value>Уверите се да је ваш сеф откључан и да се фраза отиска прста подудара на другом уређају.</value>
<value>Please make sure your vault is unlocked and the Fingerprint phrase matches on the other device.</value>
</data>
<data name="ResendNotification" xml:space="preserve">
<value>Поново послати обавештење</value>
<value>Resend notification</value>
</data>
<data name="NeedAnotherOption" xml:space="preserve">
<value>Треба Вам друга опције?</value>
<value>Need another option?</value>
</data>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Погледајте сав извештај у опције</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>Овај захтев више не важи</value>
<value>View all log in options</value>
</data>
</root>

View File

@@ -2493,24 +2493,21 @@ Vill du byta till detta konto?</value>
<value>Logga in med en annan enhet</value>
</data>
<data name="LogInInitiated" xml:space="preserve">
<value>Inloggning påbörjad</value>
<value>Log in initiated</value>
</data>
<data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve">
<value>En avisering har skickats till din enhet.</value>
<value>A notification has been sent to your device.</value>
</data>
<data name="PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice" xml:space="preserve">
<value>Se till att ditt valv är upplåst och att fingeravtrycksfrasen matchar på den andra enheten.</value>
<value>Please make sure your vault is unlocked and the Fingerprint phrase matches on the other device.</value>
</data>
<data name="ResendNotification" xml:space="preserve">
<value>Skicka avisering igen</value>
<value>Resend notification</value>
</data>
<data name="NeedAnotherOption" xml:space="preserve">
<value>Behöver du fler alternativ?</value>
<value>Need another option?</value>
</data>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Visa alla inloggningsalternativ</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
<value>View all log in options</value>
</data>
</root>

View File

@@ -2509,7 +2509,4 @@ Do you want to switch to this account?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -2516,7 +2516,4 @@ Do you want to switch to this account?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -2507,7 +2507,4 @@ Bu hesaba geçmek ister misiniz?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Tüm giriş seçeneklerini gör</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>Bu istek artık geçerli değil</value>
</data>
</root>

View File

@@ -2508,7 +2508,4 @@
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Переглянути всі варіанти входу</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>Цей запит більше недійсний</value>
</data>
</root>

View File

@@ -2508,7 +2508,4 @@ Do you want to switch to this account?</value>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>This request is no longer valid</value>
</data>
</root>

View File

@@ -1762,7 +1762,7 @@
<value>使用下拉手势同步密码库。</value>
</data>
<data name="LogInSso" xml:space="preserve">
<value>企业单点登录</value>
<value>企业单点登录SSO</value>
</data>
<data name="LogInSsoSummary" xml:space="preserve">
<value>要使用您组织的单点登录门户快速登录。请首先输入您组织的标识符。</value>
@@ -2503,12 +2503,9 @@
<value>重新发送通知</value>
</data>
<data name="NeedAnotherOption" xml:space="preserve">
<value>需要其他选项吗?</value>
<value>Need another option?</value>
</data>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>查看所有登录选项</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>请求已失效</value>
</data>
</root>

View File

@@ -2508,7 +2508,4 @@
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>檢視所有登入選項</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>此請求已失效</value>
</data>
</root>

View File

@@ -187,10 +187,8 @@ namespace Bit.App.Services
Debug.WriteLine($"{TAG} Registered device with server.");
await _stateService.Value.SetPushLastRegistrationDateAsync(DateTime.UtcNow);
if (deviceType == Device.Android)
{
await _stateService.Value.SetPushCurrentTokenAsync(token);
}
await _stateService.Value.SetPushCurrentTokenAsync(token);
}
#if DEBUG
catch (ApiException apiEx)

View File

@@ -109,7 +109,7 @@ namespace Bit.App.Utilities.AccountManagement
}
else
{
_accountsManagerHost.Navigate(NavigationTarget.HomeLogin, new HomeNavigationParams(false));
_accountsManagerHost.Navigate(NavigationTarget.HomeLogin);
}
}
}

View File

@@ -83,7 +83,6 @@ namespace Bit.Core.Abstractions
Task<SendResponse> PutSendAsync(string id, SendRequest request);
Task<SendResponse> PutSendRemovePasswordAsync(string id);
Task DeleteSendAsync(string id);
Task<List<PasswordlessLoginResponse>> GetAuthRequestAsync();
Task<PasswordlessLoginResponse> GetAuthRequestAsync(string id);
Task<PasswordlessLoginResponse> GetAuthResponseAsync(string id, string accessCode);
Task<PasswordlessLoginResponse> PutAuthRequestAsync(string id, string key, string masterPasswordHash, string deviceIdentifier, bool requestApproved);

View File

@@ -29,7 +29,6 @@ namespace Bit.Core.Abstractions
Task<AuthResult> LogInTwoFactorAsync(TwoFactorProviderType twoFactorProvider, string twoFactorToken, string captchaToken, bool? remember = null);
Task<AuthResult> LogInPasswordlessAsync(string email, string accessCode, string authRequestId, byte[] decryptionKey, string userKeyCiphered, string localHashedPasswordCiphered);
Task<List<PasswordlessLoginResponse>> GetPasswordlessLoginRequestsAsync();
Task<PasswordlessLoginResponse> GetPasswordlessLoginRequestByIdAsync(string id);
Task<PasswordlessLoginResponse> GetPasswordlessLoginResponseAsync(string id, string accessCode);
Task<PasswordlessLoginResponse> PasswordlessLoginAsync(string id, string pubKey, bool requestApproved);

View File

@@ -14,7 +14,5 @@ namespace Bit.Core.Abstractions
Task<bool> SyncDeleteFolderAsync(SyncFolderNotification notification);
Task<bool> SyncUpsertCipherAsync(SyncCipherNotification notification, bool isEdit);
Task<bool> SyncUpsertFolderAsync(SyncFolderNotification notification, bool isEdit);
// Passwordless code will be moved to an independent service in future techdept
Task SyncPasswordlessLoginRequestsAsync();
}
}

View File

@@ -5,10 +5,11 @@ namespace Bit.Core.Models.Request
{
public class DeviceRequest
{
public DeviceRequest(string appId, IPlatformUtilsService platformUtilsService)
public DeviceRequest(string appId, string pushToken, IPlatformUtilsService platformUtilsService)
{
Type = platformUtilsService.GetDevice();
Name = platformUtilsService.GetDeviceString();
PushToken = pushToken;
Identifier = appId;
}

View File

@@ -1,7 +1,5 @@
using System;
using System.Collections.Generic;
using Bit.Core.Enums;
using Bit.Core.Models.Data;
namespace Bit.Core.Models.Response
{
@@ -15,19 +13,9 @@ namespace Bit.Core.Models.Response
public string Key { get; set; }
public string MasterPasswordHash { get; set; }
public DateTime CreationDate { get; set; }
public DateTime? ResponseDate { get; set; }
public bool? RequestApproved { get; set; }
public bool RequestApproved { get; set; }
public string Origin { get; set; }
public string RequestAccessCode { get; set; }
public Tuple<byte[], byte[]> RequestKeyPair { get; set; }
public bool IsAnswered => RequestApproved != null && ResponseDate != null;
public bool IsExpired => CreationDate.ToUniversalTime().AddMinutes(Constants.PasswordlessNotificationTimeoutInMinutes) < DateTime.UtcNow;
}
public class PasswordlessLoginsResponse
{
public List<PasswordlessLoginResponse> Data { get; set; }
}
}

View File

@@ -536,12 +536,6 @@ namespace Bit.Core.Services
#region PasswordlessLogin
public async Task<List<PasswordlessLoginResponse>> GetAuthRequestAsync()
{
var response = await SendAsync<object, PasswordlessLoginsResponse>(HttpMethod.Get, $"/auth-requests/", null, true, true);
return response.Data;
}
public Task<PasswordlessLoginResponse> GetAuthRequestAsync(string id)
{
return SendAsync<object, PasswordlessLoginResponse>(HttpMethod.Get, $"/auth-requests/{id}", null, true, true);

View File

@@ -300,7 +300,8 @@ namespace Bit.Core.Services
{
var storedTwoFactorToken = await _tokenService.GetTwoFactorTokenAsync(email);
var appId = await _appIdService.GetAppIdAsync();
var deviceRequest = new DeviceRequest(appId, _platformUtilsService);
var pushToken = await _stateService.GetPushCurrentTokenAsync();
var deviceRequest = new DeviceRequest(appId, pushToken, _platformUtilsService);
string[] emailPassword;
string[] codeCodeVerifier;
@@ -485,11 +486,6 @@ namespace Bit.Core.Services
SelectedTwoFactorProviderType = null;
}
public async Task<List<PasswordlessLoginResponse>> GetPasswordlessLoginRequestsAsync()
{
return await _apiService.GetAuthRequestAsync();
}
public async Task<PasswordlessLoginResponse> GetPasswordlessLoginRequestByIdAsync(string id)
{
return await _apiService.GetAuthRequestAsync(id);

View File

@@ -24,7 +24,6 @@ namespace Bit.Core.Services
private readonly IPolicyService _policyService;
private readonly ISendService _sendService;
private readonly IKeyConnectorService _keyConnectorService;
private readonly ILogger _logger;
private readonly Func<Tuple<string, bool, bool>, Task> _logoutCallbackAsync;
public SyncService(
@@ -40,7 +39,6 @@ namespace Bit.Core.Services
IPolicyService policyService,
ISendService sendService,
IKeyConnectorService keyConnectorService,
ILogger logger,
Func<Tuple<string, bool, bool>, Task> logoutCallbackAsync)
{
_stateService = stateService;
@@ -55,7 +53,6 @@ namespace Bit.Core.Services
_policyService = policyService;
_sendService = sendService;
_keyConnectorService = keyConnectorService;
_logger = logger;
_logoutCallbackAsync = logoutCallbackAsync;
}
@@ -385,45 +382,5 @@ namespace Bit.Core.Services
new Dictionary<string, SendData>();
await _sendService.ReplaceAsync(sends);
}
public async Task SyncPasswordlessLoginRequestsAsync()
{
try
{
var userId = await _stateService.GetActiveUserIdAsync();
// if the user has not enabled passwordless logins ignore requests
if (!await _stateService.GetApprovePasswordlessLoginsAsync(userId))
{
return;
}
var loginRequests = await _apiService.GetAuthRequestAsync();
if (loginRequests == null || !loginRequests.Any())
{
return;
}
var validLoginRequest = loginRequests.Where(l => !l.IsAnswered && !l.IsExpired)
.OrderByDescending(x => x.CreationDate)
.FirstOrDefault();
if (validLoginRequest is null)
{
return;
}
await _stateService.SetPasswordlessLoginNotificationAsync(new PasswordlessRequestNotification()
{
Id = validLoginRequest.Id,
UserId = userId
});
_messagingService.Send(Constants.PasswordlessLoginRequestKey);
}
catch (Exception ex)
{
_logger.Exception(ex);
}
}
}
}

View File

@@ -29,8 +29,6 @@ namespace Bit.Core.Utilities
var messagingService = Resolve<IMessagingService>("messagingService");
var cryptoFunctionService = Resolve<ICryptoFunctionService>("cryptoFunctionService");
var cryptoService = Resolve<ICryptoService>("cryptoService");
var logger = Resolve<ILogger>();
SearchService searchService = null;
var tokenService = new TokenService(stateService);
@@ -69,7 +67,7 @@ namespace Bit.Core.Utilities
});
var syncService = new SyncService(stateService, apiService, settingsService, folderService, cipherService,
cryptoService, collectionService, organizationService, messagingService, policyService, sendService,
keyConnectorService, logger, (extras) =>
keyConnectorService, (extras) =>
{
messagingService.Send("logout", extras);
return Task.CompletedTask;

View File

@@ -9,34 +9,25 @@ using Google.Apis.Services;
namespace Bit.Publisher
{
// static class to hold global variables, etc.
static class Globals
{
// global string
// private const string Package = "com.x8bit.bitwarden";
public static string Package;
}
public class Program
{
private const string Package = "com.x8bit.bitwarden";
private static string _aabFilePath;
private static string _credsFilePath;
private static string _track;
static void Main(string[] args)
{
if (args.Length < 4)
if (args.Length < 3)
{
throw new ArgumentException("Not enough arguments (needs 4), got: " + args.Length);
throw new ArgumentException("Not enough arguments.");
}
try
{
_credsFilePath = args[0];
_aabFilePath = args[1];
Globals.Package = args[3];
var track = args[2].Substring(0, 1).ToLower();
if (track == "a")
@@ -88,7 +79,7 @@ namespace Bit.Publisher
});
service.HttpClient.Timeout = TimeSpan.FromMinutes(3);
var editRequest = service.Edits.Insert(null, Globals.Package);
var editRequest = service.Edits.Insert(null, Package);
var edit = await editRequest.ExecuteAsync();
Console.WriteLine("Created edit with id {0}.", edit.Id);
@@ -96,7 +87,7 @@ namespace Bit.Publisher
Bundle aab = null;
using (var stream = new FileStream(_aabFilePath, FileMode.Open))
{
var uploadMedia = service.Edits.Bundles.Upload(Globals.Package, edit.Id, stream,
var uploadMedia = service.Edits.Bundles.Upload(Package, edit.Id, stream,
"application/octet-stream");
var progress = await uploadMedia.UploadAsync();
@@ -123,12 +114,12 @@ namespace Bit.Publisher
{
new TrackRelease { VersionCodes = new List<long?> { aab.VersionCode }, Status = "completed" }
}
}, Globals.Package, edit.Id, _track);
}, Package, edit.Id, _track);
var updatedTrack = await trackRequest.ExecuteAsync();
Console.WriteLine("Track {0} has been updated.", updatedTrack.TrackValue);
var commitRequest = service.Edits.Commit(Globals.Package, edit.Id);
var commitRequest = service.Edits.Commit(Package, edit.Id);
var commitEdit = await commitRequest.ExecuteAsync();
Console.WriteLine("App edit with id {0} has been comitted.", commitEdit.Id);
}

View File

@@ -122,7 +122,7 @@
<comment>Max 30 characters</comment>
</data>
<data name="ShortDescription" xml:space="preserve">
<value>Bitwarden on tunnusten ja salasanojen hallinta, joka suojaa sinua verkossa.</value>
<value>Bitwarden on käyttäjätunnusten ja salasanojen hallintapalvelu, joka auttaa suojaamaan sinua verkossa.</value>
<comment>Max 80 characters</comment>
</data>
<data name="FullDesciption" xml:space="preserve">