login static method

Future<LoggedInUserOrError> login(
  1. String userId,
  2. String password, {
  3. UserType userType = UserType.person,
})

login the user

Implementation

static Future<LoggedInUserOrError> login(String userId, String password,
    {UserType userType = UserType.person}) {
  Completer<LoggedInUserOrError> completer = Completer();

  LocalityAPI.call('api/login', {
    'app_token': LocalitySocialCloud.getAppID(),
    'user_id': userId,
    'password': LocalityAuth.hashPassword(password)
  }, (success, answerData) {
    String pw1 =
        LocalityAuth.hashPassword(password, salt: encryptPrivateKeySalt);

    if (success) {
      AccessToken token = AccessToken(answerData['token']!);
      AuthDataWatcher.instance.whenAccessTokenExpired(
          token.token!, DateTime(200), (newToken, expiresAt) {
        token.refreshWith(newToken);
      });

      String publicKey = answerData['public_key']!;
      String decryptedPrivateKey = ChaCha20(ChaCha20Key.fromString(pw1))
          .decrypt(answerData['private_key']!, Nonce.fromString(publicKey));

      LoggedInUser loggedInUser = LoggedInUser(
        user: LocalityUser(userId, publicKey),
        accessToken: token,
        privateKey: decryptedPrivateKey,
      );

      completer.complete(LoggedInUserOrError.fromUser(loggedInUser));
    } else {
      completer.complete(
          LoggedInUserOrError.fromError(AuthError.serverNotReachable));
    }
  });

  return completer.future;
}