arux_app 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3619d786915abb5811eca23385011342f49b7c5e7cf7be99c41a50d77972f53e
4
- data.tar.gz: 145c55897cdd5fd3fcc9de07dcb837dd092c99f28c936908b0630e02df007d0c
3
+ metadata.gz: 8e67102cdef4d9e36a67d02867cf51bcce88d71135e629b08a3a8aa10e45700b
4
+ data.tar.gz: 591f4ab4d415cf18ef2354bdc36e957e819c6acc276f2d7d52956b539b315695
5
5
  SHA512:
6
- metadata.gz: fb3f7d2756410f4b1a94d71124b0179fd93bd5df33b545e4d4cdc2d97bef1dbf2687d9f82cb8ac21e02ad1ac8db0547a589b38870e630d2af4aebdddaa1feda3
7
- data.tar.gz: e66d5f0b8cae74e1397cc657c01d4b19d6ebd65586fc28a7144ad10cac85fbfb6ca378a4a0f93a414904c5394c7306c8a228a0e5c0f4b5a8cffe667b29f93a8c
6
+ metadata.gz: b8cf881c14802a6056d42e11cce44b6090bbb8b47f335c0a56fa6499425bad61f8441d174c0f47a4a4e2a565ef71dd363bc292455cb13c3587a8416e9d11f265
7
+ data.tar.gz: 770187f083bb7bcf481c61ce89af477bdde85bf7720adba6e87820a3e6c52dec52ddb600b03d4c519ff3785a370e7d4bb780d2029b40b79542bd381fb3ccf877
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "arux_app"
7
- spec.version = "1.0.0"
7
+ spec.version = "2.0.0"
8
8
  spec.authors = ["Arux Software"]
9
9
  spec.email = ["sheuer@aruxsoftware.com"]
10
10
  spec.summary = "Ruby gem for interacting with the Arux.app Switchboard APIs."
@@ -2,13 +2,7 @@ module AruxApp
2
2
  module API
3
3
  class Account
4
4
  def self.server_uri
5
- if AruxApp::API.standardmode?
6
- "https://acc.arux.app"
7
- elsif AruxApp::API.testmode?
8
- "https://acc.arux.blue"
9
- elsif AruxApp::API.devmode?
10
- "https://acc.#{HOSTNAME}"
11
- end
5
+ AruxApp::API.server_uri
12
6
  end
13
7
 
14
8
  attr_accessor :auth, :access_token, :api_version
@@ -16,7 +10,7 @@ module AruxApp
16
10
  def initialize(options = {})
17
11
  self.auth = options[:auth]
18
12
  self.access_token = options[:access_token]
19
- self.api_version = options[:api_version] || 1.2
13
+ self.api_version = options[:api_version] || 1.3
20
14
 
21
15
  raise API::InitializerError.new(:auth_or_access_token, "can't be blank") if self.auth.nil? and self.access_token.nil?
22
16
  raise API::InitializerError.new(:auth, "must be of class type AruxApp::API::Auth") if self.auth and !self.auth.is_a?(AruxApp::API::Auth)
@@ -39,7 +33,7 @@ module AruxApp
39
33
  end
40
34
 
41
35
  def get(uuid, params = {})
42
- uuid = URI.escape(uuid.to_s)
36
+ uuid = AruxApp::API.uri_escape(uuid.to_s)
43
37
 
44
38
  request = HTTPI::Request.new
45
39
  request.url = "#{api_route}/users/#{uuid}"
@@ -73,7 +67,7 @@ module AruxApp
73
67
  end
74
68
 
75
69
  def update(uuid, params)
76
- uuid = URI.escape(uuid.to_s)
70
+ uuid = AruxApp::API.uri_escape(uuid.to_s)
77
71
 
78
72
  request = HTTPI::Request.new
79
73
  request.url = "#{api_route}/users/#{uuid}"
@@ -92,8 +86,8 @@ module AruxApp
92
86
  end
93
87
 
94
88
  def merge(uuid1, uuid2)
95
- uuid1 = URI.escape(uuid1)
96
- uuid2 = URI.escape(uuid2)
89
+ uuid1 = AruxApp::API.uri_escape(uuid1)
90
+ uuid2 = AruxApp::API.uri_escape(uuid2)
97
91
 
98
92
  request = HTTPI::Request.new
99
93
  request.url = "#{api_route}/users/merge/#{uuid1}/#{uuid2}"
@@ -109,7 +103,7 @@ module AruxApp
109
103
  end
110
104
 
111
105
  def delete(uuid)
112
- uuid = URI.escape(uuid.to_s)
106
+ uuid = AruxApp::API.uri_escape(uuid.to_s)
113
107
 
114
108
  request = HTTPI::Request.new
115
109
  request.url = "#{api_route}/users/#{uuid}"
@@ -142,7 +136,7 @@ module AruxApp
142
136
  end
143
137
 
144
138
  def list_user_locks(user_uuid)
145
- uuid = URI.escape(user_uuid.to_s)
139
+ uuid = AruxApp::API.uri_escape(user_uuid.to_s)
146
140
 
147
141
  request = HTTPI::Request.new
148
142
  request.url = "#{api_route}/users/#{user_uuid}/locks"
@@ -158,7 +152,7 @@ module AruxApp
158
152
  end
159
153
 
160
154
  def add_user_lock(user_uuid, scope, reason = "")
161
- uuid = URI.escape(user_uuid.to_s)
155
+ uuid = AruxApp::API.uri_escape(user_uuid.to_s)
162
156
 
163
157
  request = HTTPI::Request.new
164
158
  request.url = "#{api_route}/users/#{uuid}/locks"
@@ -182,7 +176,7 @@ module AruxApp
182
176
  end
183
177
 
184
178
  def delete_user_lock(user_uuid, lock_id)
185
- uuid = URI.escape(user_uuid.to_s)
179
+ uuid = AruxApp::API.uri_escape(user_uuid.to_s)
186
180
 
187
181
  request = HTTPI::Request.new
188
182
  request.url = "#{api_route}/users/#{uuid}/locks/#{lock_id}"
@@ -5,11 +5,12 @@ module AruxApp
5
5
  class InvalidClientError < API::Error; end
6
6
 
7
7
  class AccessToken
8
- attr_accessor :token, :auth
8
+ attr_accessor :token, :auth, :scope
9
9
 
10
10
  def initialize(options = {})
11
11
  self.token = options[:token]
12
12
  self.auth = options[:auth]
13
+ self.scope = options[:scope]
13
14
 
14
15
  raise API::InitializerError.new(:token, "can't be blank") if self.token.to_s.empty?
15
16
  raise API::InitializerError.new(:auth, "can't be blank") if self.auth.nil?
@@ -26,13 +27,7 @@ module AruxApp
26
27
  end
27
28
 
28
29
  def self.server_uri
29
- if AruxApp::API.standardmode?
30
- "https://sso.arux.app"
31
- elsif AruxApp::API.testmode?
32
- "https://sso.arux.blue"
33
- elsif AruxApp::API.devmode?
34
- "https://sso.#{HOSTNAME}"
35
- end
30
+ AruxApp::API.server_uri
36
31
  end
37
32
 
38
33
  attr_accessor :client_id, :client_secret, :redirect_uri, :js_callback, :district_subdomain, :current_user_uuid, :login_mechanism, :element
@@ -52,12 +47,46 @@ module AruxApp
52
47
  raise API::InitializerError.new(:redirect_uri, "can't be blank") if self.redirect_uri.to_s.empty?
53
48
  end
54
49
 
