diff --git a/flutter/lib/main.dart b/flutter/lib/main.dart index ecf3455..a67548b 100644 --- a/flutter/lib/main.dart +++ b/flutter/lib/main.dart @@ -92,6 +92,8 @@ void main() async { print('[INIT] Skip Firebase init (Platform == Linux)...'); } + await appAuth.tryMigrateFromV1(); + print('[INIT] Load Notifications...'); final flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); diff --git a/flutter/lib/state/app_auth.dart b/flutter/lib/state/app_auth.dart index 6a389e8..aed86f0 100644 --- a/flutter/lib/state/app_auth.dart +++ b/flutter/lib/state/app_auth.dart @@ -1,5 +1,6 @@ import 'dart:convert'; +import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/foundation.dart'; import 'package:simplecloudnotifier/api/api_client.dart'; import 'package:simplecloudnotifier/api/api_exception.dart'; @@ -69,6 +70,51 @@ class AppAuth extends ChangeNotifier implements TokenSource { notifyListeners(); } + Future tryMigrateFromV1() async { + try { + final sp = Globals().sharedPrefs; + + if (sp.containsKey("auth.userid") || !sp.containsKey("user_id") || !sp.containsKey("user_key")) { + return false; + } + + final fcmToken = await FirebaseMessaging.instance.getToken(); + + if (fcmToken == null) { + ApplicationLog.error('Failed to migrate from v1: No FCM Token'); + return false; + } + + // migrate from v1 + + final oldUserID = sp.getString('user_id'); + final oldUserKey = sp.getString('user_key'); + + if (oldUserID == null || oldUserKey == null || oldUserID.isEmpty || oldUserKey.isEmpty) { + ApplicationLog.error('Failed to migrate from v1: user_id or user_key is null|empty'); + return false; + } + + final newTokenSend = await APIClient.createKeyToken(DirectTokenSource(oldUserID, oldUserKey), "SendKey (auto-migration to SCN v2)", "CS", true); + + final user = await APIClient.getUser(DirectTokenSource(oldUserID, oldUserKey), oldUserID); + + final client = await APIClient.addClient(DirectTokenSource(oldUserID, oldUserKey), fcmToken, Globals().deviceModel, Globals().version, Globals().hostname, Globals().clientType); + + set(user, client, oldUserKey, newTokenSend.token); + + sp.remove('user_id'); + sp.remove('user_key'); + + ApplicationLog.info('Migrated prefs from v1 to v2', additional: 'UserID: ${oldUserID}, ClientID: ${client.clientID}, TokenAdmin: ${oldUserKey}, TokenSend: ${newTokenSend.token}'); + + return true; + } catch (exc, trace) { + ApplicationLog.error('Failed to migrate from v1: ' + exc.toString(), trace: trace); + return false; + } + } + void load() { //final cdat = Globals().sharedPrefs.getString('auth.cdate'); //final mdat = Globals().sharedPrefs.getString('auth.mdate');