class Aws::Sigv4::Signer
def presign_url(options)
-
(HTTPS::URI, HTTP::URI)
-
Options Hash:
(**options)
-
:time
(Time
) -- Time of the signature. -
:body_digest
(optional, String
) -- -
:body
(optional, String, IO
) -- -
:expires_in
(Integer
) -- -
:headers
(Hash
) -- Headers that should -
:url
(required, String, URI::HTTP, URI::HTTPS
) -- -
:http_method
(required, String
) -- The HTTP request method,
def presign_url(options) creds, expiration = fetch_credentials http_method = extract_http_method(options) url = extract_url(options) Signer.normalize_path(url) if @normalize_path headers = downcase_headers(options[:headers]) headers['host'] ||= host(url) datetime = headers['x-amz-date'] datetime ||= (options[:time] || Time.now).utc.strftime("%Y%m%dT%H%M%SZ") date = datetime[0,8] content_sha256 = headers['x-amz-content-sha256'] content_sha256 ||= options[:body_digest] content_sha256 ||= sha256_hexdigest(options[:body] || '') algorithm = sts_algorithm params = {} params['X-Amz-Algorithm'] = algorithm params['X-Amz-Credential'] = credential(creds, date) params['X-Amz-Date'] = datetime params['X-Amz-Expires'] = presigned_url_expiration(options, expiration, Time.strptime(datetime, "%Y%m%dT%H%M%S%Z")).to_s if creds.session_token if @signing_algorithm == 'sigv4-s3express'.to_sym params['X-Amz-S3session-Token'] = creds.session_token else params['X-Amz-Security-Token'] = creds.session_token end end params['X-Amz-SignedHeaders'] = signed_headers(headers) if @signing_algorithm == :sigv4a && @region params['X-Amz-Region-Set'] = @region end params = params.map do |key, value| "#{uri_escape(key)}=#{uri_escape(value)}" end.join('&') if url.query url.query += '&' + params else url.query = params end creq = canonical_request(http_method, url, headers, content_sha256) sts = string_to_sign(datetime, creq, algorithm) signature = if @signing_algorithm == :sigv4a asymmetric_signature(creds, sts) else signature(creds.secret_access_key, date, sts) end url.query += '&X-Amz-Signature=' + signature url end