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.
Files changed (132) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Gemfile +1 -0
  4. data/README.md +6 -0
  5. data/lib/zm/client/account/account.rb +39 -17
  6. data/lib/zm/client/account/account_jsns_initializer.rb +44 -0
  7. data/lib/zm/client/account/accounts_builder.rb +6 -3
  8. data/lib/zm/client/account/accounts_collection.rb +11 -20
  9. data/lib/zm/client/account.rb +1 -0
  10. data/lib/zm/client/ace/ace.rb +22 -9
  11. data/lib/zm/client/ace/ace_jsns_builder.rb +38 -0
  12. data/lib/zm/client/ace/ace_jsns_initializer.rb +26 -0
  13. data/lib/zm/client/ace/aces_builder.rb +6 -9
  14. data/lib/zm/client/ace/aces_collection.rb +23 -9
  15. data/lib/zm/client/ace.rb +2 -0
  16. data/lib/zm/client/appointment/appointment.rb +9 -6
  17. data/lib/zm/client/appointment/appointments_collection.rb +6 -90
  18. data/lib/zm/client/backup/backup.rb +8 -4
  19. data/lib/zm/client/base/account_object.rb +34 -0
  20. data/lib/zm/client/base/account_objects_collection.rb +14 -0
  21. data/lib/zm/client/base/account_search_objects_collection.rb +125 -0
  22. data/lib/zm/client/base/admin_object.rb +6 -0
  23. data/lib/zm/client/base/admin_objects_collection.rb +65 -0
  24. data/lib/zm/client/base/base_jsns_builder.rb +19 -0
  25. data/lib/zm/client/base/base_jsns_initializer.rb +29 -0
  26. data/lib/zm/client/base/folder_object.rb +41 -0
  27. data/lib/zm/client/base/ldap_filter.rb +33 -0
  28. data/lib/zm/client/base/object.rb +19 -0
  29. data/lib/zm/client/base/objects_builder.rb +4 -0
  30. data/lib/zm/client/base/objects_collection.rb +11 -32
  31. data/lib/zm/client/base/zimbra_attribute.rb +119 -0
  32. data/lib/zm/client/base/zimbra_attributes_collection.rb +38 -0
  33. data/lib/zm/client/base.rb +15 -0
  34. data/lib/zm/client/cluster/cluster.rb +47 -7
  35. data/lib/zm/client/cluster/cluster_config.rb +19 -17
  36. data/lib/zm/client/common/token_metadata.rb +44 -0
  37. data/lib/zm/client/common.rb +2 -1
  38. data/lib/zm/client/connector/rest_account.rb +0 -3
  39. data/lib/zm/client/connector/soap_account.rb +66 -122
  40. data/lib/zm/client/connector/soap_admin.rb +47 -15
  41. data/lib/zm/client/connector/soap_base.rb +11 -3
  42. data/lib/zm/client/contact/contact.rb +2 -1
  43. data/lib/zm/client/contact/contacts_builder.rb +3 -13
  44. data/lib/zm/client/contact/contacts_collection.rb +6 -12
  45. data/lib/zm/client/cos/cos.rb +9 -5
  46. data/lib/zm/client/cos/coses_builder.rb +1 -16
  47. data/lib/zm/client/cos/coses_collection.rb +6 -9
  48. data/lib/zm/client/distributionlist/distributionlist.rb +44 -6
  49. data/lib/zm/client/distributionlist/distributionlists_builder.rb +2 -17
  50. data/lib/zm/client/distributionlist/distributionlists_collection.rb +4 -11
  51. data/lib/zm/client/distributionlist/dls_membership_collection.rb +24 -0
  52. data/lib/zm/client/distributionlist.rb +1 -0
  53. data/lib/zm/client/document/document.rb +11 -9
  54. data/lib/zm/client/domain/domain.rb +23 -7
  55. data/lib/zm/client/domain/domain_accounts_collection.rb +13 -0
  56. data/lib/zm/client/domain/domains_builder.rb +1 -19
  57. data/lib/zm/client/domain/domains_collection.rb +7 -10
  58. data/lib/zm/client/domain.rb +1 -0
  59. data/lib/zm/client/folder/folder.rb +50 -124
  60. data/lib/zm/client/folder/folder_grant.rb +44 -22
  61. data/lib/zm/client/folder/folder_grant_jsns_builder.rb +43 -0
  62. data/lib/zm/client/folder/folder_grants_collection.rb +35 -0
  63. data/lib/zm/client/folder/folder_jsns_builder.rb +132 -0
  64. data/lib/zm/client/folder/folder_jsns_initializer.rb +49 -0
  65. data/lib/zm/client/folder/folder_retention_policies_collection.rb +40 -0
  66. data/lib/zm/client/folder/folder_retention_policy.rb +8 -30
  67. data/lib/zm/client/folder/folders_builder.rb +2 -2
  68. data/lib/zm/client/folder/folders_collection.rb +46 -19
  69. data/lib/zm/client/folder/folders_jsns_builder.rb +22 -0
  70. data/lib/zm/client/folder.rb +6 -0
  71. data/lib/zm/client/identity/identities_builder.rb +4 -15
  72. data/lib/zm/client/identity/identities_collection.rb +7 -13
  73. data/lib/zm/client/identity/identity.rb +9 -7
  74. data/lib/zm/client/message/message.rb +111 -21
  75. data/lib/zm/client/message/messages_builder.rb +1 -1
  76. data/lib/zm/client/message/messages_collection.rb +10 -92
  77. data/lib/zm/client/mountpoint/mountpoint.rb +15 -68
  78. data/lib/zm/client/mountpoint/mountpoint_jsns_builder.rb +100 -0
  79. data/lib/zm/client/mountpoint/mountpoint_jsns_initializer.rb +33 -0
  80. data/lib/zm/client/mountpoint/mountpoints_builder.rb +1 -1
  81. data/lib/zm/client/mountpoint/mountpoints_collection.rb +14 -23
  82. data/lib/zm/client/mountpoint.rb +2 -0
  83. data/lib/zm/client/resource/resource.rb +5 -5
  84. data/lib/zm/client/resource/resources_builder.rb +1 -16
  85. data/lib/zm/client/resource/resources_collection.rb +5 -13
  86. data/lib/zm/client/search_folder/search_folder.rb +19 -39
  87. data/lib/zm/client/search_folder/search_folder_jsns_builder.rb +86 -0
  88. data/lib/zm/client/search_folder/search_folder_jsns_initializer.rb +33 -0
  89. data/lib/zm/client/search_folder/search_folders_builder.rb +7 -11
  90. data/lib/zm/client/search_folder/search_folders_collection.rb +7 -15
  91. data/lib/zm/client/search_folder.rb +2 -0
  92. data/lib/zm/client/server/server.rb +7 -14
  93. data/lib/zm/client/server/server_accounts_collection.rb +19 -0
  94. data/lib/zm/client/server/servers_builder.rb +4 -16
  95. data/lib/zm/client/server/servers_collection.rb +5 -10
  96. data/lib/zm/client/server.rb +1 -0
  97. data/lib/zm/client/share/share.rb +2 -9
  98. data/lib/zm/client/share/shares_builder.rb +3 -12
  99. data/lib/zm/client/signature/signature.rb +17 -13
  100. data/lib/zm/client/signature/signature_jsns_builder.rb +5 -1
  101. data/lib/zm/client/signature/signature_jsns_initializer.rb +25 -0
  102. data/lib/zm/client/signature/signatures_builder.rb +7 -11
  103. data/lib/zm/client/signature/signatures_collection.rb +6 -14
  104. data/lib/zm/client/signature.rb +1 -0
  105. data/lib/zm/client/tag/tag.rb +27 -20
  106. data/lib/zm/client/tag/tag_jsns_builder.rb +55 -0
  107. data/lib/zm/client/tag/tag_jsns_initializer.rb +26 -0
  108. data/lib/zm/client/tag/tags_builder.rb +6 -9
  109. data/lib/zm/client/tag/tags_collection.rb +6 -12
  110. data/lib/zm/client/tag.rb +2 -0
  111. data/lib/zm/client/task/tasks_collection.rb +6 -90
  112. data/lib/zm/client/upload/upload.rb +1 -1
  113. data/lib/zm/client/version.rb +2 -2
  114. data/lib/zm/modules/common/dl_common.rb +6 -1
  115. data/lib/zm/modules/common/zimbra-attrs.json.bak +1 -0
  116. data/lib/zm/modules/zm_logger.rb +24 -0
  117. data/lib/zm/modules/zm_model.rb +41 -0
  118. data/test/accounts.rb +15 -1
  119. data/test/ace.rb +50 -0
  120. data/test/cluster.rb +41 -0
  121. data/test/cluster_zimbra_attributes.rb +38 -0
  122. data/test/domains.rb +8 -0
  123. data/test/folder.rb +125 -0
  124. data/test/folder_grant.rb +51 -0
  125. data/test/mountpoint.rb +49 -0
  126. data/test/retention_policies.rb +40 -0
  127. data/test/search_folder.rb +67 -0
  128. data/test/signature.rb +53 -0
  129. data/test/tag.rb +65 -0
  130. data/test/zimbra_attributes.rb +35 -0
  131. data/zm-ruby-client.gemspec +1 -0
  132. metadata +60 -3
