TF-2387 Handle sign in SAAS platform
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:model/account/authentication_type.dart';
|
||||
import 'package:model/account/personal_account.dart';
|
||||
import 'package:model/oidc/oidc_configuration.dart';
|
||||
import 'package:model/oidc/token_oidc.dart';
|
||||
import 'package:rich_text_composer/views/commons/logger.dart';
|
||||
import 'package:tmail_ui_user/features/login/domain/exceptions/login_exception.dart';
|
||||
import 'package:tmail_ui_user/features/login/domain/repository/account_repository.dart';
|
||||
import 'package:tmail_ui_user/features/login/domain/repository/authentication_oidc_repository.dart';
|
||||
import 'package:tmail_ui_user/features/login/domain/repository/credential_repository.dart';
|
||||
import 'package:tmail_ui_user/features/starting_page/domain/repository/saas_authentication_repository.dart';
|
||||
import 'package:tmail_ui_user/features/starting_page/domain/state/sign_in_saas_state.dart';
|
||||
|
||||
class SignInSaasInteractor {
|
||||
final SaasAuthenticationRepository _saasRepository;
|
||||
final AuthenticationOIDCRepository _authenticationOIDCRepository;
|
||||
final AccountRepository _accountRepository;
|
||||
final CredentialRepository _credentialRepository;
|
||||
|
||||
SignInSaasInteractor(
|
||||
this._saasRepository,
|
||||
this._authenticationOIDCRepository,
|
||||
this._accountRepository,
|
||||
this._credentialRepository
|
||||
);
|
||||
|
||||
Stream<Either<Failure, Success>> execute({
|
||||
required Uri baseUri,
|
||||
required OIDCConfiguration oidcConfiguration
|
||||
}) async* {
|
||||
try {
|
||||
yield Right<Failure, Success>(SignInSaasLoading());
|
||||
|
||||
final tokenOIDC = await _saasRepository.signIn(oidcConfiguration);
|
||||
|
||||
await Future.wait([
|
||||
_credentialRepository.saveBaseUrl(baseUri),
|
||||
_authenticationOIDCRepository.persistTokenOIDC(tokenOIDC),
|
||||
_authenticationOIDCRepository.persistAuthorityOidc(oidcConfiguration.authority),
|
||||
]);
|
||||
|
||||
await _accountRepository.setCurrentAccount(
|
||||
PersonalAccount(
|
||||
tokenOIDC.tokenIdHash,
|
||||
AuthenticationType.oidc,
|
||||
isSelected: true
|
||||
)
|
||||
);
|
||||
|
||||
yield Right<Failure, Success>(SignInSaasSuccess(tokenOIDC, baseUri, oidcConfiguration));
|
||||
} on PlatformException catch (e) {
|
||||
logError('SignInSaasInteractor::execute():PlatformException ${e.message} - ${e.stacktrace}');
|
||||
if (NoSuitableBrowserForOIDCException.verifyException(e)) {
|
||||
yield Left<Failure, Success>(SignInSaasFailure(NoSuitableBrowserForOIDCException()));
|
||||
} else {
|
||||
yield Left<Failure, Success>(SignInSaasFailure(e));
|
||||
}
|
||||
} catch (e) {
|
||||
logError('SignInSaasInteractor::execute():Exception = $e');
|
||||
yield Left<Failure, Success>(SignInSaasFailure(e));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user