zm-ruby-client 0.14.0 → 0.17.1
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 +4 -4
- data/.gitignore +1 -0
- data/Gemfile +1 -0
- data/README.md +6 -0
- data/lib/zm/client/account/account.rb +29 -17
- data/lib/zm/client/account/account_jsns_initializer.rb +44 -0
- data/lib/zm/client/account/accounts_builder.rb +6 -3
- data/lib/zm/client/account/accounts_collection.rb +11 -20
- data/lib/zm/client/account.rb +1 -0
- data/lib/zm/client/ace/ace.rb +22 -9
- data/lib/zm/client/ace/ace_jsns_builder.rb +38 -0
- data/lib/zm/client/ace/ace_jsns_initializer.rb +26 -0
- data/lib/zm/client/ace/aces_builder.rb +6 -9
- data/lib/zm/client/ace/aces_collection.rb +23 -9
- data/lib/zm/client/ace.rb +2 -0
- data/lib/zm/client/appointment/appointment.rb +9 -6
- data/lib/zm/client/appointment/appointments_collection.rb +6 -90
- data/lib/zm/client/backup/backup.rb +8 -4
- data/lib/zm/client/base/account_object.rb +34 -0
- data/lib/zm/client/base/account_objects_collection.rb +14 -0
- data/lib/zm/client/base/account_search_objects_collection.rb +125 -0
- data/lib/zm/client/base/admin_object.rb +6 -0
- data/lib/zm/client/base/admin_objects_collection.rb +65 -0
- data/lib/zm/client/base/base_jsns_builder.rb +19 -0
- data/lib/zm/client/base/base_jsns_initializer.rb +29 -0
- data/lib/zm/client/base/folder_object.rb +41 -0
- data/lib/zm/client/base/ldap_filter.rb +33 -0
- data/lib/zm/client/base/object.rb +19 -0
- data/lib/zm/client/base/objects_builder.rb +4 -0
- data/lib/zm/client/base/objects_collection.rb +11 -32
- data/lib/zm/client/base/zimbra_attribute.rb +119 -0
- data/lib/zm/client/base/zimbra_attributes_collection.rb +38 -0
- data/lib/zm/client/base.rb +15 -0
- data/lib/zm/client/cluster/cluster.rb +43 -7
- data/lib/zm/client/cluster/cluster_config.rb +19 -17
- data/lib/zm/client/connector/rest_account.rb +0 -3
- data/lib/zm/client/connector/soap_account.rb +66 -123
- data/lib/zm/client/connector/soap_admin.rb +28 -16
- data/lib/zm/client/connector/soap_base.rb +11 -3
- data/lib/zm/client/contact/contact.rb +2 -1
- data/lib/zm/client/contact/contacts_builder.rb +3 -13
- data/lib/zm/client/contact/contacts_collection.rb +6 -12
- data/lib/zm/client/cos/cos.rb +9 -5
- data/lib/zm/client/cos/coses_builder.rb +1 -16
- data/lib/zm/client/cos/coses_collection.rb +6 -9
- data/lib/zm/client/distributionlist/distributionlist.rb +44 -6
- data/lib/zm/client/distributionlist/distributionlists_builder.rb +2 -17
- data/lib/zm/client/distributionlist/distributionlists_collection.rb +4 -11
- data/lib/zm/client/distributionlist/dls_membership_collection.rb +24 -0
- data/lib/zm/client/distributionlist.rb +1 -0
- data/lib/zm/client/document/document.rb +7 -9
- data/lib/zm/client/domain/domain.rb +11 -6
- data/lib/zm/client/domain/domain_accounts_collection.rb +13 -0
- data/lib/zm/client/domain/domains_builder.rb +1 -19
- data/lib/zm/client/domain/domains_collection.rb +7 -10
- data/lib/zm/client/domain.rb +1 -0
- data/lib/zm/client/folder/folder.rb +50 -124
- data/lib/zm/client/folder/folder_grant.rb +44 -22
- data/lib/zm/client/folder/folder_grant_jsns_builder.rb +43 -0
- data/lib/zm/client/folder/folder_grants_collection.rb +35 -0
- data/lib/zm/client/folder/folder_jsns_builder.rb +132 -0
- data/lib/zm/client/folder/folder_jsns_initializer.rb +49 -0
- data/lib/zm/client/folder/folder_retention_policies_collection.rb +40 -0
- data/lib/zm/client/folder/folder_retention_policy.rb +8 -30
- data/lib/zm/client/folder/folders_builder.rb +2 -2
- data/lib/zm/client/folder/folders_collection.rb +21 -19
- data/lib/zm/client/folder/folders_jsns_builder.rb +22 -0
- data/lib/zm/client/folder.rb +6 -0
- data/lib/zm/client/identity/identities_builder.rb +4 -15
- data/lib/zm/client/identity/identities_collection.rb +7 -13
- data/lib/zm/client/identity/identity.rb +7 -5
- data/lib/zm/client/message/message.rb +111 -21
- data/lib/zm/client/message/messages_builder.rb +1 -1
- data/lib/zm/client/message/messages_collection.rb +10 -92
- data/lib/zm/client/mountpoint/mountpoint.rb +15 -68
- data/lib/zm/client/mountpoint/mountpoint_jsns_builder.rb +100 -0
- data/lib/zm/client/mountpoint/mountpoint_jsns_initializer.rb +33 -0
- data/lib/zm/client/mountpoint/mountpoints_builder.rb +1 -1
- data/lib/zm/client/mountpoint/mountpoints_collection.rb +14 -23
- data/lib/zm/client/mountpoint.rb +2 -0
- data/lib/zm/client/resource/resource.rb +5 -5
- data/lib/zm/client/resource/resources_builder.rb +1 -16
- data/lib/zm/client/resource/resources_collection.rb +5 -13
- data/lib/zm/client/search_folder/search_folder.rb +19 -39
- data/lib/zm/client/search_folder/search_folder_jsns_builder.rb +86 -0
- data/lib/zm/client/search_folder/search_folder_jsns_initializer.rb +33 -0
- data/lib/zm/client/search_folder/search_folders_builder.rb +7 -11
- data/lib/zm/client/search_folder/search_folders_collection.rb +7 -15
- data/lib/zm/client/search_folder.rb +2 -0
- data/lib/zm/client/server/server.rb +7 -14
- data/lib/zm/client/server/server_accounts_collection.rb +19 -0
- data/lib/zm/client/server/servers_builder.rb +4 -16
- data/lib/zm/client/server/servers_collection.rb +5 -10
- data/lib/zm/client/server.rb +1 -0
- data/lib/zm/client/share/share.rb +2 -9
- data/lib/zm/client/share/shares_builder.rb +3 -12
- data/lib/zm/client/signature/signature.rb +17 -13
- data/lib/zm/client/signature/signature_jsns_builder.rb +5 -1
- data/lib/zm/client/signature/signature_jsns_initializer.rb +25 -0
- data/lib/zm/client/signature/signatures_builder.rb +7 -11
- data/lib/zm/client/signature/signatures_collection.rb +6 -14
- data/lib/zm/client/signature.rb +1 -0
- data/lib/zm/client/tag/tag.rb +27 -20
- data/lib/zm/client/tag/tag_jsns_builder.rb +55 -0
- data/lib/zm/client/tag/tag_jsns_initializer.rb +26 -0
- data/lib/zm/client/tag/tags_builder.rb +6 -9
- data/lib/zm/client/tag/tags_collection.rb +6 -12
- data/lib/zm/client/tag.rb +2 -0
- data/lib/zm/client/task/tasks_collection.rb +6 -90
- data/lib/zm/client/upload/upload.rb +1 -1
- data/lib/zm/client/version.rb +2 -2
- data/lib/zm/modules/common/dl_common.rb +3 -1
- data/lib/zm/modules/common/zimbra-attrs.json.bak +1 -0
- data/lib/zm/modules/zm_logger.rb +24 -0
- data/lib/zm/modules/zm_model.rb +41 -0
- data/test/accounts.rb +15 -1
- data/test/ace.rb +50 -0
- data/test/cluster.rb +41 -0
- data/test/cluster_zimbra_attributes.rb +38 -0
- data/test/folder.rb +125 -0
- data/test/folder_grant.rb +51 -0
- data/test/mountpoint.rb +49 -0
- data/test/retention_policies.rb +40 -0
- data/test/search_folder.rb +67 -0
- data/test/signature.rb +53 -0
- data/test/tag.rb +65 -0
- data/test/zimbra_attributes.rb +35 -0
- data/zm-ruby-client.gemspec +1 -0
- metadata +59 -3
|
@@ -4,31 +4,48 @@ require 'zm/client/connector/soap_admin'
|
|
|
4
4
|
require 'zm/client/connector/soap_account'
|
|
5
5
|
require 'zm/client/common'
|
|
6
6
|
# require 'zm/client/data_source'
|
|
7
|
-
require 'zm/client/domain'
|
|
8
7
|
require 'zm/client/account'
|
|
8
|
+
require 'zm/client/domain'
|
|
9
9
|
require 'zm/client/resource'
|
|
10
10
|
require 'zm/client/distributionlist'
|
|
11
11
|
require 'zm/client/server'
|
|
12
12
|
require 'zm/client/cos'
|
|
13
13
|
require 'zm/client/license'
|
|
14
|
-
# require 'zm/client/distributionlist'
|
|
15
14
|
|
|
16
15
|
module Zm
|
|
17
16
|
module Client
|
|
18
17
|
# class admin connection
|
|
19
18
|
class Cluster
|
|
20
|
-
|
|
19
|
+
|
|
20
|
+
attr_reader :soap_admin_connector, :config, :zimbra_attributes
|
|
21
|
+
|
|
22
|
+
attr_reader :type, :version, :release, :buildDate, :host, :majorversion, :minorversion, :microversion
|
|
21
23
|
|
|
22
24
|
def initialize(config)
|
|
25
|
+
extend(ZmLogger)
|
|
26
|
+
|
|
23
27
|
@config = config
|
|
28
|
+
@version = config.zimbra_version
|
|
29
|
+
|
|
30
|
+
@zimbra_attributes = Base::ZimbraAttributesCollection.new(self)
|
|
31
|
+
@zimbra_attributes.set_methods
|
|
32
|
+
|
|
24
33
|
@soap_admin_connector = SoapAdminConnector.new(
|
|
25
34
|
@config.zimbra_admin_scheme,
|
|
26
35
|
@config.zimbra_admin_host,
|
|
27
36
|
@config.zimbra_admin_port
|
|
28
37
|
)
|
|
38
|
+
@soap_admin_connector.logger = logger
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def has_admin_credentials?
|
|
42
|
+
@config.has_admin_credentials?
|
|
29
43
|
end
|
|
30
44
|
|
|
31
45
|
def login
|
|
46
|
+
raise ClusterConfigError, 'admin credentials are missing' unless @config.has_admin_credentials?
|
|
47
|
+
|
|
48
|
+
logger.info "Get Admin session token"
|
|
32
49
|
@soap_admin_connector.auth(
|
|
33
50
|
@config.zimbra_admin_login,
|
|
34
51
|
@config.zimbra_admin_password
|
|
@@ -42,16 +59,21 @@ module Zm
|
|
|
42
59
|
def alive?
|
|
43
60
|
@soap_admin_connector.noop
|
|
44
61
|
true
|
|
45
|
-
rescue Zm::Client::SoapError =>
|
|
62
|
+
rescue Zm::Client::SoapError => e
|
|
63
|
+
logger.error "Admin session token alive ? #{e.message}"
|
|
46
64
|
false
|
|
47
65
|
end
|
|
48
66
|
|
|
49
67
|
def soap_account_connector
|
|
50
|
-
@soap_account_connector
|
|
68
|
+
return @soap_account_connector unless @soap_account_connector.nil?
|
|
69
|
+
|
|
70
|
+
@soap_account_connector = SoapAccountConnector.new(
|
|
51
71
|
@config.zimbra_public_scheme,
|
|
52
72
|
@config.zimbra_public_host,
|
|
53
73
|
@config.zimbra_public_port
|
|
54
74
|
)
|
|
75
|
+
@soap_account_connector.logger = logger
|
|
76
|
+
@soap_account_connector
|
|
55
77
|
end
|
|
56
78
|
|
|
57
79
|
def token_metadata
|
|
@@ -61,7 +83,7 @@ module Zm
|
|
|
61
83
|
def license
|
|
62
84
|
@license ||= LicensesCollection.new(self).find
|
|
63
85
|
rescue Zm::Client::SoapError => e
|
|
64
|
-
|
|
86
|
+
logger.error "Get License info #{e.message}"
|
|
65
87
|
nil
|
|
66
88
|
end
|
|
67
89
|
|
|
@@ -111,10 +133,24 @@ module Zm
|
|
|
111
133
|
!num.zero?
|
|
112
134
|
end
|
|
113
135
|
|
|
136
|
+
def infos!
|
|
137
|
+
rep = soap_admin_connector.get_version_info
|
|
138
|
+
json = rep[:Body][:GetVersionInfoResponse][:info].first
|
|
139
|
+
|
|
140
|
+
instance_variable_set(:@type, json[:type])
|
|
141
|
+
instance_variable_set(:@version, json[:version])
|
|
142
|
+
instance_variable_set(:@release, json[:release])
|
|
143
|
+
instance_variable_set(:@buildDate, json[:buildDate])
|
|
144
|
+
instance_variable_set(:@host, json[:host])
|
|
145
|
+
instance_variable_set(:@majorversion, json[:majorversion])
|
|
146
|
+
instance_variable_set(:@minorversion, json[:minorversion])
|
|
147
|
+
instance_variable_set(:@microversion, json[:microversion])
|
|
148
|
+
end
|
|
149
|
+
|
|
114
150
|
private
|
|
115
151
|
|
|
116
152
|
def find_domain_key(domain_name)
|
|
117
|
-
domains.find_by(
|
|
153
|
+
domains.attrs('zimbraPreAuthKey').find_by(name: domain_name).zimbraPreAuthKey
|
|
118
154
|
end
|
|
119
155
|
end
|
|
120
156
|
end
|
|
@@ -11,18 +11,16 @@ module Zm
|
|
|
11
11
|
:zimbra_admin_port, :zimbra_admin_login,
|
|
12
12
|
:zimbra_admin_password, :zimbra_public_host,
|
|
13
13
|
:zimbra_public_scheme, :zimbra_public_port,
|
|
14
|
-
:domains
|
|
14
|
+
:domains, :zimbra_version
|
|
15
15
|
|
|
16
16
|
def initialize(parameters = nil)
|
|
17
|
-
@zimbra_admin_scheme = 'https'
|
|
18
|
-
@zimbra_admin_port = 7071
|
|
19
|
-
@zimbra_public_scheme = 'https'
|
|
20
|
-
@zimbra_public_port = 443
|
|
21
17
|
@domains = []
|
|
18
|
+
@zimbra_version = '8.8.15'
|
|
22
19
|
|
|
23
|
-
|
|
20
|
+
case parameters
|
|
21
|
+
when String
|
|
24
22
|
init_from_file(parameters)
|
|
25
|
-
|
|
23
|
+
when Hash
|
|
26
24
|
@to_h = parameters
|
|
27
25
|
end
|
|
28
26
|
|
|
@@ -45,14 +43,15 @@ module Zm
|
|
|
45
43
|
end
|
|
46
44
|
|
|
47
45
|
def init_from_h
|
|
48
|
-
@zimbra_admin_host = @to_h
|
|
49
|
-
@zimbra_admin_scheme = @to_h
|
|
50
|
-
@zimbra_admin_port = @to_h
|
|
51
|
-
@zimbra_admin_login = @to_h
|
|
52
|
-
@zimbra_admin_password = @to_h
|
|
53
|
-
@zimbra_public_host = @to_h
|
|
54
|
-
@zimbra_public_scheme = @to_h
|
|
55
|
-
@zimbra_public_port = @to_h
|
|
46
|
+
@zimbra_admin_host = @to_h.fetch(:zimbra_admin_host, nil)
|
|
47
|
+
@zimbra_admin_scheme = @to_h.fetch(:zimbra_admin_scheme, 'https')
|
|
48
|
+
@zimbra_admin_port = @to_h.fetch(:zimbra_admin_port, 7071)
|
|
49
|
+
@zimbra_admin_login = @to_h.fetch(:zimbra_admin_login, nil)
|
|
50
|
+
@zimbra_admin_password = @to_h.fetch(:zimbra_admin_password, nil)
|
|
51
|
+
@zimbra_public_host = @to_h.fetch(:zimbra_public_host, nil)
|
|
52
|
+
@zimbra_public_scheme = @to_h.fetch(:zimbra_public_scheme, 'https')
|
|
53
|
+
@zimbra_public_port = @to_h.fetch(:zimbra_public_port, 443)
|
|
54
|
+
@zimbra_version = @to_h.fetch(:zimbra_version, '8.8.15')
|
|
56
55
|
end
|
|
57
56
|
|
|
58
57
|
def init_from_yml(file_config_path)
|
|
@@ -81,6 +80,10 @@ module Zm
|
|
|
81
80
|
|
|
82
81
|
domain.key
|
|
83
82
|
end
|
|
83
|
+
|
|
84
|
+
def has_admin_credentials?
|
|
85
|
+
!@zimbra_admin_host.nil? && !@zimbra_admin_login.nil? && !@zimbra_admin_password.nil?
|
|
86
|
+
end
|
|
84
87
|
end
|
|
85
88
|
|
|
86
89
|
# class config for connection
|
|
@@ -94,7 +97,6 @@ module Zm
|
|
|
94
97
|
end
|
|
95
98
|
|
|
96
99
|
# class error for config
|
|
97
|
-
class ClusterConfigError < StandardError
|
|
98
|
-
end
|
|
100
|
+
class ClusterConfigError < StandardError; end
|
|
99
101
|
end
|
|
100
102
|
end
|
|
@@ -11,7 +11,7 @@ module Zm
|
|
|
11
11
|
module Client
|
|
12
12
|
class SoapAccountConnector < SoapBaseConnector
|
|
13
13
|
|
|
14
|
-
SOAP_PATH = '/service/soap/'
|
|
14
|
+
# SOAP_PATH = '/service/soap/'
|
|
15
15
|
MAILSPACE = 'urn:zimbraMail'
|
|
16
16
|
ACCOUNTSPACE = 'urn:zimbraAccount'
|
|
17
17
|
A_NODE_PROC = lambda { |n| { n: n.first, _content: n.last } }
|
|
@@ -19,8 +19,7 @@ module Zm
|
|
|
19
19
|
A_NODE_PROC_ARROW_NAME = lambda { |n| { :@name => n.first, content!: n.last } }
|
|
20
20
|
|
|
21
21
|
def initialize(scheme, host, port)
|
|
22
|
-
|
|
23
|
-
init_curl_client
|
|
22
|
+
super(scheme, host, port, '/service/soap/')
|
|
24
23
|
end
|
|
25
24
|
|
|
26
25
|
def auth_template(mail)
|
|
@@ -174,75 +173,41 @@ module Zm
|
|
|
174
173
|
# -------------------------------
|
|
175
174
|
# FOLDER
|
|
176
175
|
|
|
177
|
-
def get_folder(token,
|
|
178
|
-
|
|
179
|
-
body = init_hash_request(token, soap_name)
|
|
180
|
-
req = { folder: { l: id } }
|
|
181
|
-
body[:Body][soap_name].merge!(req)
|
|
182
|
-
curl_request(body)
|
|
176
|
+
def get_folder(token, jsns)
|
|
177
|
+
jsns_request(:GetFolderRequest, token, jsns)
|
|
183
178
|
end
|
|
184
179
|
|
|
185
|
-
def get_all_folders(token, view = nil, tr = nil)
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
end
|
|
180
|
+
# def get_all_folders(token, view = nil, tr = nil)
|
|
181
|
+
# soap_name = :GetFolderRequest
|
|
182
|
+
# body = init_hash_request(token, soap_name)
|
|
183
|
+
# req = { view: view, tr: tr }.reject { |_, v| v.nil? }
|
|
184
|
+
# body[:Body][soap_name].merge!(req)
|
|
185
|
+
# curl_request(body)
|
|
186
|
+
# end
|
|
192
187
|
|
|
193
|
-
def create_folder(token,
|
|
194
|
-
|
|
195
|
-
# folder = { l: parent_id, name: name, view: view, color: color }.merge(options)
|
|
196
|
-
req = { folder: folder_options }
|
|
197
|
-
body = init_hash_request(token, soap_name)
|
|
198
|
-
body[:Body][soap_name].merge!(req)
|
|
199
|
-
curl_request(body)
|
|
188
|
+
def create_folder(token, jsns)
|
|
189
|
+
jsns_request(:CreateFolderRequest, token, jsns)
|
|
200
190
|
end
|
|
201
191
|
|
|
202
|
-
def folder_action(token,
|
|
203
|
-
|
|
204
|
-
action = { op: op, id: id }.merge(options)
|
|
205
|
-
req = { action: action }
|
|
206
|
-
body = init_hash_request(token, soap_name)
|
|
207
|
-
body[:Body][soap_name].merge!(req)
|
|
208
|
-
curl_request(body)
|
|
192
|
+
def folder_action(token, jsns)
|
|
193
|
+
jsns_request(:FolderActionRequest, token, jsns)
|
|
209
194
|
end
|
|
210
195
|
|
|
211
196
|
def get_all_search_folders(token)
|
|
212
|
-
|
|
197
|
+
soap_name = :GetSearchFolderRequest
|
|
198
|
+
body = init_hash_request(token, soap_name)
|
|
213
199
|
curl_request(body)
|
|
214
200
|
end
|
|
215
201
|
|
|
216
202
|
# -------------------------------
|
|
217
203
|
# SEARCH FOLDER
|
|
218
204
|
|
|
219
|
-
def create_search_folder(token,
|
|
220
|
-
|
|
221
|
-
name: name,
|
|
222
|
-
query: query,
|
|
223
|
-
types: types,
|
|
224
|
-
sortBy: sort_by,
|
|
225
|
-
color: color,
|
|
226
|
-
l: l
|
|
227
|
-
}.reject { |_, v| v.nil? }
|
|
228
|
-
|
|
229
|
-
req = { search: search }
|
|
230
|
-
body = init_hash_request(token, :CreateSearchFolderRequest)
|
|
231
|
-
body[:Body][:CreateSearchFolderRequest].merge!(req)
|
|
232
|
-
curl_request(body)
|
|
205
|
+
def create_search_folder(token, jsns)
|
|
206
|
+
jsns_request(:CreateSearchFolderRequest, token, jsns)
|
|
233
207
|
end
|
|
234
208
|
|
|
235
|
-
def modify_search_folder(token,
|
|
236
|
-
|
|
237
|
-
id: id,
|
|
238
|
-
query: query,
|
|
239
|
-
types: types
|
|
240
|
-
}.reject { |_, v| v.nil? }
|
|
241
|
-
|
|
242
|
-
req = { search: search }
|
|
243
|
-
body = init_hash_request(token, :ModifySearchFolderRequest)
|
|
244
|
-
body[:Body][:ModifySearchFolderRequest].merge!(req)
|
|
245
|
-
curl_request(body)
|
|
209
|
+
def modify_search_folder(token, jsns)
|
|
210
|
+
jsns_request(:ModifySearchFolderRequest, token, jsns)
|
|
246
211
|
end
|
|
247
212
|
|
|
248
213
|
# -------------------------------
|
|
@@ -266,12 +231,8 @@ module Zm
|
|
|
266
231
|
# -------------------------------
|
|
267
232
|
# SHARE
|
|
268
233
|
|
|
269
|
-
def create_mountpoint(token,
|
|
270
|
-
|
|
271
|
-
req = { link: link_option }
|
|
272
|
-
body = init_hash_request(token, soap_name)
|
|
273
|
-
body[:Body][soap_name].merge!(req)
|
|
274
|
-
curl_request(body)
|
|
234
|
+
def create_mountpoint(token, jsns)
|
|
235
|
+
jsns_request(:CreateMountpointRequest, token, jsns)
|
|
275
236
|
end
|
|
276
237
|
|
|
277
238
|
def get_share_info(token, options = {})
|
|
@@ -282,49 +243,16 @@ module Zm
|
|
|
282
243
|
curl_request(body)
|
|
283
244
|
end
|
|
284
245
|
|
|
285
|
-
def get_rights(token,
|
|
286
|
-
|
|
287
|
-
ace = rights.map { |r| { right: r } }
|
|
288
|
-
req = { ace: ace }
|
|
289
|
-
body = init_hash_request(token, soap_name, ACCOUNTSPACE)
|
|
290
|
-
body[:Body][soap_name].merge!(req)
|
|
291
|
-
curl_request(body)
|
|
246
|
+
def get_rights(token, jsns)
|
|
247
|
+
jsns_request(:GetRightsRequest, token, jsns, ACCOUNTSPACE)
|
|
292
248
|
end
|
|
293
249
|
|
|
294
|
-
def grant_rights(token,
|
|
295
|
-
|
|
296
|
-
zid: zid,
|
|
297
|
-
gt: gt,
|
|
298
|
-
right: right,
|
|
299
|
-
d: d,
|
|
300
|
-
key: key,
|
|
301
|
-
pw: pw,
|
|
302
|
-
deny: deny,
|
|
303
|
-
chkgt: chkgt
|
|
304
|
-
}.reject { |_, v| v.nil? }
|
|
305
|
-
|
|
306
|
-
req = { ace: ace }
|
|
307
|
-
body = init_hash_request(token, :GrantRightsRequest, ACCOUNTSPACE)
|
|
308
|
-
body[:Body][:GrantRightsRequest].merge!(req)
|
|
309
|
-
curl_request(body)
|
|
250
|
+
def grant_rights(token, jsns)
|
|
251
|
+
jsns_request(:GrantRightsRequest, token, jsns, ACCOUNTSPACE)
|
|
310
252
|
end
|
|
311
253
|
|
|
312
|
-
def revoke_rights(token,
|
|
313
|
-
|
|
314
|
-
zid: zid,
|
|
315
|
-
gt: gt,
|
|
316
|
-
right: right,
|
|
317
|
-
d: d,
|
|
318
|
-
key: key,
|
|
319
|
-
pw: pw,
|
|
320
|
-
deny: deny,
|
|
321
|
-
chkgt: chkgt
|
|
322
|
-
}.reject { |_, v| v.nil? }
|
|
323
|
-
|
|
324
|
-
req = { ace: ace }
|
|
325
|
-
body = init_hash_request(token, :RevokeRightsRequest, ACCOUNTSPACE)
|
|
326
|
-
body[:Body][:RevokeRightsRequest].merge!(req)
|
|
327
|
-
curl_request(body)
|
|
254
|
+
def revoke_rights(token, jsns)
|
|
255
|
+
jsns_request(:RevokeRightsRequest, token, jsns, ACCOUNTSPACE)
|
|
328
256
|
end
|
|
329
257
|
|
|
330
258
|
# -------------------------------
|
|
@@ -332,7 +260,7 @@ module Zm
|
|
|
332
260
|
|
|
333
261
|
def get_msg(token, id, options = {})
|
|
334
262
|
req = { m: { id: id } }
|
|
335
|
-
req[:m].merge(options) unless options.empty?
|
|
263
|
+
req[:m].merge!(options) unless options.empty?
|
|
336
264
|
body = init_hash_request(token, :GetMsgRequest)
|
|
337
265
|
body[:Body][:GetMsgRequest].merge!(req)
|
|
338
266
|
curl_request(body)
|
|
@@ -350,7 +278,7 @@ module Zm
|
|
|
350
278
|
req = { m: m }
|
|
351
279
|
body = init_hash_request(token, :SendMsgRequest)
|
|
352
280
|
body[:Body][:SendMsgRequest].merge!(req)
|
|
353
|
-
curl_request(body)
|
|
281
|
+
# curl_request(body)
|
|
354
282
|
end
|
|
355
283
|
|
|
356
284
|
def add_msg(token, l, eml, d = nil, f = nil, tn = nil)
|
|
@@ -378,19 +306,12 @@ module Zm
|
|
|
378
306
|
curl_request(body)
|
|
379
307
|
end
|
|
380
308
|
|
|
381
|
-
def create_tag(token,
|
|
382
|
-
|
|
383
|
-
req = { tag: { name: name, color: color, rgb: rgb }.reject { |_, v| v.nil? } }
|
|
384
|
-
body[:Body][:CreateTagRequest].merge!(req)
|
|
385
|
-
curl_request(body)
|
|
309
|
+
def create_tag(token, jsns)
|
|
310
|
+
jsns_request(:CreateTagRequest, token, jsns)
|
|
386
311
|
end
|
|
387
312
|
|
|
388
|
-
def tag_action(token,
|
|
389
|
-
|
|
390
|
-
req = { action: action }
|
|
391
|
-
body = init_hash_request(token, :TagActionRequest)
|
|
392
|
-
body[:Body][:TagActionRequest].merge!(req)
|
|
393
|
-
curl_request(body)
|
|
313
|
+
def tag_action(token, jsns)
|
|
314
|
+
jsns_request(:TagActionRequest, token, jsns)
|
|
394
315
|
end
|
|
395
316
|
|
|
396
317
|
# -------------------------------
|
|
@@ -487,18 +408,17 @@ module Zm
|
|
|
487
408
|
curl_request(body)
|
|
488
409
|
end
|
|
489
410
|
|
|
490
|
-
def delete_signature(token,
|
|
411
|
+
def delete_signature(token, jsns)
|
|
491
412
|
soap_name = :DeleteSignatureRequest
|
|
492
|
-
req = { signature: { id: id } }
|
|
493
413
|
body = init_hash_request(token, soap_name, ACCOUNTSPACE)
|
|
494
|
-
body[:Body][soap_name].merge!(
|
|
414
|
+
body[:Body][soap_name].merge!(jsns)
|
|
495
415
|
curl_request(body)
|
|
496
416
|
end
|
|
497
417
|
|
|
498
418
|
# -------------------------------
|
|
499
419
|
# GENERIC
|
|
500
420
|
|
|
501
|
-
def get_info(token, sections = 'mbox', rights = nil)
|
|
421
|
+
def get_info(token, sections = 'mbox,prefs,attrs,zimlets,props,idents,sigs,dsrcs,children', rights = nil)
|
|
502
422
|
req = { rights: rights, sections: sections }.reject { |_, v| v.nil? }
|
|
503
423
|
body = init_hash_request(token, :GetInfoRequest, ACCOUNTSPACE)
|
|
504
424
|
body[:Body][:GetInfoRequest].merge!(req) if req.any?
|
|
@@ -513,7 +433,8 @@ module Zm
|
|
|
513
433
|
offset: offset,
|
|
514
434
|
limit: limit,
|
|
515
435
|
sortBy: sortBy,
|
|
516
|
-
query: query
|
|
436
|
+
query: query,
|
|
437
|
+
header: [{ n: 'messageIdHeader' }]
|
|
517
438
|
}.merge!(options)
|
|
518
439
|
req.reject! { |_, v| v.nil? }
|
|
519
440
|
|
|
@@ -522,6 +443,28 @@ module Zm
|
|
|
522
443
|
curl_request(body)
|
|
523
444
|
end
|
|
524
445
|
|
|
446
|
+
def jsns_request(soap_name, token, jsns, namespace = MAILSPACE)
|
|
447
|
+
body = init_hash_request(token, soap_name, namespace)
|
|
448
|
+
body[:Body][soap_name].merge!(jsns) if jsns.is_a?(Hash)
|
|
449
|
+
curl_request(body)
|
|
450
|
+
end
|
|
451
|
+
|
|
452
|
+
def ranking_action(token, op, email = nil)
|
|
453
|
+
soap_name = :RankingActionRequest
|
|
454
|
+
req = {
|
|
455
|
+
action: {
|
|
456
|
+
op: op,
|
|
457
|
+
email: email
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
req[:action].delete_if { |_, v| v.nil? }
|
|
461
|
+
|
|
462
|
+
body = init_hash_request(token, soap_name)
|
|
463
|
+
body[:Body][soap_name].merge!(req) if req.any?
|
|
464
|
+
|
|
465
|
+
curl_request(body)
|
|
466
|
+
end
|
|
467
|
+
|
|
525
468
|
private
|
|
526
469
|
|
|
527
470
|
def compute_preauth(mail, ts, domainkey)
|
|
@@ -531,15 +474,15 @@ module Zm
|
|
|
531
474
|
hmac.to_s
|
|
532
475
|
end
|
|
533
476
|
|
|
534
|
-
def init_hash_request(token, soap_name,
|
|
477
|
+
def init_hash_request(token, soap_name, namespace = MAILSPACE)
|
|
535
478
|
{
|
|
536
479
|
Body: {
|
|
537
|
-
soap_name => { _jsns:
|
|
480
|
+
soap_name => { _jsns: namespace }
|
|
538
481
|
}
|
|
539
482
|
}.merge(hash_header(token))
|
|
540
483
|
end
|
|
541
484
|
|
|
542
|
-
def init_hash_arrow_request(token, soap_name,
|
|
485
|
+
def init_hash_arrow_request(token, soap_name, namespace = MAILSPACE)
|
|
543
486
|
{ Envelope: {
|
|
544
487
|
:@xmlns => 'http://schemas.xmlsoap.org/soap/envelope/',
|
|
545
488
|
'@xmlns:urn' => 'urn:zimbra',
|
|
@@ -553,7 +496,7 @@ module Zm
|
|
|
553
496
|
}
|
|
554
497
|
},
|
|
555
498
|
Body: {
|
|
556
|
-
soap_name => { :@xmlns =>
|
|
499
|
+
soap_name => { :@xmlns => namespace }
|
|
557
500
|
}
|
|
558
501
|
}
|
|
559
502
|
}
|
|
@@ -8,16 +8,14 @@ module Zm
|
|
|
8
8
|
module Client
|
|
9
9
|
class SoapAdminConnector < SoapBaseConnector
|
|
10
10
|
|
|
11
|
-
SOAP_PATH = '/service/admin/soap/'
|
|
11
|
+
# SOAP_PATH = '/service/admin/soap/'
|
|
12
12
|
ADMINSPACE = 'urn:zimbraAdmin'
|
|
13
13
|
A_NODE_PROC = lambda { |n| { n: n.first, _content: n.last } }
|
|
14
14
|
|
|
15
15
|
attr_accessor :token
|
|
16
16
|
|
|
17
17
|
def initialize(scheme, host, port)
|
|
18
|
-
|
|
19
|
-
@uri = URI::HTTP.new(scheme, nil, host, port, nil, SOAP_PATH, nil, nil, nil)
|
|
20
|
-
init_curl_client
|
|
18
|
+
super(scheme, host, port, '/service/admin/soap/')
|
|
21
19
|
end
|
|
22
20
|
|
|
23
21
|
def auth(mail, password)
|
|
@@ -156,7 +154,6 @@ module Zm
|
|
|
156
154
|
# req = { _jsns: ADMINSPACE, id: id, a: attrs.to_a.map{ |n| { n: n.first, _content: n.last } } }
|
|
157
155
|
req = { _jsns: ADMINSPACE, id: id }
|
|
158
156
|
body = { Body: { ModifyCosRequest: req } }.merge(hash_header(@token))
|
|
159
|
-
# puts body
|
|
160
157
|
# todo ne fonctionne pas !
|
|
161
158
|
# peut-être seul la version xml fonctionne. Il faudrait créer une fonction qui converti le json en xml
|
|
162
159
|
curl_request(body)
|
|
@@ -169,7 +166,6 @@ module Zm
|
|
|
169
166
|
# req[:a] = attrs.map{|i|i.last.is_a?(Array) ? i.last.map{|j|[i.first, j]} : [i]}.flatten(1).map { |n| { n: n.first, _content: n.last } }
|
|
170
167
|
body = init_hash_request(soap_name)
|
|
171
168
|
body[:Body][soap_name].merge!(req)
|
|
172
|
-
# puts body
|
|
173
169
|
curl_request(body)
|
|
174
170
|
end
|
|
175
171
|
|
|
@@ -189,7 +185,6 @@ module Zm
|
|
|
189
185
|
req[:a] = attrs.map { |i| i.last.is_a?(Array) ? i.last.map{|j|[i.first, j]} : [i] }.flatten(1).map(&A_NODE_PROC)
|
|
190
186
|
body = init_hash_request(soap_name)
|
|
191
187
|
body[:Body][soap_name].merge!(req)
|
|
192
|
-
# puts body
|
|
193
188
|
curl_request(body)
|
|
194
189
|
end
|
|
195
190
|
|
|
@@ -263,7 +258,6 @@ module Zm
|
|
|
263
258
|
req = { id: id, alias: email }
|
|
264
259
|
body = init_hash_request(soap_name)
|
|
265
260
|
body[:Body][soap_name].merge!(req)
|
|
266
|
-
# puts body
|
|
267
261
|
curl_request(body)
|
|
268
262
|
end
|
|
269
263
|
|
|
@@ -284,7 +278,6 @@ module Zm
|
|
|
284
278
|
body = init_hash_request(:GetDomainRequest)
|
|
285
279
|
body[:Body][:GetDomainRequest].merge!(req)
|
|
286
280
|
# TODO: tester param attrs
|
|
287
|
-
# puts body
|
|
288
281
|
curl_request(body)
|
|
289
282
|
end
|
|
290
283
|
|
|
@@ -309,7 +302,6 @@ module Zm
|
|
|
309
302
|
req[:attrs] = attrs unless attrs.nil? || attrs.empty?
|
|
310
303
|
body = init_hash_request(soap_name)
|
|
311
304
|
body[:Body][soap_name].merge!(req)
|
|
312
|
-
# puts body
|
|
313
305
|
curl_request(body)
|
|
314
306
|
end
|
|
315
307
|
|
|
@@ -341,6 +333,16 @@ module Zm
|
|
|
341
333
|
curl_request(body)
|
|
342
334
|
end
|
|
343
335
|
|
|
336
|
+
def get_distribution_list_membership(by_key, by = 'name', limit = nil, offset = nil)
|
|
337
|
+
soap_name = :GetDistributionListMembershipRequest
|
|
338
|
+
req = { dl: { by: by, _content: by_key }, limit: limit, offset: offset }
|
|
339
|
+
req.reject! { |_, v| v.nil? }
|
|
340
|
+
body = init_hash_request(soap_name)
|
|
341
|
+
body[:Body][soap_name].merge!(req)
|
|
342
|
+
|
|
343
|
+
curl_request(body)
|
|
344
|
+
end
|
|
345
|
+
|
|
344
346
|
def delete_account(id)
|
|
345
347
|
generic_delete(:DeleteAccountRequest, id)
|
|
346
348
|
end
|
|
@@ -394,7 +396,6 @@ module Zm
|
|
|
394
396
|
# body = { Body: { SearchDirectoryRequest: { _jsns: ADMINSPACE } } }.merge(hash_header(@token))
|
|
395
397
|
body = init_hash_request(soap_name)
|
|
396
398
|
body[:Body][soap_name].merge!(req)
|
|
397
|
-
# puts body
|
|
398
399
|
|
|
399
400
|
curl_request(body)
|
|
400
401
|
end
|
|
@@ -429,11 +430,11 @@ module Zm
|
|
|
429
430
|
curl_request(body)
|
|
430
431
|
end
|
|
431
432
|
|
|
432
|
-
def flush_cache(type, all_servers, id = nil)
|
|
433
|
+
def flush_cache(type, all_servers, id = nil, target_server_id = nil)
|
|
433
434
|
soap_name = :FlushCacheRequest
|
|
434
435
|
req = { cache: { type: type, allServers: all_servers } }
|
|
435
436
|
req[:cache].merge!({ entry: { by: :id, _content: id } }) unless id.nil?
|
|
436
|
-
body = init_hash_request(soap_name)
|
|
437
|
+
body = init_hash_request(soap_name, target_server_id)
|
|
437
438
|
body[:Body][soap_name].merge!(req)
|
|
438
439
|
curl_request(body)
|
|
439
440
|
end
|
|
@@ -467,7 +468,6 @@ module Zm
|
|
|
467
468
|
body = init_hash_request(soap_name)
|
|
468
469
|
req = { server: { name: server_name } }
|
|
469
470
|
body[:Body][soap_name].merge!(req)
|
|
470
|
-
# puts body.to_json
|
|
471
471
|
curl_request(body)
|
|
472
472
|
end
|
|
473
473
|
|
|
@@ -495,7 +495,6 @@ module Zm
|
|
|
495
495
|
}
|
|
496
496
|
}
|
|
497
497
|
body[:Body][soap_name].merge!(req)
|
|
498
|
-
# puts body.to_json
|
|
499
498
|
curl_request(body)
|
|
500
499
|
end
|
|
501
500
|
|
|
@@ -515,11 +514,24 @@ module Zm
|
|
|
515
514
|
body = init_hash_request(soap_name, dest_id)
|
|
516
515
|
req = { query: {} }
|
|
517
516
|
body[:Body][soap_name].merge!(req)
|
|
518
|
-
# puts body
|
|
519
517
|
curl_request(body)
|
|
520
518
|
# curl_xml(SoapXmlBuilder.new(body).to_xml)
|
|
521
519
|
end
|
|
522
520
|
|
|
521
|
+
def set_password(id, new_password)
|
|
522
|
+
soap_name = :SetPasswordRequest
|
|
523
|
+
body = init_hash_request(soap_name)
|
|
524
|
+
req = { id: id, newPassword: new_password }
|
|
525
|
+
body[:Body][soap_name].merge!(req)
|
|
526
|
+
curl_request(body)
|
|
527
|
+
end
|
|
528
|
+
|
|
529
|
+
def get_version_info
|
|
530
|
+
soap_name = :GetVersionInfoRequest
|
|
531
|
+
body = init_hash_request(soap_name)
|
|
532
|
+
curl_request(body)
|
|
533
|
+
end
|
|
534
|
+
|
|
523
535
|
def init_hash_request(soap_name, target_server = nil)
|
|
524
536
|
{
|
|
525
537
|
Body: {
|
|
@@ -16,6 +16,13 @@ module Zm
|
|
|
16
16
|
}.freeze
|
|
17
17
|
BODY = :Body
|
|
18
18
|
|
|
19
|
+
def initialize(scheme, host, port, soap_path)
|
|
20
|
+
extend(ZmLogger)
|
|
21
|
+
@verbose = false
|
|
22
|
+
@uri = URI::HTTP.new(scheme, nil, host, port, nil, soap_path, nil, nil, nil)
|
|
23
|
+
init_curl_client
|
|
24
|
+
end
|
|
25
|
+
|
|
19
26
|
def verbose!
|
|
20
27
|
@verbose = true
|
|
21
28
|
@curl.verbose = @verbose
|
|
@@ -36,10 +43,11 @@ module Zm
|
|
|
36
43
|
end
|
|
37
44
|
|
|
38
45
|
def curl_request(body, error_handler = SoapError)
|
|
39
|
-
|
|
46
|
+
logger.debug body.to_json
|
|
40
47
|
@curl.http_post(body.to_json)
|
|
41
48
|
|
|
42
|
-
|
|
49
|
+
logger.debug @curl.body_str
|
|
50
|
+
|
|
43
51
|
soapbody = JSON.parse(@curl.body_str, symbolize_names: true)
|
|
44
52
|
raise(error_handler, soapbody) if @curl.status.to_i >= 400
|
|
45
53
|
|
|
@@ -47,7 +55,7 @@ module Zm
|
|
|
47
55
|
end
|
|
48
56
|
|
|
49
57
|
def curl_xml(xml, error_handler = SoapError)
|
|
50
|
-
|
|
58
|
+
logger.debug xml
|
|
51
59
|
@curl.http_post(xml)
|
|
52
60
|
|
|
53
61
|
soapbody = JSON.parse(@curl.body_str, symbolize_names: true)
|