class Aws::Sigv4::Signer

def presign_url(options)

Returns:
  • (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