1
0
mirror of https://github.com/bitwarden/mobile synced 2025-12-15 07:43:37 +00:00

centralized lock logic into a new lock service to be shared to extension

This commit is contained in:
Kyle Spearrin
2016-07-19 23:29:32 -04:00
parent 7fb51b5aa4
commit d0bf141c5d
10 changed files with 141 additions and 64 deletions

View File

@@ -0,0 +1,69 @@
using System;
using Bit.App.Abstractions;
using Plugin.Settings.Abstractions;
using Plugin.Fingerprint.Abstractions;
using Bit.App.Enums;
namespace Bit.App.Services
{
public class LockService : ILockService
{
private readonly ISettings _settings;
private readonly IAuthService _authService;
private readonly IFingerprint _fingerprint;
public LockService(
ISettings settings,
IAuthService authService,
IFingerprint fingerprint)
{
_settings = settings;
_authService = authService;
_fingerprint = fingerprint;
}
public LockType GetLockType(bool forceLock)
{
// Only lock if they are logged in
if(!_authService.IsAuthenticated)
{
return LockType.None;
}
// Are we forcing a lock? (i.e. clicking a button to lock the app manually, immediately)
if(!forceLock && !_settings.GetValueOrDefault(Constants.SettingLocked, false))
{
// Lock seconds tells if if they want to lock the app or not
var lockSeconds = _settings.GetValueOrDefault<int?>(Constants.SettingLockSeconds);
if(!lockSeconds.HasValue)
{
return LockType.None;
}
// Has it been longer than lockSeconds since the last time the app was backgrounded?
var now = DateTime.UtcNow;
var lastBackground = _settings.GetValueOrDefault(Constants.SettingLastBackgroundedDate, now.AddYears(-1));
if((now - lastBackground).TotalSeconds < lockSeconds.Value)
{
return LockType.None;
}
}
// What method are we using to unlock?
var fingerprintUnlock = _settings.GetValueOrDefault<bool>(Constants.SettingFingerprintUnlockOn);
var pinUnlock = _settings.GetValueOrDefault<bool>(Constants.SettingPinUnlockOn);
if(fingerprintUnlock && _fingerprint.IsAvailable)
{
return LockType.Fingerprint;
}
else if(pinUnlock && !string.IsNullOrWhiteSpace(_authService.PIN))
{
return LockType.PIN;
}
else
{
return LockType.Password;
}
}
}
}