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,215 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Zm
|
|
4
|
+
module Client
|
|
5
|
+
# class for account folder
|
|
6
|
+
class Folder < Base::AccountObject
|
|
7
|
+
|
|
8
|
+
INSTANCE_VARIABLE_KEYS = %i[type id uuid name absFolderPath l url luuid f
|
|
9
|
+
view rev ms webOfflineSyncDays activesyncdisabled n s i4ms i4next zid rid
|
|
10
|
+
ruuid owner reminder acl itemCount broken deletable color rgb fb]
|
|
11
|
+
|
|
12
|
+
attr_accessor *INSTANCE_VARIABLE_KEYS
|
|
13
|
+
attr_accessor :folders, :grants, :retention_policies
|
|
14
|
+
|
|
15
|
+
def concat
|
|
16
|
+
INSTANCE_VARIABLE_KEYS.map { |key| instance_variable_get(arrow_name(key)) }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
alias nb_messages n
|
|
20
|
+
alias nb_items n
|
|
21
|
+
alias parent_id l
|
|
22
|
+
alias size s
|
|
23
|
+
|
|
24
|
+
def initialize(parent, json = nil, key = :folder)
|
|
25
|
+
@parent = parent
|
|
26
|
+
@type = key
|
|
27
|
+
@folders = []
|
|
28
|
+
@grants = []
|
|
29
|
+
@retention_policies = []
|
|
30
|
+
init_from_json(json) if json.is_a?(Hash)
|
|
31
|
+
yield(self) if block_given?
|
|
32
|
+
extend(DocumentFolder) if view == 'document'
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def is_immutable?
|
|
36
|
+
@is_immutable ||= Zm::Client::FolderDefault::IDS.include?(@id.to_i)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def to_query
|
|
40
|
+
"inid:#{id}"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def to_h
|
|
44
|
+
{
|
|
45
|
+
f: f,
|
|
46
|
+
name: name,
|
|
47
|
+
l: l,
|
|
48
|
+
color: color,
|
|
49
|
+
rgb: rgb,
|
|
50
|
+
url: url,
|
|
51
|
+
fb: fb,
|
|
52
|
+
view: view
|
|
53
|
+
}
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def create!
|
|
57
|
+
options = to_h
|
|
58
|
+
options.delete_if { |_, v| v.nil? }
|
|
59
|
+
rep = @parent.sacc.create_folder(@parent.token, options)
|
|
60
|
+
# rep = @parent.sacc.create_folder(@parent.token, @l, @name, @view, @color)
|
|
61
|
+
init_from_json(rep[:Body][:CreateFolderResponse][:folder].first)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def modify!
|
|
65
|
+
options = to_h
|
|
66
|
+
options.delete_if { |_, v| v.nil? }
|
|
67
|
+
|
|
68
|
+
if is_immutable?
|
|
69
|
+
options.delete(:name)
|
|
70
|
+
options.delete(:l)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
update!(options)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def update!(options)
|
|
77
|
+
@parent.sacc.folder_action(@parent.token, 'update', @id, options)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def rename!(new_name)
|
|
81
|
+
@parent.sacc.folder_action(@parent.token, 'rename', @id, name: new_name)
|
|
82
|
+
@name = new_name
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def add_retention_policy!(retention_policies)
|
|
86
|
+
options = retention_policies.is_a?(Hash) ? retention_policies : retention_policies.map(&:to_h).reduce({}, :merge)
|
|
87
|
+
@parent.sacc.folder_action(@parent.token, 'retentionPolicy', @id, retentionPolicy: options)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def move!(folder_id)
|
|
91
|
+
@parent.sacc.folder_action(@parent.token, 'move', @id, l: folder_id)
|
|
92
|
+
@l = folder_id
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def color!(new_color)
|
|
96
|
+
key = new_color.to_i.zero? ? :rgb : :color
|
|
97
|
+
options = {}
|
|
98
|
+
options[key] = new_color
|
|
99
|
+
@parent.sacc.folder_action(@parent.token, 'color', @id, options)
|
|
100
|
+
instance_variable_set("@#{key}", new_color)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def reload!
|
|
104
|
+
rep = @parent.sacc.get_folder(@parent.token, @id)
|
|
105
|
+
init_from_json(rep[:Body][:GetFolderResponse][:folder].first)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def empty?
|
|
109
|
+
@n.zero?
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def empty!
|
|
113
|
+
@parent.sacc.folder_action(
|
|
114
|
+
@parent.token,
|
|
115
|
+
:empty,
|
|
116
|
+
@id,
|
|
117
|
+
recursive: false
|
|
118
|
+
)
|
|
119
|
+
end
|
|
120
|
+
alias clear empty!
|
|
121
|
+
|
|
122
|
+
def delete!
|
|
123
|
+
@parent.sacc.folder_action(@parent.token, :delete, @id)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
#
|
|
127
|
+
# folder_grant: Zm::Client::FolderGrant
|
|
128
|
+
#
|
|
129
|
+
def grant!(folder_grant)
|
|
130
|
+
@parent.sacc.folder_action(
|
|
131
|
+
@parent.token,
|
|
132
|
+
'grant',
|
|
133
|
+
@id,
|
|
134
|
+
grant: folder_grant.to_h
|
|
135
|
+
)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# def grant!(parent, right)
|
|
139
|
+
# @parent.sacc.folder_action(
|
|
140
|
+
# @parent.token,
|
|
141
|
+
# 'grant',
|
|
142
|
+
# @id,
|
|
143
|
+
# grant: {
|
|
144
|
+
# zid: parent.id,
|
|
145
|
+
# gt: parent.grantee_type,
|
|
146
|
+
# perm: right
|
|
147
|
+
# }
|
|
148
|
+
# )
|
|
149
|
+
# end
|
|
150
|
+
|
|
151
|
+
def remove_grant!(zid)
|
|
152
|
+
@parent.sacc.folder_action(
|
|
153
|
+
@parent.token,
|
|
154
|
+
'!grant',
|
|
155
|
+
@id,
|
|
156
|
+
zid: zid
|
|
157
|
+
)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def retention_policies_h
|
|
161
|
+
@retention_policies.map(&:to_h).reduce({}, :merge)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def upload(file_path, fmt = nil, types = nil, resolve = 'replace')
|
|
165
|
+
fmt ||= File.extname(file_path)[1..-1]
|
|
166
|
+
# @parent.uploader.send_file(absFolderPath, fmt, types, resolve, file_path)
|
|
167
|
+
uploader = Upload.new(@parent, RestAccountConnector.new)
|
|
168
|
+
uploader.send_file(absFolderPath, fmt, types, resolve, file_path)
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def import(file_path)
|
|
172
|
+
uploader = Upload.new(@parent, RestAccountConnector.new)
|
|
173
|
+
uploader.send_file(absFolderPath, 'tgz', nil, 'skip', file_path)
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def download(dest_file_path, fmt = 'tgz')
|
|
177
|
+
uploader = Upload.new(@parent, RestAccountConnector.new)
|
|
178
|
+
# uploader.download_file(absFolderPath, fmt, [view], nil, dest_file_path)
|
|
179
|
+
uploader.download_folder(@id, fmt, dest_file_path)
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
def export(dest_file_path)
|
|
183
|
+
h = {
|
|
184
|
+
fmt: 'tgz',
|
|
185
|
+
emptyname: 'Vide',
|
|
186
|
+
charset: 'UTF-8',
|
|
187
|
+
auth: 'qp',
|
|
188
|
+
zauthtoken: @parent.token,
|
|
189
|
+
query: to_query
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
url_query = absFolderPath + '?' + h.map { |k, v| [k, v].join('=') }.join('&')
|
|
193
|
+
|
|
194
|
+
@parent.uploader.download_file_with_url(url_query, dest_file_path)
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def init_from_json(json)
|
|
198
|
+
INSTANCE_VARIABLE_KEYS.each do |key|
|
|
199
|
+
var_name = "@#{key}"
|
|
200
|
+
instance_variable_set(var_name, json[key])
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
if !json[:acl].nil? && json[:acl][:grant].is_a?(Array)
|
|
204
|
+
@grants = json[:acl][:grant].map { |grant| FolderGrant.create_by_json(self, grant) }
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
if json[:retentionPolicy].is_a?(Array)
|
|
208
|
+
@retention_policies = json[:retentionPolicy].first.map do |k, v|
|
|
209
|
+
FolderRetentionPolicy.create_by_json(self, k, v.first)
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Zm
|
|
4
|
+
module Client
|
|
5
|
+
# class for account folder
|
|
6
|
+
class FolderGrant < Base::AccountObject
|
|
7
|
+
attr_accessor :zid, :gt, :perm, :d
|
|
8
|
+
|
|
9
|
+
class << self
|
|
10
|
+
def create_by_json(parent, json)
|
|
11
|
+
fg = self.new(parent)
|
|
12
|
+
fg.init_from_json(json)
|
|
13
|
+
fg
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def concat
|
|
18
|
+
[zid, gt, perm, d]
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def is_account?
|
|
22
|
+
gt == 'usr'
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def is_dom?
|
|
26
|
+
gt == 'dom'
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def is_dl?
|
|
30
|
+
gt == 'grp'
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def is_public?
|
|
34
|
+
gt == 'pub'
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def is_external?
|
|
38
|
+
gt == 'guest'
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def init_from_json(json)
|
|
42
|
+
@zid = json[:zid]
|
|
43
|
+
@gt = json[:gt]
|
|
44
|
+
@perm = json[:perm]
|
|
45
|
+
@d = json[:d]
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def to_h
|
|
49
|
+
{
|
|
50
|
+
zid: @zid,
|
|
51
|
+
gt: @gt,
|
|
52
|
+
perm: @perm,
|
|
53
|
+
d: @d
|
|
54
|
+
}
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Zm
|
|
4
|
+
module Client
|
|
5
|
+
# class for account folder retention policy
|
|
6
|
+
class FolderRetentionPolicy < Base::AccountObject
|
|
7
|
+
|
|
8
|
+
class << self
|
|
9
|
+
def create_by_json(parent, policy, json)
|
|
10
|
+
frp = self.new(parent)
|
|
11
|
+
frp.init_from_json(policy, json)
|
|
12
|
+
frp
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
attr_accessor :type, :policy, :lifetime
|
|
17
|
+
|
|
18
|
+
def keep?
|
|
19
|
+
@policy == :keep
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def purge?
|
|
23
|
+
@policy == :purge
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def init_from_json(policy, json)
|
|
27
|
+
return if json.empty? || json[:policy].nil?
|
|
28
|
+
|
|
29
|
+
@policy = policy
|
|
30
|
+
@type = json[:policy].first[:type]
|
|
31
|
+
@lifetime = json[:policy].first[:lifetime]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def to_h
|
|
35
|
+
# :purge=>[{:policy=>[{:lifetime=>"366d", :type=>"user"}]}]
|
|
36
|
+
{
|
|
37
|
+
@policy => {
|
|
38
|
+
policy: {
|
|
39
|
+
lifetime: @lifetime,
|
|
40
|
+
type: @type
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Zm
|
|
4
|
+
module Client
|
|
5
|
+
# class factory [folders]
|
|
6
|
+
class FoldersBuilder < Base::ObjectsBuilder
|
|
7
|
+
def initialize(account, json)
|
|
8
|
+
@account = account
|
|
9
|
+
@json = json
|
|
10
|
+
@key = :folder
|
|
11
|
+
@root_folder = nil
|
|
12
|
+
@list = []
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def ids
|
|
16
|
+
root = @json[:Body][:GetFolderResponse][@key]
|
|
17
|
+
construct_tree_ids(root.first[@key])
|
|
18
|
+
@list
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def construct_tree_ids(json_folders)
|
|
22
|
+
json_folders.each do |json_folder|
|
|
23
|
+
@list << json_folder[:id]
|
|
24
|
+
construct_tree_ids(json_folder[@key]) if !json_folder[@key].nil? && json_folder[@key].any?
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def make
|
|
29
|
+
root = @json[:Body][:GetFolderResponse][@key]
|
|
30
|
+
|
|
31
|
+
@root_folder = Folder.new(@account, root.first)
|
|
32
|
+
|
|
33
|
+
if !root.first[@key].nil? && root.first[@key].any?
|
|
34
|
+
construct_tree(@root_folder, root.first[@key])
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
@root_folder
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def construct_tree(parent_folder, json_folders)
|
|
41
|
+
json_folders.each do |json_folder|
|
|
42
|
+
folder = Folder.new(@account, json_folder)
|
|
43
|
+
parent_folder.folders << folder
|
|
44
|
+
|
|
45
|
+
construct_tree(folder, json_folder[@key]) if !json_folder[@key].nil? && json_folder[@key].any?
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def flatten(folder = @root_folder, collector = [])
|
|
50
|
+
collector.push(folder)
|
|
51
|
+
folder.folders.each do |child|
|
|
52
|
+
flatten(child, collector)
|
|
53
|
+
end
|
|
54
|
+
collector
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Zm
|
|
4
|
+
module Client
|
|
5
|
+
# collection of folders
|
|
6
|
+
class FoldersCollection < Base::ObjectsCollection
|
|
7
|
+
METHODS_MISSING_LIST = %i[select each map length].to_set.freeze
|
|
8
|
+
|
|
9
|
+
attr_reader :root
|
|
10
|
+
|
|
11
|
+
def initialize(parent)
|
|
12
|
+
@parent = parent
|
|
13
|
+
@root = nil
|
|
14
|
+
reset_query_params
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def new
|
|
18
|
+
folder = Folder.new(@parent)
|
|
19
|
+
yield(folder) if block_given?
|
|
20
|
+
folder
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def where(view: nil, tr: nil)
|
|
24
|
+
@view = view
|
|
25
|
+
@tr = tr
|
|
26
|
+
@all = nil
|
|
27
|
+
self
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def ids
|
|
31
|
+
fb = FoldersBuilder.new @parent, make_query
|
|
32
|
+
fb.ids
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def all
|
|
36
|
+
@all || all!
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def all!
|
|
40
|
+
build_response
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def clear
|
|
44
|
+
@all = nil
|
|
45
|
+
@root = nil
|
|
46
|
+
reset_query_params
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
def build_response
|
|
52
|
+
rep = make_query
|
|
53
|
+
fb = FoldersBuilder.new @parent, rep
|
|
54
|
+
@root = fb.make
|
|
55
|
+
@all = fb.flatten
|
|
56
|
+
@all.select! { |folder| folder.view == @view } unless @view.nil?
|
|
57
|
+
@all
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def make_query
|
|
61
|
+
@parent.sacc.get_all_folders(@parent.token, @view, @tr)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def reset_query_params
|
|
65
|
+
@view = nil
|
|
66
|
+
@tr = nil
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module DocumentFolder
|
|
2
|
+
UUID_REGEX = %r{[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}:[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}}
|
|
3
|
+
|
|
4
|
+
def upload(file_path)
|
|
5
|
+
uploader = Zm::Client::Upload.new(@parent, Zm::Client::RestAccountConnector.new)
|
|
6
|
+
str = uploader.upload_attachment(file_path)
|
|
7
|
+
|
|
8
|
+
uuid = str.scan(UUID_REGEX).first
|
|
9
|
+
|
|
10
|
+
raise Zm::Client::RestError, "failed to extract uuid" if uuid.nil?
|
|
11
|
+
|
|
12
|
+
upload_options = { upload: { id: uuid } }
|
|
13
|
+
rep = @parent.sacc.save_document(@parent.token, id, upload_options)
|
|
14
|
+
|
|
15
|
+
Zm::Client::Document.new(@parent, rep[:Body][:SaveDocumentResponse][:doc].first)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'zm/client/folder/folder'
|
|
4
|
+
require 'zm/client/folder/folder_grant'
|
|
5
|
+
require 'zm/client/folder/folder_retention_policy'
|
|
6
|
+
require 'zm/client/folder/folders_builder'
|
|
7
|
+
require 'zm/client/folder/folders_collection'
|
|
8
|
+
require 'zm/client/folder/mod_document_folder'
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Zm
|
|
4
|
+
module Client
|
|
5
|
+
# class factory [identitys]
|
|
6
|
+
class IdentitiesBuilder < Base::ObjectsBuilder
|
|
7
|
+
def initialize(parent, json)
|
|
8
|
+
@parent = parent
|
|
9
|
+
@json = json
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def make
|
|
13
|
+
root = @json[:Body][:GetIdentitiesResponse][:identity]
|
|
14
|
+
return [] if root.nil?
|
|
15
|
+
|
|
16
|
+
root = [root] unless root.is_a?(Array)
|
|
17
|
+
root.map do |s|
|
|
18
|
+
identity = Identity.new(@parent)
|
|
19
|
+
identity.init_from_json(s)
|
|
20
|
+
identity
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Zm
|
|
4
|
+
module Client
|
|
5
|
+
# collection account identitys
|
|
6
|
+
class IdentitiesCollection < Base::ObjectsCollection
|
|
7
|
+
def initialize(parent)
|
|
8
|
+
@parent = parent
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def new
|
|
12
|
+
identity = Identity.new(@parent)
|
|
13
|
+
yield(identity) if block_given?
|
|
14
|
+
identity
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
def build_response
|
|
20
|
+
rep = @parent.sacc.get_all_identities(@parent.token)
|
|
21
|
+
ib = IdentitiesBuilder.new @parent, rep
|
|
22
|
+
ib.make
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Zm
|
|
4
|
+
module Client
|
|
5
|
+
# class account identity
|
|
6
|
+
class Identity < Base::AccountObject
|
|
7
|
+
|
|
8
|
+
INSTANCE_VARIABLE_KEYS = %i[id name zimbraPrefIdentityName zimbraPrefFromDisplay zimbraPrefFromAddress
|
|
9
|
+
zimbraPrefFromAddressType zimbraPrefReplyToEnabled zimbraPrefReplyToDisplay zimbraPrefReplyToAddress
|
|
10
|
+
zimbraPrefDefaultSignatureId zimbraPrefForwardReplySignatureId zimbraPrefWhenSentToEnabled
|
|
11
|
+
zimbraPrefWhenInFoldersEnabled]
|
|
12
|
+
|
|
13
|
+
ATTRS_WRITE = %i[zimbraPrefIdentityName zimbraPrefFromDisplay zimbraPrefFromAddress
|
|
14
|
+
zimbraPrefFromAddressType zimbraPrefReplyToEnabled zimbraPrefReplyToDisplay zimbraPrefReplyToAddress
|
|
15
|
+
zimbraPrefDefaultSignatureId zimbraPrefForwardReplySignatureId zimbraPrefWhenSentToEnabled
|
|
16
|
+
zimbraPrefWhenInFoldersEnabled]
|
|
17
|
+
|
|
18
|
+
attr_accessor *INSTANCE_VARIABLE_KEYS
|
|
19
|
+
|
|
20
|
+
def concat
|
|
21
|
+
INSTANCE_VARIABLE_KEYS.map { |key| instance_variable_get(arrow_name(key)) }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def init_from_json(json)
|
|
25
|
+
super(json)
|
|
26
|
+
INSTANCE_VARIABLE_KEYS.each do |key|
|
|
27
|
+
value = json[:_attrs][key]
|
|
28
|
+
next if value.nil?
|
|
29
|
+
|
|
30
|
+
instance_variable_set(arrow_name(key), value)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def create!
|
|
35
|
+
rep = @parent.sacc.create_identity(@parent.token, name, instance_variables_array(ATTRS_WRITE))
|
|
36
|
+
init_from_json(rep[:Body][:CreateIdentityResponse][:identity].first)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def update!(hash)
|
|
40
|
+
@parent.sacc.modify_identity(@parent.token, id, hash)
|
|
41
|
+
|
|
42
|
+
hash.each do |k, v|
|
|
43
|
+
arrow_attr_sym = "@#{k}".to_sym
|
|
44
|
+
|
|
45
|
+
if v.respond_to?(:empty?) && v.empty?
|
|
46
|
+
self.remove_instance_variable(arrow_attr_sym) if self.instance_variable_get(arrow_attr_sym)
|
|
47
|
+
else
|
|
48
|
+
self.instance_variable_set(arrow_attr_sym, v)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def modify!
|
|
54
|
+
@parent.sacc.modify_identity(@parent.token, id, instance_variables_array(ATTRS_WRITE))
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def delete!
|
|
58
|
+
@parent.sacc.delete_identity(@parent.token, id)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def rename!(new_name)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def clone
|
|
65
|
+
new_identity = super do |obj|
|
|
66
|
+
[:@zimbraPrefDefaultSignatureId, :@zimbraPrefForwardReplySignatureId].each do |arrow_key|
|
|
67
|
+
obj.remove_instance_variable(arrow_key) if obj.instance_variable_get(arrow_key)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
yield(new_identity) if block_given?
|
|
71
|
+
new_identity
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Zm
|
|
4
|
+
module Client
|
|
5
|
+
# objectClass: zimbraDomain
|
|
6
|
+
class License < Base::AdminObject
|
|
7
|
+
|
|
8
|
+
INSTANCE_VARIABLE_KEYS = %i[
|
|
9
|
+
AccountsLimit ArchivingAccountsLimit AttachmentConversionEnabled AttachmentIndexingAccountsLimit BackupEnabled
|
|
10
|
+
CrossMailboxSearchEnabled EwsAccountsLimit HierarchicalStorageManagementEnabled ISyncAccountsLimit InstallType
|
|
11
|
+
IssuedOn IssuedToEmail IssuedToName LicenseId MAPIConnectorAccountsLimit MobileSyncAccountsLimit
|
|
12
|
+
MobileSyncEnabled ResellerName SMIMEAccountsLimit TouchClientsAccountsLimit TwoFactorAuthAccountsLimit
|
|
13
|
+
ValidFrom ValidUntil VoiceAccountsLimit ZSSAccountsLimit ZTalkAccountsLimit
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
attr_accessor *INSTANCE_VARIABLE_KEYS
|
|
17
|
+
|
|
18
|
+
def init_from_json(json)
|
|
19
|
+
json[:attr].each do |a|
|
|
20
|
+
instance_variable_set(arrow_name(a[:name]), a[:_content])
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def to_s
|
|
25
|
+
INSTANCE_VARIABLE_KEYS.map { |v| [v, instance_variable_get(arrow_name(v))].join(' : ') }.join("\n")
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Zm
|
|
4
|
+
module Client
|
|
5
|
+
# Class Collection [Domain]
|
|
6
|
+
class LicensesCollection
|
|
7
|
+
def initialize(parent)
|
|
8
|
+
@parent = parent
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def find
|
|
12
|
+
req = sac.get_license
|
|
13
|
+
entry = req[:Body][:GetLicenseResponse][:license].first
|
|
14
|
+
license = License.new(@parent)
|
|
15
|
+
license.init_from_json(entry)
|
|
16
|
+
license
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def soap_admin_connector
|
|
22
|
+
@parent.soap_admin_connector
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
alias sac soap_admin_connector
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|