zoom_rb 1.1.1 → 1.1.2

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: c331d1e5c790ce66794e2505ee2482ccea8017c223c71029681848c2fcb402e8
4
- data.tar.gz: 12b656b6e1a3e43d31cd619e5f7e1c4e26bcb4fca39906d2109a54482ef6b1f6
3
+ metadata.gz: 53629dfe332dda4f0b07d194539fd7276e072e3f70d483202f31af40c693c007
4
+ data.tar.gz: c429987cdd4f12aa9ed17649fb0c498f65eb454cc21602bda075331c136f0f7a
5
5
  SHA512:
6
- metadata.gz: 54d84ccc716613ad408e491563461cc3af62397f5baf3ae81a413c45eac7a590029327eed38a502e31017d2fceb3560ad9a95fdcea908483aefd138558ef9ca0
7
- data.tar.gz: 46356928a4d9ba8dc595f13833d56616290ac930fd5ec19bac84afdf219e7fe176c37c81fb3f2242816be27c813663816accf303bc882fdb7de1731e429eb8a0
6
+ metadata.gz: faeb2547f3560c6911be1814d4cacc0fade3015123e70bf7011045055dad8548de0984afe130d9541415db98814049fe25844d3a79cd75bec965c9a01ffe4953
7
+ data.tar.gz: 295ea2103ba5817d381ae85b7f93baf3858fd3d4ac326d9fac685a864eef994d487eae35f59aabe6e2c91f88825db31853ace378c6a9e166f7169f43567038e1
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- zoom_rb (1.1.1)
4
+ zoom_rb (1.1.2)
5
5
  httparty (>= 0.13)
6
6
  json (>= 1.8)
7
7
  jwt
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -12,6 +12,11 @@ module Zoom
12
12
  permit: :code_verifier,
13
13
  args_to_params: { auth_code: :code }
14
14
 
15
+ post 'access_tokens_account_credentials',
16
+ '/oauth/token?grant_type=account_credentials',
17
+ oauth: true,
18
+ require: :account_id
19
+
15
20
  post 'refresh_tokens',
16
21
  '/oauth/token',
17
22
  oauth: true,
@@ -18,14 +18,18 @@ module Zoom
18
18
  post_webinar_survey survey_url registrants_email_notification
19
19
  meeting_authentication authentication_option
20
20
  authentication_domains registrants_confirmation_email
21
- ].freeze,
21
+ ],
22
22
  {
23
+ language_interpretation: [
24
+ :enable,
25
+ interpreters: %i[email languages]
26
+ ],
23
27
  question_and_answer: %i[
24
- allow_anonymous_questions, answer_questions, attendees_can_comment,
25
- attendees_can_upvote, enable
28
+ allow_anonymous_questions answer_questions attendees_can_comment
29
+ attendees_can_upvote enable
26
30
  ]
27
31
  }
28
- ]
32
+ ].freeze
29
33
 
30
34
  get 'webinar_list', '/users/:host_id/webinars',
31
35
  permit: %i[page_size page_number]
data/lib/zoom/client.rb CHANGED
@@ -59,3 +59,4 @@ end
59
59
 
60
60
  require 'zoom/clients/jwt'
61
61
  require 'zoom/clients/oauth'
62
+ require 'zoom/clients/server_to_server_oauth'
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zoom
4
+ class Client
5
+ class ServerToServerOAuth < Zoom::Client
6
+ attr_reader :access_token, :expires_in, :expires_at
7
+
8
+ def initialize(config)
9
+ Zoom::Params.new(config).permit(%i[access_token account_id client_id client_secret timeout])
10
+ Zoom::Params.new(config).require_one_of(%i[access_token account_id])
11
+
12
+ config.each { |k, v| instance_variable_set("@#{k}", v) }
13
+ self.class.default_timeout(@timeout || 20)
14
+ end
15
+
16
+ def auth
17
+ response = access_tokens_account_credentials(account_id: @account_id)
18
+ set_tokens(response)
19
+ response
20
+ end
21
+
22
+ def auth_token
23
+ return Base64.urlsafe_encode64("#{@client_id}:#{@client_secret}") if @client_id && @client_secret
24
+
25
+ Base64.urlsafe_encode64("#{Zoom.configuration.api_key}:#{Zoom.configuration.api_secret}")
26
+ end
27
+
28
+ private
29
+
30
+ def set_tokens(response)
31
+ if response.is_a?(Hash) && !response.key?(:error)
32
+ @access_token = response["access_token"]
33
+ @expires_in = response["expires_in"]
34
+ @expires_at = @expires_in ? (Time.now + @expires_in).to_i : nil
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
data/lib/zoom/params.rb CHANGED
@@ -32,7 +32,7 @@ module Zoom
32
32
  array << hash_filter(filter)
