GRAYBYTE WORDPRESS FILE MANAGER8815

Server IP : 198.54.121.189 / Your IP : 216.73.216.112
System : Linux premium69.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
PHP Version : 7.4.33
Disable Function : NONE
cURL : ON | WGET : ON | Sudo : OFF | Pkexec : OFF
Directory : /opt/alt/ruby33/share/rubygems/rubygems/
Upload Files :
Current_dir [ Not Writeable ] Document_root [ Writeable ]

Command :


Current File : /opt/alt/ruby33/share/rubygems/rubygems//s3_uri_signer.rb
# frozen_string_literal: true

require_relative "openssl"

##
# S3URISigner implements AWS SigV4 for S3 Source to avoid a dependency on the aws-sdk-* gems
# More on AWS SigV4: https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html
class Gem::S3URISigner
  class ConfigurationError < Gem::Exception
    def initialize(message)
      super message
    end

    def to_s # :nodoc:
      super.to_s
    end
  end

  class InstanceProfileError < Gem::Exception
    def initialize(message)
      super message
    end

    def to_s # :nodoc:
      super.to_s
    end
  end

  attr_accessor :uri

  def initialize(uri)
    @uri = uri
  end

  ##
  # Signs S3 URI using query-params according to the reference: https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html
  def sign(expiration = 86_400)
    s3_config = fetch_s3_config

    current_time = Time.now.utc
    date_time = current_time.strftime("%Y%m%dT%H%m%SZ")
    date = date_time[0,8]

    credential_info = "#{date}/#{s3_config.region}/s3/aws4_request"
    canonical_host = "#{uri.host}.s3.#{s3_config.region}.amazonaws.com"

    query_params = generate_canonical_query_params(s3_config, date_time, credential_info, expiration)
    canonical_request = generate_canonical_request(canonical_host, query_params)
    string_to_sign = generate_string_to_sign(date_time, credential_info, canonical_request)
    signature = generate_signature(s3_config, date, string_to_sign)

    Gem::URI.parse("https://#{canonical_host}#{uri.path}?#{query_params}&X-Amz-Signature=#{signature}")
  end

  private

  S3Config = Struct.new :access_key_id, :secret_access_key, :security_token, :region

  def generate_canonical_query_params(s3_config, date_time, credential_info, expiration)
    canonical_params = {}
    canonical_params["X-Amz-Algorithm"] = "AWS4-HMAC-SHA256"
    canonical_params["X-Amz-Credential"] = "#{s3_config.access_key_id}/#{credential_info}"
    canonical_params["X-Amz-Date"] = date_time
    canonical_params["X-Amz-Expires"] = expiration.to_s
    canonical_params["X-Amz-SignedHeaders"] = "host"
    canonical_params["X-Amz-Security-Token"] = s3_config.security_token if s3_config.security_token

    # Sorting is required to generate proper signature
    canonical_params.sort.to_h.map do |key, value|
      "#{base64_uri_escape(key)}=#{base64_uri_escape(value)}"
    end.join("&")
  end

  def generate_canonical_request(canonical_host, query_params)
    [
      "GET",
      uri.path,
      query_params,
      "host:#{canonical_host}",
      "", # empty params
      "host",
      "UNSIGNED-PAYLOAD",
    ].join("\n")
  end

  def generate_string_to_sign(date_time, credential_info, canonical_request)
    [
      "AWS4-HMAC-SHA256",
      date_time,
      credential_info,
      OpenSSL::Digest::SHA256.hexdigest(canonical_request),
    ].join("\n")
  end

  def generate_signature(s3_config, date, string_to_sign)
    date_key = OpenSSL::HMAC.digest("sha256", "AWS4" + s3_config.secret_access_key, date)
    date_region_key = OpenSSL::HMAC.digest("sha256", date_key, s3_config.region)
    date_region_service_key = OpenSSL::HMAC.digest("sha256", date_region_key, "s3")
    signing_key = OpenSSL::HMAC.digest("sha256", date_region_service_key, "aws4_request")
    OpenSSL::HMAC.hexdigest("sha256", signing_key, string_to_sign)
  end

  ##
  # Extracts S3 configuration for S3 bucket
  def fetch_s3_config
    return S3Config.new(uri.user, uri.password, nil, "us-east-1") if uri.user && uri.password

    s3_source = Gem.configuration[:s3_source] || Gem.configuration["s3_source"]
    host = uri.host
    raise ConfigurationError.new("no s3_source key exists in .gemrc") unless s3_source

    auth = s3_source[host] || s3_source[host.to_sym]
    raise ConfigurationError.new("no key for host #{host} in s3_source in .gemrc") unless auth

    provider = auth[:provider] || auth["provider"]
    case provider
    when "env"
      id = ENV["AWS_ACCESS_KEY_ID"]
      secret = ENV["AWS_SECRET_ACCESS_KEY"]
      security_token = ENV["AWS_SESSION_TOKEN"]
    when "instance_profile"
      credentials = ec2_metadata_credentials_json
      id = credentials["AccessKeyId"]
      secret = credentials["SecretAccessKey"]
      security_token = credentials["Token"]
    else
      id = auth[:id] || auth["id"]
      secret = auth[:secret] || auth["secret"]
      security_token = auth[:security_token] || auth["security_token"]
    end

    raise ConfigurationError.new("s3_source for #{host} missing id or secret") unless id && secret

    region = auth[:region] || auth["region"] || "us-east-1"
    S3Config.new(id, secret, security_token, region)
  end

  def base64_uri_escape(str)
    str.gsub(%r{[\+/=\n]}, BASE64_URI_TRANSLATE)
  end

  def ec2_metadata_credentials_json
    require_relative "vendored_net_http"
    require_relative "request"
    require_relative "request/connection_pools"
    require "json"

    iam_info = ec2_metadata_request(EC2_IAM_INFO)
    # Expected format: arn:aws:iam::<id>:instance-profile/<role_name>
    role_name = iam_info["InstanceProfileArn"].split("/").last
    ec2_metadata_request(EC2_IAM_SECURITY_CREDENTIALS + role_name)
  end

  def ec2_metadata_request(url)
    uri = Gem::URI(url)
    @request_pool ||= create_request_pool(uri)
    request = Gem::Request.new(uri, Gem::Net::HTTP::Get, nil, @request_pool)
    response = request.fetch

    case response
    when Gem::Net::HTTPOK then
      JSON.parse(response.body)
    else
      raise InstanceProfileError.new("Unable to fetch AWS metadata from #{uri}: #{response.message} #{response.code}")
    end
  end

  def create_request_pool(uri)
    proxy_uri = Gem::Request.proxy_uri(Gem::Request.get_proxy_from_env(uri.scheme))
    certs = Gem::Request.get_cert_files
    Gem::Request::ConnectionPools.new(proxy_uri, certs).pool_for(uri)
  end

  BASE64_URI_TRANSLATE = { "+" => "%2B", "/" => "%2F", "=" => "%3D", "\n" => "" }.freeze
  EC2_IAM_INFO = "http://169.254.169.254/latest/meta-data/iam/info"
  EC2_IAM_SECURITY_CREDENTIALS = "http://169.254.169.254/latest/meta-data/iam/security-credentials/"
