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
@@ -6,31 +6,175 @@ module Zm
6
6
  module Client
7
7
  module Base
8
8
  class ZimbraAttributesCollection
9
- attr_reader :all
9
+ include MissingMethodStaticCollection
10
+
11
+ ZIMBRA_ATTRS_PATH = "#{File.dirname(__FILE__)}../../../modules/common/zimbra-attrs.json"
12
+
13
+ attr_reader :all_versioned
10
14
 
11
15
  def initialize(parent)
12
16
  @parent = parent
13
- @all = JSON.parse(File.read(File.expand_path(File.dirname(__FILE__) + '../../../modules/common/zimbra-attrs.json')), object_class: ZimbraAttribute).freeze
17
+
18
+ @all = JSON.parse(File.read(File.expand_path(ZIMBRA_ATTRS_PATH)), object_class: ZimbraAttribute).select do |attr|
19
+ attr.version_start == @parent.version || VersionSorter.sort([@parent.version, attr.version_start]).first != @parent.version
20
+ end.freeze
14
21
  end
15
22
 
16
23
  def set_methods
17
- all_account_attrs = all_account_attrs_version(@parent.version)
18
- Account.attr_reader *all_account_attrs.select { |attr| attr.immutable }.map { |attr| attr.name.to_sym }
19
- Account.attr_accessor *all_account_attrs.reject { |attr| attr.immutable }.map { |attr| attr.name.to_sym }
24
+ set_server_methods
25
+ set_cos_methods
26
+ set_domain_methods
27
+ set_account_methods
28
+ set_distributionlist_methods
29
+ set_resource_methods
30
+ end
31
+
32
+ # ###############################
33
+ # Cos
34
+ # ###############################
35
+
36
+ def all_cos_attrs
37
+ @all_cos_attrs ||= @all.select(&:is_cos_scoped?).freeze
38
+ end
39
+
40
+ def all_cos_attrs_writable
41
+ @all_cos_attrs_writable ||= all_cos_attrs.reject(&:immutable?).freeze
42
+ end
43
+
44
+ def all_cos_attrs_writable_names
45
+ @all_cos_attrs_writable_names ||= all_cos_attrs_writable.map(&:name).freeze
46
+ end
47
+
48
+ def all_cos_attr_types_h
49
+ @all_cos_attr_types_h ||= Hash[all_cos_attrs.map { |attr| [attr.name, attr.type] }].freeze
50
+ end
51
+
52
+ def set_cos_methods
53
+ Cos.attr_accessor(*all_cos_attrs.map { |attr| attr.name.to_sym })
54
+ end
55
+
56
+ # ###############################
57
+ # Server
58
+ # ###############################
59
+
60
+ def all_server_attrs
61
+ @all_server_attrs ||= @all.select(&:is_server_scoped?).freeze
62
+ end
63
+
64
+ def all_server_attrs_writable
65
+ @all_server_attrs_writable ||= all_server_attrs.reject(&:immutable?).freeze
66
+ end
67
+
68
+ def all_server_attrs_writable_names
69
+ @all_server_attrs_writable_names ||= all_server_attrs_writable.map(&:name).freeze
70
+ end
71
+
72
+ def all_server_attr_types_h
73
+ @all_server_attr_types_h ||= Hash[all_server_attrs.map { |attr| [attr.name, attr.type] }].freeze
74
+ end
75
+
76
+ def set_server_methods
77
+ Server.attr_accessor(*all_server_attrs.map { |attr| attr.name.to_sym })
78
+ end
79
+
80
+ # ###############################
81
+ # Domain
82
+ # ###############################
83
+
84
+ def all_domain_attrs
85
+ @all_domain_attrs ||= @all.select(&:is_domain_scoped?).freeze
86
+ end
87
+
88
+ def all_domain_attrs_writable
89
+ @all_domain_attrs_writable ||= all_domain_attrs.reject(&:immutable?).freeze
90
+ end
91
+
92
+ def all_domain_attrs_writable_names
93
+ @all_domain_attrs_writable_names ||= all_domain_attrs_writable.map(&:name).freeze
20
94
  end
21
95
 
