zm-ruby-client 0.18.3 → 2.0.2

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 (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 -319
  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 +88 -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 +14 -4
  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 +25 -5
  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 +45 -68
  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 -21
  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 +33 -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'