zm-ruby-client 0.10.4
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 +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
|