class PritunlApiClient::Api
Low-level communication to api server
Public Class Methods
@param base_url [String] Full URL to a running Pritunl server (include the “https://”) @param api_token [String @param api_secret [String] @param verify_ssl [Boolean] Whether or not to verify SSL certificate]
# File lib/pritunl_api_client/api.rb, line 15 def initialize( base_url:, api_token:, api_secret:, verify_ssl: true ) @api_token = api_token @api_secret = api_secret @client = RestClient::Resource.new( base_url, verify_ssl: verify_ssl ) end
Public Instance Methods
Send delete request to api server
@param path [String] URL path of api @param params [Hash, NilClass] Api
parameters @return [Hash, Array, String] Response from api server
# File lib/pritunl_api_client/api.rb, line 60 def delete( path, params = nil ) parameters = { params: params } parameters.merge!( common_headers ) parameters.merge!( generate_auth_headers( path: path, params: params, method: 'DELETE' ) ) parse_data @client[path].delete( parameters ) end
Send get request to api server
@param path [String] URL path of api @param params [Hash, NilClass] Api
parameters @return [Hash, Array, String] Response from api server
# File lib/pritunl_api_client/api.rb, line 37 def get( path, params = nil ) parameters = { params: params } parameters.merge!( common_headers ) parameters.merge!( generate_auth_headers( path: path, params: params, method: 'GET' ) ) parse_data @client[path].get( parameters ) end
Send head request to api server
@param path [String] URL path of api @param params [Hash, NilClass] Api
parameters @return [Hash, Array, String] Response from api server
# File lib/pritunl_api_client/api.rb, line 72 def head( path, params = nil ) headers = common_headers.merge( generate_auth_headers( path: path, params: params, method: 'HEAD' ) ) params = JSON.generate( params, space: ' ' ) if params parse_data @client[path].head( params, headers ) end
Send post request to api server
@param path [String] URL path of api @param params [Hash, NilClass] Api
parameters @return [Hash, Array, String] Response from api server
# File lib/pritunl_api_client/api.rb, line 26 def post( path, params = nil ) headers = common_headers.merge( generate_auth_headers( path: path, params: params, method: 'POST' ) ) params = JSON.generate( params, space: ' ' ) if params parse_data @client[path].post( params, headers ) end
Send put request to api server
@param path [String] URL path of api @param params [Hash, NilClass] Api
parameters @return [Hash, Array, String] Response from api server
# File lib/pritunl_api_client/api.rb, line 49 def put( path, params = nil ) headers = common_headers.merge( generate_auth_headers( path: path, params: params, method: 'PUT' ) ) params = JSON.generate( params, space: ' ' ) if params parse_data @client[path].put( params, headers ) end
Private Instance Methods
Common headers to add to every request
@return [Hash]
# File lib/pritunl_api_client/api.rb, line 83 def common_headers { content_type: :json, accept: :json } end
Authentication algorithm that is included in every request
@param path [String] URL path of api @param params [Hash, NilClass] Api
parameters @param method [String] Uppercase method for the request @return [Hash]
# File lib/pritunl_api_client/api.rb, line 93 def generate_auth_headers( path:, params: nil, method: ) auth_timestamp = Time.now.to_i auth_nonce = SecureRandom.hex( 16 ) auth_string = [@api_token, auth_timestamp, auth_nonce, method, path] auth_string << JSON.generate( params, space: ' ' ) if params auth_string = auth_string.join( '&' ) digest = OpenSSL::Digest.new( 'sha256' ) hmac = OpenSSL::HMAC.digest( digest, @api_secret, auth_string ) auth_signature = Base64.encode64( hmac ).chomp { auth_token: @api_token, auth_timestamp: auth_timestamp, auth_nonce: auth_nonce, auth_signature: auth_signature } end
Parse responses back from api server
@param data [String] @return [Hash, Array, String]
# File lib/pritunl_api_client/api.rb, line 114 def parse_data( data ) JSON.parse( data ) rescue JSON::ParserError => e data end