class Warden::GitHub::OAuth
Constants
- BadVerificationCode
Attributes
client_id[R]
client_secret[R]
code[R]
redirect_uri[R]
scope[R]
state[R]
Public Class Methods
new(attrs={})
click to toggle source
# File lib/warden/github/oauth.rb, line 16 def initialize(attrs={}) @code = attrs[:code] @state = attrs[:state] @scope = attrs[:scope] @client_id = attrs.fetch(:client_id) @client_secret = attrs.fetch(:client_secret) @redirect_uri = attrs.fetch(:redirect_uri) end
Public Instance Methods
access_token()
click to toggle source
# File lib/warden/github/oauth.rb, line 34 def access_token @access_token ||= load_access_token end
Private Instance Methods
access_token_uri()
click to toggle source
# File lib/warden/github/oauth.rb, line 53 def access_token_uri @access_token_uri ||= build_uri( '/login/oauth/access_token', client_id: client_id, client_secret: client_secret, code: code) end
build_uri(path, params)
click to toggle source
# File lib/warden/github/oauth.rb, line 61 def build_uri(path, params) URI(Octokit.web_endpoint).tap do |uri| uri.path = path uri.query = encode_params(normalize_params(params)) end end
decode_params(params)
click to toggle source
# File lib/warden/github/oauth.rb, line 84 def decode_params(params) if URI.respond_to? :decode_www_form return Hash[URI.decode_www_form(params)] end Hash[ params.split('&').map { |i| i.split('=').map { |i| URI.decode(i) } } ] end
encode_params(params)
click to toggle source
# File lib/warden/github/oauth.rb, line 72 def encode_params(params) if URI.respond_to? :encode_www_form return URI.encode_www_form(params) end params.map { |*kv| kv.flatten.map { |i| URI.encode(i.to_s, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]")) }.join('=') }.join('&') end
load_access_token()
click to toggle source
# File lib/warden/github/oauth.rb, line 40 def load_access_token http = Net::HTTP.new(access_token_uri.host, access_token_uri.port) http.use_ssl = access_token_uri.scheme == 'https' request = Net::HTTP::Post.new(access_token_uri.path) request.body = access_token_uri.query response = http.request(request) decode_params(response.body).fetch('access_token') rescue IndexError fail BadVerificationCode, 'Bad verification code' end
normalize_params(params)
click to toggle source
# File lib/warden/github/oauth.rb, line 68 def normalize_params(params) params.reject { |_,v| v.nil? || v == '' } end