zm-ruby-client 0.10.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +58 -0
- data/Gemfile +8 -0
- data/LICENSE +674 -0
- data/README.md +47 -0
- data/SECURITY.md +21 -0
- data/lib/zm/client/account/account.rb +335 -0
- data/lib/zm/client/account/account_dls_membership_collection.rb +22 -0
- data/lib/zm/client/account/account_dls_owner_collection.rb +22 -0
- data/lib/zm/client/account/accounts_builder.rb +19 -0
- data/lib/zm/client/account/accounts_collection.rb +48 -0
- data/lib/zm/client/account.rb +7 -0
- data/lib/zm/client/ace/ace.rb +32 -0
- data/lib/zm/client/ace/aces_builder.rb +25 -0
- data/lib/zm/client/ace/aces_collection.rb +36 -0
- data/lib/zm/client/ace.rb +5 -0
- data/lib/zm/client/appointment/appointment.rb +143 -0
- data/lib/zm/client/appointment/appointment_jsns_builder.rb +125 -0
- data/lib/zm/client/appointment/appointment_jsns_initializer.rb +129 -0
- data/lib/zm/client/appointment/appointments_builder.rb +33 -0
- data/lib/zm/client/appointment/appointments_collection.rb +106 -0
- data/lib/zm/client/appointment.rb +7 -0
- data/lib/zm/client/backup/backup.rb +59 -0
- data/lib/zm/client/backup/backups_builder.rb +26 -0
- data/lib/zm/client/backup/backups_collection.rb +22 -0
- data/lib/zm/client/backup.rb +5 -0
- data/lib/zm/client/base/account_object.rb +17 -0
- data/lib/zm/client/base/admin_object.rb +45 -0
- data/lib/zm/client/base/object.rb +80 -0
- data/lib/zm/client/base/objects_builder.rb +31 -0
- data/lib/zm/client/base/objects_collection.rb +135 -0
- data/lib/zm/client/base.rb +7 -0
- data/lib/zm/client/cluster/cluster.rb +117 -0
- data/lib/zm/client/cluster/cluster_config.rb +100 -0
- data/lib/zm/client/cluster.rb +4 -0
- data/lib/zm/client/common/message.rb +10 -0
- data/lib/zm/client/common/recipients.rb +67 -0
- data/lib/zm/client/common.rb +4 -0
- data/lib/zm/client/config.rb +12 -0
- data/lib/zm/client/connector/rest_account.rb +74 -0
- data/lib/zm/client/connector/soap_account.rb +562 -0
- data/lib/zm/client/connector/soap_admin.rb +512 -0
- data/lib/zm/client/connector/soap_base.rb +65 -0
- data/lib/zm/client/connector/soap_error.rb +26 -0
- data/lib/zm/client/connector/soap_xml_builder.rb +68 -0
- data/lib/zm/client/constant.rb +217 -0
- data/lib/zm/client/contact/contact.rb +124 -0
- data/lib/zm/client/contact/contact_member.rb +73 -0
- data/lib/zm/client/contact/contacts_builder.rb +24 -0
- data/lib/zm/client/contact/contacts_collection.rb +26 -0
- data/lib/zm/client/contact/mod_group_contact.rb +74 -0
- data/lib/zm/client/contact.rb +7 -0
- data/lib/zm/client/cos/cos.rb +59 -0
- data/lib/zm/client/cos/coses_builder.rb +29 -0
- data/lib/zm/client/cos/coses_collection.rb +33 -0
- data/lib/zm/client/cos.rb +5 -0
- data/lib/zm/client/data_source.rb +5 -0
- data/lib/zm/client/distributionlist/distributionlist.rb +125 -0
- data/lib/zm/client/distributionlist/distributionlists_builder.rb +29 -0
- data/lib/zm/client/distributionlist/distributionlists_collection.rb +41 -0
- data/lib/zm/client/distributionlist.rb +5 -0
- data/lib/zm/client/document/document.rb +47 -0
- data/lib/zm/client/document/documents_builder.rb +31 -0
- data/lib/zm/client/document/documents_collection.rb +93 -0
- data/lib/zm/client/document.rb +5 -0
- data/lib/zm/client/domain/domain.rb +74 -0
- data/lib/zm/client/domain/domains_builder.rb +32 -0
- data/lib/zm/client/domain/domains_collection.rb +36 -0
- data/lib/zm/client/domain.rb +5 -0
- data/lib/zm/client/folder/folder.rb +215 -0
- data/lib/zm/client/folder/folder_grant.rb +58 -0
- data/lib/zm/client/folder/folder_retention_policy.rb +48 -0
- data/lib/zm/client/folder/folders_builder.rb +58 -0
- data/lib/zm/client/folder/folders_collection.rb +70 -0
- data/lib/zm/client/folder/mod_document_folder.rb +17 -0
- data/lib/zm/client/folder.rb +8 -0
- data/lib/zm/client/identity/identities_builder.rb +25 -0
- data/lib/zm/client/identity/identities_collection.rb +26 -0
- data/lib/zm/client/identity/identity.rb +75 -0
- data/lib/zm/client/identity.rb +5 -0
- data/lib/zm/client/license/license.rb +29 -0
- data/lib/zm/client/license/licenses_collection.rb +28 -0
- data/lib/zm/client/license.rb +4 -0
- data/lib/zm/client/message/message.rb +225 -0
- data/lib/zm/client/message/messages_builder.rb +31 -0
- data/lib/zm/client/message/messages_collection.rb +111 -0
- data/lib/zm/client/message.rb +5 -0
- data/lib/zm/client/mountpoint/mountpoint.rb +95 -0
- data/lib/zm/client/mountpoint/mountpoints_builder.rb +38 -0
- data/lib/zm/client/mountpoint/mountpoints_collection.rb +61 -0
- data/lib/zm/client/mountpoint.rb +5 -0
- data/lib/zm/client/mta_queue/mta_queue.rb +60 -0
- data/lib/zm/client/mta_queue/mta_queues_builder.rb +26 -0
- data/lib/zm/client/mta_queue/mta_queues_collection.rb +95 -0
- data/lib/zm/client/mta_queue.rb +5 -0
- data/lib/zm/client/mta_queue_item/mta_queue_item.rb +51 -0
- data/lib/zm/client/mta_queue_item/mta_queue_items_builder.rb +27 -0
- data/lib/zm/client/mta_queue_item/mta_queue_items_collection.rb +99 -0
- data/lib/zm/client/mta_queue_item.rb +5 -0
- data/lib/zm/client/resource/resource.rb +149 -0
- data/lib/zm/client/resource/resources_builder.rb +29 -0
- data/lib/zm/client/resource/resources_collection.rb +41 -0
- data/lib/zm/client/resource.rb +5 -0
- data/lib/zm/client/search_folder/search_folder.rb +63 -0
- data/lib/zm/client/search_folder/search_folders_builder.rb +26 -0
- data/lib/zm/client/search_folder/search_folders_collection.rb +28 -0
- data/lib/zm/client/search_folder.rb +5 -0
- data/lib/zm/client/server/server.rb +516 -0
- data/lib/zm/client/server/servers_builder.rb +26 -0
- data/lib/zm/client/server/servers_collection.rb +37 -0
- data/lib/zm/client/server.rb +5 -0
- data/lib/zm/client/share/share.rb +60 -0
- data/lib/zm/client/share/shares_builder.rb +23 -0
- data/lib/zm/client/share/shares_collection.rb +48 -0
- data/lib/zm/client/share.rb +5 -0
- data/lib/zm/client/signature/signature.rb +62 -0
- data/lib/zm/client/signature/signature_jsns_builder.rb +29 -0
- data/lib/zm/client/signature/signatures_builder.rb +26 -0
- data/lib/zm/client/signature/signatures_collection.rb +28 -0
- data/lib/zm/client/signature.rb +6 -0
- data/lib/zm/client/tag/tag.rb +45 -0
- data/lib/zm/client/tag/tags_builder.rb +25 -0
- data/lib/zm/client/tag/tags_collection.rb +26 -0
- data/lib/zm/client/tag.rb +5 -0
- data/lib/zm/client/task/task.rb +74 -0
- data/lib/zm/client/task/tasks_builder.rb +31 -0
- data/lib/zm/client/task/tasks_collection.rb +100 -0
- data/lib/zm/client/task.rb +5 -0
- data/lib/zm/client/upload/upload.rb +154 -0
- data/lib/zm/client/upload.rb +3 -0
- data/lib/zm/client/version.rb +18 -0
- data/lib/zm/client.rb +5 -0
- data/lib/zm/modules/common/account_common.rb +71 -0
- data/lib/zm/modules/common/cos_common.rb +463 -0
- data/lib/zm/modules/common/dl_common.rb +33 -0
- data/lib/zm/modules/common/identity_common.rb +19 -0
- data/lib/zm/modules/common/resource_common.rb +59 -0
- data/lib/zm/modules/common/signature_common.rb +16 -0
- data/lib/zm/modules/common/zimbra-attrs.json +1 -0
- data/lib/zm/utils/thread_pool.rb +72 -0
- data/lib/zm-ruby-client.rb +1 -0
- data/test/accounts.rb +62 -0
- data/test/cluster_config.rb +30 -0
- data/test/coses.rb +26 -0
- data/test/domains.rb +62 -0
- data/zm-ruby-client.gemspec +24 -0
- metadata +243 -0
@@ -0,0 +1,95 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zm
|
4
|
+
module Client
|
5
|
+
# Collection MtaQueues
|
6
|
+
class MtaQueuesCollection < Base::ObjectsCollection
|
7
|
+
METHODS_MISSING_LIST = %i[select each map length].to_set.freeze
|
8
|
+
|
9
|
+
def initialize(parent)
|
10
|
+
@parent = parent
|
11
|
+
reset_query_params
|
12
|
+
end
|
13
|
+
|
14
|
+
def all
|
15
|
+
@all ||= all!
|
16
|
+
end
|
17
|
+
|
18
|
+
def all!
|
19
|
+
build_response
|
20
|
+
end
|
21
|
+
|
22
|
+
def defaults
|
23
|
+
@all || defaults!
|
24
|
+
end
|
25
|
+
|
26
|
+
def defaults!
|
27
|
+
# queues = []
|
28
|
+
Zm::Client::MtaQueueName::ALL.each do |queue_name|
|
29
|
+
queue = MtaQueue.new(@parent)
|
30
|
+
queue.name = queue_name
|
31
|
+
set_dynamic_queue_method(queue)
|
32
|
+
@queues_h[queue_name] = queue
|
33
|
+
# queues << queue
|
34
|
+
end
|
35
|
+
# @all = queues
|
36
|
+
@all = @queues_h.values
|
37
|
+
end
|
38
|
+
|
39
|
+
def find(queue_name)
|
40
|
+
raise ZmError, 'Unknown queue name' unless Zm::Client::MtaQueueName::ALL.include?(queue_name)
|
41
|
+
all! if @queues_h.empty?
|
42
|
+
@queues_h[queue_name]
|
43
|
+
end
|
44
|
+
|
45
|
+
def method_missing(method, *args, &block)
|
46
|
+
if METHODS_MISSING_LIST.include?(method)
|
47
|
+
build_response.send(method, *args, &block)
|
48
|
+
else
|
49
|
+
super
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def respond_to_missing?(method, *)
|
54
|
+
METHODS_MISSING_LIST.include?(method) || super
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def make_query
|
60
|
+
sac.get_mail_queue_info(@parent.name)
|
61
|
+
end
|
62
|
+
|
63
|
+
def build_response
|
64
|
+
queues = MtaQueuesBuilder.new(@parent, make_query).make
|
65
|
+
clear_dynamic_methods
|
66
|
+
|
67
|
+
queues.each do |queue|
|
68
|
+
set_dynamic_queue_method(queue)
|
69
|
+
@queues_h[queue.name] = queue
|
70
|
+
end
|
71
|
+
queues
|
72
|
+
end
|
73
|
+
|
74
|
+
def set_dynamic_queue_method(queue)
|
75
|
+
s_name = "@#{queue.name}"
|
76
|
+
instance_variable_set(s_name, queue)
|
77
|
+
self.class.attr_reader queue.name
|
78
|
+
@dynamic_methods << s_name
|
79
|
+
end
|
80
|
+
|
81
|
+
def clear_dynamic_methods
|
82
|
+
return if @dynamic_methods.empty?
|
83
|
+
|
84
|
+
@dynamic_methods.each do |name|
|
85
|
+
remove_instance_variable(name) if instance_variable_get(name)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def reset_query_params
|
90
|
+
@dynamic_methods = []
|
91
|
+
@queues_h = {}
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zm
|
4
|
+
module Client
|
5
|
+
class MtaQueueItem < Base::AdminObject
|
6
|
+
attr_reader :name, :n
|
7
|
+
|
8
|
+
INSTANCE_VARIABLE_KEYS = %i[size fromdomain id reason time to addr filter host from todomain received]
|
9
|
+
attr_reader *INSTANCE_VARIABLE_KEYS
|
10
|
+
|
11
|
+
def mta_queue
|
12
|
+
parent
|
13
|
+
end
|
14
|
+
|
15
|
+
def server
|
16
|
+
mta_queue.parent
|
17
|
+
end
|
18
|
+
|
19
|
+
def to_h
|
20
|
+
hashmap = Hash[INSTANCE_VARIABLE_KEYS.map { |key| [key, instance_variable_get(arrow_name(key))] }]
|
21
|
+
hashmap.delete_if { |_, v| v.nil? }
|
22
|
+
hashmap
|
23
|
+
end
|
24
|
+
|
25
|
+
def sent_at
|
26
|
+
@sent_at ||= Time.at(@time / 1000)
|
27
|
+
rescue StandardError => e
|
28
|
+
nil
|
29
|
+
end
|
30
|
+
|
31
|
+
def hold!
|
32
|
+
sac.mail_queue_action(server.name, mta_queue.name, Zm::Client::MtaQueueAction::HOLD, @id)
|
33
|
+
end
|
34
|
+
|
35
|
+
def init_from_json(json)
|
36
|
+
@size = json[:size]
|
37
|
+
@fromdomain = json[:fromdomain]
|
38
|
+
@id = json[:id]
|
39
|
+
@reason = json[:reason]
|
40
|
+
@time = json[:time].to_i
|
41
|
+
@to = json[:to] ? json[:to].split(',') : []
|
42
|
+
@addr = json[:addr]
|
43
|
+
@filter = json[:filter]
|
44
|
+
@host = json[:host]
|
45
|
+
@from = json[:from]
|
46
|
+
@todomain = json[:todomain] ? json[:todomain].split(',') : []
|
47
|
+
@received = json[:received]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zm
|
4
|
+
module Client
|
5
|
+
# class factory [MtaQueueItem]
|
6
|
+
class MtaQueueItemsBuilder < Base::ObjectsBuilder
|
7
|
+
def make
|
8
|
+
records = []
|
9
|
+
return records if json_items.nil?
|
10
|
+
|
11
|
+
json_items.each do |entry|
|
12
|
+
mta_queue = MtaQueueItem.new(@parent)
|
13
|
+
mta_queue.init_from_json(entry)
|
14
|
+
records << mta_queue
|
15
|
+
end
|
16
|
+
records
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def json_items
|
22
|
+
# puts @json
|
23
|
+
@json_items ||= @json[:Body][json_key][:server].first[:queue].first[:qi]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zm
|
4
|
+
module Client
|
5
|
+
# Collection MtaQueues
|
6
|
+
class MtaQueueItemsCollection < Base::ObjectsCollection
|
7
|
+
METHODS_MISSING_LIST = %i[select each map length].to_set.freeze
|
8
|
+
|
9
|
+
def initialize(parent)
|
10
|
+
@parent = parent
|
11
|
+
reset_query_params
|
12
|
+
end
|
13
|
+
|
14
|
+
def mta_queue
|
15
|
+
parent
|
16
|
+
end
|
17
|
+
|
18
|
+
def server
|
19
|
+
mta_queue.parent
|
20
|
+
end
|
21
|
+
|
22
|
+
def all
|
23
|
+
@all ||= all!
|
24
|
+
end
|
25
|
+
|
26
|
+
def all!
|
27
|
+
build_response
|
28
|
+
end
|
29
|
+
|
30
|
+
def where(fields)
|
31
|
+
@fields = fields
|
32
|
+
self
|
33
|
+
end
|
34
|
+
|
35
|
+
def fromdomain(value)
|
36
|
+
@fields[:fromdomain] = value
|
37
|
+
self
|
38
|
+
end
|
39
|
+
|
40
|
+
def todomain(value)
|
41
|
+
@fields[:todomain] = value
|
42
|
+
self
|
43
|
+
end
|
44
|
+
|
45
|
+
def ids
|
46
|
+
all.map(&:id)
|
47
|
+
end
|
48
|
+
|
49
|
+
def do_action(action_name)
|
50
|
+
sac.mail_queue_action(server.name, mta_queue.name, action_name, ids)
|
51
|
+
end
|
52
|
+
|
53
|
+
def hold!
|
54
|
+
do_action(Zm::Client::MtaQueueAction::HOLD)
|
55
|
+
end
|
56
|
+
|
57
|
+
def release!
|
58
|
+
do_action(Zm::Client::MtaQueueAction::RELEASE)
|
59
|
+
end
|
60
|
+
|
61
|
+
def delete!
|
62
|
+
do_action(Zm::Client::MtaQueueAction::DELETE)
|
63
|
+
end
|
64
|
+
|
65
|
+
def requeue!
|
66
|
+
do_action(Zm::Client::MtaQueueAction::REQUEUE)
|
67
|
+
end
|
68
|
+
|
69
|
+
def method_missing(method, *args, &block)
|
70
|
+
if METHODS_MISSING_LIST.include?(method)
|
71
|
+
build_response.send(method, *args, &block)
|
72
|
+
else
|
73
|
+
super
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def respond_to_missing?(method, *)
|
78
|
+
METHODS_MISSING_LIST.include?(method) || super
|
79
|
+
end
|
80
|
+
|
81
|
+
private
|
82
|
+
|
83
|
+
def make_query
|
84
|
+
json = sac.get_mail_queue(@parent.parent.name, @parent.name, @offset, @limit, @fields)
|
85
|
+
reset_query_params
|
86
|
+
json
|
87
|
+
end
|
88
|
+
|
89
|
+
def build_response
|
90
|
+
MtaQueueItemsBuilder.new(@parent, make_query).make
|
91
|
+
end
|
92
|
+
|
93
|
+
def reset_query_params
|
94
|
+
super
|
95
|
+
@fields = {}
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'zm/modules/common/resource_common'
|
4
|
+
|
5
|
+
module Zm
|
6
|
+
module Client
|
7
|
+
# objectClass: zimbraCalendarResource
|
8
|
+
class Resource < Base::AdminObject
|
9
|
+
# attr_reader :name, :id, :domainkey, :used, :token
|
10
|
+
attr_accessor :home_url
|
11
|
+
|
12
|
+
def initialize(parent)
|
13
|
+
extend(ResourceCommon)
|
14
|
+
super(parent)
|
15
|
+
@grantee_type = 'usr'.freeze
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_h
|
19
|
+
hashmap = Hash[all_instance_variable_keys.map { |key| [key, instance_variable_get(arrow_name(key))] }]
|
20
|
+
hashmap.delete_if { |_, v| v.nil? }
|
21
|
+
hashmap
|
22
|
+
end
|
23
|
+
|
24
|
+
def all_instance_variable_keys
|
25
|
+
ResourceCommon::ALL_ATTRS
|
26
|
+
end
|
27
|
+
|
28
|
+
def rest_account_connector
|
29
|
+
@rest_account_connector ||= RestAccountConnector.new
|
30
|
+
end
|
31
|
+
|
32
|
+
alias rac rest_account_connector
|
33
|
+
|
34
|
+
def logged?
|
35
|
+
!@token.nil?
|
36
|
+
end
|
37
|
+
|
38
|
+
def login
|
39
|
+
if @parent.logged?
|
40
|
+
admin_login
|
41
|
+
else
|
42
|
+
account_login
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def account_login_preauth
|
47
|
+
domain_key
|
48
|
+
raise ZmError, 'domain key is required to login !' if @domainkey.nil?
|
49
|
+
|
50
|
+
@token = sacc.auth_preauth(@name, @domainkey)
|
51
|
+
end
|
52
|
+
|
53
|
+
def account_login_password
|
54
|
+
raise ZmError, 'password is required to login !' if password.nil?
|
55
|
+
|
56
|
+
@token = sacc.auth_password(@name, @password)
|
57
|
+
end
|
58
|
+
|
59
|
+
def admin_login
|
60
|
+
@token = sac.delegate_auth(@name)
|
61
|
+
end
|
62
|
+
|
63
|
+
def domain_name
|
64
|
+
@name.split('@').last
|
65
|
+
end
|
66
|
+
|
67
|
+
def domain_key
|
68
|
+
@domainkey ||= @parent.domain_key(domain_name)
|
69
|
+
end
|
70
|
+
|
71
|
+
def infos
|
72
|
+
@infos ||= read_infos
|
73
|
+
end
|
74
|
+
|
75
|
+
def read_infos
|
76
|
+
@infos = sacc.get_info(@token)[:Body][:GetInfoResponse]
|
77
|
+
@id = @infos[:id]
|
78
|
+
@used = @infos[:used]
|
79
|
+
@public_url = @infos[:publicURL]
|
80
|
+
@zimbraCOSId = @infos[:cos][:id]
|
81
|
+
@home_url = @infos[:rest]
|
82
|
+
end
|
83
|
+
|
84
|
+
def folders
|
85
|
+
@folders ||= FoldersCollection.new(self)
|
86
|
+
end
|
87
|
+
|
88
|
+
def delete!
|
89
|
+
sac.delete_resource(@id)
|
90
|
+
end
|
91
|
+
|
92
|
+
def update!(hash)
|
93
|
+
sac.modify_resource(@id, hash)
|
94
|
+
hash.each { |k, v| send "#{k}=", v }
|
95
|
+
end
|
96
|
+
|
97
|
+
def modify!
|
98
|
+
attrs_to_modify = instance_variables_array(attrs_write)
|
99
|
+
return if attrs_to_modify.empty?
|
100
|
+
|
101
|
+
sac.modify_resource(@id, attrs_to_modify)
|
102
|
+
end
|
103
|
+
|
104
|
+
def create!
|
105
|
+
rep = sac.create_resource(
|
106
|
+
@name,
|
107
|
+
@password,
|
108
|
+
instance_variables_array(attrs_write)
|
109
|
+
)
|
110
|
+
@id = rep[:Body][:CreateCalendarResourceResponse][:calresource].first[:id]
|
111
|
+
end
|
112
|
+
|
113
|
+
def uploader
|
114
|
+
@uploader ||= Upload.new(self)
|
115
|
+
end
|
116
|
+
|
117
|
+
# def download(folder_path, fmt, types, dest_file_path)
|
118
|
+
# url_folder_path = File.join(@home_url, folder_path.to_s)
|
119
|
+
# uri = Addressable::URI.new
|
120
|
+
# uri.query_values = {
|
121
|
+
# fmt: fmt,
|
122
|
+
# types: types.join(','),
|
123
|
+
# emptyname: 'Vide',
|
124
|
+
# charset: 'UTF-8',
|
125
|
+
# auth: 'qp',
|
126
|
+
# zauthtoken: @token
|
127
|
+
# }
|
128
|
+
# url_folder_path << '?' << uri.query
|
129
|
+
#
|
130
|
+
# rac.download(url_folder_path, dest_file_path)
|
131
|
+
# end
|
132
|
+
#
|
133
|
+
# def upload(folder_path, fmt, types, resolve, src_file_path)
|
134
|
+
# url_folder_path = File.join(@home_url, folder_path.to_s)
|
135
|
+
# uri = Addressable::URI.new
|
136
|
+
# uri.query_values = {
|
137
|
+
# fmt: fmt,
|
138
|
+
# types: types.join(','),
|
139
|
+
# resolve: resolve,
|
140
|
+
# auth: 'qp',
|
141
|
+
# zauthtoken: @token
|
142
|
+
# }
|
143
|
+
# url_folder_path << '?' << uri.query
|
144
|
+
#
|
145
|
+
# rac.upload(url_folder_path, src_file_path)
|
146
|
+
# end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zm
|
4
|
+
module Client
|
5
|
+
# class factory [resources]
|
6
|
+
class ResourcesBuilder < Base::ObjectsBuilder
|
7
|
+
def initialize(parent, json)
|
8
|
+
super(parent, json)
|
9
|
+
@child_class = Resource
|
10
|
+
end
|
11
|
+
|
12
|
+
# def make
|
13
|
+
# return [] if json_items.nil?
|
14
|
+
#
|
15
|
+
# json_items.map do |entry|
|
16
|
+
# resource = Resource.new(@parent)
|
17
|
+
# resource.init_from_json(entry)
|
18
|
+
# resource
|
19
|
+
# end
|
20
|
+
# end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def json_items
|
25
|
+
@json_items ||= @json[:Body][json_key][:calresource]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zm
|
4
|
+
module Client
|
5
|
+
# Collection Resources
|
6
|
+
class ResourcesCollection < Base::ObjectsCollection
|
7
|
+
def initialize(parent)
|
8
|
+
@child_class = Resource
|
9
|
+
@parent = parent
|
10
|
+
reset_query_params
|
11
|
+
end
|
12
|
+
|
13
|
+
def ldap
|
14
|
+
@apply_cos = 0
|
15
|
+
self
|
16
|
+
end
|
17
|
+
|
18
|
+
def find_by(hash)
|
19
|
+
rep = sac.get_resource(hash.values.first, hash.keys.first, attrs_comma)
|
20
|
+
entry = rep[:Body][:GetCalendarResourceResponse][:calresource].first
|
21
|
+
|
22
|
+
build_from_entry(entry)
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def build_response
|
28
|
+
ResourcesBuilder.new(@parent, make_query).make
|
29
|
+
end
|
30
|
+
|
31
|
+
def reset_query_params
|
32
|
+
super
|
33
|
+
@search_type = SearchType::RESOURCE
|
34
|
+
@attrs = SearchType::Attributes::RESOURCE.dup
|
35
|
+
@all_servers = 1
|
36
|
+
@refresh = 0
|
37
|
+
@apply_cos = 1
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zm
|
4
|
+
module Client
|
5
|
+
# class account SearchFolder
|
6
|
+
class SearchFolder < Base::AccountObject
|
7
|
+
|
8
|
+
INSTANCE_VARIABLE_KEYS = %i[id uuid deletable name absFolderPath l luuid color rgb rev ms webOfflineSyncDays activesyncdisabled query sortBy types]
|
9
|
+
|
10
|
+
attr_accessor *INSTANCE_VARIABLE_KEYS
|
11
|
+
|
12
|
+
def concat
|
13
|
+
INSTANCE_VARIABLE_KEYS.map { |key| instance_variable_get(arrow_name(key)) }
|
14
|
+
end
|
15
|
+
|
16
|
+
def init_from_json(json)
|
17
|
+
INSTANCE_VARIABLE_KEYS.each do |key|
|
18
|
+
var_name = "@#{key}"
|
19
|
+
instance_variable_set(var_name, json[key])
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def create!
|
24
|
+
rep = @parent.sacc.create_search_folder(@parent.token, name, query, types, l, color, sortBy)
|
25
|
+
init_from_json(rep[:Body][:CreateSearchFolderResponse][:search].first)
|
26
|
+
end
|
27
|
+
|
28
|
+
def modify!
|
29
|
+
@parent.sacc.modify_search_folder(@parent.token, id, query, types)
|
30
|
+
@parent.sacc.folder_action(@parent.token, :update, id, build_update_options)
|
31
|
+
end
|
32
|
+
|
33
|
+
def query!(new_query)
|
34
|
+
@parent.sacc.modify_search_folder(@parent.token, id, new_query, types)
|
35
|
+
instance_variable_set("@query", new_query)
|
36
|
+
end
|
37
|
+
|
38
|
+
def color!(new_color)
|
39
|
+
key = new_color.to_i.zero? ? :rgb : :color
|
40
|
+
options = {}
|
41
|
+
options[key] = new_color
|
42
|
+
@parent.sacc.folder_action(@parent.token, :color, @id, options)
|
43
|
+
instance_variable_set("@#{key}", new_color)
|
44
|
+
end
|
45
|
+
|
46
|
+
def build_update_options
|
47
|
+
{
|
48
|
+
name: @name,
|
49
|
+
color: @color,
|
50
|
+
rgb: @rgb
|
51
|
+
}.delete_if { |_, v| v.nil? }
|
52
|
+
end
|
53
|
+
|
54
|
+
def delete!
|
55
|
+
@parent.sacc.folder_action(@parent.token, :delete, id)
|
56
|
+
end
|
57
|
+
|
58
|
+
def rename!(new_name)
|
59
|
+
# todo
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zm
|
4
|
+
module Client
|
5
|
+
# class factory [folders]
|
6
|
+
class SearchFoldersBuilder < Base::ObjectsBuilder
|
7
|
+
def initialize(parent, json)
|
8
|
+
@parent = parent
|
9
|
+
@json = json
|
10
|
+
end
|
11
|
+
|
12
|
+
def make
|
13
|
+
root = @json[:Body][:GetSearchFolderResponse][:search]
|
14
|
+
return [] if root.nil?
|
15
|
+
|
16
|
+
root = [root] unless root.is_a?(Array)
|
17
|
+
|
18
|
+
root.map do |s|
|
19
|
+
f = SearchFolder.new(@parent)
|
20
|
+
f.init_from_json(s)
|
21
|
+
f
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zm
|
4
|
+
module Client
|
5
|
+
# collection of folders
|
6
|
+
class SearchFoldersCollection < Base::ObjectsCollection
|
7
|
+
METHODS_MISSING_LIST = %i[select each map length].to_set.freeze
|
8
|
+
|
9
|
+
def initialize(parent)
|
10
|
+
@parent = parent
|
11
|
+
end
|
12
|
+
|
13
|
+
def new
|
14
|
+
folder = SearchFolder.new(@parent)
|
15
|
+
yield(folder) if block_given?
|
16
|
+
folder
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def build_response
|
22
|
+
rep = @parent.sacc.get_all_search_folders(@parent.token)
|
23
|
+
fb = SearchFoldersBuilder.new @parent, rep
|
24
|
+
fb.make
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|