class Stackd::AuthRequest
Public Class Methods
client(client, params = {})
click to toggle source
# File lib/stackd/auth_request.rb, line 30 def client client, params = {} request_token client, grant_type: 'client_credentials', scope: params[:scope] end
new(client, attrs = {})
click to toggle source
# File lib/stackd/auth_request.rb, line 79 def initialize client, attrs = {} if client.nil? raise ArgumentError.new "client not provided" else self.client = client end attrs.each do |key, val| public_send :"#{key}=", val end if state.nil? self.state = SecureRandom.urlsafe_base64 9 end end
password(client, params)
click to toggle source
# File lib/stackd/auth_request.rb, line 15 def password client, params if params[:username].nil? raise ArgumentError.new "username is required" end if params[:password].nil? raise ArgumentError.new "password is required" end request_token client, grant_type: 'password', username: params[:username], password: params[:password], scope: params[:scope] end
refresh(client, token, params = {})
click to toggle source
# File lib/stackd/auth_request.rb, line 35 def refresh client, token, params = {} if token.nil? raise ArgumentError.new "Token is required" end if token.refresh_token.nil? raise ArgumentError.new "Token must have refresh_token" end request_token client, grant_type: 'refresh_token', refresh_token: token.refresh_token, scope: params[:scope] end
Private Class Methods
request_token(client, params = {})
click to toggle source
# File lib/stackd/auth_request.rb, line 51 def request_token client, params = {} if params[:grant_type].nil? raise ArgumentError.new "grant_type not provided" end res = Unirest.post "#{Stackd.config.api_url}/token", { auth: { user: client.id, password: client.secret }, headers: {'Content-Type' => 'application/x-www-form-urlencoded'}, parameters: params.reject { |k,v| v.nil? } } if res.code == 200 token = client.tokens.new res.body.symbolize_keys on_grant_callbacks = \ Stackd::Token.instance_variable_get :@_on_grant_callbacks on_grant_callbacks.each {|c| c.(token) } token else raise Error.new res.body.symbolize_keys end end
Public Instance Methods
callback(params)
click to toggle source
# File lib/stackd/auth_request.rb, line 109 def callback params unless params[:code] || params[:error] raise ArgumentError.new 'no code or error' end if params[:state] != state raise StateMismatchError.new "#{params[:state]} != #{state}" end if params[:error] raise Error.new params else self.class.send :request_token, client, { grant_type: 'authorization_code', code: params[:code], redirect_uri: redirect_uri } end end
url(params = {})
click to toggle source
# File lib/stackd/auth_request.rb, line 95 def url params = {} uri = auth_url uri.query_values = { response_type: 'code', client_id: client.id, state: state, redirect_uri: params[:redirect_uri], scope: params[:scope] }.reject { |k,v| v.nil? } uri.to_s end
Private Instance Methods
auth_url()
click to toggle source
# File lib/stackd/auth_request.rb, line 131 def auth_url Addressable::URI.parse Stackd.config.auth_url end