Last active
August 29, 2015 14:20
-
-
Save theinventor/d798298e0e4ba7dc65b7 to your computer and use it in GitHub Desktop.
A super quick draft of a Cloudberry API 2.0 client in ruby
This file contains 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
class Cloudberry | |
attr_accessor :access_token, :base_url, :api_version, :account | |
def initialize(account) | |
@api_version = "/api" | |
@account = account | |
@access_token = @account.settings.cloudberry_access_token | |
refresh_token! if have_credentials? && !valid_access_token? | |
end | |
def base_url | |
@base_url ||= "http://mbs.cloudberrylab.com:8090" | |
end | |
def users | |
setup_connection | |
response = @conn.get "#{base_url}#{@api_version}/Users" | |
JSON.parse response.body | |
end | |
def user(user_id) | |
setup_connection | |
response = @conn.get "#{base_url}#{@api_version}/Users?UserId=#{user_id}" | |
JSON.parse response.body | |
end | |
def monitors | |
setup_connection | |
response = @conn.get "#{base_url}#{@api_version}/Monitoring" | |
JSON.parse response.body | |
end | |
def monitor(user_id) | |
setup_connection | |
response = @conn.get "#{base_url}#{@api_version}/Monitoring?UserId=#{user_id}" | |
JSON.parse response.body | |
end | |
def accounts | |
setup_connection | |
response = @conn.get "#{base_url}#{@api_version}/Accounts" | |
JSON.parse response.body | |
end | |
def packages | |
setup_connection | |
response = @conn.get "#{base_url}#{@api_version}/Packages" | |
JSON.parse response.body | |
end | |
########## helper methods | |
def valid_access_token? | |
expiration = account.settings.cloudberry_expires_at || Time.now-1.day | |
expiration > Time.now | |
end | |
def have_credentials? | |
account.settings.cloudberry_username && account.settings.cloudberry_password | |
end | |
def account | |
@account | |
end | |
def access_token | |
@access_token | |
end | |
private | |
def setup_connection | |
@conn = Faraday.new 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["Authorization"] = "Bearer #{access_token}" | |
end | |
def login(username,password) | |
setup_connection | |
params = {} | |
params[:username] = username | |
params[:password] = password | |
response = @conn.post "#{@api_version}/Provider/Login", params | |
JSON.parse response.body | |
end | |
def refresh_token! | |
response = login(account.settings.cloudberry_username,account.settings.cloudberry_password) | |
if response && response["access_token"].present? | |
account.settings.cloudberry_access_token = response["access_token"] | |
account.settings.cloudberry_expires_at = Time.parse(response[".expires"]) | |
return response | |
else | |
raise("CouldNotRefreshToken") | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment