getSession method

Future<CognitoUserSession?> getSession()

This is used to get a session, either from the session object or from the local storage, or by using a refresh token

Implementation

Future<CognitoUserSession?> getSession() async {
  if (username == null) {
    throw Exception('Username is null. Cannot retrieve a new session');
  }

  if (_signInUserSession != null && _signInUserSession!.isValid()) {
    return _signInUserSession;
  }

  final idTokenKey = '$keyPrefix.idToken';
  final accessTokenKey = '$keyPrefix.accessToken';
  final refreshTokenKey = '$keyPrefix.refreshToken';
  final clockDriftKey = '$keyPrefix.clockDrift';

  if (await storage.getItem(idTokenKey) != null) {
    final idToken = CognitoIdToken(await storage.getItem(idTokenKey));
    final accessToken =
        CognitoAccessToken(await storage.getItem(accessTokenKey));
    final refreshToken =
        CognitoRefreshToken(await storage.getItem(refreshTokenKey));
    final clockDrift = int.parse(await storage.getItem(clockDriftKey));

    final cachedSession = CognitoUserSession(
      idToken,
      accessToken,
      refreshToken: refreshToken,
      clockDrift: clockDrift,
    );

    if (cachedSession.isValid()) {
      _signInUserSession = cachedSession;
      return _signInUserSession;
    }

    if (refreshToken.getToken() == null) {
      throw Exception('Cannot retrieve a new session. Please authenticate.');
    }

    return refreshSession(refreshToken);
  }
  throw Exception(
      'Local storage is missing an ID Token, Please authenticate');
}