Created
April 19, 2016 06:50
-
-
Save srgrn/c75c09a6819fdeef9183c5a08904f5f7 to your computer and use it in GitHub Desktop.
A simple script to send event to event hub with SAS authentication
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| require "optparse" | |
| require "CGI" | |
| require 'openssl' | |
| require "base64" | |
| require "Faraday" | |
| require 'Digest' | |
| def generateToken(url,keyname,keyvalue) | |
| encoded = CGI::escape(url) | |
| ttl = (Time.now + 60*5).to_i | |
| signature = "#{encoded}\n#{ttl}" | |
| key = keyvalue | |
| #dig = OpenSSL::HMAC.digest('sha256', key, signature) | |
| dig = Digest::HMAC.digest(signature, key, Digest::SHA256) | |
| hash = CGI.escape(Base64.strict_encode64(dig)) | |
| # puts hash | |
| return "SharedAccessSignature sig=#{hash}&se=#{ttl}&skn=#{keyname}&sr=#{encoded}" | |
| end | |
| def build_connection(url,token) | |
| conn = Faraday.new(:url => url) do |faraday| | |
| faraday.request :url_encoded # form-encode POST params | |
| faraday.response :logger # log requests to STDOUT | |
| faraday.adapter Faraday.default_adapter # make requests with Net::HTTP | |
| end | |
| conn.headers['Content-Type'] = 'application/json' | |
| conn.headers['Authorization'] = token | |
| return conn | |
| end | |
| if __FILE__ == $0 | |
| ARGV << '-h' if ARGV.empty? | |
| options = {} | |
| OptionParser.new do |opts| | |
| opts.banner = "Usage: generateSasToken.rb [options]" | |
| opts.on('-u URL', '--url URL', 'url for access') { |v| options[:url] = v } | |
| opts.on('--keyname NAME','set key name') { |v| options[:keyname] = v } | |
| opts.on('--key KEY','set key value') { |v| options[:keyvalue] = v } | |
| opts.on_tail("-h", "--help", "Show this message") do | |
| puts opts | |
| exit | |
| end | |
| end.parse! | |
| token = generateToken(options[:url],options[:keyname],options[:keyvalue]) | |
| conn = build_connection(options[:url],token) | |
| response = conn.post do |req| | |
| req.body = '{"temprature":50}' | |
| req.headers['content-length'] = req.body.length.to_s | |
| end | |
| puts response | |
| end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment