class OmniAuth::Strategies::Htc

Attributes

access_token[RW]
expires_in[RW]

Public Instance Methods

callback_phase() click to toggle source
Calls superclass method
# File lib/omniauth/strategies/htc.rb, line 46
def callback_phase
  fetch_access_token request.params["code"]
  super
end
request_phase() click to toggle source
# File lib/omniauth/strategies/htc.rb, line 42
def request_phase
  redirect sso_auth_uri.to_s
end

Protected Instance Methods

access_token_params() click to toggle source
# File lib/omniauth/strategies/htc.rb, line 134
def access_token_params
  @access_token_params ||= {
    client_id: options.client_id,
    client_secret: options.client_secret,
    grant_type: "authorization_code"
  }
end
access_token_uri() click to toggle source
# File lib/omniauth/strategies/htc.rb, line 102
def access_token_uri
  @access_token_uri ||= URI::HTTPS.build(host: options.auth_host, path: options.token_path)
end
fetch_access_token(code) click to toggle source
# File lib/omniauth/strategies/htc.rb, line 67
      def fetch_access_token(code)
        response = Net::HTTP.post_form(access_token_uri, access_token_params.merge(code: code))

        if response.code_type == Net::HTTPOK
          json = JSON.parse(response.body)
          self.access_token = squish! json["access_token"]
          self.expires_in = json["expires_in"]

          return
        end

        raise OmniAuth::NoSessionError, <<~MSG
          auth code for access token request failed -
          code: #{response.code}
          res: #{response.body}
        MSG
      end
fetch_user_info() click to toggle source
# File lib/omniauth/strategies/htc.rb, line 85
      def fetch_user_info
        response = Net::HTTP.start(user_info_uri.host, user_info_uri.port, use_ssl: true) do |http|
          req = Net::HTTP::Get.new user_info_uri
          req["authkey"] = access_token

          http.request req
        end

        return JSON.parse(response.body) if response.code_type == Net::HTTPOK

        raise OmniAuth::NoSessionError, <<~MSG
          access token get user info request failed -
          token: #{access_token}
          res: #{response.body}
        MSG
      end
prune!(hash) click to toggle source
# File lib/omniauth/strategies/htc.rb, line 146
def prune!(hash)
  hash.delete_if do |_, v|
    prune!(v) if v.is_a?(Hash)
    v.nil? || (v.respond_to?(:empty?) && v.empty?)
  end
end
raw_info() click to toggle source
# File lib/omniauth/strategies/htc.rb, line 53
def raw_info
  @raw_info ||= fetch_user_info
end
squish!(str) click to toggle source
# File lib/omniauth/strategies/htc.rb, line 153
def squish!(str)
  str.gsub!(/\A[[:space:]]+/, '')
  str.gsub!(/[[:space:]]+\z/, '')
  str.gsub!(/[[:space:]]+/, ' ')
  str
end
sso_auth_params() click to toggle source
# File lib/omniauth/strategies/htc.rb, line 124
def sso_auth_params
  @sso_auth_params ||= {
    client_id: options.client_id,
    redirection_url: options.redirection_url,
    scopes: options.scopes,
    response_type: "code",
    state: sso_auth_state_param
  }
end
sso_auth_state_param() click to toggle source
# File lib/omniauth/strategies/htc.rb, line 114
def sso_auth_state_param
  @sso_auth_state_param ||= {
    clientId: options.client_id,
    redirectionUrl: options.redirection_url,
    scopes: options.scopes,
    requireAuthCode: true,
    authorities: "htc.com"
  }.to_json
end
sso_auth_uri() click to toggle source
# File lib/omniauth/strategies/htc.rb, line 57
def sso_auth_uri
  query = sso_auth_params.map { |k,v| to_query k, v }.join("&")

  @sso_auth_uri ||= URI::HTTPS.build(
    host: options.auth_host,
    path: options.authorize_path,
    query: query
  )
end
to_query(k, v) click to toggle source
# File lib/omniauth/strategies/htc.rb, line 142
def to_query(k, v)
  "#{CGI.escape(k.to_s)}=#{CGI.escape(v.to_s)}"
end
user_info_uri() click to toggle source
# File lib/omniauth/strategies/htc.rb, line 106
def user_info_uri
  @user_info_uri ||= URI::HTTPS.build(
    host: options.user_info_host,
    path: options.user_info_path,
    query: "fields=firstName,id,lastName"
  )
end