sendAuthenticationRequest method

Future<RemoteDto> sendAuthenticationRequest(
  1. int version,
  2. String? serverDatabase,
  3. String? testPassword
)

Implementation

Future<RemoteDto> sendAuthenticationRequest(
    int version, String? serverDatabase, String? testPassword) async {
  if (initialized == false) throw ArgumentError(AbstractDao.C_MUST_INIT);
  String url = "";
  UserDto? cuDto = await userTools.getCurrentUserDto(smd, transaction);
  int? cuId = await userTools.getCurrentUserId(smd, transaction);
  UserStoreDto? cuStoreDto;
  String email = "";
  try {
    cuStoreDto = await userTools.getCurrentUserStoreDto(smd, transaction);
    email = cuStoreDto!.email!;
  } on SqlException catch (e) {
    if (e.sqlExceptionEnum != SqlExceptionEnum.ENTRY_NOT_FOUND) rethrow;
  }

  if (cuDto!.pass_key == null || cuDto.pass_key!.length == 0) {
    // User has missing pass_key
    url += "email=" + email;
    if (serverDatabase != null) url += "&database=" + serverDatabase;
    if (testPassword != null) url += "&test_pass=" + testPassword;
    url += "&ts=" + TimeUtils.getNowCustomTs().toString();
    url += "&version=" + version.toString();
    url += "&user_id=" + cuId.toString();
  } else {
    Map<String, String> params = Map();
    if (serverDatabase != null) params["database"] = serverDatabase;
    if (testPassword != null) params["test_pass"] = testPassword;
    params["water_line"] = (await clientWarden.getLatestTs()).toString();
    params["ts"] = TimeUtils.getNowCustomTs().toString();
    params["version"] = version.toString();
    params["user_id"] = cuId.toString();

    SignedRequestHelper2 signedRequestHelper =
        SignedRequestHelper2(email, cuDto.pass_key!);
    url += signedRequestHelper.sign(params);
    if (cuId == 1) url += "&email=" + email;
    url +=
        "&crc=" + CrcUtils.getCrcFromString(cuDto.getCrcString()).toString();
  }
  late String response;
  try {
    response = await writeClient.getBaseURI(UrlTools.C_AUTHENTICATE_URL, url);
  } on TransmitStatusException catch (e) {
    print("WS $e");
    throw TransmitStatusException(e.transmitStatus,
        cause: "Send Authentication");
  }
  // Process response
  RemoteDto remoteDto;
  try {
    remoteDto = JsonRemoteDtoTools.getRemoteDtoFromJsonString(
        response, smdSys, defaults);
  } on RemoteStatusException catch (e) {
    print("WS $e");
    throw TransmitStatusException(TransmitStatus.REMOTE_STATE_ERROR,
        cause: "Send Authentication");
  }
  return remoteDto;
}