diff --git a/core/lib/core.dart b/core/lib/core.dart index e2bf9ef10..4a04dfcc9 100644 --- a/core/lib/core.dart +++ b/core/lib/core.dart @@ -75,7 +75,6 @@ export 'presentation/constants/constants_ui.dart'; export 'data/constants/constant.dart'; // Network -export 'data/network/config/authorization_interceptors.dart'; export 'data/network/config/dynamic_url_interceptors.dart'; export 'data/network/config/service_path.dart'; export 'data/network/dio_client.dart'; diff --git a/core/lib/data/network/config/authorization_interceptors.dart b/core/lib/data/network/config/authorization_interceptors.dart deleted file mode 100644 index 4c152a449..000000000 --- a/core/lib/data/network/config/authorization_interceptors.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'dart:convert'; -import 'dart:io'; - -import 'package:dio/dio.dart'; - -class AuthorizationInterceptors extends InterceptorsWrapper { - String? _authorization; - - String getBasicAuth() => _authorization ?? ''; - - void changeAuthorization(String? userName, String? password) { - _authorization = base64Encode(utf8.encode('$userName:$password')); - } - - @override - void onRequest(RequestOptions options, RequestInterceptorHandler handler) { - if (_authorization != null) { - options.headers[HttpHeaders.authorizationHeader] = 'Basic $_authorization'; - } - super.onRequest(options, handler); - } -} diff --git a/lib/features/base/reloadable/reloadable_controller.dart b/lib/features/base/reloadable/reloadable_controller.dart index efb3a0a67..cadb53b64 100644 --- a/lib/features/base/reloadable/reloadable_controller.dart +++ b/lib/features/base/reloadable/reloadable_controller.dart @@ -1,4 +1,3 @@ -import 'package:core/data/network/config/authorization_interceptors.dart'; import 'package:core/data/network/config/dynamic_url_interceptors.dart'; import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; @@ -7,6 +6,7 @@ import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:tmail_ui_user/features/base/base_controller.dart'; import 'package:tmail_ui_user/features/caching/caching_manager.dart'; +import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart'; import 'package:tmail_ui_user/features/login/domain/state/get_credential_state.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/delete_credential_interactor.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/get_credential_interactor.dart'; diff --git a/lib/features/home/presentation/home_bindings.dart b/lib/features/home/presentation/home_bindings.dart index 6f38646a7..c0c5a94e9 100644 --- a/lib/features/home/presentation/home_bindings.dart +++ b/lib/features/home/presentation/home_bindings.dart @@ -9,6 +9,7 @@ import 'package:tmail_ui_user/features/cleanup/domain/repository/cleanup_reposit import 'package:tmail_ui_user/features/cleanup/domain/usecases/cleanup_email_cache_interactor.dart'; import 'package:tmail_ui_user/features/cleanup/domain/usecases/cleanup_recent_search_cache_interactor.dart'; import 'package:tmail_ui_user/features/home/presentation/home_controller.dart'; +import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/get_credential_interactor.dart'; import 'package:tmail_ui_user/features/thread/data/local/email_cache_manager.dart'; import 'package:tmail_ui_user/main/utils/email_receive_manager.dart'; diff --git a/lib/features/home/presentation/home_controller.dart b/lib/features/home/presentation/home_controller.dart index 3f2a668a9..9c3bd4b65 100644 --- a/lib/features/home/presentation/home_controller.dart +++ b/lib/features/home/presentation/home_controller.dart @@ -8,6 +8,7 @@ import 'package:tmail_ui_user/features/cleanup/domain/model/email_cleanup_rule.d import 'package:tmail_ui_user/features/cleanup/domain/model/recent_search_cleanup_rule.dart'; import 'package:tmail_ui_user/features/cleanup/domain/usecases/cleanup_email_cache_interactor.dart'; import 'package:tmail_ui_user/features/cleanup/domain/usecases/cleanup_recent_search_cache_interactor.dart'; +import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart'; import 'package:tmail_ui_user/features/login/domain/state/get_credential_state.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/get_credential_interactor.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart'; diff --git a/lib/features/login/data/network/config/authorization_interceptors.dart b/lib/features/login/data/network/config/authorization_interceptors.dart new file mode 100644 index 000000000..51b3df32a --- /dev/null +++ b/lib/features/login/data/network/config/authorization_interceptors.dart @@ -0,0 +1,32 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:dio/dio.dart'; +import 'package:model/model.dart'; + +class AuthorizationInterceptors extends InterceptorsWrapper { + String? _authorization; + Token? _token; + + void changeAuthorization(String? userName, String? password) { + _authorization = base64Encode(utf8.encode('$userName:$password')); + } + + void setToken(Token? newToken) { + _token = newToken; + } + + @override + void onRequest(RequestOptions options, RequestInterceptorHandler handler) { + if (_authorization != null) { + options.headers[HttpHeaders.authorizationHeader] = _getAuthorizationAsBasicHeader(_authorization); + } else if (_token != null && _token?.isTokenValid() == true) { + options.headers[HttpHeaders.authorizationHeader] = _getTokenAsBearerHeader(_token!.token); + } + super.onRequest(options, handler); + } + + String _getAuthorizationAsBasicHeader(String? authorization) => 'Basic $authorization'; + + String _getTokenAsBearerHeader(String token) => 'Bearer $token'; +} diff --git a/lib/features/login/presentation/login_bindings.dart b/lib/features/login/presentation/login_bindings.dart index 88d5e1db4..bf76076ba 100644 --- a/lib/features/login/presentation/login_bindings.dart +++ b/lib/features/login/presentation/login_bindings.dart @@ -6,6 +6,7 @@ import 'package:tmail_ui_user/features/login/data/datasource/authentication_data import 'package:tmail_ui_user/features/login/data/datasource/authentication_oidc_datasource.dart'; import 'package:tmail_ui_user/features/login/data/datasource_impl/authentication_datasource_impl.dart'; import 'package:tmail_ui_user/features/login/data/datasource_impl/authentication_oidc_datasource_impl.dart'; +import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart'; import 'package:tmail_ui_user/features/login/data/network/oidc_http_client.dart'; import 'package:tmail_ui_user/features/login/data/repository/authentication_oidc_repository_impl.dart'; import 'package:tmail_ui_user/features/login/data/repository/authentication_repository_impl.dart'; diff --git a/lib/features/login/presentation/login_controller.dart b/lib/features/login/presentation/login_controller.dart index cded59c94..7cb967201 100644 --- a/lib/features/login/presentation/login_controller.dart +++ b/lib/features/login/presentation/login_controller.dart @@ -4,6 +4,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:get/get.dart'; import 'package:model/model.dart'; +import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart'; import 'package:tmail_ui_user/features/login/domain/state/authentication_user_state.dart'; import 'package:tmail_ui_user/features/login/domain/state/check_oidc_is_available_state.dart'; import 'package:tmail_ui_user/features/login/domain/state/get_oidc_configuration_state.dart'; @@ -172,8 +173,11 @@ class LoginController extends GetxController { } void _getTokenOIDCSuccess(GetTokenOIDCSuccess success) { - log('LoginController::_getTokenOIDCSuccess(): '); + log('LoginController::_getTokenOIDCSuccess(): ${success.tokenOIDC.toString()}'); loginState.value = LoginState(Right(success)); + _dynamicUrlInterceptors.changeBaseUrl(kIsWeb ? AppConfig.baseUrl : _urlText); + _authorizationInterceptors.setToken(success.tokenOIDC.toToken()); + pushAndPop(AppRoutes.SESSION); } void _loginAction(Uri baseUrl, UserName userName, Password password) async { diff --git a/lib/main/bindings/network/network_bindings.dart b/lib/main/bindings/network/network_bindings.dart index 995561580..13c844020 100644 --- a/lib/main/bindings/network/network_bindings.dart +++ b/lib/main/bindings/network/network_bindings.dart @@ -9,6 +9,7 @@ import 'package:get/get.dart'; import 'package:jmap_dart_client/http/http_client.dart' as JmapHttpClient; import 'package:tmail_ui_user/features/composer/data/network/composer_api.dart'; import 'package:tmail_ui_user/features/email/data/network/email_api.dart'; +import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart'; import 'package:tmail_ui_user/features/login/data/network/oidc_http_client.dart'; import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_api.dart'; import 'package:tmail_ui_user/features/session/data/network/session_api.dart';