Module: BetterAuth::SocialProviders::Base

Defined in:
lib/better_auth/social_providers/base.rb

Class Method Summary collapse

Class Method Details

.access_token(tokens) ⇒ Object



45
46
47
# File 'lib/better_auth/social_providers/base.rb', line 45

def access_token(tokens)
  tokens[:access_token] || tokens["access_token"] || tokens[:accessToken] || tokens["accessToken"]
end

.authorization_url(endpoint, params) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
# File 'lib/better_auth/social_providers/base.rb', line 14

def authorization_url(endpoint, params)
  uri = URI(endpoint)
  query = URI.decode_www_form(uri.query.to_s)
  params.compact.each do |key, value|
    next if value == ""

    query << [key.to_s, Array(value).join(" ")]
  end
  uri.query = URI.encode_www_form(query)
  uri.to_s
end

.decode_jwt_payload(token) ⇒ Object



53
54
55
56
57
58
59
60
# File 'lib/better_auth/social_providers/base.rb', line 53

def decode_jwt_payload(token)
  _header, payload, _signature = token.to_s.split(".", 3)
  return {} unless payload

  JSON.parse(Base64.urlsafe_decode64(padded_base64(payload)))
rescue JSON::ParserError, ArgumentError
  {}
end

.get_json(url, headers = {}) ⇒ Object



37
38
39
40
41
42
43
# File 'lib/better_auth/social_providers/base.rb', line 37

def get_json(url, headers = {})
  uri = URI(url)
  request = Net::HTTP::Get.new(uri)
  headers.each { |key, value| request[key.to_s] = value.to_s }
  response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") { |http| http.request(request) }
  JSON.parse(response.body)
end

.id_token(tokens) ⇒ Object



49
50
51
# File 'lib/better_auth/social_providers/base.rb', line 49

def id_token(tokens)
  tokens[:id_token] || tokens["id_token"] || tokens[:idToken] || tokens["idToken"]
end

.padded_base64(value) ⇒ Object



62
63
64
# File 'lib/better_auth/social_providers/base.rb', line 62

def padded_base64(value)
  value + ("=" * ((4 - value.length % 4) % 4))
end

.pkce_challenge(verifier) ⇒ Object



26
27
28
29
# File 'lib/better_auth/social_providers/base.rb', line 26

def pkce_challenge(verifier)
  digest = OpenSSL::Digest.digest("SHA256", verifier.to_s)
  Base64.urlsafe_encode64(digest, padding: false)
end

.post_form(url, form) ⇒ Object



31
32
33
34
35
# File 'lib/better_auth/social_providers/base.rb', line 31

def post_form(url, form)
  uri = URI(url)
  response = Net::HTTP.post_form(uri, form.transform_keys(&:to_s))
  JSON.parse(response.body)
end