@@ -8,15 +8,14 @@ module Zm
8
8
  module Client
9
9
  class SoapAdminConnector < SoapBaseConnector
10
10
 
11
+ # SOAP_PATH = '/service/admin/soap/'
11
12
  ADMINSPACE = 'urn:zimbraAdmin'
12
13
  A_NODE_PROC = lambda { |n| { n: n.first, _content: n.last } }
13
14
 
14
15
  attr_accessor :token
15
16
 
16
17
  def initialize(scheme, host, port)
17
- @verbose = false
18
- @uri = URI::HTTP.new(scheme, nil, host, port, nil, '/service/admin/soap/', nil, nil, nil)
19
- init_curl_client
18
+ super(scheme, host, port, '/service/admin/soap/')
20
19
  end
21
20
 
22
21
  def auth(mail, password)
@@ -155,7 +154,6 @@ module Zm
155
154
  # req = { _jsns: ADMINSPACE, id: id, a: attrs.to_a.map{ |n| { n: n.first, _content: n.last } } }
156
155
  req = { _jsns: ADMINSPACE, id: id }
157
156
  body = { Body: { ModifyCosRequest: req } }.merge(hash_header(@token))
158
- # puts body
159
157
  # todo ne fonctionne pas !
160
158
  # peut-être seul la version xml fonctionne. Il faudrait créer une fonction qui converti le json en xml
