class BranchableCDNAssets::Invalidator::AkamaiCCU::HTTP
Attributes
access_token[R]
client_token[R]
ident[R]
nonce[R]
secret_token[R]
time[R]
Public Class Methods
get(opts={})
click to toggle source
# File lib/branchable_cdn_assets/invalidator/akamai_ccu/http.rb, line 19 def self.get opts={} uri = URI.parse opts.fetch(:url) http = Net::HTTP.new uri.host, uri.port http.use_ssl = true request = Net::HTTP::Get.new(opts.fetch(:url)) signed = self.new(opts).sign(request) return http.request signed end
new(opts={})
click to toggle source
# File lib/branchable_cdn_assets/invalidator/akamai_ccu/http.rb, line 49 def initialize opts={} @ident = 'EG1-HMAC-SHA256' @time = Time.now @nonce = SecureRandom.uuid @client_token = opts[:client_token] @access_token = opts[:access_token] @secret_token = opts[:secret_token] end
post(opts={})
click to toggle source
opts requires:
action url and required keys for HTTP
# File lib/branchable_cdn_assets/invalidator/akamai_ccu/http.rb, line 35 def self.post opts={} uri = URI.parse opts.fetch(:url) http = Net::HTTP.new uri.host, uri.port http.use_ssl = true request = Net::HTTP::Post.new( opts.fetch(:url), 'Content-Type' => 'application/json' ) request.body = opts.fetch(:body).to_json signed = self.new(opts).sign(request) return http.request signed end
Public Instance Methods
formatted_time()
click to toggle source
# File lib/branchable_cdn_assets/invalidator/akamai_ccu/http.rb, line 59 def formatted_time time.utc.strftime('%Y%m%dT%H:%M:%S+0000') end
sign(http_request)
click to toggle source
return a signed http_request
# File lib/branchable_cdn_assets/invalidator/akamai_ccu/http.rb, line 64 def sign http_request unsigned_auth_header = "#{ident} client_token=#{client_token};" + "access_token=#{access_token};" + "timestamp=#{formatted_time};" + "nonce=#{nonce};" uri = URI(http_request.path) auth_header = base64_hmac_sha256 [ http_request.method, uri.scheme, http_request.key?('host') ? http_request['host'] : uri.host, uri.request_uri, '', content_hash(http_request), unsigned_auth_header ].join("\t"), base64_hmac_sha256( formatted_time, secret_token ) http_request['Authorization'] = "#{unsigned_auth_header}signature=#{auth_header}" return http_request end
Private Instance Methods
base64_hmac_sha256(data, key)
click to toggle source
# File lib/branchable_cdn_assets/invalidator/akamai_ccu/http.rb, line 107 def base64_hmac_sha256 data, key Base64.encode64( OpenSSL::HMAC.digest(OpenSSL::Digest::SHA256.new, key, data) ).strip end
base64_sha256(data)
click to toggle source
# File lib/branchable_cdn_assets/invalidator/akamai_ccu/http.rb, line 103 def base64_sha256 data Base64.encode64( OpenSSL::Digest::SHA256.new.digest(data) ).strip end
content_hash(http_request)
click to toggle source
# File lib/branchable_cdn_assets/invalidator/akamai_ccu/http.rb, line 89 def content_hash http_request if http_request.method == 'POST' && http_request.body && http_request.body.length > 0 if http_request.body.length > 2048 body = http_request.body[0..2047] else body = http_request.body end return base64_sha256(body) else return "" end end