55
- def authorization_url
56
- %(#{self.class.server_uri}/authorize?client_id=#{self.client_id}&redirect_uri=#{self.redirect_uri}&district=#{self.district_subdomain})
50
+ def authorization_url(scope: "public")
51
+ base_uri = URI.parse("#{self.class.server_uri}/oauth/authorize")
52
+ params = {
53
+ scope: scope,
54
+ response_type: "code",
55
+ client_id: client_id,
56
+ redirect_uri: redirect_uri,
57
+ district: district_subdomain
58
+ }
59
+ base_uri.query = URI.encode_www_form(params)
60
+ base_uri.to_s
61
+ end
62
+
63
+ def basic_authentication(username, password, scope = "public")
64
+ params = {
65
+ scope: scope,
66
+ grant_type: "password",
67
+ client_id: client_id,
68
+ client_secret: client_secret
69
+ }
70
+
71
+ request = HTTPI::Request.new.tap do |req|
72
+ req.url = "#{self.class.server_uri}/oauth/token"
73
+ req.body = params
74
+ req.headers = { 'User-Agent' => USER_AGENT }
75
+ req.auth.basic(username, password)
76
+ end
77
+
78
+ response = HTTPI.post(request)
79
+ raise(API::Error.new(response.code, response.body)) if response.error?
80
+
81
+ AccessToken.new(
82
+ token: JSON.parse(response.body)['access_token'],
83
+ scope: JSON.parse(response.body)['scope'],
84
+ auth: self
85
+ )
57
86
  end
58
87
 
59
88
  def registration_url
60
- %(#{self.class.server_uri}/register?client_id=#{self.client_id}&redirect_uri=#{self.redirect_uri}&district=#{self.district_subdomain})
89
+ %(#{self.class.server_uri}/users/registrations?client_id=#{self.client_id}&redirect_uri=#{self.redirect_uri}&district=#{self.district_subdomain})
61
90
  end
62
91
 
63
92
  def access_token(code)
@@ -70,14 +99,18 @@ module AruxApp
70
99
  }
71
100
 
72
101
  request = HTTPI::Request.new
73
- request.url = "#{self.class.server_uri}/access_token"
102
+ request.url = "#{self.class.server_uri}/oauth/token"
74
103
  request.body = data
75
104
  request.headers = {'User-Agent' => USER_AGENT}
76
105
 
77
106
  response = HTTPI.post(request)
78
107
 
79
108
  if !response.error?
80
- return AccessToken.new(:token => JSON.parse(response.body)['access_token'], :auth => self)
109
+ AccessToken.new(
110
+ token: JSON.parse(response.body)['access_token'],
111
+ scope: JSON.parse(response.body)['scope'],
112
+ auth: self
113
+ )
81
114
  else
82
115
  begin
83
116
  resp_data = JSON.parse(response.body)
@@ -93,6 +126,27 @@ module AruxApp
93
126
  end
94
127
  end
95
128
 
129
+ def client_credentials_token
130
+ data = {
131
+ scope: "public",
132
+ grant_type: "client_credentials",
133
+ client_id: client_id,
134
+ client_secret: client_secret
135
+ }
136
+
137
+ request = HTTPI::Request.new
138
+ request.url = "#{self.class.server_uri}/oauth/token"
139
+ request.body = data
140
+ request.headers = {'User-Agent' => USER_AGENT}
141
+
142
+ response = HTTPI.post(request)
143
+ if !response.error?
144
+ AccessToken.new(:token => JSON.parse(response.body)['access_token'], auth: self)
145
+ else
146
+ raise(API::Error.new(response.code, response.body))
147
+ end
148
+ end
149
+
96
150
  def javascript
97
151
  options = {
98
152
  district: self.district_subdomain,
@@ -6,14 +6,14 @@ module AruxApp
6
6
  end
7
7
 
8
8
  def get(routing_number)
9
- routing_number = URI.escape(routing_number.to_s)
9
+ routing_number = AruxApp::API.uri_escape(routing_number.to_s)
10
10
 
11
11
  request = HTTPI::Request.new
12
12
  request.url = "#{self.class.server_uri}/#{routing_number}"
13
13
  request.headers = {'User-Agent' => USER_AGENT}
14
14
 
15
15
  response = HTTPI.get(request)
16
-
16
+
17
17
  if !response.error?
18
18
  JSON.parse(response.body)
19
19
  else
@@ -23,7 +23,7 @@ module AruxApp
23
23
 
24
24
  def get(uuid = nil)
25
25
  if uuid
26
- path = %(/api/#{URI.escape(uuid)})
26
+ path = %(/api/#{AruxApp::API.uri_escape(uuid)})
27
27
  else
28
28
  path = %(/api/#{self.generate_cart_path})
29
29
  end
@@ -110,7 +110,7 @@ module AruxApp
110
110
  end
111
111
 
112
112
  def update_item(item_identifier, params)
113
- path = %(/api/#{self.generate_cart_path}/items/#{URI.escape(item_identifier)})
113
+ path = %(/api/#{self.generate_cart_path}/items/#{AruxApp::API.uri_escape(item_identifier)})
114
114
 
115
115
  request = HTTPI::Request.new
116
116
  request.url = "#{self.class.server_uri}#{path}"
@@ -130,7 +130,7 @@ module AruxApp
130
130
  end
131
131
 
132
132
  def delete_item(item_identifier)
133
- path = %(/api/#{self.generate_cart_path}/items/#{URI.escape(item_identifier)})
133
+ path = %(/api/#{self.generate_cart_path}/items/#{AruxApp::API.uri_escape(item_identifier)})
134
134
 
135
135
  request = HTTPI::Request.new
136
136
  request.url = "#{self.class.server_uri}#{path}"
@@ -179,7 +179,7 @@ module AruxApp
179
179
  protected
180
180
 
181
181
  def generate_cart_path
182
- %(#{URI.escape(self.auth.district_subdomain)}/#{URI.escape(self.access_token.token)})
182
+ %(#{AruxApp::API.uri_escape(self.auth.district_subdomain)}/#{AruxApp::API.uri_escape(self.access_token.token)})
183
183
  end
184
184
 
185
185
  def generate_headers
@@ -21,7 +21,7 @@ module AruxApp
21
21
  end
22
22
 
23
23
  def get(subdomain_or_sn)
24
- subdomain_or_sn = URI.escape(subdomain_or_sn.to_s)
24
+ subdomain_or_sn = AruxApp::API.uri_escape(subdomain_or_sn.to_s)
25
25
 
26
26
  request = HTTPI::Request.new
27
27
  request.url = "#{self.class.server_uri}/v1/customers/#{subdomain_or_sn}"
@@ -37,8 +37,8 @@ module AruxApp
37
37
  end
38
38
 
39
39
  def get_by(key, value)
40
- key = URI.escape(key.to_s)
41
- value = URI.escape(value.to_s)
40
+ key = AruxApp::API.uri_escape(key.to_s)
41
+ value = AruxApp::API.uri_escape(value.to_s)
42
42
 
43
43
  request = HTTPI::Request.new
44
44
  request.url = "#{self.class.server_uri}/v1/customers/by/#{key}/#{value}"
@@ -7,7 +7,7 @@ module AruxApp
7
7
  # firstname & lastname & birthdate
8
8
  # state_student_id
9
9
  request = HTTPI::Request.new
10
- request.url = "#{self.class.server_uri}/api/v1/students/lookup/district_student_id/#{URI.escape(self.auth.district_subdomain)}"
10
+ request.url = "#{self.class.server_uri}/api/v1/students/lookup/district_student_id/#{AruxApp::API.uri_escape(self.auth.district_subdomain)}"
11
11
  request.query = params
12
12
  request.headers = self.generate_headers
13
13
 
@@ -25,7 +25,7 @@ module AruxApp
25
25
  # firstname & lastname & birthdate
26
26
  # district_student_id
27
27
  request = HTTPI::Request.new
28
- request.url = "#{self.class.server_uri}/api/v1/students/lookup/state_student_id/#{URI.escape(self.auth.district_subdomain)}"
28
+ request.url = "#{self.class.server_uri}/api/v1/students/lookup/state_student_id/#{AruxApp::API.uri_escape(self.auth.district_subdomain)}"
29
29
  request.query = params
30
30
  request.headers = self.generate_headers
31
31
 
data/lib/arux_app/api.rb CHANGED
@@ -6,17 +6,42 @@ module AruxApp
6
6
  define_method("#{m}mode?") do
7
7
  @@mode == m
8
8
  end
9
-
9
+
10
10
  define_method("#{m}mode") do
11
11
  @@mode == m
12
12
  end
13
-
13
+
14
14
  define_method("#{m}mode=") do |b|
15
15
  @@mode = b ? m : :standard
16
16
  end
17
17
  end
18
+
19
+ def server_uri
20
+ if AruxApp::API.standardmode?
21
+ "https://account.arux.app"
22
+ elsif AruxApp::API.testmode?
23
+ "https://account.arux.blue"
24
+ elsif AruxApp::API.devmode?
25
+ "https://account.#{HOSTNAME}"
26
+ end
27
+ end
28
+
29
+ def uri_escape(str)
30
+ # URI.escape was deprecated and removed in ruby
31
+ # https://bugs.ruby-lang.org/issues/17309
32
+ # The alternatives suggested were using URI::DEFAULT_PARSER
33
+ # and CGI. This will use URI::DEFAULT_PARSER if it is defined and CGI
34
+ # if not.
35
+ if URI.respond_to?(:escape)
36
+ URI.escape(str)
37
+ elsif defined? URI::DEFAULT_PARSER
38
+ URI::DEFAULT_PARSER.escape(str)
39
+ else
40
+ CGI.escape(str)
41
+ end
42
+ end
18
43
  end
19
-
44
+
20
45
  class Error < StandardError
21
46
  attr_accessor :http_status_code
22
47
  def initialize(code, message)
@@ -25,22 +50,22 @@ module AruxApp
25
50
  self.json = JSON.parse(message)
26
51
  rescue
27
52
  end
28
-
53
+
29
54
  super "(#{code}) #{message}"
30
55
  end
31
56
  end
32
-
57
+
33
58
  class InitializerError < StandardError
34
- def initialize(method, message)
59
+ def initialize(method, message)
35
60
  super "#{method} #{message}"
36
61
  end
37
62
  end
38
63
 
39
64
  class RequirementError < StandardError
40
- def initialize(method, message)
65
+ def initialize(method, message)
41
66
  super "#{method} #{message}"
42
67
  end
43
68
  end
44
69
 
45
70
  end
46
- end
71
+ end
data/lib/arux_app.rb CHANGED
@@ -1,6 +1,6 @@
1
- require "rubygems"
2
- require "httpi"
3
- require "json"
1
+ require 'rubygems'
2
+ require 'httpi'
3
+ require 'json'
4
4
 
5
5
  require "arux_app/api"
6
6
 
@@ -13,7 +13,7 @@ require "arux_app/api/student"
13
13
  require "arux_app/api/cart"
14
14
 
15
15
  module AruxApp
16
- VERSION = "1.0.0"
16
+ VERSION = "2.0.0"
17
17
  USER_AGENT = "Arux.app GEM #{VERSION}"
18
18
  end
19
19
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arux_app
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arux Software
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-12-14 00:00:00.000000000 Z
11
+ date: 2024-05-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httpi
@@ -80,7 +80,7 @@ files:
80
80
  - LICENSE.txt
81
81
  - README.md
82
82
  - Rakefile
83
- - arux_app.gemspec
83
+ - arux.app.gemspec
84
84
  - lib/arux_app.rb
85
85
  - lib/arux_app/api.rb
86
86
  - lib/arux_app/api/account.rb