module GitLfsS3::CephPresignerService

Public Instance Methods

signed_url(obj) click to toggle source
# File lib/git-lfs-s3/services/ceph_presigner.rb, line 15
def signed_url(obj)
  expire_at = (DateTime.now + 1).strftime('%s')
  secret_access_key = GitLfsS3::Application.settings.aws_secret_access_key
  access_key_id = GitLfsS3::Application.settings.aws_access_key_id
  endpoint = GitLfsS3::Application.settings.endpoint
  digest = OpenSSL::Digest.new('sha1')
  can_string = "PUT\n\napplication/octet-stream\n" \
               "#{expire_at}\n/#{obj.bucket_name}/#{obj.key}"
  hmac = OpenSSL::HMAC.digest(digest, secret_access_key, can_string)
  signature = URI.encode_www_form(
    Base64.encode64(hmac).strip, /[\+=?@$&,\/:;\?]/
  )
  "#{endpoint}/#{obj.bucket_name}/#{obj.key}?" \
  "Signature=#{signature}" \
  "&AWSAccessKeyId=#{access_key_id}" \
  "&Expires=#{expire_at}"
end