validateFirebaseProjectConfiguration function

void validateFirebaseProjectConfiguration({
  1. required String expectedProjectId,
  2. required String androidJson,
  3. required List<String> applePlists,
})

Validates that generated Firebase native configuration belongs to the project selected by Katana.

Implementation

void validateFirebaseProjectConfiguration({
  required String expectedProjectId,
  required String androidJson,
  required List<String> applePlists,
}) {
  final androidProjectId = jsonDecodeAsMap(androidJson)
      .getAsMap("project_info")
      .get("project_id", "");
  if (androidProjectId != expectedProjectId) {
    throw StateError(
      "Android Firebase project mismatch: expected $expectedProjectId, "
      "found $androidProjectId.",
    );
  }
  for (final plist in applePlists) {
    final document = XmlDocument.parse(plist);
    final projectKey = document.findAllElements("key").firstWhereOrNull(
          (element) => element.innerText == "PROJECT_ID",
        );
    final projectId = projectKey?.nextElementSibling?.innerText ?? "";
    if (projectId != expectedProjectId) {
      throw StateError(
        "Apple Firebase project mismatch: expected $expectedProjectId, "
        "found $projectId.",
      );
    }
  }
}