sendResetToDefault static method

Future<ScpStatus> sendResetToDefault(
  1. ScpDevice device
)

Implementation

static Future<ScpStatus> sendResetToDefault(ScpDevice device) async {
  // get NVCN
  print('Fetching NVCN');
  var nvcnResponse = await fetchNVCN(device);
  if (nvcnResponse == null) {
    return ScpStatus(status: ScpStatus.RESULT_ERROR);
  }
  if (nvcnResponse.statusCode != 200 || nvcnResponse.bodyBytes == 0) {
    return ScpStatus(status: ScpStatus.RESULT_ERROR);
  }
  ScpResponseFetchNvcn parsedNvcnResponse =
      await ScpResponseParser.parseNvcnResponse(nvcnResponse);

  String nvcn = parsedNvcnResponse.getNVCN();

  //send control command
  // <salt> + ":" + "security-reset-to-default" + ":" + <device ID> + ":" + <NVCN>

  String salt = ScpCrypto().generatePassword();
  String payload = "$salt:security-reset-to-default:${device.deviceId}:$nvcn";
  ScpJson scpJson =
      await ScpCrypto().encryptThenEncode(device.knownPassword, payload);

  String query = "nonce=${urlEncode(scpJson.encryptedPayload.base64Nonce)}";
  query += "&payload=${urlEncode(scpJson.encryptedPayload.base64Data)}";
  query += "&payloadLength=${scpJson.encryptedPayload.dataLength}";
  query += "&mac=${urlEncode(scpJson.encryptedPayload.base64Mac)}";

  // await response
  print('Send reset to default message');
  Uri url = Uri.dataFromString(
      'http://${device.ipAddress}:$PORT/secure-control?$query');
  var resetToDefaultMessage = await http
      .get(url)
      .timeout(const Duration(seconds: RESET_TO_DEFAULT_TIMEOUT))
      .catchError((e) {
    print(e);
  });

  if (resetToDefaultMessage.bodyBytes != null) {
    if (resetToDefaultMessage.statusCode == 200) {
      ScpResponseResetToDefault parsedResponse =
          await ScpResponseParser.parseResetToDefault(
              resetToDefaultMessage, device.knownPassword);
      if (parsedResponse.isValid()) {
        if (parsedResponse.getResult() == ScpStatus.RESULT_SUCCESS) {
          print('Successfully reset the device to default.');
          return ScpStatus(status: ScpStatus.RESULT_SUCCESS);
        } else if (parsedResponse.getResult() == ScpStatus.RESULT_ERROR) {
          print('Failed resetting the device to default.');
          return ScpStatus(status: ScpStatus.RESULT_ERROR);
        }
      }
    } else {
      print('Status code not 200: ${resetToDefaultMessage.statusCode}');
    }
  }
  return ScpStatus(status: ScpStatus.RESULT_ERROR);
}