ente/auth/lib/services/local_authentication_service.dart

83 lines
2.5 KiB
Dart
Raw Normal View History

import 'dart:io';
2022-11-01 06:13:06 +00:00
import 'package:ente_auth/core/configuration.dart';
import 'package:ente_auth/ui/tools/app_lock.dart';
import 'package:ente_auth/utils/auth_util.dart';
import 'package:ente_auth/utils/dialog_util.dart';
import 'package:ente_auth/utils/toast_util.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_local_authentication/flutter_local_authentication.dart';
2022-11-01 06:13:06 +00:00
import 'package:local_auth/local_auth.dart';
import 'package:logging/logging.dart';
2022-11-01 06:13:06 +00:00
class LocalAuthenticationService {
LocalAuthenticationService._privateConstructor();
static final LocalAuthenticationService instance =
LocalAuthenticationService._privateConstructor();
final logger = Logger((LocalAuthenticationService).toString());
2022-11-01 06:13:06 +00:00
Future<bool> requestLocalAuthentication(
BuildContext context,
String infoMessage,
) async {
if (await _isLocalAuthSupportedOnDevice()) {
2023-04-10 04:17:45 +00:00
AppLock.of(context)!.setEnabled(false);
2023-11-14 04:51:03 +00:00
final result = await requestAuthentication(context, infoMessage);
2023-04-10 04:17:45 +00:00
AppLock.of(context)!.setEnabled(
2022-11-01 06:13:06 +00:00
Configuration.instance.shouldShowLockScreen(),
);
if (!result) {
showToast(context, infoMessage);
return false;
} else {
return true;
}
}
return true;
}
Future<bool> requestLocalAuthForLockScreen(
BuildContext context,
bool shouldEnableLockScreen,
String infoMessage,
String errorDialogContent, [
String errorDialogTitle = "",
]) async {
if (await _isLocalAuthSupportedOnDevice()) {
2023-04-10 04:17:45 +00:00
AppLock.of(context)!.disable();
2022-11-01 06:13:06 +00:00
final result = await requestAuthentication(
2023-11-14 04:51:03 +00:00
context,
2022-11-01 06:13:06 +00:00
infoMessage,
);
if (result) {
2023-04-10 04:17:45 +00:00
AppLock.of(context)!.setEnabled(shouldEnableLockScreen);
2022-11-01 06:13:06 +00:00
await Configuration.instance
.setShouldShowLockScreen(shouldEnableLockScreen);
return true;
} else {
2023-04-10 04:17:45 +00:00
AppLock.of(context)!
2022-11-01 06:13:06 +00:00
.setEnabled(Configuration.instance.shouldShowLockScreen());
}
} else {
2024-03-07 08:16:05 +00:00
// ignore: unawaited_futures
2022-11-01 06:13:06 +00:00
showErrorDialog(
context,
errorDialogTitle,
errorDialogContent,
);
}
return false;
}
Future<bool> _isLocalAuthSupportedOnDevice() async {
try {
return Platform.isMacOS || Platform.isLinux
? await FlutterLocalAuthentication().canAuthenticate()
: await LocalAuthentication().isDeviceSupported();
} on MissingPluginException {
return false;
}
2022-11-01 06:13:06 +00:00
}
}