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.



35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/arux_app/api/auth.rb', line 35

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.



33
34
35
# File 'lib/arux_app/api/auth.rb', line 33

def client_id
  @client_id
end

#client_secretObject

Returns the value of attribute client_secret.



33
34
35
# File 'lib/arux_app/api/auth.rb', line 33

def client_secret
  @client_secret
end

#current_user_uuidObject

Returns the value of attribute current_user_uuid.



33
34
35
# File 'lib/arux_app/api/auth.rb', line 33

def current_user_uuid
  @current_user_uuid
end

#district_subdomainObject

Returns the value of attribute district_subdomain.



33
34
35
# File 'lib/arux_app/api/auth.rb', line 33

def district_subdomain
  @district_subdomain
end

#elementObject

Returns the value of attribute element.



33
34
35
# File 'lib/arux_app/api/auth.rb', line 33

def element
  @element
end

#js_callbackObject

Returns the value of attribute js_callback.



33
34
35
# File 'lib/arux_app/api/auth.rb', line 33

def js_callback
  @js_callback
end

#login_mechanismObject

Returns the value of attribute login_mechanism.



33
34
35
# File 'lib/arux_app/api/auth.rb', line 33

def 
  @login_mechanism
end

#redirect_uriObject

Returns the value of attribute redirect_uri.



33
34
35
# File 'lib/arux_app/api/auth.rb', line 33

def redirect_uri
  @redirect_uri
end

Class Method Details

.server_uriObject



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

def self.server_uri
  AruxApp::API.server_uri
end

Instance Method Details

#access_token(code) ⇒ Object



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

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 = "#{self.class.server_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

#authorization_url(scope: "public") ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/arux_app/api/auth.rb', line 50

def authorization_url(scope: "public")
  base_uri = URI.parse("#{self.class.server_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:



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/arux_app/api/auth.rb', line 63

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 = "#{self.class.server_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



129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# File 'lib/arux_app/api/auth.rb', line 129

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 = "#{self.class.server_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



150
151
152
153
154
155
156
157
158
159
160
161
162
163
# File 'lib/arux_app/api/auth.rb', line 150

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

#registration_urlObject



88
89
90
# File 'lib/arux_app/api/auth.rb', line 88

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