161
159
  curl_request(body)
@@ -168,7 +166,6 @@ module Zm
168
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 } }
169
167
  body = init_hash_request(soap_name)
170
168
  body[:Body][soap_name].merge!(req)
171
- # puts body
172
169
  curl_request(body)
173
170
  end
174
171
 
@@ -188,7 +185,6 @@ module Zm
188
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)
189
186
  body = init_hash_request(soap_name)
190
187
  body[:Body][soap_name].merge!(req)
191
- # puts body
192
188
  curl_request(body)
193
189
  end
194
190
 
@@ -214,6 +210,14 @@ module Zm
214
210
  curl_request(body)
215
211
  end
216
212
 
213
+ def set_password(id, new_password)
214
+ soap_name = :SetPasswordRequest
215
+ req = { id: id, newPassword: new_password }
216
+ body = init_hash_request(soap_name)
217
+ body[:Body][soap_name].merge!(req)
218
+ curl_request(body)
219
+ end
220
+
217
221
  def add_account_alias(id, email)
218
222
  generic_alias(:AddAccountAliasRequest, id, email)
219
223
  end
@@ -254,7 +258,6 @@ module Zm
254
258
  req = { id: id, alias: email }
255
259
  body = init_hash_request(soap_name)
256
260
  body[:Body][soap_name].merge!(req)
