zoom_rb 0.8.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.circleci/config.yml +64 -0
- data/.gitignore +19 -0
- data/.ruby-version +1 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +91 -0
- data/LICENSE +22 -0
- data/Makefile +5 -0
- data/README.md +51 -0
- data/lib/zoom.rb +49 -0
- data/lib/zoom/actions/account.rb +93 -0
- data/lib/zoom/actions/group.rb +8 -0
- data/lib/zoom/actions/im/chat.rb +29 -0
- data/lib/zoom/actions/im/group.rb +10 -0
- data/lib/zoom/actions/m323_device.rb +8 -0
- data/lib/zoom/actions/meeting.rb +80 -0
- data/lib/zoom/actions/metrics.rb +29 -0
- data/lib/zoom/actions/recording.rb +35 -0
- data/lib/zoom/actions/report.rb +29 -0
- data/lib/zoom/actions/user.rb +146 -0
- data/lib/zoom/actions/webinar.rb +110 -0
- data/lib/zoom/client.rb +36 -0
- data/lib/zoom/defaults.rb +96 -0
- data/lib/zoom/error.rb +9 -0
- data/lib/zoom/interface.rb +6 -0
- data/lib/zoom/params.rb +64 -0
- data/lib/zoom/utils.rb +74 -0
- data/spec/fixtures/chat/get.json +16 -0
- data/spec/fixtures/chat/list.json +16 -0
- data/spec/fixtures/error/validation.json +10 -0
- data/spec/fixtures/mc_recording_list.json +51 -0
- data/spec/fixtures/meeting/create.json +24 -0
- data/spec/fixtures/meeting/delete.json +4 -0
- data/spec/fixtures/meeting/end.json +4 -0
- data/spec/fixtures/meeting/get.json +34 -0
- data/spec/fixtures/meeting/list.json +32 -0
- data/spec/fixtures/meeting/live.json +32 -0
- data/spec/fixtures/meeting/register.json +7 -0
- data/spec/fixtures/meeting/update.json +4 -0
- data/spec/fixtures/metrics_crc.json +105 -0
- data/spec/fixtures/metrics_meetingdetail.json +32 -0
- data/spec/fixtures/metrics_meetings.json +26 -0
- data/spec/fixtures/recording_delete.json +4 -0
- data/spec/fixtures/recording_get.json +37 -0
- data/spec/fixtures/recording_list.json +51 -0
- data/spec/fixtures/report/getaccountreport.json +23 -0
- data/spec/fixtures/report/getaudioreport.json +22 -0
- data/spec/fixtures/report/getdailyreport.json +13 -0
- data/spec/fixtures/report/getuserreport.json +24 -0
- data/spec/fixtures/report_getaccountreport.json +23 -0
- data/spec/fixtures/report_getdailyreport.json +83 -0
- data/spec/fixtures/report_getuserreport.json +24 -0
- data/spec/fixtures/user/assistant/delete.json +5 -0
- data/spec/fixtures/user/assistant/set.json +5 -0
- data/spec/fixtures/user/autocreate.json +51 -0
- data/spec/fixtures/user/autocreate2.json +51 -0
- data/spec/fixtures/user/create.json +7 -0
- data/spec/fixtures/user/custcreate.json +10 -0
- data/spec/fixtures/user/delete.json +0 -0
- data/spec/fixtures/user/get.json +23 -0
- data/spec/fixtures/user/getbyemail.json +8 -0
- data/spec/fixtures/user/list.json +23 -0
- data/spec/fixtures/user/pending.json +56 -0
- data/spec/fixtures/user/permanent_delete.json +4 -0
- data/spec/fixtures/user/update.json +0 -0
- data/spec/fixtures/webinar/create.json +29 -0
- data/spec/fixtures/webinar/delete.json +0 -0
- data/spec/fixtures/webinar/list.json +20 -0
- data/spec/fixtures/webinar/registrant/add.json +7 -0
- data/spec/fixtures/webinar/registrant/list.json +36 -0
- data/spec/fixtures/webinar/update.json +0 -0
- data/spec/fixtures/webinar_delete.json +4 -0
- data/spec/fixtures/webinar_end.json +4 -0
- data/spec/fixtures/webinar_get.json +17 -0
- data/spec/fixtures/webinar_update.json +4 -0
- data/spec/lib/zoom/actions/group/create_spec.rb +3 -0
- data/spec/lib/zoom/actions/group/delete_spec.rb +3 -0
- data/spec/lib/zoom/actions/group/edit_spec.rb +3 -0
- data/spec/lib/zoom/actions/group/get_spec.rb +3 -0
- data/spec/lib/zoom/actions/group/list_spec.rb +3 -0
- data/spec/lib/zoom/actions/group/member/add_spec.rb +3 -0
- data/spec/lib/zoom/actions/group/member/delete_spec.rb +3 -0
- data/spec/lib/zoom/actions/group/member/list_spec.rb +3 -0
- data/spec/lib/zoom/actions/im/chat/get_spec.rb +64 -0
- data/spec/lib/zoom/actions/im/chat/list_spec.rb +58 -0
- data/spec/lib/zoom/actions/im/group/create_spec.rb +3 -0
- data/spec/lib/zoom/actions/im/group/delete_spec.rb +3 -0
- data/spec/lib/zoom/actions/im/group/edit_spec.rb +3 -0
- data/spec/lib/zoom/actions/im/group/get_spec.rb +3 -0
- data/spec/lib/zoom/actions/im/group/list_spec.rb +3 -0
- data/spec/lib/zoom/actions/im/group/member/add_spec.rb +3 -0
- data/spec/lib/zoom/actions/im/group/member/delete_spec.rb +3 -0
- data/spec/lib/zoom/actions/im/group/member/list_spec.rb +3 -0
- data/spec/lib/zoom/actions/m323/device/create_spec.rb +3 -0
- data/spec/lib/zoom/actions/m323/device/delete_spec.rb +3 -0
- data/spec/lib/zoom/actions/m323/device/list_spec.rb +3 -0
- data/spec/lib/zoom/actions/m323/device/update_spec.rb +3 -0
- data/spec/lib/zoom/actions/ma/account/billing_update_spec.rb +3 -0
- data/spec/lib/zoom/actions/ma/account/create_spec.rb +3 -0
- data/spec/lib/zoom/actions/ma/account/delete_spec.rb +3 -0
- data/spec/lib/zoom/actions/ma/account/get_spec.rb +3 -0
- data/spec/lib/zoom/actions/ma/account/list_spec.rb +3 -0
- data/spec/lib/zoom/actions/ma/account/plan/add_spec.rb +0 -0
- data/spec/lib/zoom/actions/ma/account/plan/get_spec.rb +0 -0
- data/spec/lib/zoom/actions/ma/account/plan/subscribe_spec.rb +3 -0
- data/spec/lib/zoom/actions/ma/account/plan/update_spec.rb +3 -0
- data/spec/lib/zoom/actions/meeting/create_spec.rb +66 -0
- data/spec/lib/zoom/actions/meeting/delete_spec.rb +55 -0
- data/spec/lib/zoom/actions/meeting/end_spec.rb +55 -0
- data/spec/lib/zoom/actions/meeting/get_spec.rb +59 -0
- data/spec/lib/zoom/actions/meeting/list_spec.rb +48 -0
- data/spec/lib/zoom/actions/meeting/live_spec.rb +43 -0
- data/spec/lib/zoom/actions/meeting/register_spec.rb +45 -0
- data/spec/lib/zoom/actions/meeting/update_spec.rb +53 -0
- data/spec/lib/zoom/actions/metrics/crc_spec.rb +48 -0
- data/spec/lib/zoom/actions/metrics/im_spec.rb +3 -0
- data/spec/lib/zoom/actions/metrics/meetingdetail_spec.rb +51 -0
- data/spec/lib/zoom/actions/metrics/meetings_spec.rb +61 -0
- data/spec/lib/zoom/actions/metrics/qos_spec.rb +3 -0
- data/spec/lib/zoom/actions/metrics/webinardetail_spec.rb +3 -0
- data/spec/lib/zoom/actions/metrics/webinars_spec.rb +3 -0
- data/spec/lib/zoom/actions/metrics/zoomroomdetail_spec.rb +3 -0
- data/spec/lib/zoom/actions/metrics/zoomrooms_spec.rb +3 -0
- data/spec/lib/zoom/actions/recording/delete_spec.rb +52 -0
- data/spec/lib/zoom/actions/recording/get_spec.rb +66 -0
- data/spec/lib/zoom/actions/recording/list_spec.rb +51 -0
- data/spec/lib/zoom/actions/recording/mc_list_spec.rb +51 -0
- data/spec/lib/zoom/actions/report/getaccountreport_spec.rb +57 -0
- data/spec/lib/zoom/actions/report/getaudioreport_spec.rb +3 -0
- data/spec/lib/zoom/actions/report/getdailyreport_spec.rb +62 -0
- data/spec/lib/zoom/actions/report/getuserreport_spec.rb +67 -0
- data/spec/lib/zoom/actions/user/activate_spec.rb +3 -0
- data/spec/lib/zoom/actions/user/assistant/delete_spec.rb +3 -0
- data/spec/lib/zoom/actions/user/assistant/set_spec.rb +3 -0
- data/spec/lib/zoom/actions/user/autocreate2_spec.rb +59 -0
- data/spec/lib/zoom/actions/user/autocreate_spec.rb +58 -0
- data/spec/lib/zoom/actions/user/checkemail_spec.rb +3 -0
- data/spec/lib/zoom/actions/user/checkzpk_spec.rb +3 -0
- data/spec/lib/zoom/actions/user/create_spec.rb +69 -0
- data/spec/lib/zoom/actions/user/custcreate_spec.rb +59 -0
- data/spec/lib/zoom/actions/user/deactivate_spec.rb +3 -0
- data/spec/lib/zoom/actions/user/delete_spec.rb +40 -0
- data/spec/lib/zoom/actions/user/get_spec.rb +50 -0
- data/spec/lib/zoom/actions/user/getbyemail_spec.rb +54 -0
- data/spec/lib/zoom/actions/user/list_spec.rb +47 -0
- data/spec/lib/zoom/actions/user/revoketoken_spec.rb +3 -0
- data/spec/lib/zoom/actions/user/update_spec.rb +40 -0
- data/spec/lib/zoom/actions/user/updatepassword_spec.rb +3 -0
- data/spec/lib/zoom/actions/webinar/attendees_list_spec.rb +3 -0
- data/spec/lib/zoom/actions/webinar/create_spec.rb +52 -0
- data/spec/lib/zoom/actions/webinar/delete_spec.rb +40 -0
- data/spec/lib/zoom/actions/webinar/end_spec.rb +3 -0
- data/spec/lib/zoom/actions/webinar/get_spec.rb +65 -0
- data/spec/lib/zoom/actions/webinar/list_registration_spec.rb +3 -0
- data/spec/lib/zoom/actions/webinar/list_spec.rb +48 -0
- data/spec/lib/zoom/actions/webinar/panelists_spec.rb +3 -0
- data/spec/lib/zoom/actions/webinar/polls_spec.rb +3 -0
- data/spec/lib/zoom/actions/webinar/questions_spec.rb +3 -0
- data/spec/lib/zoom/actions/webinar/register_spec.rb +3 -0
- data/spec/lib/zoom/actions/webinar/registrants/add_spec.rb +60 -0
- data/spec/lib/zoom/actions/webinar/registrants/approve_spec.rb +3 -0
- data/spec/lib/zoom/actions/webinar/registrants/list_spec.rb +40 -0
- data/spec/lib/zoom/actions/webinar/registration_cancel_spec.rb +3 -0
- data/spec/lib/zoom/actions/webinar/registration_spec.rb +3 -0
- data/spec/lib/zoom/actions/webinar/update_spec.rb +40 -0
- data/spec/lib/zoom/actions/webinar/uuid_list_spec.rb +3 -0
- data/spec/lib/zoom/client_spec.rb +45 -0
- data/spec/lib/zoom/params_spec.rb +68 -0
- data/spec/lib/zoom/utils_spec.rb +73 -0
- data/spec/spec_helper.rb +35 -0
- data/zoom_rb.gemspec +29 -0
- metadata +483 -0
data/lib/zoom/client.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'httparty'
|
4
|
+
require 'json'
|
5
|
+
require 'jwt'
|
6
|
+
|
7
|
+
module Zoom
|
8
|
+
class Client
|
9
|
+
include HTTParty
|
10
|
+
include Actions::Account
|
11
|
+
include Actions::Group
|
12
|
+
include Actions::M323Device
|
13
|
+
include Actions::User
|
14
|
+
include Actions::Meeting
|
15
|
+
include Actions::Metrics
|
16
|
+
include Actions::Webinar
|
17
|
+
include Actions::Report
|
18
|
+
include Actions::Recording
|
19
|
+
include Actions::IM::Chat
|
20
|
+
include Actions::IM::Group
|
21
|
+
|
22
|
+
base_uri 'https://api.zoom.us/v2'
|
23
|
+
headers 'Accept' => 'application/json'
|
24
|
+
headers 'Content-Type' => 'application/json'
|
25
|
+
|
26
|
+
def initialize(config)
|
27
|
+
Utils.require_params(%i[api_key api_secret], config)
|
28
|
+
config.each { |k, v| instance_variable_set("@#{k}", v) }
|
29
|
+
self.class.default_timeout(@timeout)
|
30
|
+
end
|
31
|
+
|
32
|
+
def access_token
|
33
|
+
JWT.encode({ iss: @api_key, exp: Time.now.to_i + @timeout }, @api_secret, 'HS256', { typ: 'JWT' })
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zoom
|
4
|
+
class Defaults
|
5
|
+
ACCOUNT_OPTIONS_PAY_MODES = { 'Master account holder pays' => 'master', # default
|
6
|
+
'Sub account holder pays' => 'sub'
|
7
|
+
}.freeze
|
8
|
+
|
9
|
+
IM_GROUP_TYPES = { 'Only members can see the group automatically. Other people can search members in the group.' => 'normal', # default
|
10
|
+
'All people in the account can see the group and members automatically' => 'shared',
|
11
|
+
'Nobody can see the group or search members except the members in the group' => 'restricted'
|
12
|
+
}.freeze
|
13
|
+
|
14
|
+
RECURRENCE_TYPES = { 'Daily' => 1,
|
15
|
+
'Weekly' => 2,
|
16
|
+
'Monthly' => 3
|
17
|
+
}.freeze # no default
|
18
|
+
|
19
|
+
RECURRENCE_WEEKLY_DAYS = { 'Sunday' => 1,
|
20
|
+
'Monday' => 2,
|
21
|
+
'Tuesday' => 3,
|
22
|
+
'Wednesday' => 4,
|
23
|
+
'Thursday' => 5,
|
24
|
+
'Friday' => 6,
|
25
|
+
'Saturday' => 7
|
26
|
+
}.freeze # no default
|
27
|
+
|
28
|
+
RECURRENCE_MONTHLY_WEEKS = { 'Last week' => -1,
|
29
|
+
'First week' => 1,
|
30
|
+
'Second week' => 2,
|
31
|
+
'Third week' => 3,
|
32
|
+
'Fourth week' => 4
|
33
|
+
}.freeze # no default
|
34
|
+
|
35
|
+
MEETING_TYPES = { 'Instant Meeting' => 1,
|
36
|
+
'Scheduled Meeting' => 2, # default
|
37
|
+
'Recurring Meeting with no fixed time' => 3,
|
38
|
+
'Recurring Meeting with fixed time' => 8
|
39
|
+
}.freeze
|
40
|
+
|
41
|
+
MEETING_APPROVAL_TYPES = { 'Automatically Approve' => 0,
|
42
|
+
'Manually Approve' => 1,
|
43
|
+
'No Registration Required' => 2 # default
|
44
|
+
}.freeze
|
45
|
+
|
46
|
+
MEETING_REGISTRATION_TYPES = { 'Attendees register once and can attend any of the occurrences' => 1, # default
|
47
|
+
'Attendees need to register for each occurrence to attend' => 2,
|
48
|
+
'Attendees register once and can choose one or more occurrences to attend' => 3
|
49
|
+
}.freeze
|
50
|
+
|
51
|
+
MEETING_AUDIO_TYPE = { 'Both Telephony and VoIP' => 'both', # default
|
52
|
+
'Telephony only' => 'telephony',
|
53
|
+
'VoIP only' => 'voip'
|
54
|
+
}.freeze
|
55
|
+
|
56
|
+
MEETING_AUTO_RECORDING = { 'Record to local device' => 'local',
|
57
|
+
'Record to cloud' => 'cloud',
|
58
|
+
'No Recording' => 'none' # default
|
59
|
+
}.freeze
|
60
|
+
|
61
|
+
REGISTRANT_STATUS_ACTIONS = { 'Approve registrant' => 'approve',
|
62
|
+
'Cancel registrant' => 'cancel',
|
63
|
+
'Deny registrant' => 'deny'
|
64
|
+
}.freeze # no default
|
65
|
+
|
66
|
+
WEBINAR_TYPES = { 'Webinar' => 5, # default
|
67
|
+
'Recurring Webinar with no fixed time' => 6,
|
68
|
+
'Recurring Webinar with fixed time' => 9
|
69
|
+
}.freeze
|
70
|
+
|
71
|
+
WEBINAR_APPROVAL_TYPES = { 'Automatically Approve' => 0,
|
72
|
+
'Manually Approve' => 1,
|
73
|
+
'No Registration Required' => 2 # default
|
74
|
+
}.freeze
|
75
|
+
|
76
|
+
WEBINAR_REGISTRATION_TYPES = { 'Attendees register once and can attend any of the occurrences' => 1, # default
|
77
|
+
'Attendees need to register for each occurrence to attend' => 2,
|
78
|
+
'Attendees register once and can choose one or more occurrences to attend' => 3
|
79
|
+
}.freeze
|
80
|
+
|
81
|
+
WEBINAR_AUDIO_TYPE = { 'Both Telephony and VoIP' => 'both', # default
|
82
|
+
'Telephony only' => 'telephony',
|
83
|
+
'VoIP only' => 'voip'
|
84
|
+
}.freeze
|
85
|
+
|
86
|
+
WEBINAR_AUTO_RECORDING = { 'Record to local device' => 'local',
|
87
|
+
'Record to cloud' => 'cloud',
|
88
|
+
'No Recording' => 'none' # default
|
89
|
+
}.freeze
|
90
|
+
|
91
|
+
USER_TYPES = { 'basic' => 1,
|
92
|
+
'pro' => 2,
|
93
|
+
'corp' => 3
|
94
|
+
}.freeze # no default
|
95
|
+
end
|
96
|
+
end
|
data/lib/zoom/error.rb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zoom
|
4
|
+
class Error < StandardError; end
|
5
|
+
class GatewayTimeout < StandardError; end
|
6
|
+
class NotImplemented < StandardError; end
|
7
|
+
class ParameterMissing < StandardError; end
|
8
|
+
class ParameterNotPermitted < StandardError; end
|
9
|
+
end
|
data/lib/zoom/params.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'pry'
|
3
|
+
module Zoom
|
4
|
+
class Params < SimpleDelegator
|
5
|
+
# delegate :keys, :key?, :has_key?, :values, :has_value?, :value?, :empty?,
|
6
|
+
# :include?, :as_json, :to_s, :each_key, to: :@parameters
|
7
|
+
|
8
|
+
def initialize(parameters = {})
|
9
|
+
@parameters = parameters
|
10
|
+
super
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
def require(*keys)
|
15
|
+
missing_keys = find_missing_keys(keys.flatten)
|
16
|
+
return self.class.new(except(keys)) if missing_keys.empty?
|
17
|
+
raise Zoom::ParameterMissing, missing_keys.to_s
|
18
|
+
end
|
19
|
+
|
20
|
+
def permit(*filters)
|
21
|
+
permitted_keys = filters.flatten.each_with_object([]) do |filter, array|
|
22
|
+
case filter
|
23
|
+
when Symbol, String
|
24
|
+
array << filter
|
25
|
+
when Hash
|
26
|
+
array << hash_filter(filter)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
non_permitted_params = @parameters.keys - permitted_keys.flatten
|
30
|
+
raise Zoom::ParameterNotPermitted, non_permitted_params.to_s unless non_permitted_params.empty?
|
31
|
+
end
|
32
|
+
|
33
|
+
def except(*keys)
|
34
|
+
dup.except!(keys.flatten)
|
35
|
+
end
|
36
|
+
|
37
|
+
def except!(keys)
|
38
|
+
keys.each { |key| delete(key) }
|
39
|
+
self
|
40
|
+
end
|
41
|
+
|
42
|
+
EMPTY_ARRAY = [].freeze
|
43
|
+
EMPTY_HASH = {}.freeze
|
44
|
+
|
45
|
+
def hash_filter(filter)
|
46
|
+
# Slicing filters out non-declared keys.
|
47
|
+
slice(*filter.keys).each do |key, value|
|
48
|
+
next unless value
|
49
|
+
next unless key? key
|
50
|
+
next if filter[key] == EMPTY_ARRAY
|
51
|
+
next if filter[key] == EMPTY_HASH
|
52
|
+
# Declaration { user: :name } or { user: [:name, :age, { address: ... }] }.
|
53
|
+
self.class.new(value).permit(filter[key])
|
54
|
+
end
|
55
|
+
filter.keys
|
56
|
+
end
|
57
|
+
|
58
|
+
def find_missing_keys(keys)
|
59
|
+
keys.each_with_object([]) do |k, array|
|
60
|
+
array << k if self[k].nil?
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/lib/zoom/utils.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zoom
|
4
|
+
class Utils
|
5
|
+
class << self
|
6
|
+
def argument_error(name)
|
7
|
+
name ? ArgumentError.new("You must provide #{name}") : ArgumentError.new
|
8
|
+
end
|
9
|
+
|
10
|
+
def exclude_argument_error(name)
|
11
|
+
name ? ArgumentError.new("Unrecognized parameter #{name}") : ArgumentError.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def raise_if_error!(response)
|
15
|
+
if response['code'] == 300
|
16
|
+
error_hash = { base: response['message']}
|
17
|
+
raise Error, error_hash unless response['errors']
|
18
|
+
error_hash[response['message']] = response['errors']
|
19
|
+
raise Error, error_hash
|
20
|
+
else
|
21
|
+
response
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def parse_response(http_response)
|
26
|
+
response = http_response.parsed_response
|
27
|
+
response.nil? ? http_response.code : JSON.parse(response)
|
28
|
+
end
|
29
|
+
|
30
|
+
def require_params(params, options)
|
31
|
+
params = [params] unless params.is_a? Array
|
32
|
+
params.each do |param|
|
33
|
+
raise argument_error(param.to_s) unless options[param]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def permit_params(params, options)
|
38
|
+
params = [params] unless params.is_a? Array
|
39
|
+
options.keys.each do |key|
|
40
|
+
raise exclude_argument_error(key.to_s) unless params.include?(key)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Dynamically defines bang methods for Actions modules
|
45
|
+
def define_bang_methods(klass)
|
46
|
+
klass.instance_methods.each do |m|
|
47
|
+
klass.send(:define_method, "#{m}!") do |*args|
|
48
|
+
response = send(m, *args)
|
49
|
+
Utils.raise_if_error!(response)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def extract_options!(array)
|
55
|
+
array.last.is_a?(::Hash) ? array.pop : {}
|
56
|
+
end
|
57
|
+
|
58
|
+
def validate_password(password)
|
59
|
+
password_regex = /\A[a-zA-Z0-9@-_*]{0,10}\z/
|
60
|
+
raise(Error , 'Invalid Password') unless password[password_regex].nil?
|
61
|
+
end
|
62
|
+
|
63
|
+
def process_datetime_params!(params, options)
|
64
|
+
params = [params] unless params.is_a? Array
|
65
|
+
params.each do |param|
|
66
|
+
if options[param] && options[param].kind_of?(Time)
|
67
|
+
options[param] = options[param].strftime('%FT%TZ')
|
68
|
+
end
|
69
|
+
end
|
70
|
+
options
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
{
|
2
|
+
"session_id": "123456",
|
3
|
+
"group_name": "zoom",
|
4
|
+
"from": "2018-08-28",
|
5
|
+
"to": "2018-08-29",
|
6
|
+
"page_size": 30,
|
7
|
+
"page_count": 1,
|
8
|
+
"next_page_token": "",
|
9
|
+
"chat_messages": [
|
10
|
+
{
|
11
|
+
"message": "test1",
|
12
|
+
"sender": "",
|
13
|
+
"date_time": "2016-01-18T06:40:56Z"
|
14
|
+
}
|
15
|
+
]
|
16
|
+
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
{
|
2
|
+
"from": "2018-08-28",
|
3
|
+
"to": "2018-08-29",
|
4
|
+
"page_size": 30,
|
5
|
+
"page_count": 1,
|
6
|
+
"next_page_token": "",
|
7
|
+
"chat_list": [
|
8
|
+
{
|
9
|
+
"session_id": "555",
|
10
|
+
"type": "Group",
|
11
|
+
"participants": "",
|
12
|
+
"group_name": "zoom test1",
|
13
|
+
"last_message_send_time": "2016-01-18T06:40:56Z"
|
14
|
+
}
|
15
|
+
]
|
16
|
+
}
|
@@ -0,0 +1,51 @@
|
|
1
|
+
{
|
2
|
+
"page_count": 1,
|
3
|
+
"page_number": 1,
|
4
|
+
"page_size": 15,
|
5
|
+
"total_records": 1,
|
6
|
+
"meetings": [{
|
7
|
+
"uuid": "j0N0YDBYSQGB4fRv444444==",
|
8
|
+
"meeting_number": 7565121024,
|
9
|
+
"host_id": "kEFomHcIRgqxZT8D086O6A",
|
10
|
+
"account_id": "NyEqCEoYSNOr4jLMHoO2tA",
|
11
|
+
"topic": "Rcoky test recording delete",
|
12
|
+
"start_time": "2014-11-06T04:10:10Z",
|
13
|
+
"timezone": "America/Los_Angeles",
|
14
|
+
"duration": 999,
|
15
|
+
"total_size": 4324324324,
|
16
|
+
"recording_count": 4,
|
17
|
+
"recording_files": [{
|
18
|
+
"id": "00401415-6783-0B14-608A-34C1DD9E3041",
|
19
|
+
"meeting_id": "j0N0YDBYSQGB4fRv444444==",
|
20
|
+
"recording_start": "2014-11-06T04:14:10Z",
|
21
|
+
"recording_end": "2014-11-06T04:24:10Z",
|
22
|
+
"file_type": "M4A",
|
23
|
+
"file_size": 432432,
|
24
|
+
"play_url": "https://brand.zoom.us/recording/play/00401415-6783-0B14-608A-34C1DD9E3041"
|
25
|
+
}, {
|
26
|
+
"id": "00401415-6783-0B14-608A-34C1DD9E3042",
|
27
|
+
"meeting_id": "j0N0YDBYSQGB4fRv444444==",
|
28
|
+
"recording_start": "2014-11-06T04:25:10Z",
|
29
|
+
"recording_end": "2014-11-06T04:26:10Z",
|
30
|
+
"file_type": "MP4",
|
31
|
+
"file_size": 432532465,
|
32
|
+
"play_url": "https://brand.zoom.us/recording/play/00401415-6783-0B14-608A-34C1DD9E3042"
|
33
|
+
}, {
|
34
|
+
"id": "00401415-6783-0B14-608A-34C1DD9E3043",
|
35
|
+
"meeting_id": "j0N0YDBYSQGB4fRv444444==",
|
36
|
+
"recording_start": "2014-11-06T04:36:10Z",
|
37
|
+
"recording_end": "2014-11-06T04:56:10Z",
|
38
|
+
"file_type": "M4A",
|
39
|
+
"file_size": 564,
|
40
|
+
"file_path": "/home/cmr-ssh/replay/2015/03/27/454289936/EDB9994C-8E0D-4688-B1CE-6460F2742A10/GMT20150327-083026_test-pmem-recording.mp4"
|
41
|
+
}, {
|
42
|
+
"id": "00401415-6783-0B14-608A-34C1DD9E3044",
|
43
|
+
"meeting_id": "j0N0YDBYSQGB4fRv444444==",
|
44
|
+
"recording_start": "2014-11-06T04:56:10Z",
|
45
|
+
"recording_end": "2014-11-06T04:56:12Z",
|
46
|
+
"file_type": "MP4",
|
47
|
+
"file_size": 643534,
|
48
|
+
"file_path": "/home/cmr-ssh/replay/2015/03/27/454289936/EDB9994C-8E0D-4688-B1CE-6460F2742A10/GMT20150327-083026_test-pmem-recording.mp4"
|
49
|
+
}]
|
50
|
+
}]
|
51
|
+
}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
{
|
2
|
+
"uuid": "unique_id",
|
3
|
+
"id": "123456789",
|
4
|
+
"start_url": "https://zoom.us/s/123456789?zak=xxxxxx",
|
5
|
+
"join_url": "https://zoom.us/j/123456789",
|
6
|
+
"created_at": "2012-11-25T12:00:00Z",
|
7
|
+
"host_id": "ufR93M2pRyy8ePFN92dttq",
|
8
|
+
"topic": "Foo",
|
9
|
+
"type": 2,
|
10
|
+
"option_jbh": false,
|
11
|
+
"option_start_type": "video",
|
12
|
+
"start_time": "2012-11-25T12:00:00Z",
|
13
|
+
"duration": 30,
|
14
|
+
"timezone": "America/Los_Angeles",
|
15
|
+
"password": "123",
|
16
|
+
"h323_password": "123456",
|
17
|
+
"option_host_video": false,
|
18
|
+
"option_participants_video": false,
|
19
|
+
"option_audio": "both",
|
20
|
+
"option_enforce_login": false,
|
21
|
+
"option_enforce_login_domains ": "",
|
22
|
+
"option_alternative_hosts": "",
|
23
|
+
"status": 0
|
24
|
+
}
|
@@ -0,0 +1,34 @@
|
|
1
|
+
{
|
2
|
+
"uuid": "unique_id",
|
3
|
+
"id": "123456789",
|
4
|
+
"host_id": "dh23hdu23gd",
|
5
|
+
"topic": "Zoom Meeting",
|
6
|
+
"password": "",
|
7
|
+
"h323_password": "",
|
8
|
+
"status": 0,
|
9
|
+
"option_jbh": false,
|
10
|
+
"option_start_type": "video",
|
11
|
+
"option_host_video": true,
|
12
|
+
"option_participants_video": true,
|
13
|
+
"option_cn_meeting": false,
|
14
|
+
"option_enforce_login": false,
|
15
|
+
"option_enforce_login_domains": "",
|
16
|
+
"option_in_meeting": false,
|
17
|
+
"option_audio": "both",
|
18
|
+
"option_alternative_hosts": "",
|
19
|
+
"option_use_pmi": false,
|
20
|
+
"type": 8,
|
21
|
+
"start_time": "2012-11-25T12:00:00Z",
|
22
|
+
"duration": 0,
|
23
|
+
"timezone": "Asia/Hong_Kong",
|
24
|
+
"start_url": "https://zoom.us/s/123456789?zpk=hs65q23kd9sqliy612h23k",
|
25
|
+
"join_url": "https://zoom.us/j/123456789",
|
26
|
+
"created_at": "2016-12-20T02:51:42Z",
|
27
|
+
"occurrences": [
|
28
|
+
{
|
29
|
+
"occurrence_id": "1483210260000",
|
30
|
+
"start_time": "2017-01-01T02:51:00Z",
|
31
|
+
"duration": 60
|
32
|
+
}
|
33
|
+
]
|
34
|
+
}
|