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
@@ -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,92 +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]
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 to_h
20
- # hashmap = Hash[all_instance_variable_keys.map { |key| [key, instance_variable_get(arrow_name(key))] }]
21
- # hashmap.delete_if { |_, v| v.nil? }
22
- # hashmap
23
- # end
24
-
25
- def all_instance_variable_keys
26
- INSTANCE_VARIABLE_KEYS
9
+ def create!
10
+ resp = sac.invoke(jsns_builder.to_create)
11
+ @id = resp[:CreateDomainResponse][:domain].first[:id]
27
12
  end
28
13
 
29
- def create!
30
- attrs_write = INSTANCE_VARIABLE_KEYS.dup
31
- attrs_write.delete(:name)
32
-
33
- rep = sac.create_domain(
34
- @name,
35
- instance_variables_array(attrs_write)
36
- )
37
- @id = rep[:Body][:CreateDomainResponse][:domain].first[:id]
14
+ def modify!
15
+ sac.invoke(jsns_builder.to_update)
16
+ true
38
17
  end
39
18
 
40
19
  def update!(hash)
41
- sac.modify_domain(@id, hash)
20
+ return false if hash.delete_if { |k, v| v.nil? || !respond_to?(k) }.empty?
42
21
 
43
- hash.each do |k, v|
44
- arrow_attr_sym = "@#{k}".to_sym
22
+ do_update!(hash)
45
23
 
46
- if v.respond_to?(:empty?) && v.empty?
47
- self.remove_instance_variable(arrow_attr_sym) if self.instance_variable_get(arrow_attr_sym)
48
- else
49
- self.instance_variable_set(arrow_attr_sym, v)
50
- end
24
+ hash.each do |key, value|
25
+ update_attribute(key, value)
51
26
  end
27
+
28
+ true
29
+ end
30
+
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
52
36
  end
53
37
 
54
38
  def accounts
55
39
  @accounts ||= DomainAccountsCollection.new(self)
56
40
  end
57
41
 
58
- def delete!
59
- sac.generic_delete(:DeleteDomainRequest, id)
42
+ def distributionlists
43
+ @distributionlists ||= DomainDistributionListsCollection.new(self)
60
44
  end
45
+ alias distribution_lists distributionlists
61
46
 
62
- # def account_quotas(server_id)
63
- # rep = sac.get_quota_usage(name, nil, nil, nil, nil, nil, nil, server_id)
64
- # AccountsBuilder.new(@parent, rep).make
65
- # end
66
-
67
- def init_from_json(json)
68
- super(json)
69
- return unless json[:a].is_a? Array
70
-
71
- n_key = :n
72
- c_key = :_content
73
- at_key = '@'
74
-
75
- attrs = {}
76
-
77
- # TODO: definir ici le typage fort des attributs pour ne pas avoir
78
- # a faire des cases sur les class des attributs dans le code.
79
-
80
- json[:a].each do |a|
81
- k = "#{at_key}#{a[n_key]}".to_sym
82
- v = a[c_key]
83
- if !attrs[k].nil?
84
- attrs[k] = [attrs[k]] unless attrs[k].is_a?(Array)
85
- attrs[k].push(v)
86
- else
87
- attrs[k] = v
88
- end
89
- end
47
+ def resources
48
+ @resources ||= DomainResourcesCollection.new(self)
49
+ end
50
+
51
+ def cos
52
+ return nil if self.zimbraDomainDefaultCOSId.nil?
53
+
54
+ @cos ||= @parent.coses.find_by id: self.zimbraDomainDefaultCOSId
55
+ end
56
+
57
+ def attrs_write
58
+ @parent.zimbra_attributes.all_domain_attrs_writable_names
59
+ end
60
+
61
+ private
62
+
63
+ def do_update!(hash)
64
+ sac.invoke(jsns_builder.to_patch(hash))
65
+ end
90
66
 
91
- attrs.each { |k, v| instance_variable_set(k, v) }
67
+ def jsns_builder
68
+ @jsns_builder ||= DomainJsnsBuilder.new(self)
92
69
  end
93
70
  end
94
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