96
+ def all_domain_attr_types_h
97
+ @all_domain_attr_types_h ||= Hash[all_domain_attrs.map { |attr| [attr.name, attr.type] }].freeze
98
+ end
99
+
100
+ def set_domain_methods
101
+ Domain.attr_accessor(*all_domain_attrs.map { |attr| attr.name.to_sym })
102
+ end
103
+
104
+ # ###############################
105
+ # Account
106
+ # ###############################
107
+
22
108
  def all_account_attrs
23
- @all_account_attrs ||= @all.select { |attr| attr.is_account_scoped? }.freeze
109
+ @all_account_attrs ||= @all.select { |attr| attr.is_account_scoped? || attr.is_mailRecipient_scoped? }.freeze
110
+ end
111
+
112
+ def all_account_attrs_writable
113
+ @all_account_attrs_writable ||= all_account_attrs.reject(&:immutable?).freeze
114
+ end
115
+
116
+ def all_account_attrs_writable_names
117
+ @all_account_attrs_writable_names ||= all_account_attrs_writable.map(&:name).freeze
24
118
  end
25
119
 
26
120
  def all_account_attr_types_h
27
121
  @all_account_attr_types_h ||= Hash[all_account_attrs.map { |attr| [attr.name, attr.type] }].freeze
28
122
  end
29
123
 
30
- # retourne tous les attributs qui ont une version
31
- # inférieure ou égale à la version données en paramètre
32
- def all_account_attrs_version(version)
33
- all_account_attrs.select { |attr| attr.version_start == version || VersionSorter.sort([version, attr.version_start]).first != version }
124
+ def set_account_methods
125
+ Account.attr_accessor(*all_account_attrs.map { |attr| attr.name.to_sym })
126
+ end
127
+
128
+ # ###############################
129
+ # Distribution List
130
+ # ###############################
131
+
132
+ def all_distributionlist_attrs
133
+ @all_distributionlist_attrs ||= @all.select do |attr|
134
+ attr.is_distributionList_scoped? || attr.is_group_scoped? || attr.is_groupDynamicUnit_scoped? || attr.is_groupStaticUnit_scoped?
135
+ end.freeze
136
+ end
137
+
138
+ def all_distributionlist_attrs_writable
139
+ @all_distributionlist_attrs_writable ||= all_distributionlist_attrs.reject(&:immutable?).freeze
140
+ end
141
+
142
+ def all_distributionlist_attrs_writable_names
143
+ @all_distributionlist_attrs_writable_names ||= all_distributionlist_attrs_writable.map(&:name).freeze
144
+ end
145
+
146
+ def all_distributionlist_attrs_types_h
147
+ @all_distributionlist_attrs_types_h ||= Hash[all_distributionlist_attrs.map do |attr|
148
+ [attr.name, attr.type]
149
+ end].freeze
150
+ end
151
+
152
+ def set_distributionlist_methods
153
+ DistributionList.attr_accessor(*all_distributionlist_attrs.map { |attr| attr.name.to_sym })
154
+ end
155
+
156
+ # ###############################
157
+ # Calendar Resource
158
+ # ###############################
159
+
160
+ def all_resource_attrs
161
+ @all_resource_attrs ||= @all.select(&:is_calendarResource_scoped?).freeze
162
+ end
163
+
164
+ def all_resource_attrs_writable
165
+ @all_resource_attrs_writable ||= all_resource_attrs.reject(&:immutable?).freeze
166
+ end
167
+
168
+ def all_resource_attrs_writable_names
169
+ @all_resource_attrs_writable_names ||= all_resource_attrs_writable.map(&:name).freeze
170
+ end
171
+
172
+ def all_resource_attrs_types_h
173
+ @all_resource_attrs_types_h ||= Hash[all_resource_attrs.map { |attr| [attr.name, attr.type] }].freeze
174
+ end
175
+
176
+ def set_resource_methods
177
+ Resource.attr_accessor(*all_resource_attrs.map { |attr| attr.name.to_sym })
34
178
  end
35
179
  end
36
180
  end
@@ -4,19 +4,19 @@ require 'curb'
4
4
  require 'logger'
5
5
  require 'openssl'
6
6
 
7
- require 'zm/modules/zm_logger'
8
- require 'zm/modules/zm_model'
7
+ require 'zm/modules/base'
9
8
 
10
9
  require 'zm/client/base/zimbra_attributes_collection'
11
10
  require 'zm/client/base/object'
12
- require 'zm/client/base/account_object'
13
- require 'zm/client/base/folder_object'
11
+ require 'zm/client/base/base_account_jsns_builder'
14
12
  require 'zm/client/base/base_jsns_builder'
