Class: AruxApp::API::Auth

Inherits:
Object
  • Object
show all
Defined in:
lib/arux_app/api/auth.rb

Defined Under Namespace

Classes: AccessToken, InvalidClientError, InvalidGrantError

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Auth

Returns a new instance of Auth.



31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/arux_app/api/auth.rb', line 31

def initialize(options = {})
  self.client_id = options[:client_id]
  self.client_secret = options[:client_secret]
  self.redirect_uri = options[:redirect_uri]
  self.js_callback = options[:js_callback]
  self. = options[:login_mechanism] || 'redirect'
  self.element = options[:element]
  self.district_subdomain = options[:district_subdomain]
  self.current_user_uuid = options[:current_user_uuid]

  raise API::InitializerError.new(:client_id, "can't be blank") if self.client_id.to_s.empty?
  raise API::InitializerError.new(:client_secret, "can't be blank") if self.client_secret.to_s.empty?
  raise API::InitializerError.new(:redirect_uri, "can't be blank") if self.redirect_uri.to_s.empty?
end

Instance Attribute Details

#client_idObject

Returns the value of attribute client_id.



29
30
31
# File 'lib/arux_app/api/auth.rb', line 29

def client_id
  @client_id
end

#client_secretObject

Returns the value of attribute client_secret.



29
30
31
# File 'lib/arux_app/api/auth.rb', line 29

def client_secret
  @client_secret
end

#current_user_uuidObject

Returns the value of attribute current_user_uuid.



29
30
31
# File 'lib/arux_app/api/auth.rb', line 29

def current_user_uuid
  @current_user_uuid
end

#district_subdomainObject

Returns the value of attribute district_subdomain.



29
30
31
# File 'lib/arux_app/api/auth.rb', line 29

def district_subdomain
  @district_subdomain
end

#elementObject

Returns the value of attribute element.



29
30
31
# File 'lib/arux_app/api/auth.rb', line 29

def element
  @element
end

#js_callbackObject

Returns the value of attribute js_callback.



29
30
31
# File 'lib/arux_app/api/auth.rb', line 29

def js_callback
  @js_callback
end

#login_mechanismObject

Returns the value of attribute login_mechanism.



29
30
31
# File 'lib/arux_app/api/auth.rb', line 29

def 
  @login_mechanism
end

#redirect_uriObject

Returns the value of attribute redirect_uri.



29
30
31
# File 'lib/arux_app/api/auth.rb', line 29

def redirect_uri
  @redirect_uri
end

Class Method Details

.api_uriObject



54
55
56
# File 'lib/arux_app/api/auth.rb', line 54

def self.api_uri
  AruxApp::API.uri(subdomain: "account.api")
end

.public_uriObject



46
47
48
# File 'lib/arux_app/api/auth.rb', line 46

def self.public_uri
  AruxApp::API.uri(subdomain: "account")
end

Instance Method Details

#access_token(code) ⇒ Object



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
139
# File 'lib/arux_app/api/auth.rb', line 104

def access_token(code)
  data = {
    :code => code,
    :grant_type => "authorization_code",
    :redirect_uri => self.redirect_uri,
    :client_secret => self.client_secret,
    :client_id => self.client_id
  }

  request = HTTPI::Request.new
  request.url = "#{api_uri}/oauth/token"
  request.body = data
  request.headers = {'User-Agent' => USER_AGENT}

  response = HTTPI.post(request)

  if !response.error?
    AccessToken.new(
      token: JSON.parse(response.body)['access_token'],
      scope: JSON.parse(response.body)['scope'],
      auth: self
    )
  else
    begin
      resp_data = JSON.parse(response.body)
    rescue
    end
    if resp_data and resp_data["error"] == "invalid_grant"
      raise(API::Auth::InvalidGrantError.new(response.code, response.body))
    elsif resp_data and resp_data["error"] == "invalid_client"
      raise(API::Auth::InvalidClientError.new(response.code, response.body))
    else
      raise(API::Error.new(response.code, response.body))
    end
  end
end

#api_uriObject



58
59
60
# File 'lib/arux_app/api/auth.rb', line 58

def api_uri
  self.class.api_uri
end

#authorization_url(scope: "public") ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/arux_app/api/auth.rb', line 62

def authorization_url(scope: "public")
  base_uri = URI.parse("#{public_uri}/oauth/authorize")
  params = {
    scope: scope,
    response_type: "code",
    client_id: client_id,
    redirect_uri: redirect_uri,
    district: district_subdomain
  }
  base_uri.query = URI.encode_www_form(params)
  base_uri.to_s
end

#basic_authentication(username, password, scope = "public") ⇒ Object

Raises:



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/arux_app/api/auth.rb', line 75

def basic_authentication(username, password, scope = "public")
  params = {
    scope: scope,
    grant_type: "password",
    client_id: client_id,
    client_secret: client_secret
  }

  request = HTTPI::Request.new.tap do |req|
    req.url = "#{public_uri}/oauth/token"
    req.body = params
    req.headers = { 'User-Agent' => USER_AGENT }
    req.auth.basic(username, password)
  end

  response = HTTPI.post(request)
  raise(API::Error.new(response.code, response.body)) if response.error?

  AccessToken.new(
    token: JSON.parse(response.body)['access_token'],
    scope: JSON.parse(response.body)['scope'],
    auth: self
  )
end

#client_credentials_tokenObject



141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# File 'lib/arux_app/api/auth.rb', line 141

def client_credentials_token
  data = {
    scope: "public",
    grant_type: "client_credentials",
    client_id: client_id,
    client_secret: client_secret
  }

  request = HTTPI::Request.new
  request.url = "#{api_uri}/oauth/token"
  request.body = data
  request.headers = {'User-Agent' => USER_AGENT}

  response = HTTPI.post(request)
  if !response.error?
    AccessToken.new(:token => JSON.parse(response.body)['access_token'], auth: self)
  else
    raise(API::Error.new(response.code, response.body))
  end
end

#javascriptObject



162
163
164
165
166
167
168
169
170
171
172
173
174
175
# File 'lib/arux_app/api/auth.rb', line 162

def javascript
  options = {
    district: self.district_subdomain,
    element: self.element,
    login: {
      current_uuid: self.current_user_uuid,
      client_id: self.client_id,
      redirect_uri: self.redirect_uri,
      login_mechanism: self.,
      callback: self.js_callback
    }
  }
  return %(new SwitchBoardIOLogin(#{options.to_json});)
end

#public_uriObject



50
51
52
# File 'lib/arux_app/api/auth.rb', line 50

def public_uri
  self.class.public_uri
end

#registration_urlObject



100
101
102
# File 'lib/arux_app/api/auth.rb', line 100

def registration_url
  %(#{public_uri}/users/registrations?client_id=#{self.client_id}&redirect_uri=#{self.redirect_uri}&district=#{self.district_subdomain})
end