zm-ruby-client 0.18.5 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (250) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/Gemfile +2 -2
  4. data/README.md +7 -0
  5. data/lib/zm/client/account/account.rb +31 -308
  6. data/lib/zm/client/account/account_aliases_collection.rb +52 -0
  7. data/lib/zm/client/account/account_dls_membership_collection.rb +4 -1
  8. data/lib/zm/client/account/account_dls_owner_collection.rb +8 -1
  9. data/lib/zm/client/account/account_jsns_builder.rb +77 -0
  10. data/lib/zm/client/account/account_jsns_initializer.rb +9 -24
  11. data/lib/zm/client/account/accounts_builder.rb +0 -1
  12. data/lib/zm/client/account/accounts_collection.rb +32 -8
  13. data/lib/zm/client/account.rb +1 -0
  14. data/lib/zm/client/ace/ace.rb +6 -22
  15. data/lib/zm/client/ace/ace_jsns_builder.rb +15 -16
  16. data/lib/zm/client/ace/ace_jsns_initializer.rb +0 -1
  17. data/lib/zm/client/ace/aces_builder.rb +0 -1
  18. data/lib/zm/client/ace/aces_collection.rb +2 -18
  19. data/lib/zm/client/appointment/appointment.rb +38 -30
  20. data/lib/zm/client/appointment/appointment_jsns_builder.rb +22 -34
  21. data/lib/zm/client/appointment/appointment_jsns_initializer.rb +6 -3
  22. data/lib/zm/client/appointment/appointments_builder.rb +6 -18
  23. data/lib/zm/client/appointment/appointments_collection.rb +25 -4
  24. data/lib/zm/client/backup/backup.rb +4 -32
  25. data/lib/zm/client/backup/backup_jsns_initializer.rb +26 -0
  26. data/lib/zm/client/backup/backups_builder.rb +8 -13
  27. data/lib/zm/client/backup/backups_collection.rb +2 -1
  28. data/lib/zm/client/backup.rb +1 -0
  29. data/lib/zm/client/base/account_search_objects_collection.rb +34 -13
  30. data/lib/zm/client/base/admin_objects_collection.rb +82 -17
  31. data/lib/zm/client/base/base_account_jsns_builder.rb +98 -0
  32. data/lib/zm/client/base/base_jsns_builder.rb +47 -0
  33. data/lib/zm/client/base/base_jsns_initializer.rb +43 -12
  34. data/lib/zm/client/base/ldap_filter.rb +20 -5
  35. data/lib/zm/client/base/mailbox_infos_collection.rb +68 -0
  36. data/lib/zm/client/base/mailbox_object.rb +299 -0
  37. data/lib/zm/client/base/mailbox_prefs_collection.rb +75 -0
  38. data/lib/zm/client/base/object.rb +28 -62
  39. data/lib/zm/client/base/objects_builder.rb +4 -10
  40. data/lib/zm/client/base/objects_collection.rb +13 -10
  41. data/lib/zm/client/base/zimbra_attribute.rb +10 -8
  42. data/lib/zm/client/base/zimbra_attributes_collection.rb +154 -10
  43. data/lib/zm/client/base.rb +5 -5
  44. data/lib/zm/client/cluster/cluster.rb +43 -39
  45. data/lib/zm/client/cluster/cluster_config.rb +5 -5
  46. data/lib/zm/client/common/recipients.rb +3 -3
  47. data/lib/zm/client/common/token_metadata.rb +4 -1
  48. data/lib/zm/client/common/utils.rb +57 -0
  49. data/lib/zm/client/common.rb +2 -1
  50. data/lib/zm/client/connector/rest_account.rb +15 -28
  51. data/lib/zm/client/connector/soap_account.rb +38 -441
  52. data/lib/zm/client/connector/soap_admin.rb +16 -552
  53. data/lib/zm/client/connector/soap_base.rb +30 -21
  54. data/lib/zm/client/connector/soap_error.rb +1 -3
  55. data/lib/zm/client/constant.rb +21 -11
  56. data/lib/zm/client/contact/contact.rb +42 -83
  57. data/lib/zm/client/contact/contact_jsns_builder.rb +60 -0
  58. data/lib/zm/client/contact/contact_jsns_initializer.rb +78 -0
  59. data/lib/zm/client/contact/contact_member.rb +29 -28
  60. data/lib/zm/client/contact/contact_members_collection.rb +44 -0
  61. data/lib/zm/client/contact/contacts_builder.rb +8 -1
  62. data/lib/zm/client/contact/contacts_collection.rb +17 -1
  63. data/lib/zm/client/contact/group_contact_jsns_builder.rb +51 -0
  64. data/lib/zm/client/contact/mod_group_contact.rb +4 -67
  65. data/lib/zm/client/contact.rb +5 -1
  66. data/lib/zm/client/cos/cos.rb +35 -40
  67. data/lib/zm/client/cos/cos_accounts_collection.rb +19 -0
  68. data/lib/zm/client/cos/cos_domains_collection.rb +20 -0
  69. data/lib/zm/client/cos/cos_jsns_builder.rb +72 -0
  70. data/lib/zm/client/cos/cos_jsns_initializer.rb +29 -0
  71. data/lib/zm/client/cos/cos_servers_collection.rb +60 -0
  72. data/lib/zm/client/cos/coses_builder.rb +8 -1
  73. data/lib/zm/client/cos/coses_collection.rb +8 -5
  74. data/lib/zm/client/cos.rb +5 -0
  75. data/lib/zm/client/datasource/datasource.rb +69 -0
  76. data/lib/zm/client/datasource/datasource_jsns_builder.rb +32 -0
  77. data/lib/zm/client/datasource/datasource_jsns_initializer.rb +27 -0
  78. data/lib/zm/client/datasource/datasources_builder.rb +29 -0
  79. data/lib/zm/client/datasource/datasources_collection.rb +21 -0
  80. data/lib/zm/client/datasource.rb +7 -0
  81. data/lib/zm/client/distributionlist/distributionlist.rb +52 -118
  82. data/lib/zm/client/distributionlist/distributionlist_aces_collection.rb +31 -0
  83. data/lib/zm/client/distributionlist/distributionlist_aliases_collection.rb +53 -0
  84. data/lib/zm/client/distributionlist/distributionlist_jsns_builder.rb +82 -0
  85. data/lib/zm/client/distributionlist/distributionlist_jsns_initializer.rb +32 -0
  86. data/lib/zm/client/distributionlist/distributionlist_members_collection.rb +47 -0
  87. data/lib/zm/client/distributionlist/distributionlist_owners_collection.rb +52 -0
  88. data/lib/zm/client/distributionlist/distributionlists_builder.rb +8 -1
  89. data/lib/zm/client/distributionlist/distributionlists_collection.rb +8 -9
  90. data/lib/zm/client/distributionlist/dls_membership_collection.rb +4 -1
  91. data/lib/zm/client/distributionlist.rb +2 -0
  92. data/lib/zm/client/document/document.rb +27 -24
  93. data/lib/zm/client/document/document_jsns_builder.rb +18 -0
  94. data/lib/zm/client/document/document_jsns_initializer.rb +44 -0
  95. data/lib/zm/client/document/documents_builder.rb +6 -16
  96. data/lib/zm/client/document/documents_collection.rb +17 -67
  97. data/lib/zm/client/document.rb +2 -0
  98. data/lib/zm/client/domain/domain.rb +39 -55
  99. data/lib/zm/client/domain/domain_accounts_collection.rb +1 -1
  100. data/lib/zm/client/domain/domain_distributionlists_collection.rb +13 -0
  101. data/lib/zm/client/domain/domain_jsns_builder.rb +69 -0
  102. data/lib/zm/client/domain/domain_jsns_initializer.rb +25 -0
  103. data/lib/zm/client/domain/domain_resources_collection.rb +13 -0
  104. data/lib/zm/client/domain/domains_builder.rb +8 -1
  105. data/lib/zm/client/domain/domains_collection.rb +7 -7
  106. data/lib/zm/client/domain.rb +4 -0
  107. data/lib/zm/client/filter_rule.rb +7 -0
  108. data/lib/zm/client/filter_rules/filter_rule.rb +10 -0
  109. data/lib/zm/client/filter_rules/filter_rule_jsns_initializer.rb +24 -0
  110. data/lib/zm/client/filter_rules/filter_rules_builder.rb +21 -0
  111. data/lib/zm/client/filter_rules/filter_rules_collection.rb +21 -0
  112. data/lib/zm/client/filter_rules/outgoing_filter_rules_collection.rb +15 -0
  113. data/lib/zm/client/folder/folder.rb +77 -61
  114. data/lib/zm/client/folder/folder_grant.rb +34 -14
  115. data/lib/zm/client/folder/folder_grant_jsns_builder.rb +15 -4
  116. data/lib/zm/client/folder/folder_grants_collection.rb +36 -2
  117. data/lib/zm/client/folder/folder_jsns_builder.rb +22 -48
  118. data/lib/zm/client/folder/folder_jsns_initializer.rb +34 -17
  119. data/lib/zm/client/folder/folder_retention_policies_collection.rb +2 -3
  120. data/lib/zm/client/folder/folder_retention_policy.rb +0 -1
  121. data/lib/zm/client/folder/folders_builder.rb +7 -10
  122. data/lib/zm/client/folder/folders_collection.rb +5 -2
  123. data/lib/zm/client/folder/folders_jsns_builder.rb +3 -1
  124. data/lib/zm/client/folder/mod_document_folder.rb +10 -6
  125. data/lib/zm/client/folder.rb +1 -1
  126. data/lib/zm/client/identity/identities_builder.rb +8 -1
  127. data/lib/zm/client/identity/identities_collection.rb +2 -1
  128. data/lib/zm/client/identity/identity.rb +34 -42
  129. data/lib/zm/client/identity/identity_jsns_builder.rb +57 -0
  130. data/lib/zm/client/identity/identity_jsns_initializer.rb +29 -0
  131. data/lib/zm/client/identity.rb +3 -1
  132. data/lib/zm/client/license/license.rb +9 -22
  133. data/lib/zm/client/license/license_jsns_initializer.rb +20 -0
  134. data/lib/zm/client/license/licenses_collection.rb +3 -13
  135. data/lib/zm/client/license.rb +2 -1
  136. data/lib/zm/client/message/attachments_collection.rb +55 -0
  137. data/lib/zm/client/message/message.rb +36 -264
  138. data/lib/zm/client/message/message_flags.rb +107 -0
  139. data/lib/zm/client/message/message_jsns_builder.rb +85 -0
  140. data/lib/zm/client/message/message_jsns_initializer.rb +71 -0
  141. data/lib/zm/client/message/message_recipients.rb +59 -0
  142. data/lib/zm/client/message/messages_builder.rb +7 -18
  143. data/lib/zm/client/message/messages_collection.rb +17 -2
  144. data/lib/zm/client/message.rb +5 -0
  145. data/lib/zm/client/mountpoint/mountpoint.rb +43 -20
  146. data/lib/zm/client/mountpoint/mountpoint_jsns_builder.rb +8 -53
  147. data/lib/zm/client/mountpoint/mountpoint_jsns_initializer.rb +22 -13
  148. data/lib/zm/client/mountpoint/mountpoints_builder.rb +4 -5
  149. data/lib/zm/client/mountpoint/mountpoints_collection.rb +1 -2
  150. data/lib/zm/client/mta_queue/mta_queue.rb +13 -28
  151. data/lib/zm/client/mta_queue/mta_queue_jsns_builder.rb +41 -0
  152. data/lib/zm/client/mta_queue/mta_queue_jsns_initializer.rb +23 -0
  153. data/lib/zm/client/mta_queue/mta_queues_builder.rb +4 -8
  154. data/lib/zm/client/mta_queue/mta_queues_collection.rb +8 -27
  155. data/lib/zm/client/mta_queue.rb +2 -0
  156. data/lib/zm/client/mta_queue_item/mta_queue_item.rb +4 -31
  157. data/lib/zm/client/mta_queue_item/mta_queue_item_jsns_initializer.rb +33 -0
  158. data/lib/zm/client/mta_queue_item/mta_queue_items_builder.rb +4 -9
  159. data/lib/zm/client/mta_queue_item/mta_queue_items_collection.rb +7 -42
  160. data/lib/zm/client/mta_queue_item.rb +2 -1
  161. data/lib/zm/client/resource/resource.rb +24 -91
  162. data/lib/zm/client/resource/resource_jsns_builder.rb +79 -0
  163. data/lib/zm/client/resource/resource_jsns_initializer.rb +29 -0
  164. data/lib/zm/client/resource/resources_builder.rb +8 -1
  165. data/lib/zm/client/resource/resources_collection.rb +9 -7
  166. data/lib/zm/client/resource.rb +2 -0
  167. data/lib/zm/client/search_folder/search_folder.rb +38 -16
  168. data/lib/zm/client/search_folder/search_folder_jsns_builder.rb +38 -19
  169. data/lib/zm/client/search_folder/search_folder_jsns_initializer.rb +17 -13
  170. data/lib/zm/client/search_folder/search_folders_builder.rb +0 -1
  171. data/lib/zm/client/search_folder/search_folders_collection.rb +2 -1
  172. data/lib/zm/client/server/server.rb +16 -488
  173. data/lib/zm/client/server/server_jsns_initializer.rb +16 -0
  174. data/lib/zm/client/server/servers_builder.rb +8 -1
  175. data/lib/zm/client/server/servers_collection.rb +13 -5
  176. data/lib/zm/client/server.rb +1 -0
  177. data/lib/zm/client/share/share.rb +5 -43
  178. data/lib/zm/client/share/share_jsns_initializer.rb +32 -0
  179. data/lib/zm/client/share/share_mountpoints_collection.rb +38 -0
  180. data/lib/zm/client/share/shares_builder.rb +8 -1
  181. data/lib/zm/client/share/shares_collection.rb +11 -16
  182. data/lib/zm/client/share.rb +2 -0
  183. data/lib/zm/client/signature/signature.rb +25 -29
  184. data/lib/zm/client/signature/signature_jsns_builder.rb +31 -13
  185. data/lib/zm/client/signature/signature_jsns_initializer.rb +16 -12
  186. data/lib/zm/client/signature/signatures_builder.rb +1 -2
  187. data/lib/zm/client/signature/signatures_collection.rb +2 -1
  188. data/lib/zm/client/signature.rb +1 -1
  189. data/lib/zm/client/soap_request/account_soap_constants.rb +76 -0
  190. data/lib/zm/client/soap_request/admin_soap_constants.rb +214 -0
  191. data/lib/zm/client/soap_request/mail_soap_constants.rb +162 -0
  192. data/lib/zm/client/soap_request/soap_constants.rb +55 -0
  193. data/lib/zm/client/soap_request/soap_context.rb +38 -0
  194. data/lib/zm/client/soap_request/soap_element.rb +90 -0
  195. data/lib/zm/client/soap_request.rb +8 -0
  196. data/lib/zm/client/tag/account_object_tags_collection.rb +65 -0
  197. data/lib/zm/client/tag/tag.rb +34 -22
  198. data/lib/zm/client/tag/tag_jsns_builder.rb +14 -35
  199. data/lib/zm/client/tag/tag_jsns_initializer.rb +4 -6
  200. data/lib/zm/client/tag/tags_builder.rb +0 -1
  201. data/lib/zm/client/tag/tags_collection.rb +2 -1
  202. data/lib/zm/client/tag.rb +1 -0
  203. data/lib/zm/client/task/task.rb +18 -49
  204. data/lib/zm/client/task/task_jsns_initializer.rb +45 -0
  205. data/lib/zm/client/task/tasks_builder.rb +6 -16
  206. data/lib/zm/client/task/tasks_collection.rb +29 -0
  207. data/lib/zm/client/task.rb +1 -0
  208. data/lib/zm/client/upload/upload.rb +26 -30
  209. data/lib/zm/client/version.rb +3 -3
  210. data/lib/zm/client.rb +4 -1
  211. data/lib/zm/modules/base.rb +10 -0
  212. data/lib/zm/modules/belongs_to_folder.rb +37 -0
  213. data/lib/zm/modules/belongs_to_tag.rb +11 -0
  214. data/lib/zm/modules/common/zimbra-attrs.json +1 -1
  215. data/lib/zm/modules/has_soap_admin_connector.rb +12 -0
  216. data/lib/zm/modules/inspector.rb +24 -0
  217. data/lib/zm/modules/missing_method_static_collection.rb +13 -0
  218. data/lib/zm/modules/zm_logger.rb +3 -1
  219. data/lib/zm/modules/zm_model.rb +4 -2
  220. data/lib/zm/utils/thread_pool.rb +4 -2
  221. data/lib/zm-ruby-client.rb +2 -0
  222. data/zm-ruby-client.gemspec +12 -9
  223. metadata +93 -34
  224. data/lib/zm/client/base/account_object.rb +0 -51
  225. data/lib/zm/client/base/admin_object.rb +0 -51
  226. data/lib/zm/client/base/folder_object.rb +0 -41
  227. data/lib/zm/client/config.rb +0 -12
  228. data/lib/zm/client/data_source.rb +0 -5
  229. data/lib/zm/modules/common/account_common.rb +0 -71
  230. data/lib/zm/modules/common/cos_common.rb +0 -463
  231. data/lib/zm/modules/common/dl_common.rb +0 -38
  232. data/lib/zm/modules/common/identity_common.rb +0 -19
  233. data/lib/zm/modules/common/resource_common.rb +0 -59
  234. data/lib/zm/modules/common/signature_common.rb +0 -16
  235. data/lib/zm/modules/common/zimbra-attrs.json.bak +0 -1
  236. data/test/accounts.rb +0 -89
  237. data/test/ace.rb +0 -50
  238. data/test/cluster.rb +0 -41
  239. data/test/cluster_config.rb +0 -30
  240. data/test/cluster_zimbra_attributes.rb +0 -38
  241. data/test/coses.rb +0 -26
  242. data/test/domains.rb +0 -70
  243. data/test/folder.rb +0 -125
  244. data/test/folder_grant.rb +0 -51
  245. data/test/mountpoint.rb +0 -49
  246. data/test/retention_policies.rb +0 -40
  247. data/test/search_folder.rb +0 -67
  248. data/test/signature.rb +0 -53
  249. data/test/tag.rb +0 -65
  250. data/test/zimbra_attributes.rb +0 -35
@@ -1,74 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GroupContact
4
- def init_members_from_json(m)
5
- return if m.nil?
6
-
7
- @members = m.map { |m| Zm::Client::ConcatMember.new(m[:type], m[:value]) }
8
- end
9
-
10
- def create!
11
- rep = @parent.sacc.create_group_contact(@parent.token, l, construct_soap_attrs, construct_soap_node_members)
12
- init_from_json(rep[:Body][:CreateContactResponse][:cn].first)
13
- end
14
-
15
- def modify!
16
- @parent.sacc.modify_group_contact(@parent.token, id, construct_soap_attrs, construct_soap_node_members)
17
- end
18
-
19
- def construct_soap_attrs
20
- [[:nickname, @name], [:fullname, @name], [:fileAs, "8:#{@name}"], %i[type group]]
21
- end
22
-
23
- def add_contacts(contacts)
24
- contacts = [contacts] unless contacts.is_a?(Array)
25
- new_members = contacts.map { |c| add_member_by_value(c.id) }
26
- add_members(new_members)
27
- end
28
-
29
- def add_members(new_members)
30
- new_members = [new_members] unless new_members.is_a?(Array)
31
- @members += new_members
32
- end
33
-
34
- def add_members_by_values(member_values)
35
- member_values = [member_values] unless member_values.is_a?(Array)
36
- current_member_values = @members.map(&:value)
37
- member_values.reject! { |value| current_member_values.include?(value) }
38
- member_values.each { |value| add_member_by_value(value) }
39
- end
40
-
41
- def add_member_by_value(value)
42
- @members << Zm::Client::ConcatMember.init_by_value(value)
43
- end
44
-
45
- def delete_members(del_members)
46
- del_members = [del_members] unless del_members.is_a?(Array)
47
- @members -= del_members
48
- end
49
-
50
- def del_members_by_values(member_values)
51
- member_values = [member_values] unless member_values.is_a?(Array)
52
- @members.delete_if { |m| member_values.include?(m.value) }
53
- end
54
-
55
- def ldap_members
56
- return [] if @members.nil?
57
-
58
- @members.select(&:ldap?)
59
- end
60
-
61
- def has_ldap_members?
62
- ldap_members.any?
4
+ def members
5
+ @members ||= Zm::Client::ContactMembersCollection.new(self)
63
6
  end
64
7
 
65
- def construct_soap_node_members
66
- if recorded?
67
- (old_members - @members).each(&:remove!)
68
- (@members - old_members).each(&:add!)
69
- (old_members + @members).uniq.reject { |m| m.op.nil? }.map(&:construct_soap_node)
70
- else
71
- @members.map(&:construct_soap_node)
72
- end
8
+ def jsns_builder
9
+ @jsns_builder ||= Zm::Client::GroupContactJsnsBuilder.new(self)
73
10
  end
74
11
  end
@@ -1,7 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'zm/client/contact/contact'
4
+ require 'zm/client/contact/contact_members_collection'
5
+ require 'zm/client/contact/mod_group_contact'
6
+ require 'zm/client/contact/contact_jsns_initializer'
7
+ require 'zm/client/contact/contact_jsns_builder'
8
+ require 'zm/client/contact/group_contact_jsns_builder'
4
9
  require 'zm/client/contact/contact_member'
5
10
  require 'zm/client/contact/contacts_builder'
6
11
  require 'zm/client/contact/contacts_collection'
7
- require 'zm/client/contact/mod_group_contact'
@@ -1,67 +1,62 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'zm/modules/common/cos_common'
4
3
  module Zm
5
4
  module Client
6
5
  # objectClass: zimbraCos
7
- class Cos < Base::AdminObject
8
- def initialize(parent)
9
- extend(CosCommon)
10
- super(parent)
11
- end
6
+ class Cos < Base::Object
7
+ include HasSoapAdminConnector
12
8
 
13
- def init_from_json(json)
14
- super(json)
15
- @zimbraMailHostPool = [@zimbraMailHostPool] if @zimbraMailHostPool.is_a?(String)
16
- @zimbraZimletAvailableZimlets = [@zimbraZimletAvailableZimlets] if @zimbraZimletAvailableZimlets.is_a?(String)
9
+ def modify!
10
+ sac.invoke(jsns_builder.to_update)
11
+ true
17
12
  end
18
13
 
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
14
+ def update!(hash)
15
+ return false if hash.delete_if { |k, v| v.nil? || !respond_to?(k) }.empty?
24
16
 
25
- def all_instance_variable_keys
26
- attrs_write
27
- end
28
-
29
- def duplicate(attrs = {})
30
- # n = clone
31
- # attrs.each{|k,v| n.instance_variable_set(k, v) }
32
- # n.id = nil
33
- # n.zimbraId = nil
34
- # n
35
- end
17
+ do_update!(hash)
36
18
 
37
- def modify!
38
- sac.modify_cos(id, instance_variables_array(attrs_write))
39
- end
19
+ hash.each do |key, value|
20
+ update_attribute(key, value)
21
+ end
40
22
 
41
- def delete!
42
- sac.delete_cos(id)
23
+ true
43
24
  end
44
25
 
45
26
  def create!
46
- rep = sac.create_cos(name, instance_variables_array(attrs_write))
47
- @id = rep[:Body][:CreateCosResponse][:cos].first[:id]
27
+ resp = sac.invoke(jsns_builder.to_create)
28
+
29
+ @id = resp[:CreateCosResponse][:cos].first[:id]
48
30
  end
49
31
 
50
32
  def servers
51
- @servers ||= read_servers
33
+ @servers ||= CosServersCollection.new(self)
34
+ end
35
+
36
+ def domains
37
+ return if @id.nil?
38
+
39
+ @domains ||= CosDomainsCollection.new(self)
52
40
  end
53
41
 
54
42
  def accounts
55
- # TODO: sélectionner tous les comptes qui ont zimbraCOSID=self.id
43
+ return if @id.nil?
44
+
45
+ @accounts ||= CosAccountsCollection.new(self)
46
+ end
47
+
48
+ def attrs_write
49
+ @parent.zimbra_attributes.all_cos_attrs_writable_names
56
50
  end
57
51
 
58
52
  private
59
53
 
60
- def read_servers
61
- sc = ServersCollection.new self
62
- @zimbraMailHostPool.map do |server_id|
63
- sc.find_by id: server_id
64
- end
54
+ def do_update!(hash)
55
+ sac.invoke(jsns_builder.to_patch(hash))
56
+ end
57
+
58
+ def jsns_builder
59
+ @jsns_builder ||= CosJsnsBuilder.new(self)
65
60
  end
66
61
  end
67
62
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # Collection Accounts from cos
6
+ class CosAccountsCollection < AccountsCollection
7
+ def build_response
8
+ ldap_filter.add(default_ldap_filter)
9
+
10
+ super
11
+ end
12
+
13
+ def default_ldap_filter
14
+ domain_filter = @parent.domains.all.map { |domain| "(zimbraMailDeliveryAddress=*@#{domain.name})" }.join
15
+ "(|(zimbraCOSId=#{@parent.id})(&(!(zimbraCOSId=*))(|#{domain_filter})))"
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # Collection Domains for cos
6
+ class CosDomainsCollection < DomainsCollection
7
+ def initialize(parent)
8
+ super(parent)
9
+
10
+ @default_ldap_filter = "(zimbraDomainDefaultCOSId=#{@parent.id})"
11
+ end
12
+
13
+ def build_response
14
+ ldap_filter.add(@default_ldap_filter)
15
+
16
+ super
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class for cos jsns builder
6
+ class CosJsnsBuilder
7
+ def initialize(item)
8
+ @item = item
9
+ end
10
+
11
+ def to_create
12
+ soap_request = SoapElement.admin(SoapAdminConstants::CREATE_COS_REQUEST)
13
+ node_cos = SoapElement.create(SoapConstants::NAME).add_content(@item.name)
14
+ soap_request.add_node(node_cos)
15
+
16
+ attrs_only_set_h.each do |key, values|
17
+ values.each do |value|
18
+ node_attr = SoapElement.create(SoapConstants::A).add_attribute(SoapConstants::N, key).add_content(value)
19
+ soap_request.add_node(node_attr)
20
+ end
21
+ end
22
+
23
+ soap_request
24
+ end
25
+
26
+ def to_update
27
+ soap_request = SoapElement.admin(SoapAdminConstants::MODIFY_COS_REQUEST)
28
+ node_cos = SoapElement.create(SoapConstants::ID).add_content(@item.id)
29
+ soap_request.add_node(node_cos)
30
+
31
+ attrs_only_set_h.each do |key, values|
32
+ values.each do |value|
33
+ node_attr = SoapElement.create(SoapConstants::A).add_attribute(SoapConstants::N, key).add_content(value)
34
+ soap_request.add_node(node_attr)
35
+ end
36
+ end
37
+
38
+ soap_request
39
+ end
40
+
41
+ def to_patch(hash)
42
+ soap_request = SoapElement.admin(SoapAdminConstants::MODIFY_COS_REQUEST)
43
+ node_cos = SoapElement.create(SoapConstants::ID).add_content(@item.id)
44
+ soap_request.add_node(node_cos)
45
+
46
+ hash.each do |key, values|
47
+ values = [values] unless values.is_a?(Array)
48
+ values.each do |value|
49
+ node_attr = SoapElement.create(SoapConstants::A).add_attribute(SoapConstants::N, key).add_content(value)
50
+ soap_request.add_node(node_attr)
51
+ end
52
+ end
53
+
54
+ soap_request
55
+ end
56
+
57
+ def attrs_only_set_h
58
+ selected_attrs = @item.attrs_write.map { |a| Utils.arrow_name_sym(a) }
59
+ attrs_only_set = @item.instance_variables & selected_attrs
60
+
61
+ arr = attrs_only_set.map do |name|
62
+ n = name.to_s[1..]
63
+ values = @item.instance_variable_get(name)
64
+ values = [values] unless values.is_a?(Array)
65
+ [n, values]
66
+ end
67
+
68
+ Hash[arr]
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class for initialize cos
6
+ class CosJsnsInitializer < Base::BaseJsnsInitializer
7
+ class << self
8
+ def create(parent, json)
9
+ item = Cos.new(parent)
10
+
11
+ update(item, json)
12
+ end
13
+
14
+ def update(item, json)
15
+ item = super(item, json)
16
+
17
+ case item.zimbraMailHostPool
18
+ when String
19
+ item.zimbraMailHostPool = [item.zimbraMailHostPool]
20
+ when NilClass
21
+ item.zimbraMailHostPool = []
22
+ end
23
+
24
+ item
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # Collection Servers from cos
6
+ class CosServersCollection
7
+ def initialize(parent)
8
+ @parent = parent
9
+ end
10
+
11
+ def all
12
+ @all || all!
13
+ end
14
+
15
+ def all!
16
+ @all = @parent.zimbraMailHostPool.map do |server_id|
17
+ servers_collection.find_by(id: server_id)
18
+ end
19
+ end
20
+
21
+ def add!(*servers)
22
+ server_ids = server_ids(servers)
23
+ server_ids.delete_if { |id| @parent.zimbraMailHostPool.include?(id) }
24
+ return false if server_ids.empty?
25
+
26
+ payload = { zimbraMailHostPool: @parent.zimbraMailHostPool + server_ids }
27
+ return false unless @parent.update!(payload)
28
+
29
+ @parent.zimbraMailHostPool += server_ids
30
+ true
31
+ end
32
+
33
+ def remove!(*servers)
34
+ server_ids = server_ids(servers)
35
+ server_ids.delete_if { |id| !@parent.zimbraMailHostPool.include?(id) }
36
+ return false if server_ids.empty?
37
+
38
+ payload = { zimbraMailHostPool: @parent.zimbraMailHostPool - server_ids }
39
+ return false unless @parent.update!(payload)
40
+
41
+ @parent.zimbraMailHostPool += server_ids
42
+ true
43
+ end
44
+
45
+ private
46
+
47
+ def server_ids(servers)
48
+ servers.select! { |server| server.is_a?(Zm::Client::Server) }
49
+ ids = servers.map(&:id)
50
+ ids.compact!
51
+ ids.uniq!
52
+ ids
53
+ end
54
+
55
+ def servers_collection
56
+ @servers_collection ||= ServersCollection.new(@parent)
57
+ end
58
+ end
59
+ end
60
+ end
@@ -6,9 +6,16 @@ module Zm
6
6
  class CosesBuilder < Base::ObjectsBuilder
7
7
  def initialize(parent, json)
8
8
  super(parent, json)
9
- @child_class = Cos
10
9
  @json_item_key = :cos
11
10
  end
11
+
12
+ def make
13
+ return [] if json_items.nil?
14
+
15
+ json_items.map do |entry|
16
+ CosJsnsInitializer.create(@parent, entry)
17
+ end
18
+ end
12
19
  end
13
20
  end
14
21
  end
@@ -8,15 +8,18 @@ module Zm
8
8
  @child_class = Cos
9
9
  @builder_class = CosesBuilder
10
10
  @search_type = SearchType::COS
11
- @parent = parent
11
+ super(parent)
12
12
  end
13
13
 
14
- def find_by(hash)
15
- rep = sac.get_cos(hash.values.first, hash.keys.first, attrs_comma)
16
- entry = rep[:Body][:GetCosResponse][:cos].first
14
+ def find_by!(hash)
15
+ soap_request = SoapElement.admin(SoapAdminConstants::GET_COS_REQUEST)
16
+ node_cos = SoapElement.create(SoapConstants::COS).add_attribute(SoapConstants::BY, hash.keys.first).add_content(hash.values.first)
17
+ soap_request.add_node(node_cos)
18
+ soap_request.add_attribute(SoapConstants::ATTRS, attrs_comma)
19
+ entry = sac.invoke(soap_request)[:GetCosResponse][:cos].first
17
20
 
18
21
  reset_query_params
19
- build_from_entry(entry)
22
+ CosJsnsInitializer.create(@parent, entry)
20
23
  end
21
24
 
22
25
  private
data/lib/zm/client/cos.rb CHANGED
@@ -1,5 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'zm/client/cos/cos'
4
+ require 'zm/client/cos/cos_jsns_initializer'
5
+ require 'zm/client/cos/cos_jsns_builder'
4
6
  require 'zm/client/cos/coses_builder'
5
7
  require 'zm/client/cos/coses_collection'