15
13
  require 'zm/client/base/base_jsns_initializer'
16
- require 'zm/client/base/admin_object'
17
14
  require 'zm/client/base/objects_builder'
18
15
  require 'zm/client/base/objects_collection'
19
16
  require 'zm/client/base/admin_objects_collection'
20
17
  require 'zm/client/base/account_objects_collection'
21
18
  require 'zm/client/base/account_search_objects_collection'
22
19
  require 'zm/client/base/ldap_filter'
20
+ require 'zm/client/base/mailbox_object'
21
+ require 'zm/client/base/mailbox_infos_collection'
22
+ require 'zm/client/base/mailbox_prefs_collection'
@@ -3,11 +3,10 @@
3
3
  require 'zm/client/connector/soap_admin'
4
4
  require 'zm/client/connector/soap_account'
5
5
  require 'zm/client/common'
6
- # require 'zm/client/data_source'
7
6
  require 'zm/client/account'
8
- require 'zm/client/domain'
9
7
  require 'zm/client/resource'
10
8
  require 'zm/client/distributionlist'
9
+ require 'zm/client/domain'
11
10
  require 'zm/client/server'
12
11
  require 'zm/client/cos'
13
12
  require 'zm/client/license'
@@ -16,13 +15,11 @@ module Zm
16
15
  module Client
17
16
  # class admin connection
18
17
  class Cluster
19
-
20
- attr_reader :soap_admin_connector, :config, :zimbra_attributes
21
-
22
- attr_reader :type, :version, :release, :buildDate, :host, :majorversion, :minorversion, :microversion
18
+ attr_reader :soap_admin_connector, :config, :zimbra_attributes, :type, :version, :release, :buildDate, :host,
19
+ :majorversion, :minorversion, :microversion
23
20
 
24
21
  def initialize(config)
25
- extend(ZmLogger)
22
+ # extend(ZmLogger)
26
23
 
27
24
  @config = config
28
25
  @version = config.zimbra_version
@@ -30,26 +27,30 @@ module Zm
30
27
  @zimbra_attributes = Base::ZimbraAttributesCollection.new(self)
31
28
  @zimbra_attributes.set_methods
32
29
 
33
- @soap_admin_connector = SoapAdminConnector.new(
34
- @config.zimbra_admin_scheme,
35
- @config.zimbra_admin_host,
36
- @config.zimbra_admin_port
37
- )
38
- @soap_admin_connector.logger = logger
30
+ @soap_admin_connector = SoapAdminConnector.create(@config)
39
31
  end
40
32
 
41
33
  def has_admin_credentials?
42
34
  @config.has_admin_credentials?
43
35
  end
44
36
 
37
+ def token
38
+ @soap_admin_connector.token
39
+ end
40
+
41
+ def token=(value)
42
+ @soap_admin_connector.token= value
43
+ end
44
+
45
45
  def login
46
46
  raise ClusterConfigError, 'admin credentials are missing' unless @config.has_admin_credentials?
47
47
 
48
- logger.info "Get Admin session token"
49
- @soap_admin_connector.auth(
50
- @config.zimbra_admin_login,
51
- @config.zimbra_admin_password
52
- )
48
+ logger.info 'Get Admin session token'
49
+
50
+ soap_request = SoapElement.admin(SoapAdminConstants::AUTH_REQUEST)
51
+ soap_request.add_attributes(name: @config.zimbra_admin_login, password: @config.zimbra_admin_password)
52
+ soap_resp = @soap_admin_connector.invoke(soap_request, Zm::Client::AuthError)
53
+ @soap_admin_connector.context.token(soap_resp[:AuthResponse][:authToken].first[:_content])
53
54
  end
54
55
 
55
56
  def logged?
@@ -57,25 +58,14 @@ module Zm
57
58
  end
58
59
 
59
60
  def alive?
60
- @soap_admin_connector.noop
61
+ soap_request = SoapElement.admin(SoapAdminConstants::NO_OP_REQUEST)
62
+ @soap_admin_connector.invoke(soap_request)
61
63
  true
62
64
  rescue Zm::Client::SoapError => e
63
65
  logger.error "Admin session token alive ? #{e.message}"
64
66
  false
65
67
  end
66
68
 
