class PlugAir
PlugAir
Class
vim:fileencoding=utf-8
Constants
- API_KEY_LENGTH
- API_KEY_PARAMETER
- AUTH_RESULT_NG
- AUTH_RESULT_OK
- AUTH_RESULT_OTHER_APP_PLUG
- BASE_RESOURCE_PATH
- HOST_NAME
Constants
- PATH_CHALLENGE
- PATH_VERIFY
- SHARED_SECRET_LENGTH
- VERSION
- X_PLUGAIR_TOKEN_HEADER
Public Class Methods
new(api_key=ENV['PLUGAIR_API_KEY'], shared_secret=ENV['PLUGAIR_SHARED_SECRET'])
click to toggle source
# File lib/plugair_sdk.rb, line 49 def initialize(api_key=ENV['PLUGAIR_API_KEY'], shared_secret=ENV['PLUGAIR_SHARED_SECRET']) validate_api_key_and_shared_secret(api_key, shared_secret) @api_key = api_key @shared_secret = shared_secret end
Public Instance Methods
generate_challenge()
click to toggle source
# File lib/plugair_sdk.rb, line 57 def generate_challenge validate_api_key_and_shared_secret(@api_key, @shared_secret) resource_path = BASE_RESOURCE_PATH + PATH_CHALLENGE query_params = API_KEY_PARAMETER + @api_key request_body = JSON.generate({}) uri = URI.parse(HOST_NAME + resource_path + '?' + query_params) https = Net::HTTP.new(uri.host, uri.port) https.use_ssl = true req = Net::HTTP::Get.new(uri.request_uri) https.open_timeout = 10 https.read_timeout = 20 req['Content-Type'] = 'application/json' req['X-PlugAir-Token'] = generate_x_plugair_token(resource_path, query_params, request_body) res = https.request(req) case res when Net::HTTPSuccess json = JSON.parse(res.body) return json['challenge'] else json = JSON.parse(res.body) if json['status'] and json['reason'] and json['message'] then raise PlugAirAuthError.new(json['status'], json['reason'], json['message']) else raise PlugAirUnknownError.new end end end
verify(credential_key, auth_key, auth_data)
click to toggle source
# File lib/plugair_sdk.rb, line 89 def verify(credential_key, auth_key, auth_data) validate_api_key_and_shared_secret(@api_key, @shared_secret) resource_path = BASE_RESOURCE_PATH + PATH_VERIFY query_params = API_KEY_PARAMETER + @api_key request_body = JSON.generate({ :credentialKey => credential_key, :authKey => auth_key, :authData => auth_data }) uri = URI.parse(HOST_NAME + resource_path + '?' + query_params) https = Net::HTTP.new(uri.host, uri.port) https.use_ssl = true req = Net::HTTP::Post.new(uri.request_uri) req.body = request_body https.open_timeout = 10 https.read_timeout = 20 req['Content-Type'] = 'application/json' req['X-PlugAir-Token'] = generate_x_plugair_token(resource_path, query_params, request_body) res = https.request(req) case res when Net::HTTPSuccess json = JSON.parse(res.body) return json else json = JSON.parse(res.body) if json['status'] and json['reason'] and json['message'] then raise PlugAirAuthError.new(json['status'], json['reason'], json['message']) else raise PlugAirUnknownError.new end end end
Private Instance Methods
generate_x_plugair_token(resource_path, query_params, request_body)
click to toggle source
# File lib/plugair_sdk.rb, line 148 def generate_x_plugair_token(resource_path, query_params, request_body) require 'openssl' timestamp = Time.now.getutc.to_i.to_s hash_in = timestamp + resource_path + query_params + request_body hash_out = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), @shared_secret, hash_in).upcase return X_PLUGAIR_TOKEN_HEADER + ':' + timestamp + ':' + hash_out end