Class: Stackd::AuthRequest
Defined Under Namespace
Classes: StateMismatchError
Class Method Summary
collapse
Instance Method Summary
collapse
#require_attr!
#tattr?
Constructor Details
#initialize(client, attrs = {}) ⇒ AuthRequest
Returns a new instance of AuthRequest.
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
# 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
|
Class Method Details
.client(client, params = {}) ⇒ Object
30
31
32
33
|
# File 'lib/stackd/auth_request.rb', line 30
def client client, params = {}
request_token client, grant_type: 'client_credentials',
scope: params[:scope]
end
|
.password(client, params) ⇒ Object
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# 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 = {}) ⇒ Object
35
36
37
38
39
40
41
42
43
44
45
46
47
|
# 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
|
Instance Method Details
#callback(params) ⇒ Object
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
# 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 = {}) ⇒ Object
95
96
97
98
99
100
101
102
103
104
105
106
107
|
# 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
|