end

[ Back ]
Name
Size
Last Modified
Owner / Group
Permissions
Options
..
--
June 14 2024 08:49:03
root / root
0755
commands
--
May 13 2025 08:35:36
root / linksafe
0755
core_ext
--
May 13 2025 08:35:36
root / linksafe
0755
defaults
--
May 13 2025 08:35:36
root / linksafe
0755
ext
--
May 13 2025 08:35:36
root / linksafe
0755
gemcutter_utilities
--
May 13 2025 08:35:36
root / linksafe
0755
package
--
May 13 2025 08:35:36
root / linksafe
0755
request
--
May 13 2025 08:35:36
root / linksafe
0755
request_set
--
May 13 2025 08:35:36
root / linksafe
0755
resolver
--
May 13 2025 08:35:36
root / linksafe
0755
safe_marshal
--
May 13 2025 08:35:36
root / linksafe
0755
security
--
May 13 2025 08:35:36
root / linksafe
0755
source
--
May 13 2025 08:35:36
root / linksafe
0755
ssl_certs
--
April 24 2025 07:57:41
root / linksafe
0755
util
--
May 13 2025 08:35:36
root / linksafe
0755
vendor
--
April 24 2025 07:57:40
root / linksafe
0755
available_set.rb
3.003 KB
April 24 2025 07:57:47
root / linksafe
0644
basic_specification.rb
8.173 KB
April 24 2025 07:57:47
root / linksafe
0644
bundler_version_finder.rb
1.962 KB
April 24 2025 07:57:47
root / linksafe
0644
ci_detector.rb
3.712 KB
April 24 2025 07:57:47
root / linksafe
0644
command.rb
15.971 KB
April 24 2025 07:57:47
root / linksafe
0644
command_manager.rb
5.643 KB
April 24 2025 07:57:47
root / linksafe
0644
compatibility.rb
0.998 KB
April 24 2025 07:57:47
root / linksafe
0644
config_file.rb
15.789 KB
April 24 2025 07:57:47
root / linksafe
0644
defaults.rb
7.346 KB
April 24 2025 07:57:47
root / linksafe
0644
dependency.rb
8.449 KB
April 24 2025 07:57:47
root / linksafe
0644
dependency_installer.rb
9.906 KB
April 24 2025 07:57:47
root / linksafe
0644
dependency_list.rb
5.551 KB
April 24 2025 07:57:47
root / linksafe
0644
deprecate.rb
5.038 KB
April 24 2025 07:57:47
root / linksafe
0644
doctor.rb
3.129 KB
April 24 2025 07:57:47
root / linksafe
0644
errors.rb
4.526 KB
April 24 2025 07:57:47
root / linksafe
0644
exceptions.rb
7.329 KB
April 24 2025 07:57:47
root / linksafe
0644
ext.rb
0.486 KB
April 24 2025 07:57:47
root / linksafe
0644
gem_runner.rb
1.894 KB
April 24 2025 07:57:47
root / linksafe
0644
gemcutter_utilities.rb
11.174 KB
April 24 2025 07:57:47
root / linksafe
0644
gemspec_helpers.rb
0.385 KB
April 24 2025 07:57:47
root / linksafe
0644
install_default_message.rb
0.341 KB
April 24 2025 07:57:47
root / linksafe
0644
install_message.rb
0.315 KB
April 24 2025 07:57:47
root / linksafe
0644
install_update_options.rb
6.388 KB
April 24 2025 07:57:47
root / linksafe
0644
installer.rb
27.683 KB
April 24 2025 07:57:47
root / linksafe
0644
installer_uninstaller_utils.rb
0.753 KB
April 24 2025 07:57:47
root / linksafe
0644
local_remote_options.rb
3.614 KB
April 24 2025 07:57:47
root / linksafe
0644
name_tuple.rb
2.385 KB
April 24 2025 07:57:47
root / linksafe
0644
openssl.rb
0.122 KB
April 24 2025 07:57:47
root / linksafe
0644
package.rb
18.829 KB
April 24 2025 07:57:47
root / linksafe
0644
package_task.rb
3.788 KB
April 24 2025 07:57:47
root / linksafe
0644
path_support.rb
1.773 KB
April 24 2025 07:57:47
root / linksafe
0644
platform.rb
8.351 KB
April 24 2025 07:57:47
root / linksafe
0644
psych_tree.rb
0.776 KB
April 24 2025 07:57:47
root / linksafe
0644
query_utils.rb
8.495 KB
April 24 2025 07:57:47
root / linksafe
0644
rdoc.rb
0.227 KB
April 24 2025 07:57:47
root / linksafe
0644
remote_fetcher.rb
9.379 KB
April 24 2025 07:57:47
root / linksafe
0644
request.rb
8.701 KB
April 24 2025 07:57:47
root / linksafe
0644
request_set.rb
11.287 KB
April 24 2025 07:57:47
root / linksafe
0644
requirement.rb
7.002 KB
April 24 2025 07:57:47
root / linksafe
0644
resolver.rb
9.437 KB
April 24 2025 07:57:47
root / linksafe
0644
s3_uri_signer.rb
5.963 KB
April 24 2025 07:57:47
root / linksafe
0644
safe_marshal.rb
1.923 KB
April 24 2025 07:57:47
root / linksafe
0644
safe_yaml.rb
1.042 KB
April 24 2025 07:57:47
root / linksafe
0644
security.rb
21.693 KB
April 24 2025 07:57:47
root / linksafe
0644
security_option.rb
1.059 KB
April 24 2025 07:57:47
root / linksafe
0644
shellwords.rb
0.064 KB
April 24 2025 07:57:47
root / linksafe
0644
source.rb
5.783 KB
April 24 2025 07:57:47
root / linksafe
0644
source_list.rb
2.424 KB
April 24 2025 07:57:47
root / linksafe
0644
spec_fetcher.rb
6.16 KB
April 24 2025 07:57:47
root / linksafe
0644
specification.rb
69.099 KB
April 24 2025 07:57:47
root / linksafe
0644
specification_policy.rb
15.59 KB
April 24 2025 07:57:47
root / linksafe
0644
specification_record.rb
5.207 KB
April 24 2025 07:57:47
root / linksafe
0644
stub_specification.rb
4.959 KB
April 24 2025 07:57:47
root / linksafe
0644
text.rb
2.064 KB
April 24 2025 07:57:47
root / linksafe
0644
uninstaller.rb
10.94 KB
April 24 2025 07:57:47
root / linksafe
0644
unknown_command_spell_checker.rb
0.401 KB
April 24 2025 07:57:47
root / linksafe
0644
update_suggestion.rb
1.854 KB
April 24 2025 07:57:47
root / linksafe
0644
uri.rb
2.379 KB
April 24 2025 07:57:47
root / linksafe
0644
uri_formatter.rb
0.766 KB
April 24 2025 07:57:47
root / linksafe
0644
user_interaction.rb
13.103 KB
April 24 2025 07:57:47
root / linksafe
0644
util.rb
2.46 KB
April 24 2025 07:57:47
root / linksafe
0644
validator.rb
3.63 KB
April 24 2025 07:57:47
root / linksafe
0644
vendored_molinillo.rb
0.079 KB
April 24 2025 07:57:47
root / linksafe
0644
vendored_net_http.rb
0.228 KB
April 24 2025 07:57:47
root / linksafe
0644
vendored_optparse.rb
0.077 KB
April 24 2025 07:57:47
root / linksafe
0644
vendored_securerandom.rb
0.108 KB
April 24 2025 07:57:47
root / linksafe
0644
vendored_timeout.rb
0.223 KB
April 24 2025 07:57:47
root / linksafe
0644
vendored_tsort.rb
0.071 KB
April 24 2025 07:57:47
root / linksafe
0644
version.rb
12.979 KB
April 24 2025 07:57:47
root / linksafe
0644
version_option.rb
2.175 KB
April 24 2025 07:57:47
root / linksafe
0644
yaml_serializer.rb
2.416 KB
April 24 2025 07:57:47
root / linksafe
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2025
CONTACT ME
Static GIF