authenticate method

Future<UserSession> authenticate({
  1. AuthorizationTokenResponse? tokenResponse,
  2. required String clientID,
  3. required AuthEndpointsData authEndpointsData,
  4. required DioClient microsoftDioClient,
  5. Options? getUserDetailsOptions,
})

Implementation

Future<UserSession> authenticate({
  AuthorizationTokenResponse? tokenResponse,
  required String clientID,
  required AuthEndpointsData authEndpointsData,
  required DioClient microsoftDioClient,
  Options? getUserDetailsOptions,
}) async {
  final TokenResponse? freshToken = await _getFreshTokens(
    clientID: clientID,
    authEndpointsData: authEndpointsData,
  );

  if (freshToken != null) {
    return await _setUserSession(
      tokenResponse: freshToken,
      microsoftDioClient: microsoftDioClient,
      userInfoEndpoint: authEndpointsData.userInfoEndpoint,
      getUserDetailsOptions: getUserDetailsOptions,
    );
  } else {
    AuthorizationTokenResponse? authTokenResponse;

    if (tokenResponse == null) {
      authTokenResponse = await _authProvider.getAuthTokens(
        clientID: clientID,
        authEndpointsData: authEndpointsData,
      );
    } else {
      authTokenResponse = tokenResponse;
    }

    return await _setUserSession(
      tokenResponse: authTokenResponse,
      microsoftDioClient: microsoftDioClient,
      userInfoEndpoint: authEndpointsData.userInfoEndpoint,
      getUserDetailsOptions: getUserDetailsOptions,
    );
  }
}