lib/applicaster/accounts.rb in omniauth-applicaster-1.0.2 vs lib/applicaster/accounts.rb in omniauth-applicaster-1.1.0
- old
+ new
@@ -1,7 +1,17 @@
+require "faraday"
+require "faraday_middleware"
+require "virtus"
+
module Applicaster
class Accounts
+ autoload :Account, "applicaster/accounts/account"
+ autoload :User, "applicaster/accounts/user"
+
+ RETRYABLE_STATUS_CODES = [500, 503, 502]
+ FARADAY_TIMEOUT = 0.5
+
attr_accessor :client_id
attr_accessor :client_secret
class << self
def default_site
@@ -9,18 +19,70 @@
end
def site
URI.parse(ENV["ACCOUNTS_BASE_URL"] || default_site)
end
+
+ def connection(options = {})
+ Faraday.new(url: site, request: { timeout: FARADAY_TIMEOUT } ) do |conn|
+ if options[:token]
+ conn.request :oauth2, options[:token]
+ end
+
+ conn.request :json
+ conn.request :retry,
+ interval: 0.05,
+ backoff_factor: 2,
+ exceptions: [Faraday::ClientError, Faraday::TimeoutError],
+ methods: [],
+ retry_if: -> (env, exception) {
+ env[:method] == :get &&
+ RETRYABLE_STATUS_CODES.include?(env[:status])
+ }
+
+
+ conn.response :json, content_type: /\bjson$/
+ # conn.response :logger, Rails.logger
+ # conn.response :logger, Logger.new(STDOUT)
+ conn.response :raise_error
+
+ conn.adapter Faraday.default_adapter
+ end
+ end
+
+ def user_from_token(token)
+ Applicaster::Accounts::User.new(
+ connection(token: token)
+ .get("/api/v1/users/current.json")
+ .body
+ )
+ end
end
- def initialize(client_id, client_secret)
- @client_id = client_id
- @client_secret = client_secret
+ def initialize(client_id = nil, client_secret = nil)
+ @client_id = client_id || ENV["ACCOUNTS_CLIENT_ID"]
+ @client_secret = client_secret || ENV["ACCOUNTS_CLIENT_SECRET"]
end
def user_data_from_omniauth(omniauth_credentials)
access_token(omniauth_credentials).get("/api/v1/users/current.json").parsed
+ end
+
+ def accounts
+ connection(token: client_credentials_token.token)
+ .get("/api/v1/accounts.json")
+ .body
+ .map {|a| Account.new(a) }
+ end
+
+ def connection(*args)
+ self.class.connection(*args)
+ end
+
+ protected
+
+ def client_credentials_token
+ @client_credentials_token ||= client.client_credentials.get_token
end
def client
@client ||= ::OAuth2::Client.new(
client_id,