Browse Source

[SG-690] Login Request does not disappear after 15 minutes (#2106)

* [SG-690] Add timeout of 15 for android notifications. Add condition to not prompt login requests if 15mins have passed. Add constant for timeout time.

* [SG-690] Added dialog on click confirm/deny if the request is expired.

* [SG-690] PR fixes

* [SG-690] PR fixes
github-services/pull/2111/head
André Bispo 3 years ago committed by GitHub
parent
commit
90e0b5dcf0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      src/Android/Services/AndroidPushNotificationService.cs
  2. 5
      src/App/App.xaml.cs
  3. 7
      src/App/Pages/Accounts/LoginPasswordlessViewModel.cs
  4. 5168
      src/App/Resources/AppResources.Designer.cs
  5. 3
      src/App/Resources/AppResources.resx
  6. 1
      src/Core/Constants.cs

4
src/Android/Services/AndroidPushNotificationService.cs

@ -73,8 +73,7 @@ namespace Bit.Droid.Services @@ -73,8 +73,7 @@ namespace Bit.Droid.Services
{
throw new ArgumentNullException("notificationId cannot be null or empty.");
}
var context = Android.App.Application.Context;
var intent = new Intent(context, typeof(MainActivity));
var pendingIntentFlags = AndroidHelpers.AddPendingIntentMutabilityFlag(PendingIntentFlags.UpdateCurrent, true);
@ -83,6 +82,7 @@ namespace Bit.Droid.Services @@ -83,6 +82,7 @@ namespace Bit.Droid.Services
.SetContentIntent(pendingIntent)
.SetContentTitle(title)
.SetContentText(message)
.SetTimeoutAfter(Constants.PasswordlessNotificationTimeoutInMinutes * 60000)
.SetSmallIcon(Resource.Drawable.ic_notification)
.SetColor((int)Android.Graphics.Color.White)
.SetAutoCancel(true);

5
src/App/App.xaml.cs

@ -189,7 +189,10 @@ namespace Bit.App @@ -189,7 +189,10 @@ namespace Bit.App
});
await _stateService.SetPasswordlessLoginNotificationAsync(null);
_pushNotificationService.DismissLocalNotification(Constants.PasswordlessNotificationId);
await Device.InvokeOnMainThreadAsync(async () => await Application.Current.MainPage.Navigation.PushModalAsync(new NavigationPage(page)));
if (loginRequestData.CreationDate.AddMinutes(Constants.PasswordlessNotificationTimeoutInMinutes) > DateTime.Now)
{
await Device.InvokeOnMainThreadAsync(() => Application.Current.MainPage.Navigation.PushModalAsync(new NavigationPage(page)));
}
}
public AppOptions Options { get; private set; }

7
src/App/Pages/Accounts/LoginPasswordlessViewModel.cs

@ -65,6 +65,13 @@ namespace Bit.App.Pages @@ -65,6 +65,13 @@ namespace Bit.App.Pages
private async Task PasswordlessLoginAsync(bool approveRequest)
{
if (LoginRequest.RequestDate.AddMinutes(Constants.PasswordlessNotificationTimeoutInMinutes) <= DateTime.Now)
{
await _platformUtilsService.ShowDialogAsync(AppResources.LoginRequestHasAlreadyExpired);
await Page.Navigation.PopModalAsync();
return;
}
await _deviceActionService.ShowLoadingAsync(AppResources.Loading);
await _authService.PasswordlessLoginAsync(LoginRequest.Id, LoginRequest.PubKey, approveRequest);
await _deviceActionService.HideLoadingAsync();

5168
src/App/Resources/AppResources.Designer.cs generated

File diff suppressed because it is too large Load Diff

3
src/App/Resources/AppResources.resx

@ -2461,4 +2461,7 @@ select Add TOTP to store the key safely</value> @@ -2461,4 +2461,7 @@ select Add TOTP to store the key safely</value>
<data name="Decline" xml:space="preserve">
<value>Decline</value>
</data>
<data name="LoginRequestHasAlreadyExpired" xml:space="preserve">
<value>Login request has already expired.</value>
</data>
</root>

1
src/Core/Constants.cs

@ -36,6 +36,7 @@ @@ -36,6 +36,7 @@
public const int SelectFilePermissionRequestCode = 43;
public const int SaveFileRequestCode = 44;
public const int TotpDefaultTimer = 30;
public const int PasswordlessNotificationTimeoutInMinutes = 15;
public static readonly string[] AndroidAllClearCipherCacheKeys =
{

Loading…
Cancel
Save