33
33
  end
34
34
  end
35
- non_permitted_params = @parameters.keys - permitted_keys.flatten
35
+ non_permitted_params = parameters_keys - permitted_keys.flatten
36
36
  raise Zoom::ParameterNotPermitted, non_permitted_params.to_s unless non_permitted_params.empty?
37
37
  end
38
38
 
@@ -106,5 +106,13 @@ module Zoom
106
106
  raise Zoom::ParameterValueNotPermitted, "#{key}: #{value}"
107
107
  end
108
108
  end
109
+
110
+ def parameters_keys
111
+ if @parameters.kind_of?(Array)
112
+ @parameters.map(&:keys).flatten.uniq
113
+ else
114
+ @parameters.keys
115
+ end
116
+ end
109
117
  end
110
118
  end
data/lib/zoom/utils.rb CHANGED
@@ -12,7 +12,7 @@ module Zoom
12
12
  end
13
13
 
14
14
  def raise_if_error!(response, http_code=200)
15
- return response unless response&.key?('code')
15
+ return response unless response.is_a?(Hash) && response.key?('code')
16
16
 
17
17
  code = response['code']
18
18
 
data/lib/zoom/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Zoom
4
- VERSION = '1.1.1'
4
+ VERSION = '1.1.2'
5
5
  end
@@ -120,4 +120,69 @@ describe Zoom::Client do
120
120
  end
121
121
  end
122
122
  end
123
+
124
+ describe 'ServerToServerOAuth client' do
125
+ let(:access_token) {'xxx'}
126
+ let(:client) do
127
+ Zoom::Client::ServerToServerOAuth.new(access_token: access_token, timeout: 30)
128
+ end
129
+
130
+ it 'raises an error if there is no arguments' do
131
+ expect { Zoom::Client::ServerToServerOAuth.new(timeout: 30) }.to raise_error(Zoom::ParameterMissing)
132
+ end
133
+
134
+ it 'requires at least an access token' do
135
+ expect { Zoom::Client::ServerToServerOAuth.new(access_token: access_token) }.not_to raise_error
136
+ end
137
+
138
+ it 'requires at least an account_id' do
139
+ expect { Zoom::Client::ServerToServerOAuth.new(access_token: access_token) }.not_to raise_error
140
+ end
141
+
142
+ it 'creates instance of Zoom::Client if api_key and api_secret is provided' do
143
+ expect(client).to be_kind_of(Zoom::Client)
144
+ end
145
+
146
+ it 'has the bearer token in the auth header' do
147
+ expect(client.request_headers['Authorization']).to eq("Bearer #{access_token}")
148
+ end
149
+
150
+ describe 'set_tokens' do
151
+ let(:client) { Zoom::Client::ServerToServerOAuth.new(account_id: 'xxx') }
152
+
153
+ before :each do
154
+ Zoom.configure do |config|
155
+ config.timeout = 20
156
+ end
157
+
158
+ stub_request(
159
+ :post,
160
+ zoom_auth_url('oauth/token')
161
+ ).to_return(body: json_response('token', 'access_token'),
162
+ headers: { 'Content-Type' => 'application/json' })
163
+ end
164
+
165
+ it 'sets the access_token, expires_in and expires_at' do
166
+ expected_values = JSON.parse(json_response('token', 'access_token'))
167
+ client.auth
168
+ expect(client.access_token).to eq(expected_values['access_token'])
169
+ expect(client.expires_in).to eq(expected_values['expires_in'])
170
+ expect(client.expires_at).to eq((Time.now + expected_values['expires_in']).to_i)
171
+ end
172
+
173
+ context 'when client_id and client_secret is not provided' do
174
+ it 'has the basic auth authorization header based on api_key and api_secret' do
175
+ expect(client.oauth_request_headers['Authorization']).to eq("Basic eHh4Onh4eA==")
176
+ end
177
+ end
178
+
179
+ context 'when client_id and client_secret are provided' do
180
+ let(:client) { Zoom::Client::ServerToServerOAuth.new(account_id: 'xxx', client_id: 'yyy', client_secret: 'yyy') }
181
+
182
+ it 'has the basic auth authorization header based on client_id and client_secret' do
183
+ expect(client.oauth_request_headers['Authorization']).to eq("Basic eXl5Onl5eQ==")
184
+ end
185
+ end
186
+ end
187
+ end
123
188
  end
