# class Puppet::Forge::Repository

# Repository¶ ↑

This class is a file for accessing remote repositories with modules.

### Constants

NET_HTTP_EXCEPTIONS

  List of Net::HTTP exceptions to catch

### Attributes

cache[R]
uri[R]

### Public Class Methods

new(url, consumer_version) click to toggle source

Instantiate a new repository instance rooted at the `url`. The agent will report `consumer_version` in the User-Agent to the repository.

    # File lib/puppet/forge/repository.rb, line 34
    def initialize(url, consumer_version)
      @uri = url.is_a?(::URI) ? url : ::URI.parse(url)
      @cache = Cache.new(self)
      @consumer_version = consumer_version
    end

### Public Instance Methods

cache_key() click to toggle source

Return the cache key for this repository, this a hashed string based on the URI.

    # File lib/puppet/forge/repository.rb, line 146
    def cache_key
      return @cache_key ||= [
        @uri.to_s.gsub(/[^[:alnum:]]+/, '_').sub(/_$/, ''),
        Digest::SHA1.hexdigest(@uri.to_s)
      ].join('-')
    end

get_http_object() click to toggle source

Return a Net::HTTP::Proxy object constructed from the settings provided accessing the repository.

This method optionally configures SSL correctly if the URI scheme is ‘https’, including setting up the root certificate store so remote server SSL certificates can be validated.

@return [Net::HTTP::Proxy] object constructed from repo settings

    # File lib/puppet/forge/repository.rb, line 117
    def get_http_object
      proxy_class = Net::HTTP::Proxy(http_proxy_host, http_proxy_port)
      proxy = proxy_class.new(@uri.host, @uri.port)

      if @uri.scheme == 'https'
        cert_store = OpenSSL::X509::Store.new
        cert_store.set_default_paths

        proxy.use_ssl = true
        proxy.verify_mode = OpenSSL::SSL::VERIFY_PEER
        proxy.cert_store = cert_store
      end

      proxy
    end

http_proxy_env() click to toggle source

Read HTTP proxy configurationm from Puppet’s config file, or the http_proxy environment variable.

    # File lib/puppet/forge/repository.rb, line 42
    def http_proxy_env
      proxy_env = ENV["http_proxy"] || ENV["HTTP_PROXY"] || nil
      begin
        return URI.parse(proxy_env) if proxy_env
      rescue URI::InvalidURIError
        return nil
      end
      return nil
    end

http_proxy_host() click to toggle source

    # File lib/puppet/forge/repository.rb, line 52
    def http_proxy_host
      env = http_proxy_env

      if env and env.host then
        return env.host
      end

      if Puppet.settings[:http_proxy_host] == 'none'
        return nil
      end

      return Puppet.settings[:http_proxy_host]
    end

http_proxy_port() click to toggle source

    # File lib/puppet/forge/repository.rb, line 66
    def http_proxy_port
      env = http_proxy_env

      if env and env.port then
        return env.port
      end

      return Puppet.settings[:http_proxy_port]
    end

make_http_request(request_path) click to toggle source

Return a Net::HTTPResponse read for this `request_path`.

    # File lib/puppet/forge/repository.rb, line 77
    def make_http_request(request_path)
      request = Net::HTTP::Get.new(request_path, { "User-Agent" => user_agent })
      if ! @uri.user.nil? && ! @uri.password.nil?
        request.basic_auth(@uri.user, @uri.password)
      end
      return read_response(request)
    end

read_response(request) click to toggle source

Return a Net::HTTPResponse read from this HTTPRequest `request`.

@param request [Net::HTTPRequest] request to make @return [Net::HTTPResponse] response from request @raise [Puppet::Forge::Errors::CommunicationError] if there is a network

    related error

@raise [Puppet::Forge::Errors::SSLVerifyError] if there is a problem

    verifying the remote SSL certificate

    # File lib/puppet/forge/repository.rb, line 93
    def read_response(request)
      http_object = get_http_object

      http_object.start do |http|
        http.request(request)
      end
    rescue *NET_HTTP_EXCEPTIONS => e
      raise CommunicationError.new(:uri => @uri.to_s, :original => e)
    rescue OpenSSL::SSL::SSLError => e
      if e.message =~ /certificate verify failed/
        raise SSLVerifyError.new(:uri => @uri.to_s, :original => e)
      else
        raise e
      end
    end

retrieve(release) click to toggle source

Return the local file name containing the data downloaded from the repository at `release` (e.g. “myuser-mymodule”).

    # File lib/puppet/forge/repository.rb, line 135
    def retrieve(release)
      return cache.retrieve(@uri + release)
    end

to_s() click to toggle source

Return the URI string for this repository.

    # File lib/puppet/forge/repository.rb, line 140
    def to_s
      return @uri.to_s
    end