257
- # puts body
258
261
  curl_request(body)
259
262
  end
260
263
 
@@ -275,7 +278,17 @@ module Zm
275
278
  body = init_hash_request(:GetDomainRequest)
276
279
  body[:Body][:GetDomainRequest].merge!(req)
277
280
  # TODO: tester param attrs
278
- # puts body
281
+ curl_request(body)
282
+ end
283
+
284
+ def create_domain(name, attrs = [])
285
+ soap_name = :CreateDomainRequest
286
+ req = {
287
+ name: name,
288
+ a: attrs.map(&A_NODE_PROC)
289
+ }
290
+ body = init_hash_request(soap_name)
291
+ body[:Body][soap_name].merge!(req)
279
292
  curl_request(body)
280
293
  end
281
294
 
@@ -289,7 +302,6 @@ module Zm
289
302
  req[:attrs] = attrs unless attrs.nil? || attrs.empty?
290
303
  body = init_hash_request(soap_name)
291
304
  body[:Body][soap_name].merge!(req)
292
- # puts body
293
305
  curl_request(body)
294
306
  end
295
307
 
@@ -321,6 +333,16 @@ module Zm
321
333
  curl_request(body)
322
334
  end
323
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
+
324
346
  def delete_account(id)
325
347
  generic_delete(:DeleteAccountRequest, id)
326
348
  end
@@ -374,7 +396,6 @@ module Zm
374
396
  # body = { Body: { SearchDirectoryRequest: { _jsns: ADMINSPACE } } }.merge(hash_header(@token))
375
397
  body = init_hash_request(soap_name)
376
398
  body[:Body][soap_name].merge!(req)
377
- # puts body
378
399
 
379
400
  curl_request(body)
380
401
  end
@@ -409,11 +430,11 @@ module Zm
409
430
  curl_request(body)
410
431
  end
411
432
 
412
- def flush_cache(type, all_servers, id = nil)
433
+ def flush_cache(type, all_servers, id = nil, target_server_id = nil)
413
434
  soap_name = :FlushCacheRequest
414
435
  req = { cache: { type: type, allServers: all_servers } }
415
436
  req[:cache].merge!({ entry: { by: :id, _content: id } }) unless id.nil?
416
- body = init_hash_request(soap_name)
437
+ body = init_hash_request(soap_name, target_server_id)
417
438
  body[:Body][soap_name].merge!(req)
418
439
  curl_request(body)
419
440
  end
@@ -447,7 +468,6 @@ module Zm
447
468
  body = init_hash_request(soap_name)
448
469
  req = { server: { name: server_name } }
449
470
  body[:Body][soap_name].merge!(req)
450
- # puts body.to_json
451
471
  curl_request(body)
452
472
  end
453
473
 
@@ -475,7 +495,6 @@ module Zm
475
495
  }
476
496
  }
477
497
  body[:Body][soap_name].merge!(req)
478
- # puts body.to_json
479
498
  curl_request(body)
480
499
  end
481
500
 
@@ -495,11 +514,24 @@ module Zm
495
514
  body = init_hash_request(soap_name, dest_id)
496
515
  req = { query: {} }
497
516
  body[:Body][soap_name].merge!(req)
498
- # puts body
499
517
  curl_request(body)
500
518
  # curl_xml(SoapXmlBuilder.new(body).to_xml)
501
519
  end
502
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
+
503
535
  def init_hash_request(soap_name, target_server = nil)
