Skip to content

Instantly share code, notes, and snippets.

@why404
Last active July 10, 2020 07:45
Show Gist options
  • Save why404/faab522431897df3cc52 to your computer and use it in GitHub Desktop.
Save why404/faab522431897df3cc52 to your computer and use it in GitHub Desktop.
require 'openssl'
require 'base64'
require 'uri'
def base64_url_encode(str)
Base64.encode64(str).tr("+/", "-_").gsub(/[\n\r]?/, "")
end
def digest(secret, bytes)
OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha1'), secret, bytes)
end
def sign(secret, bytes)
base64_url_encode(digest(secret, bytes))
end
def generate_query_string(body)
body = body.to_json if body.is_a?(Hash)
return body
end
def generate_signature(opts = {})
url = opts[:url]
body = opts[:body]
uri = URI.parse(url)
signature = uri.path
query_string = uri.query
signature += '?' + query_string if !query_string.nil? && !query_string.empty?
signature += "\n"
if body.is_a?(Hash)
params_string = generate_query_string(body)
signature += params_string
end
return signature
end
################################################################################
#
# Example 1
#
################################################################################
require 'httparty'
require 'securerandom'
API_KEY = '...'
SECRET_KEY = '...'
post_data = {
:url => "http://api.pili.qiniu.com/v1/streams",
:body => {
:name => SecureRandom.hex,
:stream_key => SecureRandom.hex,
:is_private => false,
:storage_period => 0,
:protocol => "RTMP",
},
}
puts post_data
encoded_sign = sign(SECRET_KEY, generate_signature(post_data))
http = HTTParty.post(
post_data[:url],
:headers => {
'Authorization' => "pili #{API_KEY}:#{encoded_sign}",
'Content-Type' => 'application/json'
},
:body => post_data[:body].to_json
)
p http
################################################################################
#
# Example 2
#
################################################################################
stream_secret_key = '...'
push_url = '...'
push_url = push_url+'?nonce='+Time.now.to_i
push_token = sign(stream_secret_key, push_url)
push_url = push_url + '&token=' + push_token
puts push_url
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment