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,136 +1,70 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'zm/modules/common/dl_common'
3
+ require 'zm/client/distributionlist/distributionlist_aliases_collection'
4
+ require 'zm/client/distributionlist/distributionlist_members_collection'
5
+ require 'zm/client/distributionlist/distributionlist_owners_collection'
6
+ require 'zm/client/distributionlist/distributionlist_aces_collection'
7
+
4
8
  module Zm
5
9
  module Client
6
10
  # objectClass: zimbraDistributionList
7
- class DistributionList < Base::AdminObject
8
- attr_accessor :members
9
- attr_reader :owners, :aces
11
+ class DistributionList < Base::Object
12
+ include HasSoapAdminConnector
13
+
14
+ def aliases
15
+ @aliases ||= DistributionListAliasesCollection.new(self)
16
+ end
10
17
 
11
- def initialize(parent)
12
- extend(DistributionListCommon)
13
- super(parent)
14
- @members = []
15
- @owners = []
16
- @aces = []
17
- @grantee_type = 'grp'.freeze
18
+ def members
19
+ @members ||= DistributionListMembersCollection.new(self)
18
20
  end
19
21
 
20
- def domain_name
21
- @domain_name ||= @name.split('@').last
22
+ def owners
23
+ @owners ||= DistributionListOwnersCollection.new(self)
22
24
  end
23
25
 
24
- def all_instance_variable_keys
25
- DistributionListCommon::ALL_ATTRS
26
+ def memberships
27
+ @memberships ||= DlsMembershipCollection.new(self)
26
28
  end
27
29
 
28
- def init_from_json(json)
29
- # puts json
30
- # @members = json[:a].select { |a| a[:n] == 'zimbraMailForwardingAddress' }.map { |a| a[:_content] }.compact
31
- @members = json[:dlm].map { |a| a[:_content] }.compact if json[:dlm].is_a?(Array)
32
- @owners = json[:owners].first[:owner].map { |a| a[:name] }.compact if json[:owners].is_a?(Array)
33
- super(json)
34
- @zimbraMailAlias = [@zimbraMailAlias].compact unless @zimbraMailAlias.is_a?(Array)
35
- @zimbraMailAlias.delete(@name)
36
- @aliases = @zimbraMailAlias
37
- set_aces_from_json
30
+ def aces
31
+ @aces ||= DistributionListAcesCollection.new(self)
38
32
  end
39
33
 
40
34
  def create!
41
- rep = sac.create_distribution_list(
42
- @name,
43
- instance_variables_array(attrs_write)
44
- )
45
- @id = rep[:Body][:CreateDistributionListResponse][:dl].first[:id]
35
+ resp = sac.invoke(jsns_builder.to_create)
36
+ @id = resp[:CreateDistributionListResponse][:dl].first[:id]
46
37
  end
47
38
 
48
39
  def modify!
49
- attrs_to_modify = instance_variables_array(attrs_write)
50
- return if attrs_to_modify.empty?
51
-
52
- sac.modify_distribution_list(@id, attrs_to_modify)
40
+ sac.invoke(jsns_builder.to_update)
41
+ true
53
42
  end
54
43
 
55
44
  def update!(hash)
56
- sac.modify_distribution_list(@id, hash)
45
+ return false if hash.delete_if { |k, v| v.nil? || !respond_to?(k) }.empty?
57
46
 
58
- hash.each do |k, v|
59
- arrow_attr_sym = "@#{k}".to_sym
47
+ do_update!(hash)
60
48
 
61
- if v.respond_to?(:empty?) && v.empty?
62
- self.remove_instance_variable(arrow_attr_sym) if self.instance_variable_get(arrow_attr_sym)
63
- else
64
- self.instance_variable_set(arrow_attr_sym, v)
65
- end
49
+ hash.each do |key, value|
50
+ update_attribute(key, value)
66
51
  end
67
- end
68
52
 
69
- def aliases
70
- @aliases ||= []
71
- end
72
-
73
- def add_alias!(email)
74
- sac.add_distribution_list_alias(@id, email)
75
- aliases.push(email)
76
- end
77
-
78
- def remove_alias!(email)
79
- sac.remove_distribution_list_alias(@id, email)
80
- aliases.delete(email)
53
+ true
81
54
  end
82
55
 
83
- def rename!(email)
84
- sac.rename_distribution_list(@id, email)
85
- @name = email
56
+ def rename!(new_name)
57
+ sac.invoke(jsns_builder.to_rename(new_name))
58
+ @name = new_name
86
59
  end
87
60
 
88
61
  def delete!
89
- sac.delete_distribution_list(@id)
90
- end
91
-
92
- def add_members!(*emails)
93
- sac.add_distribution_list_members(@id, emails)
94
- @members += emails
95
- end
96
-
97
- def remove_members!(*emails)
98
- sac.remove_distribution_list_members(@id, emails)
99
- @members -= emails
100
- end
101
-
102
- def add_owners!(*emails)
103
- sac.distribution_list_action(
104
- @id,
105
- :id,
106
- {
107
- op: 'addOwners',
108
- owner: emails.map do |email|
109
- { by: :name, type: :usr, _content: email }
110
- end
111
- }
112
- )
113
-
114
- @owners += emails
115
- end
116
-
117
- def remove_owners!(*emails)
118
- sac.distribution_list_action(
119
- @id,
120
- :id,
121
- {
122
- op: 'removeOwners',
123
- owner: emails.map do |email|
124
- { by: :name, type: :usr, _content: email }
125
- end
126
- }
127
- )
128
-
129
- @owners -= emails
62
+ sac.invoke(jsns_builder.to_delete)
63
+ @id = nil
130
64
  end
131
65
 
132
66
  def local_transport
133
- raise Zm::Client::SoapError, 'zimbraMailHost is null' if zimbraMailHost.nil?
67
+ raise Zm::Client::ZmError, 'zimbraMailHost is null' if zimbraMailHost.nil?
134
68
 
135
69
  "lmtp:#{zimbraMailHost}:7025"
136
70
  end
@@ -139,42 +73,42 @@ module Zm
139
73
  update!(zimbraMailTransport: local_transport)
140
74
  end
141
75
 
142
- def is_local_transport?
76
+ def local_transport?
143
77
  return nil unless zimbraMailTransport
144
78
 
145
- zimbraMailTransport.start_with?('lmtp')
79
+ zimbraMailTransport.start_with?(SoapConstants::LMTP)
146
80
  end
147
81
 
148
- def is_external_transport?
82
+ def external_transport?
149
83
  return nil unless zimbraMailTransport
150
84
 
151
- zimbraMailTransport.start_with?('smtp')
152
- end
153
-
154
- def memberships
155
- @memberships ||= DlsMembershipCollection.new(self)
85
+ zimbraMailTransport.start_with?(SoapConstants::SMTP)
156
86
  end
157
87
 
158
88
  def hide_in_gal?
159
- zimbraHideInGal == 'TRUE'
89
+ zimbraHideInGal == SoapConstants::TRUE
160
90
  end
161
91
 
162
92
  def group?
163
- zimbraMailStatus == 'disabled'
93
+ zimbraMailStatus == SoapConstants::DISABLED
164
94
  end
165
95
 
166
96
  def mailing_list?
167
- zimbraMailStatus == 'enabled'
97
+ zimbraMailStatus == SoapConstants::ENABLED
98
+ end
99
+
100
+ def attrs_write
101
+ @parent.zimbra_attributes.all_distributionlist_attrs_writable_names
168
102
  end
169
103
 
170
- def set_aces_from_json
171
- return if @zimbraACE.nil?
104
+ private
172
105
 
173
- zimbra_aces = @zimbraACE.is_a?(Array) ? @zimbraACE : [@zimbraACE]
174
- @aces = zimbra_aces.map do |str|
175
- parts = str.split(/\s+/)
176
- { zimbra_id: parts[0], type: parts[1], right: parts[2] }
177
- end
106
+ def do_update!(hash)
107
+ sac.invoke(jsns_builder.to_patch(hash))
108
+ end
109
+
110
+ def jsns_builder
111
+ @jsns_builder ||= DistributionListJsnsBuilder.new(self)
178
112
  end
179
113
  end
180
114
  end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ DistributionListAce = Struct.new(:zimbra_id, :type, :right)
6
+
7
+ # Collection Account Aliases
8
+ class DistributionListAcesCollection
9
+ include MissingMethodStaticCollection
10
+
11
+ def initialize(parent)
12
+ @parent = parent
13
+ @all = []
14
+ build_aces
15
+ end
16
+
17
+ private
18
+
19
+ def build_aces
20
+ return if @parent.zimbraACE.nil?
21
+
22
+ zimbra_aces = @parent.zimbraACE.is_a?(Array) ? @parent.zimbraACE : [@parent.zimbraACE]
23
+
24
+ @all = zimbra_aces.map do |str|
25
+ parts = str.split(/\s+/)
26
+ DistributionListAce.new(parts[0], parts[1], parts[2])
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # Collection Account Aliases
6
+ class DistributionListAliasesCollection
7
+ include MissingMethodStaticCollection
8
+
9
+ def initialize(parent)
10
+ @parent = parent
11
+ @all = []
12
+ build_aliases
13
+ end
14
+
15
+ def add!(email)
16
+ return false if @all.include?(Utils.format_email(email))
17
+
18
+ soap_request = SoapElement.admin(SoapAdminConstants::ADD_DISTRIBUTION_LIST_ALIAS_REQUEST)
19
+ soap_request.add_attributes({ id: @parent.id, alias: email })
20
+ @parent.sac.invoke(soap_request)
21
+
22
+ @all.push(email)
23
+ true
24
+ end
25
+
26
+ def remove!(email)
27
+ return false unless @all.include?(Utils.format_email(email))
28
+
29
+ soap_request = SoapElement.admin(SoapAdminConstants::REMOVE_DISTRIBUTION_LIST_ALIAS_REQUEST)
30
+ soap_request.add_attributes({ id: @parent.id, alias: email })
31
+ @parent.sac.invoke(soap_request)
32
+
33
+ @all.delete(email)
34
+ true
35
+ end
36
+
37
+ private
38
+
39
+ def build_aliases
40
+ return if @parent.zimbraMailAlias.nil?
41
+
42
+ case @parent.zimbraMailAlias
43
+ when Array
44
+ @all += @parent.zimbraMailAlias
45
+ when String
46
+ @all.push(@parent.zimbraMailAlias)
47
+ end
48
+
49
+ @all.delete(@parent.name)
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class for distribution list jsns builder
6
+ class DistributionListJsnsBuilder
7
+ def initialize(item)
8
+ @item = item
9
+ end
10
+
11
+ def to_create
12
+ soap_request = SoapElement.admin(SoapAdminConstants::CREATE_DISTRIBUTION_LIST_REQUEST).add_attribute(
13
+ SoapConstants::NAME, @item.name
14
+ )
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_DISTRIBUTION_LIST_REQUEST).add_attribute(
28
+ SoapConstants::ID, @item.id
29
+ )
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_DISTRIBUTION_LIST_REQUEST).add_attribute(
43
+ SoapConstants::ID, @item.id
44
+ )
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 to_delete
58
+ SoapElement.admin(SoapAdminConstants::DELETE_DISTRIBUTION_LIST_REQUEST).add_attribute(SoapConstants::ID,
59
+ @item.id)
60
+ end
61
+
62
+ def to_rename(new_name)
63
+ SoapElement.admin(SoapAdminConstants::RENAME_DISTRIBUTION_LIST_REQUEST).add_attributes({ id: @id,
64
+ newName: new_name })
65
+ end
66
+
67
+ def attrs_only_set_h
68
+ selected_attrs = @item.attrs_write.map { |a| Utils.arrow_name_sym(a) }
69
+ attrs_only_set = @item.instance_variables & selected_attrs
70
+
71
+ arr = attrs_only_set.map do |name|
72
+ n = name.to_s[1..]
73
+ values = @item.instance_variable_get(name)
74
+ values = [values] unless values.is_a?(Array)
75
+ [n, values]
76
+ end
77
+
78
+ Hash[arr]
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class for initialize distribution list
6
+ class DistributionListJsnsInitializer < Base::BaseJsnsInitializer
7
+ class << self
8
+ def create(parent, json)
9
+ item = DistributionList.new(parent)
10
+
11
+ update(item, json)
12
+ end
13
+
14
+ def update(item, json)
15
+ item.id = json[:id]
16
+ item.name = json[:name]
17
+
18
+ formatted_json(json).each do |k, v|
19
+ valorise(item, k, v)
20
+ end
21
+
22
+ item.members.all = json[:dlm].map { |a| a[:_content] }.compact if json[:dlm].is_a?(Array)
23
+ item.owners.all = json[:owners].first[:owner].map { |a| a[:name] }.compact if json[:owners].is_a?(Array)
24
+
25
+ # todo: ajouter dans les members les valeurs de zimbraMailForwardingAddress si members.all.empty?
26
+
27
+ item
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # Collection Account Aliases
6
+ class DistributionListMembersCollection
7
+ attr_accessor :all
8
+
9
+ def initialize(parent)
10
+ @parent = parent
11
+ @all = []
12
+ end
13
+
14
+ def add!(emails)
15
+ emails.each { |email| Utils.format_email(email) }
16
+ emails.delete_if { |email| @all.include?(email) }
17
+ return false if emails.empty?
18
+
19
+ soap_request = SoapElement.admin(SoapAdminConstants::ADD_DISTRIBUTION_LIST_MEMBER_REQUEST)
20
+ soap_request.add_attribute('id', @parent.id)
21
+ node_dlm = SoapElement.create('dlm')
22
+ node_dlm.add_content(emails)
23
+ soap_request.add_node(node_dlm)
24
+ @parent.sac.invoke(soap_request)
25
+
26
+ @all += emails
27
+ true
28
+ end
29
+
30
+ def remove!(emails)
31
+ emails.each { |email| Utils.format_email(email) }
32
+ emails.delete_if { |email| !@all.include?(email) }
33
+ return false if emails.empty?
34
+
35
+ soap_request = SoapElement.admin(SoapAdminConstants::REMOVE_DISTRIBUTION_LIST_MEMBER_REQUEST)
36
+ soap_request.add_attribute('id', @parent.id)
37
+ node_dlm = SoapElement.create('dlm')
38
+ node_dlm.add_content(emails)
39
+ soap_request.add_node(node_dlm)
40
+ @parent.sac.invoke(soap_request)
41
+
42
+ @all -= emails
43
+ true
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # Collection Account Aliases
6
+ class DistributionListOwnersCollection
7
+ attr_accessor :all
8
+
9
+ def initialize(parent)
10
+ @parent = parent
11
+ @all = []
12
+ end
13
+
14
+ def add!(*emails)
15
+ emails.each { |email| Utils.format_email(email) }
16
+ emails.delete_if { |email| @all.include?(email) }
17
+ return false if emails.empty?
18
+
19
+ @parent.sac.invoke(jsns('addOwners', emails))
20
+
21
+ @all += emails
22
+ true
23
+ end
24
+
25
+ def remove!(*emails)
26
+ emails.each { |email| Utils.format_email(email) }
27
+ emails.delete_if { |email| !@all.include?(email) }
28
+ return false if emails.empty?
29
+
30
+ @parent.sac.invoke(jsns('removeOwners', emails))
31
+
32
+ @all -= emails
33
+ true
34
+ end
35
+
36
+ private
37
+
38
+ def jsns(op, emails)
39
+ soap_request = SoapElement.account(SoapAccountConstants::DISTRIBUTION_LIST_ACTION_REQUEST)
40
+ node_dl = SoapElement.create('dl').add_attribute(SoapConstants::BY, SoapConstants::ID).add_content(@parent.id)
41
+ soap_request.add_node(node_dl)
42
+ node_action = SoapElement.create(SoapConstants::ACTION).add_attributes({ op: op, owner: jsns_owners(emails) })
43
+ soap_request.add_node(node_action)
44
+ soap_request
45
+ end
46
+
47
+ def jsns_owners(emails)
48
+ emails.map { |email| { by: :name, type: :usr, _content: email } }
49
+ end
50
+ end
51
+ end
52
+ end
@@ -6,9 +6,16 @@ module Zm
6
6
  class DistributionListsBuilder < Base::ObjectsBuilder
7
7
  def initialize(parent, json)
8
8
  super(parent, json)
9
- @child_class = DistributionList
10
9
  @json_item_key = :dl
11
10
  end
11
+
12
+ def make
13
+ return [] if json_items.nil?
14
+
15
+ json_items.map do |entry|
16
+ DistributionListJsnsInitializer.create(@parent, entry)
17
+ end
18
+ end
12
19
  end
13
20
  end
14
21
  end
@@ -8,16 +8,18 @@ module Zm
8
8
  @child_class = DistributionList
9
9
  @builder_class = DistributionListsBuilder
10
10
  @search_type = SearchType::DL
11
- @parent = parent
12
- reset_query_params
11
+ super(parent)
13
12
  end
14
13
 
15
- def find_by(hash)
16
- rep = sac.get_distribution_list(hash.values.first, hash.keys.first, attrs_comma)
17
- entry = rep[:Body][:GetDistributionListResponse][:dl].first
14
+ def find_by!(hash)
15
+ soap_request = SoapElement.admin(SoapAdminConstants::GET_DISTRIBUTION_LIST_REQUEST)
16
+ node_dl = SoapElement.create(SoapConstants::DL).add_attribute(SoapConstants::BY, hash.keys.first).add_content(hash.values.first)
17
+ soap_request.add_node(node_dl)
18
+ soap_request.add_attribute(SoapConstants::ATTRS, attrs_comma)
19
+ entry = sac.invoke(soap_request)[:GetDistributionListResponse][:dl].first
18
20
 
19
21
  reset_query_params
20
- build_from_entry(entry)
22
+ DistributionListJsnsInitializer.create(@parent, entry)
21
23
  end
22
24
 
23
25
  private
@@ -25,9 +27,6 @@ module Zm
25
27
  def reset_query_params
26
28
  super
27
29
  @attrs = SearchType::Attributes::DL.dup
28
- @all_servers = 1
29
- @refresh = 0
30
- @apply_cos = 1
31
30
  end
32
31
  end
33
32
  end
@@ -12,7 +12,10 @@ module Zm
12
12
  private
13
13
 
14
14
  def make_query
15
- @parent.sac.get_distribution_list_membership(@parent.id, :id)
15
+ soap_request = SoapElement.admin(SoapAdminConstants::GET_DISTRIBUTION_LIST_MEMBERSHIP_REQUEST)
16
+ node_account = SoapElement.create(SoapConstants::ACCOUNT).add_attribute(SoapConstants::BY, SoapConstants::ID).add_content(@parent.id)
17
+ soap_request.add_node(node_account)
18
+ sac.invoke(soap_request)
16
19
  end
17
20
 
18
21
  def build_response
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'zm/client/distributionlist/distributionlist'
4
+ require 'zm/client/distributionlist/distributionlist_jsns_builder'
5
+ require 'zm/client/distributionlist/distributionlist_jsns_initializer'
4
6
  require 'zm/client/distributionlist/distributionlists_builder'
5
7
  require 'zm/client/distributionlist/distributionlists_collection'
6
8
  require 'zm/client/distributionlist/dls_membership_collection'
@@ -3,46 +3,49 @@
3
3
  module Zm
4
4
  module Client
5
5
  # class for account document
6
- class Document < Base::AccountObject
6
+ class Document < Base::Object
7
+ include BelongsToFolder
8
+ include BelongsToTag
7
9
 
8
- INSTANCE_VARIABLE_KEYS = %i[id uuid name s d l luuid ms mdver md rev f tn t meta ct descEnabled ver leb cr cd acl loid sf tn]
10
+ attr_accessor :id, :uuid, :name, :s, :d, :l, :luuid, :ms, :mdver, :md, :rev, :f, :t, :meta, :ct,
11
+ :descEnabled, :ver, :leb, :cr, :cd, :acl, :loid, :sf, :tn
9
12
 
10
- attr_accessor *INSTANCE_VARIABLE_KEYS
11
- attr_writer :folder
12
- attr_reader :json
13
-
14
- alias parent_id l
15
-
16
- def initialize(parent, json = nil)
17
- @parent = parent
18
- init_from_json(json) if json.is_a?(Hash)
19
- yield(self) if block_given?
13
+ def create!
14
+ raise NotImplementedError
20
15
  end
21
16
 
22
- def all_instance_variable_keys
23
- INSTANCE_VARIABLE_KEYS
17
+ def modify!
18
+ raise NotImplementedError
24
19
  end
25
20
 
26
- def folder
27
- @folder ||= @parent.folders.all.find { |folder| folder.id == l }
21
+ def update!(*args)
22
+ raise NotImplementedError
28
23
  end
29
24
 
30
- def tag!(tag_name)
31
- @parent.sacc.item_action(@parent.token, :tag, @id, tn: tag_name)
25
+ def rename!(*args)
26
+ raise NotImplementedError
32
27
  end
33
28
 
34
- def move!(folder_id)
35
- @parent.sacc.item_action(@parent.token, 'move', @id, l: folder_id)
36
- @l = folder_id
29
+ def delete!
30
+ return false if @id.nil?
31
+
32
+ @parent.sacc.invoke(jsns_builder.to_delete)
33
+ @id = nil
37
34
  end
38
35
 
39
- def delete!
40
- @parent.sacc.item_action(@parent.token, :delete, @id)
36
+ def reload!
37
+ raise NotImplementedError
41
38
  end
42
39
 
43
40
  def download(dest_file_path)
44
41
  uploader = Upload.new(@parent, RestAccountConnector.new)
45
- uploader.download_file(folder.absFolderPath, nil, nil, [id], dest_file_path)
42
+ uploader.download_file( Zm::Client::FolderDefault::ROOT[:path], nil, [Zm::Client::FolderView::DOCUMENT], [@id], dest_file_path)
43
+ end
44
+
45
+ private
46
+
47
+ def jsns_builder
48
+ @jsns_builder ||= DocumentJsnsBuilder.new(self)
46
49
  end
47
50
  end
48
51
  end