504
536
  {
505
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
- puts body.to_json if @verbose
46
+ logger.debug body.to_json
40
47
  @curl.http_post(body.to_json)
41
48
 
42
- puts @curl.body_str if @verbose
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
- # puts xml
58
+ logger.debug xml
51
59
  @curl.http_post(xml)
52
60
 
53
61
  soapbody = JSON.parse(@curl.body_str, symbolize_names: true)
@@ -108,7 +108,8 @@ module Zm
108
108
  end
109
109
 
110
110
  def delete!
111
- @parent.sacc.contact_action(@parent.token, :delete, id)
111
+ @parent.sacc.contact_action(@parent.token, :delete, @id)
112
+ super
112
113
  end
113
114
 
114
115
  def update!(hash)
@@ -4,20 +4,10 @@ module Zm
4
4
  module Client
5
5
  # class factory [contacts]
6
6
  class ContactBuilder < Base::ObjectsBuilder
7
-
8
7
  def initialize(parent, json)
9
- @parent = parent
10
- @json = json
11
- end
12
-
13
- def make
14
- root = @json[:Body][:GetContactsResponse][:cn]
15
- return [] if root.nil?
16
-
17
- root = [root] unless root.is_a?(Array)
18
- root.map do |s|
19
- Contact.new(@parent, s)
20
- end
8
+ super(parent, json)
9
+ @child_class = Contact
10
+ @json_item_key = :cn
21
11
  end
22
12
  end
23
13
  end
@@ -3,23 +3,17 @@
3
3
  module Zm
4
4
  module Client
5
5
  # collection account contacts
6
- class ContactsCollection < Base::ObjectsCollection
6
+ class ContactsCollection < Base::AccountObjectsCollection
7
7
  def initialize(parent)
8
- @parent = parent
9
- end
10
-
11
- def new
12
- contact = Contact.new(@parent)
13
- yield(contact) if block_given?
14
- contact
8
+ @child_class = Contact
9
+ @builder_class = ContactBuilder
10
+ super(parent)
15
11
  end
16
12
 
17
13
  private
18
14
 
19
- def build_response
20
- rep = @parent.sacc.get_all_contacts(@parent.token)
21
- cb = ContactBuilder.new @parent, rep
22
- cb.make
15
+ def make_query
16
+ @parent.sacc.get_all_contacts(@parent.token)
23
17
  end
24
18
  end
25
19
  end
@@ -16,11 +16,11 @@ module Zm
16
16
  @zimbraZimletAvailableZimlets = [@zimbraZimletAvailableZimlets] if @zimbraZimletAvailableZimlets.is_a?(String)
17
17
  end
18
18
 
19
- def to_h
20
- hashmap = Hash[all_instance_variable_keys.map { |key| [key, instance_variable_get(arrow_name(key))] }]
21
- hashmap.delete_if { |_, v| v.nil? }
22
- hashmap
23
- end
19
+ # def to_h
20
+ # hashmap = Hash[all_instance_variable_keys.map { |key| [key, instance_variable_get(arrow_name(key))] }]
21
+ # hashmap.delete_if { |_, v| v.nil? }
22
+ # hashmap
23
+ # end
24
24
 
25
25
  def all_instance_variable_keys
26
26
  attrs_write
@@ -46,6 +46,10 @@ module Zm
46
46
  @servers ||= read_servers
47
47
  end
48
48
 
49
+ def accounts
50
+ # todo sélectionner tous les comptes qui ont zimbraCOSID=self.id
51
+ end
52
+
49
53
  private
50
54
 
51
55
  def read_servers
@@ -7,22 +7,7 @@ module Zm
7
7
  def initialize(parent, json)
8
8
  super(parent, json)
9
9
  @child_class = Cos
10
- end
11
-
12
- # def make
13
- # return [] if json_items.nil?
14
- #
15
- # json_items.map do |entry|
16
- # cos = Cos.new(@parent)
17
- # cos.init_from_json(entry)
18
- # cos
19
- # end
20
- # end
21
-
22
- private
23
-
24
- def json_items
25
- @json_items ||= @json[:Body][json_key][:cos]
10
+ @json_item_key = :cos
26
11
  end
27
12
  end
28
13
  end
@@ -3,29 +3,26 @@
3
3
  module Zm
4
4
  module Client
5
5
  # Collection coses
6
- class CosesCollection < Base::ObjectsCollection
6
+ class CosesCollection < Base::AdminObjectsCollection
7
7
  def initialize(parent)
8
8
  @child_class = Cos
9
+ @builder_class = CosesBuilder
10
+ @search_type = SearchType::COS
9
11
  @parent = parent
10
- reset_query_params
11
12
  end
12
13
 
13
- def find_by(hash, *attrs)
14
- rep = sac.get_cos(hash.values.first, hash.keys.first, attrs.join(COMMA))
14
+ def find_by(hash)
15
+ rep = sac.get_cos(hash.values.first, hash.keys.first, attrs_comma)
15
16
  entry = rep[:Body][:GetCosResponse][:cos].first
16
17
 
18
+ reset_query_params
17
19
  build_from_entry(entry)
18
20
  end
19
21
 
20
22
  private
21
23
 
22
- def build_response
23
- CosesBuilder.new(@parent, make_query).make
24
- end
25
-
26
24
  def reset_query_params
27
25
  super
28
- @search_type = SearchType::COS
29
26
  @attrs = SearchType::Attributes::COS.dup
30
27
  end
31
28
  end
@@ -6,21 +6,22 @@ module Zm
6
6
  # objectClass: zimbraDistributionList
7
7
  class DistributionList < Base::AdminObject
8
8
  attr_accessor :members
9
- attr_reader :owners
9
+ attr_reader :owners, :aces
10
10
 
11
11
  def initialize(parent)
12
12
  extend(DistributionListCommon)
13
13
  super(parent)
14
14
  @members = []
15
15
  @owners = []
16
+ @aces = []
16
17
  @grantee_type = 'grp'.freeze
17
18
  end
18
19
 
19
- def to_h
20
- hashmap = Hash[all_instance_variable_keys.map { |key| [key, instance_variable_get(arrow_name(key))] }]
21
- hashmap.delete_if { |_, v| v.nil? }
22
- hashmap
23
- end
20
+ # def to_h
21
+ # hashmap = Hash[all_instance_variable_keys.map { |key| [key, instance_variable_get(arrow_name(key))] }]
22
+ # hashmap.delete_if { |_, v| v.nil? }
23
+ # hashmap
24
+ # end
24
25
 
25
26
  def all_instance_variable_keys
26
27
  DistributionListCommon::ALL_ATTRS
@@ -35,6 +36,7 @@ module Zm
35
36
  @zimbraMailAlias = [@zimbraMailAlias].compact unless @zimbraMailAlias.is_a?(Array)
36
37
  @zimbraMailAlias.delete(@name)
37
38
  @aliases = @zimbraMailAlias
39
+ set_aces_from_json
38
40
  end
39
41
 
40
42
  def create!
@@ -99,6 +101,16 @@ module Zm
99
101
  @members -= emails
100
102
  end
101
103
 
104
+ def add_owners!(*emails)
105
+ # todo à tester
106
+ sac.distribution_list_action(@id, :id, { op: 'addOwners', owner: { by: :name, type: :usr, _content: emails } })
107
+ end
108
+
109
+ def remove_owners!(*emails)
110
+ # todo à tester
111
+ sac.distribution_list_action(@id, :id, { op: 'removeOwners', owner: { by: :name, type: :usr, _content: emails } })
112
+ end
113
+
102
114
  def local_transport
103
115
  raise Zm::Client::SoapError, 'zimbraMailHost is null' if zimbraMailHost.nil?
104
116
 
@@ -120,6 +132,32 @@ module Zm
120
132
 
121
133
  zimbraMailTransport.start_with?('smtp')
122
134
  end
135
+
136
+ def memberships
137
+ @memberships ||= DlsMembershipCollection.new(self)
138
+ end
139
+
140
+ def hide_in_gal?
141
+ zimbraHideInGal == 'TRUE'
142
+ end
143
+
144
+ def group?
145
+ zimbraMailStatus == 'disabled'
146
+ end
147
+
148
+ def mailing_list?
149
+ zimbraMailStatus == 'enabled'
150
+ end
151
+
152
+ def set_aces_from_json
153
+ return if @zimbraACE.nil?
154
+
155
+ zimbra_aces = @zimbraACE.is_a?(Array) ? @zimbraACE : [@zimbraACE]
156
+ @aces = zimbra_aces.map do |str|
157
+ parts = str.split(/\s+/)
158
+ { zimbra_id: parts[0], type: parts[1], right: parts[2] }
159
+ end
160
+ end
123
161
  end
124
162
  end
125
163
  end
@@ -2,27 +2,12 @@
2
2
 
3
3
  module Zm
4
4
  module Client
5
- # class factory [resources]
5
+ # class factory [dls]
6
6
  class DistributionListsBuilder < Base::ObjectsBuilder
7
7
  def initialize(parent, json)
8
8
  super(parent, json)
9
9
  @child_class = DistributionList
10
- end
11
-
12
- # def make
13
- # return [] if json_items.nil?
14
- #
15
- # json_items.map do |entry|
16
- # dl = DistributionList.new(@parent)
17
- # dl.init_from_json(entry)
18
- # dl
19
- # end
20
- # end
21
-
22
- private
23
-
24
- def json_items
25
- @json_items ||= @json[:Body][json_key][:dl]
10
+ @json_item_key = :dl
26
11
  end
27
12
  end
28
13
  end
@@ -3,34 +3,27 @@
3
3
  module Zm
4
4
  module Client
5
5
  # Collection Resources
6
- class DistributionListsCollection < Base::ObjectsCollection
6
+ class DistributionListsCollection < Base::AdminObjectsCollection
7
7
  def initialize(parent)
8
8
  @child_class = DistributionList
9
+ @builder_class = DistributionListsBuilder
10
+ @search_type = SearchType::DL
9
11
  @parent = parent
10
12
  reset_query_params
11
13
  end
12
14
 
13
- def ldap
14
- @apply_cos = 0
15
- self
16
- end
17
-
18
15
  def find_by(hash)
19
16
  rep = sac.get_distribution_list(hash.values.first, hash.keys.first, attrs_comma)
20
17
  entry = rep[:Body][:GetDistributionListResponse][:dl].first
21
18
 
19
+ reset_query_params
22
20
  build_from_entry(entry)
23
21
  end
24
22
 
25
23
  private
26
24
 
27
- def build_response
28
- DistributionListsBuilder.new(@parent, make_query).make
29
- end
30
-
31
25
  def reset_query_params
32
26
  super
33
- @search_type = SearchType::DL
34
27
  @attrs = SearchType::Attributes::DL.dup
35
28
  @all_servers = 1
36
29
  @refresh = 0
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ DlMembership = Struct.new(:name, :id, :via)
6
+
7
+ class DlsMembershipCollection < Base::ObjectsCollection
8
+ def initialize(parent)
9
+ @parent = parent
10
+ end
11
+
12
+ private
13
+
14
+ def make_query
15
+ @parent.sac.get_distribution_list_membership(@parent.id, :id)
16
+ end
17
+
18
+ def build_response
19
+ @all = make_query.dig(:Body, :GetDistributionListMembershipResponse, :dl) || []
20
+ @all.map { |json| DlMembership.new(json[:name], json[:id], json[:via]) }
21
+ end
22
+ end
23
+ end
24
+ end
@@ -3,3 +3,4 @@
3
3
  require 'zm/client/distributionlist/distributionlist'
4
4
  require 'zm/client/distributionlist/distributionlists_builder'
5
5
  require 'zm/client/distributionlist/distributionlists_collection'
6
+ require 'zm/client/distributionlist/dls_membership_collection'
@@ -19,8 +19,8 @@ module Zm
19
19
  yield(self) if block_given?
20
20
  end
21
21
 
22
- def concat
23
- INSTANCE_VARIABLE_KEYS.map { |key| instance_variable_get(arrow_name(key)) }
22
+ def all_instance_variable_keys
23
+ INSTANCE_VARIABLE_KEYS
24
24
  end
25
25
 
26
26
  def folder
@@ -31,17 +31,19 @@ module Zm
31
31
  @parent.sacc.item_action(@parent.token, :tag, @id, tn: tag_name)
32
32
  end
33
33
 
34
+ def move!(folder_id)
35
+ @parent.sacc.item_action(@parent.token, 'move', @id, l: folder_id)
36
+ @l = folder_id
37
+ end
38
+
39
+ def delete!
40
+ @parent.sacc.item_action(@parent.token, :delete, @id)
41
+ end
42
+
34
43
  def download(dest_file_path)
35
44
  uploader = Upload.new(@parent, RestAccountConnector.new)
36
45
  uploader.download_file(folder.absFolderPath, nil, nil, [id], dest_file_path)
37
46
  end
38
-
39
- def init_from_json(json)
40
- INSTANCE_VARIABLE_KEYS.each do |key|
41
- var_name = "@#{key}"
42
- instance_variable_set(var_name, json[key])
43
- end
44
- end
45
47
  end
46
48
  end
47
49
  end
@@ -6,7 +6,7 @@ module Zm
6
6
  class Domain < Base::AdminObject
7
7
  INSTANCE_VARIABLE_KEYS = %i[name description zimbraDomainName zimbraDomainStatus zimbraId zimbraDomainType
8
8
  zimbraDomainDefaultCOSId zimbraGalAccountId zimbraPreAuthKey zimbraGalLdapBindDn zimbraGalLdapBindPassword
9
- zimbraGalLdapFilter zimbraGalLdapSearchBase zimbraGalLdapURL zimbraGalMode]
9
+ zimbraGalLdapFilter zimbraGalLdapSearchBase zimbraGalLdapURL zimbraGalMode zimbraMailTransport]
10
10
 
