Module: GitLfsS3::CephPresignerService

Extended by:
AwsHelpers
Defined in:
lib/git-lfs-s3/services/ceph_presigner.rb

Class Method Summary collapse

Methods included from AwsHelpers

aws_access_key_id, aws_region, aws_secret_access_key, bucket, bucket_name, object_data, s3

Class Method Details

.signed_url(obj) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 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