public void unzip(InputStream responseStream, Cluster cluster, User user, boolean isAdmin)
      throws IOException {
    Logger.info("In unzip for cluster: " + cluster);
    Reader reader = null;
    StringWriter writer = new StringWriter();
    ZipInputStream unzippedResponse = null;
    String charset = "UTF-8";
    try {
      unzippedResponse = new ZipInputStream(responseStream);
      reader = new InputStreamReader(unzippedResponse, charset);
      ZipEntry file = unzippedResponse.getNextEntry();
      Logger.info("Zip file: " + file.getName());

      while (file != null) {
        try {
          writer = new StringWriter();

          char[] buffer = new char[10240];
          for (int length = 0; (length = reader.read(buffer)) > 0; ) {
            writer.write(buffer, 0, length);
          }

          switch (file.getName().split("/")[1]) {
            case "ca.pem":
              if (!isAdmin) {
                Helpers.createFileInCarina(file, writer, user);
                Logger.info(
                    Helpers.getCarinaDirectory(user.tenant).resolve(file.getName()).toString());
                cluster.setCert_directory(
                    Helpers.getCarinaDirectoryWithCluster(
                            user.tenant,
                            file.getName().substring(0, file.getName().lastIndexOf("/")))
                        .toString());
              }
              break;
            case "cert.pem":
              if (!isAdmin) {
                Helpers.createFileInCarina(file, writer, user);
                Logger.info(
                    Helpers.getCarinaDirectory(user.tenant).resolve(file.getName()).toString());
              }
              break;
            case "key.pem":
              if (!isAdmin) {
                Helpers.createFileInCarina(file, writer, user);
                Logger.info(
                    Helpers.getCarinaDirectory(user.tenant).resolve(file.getName()).toString());
              }
              break;
            case "ca-key.pem":
              if (!isAdmin) {
                Helpers.createFileInCarina(file, writer, user);
                Logger.info(
                    Helpers.getCarinaDirectory(user.tenant).resolve(file.getName()).toString());
              }
              break;
            case "docker.env":
              // TODO: get the URI from docker.env
              if (!isAdmin) {
                Helpers.createFileInCarina(file, writer, user);
                Logger.info(
                    Helpers.getCarinaDirectory(user.tenant).resolve(file.getName()).toString());
              }
              String[] dockerEnv = writer.toString().split("\\n");
              for (String s : dockerEnv) {
                if (s.trim().startsWith("export DOCKER_HOST")) {
                  cluster.setUri(s.trim().split("=")[1].replace("tcp", "https"));
                  break;
                }
              }
              break;
            default:
              Logger.error("Invalid file found: " + file.getName());
              break;
          }
        } finally {
          writer.close();
          writer = null;
        }
        file = unzippedResponse.getNextEntry();
      }

    } finally {
      unzippedResponse.closeEntry();
      unzippedResponse.close();
      reader.close();
    }
    cluster.save();
    Logger.info("Cluster to save: " + cluster.toString());
  }