zm-ruby-client 0.10.4 → 0.17.1

Sign up to get free protection for your applications and to get access to all the features.
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