-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
/
access_token.cr
67 lines (57 loc) · 1.53 KB
/
access_token.cr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
class OAuth::AccessToken
getter token : String
getter secret : String
def initialize(@token : String, @secret : String, @extra : Hash(String, String)? = nil)
end
def authenticate(client, consumer_key, consumer_secret, extra_params = nil)
OAuth.authenticate(client, @token, @secret, consumer_key, consumer_secret, extra_params)
end
def extra
@extra ||= {} of String => String
end
def self.from_response(response : String) : self
token = nil
secret = nil
extra = nil
HTTP::Params.parse(response) do |key, value|
case key
when "oauth_token" then token = value
when "oauth_token_secret" then secret = value
else
extra ||= {} of String => String
extra[key] = value
end
end
new token.not_nil!, secret.not_nil!, extra
end
def self.new(pull : JSON::PullParser)
token = nil
secret = nil
extra = nil
pull.read_object do |key|
case key
when "oauth_token"
token = pull.read_string
when "oauth_token_secret"
secret = pull.read_string
else
if pull.kind == :STRING
extra ||= {} of String => String
extra[key] = pull.read_string
else
pull.skip
end
end
end
new token.not_nil!, secret.not_nil!, extra
end
def to_json(json : JSON::Builder)
json.object do
json.field "oauth_token", @token
json.field "oauth_token_secret", @secret
@extra.try &.each do |key, value|
json.field key, value
end
end
end
end