Sha256: a7e1d150f214c4a243e874183ef864af958735d15237beb875aeea8bae61cbce

Contents?: true

Size: 1.77 KB

Versions: 1

Compression:

Stored size: 1.77 KB

Contents

# frozen_string_literal: true
require 'util/signature_util'

module BitsService
  class Blob

    include BitsService::SignatureUtil

    attr_reader :key

    def initialize(key:, private_endpoint:, private_http_client:, vcap_request_id:, resource_type:, public_endpoint:, signing_key_secret:, signing_key_id:)
      @key = key
      @private_http_client = private_http_client
      @vcap_request_id = vcap_request_id
      @resource_type = resource_type
      @private_endpoint = private_endpoint
      @public_endpoint = public_endpoint
      @signing_key_secret = signing_key_secret
      @signing_key_id = signing_key_id
    end

    def attributes(*_)
      {}
    end

    def guid
      key
    end

    def public_download_url
      signed_url(key)
    end

    def public_upload_url
      signed_url(key, verb: 'put') + '&async=true'
    end

    def internal_download_url
      generate_private_url(key)
    end

    private

    def signed_url(key, verb: nil)
      query = if verb.nil?
        ''
      else
        "&verb=#{verb}"
      end

      signed_url = "#{@public_endpoint}#{self.sign_signature(resource_path(key), @signing_key_secret, @signing_key_id)}#{query}"
      logger.debug( "Created signed URL: #{signed_url}")
      return signed_url
    end

    def generate_private_url(key)
      path = resource_path(key)

      @private_http_client.head(path, @vcap_request_id).tap do |response|
        return response['location'] if response.code.to_i == 302
      end

      File.join(@private_endpoint.to_s, path)
    end

    def resource_path(key)
      prefix = @resource_type == :buildpack_cache ? 'buildpack_cache/entries/' : @resource_type
      File.join('/', prefix.to_s, key.to_s)
    end

    def logger
      @logger ||= Steno.logger('cc.bits_service_client')
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bits_service_client-4.0.0.pre.1 lib/bits_service_client/blob.rb