zm-ruby-client 0.10.4 → 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 +39 -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 +47 -7
- data/lib/zm/client/cluster/cluster_config.rb +19 -17
- data/lib/zm/client/common/token_metadata.rb +44 -0
- data/lib/zm/client/common.rb +2 -1
- data/lib/zm/client/connector/rest_account.rb +0 -3
- data/lib/zm/client/connector/soap_account.rb +66 -122
- data/lib/zm/client/connector/soap_admin.rb +47 -15
- 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 +11 -9
- data/lib/zm/client/domain/domain.rb +23 -7
- 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 +46 -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 +9 -7
- 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 +6 -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/domains.rb +8 -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 +60 -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,22 +59,31 @@ 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
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def token_metadata
|
|
80
|
+
@token_metadata ||= TokenMetaData.new(@soap_admin_connector.token)
|
|
55
81
|
end
|
|
56
82
|
|
|
57
83
|
def license
|
|
58
84
|
@license ||= LicensesCollection.new(self).find
|
|
59
85
|
rescue Zm::Client::SoapError => e
|
|
60
|
-
|
|
86
|
+
logger.error "Get License info #{e.message}"
|
|
61
87
|
nil
|
|
62
88
|
end
|
|
63
89
|
|
|
@@ -107,10 +133,24 @@ module Zm
|
|
|
107
133
|
!num.zero?
|
|
108
134
|
end
|
|
109
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
|
+
|
|
110
150
|
private
|
|
111
151
|
|
|
112
152
|
def find_domain_key(domain_name)
|
|
113
|
-
domains.find_by(
|
|
153
|
+
domains.attrs('zimbraPreAuthKey').find_by(name: domain_name).zimbraPreAuthKey
|
|
114
154
|
end
|
|
115
155
|
end
|
|
116
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
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Zm
|
|
4
|
+
module Client
|
|
5
|
+
class TokenMetaDataError < StandardError; end
|
|
6
|
+
|
|
7
|
+
class TokenMetaData
|
|
8
|
+
def initialize(token)
|
|
9
|
+
raise TokenMetaDataError, 'no such token' unless token.is_a?(String)
|
|
10
|
+
|
|
11
|
+
parts = token.split('_')
|
|
12
|
+
raise TokenMetaDataError, 'invalid token' unless parts.length == 3
|
|
13
|
+
|
|
14
|
+
@key_id = parts[0]
|
|
15
|
+
@hmac = parts[1]
|
|
16
|
+
@encoded = parts[2]
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def decoded
|
|
20
|
+
@decoded ||= [@encoded].pack('H*')
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def metadatas
|
|
24
|
+
@metadatas ||= Hash[decoded.split(';').map { |v| key, len, str = v.split(/[:=]/); [key, str] }].freeze
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def zimbra_id
|
|
28
|
+
metadatas['id']
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def is_admin?
|
|
32
|
+
@is_admin ||= metadatas['admin'] == '1'
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def server_version
|
|
36
|
+
metadatas['version']
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def expire_at
|
|
40
|
+
@expire_at ||= Time.at(metadatas['exp'].to_f / 1000).freeze
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
data/lib/zm/client/common.rb
CHANGED
|
@@ -11,6 +11,7 @@ module Zm
|
|
|
11
11
|
module Client
|
|
12
12
|
class SoapAccountConnector < SoapBaseConnector
|
|
13
13
|
|
|
14
|
+
# SOAP_PATH = '/service/soap/'
|
|
14
15
|
MAILSPACE = 'urn:zimbraMail'
|
|
15
16
|
ACCOUNTSPACE = 'urn:zimbraAccount'
|
|
16
17
|
A_NODE_PROC = lambda { |n| { n: n.first, _content: n.last } }
|
|
@@ -18,8 +19,7 @@ module Zm
|
|
|
18
19
|
A_NODE_PROC_ARROW_NAME = lambda { |n| { :@name => n.first, content!: n.last } }
|
|
19
20
|
|
|
20
21
|
def initialize(scheme, host, port)
|
|
21
|
-
|
|
22
|
-
init_curl_client
|
|
22
|
+
super(scheme, host, port, '/service/soap/')
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
def auth_template(mail)
|
|
@@ -173,75 +173,41 @@ module Zm
|
|
|
173
173
|
# -------------------------------
|
|
174
174
|
# FOLDER
|
|
175
175
|
|
|
176
|
-
def get_folder(token,
|
|
177
|
-
|
|
178
|
-
body = init_hash_request(token, soap_name)
|
|
179
|
-
req = { folder: { l: id } }
|
|
180
|
-
body[:Body][soap_name].merge!(req)
|
|
181
|
-
curl_request(body)
|
|
176
|
+
def get_folder(token, jsns)
|
|
177
|
+
jsns_request(:GetFolderRequest, token, jsns)
|
|
182
178
|
end
|
|
183
179
|
|
|
184
|
-
def get_all_folders(token, view = nil, tr = nil)
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
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
|
|
191
187
|
|
|
192
|
-
def create_folder(token,
|
|
193
|
-
|
|
194
|
-
# folder = { l: parent_id, name: name, view: view, color: color }.merge(options)
|
|
195
|
-
req = { folder: folder_options }
|
|
196
|
-
body = init_hash_request(token, soap_name)
|
|
197
|
-
body[:Body][soap_name].merge!(req)
|
|
198
|
-
curl_request(body)
|
|
188
|
+
def create_folder(token, jsns)
|
|
189
|
+
jsns_request(:CreateFolderRequest, token, jsns)
|
|
199
190
|
end
|
|
200
191
|
|
|
201
|
-
def folder_action(token,
|
|
202
|
-
|
|
203
|
-
action = { op: op, id: id }.merge(options)
|
|
204
|
-
req = { action: action }
|
|
205
|
-
body = init_hash_request(token, soap_name)
|
|
206
|
-
body[:Body][soap_name].merge!(req)
|
|
207
|
-
curl_request(body)
|
|
192
|
+
def folder_action(token, jsns)
|
|
193
|
+
jsns_request(:FolderActionRequest, token, jsns)
|
|
208
194
|
end
|
|
209
195
|
|
|
210
196
|
def get_all_search_folders(token)
|
|
211
|
-
|
|
197
|
+
soap_name = :GetSearchFolderRequest
|
|
198
|
+
body = init_hash_request(token, soap_name)
|
|
212
199
|
curl_request(body)
|
|
213
200
|
end
|
|
214
201
|
|
|
215
202
|
# -------------------------------
|
|
216
203
|
# SEARCH FOLDER
|
|
217
204
|
|
|
218
|
-
def create_search_folder(token,
|
|
219
|
-
|
|
220
|
-
name: name,
|
|
221
|
-
query: query,
|
|
222
|
-
types: types,
|
|
223
|
-
sortBy: sort_by,
|
|
224
|
-
color: color,
|
|
225
|
-
l: l
|
|
226
|
-
}.reject { |_, v| v.nil? }
|
|
227
|
-
|
|
228
|
-
req = { search: search }
|
|
229
|
-
body = init_hash_request(token, :CreateSearchFolderRequest)
|
|
230
|
-
body[:Body][:CreateSearchFolderRequest].merge!(req)
|
|
231
|
-
curl_request(body)
|
|
205
|
+
def create_search_folder(token, jsns)
|
|
206
|
+
jsns_request(:CreateSearchFolderRequest, token, jsns)
|
|
232
207
|
end
|
|
233
208
|
|
|
234
|
-
def modify_search_folder(token,
|
|
235
|
-
|
|
236
|
-
id: id,
|
|
237
|
-
query: query,
|
|
238
|
-
types: types
|
|
239
|
-
}.reject { |_, v| v.nil? }
|
|
240
|
-
|
|
241
|
-
req = { search: search }
|
|
242
|
-
body = init_hash_request(token, :ModifySearchFolderRequest)
|
|
243
|
-
body[:Body][:ModifySearchFolderRequest].merge!(req)
|
|
244
|
-
curl_request(body)
|
|
209
|
+
def modify_search_folder(token, jsns)
|
|
210
|
+
jsns_request(:ModifySearchFolderRequest, token, jsns)
|
|
245
211
|
end
|
|
246
212
|
|
|
247
213
|
# -------------------------------
|
|
@@ -265,12 +231,8 @@ module Zm
|
|
|
265
231
|
# -------------------------------
|
|
266
232
|
# SHARE
|
|
267
233
|
|
|
268
|
-
def create_mountpoint(token,
|
|
269
|
-
|
|
270
|
-
req = { link: link_option }
|
|
271
|
-
body = init_hash_request(token, soap_name)
|
|
272
|
-
body[:Body][soap_name].merge!(req)
|
|
273
|
-
curl_request(body)
|
|
234
|
+
def create_mountpoint(token, jsns)
|
|
235
|
+
jsns_request(:CreateMountpointRequest, token, jsns)
|
|
274
236
|
end
|
|
275
237
|
|
|
276
238
|
def get_share_info(token, options = {})
|
|
@@ -281,49 +243,16 @@ module Zm
|
|
|
281
243
|
curl_request(body)
|
|
282
244
|
end
|
|
283
245
|
|
|
284
|
-
def get_rights(token,
|
|
285
|
-
|
|
286
|
-
ace = rights.map { |r| { right: r } }
|
|
287
|
-
req = { ace: ace }
|
|
288
|
-
body = init_hash_request(token, soap_name, ACCOUNTSPACE)
|
|
289
|
-
body[:Body][soap_name].merge!(req)
|
|
290
|
-
curl_request(body)
|
|
246
|
+
def get_rights(token, jsns)
|
|
247
|
+
jsns_request(:GetRightsRequest, token, jsns, ACCOUNTSPACE)
|
|
291
248
|
end
|
|
292
249
|
|
|
293
|
-
def grant_rights(token,
|
|
294
|
-
|
|
295
|
-
zid: zid,
|
|
296
|
-
gt: gt,
|
|
297
|
-
right: right,
|
|
298
|
-
d: d,
|
|
299
|
-
key: key,
|
|
300
|
-
pw: pw,
|
|
301
|
-
deny: deny,
|
|
302
|
-
chkgt: chkgt
|
|
303
|
-
}.reject { |_, v| v.nil? }
|
|
304
|
-
|
|
305
|
-
req = { ace: ace }
|
|
306
|
-
body = init_hash_request(token, :GrantRightsRequest, ACCOUNTSPACE)
|
|
307
|
-
body[:Body][:GrantRightsRequest].merge!(req)
|
|
308
|
-
curl_request(body)
|
|
250
|
+
def grant_rights(token, jsns)
|
|
251
|
+
jsns_request(:GrantRightsRequest, token, jsns, ACCOUNTSPACE)
|
|
309
252
|
end
|
|
310
253
|
|
|
311
|
-
def revoke_rights(token,
|
|
312
|
-
|
|
313
|
-
zid: zid,
|
|
314
|
-
gt: gt,
|
|
315
|
-
right: right,
|
|
316
|
-
d: d,
|
|
317
|
-
key: key,
|
|
318
|
-
pw: pw,
|
|
319
|
-
deny: deny,
|
|
320
|
-
chkgt: chkgt
|
|
321
|
-
}.reject { |_, v| v.nil? }
|
|
322
|
-
|
|
323
|
-
req = { ace: ace }
|
|
324
|
-
body = init_hash_request(token, :RevokeRightsRequest, ACCOUNTSPACE)
|
|
325
|
-
body[:Body][:RevokeRightsRequest].merge!(req)
|
|
326
|
-
curl_request(body)
|
|
254
|
+
def revoke_rights(token, jsns)
|
|
255
|
+
jsns_request(:RevokeRightsRequest, token, jsns, ACCOUNTSPACE)
|
|
327
256
|
end
|
|
328
257
|
|
|
329
258
|
# -------------------------------
|
|
@@ -331,7 +260,7 @@ module Zm
|
|
|
331
260
|
|
|
332
261
|
def get_msg(token, id, options = {})
|
|
333
262
|
req = { m: { id: id } }
|
|
334
|
-
req[:m].merge(options) unless options.empty?
|
|
263
|
+
req[:m].merge!(options) unless options.empty?
|
|
335
264
|
body = init_hash_request(token, :GetMsgRequest)
|
|
336
265
|
body[:Body][:GetMsgRequest].merge!(req)
|
|
337
266
|
curl_request(body)
|
|
@@ -349,7 +278,7 @@ module Zm
|
|
|
349
278
|
req = { m: m }
|
|
350
279
|
body = init_hash_request(token, :SendMsgRequest)
|
|
351
280
|
body[:Body][:SendMsgRequest].merge!(req)
|
|
352
|
-
curl_request(body)
|
|
281
|
+
# curl_request(body)
|
|
353
282
|
end
|
|
354
283
|
|
|
355
284
|
def add_msg(token, l, eml, d = nil, f = nil, tn = nil)
|
|
@@ -377,19 +306,12 @@ module Zm
|
|
|
377
306
|
curl_request(body)
|
|
378
307
|
end
|
|
379
308
|
|
|
380
|
-
def create_tag(token,
|
|
381
|
-
|
|
382
|
-
req = { tag: { name: name, color: color, rgb: rgb }.reject { |_, v| v.nil? } }
|
|
383
|
-
body[:Body][:CreateTagRequest].merge!(req)
|
|
384
|
-
curl_request(body)
|
|
309
|
+
def create_tag(token, jsns)
|
|
310
|
+
jsns_request(:CreateTagRequest, token, jsns)
|
|
385
311
|
end
|
|
386
312
|
|
|
387
|
-
def tag_action(token,
|
|
388
|
-
|
|
389
|
-
req = { action: action }
|
|
390
|
-
body = init_hash_request(token, :TagActionRequest)
|
|
391
|
-
body[:Body][:TagActionRequest].merge!(req)
|
|
392
|
-
curl_request(body)
|
|
313
|
+
def tag_action(token, jsns)
|
|
314
|
+
jsns_request(:TagActionRequest, token, jsns)
|
|
393
315
|
end
|
|
394
316
|
|
|
395
317
|
# -------------------------------
|
|
@@ -486,18 +408,17 @@ module Zm
|
|
|
486
408
|
curl_request(body)
|
|
487
409
|
end
|
|
488
410
|
|
|
489
|
-
def delete_signature(token,
|
|
411
|
+
def delete_signature(token, jsns)
|
|
490
412
|
soap_name = :DeleteSignatureRequest
|
|
491
|
-
req = { signature: { id: id } }
|
|
492
413
|
body = init_hash_request(token, soap_name, ACCOUNTSPACE)
|
|
493
|
-
body[:Body][soap_name].merge!(
|
|
414
|
+
body[:Body][soap_name].merge!(jsns)
|
|
494
415
|
curl_request(body)
|
|
495
416
|
end
|
|
496
417
|
|
|
497
418
|
# -------------------------------
|
|
498
419
|
# GENERIC
|
|
499
420
|
|
|
500
|
-
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)
|
|
501
422
|
req = { rights: rights, sections: sections }.reject { |_, v| v.nil? }
|
|
502
423
|
body = init_hash_request(token, :GetInfoRequest, ACCOUNTSPACE)
|
|
503
424
|
body[:Body][:GetInfoRequest].merge!(req) if req.any?
|
|
@@ -512,7 +433,8 @@ module Zm
|
|
|
512
433
|
offset: offset,
|
|
513
434
|
limit: limit,
|
|
514
435
|
sortBy: sortBy,
|
|
515
|
-
query: query
|
|
436
|
+
query: query,
|
|
437
|
+
header: [{ n: 'messageIdHeader' }]
|
|
516
438
|
}.merge!(options)
|
|
517
439
|
req.reject! { |_, v| v.nil? }
|
|
518
440
|
|
|
@@ -521,6 +443,28 @@ module Zm
|
|
|
521
443
|
curl_request(body)
|
|
522
444
|
end
|
|
523
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
|
+
|
|
524
468
|
private
|
|
525
469
|
|
|
526
470
|
def compute_preauth(mail, ts, domainkey)
|
|
@@ -530,15 +474,15 @@ module Zm
|
|
|
530
474
|
hmac.to_s
|
|
531
475
|
end
|
|
532
476
|
|
|
533
|
-
def init_hash_request(token, soap_name,
|
|
477
|
+
def init_hash_request(token, soap_name, namespace = MAILSPACE)
|
|
534
478
|
{
|
|
535
479
|
Body: {
|
|
536
|
-
soap_name => { _jsns:
|
|
480
|
+
soap_name => { _jsns: namespace }
|
|
537
481
|
}
|
|
538
482
|
}.merge(hash_header(token))
|
|
539
483
|
end
|
|
540
484
|
|
|
541
|
-
def init_hash_arrow_request(token, soap_name,
|
|
485
|
+
def init_hash_arrow_request(token, soap_name, namespace = MAILSPACE)
|
|
542
486
|
{ Envelope: {
|
|
543
487
|
:@xmlns => 'http://schemas.xmlsoap.org/soap/envelope/',
|
|
544
488
|
'@xmlns:urn' => 'urn:zimbra',
|
|
@@ -552,7 +496,7 @@ module Zm
|
|
|
552
496
|
}
|
|
553
497
|
},
|
|
554
498
|
Body: {
|
|
555
|
-
soap_name => { :@xmlns =>
|
|
499
|
+
soap_name => { :@xmlns => namespace }
|
|
556
500
|
}
|
|
557
501
|
}
|
|
558
502
|
}
|