67
- def soap_account_connector
68
- return @soap_account_connector unless @soap_account_connector.nil?
69
-
70
- @soap_account_connector = SoapAccountConnector.new(
71
- @config.zimbra_public_scheme,
72
- @config.zimbra_public_host,
73
- @config.zimbra_public_port
74
- )
75
- @soap_account_connector.logger = logger
76
- @soap_account_connector
77
- end
78
-
79
69
  def token_metadata
80
70
  @token_metadata ||= TokenMetaData.new(@soap_admin_connector.token)
81
71
  end
@@ -122,20 +112,30 @@ module Zm
122
112
  def count_object(type)
123
113
  raise ZmError, 'Unknown object type' unless Zm::Client::CountTypes::ALL.include?(type)
124
114
 
125
- resp = soap_admin_connector.count_object(type)
126
- resp[:Body][:CountObjectsResponse][:num]
115
+ soap_request = SoapElement.admin(SoapAdminConstants::COUNT_OBJECTS_REQUEST)
116
+ soap_request.add_attribute('type', type)
117
+ soap_resp = @soap_admin_connector.invoke(soap_request)
118
+ soap_resp[:CountObjectsResponse][:num]
127
119
  end
128
120
 
129
121
  def email_exist?(email)
130
- filter = "(mail=#{email})"
131
- resp = soap_admin_connector.search_directory(filter, nil, nil, nil, nil, nil, nil, nil, 'accounts,distributionlists,aliases,resources',nil, 1)
132
- num = resp[:Body][:SearchDirectoryResponse][:num]
133
- !num.zero?
122
+ jsns = {
123
+ query: "(mail=#{email})",
124
+ types: 'accounts,distributionlists,aliases,resources',
125
+ countOnly: SoapUtils::ON
126
+ }
127
+
128
+ soap_request = SoapElement.admin(SoapAdminConstants::SEARCH_DIRECTORY_REQUEST)
129
+ soap_request.add_attributes(jsns)
130
+ soap_resp = @soap_admin_connector.invoke(soap_request)
131
+ !soap_resp[:SearchDirectoryResponse][:num].zero?
134
132
  end
135
133
 
136
134
  def infos!
137
- rep = soap_admin_connector.get_version_info
138
- json = rep[:Body][:GetVersionInfoResponse][:info].first
135
+ soap_request = SoapElement.admin(SoapAdminConstants::GET_VERSION_INFO_REQUEST)
136
+ soap_response = @soap_admin_connector.invoke(soap_request)
137
+
138
+ json = soap_response[:GetVersionInfoResponse][:info].first
139
139
 
140
140
  instance_variable_set(:@type, json[:type])
141
141
  instance_variable_set(:@version, json[:version])
@@ -152,6 +152,10 @@ module Zm
152
152
  def find_domain_key(domain_name)
153
153
  domains.attrs('zimbraPreAuthKey').find_by(name: domain_name).zimbraPreAuthKey
154
154
  end
155
+
156
+ def logger
157
+ @config.logger
158
+ end
155
159
  end
156
160
  end
157
161
  end
@@ -6,11 +6,11 @@ module Zm
6
6
  module Client
7
7
  # class config for cluster connection
8
8
  class ClusterConfig
9
+ include ZmLogger
10
+
9
11
  attr_reader :to_h
10
- attr_accessor :zimbra_admin_host, :zimbra_admin_scheme,
11
- :zimbra_admin_port, :zimbra_admin_login,
12
- :zimbra_admin_password, :zimbra_public_host,
13
- :zimbra_public_scheme, :zimbra_public_port,
12
+ attr_accessor :zimbra_admin_host, :zimbra_admin_scheme, :zimbra_admin_port, :zimbra_admin_login,
13
+ :zimbra_admin_password, :zimbra_public_host, :zimbra_public_scheme, :zimbra_public_port,
14
14
  :domains, :zimbra_version
15
15
 
16
16
  def initialize(parameters = nil)
@@ -51,7 +51,7 @@ module Zm
51
51
  @zimbra_public_host = @to_h.fetch(:zimbra_public_host, nil)
52
52
  @zimbra_public_scheme = @to_h.fetch(:zimbra_public_scheme, 'https')
53
53
  @zimbra_public_port = @to_h.fetch(:zimbra_public_port, 443)
54
- @zimbra_version = @to_h.fetch(:zimbra_version, '8.8.15')
54
+ @zimbra_version = @to_h.fetch(:zimbra_version, @zimbra_version)
55
55
  end