@@ -98,4 +98,22 @@ RSpec.describe Zoom::Params do
98
98
  expect { params.permit_value(:baz, values) }.to raise_error(Zoom::ParameterValueNotPermitted, "#{:baz.to_s}: #{:bang.to_s}")
99
99
  end
100
100
  end
101
+
102
+ describe '#parameters_keys' do
103
+ context 'when param is array ' do
104
+ let(:params) { Zoom::Params.new([{foo: :bar, baz: :bang}, {foo: :bar1, baz: :bang1}]) }
105
+
106
+ it 'get each object keys and return unique of them' do
107
+ expect(params.parameters_keys).to eq([:foo, :baz])
108
+ end
109
+ end
110
+
111
+ context 'when param is Hash ' do
112
+ let(:params) { Zoom::Params.new({foo: :bar, baz: :bang}) }
113
+
114
+ it 'return hash keys' do
115
+ expect(params.parameters_keys).to eq([:foo, :baz])
116
+ end
117
+ end
118
+ end
101
119
  end
@@ -30,6 +30,11 @@ describe Zoom::Utils do
30
30
  expect { Utils.raise_if_error!(response) }.to_not raise_error
31
31
  end
32
32
 
33
+ it 'does not raise Zoom::Error if response is not a Hash' do
34
+ response = 'xxx'
35
+ expect { Utils.raise_if_error!(response) }.to_not raise_error
36
+ end
37
+
33
38
  it 'raises Zoom::Error if http code is not 200' do
34
39
  response = { 'code' => 180, 'message' => 'lol error' }
35
40
  expect { Utils.raise_if_error!(response, 400) }.to raise_error(Zoom::Error)
data/spec/spec_helper.rb CHANGED
@@ -45,6 +45,10 @@ def oauth_client
45
45
  Zoom::Client::OAuth.new(auth_token: 'xxx', auth_code: 'xxx', redirect_uri: 'xxx', timeout: 15)
46
46
  end
47
47
 
48
+ def server_to_server_oauth_client
49
+ Zoom::Client::ServerToServerOAuth.new(account_id: 'xxx')
50
+ end
51
+
48
52
  def zoom_client
49
53
  jwt_client
50
54
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zoom_rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kyle Boe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-24 00:00:00.000000000 Z
11
+ date: 2022-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -151,6 +151,7 @@ files:
151
151
  - LICENSE
152
152
  - Makefile
153
153
  - README.md
154
+ - Rakefile
154
155
  - lib/zoom/actions.rb
155
156
  - lib/zoom/actions/account.rb
156
157
  - lib/zoom/actions/billing.rb
@@ -171,6 +172,7 @@ files:
171
172
  - lib/zoom/client.rb
172
173
  - lib/zoom/clients/jwt.rb
173
174
  - lib/zoom/clients/oauth.rb
175
+ - lib/zoom/clients/server_to_server_oauth.rb
174
176
  - lib/zoom/constants/account/options/pay_modes.rb
175
177
  - lib/zoom/constants/account/settings/permitted_settings.rb
176
178
  - lib/zoom/constants/constants.rb