11
11
  attr_accessor *INSTANCE_VARIABLE_KEYS
12
12
 
@@ -15,16 +15,27 @@ module Zm
15
15
  @grantee_type = 'dom'.freeze
16
16
  end
17
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
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
23
 
24
24
  def all_instance_variable_keys
25
25
  INSTANCE_VARIABLE_KEYS
26
26
  end
27
27
 
28
+ def create!
29
+ attrs_write = INSTANCE_VARIABLE_KEYS.dup
30
+ attrs_write.delete(:name)
31
+
32
+ rep = sac.create_domain(
33
+ @name,
34
+ instance_variables_array(attrs_write)
35
+ )
36
+ @id = rep[:Body][:CreateDomainResponse][:domain].first[:id]
37
+ end
38
+
28
39
  def update!(hash)
29
40
  sac.modify_domain(@id, hash)
30
41
 
@@ -40,9 +51,14 @@ module Zm
40
51
  end
41
52
 
42
53
  def accounts
43
- @accounts ||= AccountsCollection.new(self)
54
+ @accounts ||= DomainAccountsCollection.new(self)
44
55
  end
45
56
 
57
+ # def account_quotas(server_id)
58
+ # rep = sac.get_quota_usage(name, nil, nil, nil, nil, nil, nil, server_id)
59
+ # AccountsBuilder.new(@parent, rep).make
60
+ # end
61
+
46
62
  def init_from_json(json)
47
63
  super(json)
48
64
  return unless json[:a].is_a? Array
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # Collection Accounts from domain
6
+ class DomainAccountsCollection < AccountsCollection
7
+ def initialize(parent)
8
+ @domain_name = parent.name
9
+ super(parent)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -7,25 +7,7 @@ module Zm
7
7
  def initialize(parent, json)
8
8
  super(parent, json)
9
9
  @child_class = Domain
10
- end
11
-
12
- # def make
13
- # records = []
14
- # return records if json_items.nil?
15
- #
16
- # json_items.each do |entry|
17
- # domain = Domain.new(@parent)
18
- # domain.init_from_json(entry)
19
- # records << domain
20
- # end
21
- #
22
- # records
23
- # end
24
-
25
- private
26
-
27
- def json_items
28
- @json_items ||= @json[:Body][json_key][:domain]
10
+ @json_item_key = :domain
29
11
  end
30
12
  end
31
13
  end