56
56
 
57
57
  def init_from_yml(file_config_path)
@@ -2,7 +2,6 @@
2
2
 
3
3
  module Zm
4
4
  module Client
5
-
6
5
  # Collection recipients
7
6
  class Recipients
8
7
  def initialize
@@ -20,9 +19,10 @@ module Zm
20
19
  end
21
20
 
22
21
  def del(recipient)
23
- if recipient.is_a?(Recipient)
22
+ case recipient
23
+ when Recipient
24
24
  @recipients.delete(recipient)
25
- elsif recipient.is_a?(String)
25
+ when String
26
26
  @recipients.delete_if { |r| r.email == recipient }
27
27
  end
28
28
  end
@@ -21,7 +21,10 @@ module Zm
21
21
  end
22
22
 
23
23
  def metadatas
24
- @metadatas ||= Hash[decoded.split(';').map { |v| key, len, str = v.split(/[:=]/); [key, str] }].freeze
24
+ @metadatas ||= Hash[decoded.split('').map do |v|
25
+ key, _, str = v.split(/[:=]/)
26
+ [key, str]
27
+ end].freeze
25
28
  end
26
29
 
27
30
  def zimbra_id
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'addressable/uri'
4
+
5
+ module Zm
6
+ module Client
7
+ module Utils
8
+ A_ARRAY_PROC = ->(i) { i.last.is_a?(Array) ? i.last.map { |j| [i.first, j] } : [i] }
9
+ A_NODE_PROC = ->(n) { { n: n.first, _content: n.last } }
10
+ ARROW = '@'
11
+ EQUALS = '='
12
+
13
+ class << self
14
+ def format_email(email)
15
+ email.strip!
16
+ email.downcase!
17
+ email
18
+ end
19
+
20
+ def format_url_params(hash)
21
+ uri = Addressable::URI.new
22
+ uri.query_values = hash
23
+ uri.query
24
+ end
25
+
26
+ # TODO: chercher - remplacer toutes les occurences dans le code
27
+ def arrow_name(name)
28
+ return name if name.to_s.start_with?(ARROW)
29
+
30
+ "#{ARROW}#{name}"
31
+ end
32
+
33
+ def arrow_name_sym(name)
34
+ arrow_name(name).to_sym
35
+ end
36
+
37
+ def equals_name(name)
38
+ return name if name.to_s.end_with?(EQUALS)
39
+
40
+ "#{name}#{EQUALS}"
41
+ end
42
+
43
+ def map_format(array, klass, method_name)
44
+ array.map! do |item|
45
+ if item.is_a?(klass)
46
+ item
47
+ elsif item.respond_to?(method_name)
48
+ item.name
49
+ end
50
+ end
51
+ array.compact!
52
+ array
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'zm/client/common/utils'
3
4
  require 'zm/client/common/recipients'
4
5
  require 'zm/client/common/message'
5
- require 'zm/client/common/token_metadata'
6
+ require 'zm/client/common/token_metadata'
@@ -16,23 +16,33 @@ module Zm
16
16
  @curl.verbose = @verbose
17
17
  end
18
18
 
19
- def cookie(cookie)
20
- @curl.headers['Cookie'] = cookie
19
+ def cookies(cookies)
20
+ @curl.cookies = cookies
21
21
  end
22
22
 
23
23
  def download(url, dest_file_path)
24
- @curl.url = URI.escape(url)
24
+ @curl.url = url
25
25
  File.open(dest_file_path, 'wb') do |f|
26
26
  @curl.on_body do |data|
27
27
  f << data
28
28
  data.size
29
29
  end
30
+
30
31
  @curl.perform
31
32
  end
33
+
34
+ if @curl.status.to_i >= 400
35
+ File.unlink(dest_file_path) if File.exist?(dest_file_path)
36
+
37
+ message = "Download failure: #{@curl.body_str} (status=#{@curl.status})"
38
+ raise RestError, message
39
+ end
40
+
41
+ dest_file_path
32
42
  end
33
43
 
34
44
  def upload(url, src_file_path)
35
- @curl.url = URI.escape(url)
45
+ @curl.url = url
36
46
  @curl.http_post(Curl::PostField.file('file', src_file_path))
37
47
 
38
48
  if @curl.status.to_i >= 400