std::unique_ptr createS3Client()

in fbpcf/aws/S3Util.cpp [83:128]


std::unique_ptr<Aws::S3::S3Client> createS3Client(
    const S3ClientOption& option) {
  Aws::Client::ClientConfiguration config;

  if (option.region.has_value()) {
    config.region = option.region.value();
  } else if (std::getenv("AWS_DEFAULT_REGION")) {
    config.region = std::getenv("AWS_DEFAULT_REGION");
  }

  if (option.proxyHost.has_value()) {
    config.proxyHost = option.proxyHost.value();
  } else if (std::getenv("AWS_PROXY_HOST")) {
    config.proxyHost = std::getenv("AWS_PROXY_HOST");
  }

  if (option.proxyPort.has_value()) {
    config.proxyPort = option.proxyPort.value();
  } else if (std::getenv("AWS_PROXY_PORT")) {
    config.proxyPort = std::stoi(std::getenv("AWS_PROXY_PORT"));
  }

  if (option.proxyScheme.has_value()) {
    config.proxyScheme = option.proxyScheme.value() == "HTTPS"
        ? Aws::Http::Scheme::HTTPS
        : Aws::Http::Scheme::HTTP;
  } else if (std::getenv("AWS_PROXY_SCHEME")) {
    config.proxyScheme = std::string(std::getenv("AWS_PROXY_SCHEME")) == "HTTPS"
        ? Aws::Http::Scheme::HTTPS
        : Aws::Http::Scheme::HTTP;
  }

  if (option.proxySSLCertPath.has_value()) {
    config.proxySSLCertPath = option.proxySSLCertPath.value();
  } else if (std::getenv("AWS_PROXY_CERT_PATH")) {
    config.proxySSLCertPath = std::getenv("AWS_PROXY_CERT_PATH");
  }

  if (option.accessKeyId.has_value() && option.secretKey.has_value()) {
    Aws::Auth::AWSCredentials credentials(
        option.accessKeyId.value(), option.secretKey.value());
    return std::make_unique<Aws::S3::S3Client>(credentials, config);
  } else {
    return std::make_unique<Aws::S3::S3Client>(config);
  }
}