register static method

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

Register the user

Implementation

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

  KeyPair ecdhKeypair = KeyPair.fresh();

  String pw1 =
      LocalityAuth.hashPassword(password, salt: encryptPrivateKeySalt);
  String encryptedPrivateKey = ChaCha20(ChaCha20Key.fromString(pw1)).encrypt(
      ecdhKeypair.privateKeyHex, Nonce.fromString(ecdhKeypair.publicKeyHex));

  LocalityAPI.call('api/register', {
    'app_token': LocalitySocialCloud.getAppID(),
    'user_id': userId,
    'password': LocalityAuth.hashPassword(password),
    'public_key': ecdhKeypair.publicKeyHex,
    'encrypted_private_key': encryptedPrivateKey
  }, (success, answerData) {
    if (success) {
      AccessToken token = AccessToken(answerData['token']!);
      AuthDataWatcher.instance.whenAccessTokenExpired(
          token.token!, DateTime(200), (newToken, expiresAt) {
        token.refreshWith(newToken);
      });
      completer.complete(LoggedInUserOrError.fromUser(LoggedInUser(
        user: LocalityUser(userId, ecdhKeypair.publicKeyHex),
        accessToken: token,
        privateKey: ecdhKeypair.privateKeyHex,
      )));
    } else {
      completer.complete(
          LoggedInUserOrError.fromError(AuthError.serverNotReachable));
    }
  });
  return completer.future;
}