create service file for local authentication

This commit is contained in:
ashilkn 2022-09-05 16:02:04 +05:30
parent bf1743cb8f
commit 1b06395e9c
5 changed files with 44 additions and 31 deletions

View file

@ -0,0 +1,32 @@
import 'package:flutter/material.dart';
import 'package:local_auth/local_auth.dart';
import 'package:photos/core/configuration.dart';
import 'package:photos/ui/tools/app_lock.dart';
import 'package:photos/utils/auth_util.dart';
import 'package:photos/utils/toast_util.dart';
class LocalAuthenticationService {
LocalAuthenticationService._privateConstructor();
static final LocalAuthenticationService instance =
LocalAuthenticationService._privateConstructor();
Future<bool> requestLocalAuthentication(
BuildContext context,
String reason,
) async {
if (await LocalAuthentication().isDeviceSupported()) {
AppLock.of(context).setEnabled(false);
final result = await requestAuthentication(reason);
AppLock.of(context).setEnabled(
Configuration.instance.shouldShowLockScreen(),
);
if (!result) {
showToast(context, reason);
return false;
} else {
return true;
}
}
return true;
}
}

View file

@ -3,7 +3,6 @@ import 'dart:typed_data';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter_sodium/flutter_sodium.dart';
import 'package:local_auth/local_auth.dart';
import 'package:logging/logging.dart';
import 'package:photos/core/configuration.dart';
import 'package:photos/core/event_bus.dart';
@ -26,8 +25,6 @@ import 'package:photos/ui/account/password_reentry_page.dart';
import 'package:photos/ui/account/two_factor_authentication_page.dart';
import 'package:photos/ui/account/two_factor_recovery_page.dart';
import 'package:photos/ui/account/two_factor_setup_page.dart';
import 'package:photos/ui/tools/app_lock.dart';
import 'package:photos/utils/auth_util.dart';
import 'package:photos/utils/crypto_util.dart';
import 'package:photos/utils/dialog_util.dart';
import 'package:photos/utils/navigation_util.dart';
@ -849,26 +846,6 @@ class UserService {
}
}
Future<bool> localAuthenticationService(
BuildContext context,
String reason,
) async {
if (await LocalAuthentication().isDeviceSupported()) {
AppLock.of(context).setEnabled(false);
final result = await requestAuthentication(reason);
AppLock.of(context).setEnabled(
Configuration.instance.shouldShowLockScreen(),
);
if (!result) {
showToast(context, reason);
return false;
} else {
return true;
}
}
return true;
}
Future<void> _saveConfiguration(Response response) async {
await Configuration.instance.setUserID(response.data["id"]);
if (response.data["encryptedToken"] != null) {

View file

@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_sodium/flutter_sodium.dart';
import 'package:photos/core/configuration.dart';
import 'package:photos/models/delete_account.dart';
import 'package:photos/services/local_authentication_service.dart';
import 'package:photos/services/user_service.dart';
import 'package:photos/ui/common/dialogs.dart';
import 'package:photos/ui/common/gradient_button.dart';
@ -142,7 +143,7 @@ class DeleteAccountPage extends StatelessWidget {
DeleteChallengeResponse response,
) async {
final hasAuthenticatedOrNoLocalAuth =
await UserService.instance.localAuthenticationService(
await LocalAuthenticationService.instance.requestAuthentication(
context,
"Please authenticate to initiate account deletion",
);

View file

@ -1,6 +1,7 @@
import 'package:expandable/expandable.dart';
import 'package:flutter/material.dart';
import 'package:flutter_sodium/flutter_sodium.dart';
import 'package:photos/services/local_authentication_service.dart';
import 'package:photos/services/user_service.dart';
import 'package:photos/ui/account/change_email_dialog.dart';
import 'package:photos/ui/account/password_entry_page.dart';
@ -36,7 +37,7 @@ class AccountSectionWidgetState extends State<AccountSectionWidget> {
behavior: HitTestBehavior.translucent,
onTap: () async {
final hasAuthenticatedOrNoLocalAuth =
await UserService.instance.localAuthenticationService(
await LocalAuthenticationService.instance.requestAuthentication(
context,
"Please authenticate to view your recovery key",
);
@ -69,7 +70,7 @@ class AccountSectionWidgetState extends State<AccountSectionWidget> {
behavior: HitTestBehavior.translucent,
onTap: () async {
final hasAuthenticatedOrNoLocalAuth =
await UserService.instance.localAuthenticationService(
await LocalAuthenticationService.instance.requestAuthentication(
context,
"Please authenticate to change your email",
);
@ -94,7 +95,7 @@ class AccountSectionWidgetState extends State<AccountSectionWidget> {
behavior: HitTestBehavior.translucent,
onTap: () async {
final hasAuthenticatedOrNoLocalAuth =
await UserService.instance.localAuthenticationService(
await LocalAuthenticationService.instance.requestAuthentication(
context,
"Please authenticate to change your password",
);

View file

@ -9,6 +9,7 @@ import 'package:photos/core/configuration.dart';
import 'package:photos/core/event_bus.dart';
import 'package:photos/ente_theme_data.dart';
import 'package:photos/events/two_factor_status_change_event.dart';
import 'package:photos/services/local_authentication_service.dart';
import 'package:photos/services/user_service.dart';
import 'package:photos/ui/account/sessions_page.dart';
import 'package:photos/ui/common/loading_widget.dart';
@ -81,8 +82,8 @@ class _SecuritySectionWidgetState extends State<SecuritySectionWidget> {
value: snapshot.data,
onChanged: (value) async {
final hasAuthenticatedOrNoLocalAuth =
await UserService.instance
.localAuthenticationService(
await LocalAuthenticationService.instance
.requestLocalAuthentication(
context,
"Please authenticate to configure two-factor authentication",
);
@ -253,8 +254,9 @@ class _SecuritySectionWidgetState extends State<SecuritySectionWidget> {
GestureDetector(
behavior: HitTestBehavior.translucent,
onTap: () async {
final hasAuthenticatedOrNoLocalAuth =
await UserService.instance.localAuthenticationService(
final hasAuthenticatedOrNoLocalAuth = await LocalAuthenticationService
.instance
.requestLocalAuthentication(
context,
"Please authenticate to view your active sessions",
);