From 9b67d58ee433f1a2c7b6b99b23b5377e84ef4918 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Tue, 17 Jun 2025 00:18:41 +0800 Subject: [PATCH] :bug: Fixes some bugs in OIDC --- assets/images/oidc/discord.svg | 1 + assets/images/oidc/github.svg | 1 + assets/images/oidc/microsoft.svg | 2 +- ios/Podfile.lock | 43 --- lib/screens/account/me/settings.dart | 9 +- .../account/me/settings_connections.dart | 43 ++- lib/screens/auth/login.dart | 58 +-- lib/screens/auth/oidc.native.dart | 35 +- lib/screens/auth/oidc.web.dart | 20 +- macos/Flutter/GeneratedPluginRegistrant.swift | 2 - macos/Podfile.lock | 362 ++++++++++++++++++ macos/Runner.xcodeproj/project.pbxproj | 14 +- macos/Runner/Configs/AppInfo.xcconfig | 4 +- pubspec.lock | 48 --- pubspec.yaml | 1 - 15 files changed, 457 insertions(+), 186 deletions(-) create mode 100644 assets/images/oidc/discord.svg create mode 100644 assets/images/oidc/github.svg create mode 100644 macos/Podfile.lock diff --git a/assets/images/oidc/discord.svg b/assets/images/oidc/discord.svg new file mode 100644 index 0000000..3e52154 --- /dev/null +++ b/assets/images/oidc/discord.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/oidc/github.svg b/assets/images/oidc/github.svg new file mode 100644 index 0000000..37fa923 --- /dev/null +++ b/assets/images/oidc/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/oidc/microsoft.svg b/assets/images/oidc/microsoft.svg index 5334aa7..13307b7 100644 --- a/assets/images/oidc/microsoft.svg +++ b/assets/images/oidc/microsoft.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 52c5629..acaa896 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,15 +1,5 @@ PODS: - Alamofire (5.10.2) - - AppAuth (1.7.6): - - AppAuth/Core (= 1.7.6) - - AppAuth/ExternalUserAgent (= 1.7.6) - - AppAuth/Core (1.7.6) - - AppAuth/ExternalUserAgent (1.7.6): - - AppAuth/Core - - AppCheckCore (11.2.0): - - GoogleUtilities/Environment (~> 8.0) - - GoogleUtilities/UserDefaults (~> 8.0) - - PromisesObjC (~> 2.4) - connectivity_plus (0.0.1): - Flutter - croppy (0.0.1): @@ -105,20 +95,9 @@ PODS: - gal (1.0.0): - Flutter - FlutterMacOS - - google_sign_in_ios (0.0.1): - - AppAuth (>= 1.7.4) - - Flutter - - FlutterMacOS - - GoogleSignIn (~> 8.0) - - GTMSessionFetcher (>= 3.4.0) - GoogleDataTransport (10.1.0): - nanopb (~> 3.30910.0) - PromisesObjC (~> 2.4) - - GoogleSignIn (8.0.0): - - AppAuth (< 2.0, >= 1.7.3) - - AppCheckCore (~> 11.0) - - GTMAppAuth (< 5.0, >= 4.1.1) - - GTMSessionFetcher/Core (~> 3.3) - GoogleUtilities/AppDelegateSwizzler (8.1.0): - GoogleUtilities/Environment - GoogleUtilities/Logger @@ -143,14 +122,6 @@ PODS: - GoogleUtilities/UserDefaults (8.1.0): - GoogleUtilities/Logger - GoogleUtilities/Privacy - - GTMAppAuth (4.1.1): - - AppAuth/Core (~> 1.7) - - GTMSessionFetcher/Core (< 4.0, >= 3.3) - - GTMSessionFetcher (3.5.0): - - GTMSessionFetcher/Full (= 3.5.0) - - GTMSessionFetcher/Core (3.5.0) - - GTMSessionFetcher/Full (3.5.0): - - GTMSessionFetcher/Core - image_picker_ios (0.0.1): - Flutter - irondash_engine_context (0.0.1): @@ -241,7 +212,6 @@ DEPENDENCIES: - flutter_udid (from `.symlinks/plugins/flutter_udid/ios`) - flutter_webrtc (from `.symlinks/plugins/flutter_webrtc/ios`) - gal (from `.symlinks/plugins/gal/darwin`) - - google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/darwin`) - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) - irondash_engine_context (from `.symlinks/plugins/irondash_engine_context/ios`) - Kingfisher (~> 8.0) @@ -264,8 +234,6 @@ DEPENDENCIES: SPEC REPOS: trunk: - Alamofire - - AppAuth - - AppCheckCore - DKImagePickerController - DKPhotoGallery - Firebase @@ -274,10 +242,7 @@ SPEC REPOS: - FirebaseInstallations - FirebaseMessaging - GoogleDataTransport - - GoogleSignIn - GoogleUtilities - - GTMAppAuth - - GTMSessionFetcher - Kingfisher - nanopb - OrderedSet @@ -317,8 +282,6 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/flutter_webrtc/ios" gal: :path: ".symlinks/plugins/gal/darwin" - google_sign_in_ios: - :path: ".symlinks/plugins/google_sign_in_ios/darwin" image_picker_ios: :path: ".symlinks/plugins/image_picker_ios/ios" irondash_engine_context: @@ -356,8 +319,6 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: Alamofire: 7193b3b92c74a07f85569e1a6c4f4237291e7496 - AppAuth: d4f13a8fe0baf391b2108511793e4b479691fb73 - AppCheckCore: cc8fd0a3a230ddd401f326489c99990b013f0c4f connectivity_plus: cb623214f4e1f6ef8fe7403d580fdad517d2f7dd croppy: 979e8ddc254f4642bffe7d52dc7193354b27ba30 device_info_plus: 21fcca2080fbcd348be798aa36c3e5ed849eefbe @@ -379,12 +340,8 @@ SPEC CHECKSUMS: flutter_udid: f7c3884e6ec2951efe4f9de082257fc77c4d15e9 flutter_webrtc: fd0d3bdef8766a0736dbbe2e5b7e85f1f3c52117 gal: baecd024ebfd13c441269ca7404792a7152fde89 - google_sign_in_ios: b48bb9af78576358a168361173155596c845f0b9 GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 - GoogleSignIn: ce8c89bb9b37fb624b92e7514cc67335d1e277e4 GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 - GTMAppAuth: f69bd07d68cd3b766125f7e072c45d7340dea0de - GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6 image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a irondash_engine_context: 8e58ca8e0212ee9d1c7dc6a42121849986c88486 Kingfisher: 0621d0ac0c78fecb19f6dc5303bde2b52abaf2f5 diff --git a/lib/screens/account/me/settings.dart b/lib/screens/account/me/settings.dart index 9c38fb5..d86d2c7 100644 --- a/lib/screens/account/me/settings.dart +++ b/lib/screens/account/me/settings.dart @@ -174,7 +174,14 @@ class AccountSettingsScreen extends HookConsumerWidget { ) : Text(connection.providedIdentifier), leading: CircleAvatar( - child: Icon(getProviderIcon(connection.provider)), + child: getProviderIcon( + connection.provider, + size: 16, + color: + Theme.of( + context, + ).colorScheme.onPrimaryContainer, + ), ).padding(top: 4), trailing: const Icon(Symbols.chevron_right), isThreeLine: true, diff --git a/lib/screens/account/me/settings_connections.dart b/lib/screens/account/me/settings_connections.dart index 34dc2e3..6dd5e5c 100644 --- a/lib/screens/account/me/settings_connections.dart +++ b/lib/screens/account/me/settings_connections.dart @@ -1,7 +1,7 @@ -import 'package:auto_route/auto_route.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import 'package:gap/gap.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:island/models/auth.dart'; @@ -17,20 +17,24 @@ import 'package:sign_in_with_apple/sign_in_with_apple.dart'; import 'package:styled_widget/styled_widget.dart'; // Helper function to get provider icon and localized name -IconData getProviderIcon(String provider) { - switch (provider.toLowerCase()) { +Widget getProviderIcon(String provider, {double size = 24, Color? color}) { + final providerLower = provider.toLowerCase(); + + // Check if we have an SVG for this provider + switch (providerLower) { case 'apple': - return Icons.apple; case 'microsoft': - return Symbols.window; // Microsoft icon alternative case 'google': - return Symbols.g_translate; // Google icon alternative case 'github': - return Symbols.code; // GitHub icon case 'discord': - return Symbols.forum; // Discord icon alternative + return SvgPicture.asset( + 'assets/images/oidc/$providerLower.svg', + width: size, + height: size, + color: color, + ); default: - return Symbols.link; + return Icon(Symbols.link, size: size); } } @@ -84,7 +88,11 @@ class AccountConnectionSheet extends HookConsumerWidget { crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.center, children: [ - Icon(getProviderIcon(connection.provider), size: 32), + getProviderIcon( + connection.provider, + size: 32, + color: Theme.of(context).colorScheme.onSurface, + ), const Gap(8), Text(getLocalizedProviderName(connection.provider)).tr(), const Gap(4), @@ -161,15 +169,15 @@ class AccountConnectionNewSheet extends HookConsumerWidget { case 'google': case 'github': case 'discord': - final token = await Navigator.of(context).push( + await Navigator.of(context).push( MaterialPageRoute( builder: (context) => OidcScreen( provider: selectedProvider.value.toLowerCase(), + title: 'Connect with ${selectedProvider.value}', ), ), ); - print(token); break; default: showSnackBar(context, 'accountConnectionAddError'.tr()); @@ -186,7 +194,11 @@ class AccountConnectionNewSheet extends HookConsumerWidget { DropdownButtonFormField( value: selectedProvider.value, decoration: InputDecoration( - prefixIcon: Icon(getProviderIcon(selectedProvider.value)), + prefixIcon: getProviderIcon( + selectedProvider.value, + size: 16, + color: Theme.of(context).colorScheme.onSurface, + ).padding(all: 16), labelText: 'accountConnectionProvider'.tr(), border: const OutlineInputBorder(), ), @@ -304,8 +316,9 @@ class AccountConnectionsSheet extends HookConsumerWidget { return false; }, child: ListTile( - leading: Icon( - getProviderIcon(connection.provider), + leading: getProviderIcon( + connection.provider, + color: Theme.of(context).colorScheme.onSurface, ), title: Text( diff --git a/lib/screens/auth/login.dart b/lib/screens/auth/login.dart index d747a69..282b42d 100644 --- a/lib/screens/auth/login.dart +++ b/lib/screens/auth/login.dart @@ -11,8 +11,6 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:flutter_otp_text_field/flutter_otp_text_field.dart'; -import 'package:flutter_svg/svg.dart'; -import 'package:google_sign_in/google_sign_in.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:gap/gap.dart'; import 'package:island/models/auth.dart'; @@ -20,6 +18,7 @@ import 'package:island/pods/config.dart'; import 'package:island/pods/network.dart'; import 'package:island/pods/userinfo.dart'; import 'package:island/pods/websocket.dart'; +import 'package:island/screens/account/me/settings_connections.dart'; import 'package:island/services/notify.dart'; import 'package:island/services/udid.dart'; import 'package:island/widgets/alert.dart'; @@ -271,7 +270,6 @@ class _LoginCheckScreen extends HookConsumerWidget { ], decoration: InputDecoration( isDense: true, - border: const OutlineInputBorder(), labelText: 'password'.tr(), ), onTapOutside: (_) => FocusManager.instance.primaryFocus?.unfocus(), @@ -292,14 +290,12 @@ class _LoginCheckScreen extends HookConsumerWidget { textStyle: Theme.of(context).textTheme.titleLarge!, ), const Gap(12), - Card( - child: ListTile( - leading: Icon( - kFactorTypes[factor!.type]?.$3 ?? Symbols.question_mark, - ), - title: Text(kFactorTypes[factor!.type]?.$1 ?? 'unknown').tr(), - subtitle: Text(kFactorTypes[factor!.type]?.$2 ?? 'unknown').tr(), + ListTile( + leading: Icon( + kFactorTypes[factor!.type]?.$3 ?? Symbols.question_mark, ), + title: Text(kFactorTypes[factor!.type]?.$1 ?? 'unknown').tr(), + subtitle: Text(kFactorTypes[factor!.type]?.$2 ?? 'unknown').tr(), ), const Gap(12), Row( @@ -604,25 +600,6 @@ class _LoginLookupScreen extends HookConsumerWidget { } } - Future withGoogle() async { - // TODO This crashes for no reason - GoogleSignIn gsi = GoogleSignIn( - clientId: - kIsWeb - ? '961776991058-963m1qin2vtp8fv693b5fdrab5hmpl89.apps.googleusercontent.com' - : (Platform.isIOS || Platform.isMacOS) - ? '961776991058-stt7et4qvn3cpscl4r61gl1hnlatqkig.apps.googleusercontent.com' - : '961776991058-r4iv9qoio57ul7utbfpgfrda2etvtch8.apps.googleusercontent.com', - scopes: ['openid', 'https://www.googleapis.com/auth/userinfo.email'], - ); - - try { - var ga = await gsi.signIn(); - } catch (err) { - showErrorAlert(err); - } - } - return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -658,28 +635,13 @@ class _LoginLookupScreen extends HookConsumerWidget { Text("loginOr").tr().fontSize(11).opacity(0.85), const Gap(8), Spacer(), - // IconButton.filledTonal( - // // onPressed: withGoogle, - // padding: EdgeInsets.zero, - // icon: SvgPicture.asset( - // 'assets/images/oidc/google.svg', - // width: 16, - // height: 16, - // ), - // tooltip: 'Google', - // ), IconButton.filledTonal( onPressed: withApple, padding: EdgeInsets.zero, - icon: SvgPicture.asset( - 'assets/images/oidc/apple.svg', - width: 16, - height: 16, - color: - MediaQuery.of(context).platformBrightness == - Brightness.light - ? Colors.black54 - : Colors.white, + icon: getProviderIcon( + "apple", + size: 16, + color: Theme.of(context).colorScheme.onPrimaryContainer, ), tooltip: 'Apple Account', ), diff --git a/lib/screens/auth/oidc.native.dart b/lib/screens/auth/oidc.native.dart index 57d27d6..c499873 100644 --- a/lib/screens/auth/oidc.native.dart +++ b/lib/screens/auth/oidc.native.dart @@ -1,36 +1,55 @@ +import 'dart:io'; + +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:island/pods/config.dart'; +import 'package:island/pods/network.dart'; import 'package:island/widgets/app_scaffold.dart'; class OidcScreen extends ConsumerStatefulWidget { final String provider; + final String? title; - const OidcScreen({super.key, required this.provider}); + const OidcScreen({super.key, required this.provider, this.title}); @override - ConsumerState createState() => _OIDCScreenState(); + ConsumerState createState() => _OidcScreenState(); } -class _OIDCScreenState extends ConsumerState { - InAppWebViewController? _webViewController; +class _OidcScreenState extends ConsumerState { String? authToken; @override Widget build(BuildContext context) { final serverUrl = ref.watch(serverUrlProvider); + final token = ref.watch(tokenProvider); return AppScaffold( - appBar: AppBar(title: Text('login').tr()), + appBar: AppBar( + title: widget.title != null ? Text(widget.title!) : Text('login').tr(), + ), body: InAppWebView( + initialSettings: InAppWebViewSettings( + userAgent: + kIsWeb + ? null + : Platform.isIOS + ? 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1' + : Platform.isAndroid + ? 'Mozilla/5.0 (Linux; Android 13) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36' + : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', + ), initialUrlRequest: URLRequest( - url: WebUri('$serverUrl/auth/login/${widget.provider}'), + url: WebUri( + (token?.token.isNotEmpty ?? false) + ? '$serverUrl/auth/login/${widget.provider}?tk=${token!.token}' + : '$serverUrl/auth/login/${widget.provider}', + ), ), onWebViewCreated: (controller) { - _webViewController = controller; - // Register a handler to receive the token from JavaScript controller.addJavaScriptHandler( handlerName: 'tokenHandler', diff --git a/lib/screens/auth/oidc.web.dart b/lib/screens/auth/oidc.web.dart index fa3ad21..c27e3de 100644 --- a/lib/screens/auth/oidc.web.dart +++ b/lib/screens/auth/oidc.web.dart @@ -4,20 +4,22 @@ import 'dart:ui_web' as ui; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:island/pods/config.dart'; +import 'package:island/pods/network.dart'; import 'package:island/widgets/app_scaffold.dart'; import 'package:web/web.dart' as web; import 'package:flutter/material.dart'; class OidcScreen extends ConsumerStatefulWidget { final String provider; + final String? title; - const OidcScreen({super.key, required this.provider}); + const OidcScreen({super.key, required this.provider, this.title}); @override - ConsumerState createState() => _OIDCScreenState(); + ConsumerState createState() => _OidcScreenState(); } -class _OIDCScreenState extends ConsumerState { +class _OidcScreenState extends ConsumerState { bool _isInitialized = false; final String _viewType = 'oidc-iframe'; @@ -29,15 +31,19 @@ class _OIDCScreenState extends ConsumerState { if (message.startsWith("token=")) { String token = message.replaceFirst("token=", ""); // Return the token and close the screen - if (context.mounted) Navigator.pop(context, token); + if (mounted) Navigator.pop(context, token); } } }); // Create the iframe for the OIDC login + final token = ref.watch(tokenProvider); final iframe = web.HTMLIFrameElement() - ..src = '$serverUrl/auth/login/${widget.provider}' + ..src = + (token?.token.isNotEmpty ?? false) + ? '$serverUrl/auth/login/${widget.provider}?tk=${token!.token}' + : '$serverUrl/auth/login/${widget.provider}' ..style.border = 'none' ..width = '100%' ..height = '100%'; @@ -68,7 +74,9 @@ class _OIDCScreenState extends ConsumerState { @override Widget build(BuildContext context) { return AppScaffold( - appBar: AppBar(title: Text('login').tr()), + appBar: AppBar( + title: widget.title != null ? Text(widget.title!) : Text('login').tr(), + ), body: _isInitialized ? HtmlElementView(viewType: _viewType) diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 3dfea74..8824bf0 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -18,7 +18,6 @@ import flutter_timezone import flutter_udid import flutter_webrtc import gal -import google_sign_in_ios import irondash_engine_context import livekit_client import media_kit_libs_macos_video @@ -50,7 +49,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { FlutterUdidPlugin.register(with: registry.registrar(forPlugin: "FlutterUdidPlugin")) FlutterWebRTCPlugin.register(with: registry.registrar(forPlugin: "FlutterWebRTCPlugin")) GalPlugin.register(with: registry.registrar(forPlugin: "GalPlugin")) - FLTGoogleSignInPlugin.register(with: registry.registrar(forPlugin: "FLTGoogleSignInPlugin")) IrondashEngineContextPlugin.register(with: registry.registrar(forPlugin: "IrondashEngineContextPlugin")) LiveKitPlugin.register(with: registry.registrar(forPlugin: "LiveKitPlugin")) MediaKitLibsMacosVideoPlugin.register(with: registry.registrar(forPlugin: "MediaKitLibsMacosVideoPlugin")) diff --git a/macos/Podfile.lock b/macos/Podfile.lock new file mode 100644 index 0000000..a0b9107 --- /dev/null +++ b/macos/Podfile.lock @@ -0,0 +1,362 @@ +PODS: + - AppAuth (1.7.6): + - AppAuth/Core (= 1.7.6) + - AppAuth/ExternalUserAgent (= 1.7.6) + - AppAuth/Core (1.7.6) + - AppAuth/ExternalUserAgent (1.7.6): + - AppAuth/Core + - AppCheckCore (11.2.0): + - GoogleUtilities/Environment (~> 8.0) + - GoogleUtilities/UserDefaults (~> 8.0) + - PromisesObjC (~> 2.4) + - bitsdojo_window_macos (0.0.1): + - FlutterMacOS + - connectivity_plus (0.0.1): + - FlutterMacOS + - croppy (0.0.1): + - FlutterMacOS + - device_info_plus (0.0.1): + - FlutterMacOS + - file_picker (0.0.1): + - FlutterMacOS + - file_selector_macos (0.0.1): + - FlutterMacOS + - Firebase/CoreOnly (11.13.0): + - FirebaseCore (~> 11.13.0) + - Firebase/Messaging (11.13.0): + - Firebase/CoreOnly + - FirebaseMessaging (~> 11.13.0) + - firebase_core (3.14.0): + - Firebase/CoreOnly (~> 11.13.0) + - FlutterMacOS + - firebase_messaging (15.2.7): + - Firebase/CoreOnly (~> 11.13.0) + - Firebase/Messaging (~> 11.13.0) + - firebase_core + - FlutterMacOS + - FirebaseCore (11.13.0): + - FirebaseCoreInternal (~> 11.13.0) + - GoogleUtilities/Environment (~> 8.1) + - GoogleUtilities/Logger (~> 8.1) + - FirebaseCoreInternal (11.13.0): + - "GoogleUtilities/NSData+zlib (~> 8.1)" + - FirebaseInstallations (11.13.0): + - FirebaseCore (~> 11.13.0) + - GoogleUtilities/Environment (~> 8.1) + - GoogleUtilities/UserDefaults (~> 8.1) + - PromisesObjC (~> 2.4) + - FirebaseMessaging (11.13.0): + - FirebaseCore (~> 11.13.0) + - FirebaseInstallations (~> 11.0) + - GoogleDataTransport (~> 10.0) + - GoogleUtilities/AppDelegateSwizzler (~> 8.1) + - GoogleUtilities/Environment (~> 8.1) + - GoogleUtilities/Reachability (~> 8.1) + - GoogleUtilities/UserDefaults (~> 8.1) + - nanopb (~> 3.30910.0) + - flutter_inappwebview_macos (0.0.1): + - FlutterMacOS + - OrderedSet (~> 6.0.3) + - flutter_platform_alert (0.0.1): + - FlutterMacOS + - flutter_timezone (0.1.0): + - FlutterMacOS + - flutter_udid (0.0.1): + - FlutterMacOS + - SAMKeychain + - flutter_webrtc (0.14.0): + - FlutterMacOS + - WebRTC-SDK (= 125.6422.07) + - FlutterMacOS (1.0.0) + - gal (1.0.0): + - Flutter + - FlutterMacOS + - google_sign_in_ios (0.0.1): + - AppAuth (>= 1.7.4) + - Flutter + - FlutterMacOS + - GoogleSignIn (~> 8.0) + - GTMSessionFetcher (>= 3.4.0) + - GoogleDataTransport (10.1.0): + - nanopb (~> 3.30910.0) + - PromisesObjC (~> 2.4) + - GoogleSignIn (8.0.0): + - AppAuth (< 2.0, >= 1.7.3) + - AppCheckCore (~> 11.0) + - GTMAppAuth (< 5.0, >= 4.1.1) + - GTMSessionFetcher/Core (~> 3.3) + - GoogleUtilities/AppDelegateSwizzler (8.1.0): + - GoogleUtilities/Environment + - GoogleUtilities/Logger + - GoogleUtilities/Network + - GoogleUtilities/Privacy + - GoogleUtilities/Environment (8.1.0): + - GoogleUtilities/Privacy + - GoogleUtilities/Logger (8.1.0): + - GoogleUtilities/Environment + - GoogleUtilities/Privacy + - GoogleUtilities/Network (8.1.0): + - GoogleUtilities/Logger + - "GoogleUtilities/NSData+zlib" + - GoogleUtilities/Privacy + - GoogleUtilities/Reachability + - "GoogleUtilities/NSData+zlib (8.1.0)": + - GoogleUtilities/Privacy + - GoogleUtilities/Privacy (8.1.0) + - GoogleUtilities/Reachability (8.1.0): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - GoogleUtilities/UserDefaults (8.1.0): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - GTMAppAuth (4.1.1): + - AppAuth/Core (~> 1.7) + - GTMSessionFetcher/Core (< 4.0, >= 3.3) + - GTMSessionFetcher (3.5.0): + - GTMSessionFetcher/Full (= 3.5.0) + - GTMSessionFetcher/Core (3.5.0) + - GTMSessionFetcher/Full (3.5.0): + - GTMSessionFetcher/Core + - irondash_engine_context (0.0.1): + - FlutterMacOS + - livekit_client (2.4.8): + - flutter_webrtc + - FlutterMacOS + - WebRTC-SDK (= 125.6422.07) + - media_kit_libs_macos_video (1.0.4): + - FlutterMacOS + - media_kit_video (0.0.1): + - FlutterMacOS + - nanopb (3.30910.0): + - nanopb/decode (= 3.30910.0) + - nanopb/encode (= 3.30910.0) + - nanopb/decode (3.30910.0) + - nanopb/encode (3.30910.0) + - OrderedSet (6.0.3) + - package_info_plus (0.0.1): + - FlutterMacOS + - pasteboard (0.0.1): + - FlutterMacOS + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - PromisesObjC (2.4.0) + - record_macos (1.0.0): + - FlutterMacOS + - SAMKeychain (1.5.3) + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS + - sign_in_with_apple (0.0.1): + - FlutterMacOS + - sqflite_darwin (0.0.4): + - Flutter + - FlutterMacOS + - sqlite3 (3.50.1): + - sqlite3/common (= 3.50.1) + - sqlite3/common (3.50.1) + - sqlite3/dbstatvtab (3.50.1): + - sqlite3/common + - sqlite3/fts5 (3.50.1): + - sqlite3/common + - sqlite3/math (3.50.1): + - sqlite3/common + - sqlite3/perf-threadsafe (3.50.1): + - sqlite3/common + - sqlite3/rtree (3.50.1): + - sqlite3/common + - sqlite3_flutter_libs (0.0.1): + - Flutter + - FlutterMacOS + - sqlite3 (~> 3.50.1) + - sqlite3/dbstatvtab + - sqlite3/fts5 + - sqlite3/math + - sqlite3/perf-threadsafe + - sqlite3/rtree + - super_native_extensions (0.0.1): + - FlutterMacOS + - url_launcher_macos (0.0.1): + - FlutterMacOS + - volume_controller (0.0.1): + - FlutterMacOS + - wakelock_plus (0.0.1): + - FlutterMacOS + - WebRTC-SDK (125.6422.07) + +DEPENDENCIES: + - bitsdojo_window_macos (from `Flutter/ephemeral/.symlinks/plugins/bitsdojo_window_macos/macos`) + - connectivity_plus (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos`) + - croppy (from `Flutter/ephemeral/.symlinks/plugins/croppy/macos`) + - device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`) + - file_picker (from `Flutter/ephemeral/.symlinks/plugins/file_picker/macos`) + - file_selector_macos (from `Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos`) + - firebase_core (from `Flutter/ephemeral/.symlinks/plugins/firebase_core/macos`) + - firebase_messaging (from `Flutter/ephemeral/.symlinks/plugins/firebase_messaging/macos`) + - flutter_inappwebview_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_inappwebview_macos/macos`) + - flutter_platform_alert (from `Flutter/ephemeral/.symlinks/plugins/flutter_platform_alert/macos`) + - flutter_timezone (from `Flutter/ephemeral/.symlinks/plugins/flutter_timezone/macos`) + - flutter_udid (from `Flutter/ephemeral/.symlinks/plugins/flutter_udid/macos`) + - flutter_webrtc (from `Flutter/ephemeral/.symlinks/plugins/flutter_webrtc/macos`) + - FlutterMacOS (from `Flutter/ephemeral`) + - gal (from `Flutter/ephemeral/.symlinks/plugins/gal/darwin`) + - google_sign_in_ios (from `Flutter/ephemeral/.symlinks/plugins/google_sign_in_ios/darwin`) + - irondash_engine_context (from `Flutter/ephemeral/.symlinks/plugins/irondash_engine_context/macos`) + - livekit_client (from `Flutter/ephemeral/.symlinks/plugins/livekit_client/macos`) + - media_kit_libs_macos_video (from `Flutter/ephemeral/.symlinks/plugins/media_kit_libs_macos_video/macos`) + - media_kit_video (from `Flutter/ephemeral/.symlinks/plugins/media_kit_video/macos`) + - package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`) + - pasteboard (from `Flutter/ephemeral/.symlinks/plugins/pasteboard/macos`) + - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) + - record_macos (from `Flutter/ephemeral/.symlinks/plugins/record_macos/macos`) + - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`) + - sign_in_with_apple (from `Flutter/ephemeral/.symlinks/plugins/sign_in_with_apple/macos`) + - sqflite_darwin (from `Flutter/ephemeral/.symlinks/plugins/sqflite_darwin/darwin`) + - sqlite3_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/darwin`) + - super_native_extensions (from `Flutter/ephemeral/.symlinks/plugins/super_native_extensions/macos`) + - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`) + - volume_controller (from `Flutter/ephemeral/.symlinks/plugins/volume_controller/macos`) + - wakelock_plus (from `Flutter/ephemeral/.symlinks/plugins/wakelock_plus/macos`) + +SPEC REPOS: + trunk: + - AppAuth + - AppCheckCore + - Firebase + - FirebaseCore + - FirebaseCoreInternal + - FirebaseInstallations + - FirebaseMessaging + - GoogleDataTransport + - GoogleSignIn + - GoogleUtilities + - GTMAppAuth + - GTMSessionFetcher + - nanopb + - OrderedSet + - PromisesObjC + - SAMKeychain + - sqlite3 + - WebRTC-SDK + +EXTERNAL SOURCES: + bitsdojo_window_macos: + :path: Flutter/ephemeral/.symlinks/plugins/bitsdojo_window_macos/macos + connectivity_plus: + :path: Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos + croppy: + :path: Flutter/ephemeral/.symlinks/plugins/croppy/macos + device_info_plus: + :path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos + file_picker: + :path: Flutter/ephemeral/.symlinks/plugins/file_picker/macos + file_selector_macos: + :path: Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos + firebase_core: + :path: Flutter/ephemeral/.symlinks/plugins/firebase_core/macos + firebase_messaging: + :path: Flutter/ephemeral/.symlinks/plugins/firebase_messaging/macos + flutter_inappwebview_macos: + :path: Flutter/ephemeral/.symlinks/plugins/flutter_inappwebview_macos/macos + flutter_platform_alert: + :path: Flutter/ephemeral/.symlinks/plugins/flutter_platform_alert/macos + flutter_timezone: + :path: Flutter/ephemeral/.symlinks/plugins/flutter_timezone/macos + flutter_udid: + :path: Flutter/ephemeral/.symlinks/plugins/flutter_udid/macos + flutter_webrtc: + :path: Flutter/ephemeral/.symlinks/plugins/flutter_webrtc/macos + FlutterMacOS: + :path: Flutter/ephemeral + gal: + :path: Flutter/ephemeral/.symlinks/plugins/gal/darwin + google_sign_in_ios: + :path: Flutter/ephemeral/.symlinks/plugins/google_sign_in_ios/darwin + irondash_engine_context: + :path: Flutter/ephemeral/.symlinks/plugins/irondash_engine_context/macos + livekit_client: + :path: Flutter/ephemeral/.symlinks/plugins/livekit_client/macos + media_kit_libs_macos_video: + :path: Flutter/ephemeral/.symlinks/plugins/media_kit_libs_macos_video/macos + media_kit_video: + :path: Flutter/ephemeral/.symlinks/plugins/media_kit_video/macos + package_info_plus: + :path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos + pasteboard: + :path: Flutter/ephemeral/.symlinks/plugins/pasteboard/macos + path_provider_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin + record_macos: + :path: Flutter/ephemeral/.symlinks/plugins/record_macos/macos + shared_preferences_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin + sign_in_with_apple: + :path: Flutter/ephemeral/.symlinks/plugins/sign_in_with_apple/macos + sqflite_darwin: + :path: Flutter/ephemeral/.symlinks/plugins/sqflite_darwin/darwin + sqlite3_flutter_libs: + :path: Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/darwin + super_native_extensions: + :path: Flutter/ephemeral/.symlinks/plugins/super_native_extensions/macos + url_launcher_macos: + :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos + volume_controller: + :path: Flutter/ephemeral/.symlinks/plugins/volume_controller/macos + wakelock_plus: + :path: Flutter/ephemeral/.symlinks/plugins/wakelock_plus/macos + +SPEC CHECKSUMS: + AppAuth: d4f13a8fe0baf391b2108511793e4b479691fb73 + AppCheckCore: cc8fd0a3a230ddd401f326489c99990b013f0c4f + bitsdojo_window_macos: 7959fb0ca65a3ccda30095c181ecb856fae48ea9 + connectivity_plus: 4adf20a405e25b42b9c9f87feff8f4b6fde18a4e + croppy: d9bfc8c02f3cd1851f669a421df298a474b78f43 + device_info_plus: 4fb280989f669696856f8b129e4a5e3cd6c48f76 + file_picker: 7584aae6fa07a041af2b36a2655122d42f578c1a + file_selector_macos: 6280b52b459ae6c590af5d78fc35c7267a3c4b31 + Firebase: 3435bc66b4d494c2f22c79fd3aae4c1db6662327 + firebase_core: 1095fcf33161d99bc34aa10f7c0d89414a208d15 + firebase_messaging: 6417056ffb85141607618ddfef9fec9f3caab3ea + FirebaseCore: c692c7f1c75305ab6aff2b367f25e11d73aa8bd0 + FirebaseCoreInternal: 29d7b3af4aaf0b8f3ed20b568c13df399b06f68c + FirebaseInstallations: 0ee9074f2c1e86561ace168ee1470dc67aabaf02 + FirebaseMessaging: 195bbdb73e6ca1dbc76cd46e73f3552c084ef6e4 + flutter_inappwebview_macos: c2d68649f9f8f1831bfcd98d73fd6256366d9d1d + flutter_platform_alert: 8fa7a7c21f95b26d08b4a3891936ca27e375f284 + flutter_timezone: d59eea86178cbd7943cd2431cc2eaa9850f935d8 + flutter_udid: d26e455e8c06174e6aff476e147defc6cae38495 + flutter_webrtc: a7eeb54859e672228c28f4b48b1fb61561976ea3 + FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 + gal: baecd024ebfd13c441269ca7404792a7152fde89 + google_sign_in_ios: b48bb9af78576358a168361173155596c845f0b9 + GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 + GoogleSignIn: ce8c89bb9b37fb624b92e7514cc67335d1e277e4 + GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 + GTMAppAuth: f69bd07d68cd3b766125f7e072c45d7340dea0de + GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6 + irondash_engine_context: 893c7d96d20ce361d7e996f39d360c4c2f9869ba + livekit_client: 6a35243df3da61750c98e266e02dedcf5d25c888 + media_kit_libs_macos_video: 85a23e549b5f480e72cae3e5634b5514bc692f65 + media_kit_video: fa6564e3799a0a28bff39442334817088b7ca758 + nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 + OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94 + package_info_plus: f0052d280d17aa382b932f399edf32507174e870 + pasteboard: 278d8100149f940fb795d6b3a74f0720c890ecb7 + path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564 + PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 + record_macos: 295d70bd5fb47145df78df7b80e6697cd18403c0 + SAMKeychain: 483e1c9f32984d50ca961e26818a534283b4cd5c + shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7 + sign_in_with_apple: 6673c03c9e3643f6c8d33601943fbfa9ae99f94e + sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0 + sqlite3: 1d85290c3321153511f6e900ede7a1608718bbd5 + sqlite3_flutter_libs: e7fc8c9ea2200ff3271f08f127842131746b70e2 + super_native_extensions: c2795d6d9aedf4a79fae25cb6160b71b50549189 + url_launcher_macos: 0fba8ddabfc33ce0a9afe7c5fef5aab3d8d2d673 + volume_controller: 5c068e6d085c80dadd33fc2c918d2114b775b3dd + wakelock_plus: 21ddc249ac4b8d018838dbdabd65c5976c308497 + WebRTC-SDK: dff00a3892bc570b6014e046297782084071657e + +PODFILE CHECKSUM: 346bfb2deb41d4a6ebd6f6799f92188bde2d246f + +COCOAPODS: 1.16.2 diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index 85590e4..db6dfd2 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -57,7 +57,7 @@ 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* island.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = island.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10ED2044A3C60003C045 /* Solian.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Solian.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -150,7 +150,7 @@ 33CC10EE2044A3C60003C045 /* Products */ = { isa = PBXGroup; children = ( - 33CC10ED2044A3C60003C045 /* island.app */, + 33CC10ED2044A3C60003C045 /* Solian.app */, 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, ); name = Products; @@ -242,7 +242,7 @@ ); name = Runner; productName = Runner; - productReference = 33CC10ED2044A3C60003C045 /* island.app */; + productReference = 33CC10ED2044A3C60003C045 /* Solian.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ @@ -384,14 +384,10 @@ inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); name = "[CP] Copy Pods Resources"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); - outputPaths = ( - ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; @@ -427,14 +423,10 @@ inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); - outputPaths = ( - ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; diff --git a/macos/Runner/Configs/AppInfo.xcconfig b/macos/Runner/Configs/AppInfo.xcconfig index 312c805..34681e2 100644 --- a/macos/Runner/Configs/AppInfo.xcconfig +++ b/macos/Runner/Configs/AppInfo.xcconfig @@ -5,10 +5,10 @@ // 'flutter create' template. // The application's name. By default this is also the title of the Flutter window. -PRODUCT_NAME = island +PRODUCT_NAME = Solian // The application's bundle identifier PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 Solsynth LLC. All rights reserved. diff --git a/pubspec.lock b/pubspec.lock index 8476725..93b7416 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -997,54 +997,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.2.1" - google_identity_services_web: - dependency: transitive - description: - name: google_identity_services_web - sha256: "5d187c46dc59e02646e10fe82665fc3884a9b71bc1c90c2b8b749316d33ee454" - url: "https://pub.dev" - source: hosted - version: "0.3.3+1" - google_sign_in: - dependency: "direct main" - description: - name: google_sign_in - sha256: d0a2c3bcb06e607bb11e4daca48bd4b6120f0bbc4015ccebbe757d24ea60ed2a - url: "https://pub.dev" - source: hosted - version: "6.3.0" - google_sign_in_android: - dependency: transitive - description: - name: google_sign_in_android - sha256: d5e23c56a4b84b6427552f1cf3f98f716db3b1d1a647f16b96dbb5b93afa2805 - url: "https://pub.dev" - source: hosted - version: "6.2.1" - google_sign_in_ios: - dependency: transitive - description: - name: google_sign_in_ios - sha256: "102005f498ce18442e7158f6791033bbc15ad2dcc0afa4cf4752e2722a516c96" - url: "https://pub.dev" - source: hosted - version: "5.9.0" - google_sign_in_platform_interface: - dependency: transitive - description: - name: google_sign_in_platform_interface - sha256: "5f6f79cf139c197261adb6ac024577518ae48fdff8e53205c5373b5f6430a8aa" - url: "https://pub.dev" - source: hosted - version: "2.5.0" - google_sign_in_web: - dependency: transitive - description: - name: google_sign_in_web - sha256: "460547beb4962b7623ac0fb8122d6b8268c951cf0b646dd150d60498430e4ded" - url: "https://pub.dev" - source: hosted - version: "0.12.4+4" graphs: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index ed865a3..ccf7028 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -115,7 +115,6 @@ dependencies: fl_chart: ^1.0.0 sign_in_with_apple: ^7.0.1 flutter_svg: ^2.1.0 - google_sign_in: ^6.3.0 dev_dependencies: flutter_test: