Sha256: 0e4bf5a24e776939fbe7ec7ca47dd851ec475eada2bde9728798d3c41a329a98

Contents?: true

Size: 1.88 KB

Versions: 1

Compression:

Stored size: 1.88 KB

Contents

module NightcrawlerSwift
  class Connection
    attr_accessor :auth_response
    attr_reader :token_id, :expires_at, :catalog, :admin_url, :upload_url, :public_url

    def connect!
      authenticate!
      configure

      NightcrawlerSwift.logger.debug  "[NightcrawlerSwift] Connected, token_id: #{token_id}"
      self
    end

    def connected?
      !self.token_id.nil? and self.expires_at > Time.now
    end

    def configure
      select_token
      select_catalog
      select_endpoints
      configure_urls
    end

    private
    def opts
      NightcrawlerSwift.options
    end

    def authenticate!
      auth_options = {
        tenantName: opts.tenant_name,
        passwordCredentials: {username: opts.username, password: opts.password}
      }

      resource = RestClient::Resource.new(
        opts.auth_url,
        verify_ssl: NightcrawlerSwift.options.verify_ssl,
        timeout: NightcrawlerSwift.options.timeout
      )

      response = resource.post({ auth: auth_options }.to_json, content_type: :json, accept: :json)

      @auth_response = OpenStruct.new(JSON.parse(response.body))
    rescue StandardError => e
      raise Exceptions::ConnectionError.new(e)
    end

    def select_token
      @token_id = auth_response.access["token"]["id"]
      @expires_at = auth_response.access["token"]["expires"]
      @expires_at = DateTime.parse(@expires_at).to_time
    end

    def select_catalog
      catalogs = auth_response.access["serviceCatalog"]
      @catalog = catalogs.find {|catalog| catalog["type"] == "object-store"}
    end

    def select_endpoints
      raise Exceptions::ConfigurationError.new "No catalog of type 'object-store' found" if catalog.nil?
      @endpoints = catalog["endpoints"].first
    end

    def configure_urls
      @admin_url = @endpoints["adminURL"]
      @upload_url = "#{@admin_url}/#{opts.bucket}"
      @public_url = @endpoints["publicURL"]
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
nightcrawler_swift-0.4.0 lib/nightcrawler_swift/connection.rb