8
+ require 'zm/client/cos/cos_servers_collection'
9
+ require 'zm/client/cos/cos_domains_collection'
10
+ require 'zm/client/cos/cos_accounts_collection'
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class account data source
6
+ class DataSource < Base::Object
7
+ TYPES = %i[cal caldav yab gal imap pop3 rss unknown]
8
+
9
+ attr_accessor :a, :cconnectionType, :cdefaultSignature, :cemailAddress, :cfailingSince,
10
+ :cforwardReplySignature, :cfromDisplay, :chost, :cid, :cimportClass, :cimportOnly,
11
+ :cisEnabled, :cl, :clientId, :clientSecret, :cname, :connectionType, :cpassword,
12
+ :cpollingInterval, :cport, :crefreshToken, :crefreshTokenUrl, :creplyToAddress,
13
+ :creplyToDisplay, :csmtpAuthRequired, :csmtpConnectionType, :csmtpEnabled, :csmtpHost,
14
+ :csmtpPassword, :csmtpPort, :csmtpUsername, :cuseAddressForForwardReply, :cusername,
15
+ :defaultSignature, :emailAddress, :failingSince, :forwardReplySignature, :fromDisplay,
16
+ :host, :id, :importClass, :importOnly, :isEnabled, :l, :lastError, :leaveOnServer, :name,
17
+ :oauthToken, :password, :pollingInterval, :port, :refreshToken, :refreshTokenUrl,
18
+ :replyToAddress, :replyToDisplay, :smtpAuthRequired, :smtpConnectionType, :smtpEnabled,
19
+ :smtpHost, :smtpPassword, :smtpPort, :smtpUsername, :test, :useAddressForForwardReply, :username,
20
+ :type
21
+
22
+ def initialize(parent, data_source_type)
23
+ @type = data_source_type
24
+ super(parent)
25
+ end
26
+
27
+ def create!
28
+ raise NotImplementedError
29
+ end
30
+
31
+ def modify!
32
+ raise NotImplementedError
33
+ end
34
+
35
+ def update!(hash)
36
+ return false if hash.delete_if { |k, v| v.nil? || !respond_to?(k) }.empty?
37
+
38
+ do_update!(hash)
39
+
40
+ hash.each do |key, value|
41
+ update_attribute(key, value)
42
+ end
43
+
44
+ true
45
+ end
46
+
47
+ def rename!(new_name)
48
+ raise NotImplementedError
49
+ end
50
+
51
+ def delete!
52
+ return false if @id.nil?
53
+
54
+ @parent.sacc.invoke(jsns_builder.to_delete)
55
+ @id = nil
56
+ end
57
+
58
+ private
59
+
60
+ def do_update!(hash)
61
+ @parent.sacc.invoke(jsns_builder.to_patch(hash))
62
+ end
63
+
64
+ def jsns_builder
65
+ @jsns_builder ||= DataSourceJsnsBuilder.new(self)
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class for account data source jsns builder
6
+ class DataSourceJsnsBuilder
7
+ def initialize(item)
8
+ @item = item
9
+ end
10
+
11
+ def to_patch(hash)
12
+ attrs = {
13
+ id: @item.id
14
+ }.merge(hash)
15
+
16
+ attrs.reject! { |_, v| v.nil? }
17
+
18
+ soap_request = SoapElement.mail(SoapMailConstants::MODIFY_DATA_SOURCE_REQUEST)
19
+ node_action = SoapElement.create(@item.type).add_attributes(attrs)
20
+ soap_request.add_node(node_action)
21
+ soap_request
22
+ end
23
+
24
+ def to_delete
25
+ soap_request = SoapElement.mail(SoapMailConstants::DELETE_DATA_SOURCE_REQUEST)
26
+ node_action = SoapElement.create(@item.type).add_attributes(id: @item.id)
27
+ soap_request.add_node(node_action)
28
+ soap_request
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class for initialize account data source
6
+ class DataSourceJsnsInitializer
7
+ class << self
8
+ def create(parent, data_source_type, json)
9
+ item = DataSource.new(parent, data_source_type)
10
+ update(item, json)
11
+ end
12
+
13
+ def update(item, json)
14
+ json.each do |k, v|
15
+ setter_method = "#{k}=".to_sym
16
+
17
+ if item.respond_to?(setter_method)
18
+ item.send(setter_method, v)
19
+ end
20
+ end
21
+
22
+ item
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class factory [datasources]
6
+ class DataSourceBuilder < Base::ObjectsBuilder
7
+ def make
8
+ return [] if json_items.nil?
9
+
10
+ ds = []
11
+ json_items.each do |data_source_type, entries|
12
+ next unless DataSource::TYPES.include?(data_source_type)
13
+
14
+ entries.each do |entry|
15
+ ds << DataSourceJsnsInitializer.create(@parent, data_source_type, entry)
16
+ end
17
+ end
18
+
19
+ ds
20
+ end
21
+
22
+ private
23
+
24
+ def json_items
25
+ @json_items ||= @json[json_key]
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # collection account data sources
6
+ class DataSourcesCollection < Base::AccountObjectsCollection
7
+ def initialize(parent)
8
+ @child_class = DataSource
9
+ @builder_class = DataSourceBuilder
10
+ super(parent)
11
+ end
12
+
13
+ private
14
+
15
+ def make_query
16
+ soap_request = SoapElement.mail(SoapMailConstants::GET_DATA_SOURCES_REQUEST)
17
+ @parent.sacc.invoke(soap_request)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'zm/client/datasource/datasource'
4
+ require 'zm/client/datasource/datasource_jsns_initializer'
5
+ require 'zm/client/datasource/datasource_jsns_builder'
6
+ require 'zm/client/datasource/datasources_builder'
7
+ require 'zm/client/datasource/datasources_collection'