zm-ruby-client 0.18.5 → 2.0.0

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 -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
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class for account document
6
+ class DocumentJsnsBuilder < BaseAccountJsnsBuilder
7
+ def to_delete
8
+ attrs = {
9
+ op: :delete,
10
+ comp: 0,
11
+ id: @item.id
12
+ }
13
+
14
+ build(attrs)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class for account document
6
+ class DocumentJsnsInitializer
7
+ class << self
8
+ def create(parent, json)
9
+ item = Document.new(parent)
10
+ update(item, json)
11
+ end
12
+
13
+ def update(item, json)
14
+ item.id = json[:id]
15
+ item.uuid = json[:uuid]
16
+ item.name = json[:name]
17
+ item.s = json[:s]
18
+ item.d = json[:d]
19
+ item.l = json[:l]
20
+ item.luuid = json[:luuid]
21
+ item.ms = json[:ms]
22
+ item.mdver = json[:mdver]
23
+ item.md = json[:md]
24
+ item.rev = json[:rev]
25
+ item.f = json[:f]
26
+ item.tn = json[:tn].to_s.split(',')
27
+ item.t = json[:t]
28
+ item.meta = json[:meta]
29
+ item.ct = json[:ct]
30
+ item.descEnabled = json[:descEnabled]
31
+ item.ver = json[:ver]
32
+ item.leb = json[:leb]
33
+ item.cr = json[:cr]
34
+ item.cd = json[:cd]
35
+ item.acl = json[:acl]
36
+ item.loid = json[:loid]
37
+ item.sf = json[:sf]
38
+
39
+ item
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -5,26 +5,16 @@ module Zm
5
5
  # class factory [documents]
6
6
  class DocumentsBuilder < Base::ObjectsBuilder
7
7
  def initialize(parent, json)
8
- @parent = parent
9
- @json = json
8
+ super(parent, json)
9
+ @json_item_key = :doc
10
10
  end
11
11
 
12
12
  def make
13
- root.map do |s|
14
- Document.new(@parent, s)
15
- end
16
- end
17
-
18
- def ids
19
- root.map { |s| s[:id] }
20
- end
21
-
22
- def root
23
- root = @json[:Body][:SearchResponse][:doc]
24
- return [] if root.nil?
13
+ return [] if json_items.nil?
25
14
 
26
- root = [root] unless root.is_a?(Array)
27
- root
15
+ json_items.map do |entry|
16
+ DocumentJsnsInitializer.create(@parent, entry)
17
+ end
28
18
  end
29
19
  end
30
20
  end
@@ -3,90 +3,40 @@
3
3
  module Zm
4
4
  module Client
5
5
  # collection of documents
6
- class DocumentsCollection < Base::ObjectsCollection
6
+ class DocumentsCollection < Base::AccountSearchObjectsCollection
7
7
  DEFAULT_QUERY = 'in:briefcase'
8
8
 
9
- attr_accessor :more
10
-
11
9
  def initialize(parent)
12
- @parent = parent
13
- @more = true
14
- reset_query_params
15
- end
16
-
17
- def new
18
- document = Document.new(@parent)
19
- yield(document) if block_given?
20
- document
10
+ super(parent)
11
+ @child_class = Document
12
+ @builder_class = DocumentsBuilder
13
+ @type = SoapConstants::DOCUMENT
14
+ @sort_by = SoapConstants::DATE_ASC
21
15
  end
22
16
 
23
- def start_at(start_at)
24
- @start_at = start_at
25
- self
26
- end
17
+ def find_each
18
+ @all = []
27
19
 
28
- def end_at(end_at)
29
- @end_at = end_at
30
- self
31
- end
32
-
33
- def folders(folders)
34
- @folders = folders
35
- @folder_ids = @folders.map(&:id)
36
- self
37
- end
38
-
39
- def folder_ids(folder_ids)
40
- @folder_ids = folder_ids
41
- self
42
- end
20
+ @more = true
21
+ @offset = 0
22
+ @limit = 500
43
23
 
44
- def where(query)
45
- @query = query
46
- self
47
- end
24
+ while @more
25
+ @all += build_response
26
+ @offset += @limit
27
+ end
48
28
 
49
- def ids
50
- @options = { resultMode: 1 }
51
- search_builder.ids
29
+ @all
52
30
  end
53
31
 
54
32
  private
55
33
 
56
- def search_response
57
- rep = @parent.sacc.search(@parent.token, 'document', @offset, @limit, 'subjAsc', query, @options)
58
- @more = rep[:Body][:SearchResponse][:more]
59
- rep
60
- end
61
-
62
- def search_builder
63
- DocumentsBuilder.new(@parent, search_response)
64
- end
65
-
66
- def build_response
67
- documents = search_builder.make
68
- documents.each { |appo| appo.folder = find_folder(appo) } unless @folders.empty?
69
- documents
70
- end
71
-
72
34
  def query
73
35
  return @query unless @query.nil?
74
36
 
75
37
  return DEFAULT_QUERY if @folder_ids.empty?
76
38
 
77
- @folder_ids.map { |id| %Q{inid:"#{id}"} }.join(' OR ')
78
- end
79
-
80
- def find_folder(document)
81
- @folders.find { |folder| folder.id == document.l }
82
- end
83
-
84
- def reset_query_params
85
- super
86
- @query = nil
87
- @folder_ids = []
88
- @folders = []
89
- @options = {}
39
+ @folder_ids.map { |id| %(inid:"#{id}") }.join(' OR ')
90
40
  end
91
41
  end
92
42
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'zm/client/document/document'
4
+ require 'zm/client/document/document_jsns_initializer'
5
+ require 'zm/client/document/document_jsns_builder'
4
6
  require 'zm/client/document/documents_builder'
5
7
  require 'zm/client/document/documents_collection'
@@ -3,85 +3,69 @@
3
3
  module Zm
4
4
  module Client
5
5
  # objectClass: zimbraDomain
6
- class Domain < Base::AdminObject
7
- INSTANCE_VARIABLE_KEYS = %i[name description zimbraDomainName zimbraDomainStatus zimbraId zimbraDomainType
8
- zimbraDomainDefaultCOSId zimbraGalAccountId zimbraPreAuthKey zimbraGalLdapBindDn zimbraGalLdapBindPassword
9
- zimbraGalLdapFilter zimbraGalLdapSearchBase zimbraGalLdapURL zimbraGalMode zimbraMailTransport
10
- zimbraPublicServiceHostname zimbraPublicServiceProtocol zimbraVirtualHostname]
6
+ class Domain < Base::Object
7
+ include HasSoapAdminConnector
11
8
 
12
- attr_accessor *INSTANCE_VARIABLE_KEYS
13
-
14
- def initialize(parent)
15
- super(parent)
16
- @grantee_type = 'dom'.freeze
17
- end
18
-
19
- def all_instance_variable_keys
20
- INSTANCE_VARIABLE_KEYS
9
+ def create!
10
+ resp = sac.invoke(jsns_builder.to_create)
11
+ @id = resp[:CreateDomainResponse][:domain].first[:id]
21
12
  end
22
13
 
23
- def create!
24
- attrs_write = INSTANCE_VARIABLE_KEYS.dup
25
- attrs_write.delete(:name)
26
-
27
- rep = sac.create_domain(
28
- @name,
29
- instance_variables_array(attrs_write)
30
- )
31
- @id = rep[:Body][:CreateDomainResponse][:domain].first[:id]
14
+ def modify!
15
+ sac.invoke(jsns_builder.to_update)
16
+ true
32
17
  end
33
18
 
34
19
  def update!(hash)
35
- sac.modify_domain(@id, hash)
20
+ return false if hash.delete_if { |k, v| v.nil? || !respond_to?(k) }.empty?
36
21
 
37
- hash.each do |k, v|
38
- arrow_attr_sym = "@#{k}".to_sym
22
+ do_update!(hash)
39
23
 
40
- if v.respond_to?(:empty?) && v.empty?
41
- self.remove_instance_variable(arrow_attr_sym) if self.instance_variable_get(arrow_attr_sym)
42
- else
43
- self.instance_variable_set(arrow_attr_sym, v)
44
- end
24
+ hash.each do |key, value|
25
+ update_attribute(key, value)
45
26
  end
27
+
28
+ true
46
29
  end
47
30
 
48
- def modify!
49
- false
31
+ def delete!
32
+ soap_request = SoapElement.admin(SoapAdminConstants::DELETE_DOMAIN_REQUEST).add_attribute(SoapConstants::ID,
33
+ @id)
34
+ sac.invoke(soap_request)
35
+ @id = nil
50
36
  end
51
37
 
52
38
  def accounts
53
39
  @accounts ||= DomainAccountsCollection.new(self)
54
40
  end
55
41
 
56
- def delete!
57
- sac.generic_delete(:DeleteDomainRequest, id)
42
+ def distributionlists
43
+ @distributionlists ||= DomainDistributionListsCollection.new(self)
44
+ end
45
+ alias distribution_lists distributionlists
46
+
47
+ def resources
48
+ @resources ||= DomainResourcesCollection.new(self)
58
49
  end
59
50
 
60
- def init_from_json(json)
61
- super(json)
62
- return unless json[:a].is_a? Array
51
+ def cos
52
+ return nil if self.zimbraDomainDefaultCOSId.nil?
63
53
 
64
- n_key = :n
65
- c_key = :_content
66
- at_key = '@'
54
+ @cos ||= @parent.coses.find_by id: self.zimbraDomainDefaultCOSId
55
+ end
67
56
 
68
- attrs = {}
57
+ def attrs_write
58
+ @parent.zimbra_attributes.all_domain_attrs_writable_names
59
+ end
69
60
 
70
- # TODO: definir ici le typage fort des attributs pour ne pas avoir
71
- # a faire des cases sur les class des attributs dans le code.
61
+ private
72
62
 
73
- json[:a].each do |a|
74
- k = "#{at_key}#{a[n_key]}".to_sym
75
- v = a[c_key]
76
- if !attrs[k].nil?
77
- attrs[k] = [attrs[k]] unless attrs[k].is_a?(Array)
78
- attrs[k].push(v)
79
- else
80
- attrs[k] = v
81
- end
82
- end
63
+ def do_update!(hash)
64
+ sac.invoke(jsns_builder.to_patch(hash))
65
+ end
83
66
 
84
- attrs.each { |k, v| instance_variable_set(k, v) }
67
+ def jsns_builder
68
+ @jsns_builder ||= DomainJsnsBuilder.new(self)
85
69
  end
86
70
  end
87
71
  end
@@ -5,8 +5,8 @@ module Zm
5
5
  # Collection Accounts from domain
6
6
  class DomainAccountsCollection < AccountsCollection
7
7
  def initialize(parent)
8
- @domain_name = parent.name
9
8
  super(parent)
9
+ @domain_name = parent.name
10
10
  end
11
11
  end
12
12
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # Collection Resources
6
+ class DomainDistributionListsCollection < DistributionListsCollection
7
+ def initialize(parent)
8
+ super(parent)
9
+ @domain_name = parent.name
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class for domain jsns builder
6
+ class DomainJsnsBuilder
7
+ def initialize(item)
8
+ @item = item
9
+ end
10
+
11
+ def to_create
12
+ soap_request = SoapElement.admin(SoapAdminConstants::CREATE_DOMAIN_REQUEST).add_attribute(SoapConstants::NAME,
13
+ @item.name)
14
+
15
+ attrs_only_set_h.each do |key, values|
16
+ values.each do |value|
17
+ node_attr = SoapElement.create(SoapConstants::A).add_attribute(SoapConstants::N, key).add_content(value)
18
+ soap_request.add_node(node_attr)
19
+ end
20
+ end
21
+
22
+ soap_request
23
+ end
24
+
25
+ def to_update
26
+ soap_request = SoapElement.admin(SoapAdminConstants::MODIFY_DOMAIN_REQUEST).add_attribute(SoapConstants::ID,
27
+ @item.id)
28
+
29
+ attrs_only_set_h.each do |key, values|
30
+ values.each do |value|
31
+ node_attr = SoapElement.create(SoapConstants::A).add_attribute(SoapConstants::N, key).add_content(value)
32
+ soap_request.add_node(node_attr)
33
+ end
34
+ end
35
+
36
+ soap_request
37
+ end
38
+
39
+ def to_patch(hash)
40
+ soap_request = SoapElement.admin(SoapAdminConstants::MODIFY_DOMAIN_REQUEST).add_attribute(SoapConstants::ID,
41
+ @item.id)
42
+
43
+ hash.each do |key, values|
44
+ values = [values] unless values.is_a?(Array)
45
+ values.each do |value|
46
+ node_attr = SoapElement.create(SoapConstants::A).add_attribute(SoapConstants::N, key).add_content(value)
47
+ soap_request.add_node(node_attr)
48
+ end
49
+ end
50
+
51
+ soap_request
52
+ end
53
+
54
+ def attrs_only_set_h
55
+ selected_attrs = @item.attrs_write.map { |a| Utils.arrow_name_sym(a) }
56
+ attrs_only_set = @item.instance_variables & selected_attrs
57
+
58
+ arr = attrs_only_set.map do |name|
59
+ n = name.to_s[1..]
60
+ values = @item.instance_variable_get(name)
61
+ values = [values] unless values.is_a?(Array)
62
+ [n, values]
63
+ end
64
+
65
+ Hash[arr]
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class for initialize domain
6
+ class DomainJsnsInitializer < Base::BaseJsnsInitializer
7
+ class << self
8
+ def create(parent, json)
9
+ item = Domain.new(parent)
10
+
11
+ update(item, json)
12
+ end
13
+
14
+ def update(item, json)
15
+ item = super(item, json)
16
+
17
+ item.zimbraGalAccountId = [item.zimbraGalAccountId] if item.zimbraGalAccountId.is_a?(String)
18
+ item.zimbraGalLdapAttrMap = [item.zimbraGalLdapAttrMap] if item.zimbraGalLdapAttrMap.is_a?(String)
19
+
20
+ item
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # Collection Resources from domain
6
+ class DomainResourcesCollection < ResourcesCollection
7
+ def initialize(parent)
8
+ super(parent)
9
+ @domain_name = parent.name
10
+ end
11
+ end
12
+ end
13
+ end
@@ -6,9 +6,16 @@ module Zm
6
6
  class DomainsBuilder < Base::ObjectsBuilder
