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,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