-
Notifications
You must be signed in to change notification settings - Fork 37
/
authentication_helper.rb
49 lines (40 loc) · 1.47 KB
/
authentication_helper.rb
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
# frozen_string_literal: true
module AuthenticationHelper
def auth_url(scope, redirect_uri)
config = AppConfig['stack_exchange']
"https://stackexchange.com/oauth?client_id=#{config['client_id']}&scope=#{scope}&redirect_uri=#{redirect_uri}"
end
def write_auth_url
config = AppConfig['token_store']
state = Rails.cache.fetch("token_migration_state/#{current_user.id}", expires_in: 30.minutes) do
SecureRandom.hex(10)
end
"#{config['host']}/auth?state=#{state}"
end
def identify_auth_url
config = AppConfig['stack_exchange']
auth_url('', config['redirect_uri'])
end
def login_auth_url
config = AppConfig['stack_exchange']
auth_url('', config['login_redirect_uri'])
end
def signup_auth_url
login_auth_url
end
def access_token_from_code(_code, redirect_uri = AppConfig['stack_exchange']['redirect_uri'])
config = AppConfig['stack_exchange']
request_params = {
client_id: config['client_id'],
client_secret: config['client_secret'],
code: params[:code],
redirect_uri: redirect_uri
}.stringify_keys
response = Rack::Utils.parse_nested_query(Net::HTTP.post_form(URI.parse('https://stackexchange.com/oauth/access_token'), request_params).body)
response['access_token']
end
def info_for_access_token(access_token)
config = AppConfig['stack_exchange']
JSON.parse(open("https://api.stackexchange.com/2.2/access-tokens/#{access_token}?key=#{config['key']}").read)['items'][0]
end
end