Skip to content

Commit

Permalink
#15: Require auth check when enabling biometrics auth.
Browse files Browse the repository at this point in the history
+ Rename Authentication class to Biometrics.
  • Loading branch information
Berna-L committed Apr 8, 2023
1 parent c4ab08c commit 44a88b6
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 17 deletions.
28 changes: 16 additions & 12 deletions lib/biometrics.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,17 @@ import 'package:local_auth/local_auth.dart';
import 'generalsetting.dart';
import 'home.dart';

enum AuthenticationStatus {
enum BiometricsAuthStatus {
DONE,
IN_PROGRESS,
NOT_AUTHENTICATED
}

class Authentication {
class Biometrics {

static Authentication instance = new Authentication();
static Biometrics instance = new Biometrics();

AuthenticationStatus authStatus = AuthenticationStatus.NOT_AUTHENTICATED;
BiometricsAuthStatus authStatus = BiometricsAuthStatus.NOT_AUTHENTICATED;

var authentication = new LocalAuthentication();

Expand All @@ -28,31 +28,35 @@ class Authentication {
homePageState.updateOtp();
break;
case AppLifecycleState.paused:
authStatus = AuthenticationStatus.NOT_AUTHENTICATED;
authStatus = BiometricsAuthStatus.NOT_AUTHENTICATED;
homePageState.updateOtp();
break;
default:
if (authStatus != AuthenticationStatus.DONE) {
if (authStatus != BiometricsAuthStatus.DONE) {
await forceAuthentication();
homePageState.updateOtp();
}
}
}

Future<void> forceAuthentication() async {
if (!(await authentication.canCheckBiometrics) || authStatus == AuthenticationStatus.DONE) {
if (!(await authentication.canCheckBiometrics) || authStatus == BiometricsAuthStatus.DONE) {
return;
}
if (await GeneralSetting.getRequireBiometrics()) {
var authenticated = false;
while (!authenticated) {
authenticated = await authentication.authenticate(
localizedReason:
"XL Authenticator is configured to require your biometrics.",
options: new AuthenticationOptions(stickyAuth: true, biometricOnly: true));
authenticated = await authenticate();
}
}
authStatus = AuthenticationStatus.DONE;
authStatus = BiometricsAuthStatus.DONE;
}

Future<bool> authenticate() {
return authentication.authenticate(
localizedReason:
"XL Authenticator is configured to require your biometrics.",
options: new AuthenticationOptions(stickyAuth: true, biometricOnly: true));
}

}
6 changes: 3 additions & 3 deletions lib/home.dart
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ class HomePageState extends State<HomePage> with TickerProviderStateMixin, Widge

Future<void> setup() async {
var savedAccount = await SavedAccount.getSaved();
await Authentication.instance.forceAuthentication();
await Biometrics.instance.forceAuthentication();
if (savedAccount != null) {
savedSecret = savedAccount.secret as String;
showNewOtp();
Expand Down Expand Up @@ -127,7 +127,7 @@ class HomePageState extends State<HomePage> with TickerProviderStateMixin, Widge

@override
void didChangeAppLifecycleState(AppLifecycleState state) async {
await Authentication.instance.lifecycleAuth(state);
await Biometrics.instance.lifecycleAuth(state);
}


Expand All @@ -145,7 +145,7 @@ class HomePageState extends State<HomePage> with TickerProviderStateMixin, Widge
}

String getCode() {
if (savedSecret == null || Authentication.instance.authStatus != AuthenticationStatus.DONE) {
if (savedSecret == null || Biometrics.instance.authStatus != BiometricsAuthStatus.DONE) {
return "???";
}

Expand Down
7 changes: 5 additions & 2 deletions lib/set.dart
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,10 @@ class _SettingsPageState extends State<SettingsPage> with WidgetsBindingObserver


GeneralSetting.getRequireBiometrics().then((value) {
setState(() {
setState(() async {
if (value) {
isBiometricsRequired = await Biometrics.instance.authenticate();
}
isBiometricsRequired = value;
});
});
Expand Down Expand Up @@ -69,7 +72,7 @@ class _SettingsPageState extends State<SettingsPage> with WidgetsBindingObserver

@override
void didChangeAppLifecycleState(AppLifecycleState state) {
Authentication.instance.lifecycleAuth(state);
Biometrics.instance.lifecycleAuth(state);
}

@override
Expand Down

0 comments on commit 44a88b6

Please sign in to comment.