mirror of
https://github.com/HoneyryderChuck/httpx.git
synced 2025-10-04 00:00:37 -04:00
54 lines
1.8 KiB
Ruby
54 lines
1.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "aws-sdk-s3"
|
|
|
|
module Requests
|
|
module Plugins
|
|
module AWSAuthentication
|
|
AWS_URI = ENV.fetch("AMZ_HOST", "aws:4566")
|
|
|
|
def test_plugin_aws_authentication_put_object
|
|
amz_uri = origin(AWS_URI)
|
|
|
|
begin
|
|
s3_client = Aws::S3::Client.new(
|
|
endpoint: amz_uri,
|
|
force_path_style: true,
|
|
ssl_verify_peer: false,
|
|
# http_wire_trace: true,
|
|
# logger: Logger.new(STDERR)
|
|
)
|
|
s3_client.create_bucket(bucket: "test", acl: "private")
|
|
object = s3_client.put_object(bucket: "test", key: "testimage", body: "bucketz")
|
|
rescue Aws::S3::Errors::BucketAlreadyExists
|
|
# because this test will run 2 times (http and https)
|
|
end
|
|
|
|
# now let's get it
|
|
# no_sig_response = HTTPX.get("http://#{AWS_URI}/test/testimage")
|
|
# verify_error_response(no_sig_response)
|
|
|
|
aws_req_headers = object.context.http_request.headers
|
|
|
|
response = aws_s3_session(unsigned_headers: %w[accept content-type content-length])
|
|
.with(ssl: { verify_mode: OpenSSL::SSL::VERIFY_NONE },
|
|
headers: {
|
|
"user-agent" => aws_req_headers["user-agent"],
|
|
# gotta fix localstack first
|
|
# "expect" => "100-continue",
|
|
"x-amz-date" => aws_req_headers["x-amz-date"],
|
|
"content-md5" => OpenSSL::Digest.base64digest("MD5", "bucketz"),
|
|
})
|
|
.put("#{amz_uri}/test/testimage", body: "bucketz")
|
|
verify_status(response, 200)
|
|
end
|
|
|
|
private
|
|
|
|
def aws_s3_session(**options)
|
|
HTTPX.plugin(:aws_sdk_authentication).aws_sdk_authentication(service: "s3", **options)
|
|
end
|
|
end
|
|
end
|
|
end
|