Class: MdNotes::OAuthAuthorizationController

Inherits:
BaseController show all
Defined in:
lib/md_notes/controllers/o_auth_authorization_controller.rb

Overview

OAuthAuthorizationController

Instance Attribute Summary

Attributes inherited from BaseController

#config, #http_call_back

Instance Method Summary collapse

Methods inherited from BaseController

#execute_request, #validate_parameters, #validate_response

Constructor Details

#initialize(config, http_call_back: nil) ⇒ OAuthAuthorizationController

Returns a new instance of OAuthAuthorizationController.



9
10
11
# File 'lib/md_notes/controllers/o_auth_authorization_controller.rb', line 9

def initialize(config, http_call_back: nil)
  super(config, http_call_back: http_call_back)
end

Instance Method Details

#refresh_token(authorization, refresh_token, scope: nil, _field_parameters: nil) ⇒ OAuthToken

Obtain a new access token using a refresh token Basic auth format space-delimited list. supported by this endpoint.

Parameters:

  • authorization (String)

    Required parameter: Authorization header in

  • refresh_token (String)

    Required parameter: Refresh token

  • scope (String) (defaults to: nil)

    Optional parameter: Requested scopes as a

  • _field_parameters (Hash) (defaults to: nil)

    Additional optional form parameters are

Returns:



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/md_notes/controllers/o_auth_authorization_controller.rb', line 87

def refresh_token(authorization,
                  refresh_token,
                  scope: nil,
                  _field_parameters: nil)
  # Prepare query url.
  _query_builder = config.get_base_uri
  _query_builder << '/oauth/token'
  _query_url = APIHelper.clean_url _query_builder

  # Prepare headers.
  _headers = {
    'accept' => 'application/json',
    'Authorization' => authorization
  }

  # Prepare form parameters.
  _parameters = {
    'grant_type' => 'refresh_token',
    'refresh_token' => refresh_token,
    'scope' => scope
  }
  if !_parameters.nil? && !_field_parameters.nil?
    _parameters.merge!(_field_parameters)
  end
  _parameters = APIHelper.form_encode_parameters(_parameters)

  # Prepare and execute HttpRequest.
  _request = config.http_client.post(
    _query_url,
    headers: _headers,
    parameters: _parameters
  )
  _response = execute_request(_request)

  # Validate response against endpoint and global error codes.
  if _response.status_code == 400
    raise OAuthProviderException.new(
      'OAuth 2 provider returned an error.',
      _response
    )
  elsif _response.status_code == 401
    raise OAuthProviderException.new(
      'OAuth 2 provider says client authentication failed.',
      _response
    )
  end
  validate_response(_response)

  # Return appropriate response type.
  decoded = APIHelper.json_deserialize(_response.raw_body)
  OAuthToken.from_hash(decoded)
end

#request_token(authorization, username, password, scope: nil, _field_parameters: nil) ⇒ OAuthToken

Create a new OAuth 2 token. Basic auth format space-delimited list. supported by this endpoint.

Parameters:

  • authorization (String)

    Required parameter: Authorization header in

  • username (String)

    Required parameter: Resource owner username

  • password (String)

    Required parameter: Resource owner password

  • scope (String) (defaults to: nil)

    Optional parameter: Requested scopes as a

  • _field_parameters (Hash) (defaults to: nil)

    Additional optional form parameters are

Returns:



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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/md_notes/controllers/o_auth_authorization_controller.rb', line 23

def request_token(authorization,
                  username,
                  password,
                  scope: nil,
                  _field_parameters: nil)
  # Prepare query url.
  _query_builder = config.get_base_uri
  _query_builder << '/oauth/token'
  _query_url = APIHelper.clean_url _query_builder

  # Prepare headers.
  _headers = {
    'accept' => 'application/json',
    'Authorization' => authorization
  }

  # Prepare form parameters.
  _parameters = {
    'grant_type' => 'password',
    'username' => username,
    'password' => password,
    'scope' => scope
  }
  if !_parameters.nil? && !_field_parameters.nil?
    _parameters.merge!(_field_parameters)
  end
  _parameters = APIHelper.form_encode_parameters(_parameters)

  # Prepare and execute HttpRequest.
  _request = config.http_client.post(
    _query_url,
    headers: _headers,
    parameters: _parameters
  )
  _response = execute_request(_request)

  # Validate response against endpoint and global error codes.
  if _response.status_code == 400
    raise OAuthProviderException.new(
      'OAuth 2 provider returned an error.',
      _response
    )
  elsif _response.status_code == 401
    raise OAuthProviderException.new(
      'OAuth 2 provider says client authentication failed.',
      _response
    )
  end
  validate_response(_response)

  # Return appropriate response type.
  decoded = APIHelper.json_deserialize(_response.raw_body)
  OAuthToken.from_hash(decoded)
end