import 'package:immich_mobile/services/api.service.dart'; import 'package:logging/logging.dart'; import 'package:openapi/api.dart'; import 'package:flutter_web_auth/flutter_web_auth.dart'; // Redirect URL = app.immich:// class OAuthService { final ApiService _apiService; final callbackUrlScheme = 'app.immich'; final log = Logger('OAuthService'); OAuthService(this._apiService); Future getOAuthServerUrl( String serverUrl, ) async { // Resolve API server endpoint from user provided serverUrl await _apiService.resolveAndSetEndpoint(serverUrl); final dto = await _apiService.oAuthApi.startOAuth( OAuthConfigDto(redirectUri: '$callbackUrlScheme:/'), ); return dto?.url; } Future oAuthLogin(String oauthUrl) async { try { var result = await FlutterWebAuth.authenticate( url: oauthUrl, callbackUrlScheme: callbackUrlScheme, ); return await _apiService.oAuthApi.finishOAuth( OAuthCallbackDto( url: result, ), ); } catch (e, stack) { log.severe("OAuth login failed", e, stack); return null; } } }