Class: OmniAuth::Strategies::Mixin

Inherits:
OAuth2
  • Object
show all
Defined in:
lib/omniauth/strategies/mixin.rb,
lib/omniauth/strategies/mixin/client.rb

Overview

OmniAuth strategy for authenticating with Mixin using OAuth2

Defined Under Namespace

Classes: Client

Instance Method Summary collapse

Instance Method Details

#authorize_paramsObject



98
99
100
101
102
103
# File 'lib/omniauth/strategies/mixin.rb', line 98

def authorize_params
  super.tap do |params|
    params[:state] = SecureRandom.hex(16)
    session["omniauth.state"] = params[:state]
  end
end

#build_access_tokenObject



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/omniauth/strategies/mixin.rb', line 48

def build_access_token
  verifier = request.params["code"]
  client.get_token(
    {
      client_id: options.client_id,
      client_secret: options.client_secret,
      code: verifier,
      grant_type: "authorization_code",
      redirect_uri: callback_url
    }
  )
rescue ::OAuth2::Error => e
  raise e # Simply re-raise the error for testing purposes
rescue StandardError => e
  raise ::OAuth2::Error, e.message
end

#callback_urlObject

Override callback_url to use modern URI parsing



75
76
77
# File 'lib/omniauth/strategies/mixin.rb', line 75

def callback_url
  full_host + callback_path
end

#clientObject



79
80
81
82
83
84
85
86
87
88
89
# File 'lib/omniauth/strategies/mixin.rb', line 79

def client
  @client ||= ::OmniAuth::Strategies::Mixin::Client.new(
    options.client_id,
    options.client_secret,
    deep_symbolize(options.client_options).merge(
      connection_opts: {
        request: { timeout: 5, open_timeout: 2 }
      }
    )
  )
end

#raw_infoObject



65
66
67
68
69
70
71
72
# File 'lib/omniauth/strategies/mixin.rb', line 65

def raw_info
  @raw_info ||= begin
    response = access_token.get("/me")
    parse_nested_response(response)
  rescue ::OAuth2::Error, JSON::ParserError => e
    handle_raw_info_error(e)
  end
end

#valid_request?Boolean

Returns:



91
92
93
94
95
96
# File 'lib/omniauth/strategies/mixin.rb', line 91

def valid_request?
  return false unless request.params["state"]
  return false unless session["omniauth.state"]

  request.params["state"] == session["omniauth.state"]
end