7
7
  def initialize(parent, json)
8
8
  super(parent, json)
9
- @child_class = Domain
10
9
  @json_item_key = :domain
11
10
  end
11
+
12
+ def make
13
+ return [] if json_items.nil?
14
+
15
+ json_items.map do |entry|
16
+ DomainJsnsInitializer.create(@parent, entry)
17
+ end
18
+ end
12
19
  end
13
20
  end
14
21
  end
@@ -11,12 +11,15 @@ module Zm
11
11
  super(parent)
12
12
  end
13
13
 
14
- def find_by(hash)
15
- rep = sac.get_domain(hash.values.first, hash.keys.first, attrs_comma)
16
- entry = rep[:Body][:GetDomainResponse][:domain].first
14
+ def find_by!(hash)
15
+ soap_request = SoapElement.admin(SoapAdminConstants::GET_DOMAIN_REQUEST)
16
+ node_domain = SoapElement.create(SoapConstants::DOMAIN).add_attribute(SoapConstants::BY, hash.keys.first).add_content(hash.values.first)
17
+ soap_request.add_node(node_domain)
18
+ soap_request.add_attribute(SoapConstants::ATTRS, attrs_comma)
19
+ entry = sac.invoke(soap_request)[:GetDomainResponse][:domain].first
17
20
 
18
21
  reset_query_params
19
- build_from_entry(entry)
22
+ DomainJsnsInitializer.create(@parent, entry)
20
23
  end
21
24
 
22
25
  private
@@ -24,9 +27,6 @@ module Zm
24
27
  def reset_query_params
25
28
  super
26
29
  @attrs = SearchType::Attributes::DOMAIN.dup
27
- @all_servers = 1
28
- @refresh = 0
29
- @apply_cos = 1
30
30
  end
31
31
  end
32
32
  end
@@ -2,5 +2,9 @@
2
2
 
3
3
  require 'zm/client/domain/domain'
4
4
  require 'zm/client/domain/domains_builder'
5
+ require 'zm/client/domain/domain_jsns_builder'
6
+ require 'zm/client/domain/domain_jsns_initializer'
5
7
  require 'zm/client/domain/domains_collection'
6
8
  require 'zm/client/domain/domain_accounts_collection'
9
+ require 'zm/client/domain/domain_distributionlists_collection'
10
+ require 'zm/client/domain/domain_resources_collection'
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'zm/client/filter_rules/filter_rule'
4
+ require 'zm/client/filter_rules/filter_rule_jsns_initializer'
5
+ require 'zm/client/filter_rules/filter_rules_builder'
6
+ require 'zm/client/filter_rules/filter_rules_collection'
7
+ require 'zm/client/filter_rules/outgoing_filter_rules_collection'
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class account filter rule
6
+ class FilterRule < Base::Object
7
+ attr_accessor :name, :active, :filterTests, :filterActions
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class for initialize account filter rule
6
+ class FilterRuleJsnsInitializer
7
+ class << self
8
+ def create(parent, json)
9
+ item = FilterRule.new(parent)
10
+ update(item, json)
11
+ end
12
+
13
+ def update(item, json)
14
+ item.name = json[:name]
15
+ item.active = json[:active]
16
+ item.filterTests = json[:filterTests]
17
+ item.filterActions = json[:filterActions]
18
+
19
+ item
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class factory [filter rules]
6
+ class FilterRulesBuilder < Base::ObjectsBuilder
7
+ def initialize(parent, json)
8
+ super(parent, json)
9
+ @json_item_key = :filterRules
10
+ end
11
+
12
+ def make
13
+ return [] if json_items.nil?
14
+
15
+ json_items.first[:filterRule].map do |entry|
16
+ FilterRuleJsnsInitializer.create(@parent, entry)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # collection of filter rules
6
+ class FilterRulesCollection < Base::AccountObjectsCollection
7
+ def initialize(parent)
8
+ @child_class = FilterRule
9
+ @builder_class = FilterRulesBuilder
10
+ super(parent)
11
+ end
12
+
13
+ private
14
+
15
+ def make_query
16
+ soap_request = SoapElement.mail(SoapMailConstants::GET_FILTER_RULES_REQUEST)
17
+ @parent.sacc.invoke(soap_request)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # collection of outgoing filter rules
6
+ class OutgoingFilterRulesCollection < FilterRulesCollection
7
+ private
8
+
9
+ def make_query
10
+ soap_request = SoapElement.mail(SoapMailConstants::GET_OUTGOING_FILTER_RULES_REQUEST)
11
+ @parent.sacc.invoke(soap_request)
12
+ end
13
+ end
14
+ end
15
+ end