Sha256: d0250fd31c61424863e7078fb7d25a553c3af607619d50955bc082c6d6eec321
Contents?: true
Size: 1.99 KB
Versions: 1
Compression:
Stored size: 1.99 KB
Contents
# frozen_string_literal: true require 'net/http' require 'json' require 'base64' require 'uri' require 'securerandom' require 'openssl' module HikOpenapi module Api class << self def get # TODO puts 'WIP' end def post(path, body) uri = URI(HikOpenapi.config.host) uri.merge!(path) https = Net::HTTP.new(uri.host, uri.port) https.use_ssl = true https.open_timeout = 10 https.read_timeout = 10 https.verify_mode = OpenSSL::SSL::VERIFY_NONE headers = init_header('POST', uri.path) # headers.transform_values! { |v| v.force_encoding('iso-8859-1') } begin request = Net::HTTP::Post.new(uri.request_uri, headers) request.body = body.to_json res = https.request(request) result = HikOpenapi::Result.new result.code = res.code result.body = JSON.parse(res.body.force_encoding('utf-8')) result.origin = res result rescue StandardError => e result = HikOpenapi::Result.new result.error = HikOpenapi::Error.new(e) result end end private def init_header(method, path) headers = { 'Content-Type': 'application/json', "Accept": '*/*', 'x-ca-timestamp': (Time.now.to_f * 1000).to_i.to_s, 'x-ca-nonce': SecureRandom.uuid, 'x-ca-key': HikOpenapi.config.app_key } headers.merge({ "x-ca-signature": sign(method, path, headers) }) end def sign(method, path, headers) sign_str = headers.reject { |a| a.to_s.start_with?('x-ca') }.values.sort sign_str = sign_str.unshift(method).push(path).join("\n") enc = Base64.encode64( OpenSSL::HMAC.digest( OpenSSL::Digest.new('sha256'), HikOpenapi.config.app_secret, sign_str ) ).strip enc end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
hik_openapi-0.1.2 | lib/hik_openapi/api.rb |