Add more logs for offline to online import (#231)

This commit is contained in:
Neeraj Gupta 2023-09-05 15:40:44 +05:30 committed by GitHub
commit 5b8ccea31a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 49 additions and 19 deletions

View file

@ -1,5 +1,4 @@
import 'dart:convert';
import 'dart:typed_data';
import 'package:collection/collection.dart';
import 'package:ente_auth/core/configuration.dart';
@ -9,7 +8,6 @@ import 'package:ente_auth/models/authenticator/entity_result.dart';
import 'package:ente_auth/models/code.dart';
import 'package:ente_auth/services/authenticator_service.dart';
import 'package:ente_auth/store/offline_authenticator_db.dart';
import 'package:flutter/foundation.dart';
import 'package:logging/logging.dart';
class CodeStore {
@ -48,7 +46,7 @@ class CodeStore {
return codes;
}
Future<void> addCode(
Future<AddResult> addCode(
Code code, {
bool shouldSync = true,
AccountMode? accountMode,
@ -59,13 +57,15 @@ class CodeStore {
for (final existingCode in codes) {
if (existingCode == code) {
_logger.info("Found duplicate code, skipping add");
return;
return AddResult.duplicate;
} else if (existingCode.generatedID == code.generatedID) {
isExistingCode = true;
break;
}
}
late AddResult result;
if (isExistingCode) {
result = AddResult.updateCode;
await _authenticatorService.updateEntry(
code.generatedID!,
jsonEncode(code.rawData),
@ -73,6 +73,7 @@ class CodeStore {
mode,
);
} else {
result = AddResult.newCode;
code.generatedID = await _authenticatorService.addEntry(
jsonEncode(code.rawData),
shouldSync,
@ -80,6 +81,7 @@ class CodeStore {
);
}
Bus.instance.fire(CodesUpdatedEvent());
return result;
}
Future<void> removeCode(Code code, {AccountMode? accountMode}) async {
@ -89,6 +91,7 @@ class CodeStore {
}
Future<void> importOfflineCodes() async {
Logger logger = Logger('importOfflineCodes');
try {
Configuration config = Configuration.instance;
if (!config.hasConfiguredAccount() ||
@ -96,26 +99,48 @@ class CodeStore {
config.getOfflineSecretKey() == null) {
return;
}
_logger.info('starting offline imports');
logger.info('start import');
List<Code> offlineCodes =
await CodeStore.instance.getAllCodes(accountMode: AccountMode.offline);
if(offlineCodes.isEmpty) {
List<Code> offlineCodes = await CodeStore.instance
.getAllCodes(accountMode: AccountMode.offline);
if (offlineCodes.isEmpty) {
return;
}
bool isOnlineSyncDone = await AuthenticatorService.instance.onlineSync();
if(!isOnlineSyncDone) {
debugPrint("Skipping offline import since online sync failed");
if (!isOnlineSyncDone) {
logger.info("skip as online sync is not done");
return;
}
final List<Code> onlineCodes =
await CodeStore.instance.getAllCodes(accountMode: AccountMode.online);
logger.info(
'importing ${offlineCodes.length} offline codes with ${onlineCodes.length} online codes',
);
for (Code eachCode in offlineCodes) {
await CodeStore.instance.addCode(
eachCode,
accountMode: AccountMode.online,
shouldSync: false,
bool alreadyPresent = onlineCodes.any(
(oc) =>
oc.issuer == eachCode.issuer &&
oc.account == eachCode.account &&
oc.secret == eachCode.secret,
);
int? generatedID = eachCode.generatedID!;
logger.info(
'importingCode: genID ${eachCode.generatedID} & isAlreadyPresent $alreadyPresent',
);
if (!alreadyPresent) {
// Avoid conflict with generatedID of online codes
eachCode.generatedID = null;
final AddResult result = await CodeStore.instance.addCode(
eachCode,
accountMode: AccountMode.online,
shouldSync: false,
);
logger.info(
'importedCode: genID ${eachCode.generatedID} result: ${result.name}',
);
}
await OfflineAuthenticatorDB.instance.deleteByIDs(
generatedIDs: [eachCode.generatedID!],
generatedIDs: [generatedID],
);
}
AuthenticatorService.instance.onlineSync().ignore();
@ -124,3 +149,9 @@ class CodeStore {
}
}
}
enum AddResult {
newCode,
duplicate,
updateCode,
}

View file

@ -66,10 +66,9 @@ class _HomePageState extends State<HomePage> {
});
_initDeepLinks();
Future.delayed(
const Duration(seconds: 0),
() => CodeStore.instance.importOfflineCodes(),
const Duration(seconds: 1),
() async => await CodeStore.instance.importOfflineCodes(),
);
}
void _loadCodes() {

View file

@ -1,6 +1,6 @@
name: ente_auth
description: ente two-factor authenticator
version: 1.0.57+57
version: 1.0.58+58
publish_to: none
environment: