zm-ruby-client 0.18.5 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (250) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/Gemfile +2 -2
  4. data/README.md +7 -0
  5. data/lib/zm/client/account/account.rb +31 -308
  6. data/lib/zm/client/account/account_aliases_collection.rb +52 -0
  7. data/lib/zm/client/account/account_dls_membership_collection.rb +4 -1
  8. data/lib/zm/client/account/account_dls_owner_collection.rb +8 -1
  9. data/lib/zm/client/account/account_jsns_builder.rb +77 -0
  10. data/lib/zm/client/account/account_jsns_initializer.rb +9 -24
  11. data/lib/zm/client/account/accounts_builder.rb +0 -1
  12. data/lib/zm/client/account/accounts_collection.rb +32 -8
  13. data/lib/zm/client/account.rb +1 -0
  14. data/lib/zm/client/ace/ace.rb +6 -22
  15. data/lib/zm/client/ace/ace_jsns_builder.rb +15 -16
  16. data/lib/zm/client/ace/ace_jsns_initializer.rb +0 -1
  17. data/lib/zm/client/ace/aces_builder.rb +0 -1
  18. data/lib/zm/client/ace/aces_collection.rb +2 -18
  19. data/lib/zm/client/appointment/appointment.rb +38 -30
  20. data/lib/zm/client/appointment/appointment_jsns_builder.rb +22 -34
  21. data/lib/zm/client/appointment/appointment_jsns_initializer.rb +6 -3
  22. data/lib/zm/client/appointment/appointments_builder.rb +6 -18
  23. data/lib/zm/client/appointment/appointments_collection.rb +25 -4
  24. data/lib/zm/client/backup/backup.rb +4 -32
  25. data/lib/zm/client/backup/backup_jsns_initializer.rb +26 -0
  26. data/lib/zm/client/backup/backups_builder.rb +8 -13
  27. data/lib/zm/client/backup/backups_collection.rb +2 -1
  28. data/lib/zm/client/backup.rb +1 -0
  29. data/lib/zm/client/base/account_search_objects_collection.rb +34 -13
  30. data/lib/zm/client/base/admin_objects_collection.rb +82 -17
  31. data/lib/zm/client/base/base_account_jsns_builder.rb +98 -0
  32. data/lib/zm/client/base/base_jsns_builder.rb +47 -0
  33. data/lib/zm/client/base/base_jsns_initializer.rb +43 -12
  34. data/lib/zm/client/base/ldap_filter.rb +20 -5
  35. data/lib/zm/client/base/mailbox_infos_collection.rb +68 -0
  36. data/lib/zm/client/base/mailbox_object.rb +299 -0
  37. data/lib/zm/client/base/mailbox_prefs_collection.rb +75 -0
  38. data/lib/zm/client/base/object.rb +28 -62
  39. data/lib/zm/client/base/objects_builder.rb +4 -10
  40. data/lib/zm/client/base/objects_collection.rb +13 -10
  41. data/lib/zm/client/base/zimbra_attribute.rb +10 -8
  42. data/lib/zm/client/base/zimbra_attributes_collection.rb +154 -10
  43. data/lib/zm/client/base.rb +5 -5
  44. data/lib/zm/client/cluster/cluster.rb +43 -39
  45. data/lib/zm/client/cluster/cluster_config.rb +5 -5
  46. data/lib/zm/client/common/recipients.rb +3 -3
  47. data/lib/zm/client/common/token_metadata.rb +4 -1
  48. data/lib/zm/client/common/utils.rb +57 -0
  49. data/lib/zm/client/common.rb +2 -1
  50. data/lib/zm/client/connector/rest_account.rb +15 -28
  51. data/lib/zm/client/connector/soap_account.rb +38 -441
  52. data/lib/zm/client/connector/soap_admin.rb +16 -552
  53. data/lib/zm/client/connector/soap_base.rb +30 -21
  54. data/lib/zm/client/connector/soap_error.rb +1 -3
  55. data/lib/zm/client/constant.rb +21 -11
  56. data/lib/zm/client/contact/contact.rb +42 -83
  57. data/lib/zm/client/contact/contact_jsns_builder.rb +60 -0
  58. data/lib/zm/client/contact/contact_jsns_initializer.rb +78 -0
  59. data/lib/zm/client/contact/contact_member.rb +29 -28
  60. data/lib/zm/client/contact/contact_members_collection.rb +44 -0
  61. data/lib/zm/client/contact/contacts_builder.rb +8 -1
  62. data/lib/zm/client/contact/contacts_collection.rb +17 -1
  63. data/lib/zm/client/contact/group_contact_jsns_builder.rb +51 -0
  64. data/lib/zm/client/contact/mod_group_contact.rb +4 -67
  65. data/lib/zm/client/contact.rb +5 -1
  66. data/lib/zm/client/cos/cos.rb +35 -40
  67. data/lib/zm/client/cos/cos_accounts_collection.rb +19 -0
  68. data/lib/zm/client/cos/cos_domains_collection.rb +20 -0
  69. data/lib/zm/client/cos/cos_jsns_builder.rb +72 -0
  70. data/lib/zm/client/cos/cos_jsns_initializer.rb +29 -0
  71. data/lib/zm/client/cos/cos_servers_collection.rb +60 -0
  72. data/lib/zm/client/cos/coses_builder.rb +8 -1
  73. data/lib/zm/client/cos/coses_collection.rb +8 -5
  74. data/lib/zm/client/cos.rb +5 -0
  75. data/lib/zm/client/datasource/datasource.rb +69 -0
  76. data/lib/zm/client/datasource/datasource_jsns_builder.rb +32 -0
  77. data/lib/zm/client/datasource/datasource_jsns_initializer.rb +27 -0
  78. data/lib/zm/client/datasource/datasources_builder.rb +29 -0
  79. data/lib/zm/client/datasource/datasources_collection.rb +21 -0
  80. data/lib/zm/client/datasource.rb +7 -0
  81. data/lib/zm/client/distributionlist/distributionlist.rb +52 -118
  82. data/lib/zm/client/distributionlist/distributionlist_aces_collection.rb +31 -0
  83. data/lib/zm/client/distributionlist/distributionlist_aliases_collection.rb +53 -0
  84. data/lib/zm/client/distributionlist/distributionlist_jsns_builder.rb +82 -0
  85. data/lib/zm/client/distributionlist/distributionlist_jsns_initializer.rb +32 -0
  86. data/lib/zm/client/distributionlist/distributionlist_members_collection.rb +47 -0
  87. data/lib/zm/client/distributionlist/distributionlist_owners_collection.rb +52 -0
  88. data/lib/zm/client/distributionlist/distributionlists_builder.rb +8 -1
  89. data/lib/zm/client/distributionlist/distributionlists_collection.rb +8 -9
  90. data/lib/zm/client/distributionlist/dls_membership_collection.rb +4 -1
  91. data/lib/zm/client/distributionlist.rb +2 -0
  92. data/lib/zm/client/document/document.rb +27 -24
  93. data/lib/zm/client/document/document_jsns_builder.rb +18 -0
  94. data/lib/zm/client/document/document_jsns_initializer.rb +44 -0
  95. data/lib/zm/client/document/documents_builder.rb +6 -16
  96. data/lib/zm/client/document/documents_collection.rb +17 -67
  97. data/lib/zm/client/document.rb +2 -0
  98. data/lib/zm/client/domain/domain.rb +39 -55
  99. data/lib/zm/client/domain/domain_accounts_collection.rb +1 -1
  100. data/lib/zm/client/domain/domain_distributionlists_collection.rb +13 -0
  101. data/lib/zm/client/domain/domain_jsns_builder.rb +69 -0
  102. data/lib/zm/client/domain/domain_jsns_initializer.rb +25 -0
  103. data/lib/zm/client/domain/domain_resources_collection.rb +13 -0
  104. data/lib/zm/client/domain/domains_builder.rb +8 -1
  105. data/lib/zm/client/domain/domains_collection.rb +7 -7
  106. data/lib/zm/client/domain.rb +4 -0
  107. data/lib/zm/client/filter_rule.rb +7 -0
  108. data/lib/zm/client/filter_rules/filter_rule.rb +10 -0
  109. data/lib/zm/client/filter_rules/filter_rule_jsns_initializer.rb +24 -0
  110. data/lib/zm/client/filter_rules/filter_rules_builder.rb +21 -0
  111. data/lib/zm/client/filter_rules/filter_rules_collection.rb +21 -0
  112. data/lib/zm/client/filter_rules/outgoing_filter_rules_collection.rb +15 -0
  113. data/lib/zm/client/folder/folder.rb +77 -61
  114. data/lib/zm/client/folder/folder_grant.rb +34 -14
  115. data/lib/zm/client/folder/folder_grant_jsns_builder.rb +15 -4
  116. data/lib/zm/client/folder/folder_grants_collection.rb +36 -2
  117. data/lib/zm/client/folder/folder_jsns_builder.rb +22 -48
  118. data/lib/zm/client/folder/folder_jsns_initializer.rb +34 -17
  119. data/lib/zm/client/folder/folder_retention_policies_collection.rb +2 -3
  120. data/lib/zm/client/folder/folder_retention_policy.rb +0 -1
  121. data/lib/zm/client/folder/folders_builder.rb +7 -10
  122. data/lib/zm/client/folder/folders_collection.rb +5 -2
  123. data/lib/zm/client/folder/folders_jsns_builder.rb +3 -1
  124. data/lib/zm/client/folder/mod_document_folder.rb +10 -6
  125. data/lib/zm/client/folder.rb +1 -1
  126. data/lib/zm/client/identity/identities_builder.rb +8 -1
  127. data/lib/zm/client/identity/identities_collection.rb +2 -1
  128. data/lib/zm/client/identity/identity.rb +34 -42
  129. data/lib/zm/client/identity/identity_jsns_builder.rb +57 -0
  130. data/lib/zm/client/identity/identity_jsns_initializer.rb +29 -0
  131. data/lib/zm/client/identity.rb +3 -1
  132. data/lib/zm/client/license/license.rb +9 -22
  133. data/lib/zm/client/license/license_jsns_initializer.rb +20 -0
  134. data/lib/zm/client/license/licenses_collection.rb +3 -13
  135. data/lib/zm/client/license.rb +2 -1
  136. data/lib/zm/client/message/attachments_collection.rb +55 -0
  137. data/lib/zm/client/message/message.rb +36 -264
  138. data/lib/zm/client/message/message_flags.rb +107 -0
  139. data/lib/zm/client/message/message_jsns_builder.rb +85 -0
  140. data/lib/zm/client/message/message_jsns_initializer.rb +71 -0
  141. data/lib/zm/client/message/message_recipients.rb +59 -0
  142. data/lib/zm/client/message/messages_builder.rb +7 -18
  143. data/lib/zm/client/message/messages_collection.rb +17 -2
  144. data/lib/zm/client/message.rb +5 -0
  145. data/lib/zm/client/mountpoint/mountpoint.rb +43 -20
  146. data/lib/zm/client/mountpoint/mountpoint_jsns_builder.rb +8 -53
  147. data/lib/zm/client/mountpoint/mountpoint_jsns_initializer.rb +22 -13
  148. data/lib/zm/client/mountpoint/mountpoints_builder.rb +4 -5
  149. data/lib/zm/client/mountpoint/mountpoints_collection.rb +1 -2
  150. data/lib/zm/client/mta_queue/mta_queue.rb +13 -28
  151. data/lib/zm/client/mta_queue/mta_queue_jsns_builder.rb +41 -0
  152. data/lib/zm/client/mta_queue/mta_queue_jsns_initializer.rb +23 -0
  153. data/lib/zm/client/mta_queue/mta_queues_builder.rb +4 -8
  154. data/lib/zm/client/mta_queue/mta_queues_collection.rb +8 -27
  155. data/lib/zm/client/mta_queue.rb +2 -0
  156. data/lib/zm/client/mta_queue_item/mta_queue_item.rb +4 -31
  157. data/lib/zm/client/mta_queue_item/mta_queue_item_jsns_initializer.rb +33 -0
  158. data/lib/zm/client/mta_queue_item/mta_queue_items_builder.rb +4 -9
  159. data/lib/zm/client/mta_queue_item/mta_queue_items_collection.rb +7 -42
  160. data/lib/zm/client/mta_queue_item.rb +2 -1
  161. data/lib/zm/client/resource/resource.rb +24 -91
  162. data/lib/zm/client/resource/resource_jsns_builder.rb +79 -0
  163. data/lib/zm/client/resource/resource_jsns_initializer.rb +29 -0
  164. data/lib/zm/client/resource/resources_builder.rb +8 -1
  165. data/lib/zm/client/resource/resources_collection.rb +9 -7
  166. data/lib/zm/client/resource.rb +2 -0
  167. data/lib/zm/client/search_folder/search_folder.rb +38 -16
  168. data/lib/zm/client/search_folder/search_folder_jsns_builder.rb +38 -19
  169. data/lib/zm/client/search_folder/search_folder_jsns_initializer.rb +17 -13
  170. data/lib/zm/client/search_folder/search_folders_builder.rb +0 -1
  171. data/lib/zm/client/search_folder/search_folders_collection.rb +2 -1
  172. data/lib/zm/client/server/server.rb +16 -488
  173. data/lib/zm/client/server/server_jsns_initializer.rb +16 -0
  174. data/lib/zm/client/server/servers_builder.rb +8 -1
  175. data/lib/zm/client/server/servers_collection.rb +13 -5
  176. data/lib/zm/client/server.rb +1 -0
  177. data/lib/zm/client/share/share.rb +5 -43
  178. data/lib/zm/client/share/share_jsns_initializer.rb +32 -0
  179. data/lib/zm/client/share/share_mountpoints_collection.rb +38 -0
  180. data/lib/zm/client/share/shares_builder.rb +8 -1
  181. data/lib/zm/client/share/shares_collection.rb +11 -16
  182. data/lib/zm/client/share.rb +2 -0
  183. data/lib/zm/client/signature/signature.rb +25 -29
  184. data/lib/zm/client/signature/signature_jsns_builder.rb +31 -13
  185. data/lib/zm/client/signature/signature_jsns_initializer.rb +16 -12
  186. data/lib/zm/client/signature/signatures_builder.rb +1 -2
  187. data/lib/zm/client/signature/signatures_collection.rb +2 -1
  188. data/lib/zm/client/signature.rb +1 -1
  189. data/lib/zm/client/soap_request/account_soap_constants.rb +76 -0
  190. data/lib/zm/client/soap_request/admin_soap_constants.rb +214 -0
  191. data/lib/zm/client/soap_request/mail_soap_constants.rb +162 -0
  192. data/lib/zm/client/soap_request/soap_constants.rb +55 -0
  193. data/lib/zm/client/soap_request/soap_context.rb +38 -0
  194. data/lib/zm/client/soap_request/soap_element.rb +90 -0
  195. data/lib/zm/client/soap_request.rb +8 -0
  196. data/lib/zm/client/tag/account_object_tags_collection.rb +65 -0
  197. data/lib/zm/client/tag/tag.rb +34 -22
  198. data/lib/zm/client/tag/tag_jsns_builder.rb +14 -35
  199. data/lib/zm/client/tag/tag_jsns_initializer.rb +4 -6
  200. data/lib/zm/client/tag/tags_builder.rb +0 -1
  201. data/lib/zm/client/tag/tags_collection.rb +2 -1
  202. data/lib/zm/client/tag.rb +1 -0
  203. data/lib/zm/client/task/task.rb +18 -49
  204. data/lib/zm/client/task/task_jsns_initializer.rb +45 -0
  205. data/lib/zm/client/task/tasks_builder.rb +6 -16
  206. data/lib/zm/client/task/tasks_collection.rb +29 -0
  207. data/lib/zm/client/task.rb +1 -0
  208. data/lib/zm/client/upload/upload.rb +26 -30
  209. data/lib/zm/client/version.rb +3 -3
  210. data/lib/zm/client.rb +4 -1
  211. data/lib/zm/modules/base.rb +10 -0
  212. data/lib/zm/modules/belongs_to_folder.rb +37 -0
  213. data/lib/zm/modules/belongs_to_tag.rb +11 -0
  214. data/lib/zm/modules/common/zimbra-attrs.json +1 -1
  215. data/lib/zm/modules/has_soap_admin_connector.rb +12 -0
  216. data/lib/zm/modules/inspector.rb +24 -0
  217. data/lib/zm/modules/missing_method_static_collection.rb +13 -0
  218. data/lib/zm/modules/zm_logger.rb +3 -1
  219. data/lib/zm/modules/zm_model.rb +4 -2
  220. data/lib/zm/utils/thread_pool.rb +4 -2
  221. data/lib/zm-ruby-client.rb +2 -0
  222. data/zm-ruby-client.gemspec +12 -9
  223. metadata +93 -34
  224. data/lib/zm/client/base/account_object.rb +0 -51
  225. data/lib/zm/client/base/admin_object.rb +0 -51
  226. data/lib/zm/client/base/folder_object.rb +0 -41
  227. data/lib/zm/client/config.rb +0 -12
  228. data/lib/zm/client/data_source.rb +0 -5
  229. data/lib/zm/modules/common/account_common.rb +0 -71
  230. data/lib/zm/modules/common/cos_common.rb +0 -463
  231. data/lib/zm/modules/common/dl_common.rb +0 -38
  232. data/lib/zm/modules/common/identity_common.rb +0 -19
  233. data/lib/zm/modules/common/resource_common.rb +0 -59
  234. data/lib/zm/modules/common/signature_common.rb +0 -16
  235. data/lib/zm/modules/common/zimbra-attrs.json.bak +0 -1
  236. data/test/accounts.rb +0 -89
  237. data/test/ace.rb +0 -50
  238. data/test/cluster.rb +0 -41
  239. data/test/cluster_config.rb +0 -30
  240. data/test/cluster_zimbra_attributes.rb +0 -38
  241. data/test/coses.rb +0 -26
  242. data/test/domains.rb +0 -70
  243. data/test/folder.rb +0 -125
  244. data/test/folder_grant.rb +0 -51
  245. data/test/mountpoint.rb +0 -49
  246. data/test/retention_policies.rb +0 -40
  247. data/test/search_folder.rb +0 -67
  248. data/test/signature.rb +0 -53
  249. data/test/tag.rb +0 -65
  250. data/test/zimbra_attributes.rb +0 -35
@@ -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'
@@ -7,35 +7,34 @@ module Zm
7
7
 
8
8
  def initialize
9
9
  @verbose = false
10
- @cookies = nil
11
10
  @follow_location = true
11
+ @curl = easy_curl
12
12
  end
13
13
 
14
14
  def verbose!
15
15
  @verbose = true
16
+ @curl.verbose = @verbose
16
17
  end
17
18
 
18
19
  def cookies(cookies)
19
- @cookies = cookies
20
+ @curl.cookies = cookies
20
21
  end
21
22
 
22
23
  def download(url, dest_file_path)
23
- curl = init_curl_client(url)
24
-
24
+ @curl.url = url
25
25
  File.open(dest_file_path, 'wb') do |f|
26
- curl.on_body do |data|
26
+ @curl.on_body do |data|
27
27
  f << data
28
28
  data.size
29
29
  end
30
30
 
31
- curl.perform
31
+ @curl.perform
32
32
  end
33
33
 
34
- if curl.status.to_i >= 400
34
+ if @curl.status.to_i >= 400
35
35
  File.unlink(dest_file_path) if File.exist?(dest_file_path)
36
36
 
37
- message = "Download failure: #{curl.body_str} (status=#{curl.status})"
38
- close_curl(curl)
37
+ message = "Download failure: #{@curl.body_str} (status=#{@curl.status})"
39
38
  raise RestError, message
40
39
  end
41
40
 
@@ -43,34 +42,24 @@ module Zm
43
42
  end
44
43
 
45
44
  def upload(url, src_file_path)
46
- curl = init_curl_client(url)
47
-
48
- curl.http_post(Curl::PostField.file('file', src_file_path))
45
+ @curl.url = url
46
+ @curl.http_post(Curl::PostField.file('file', src_file_path))
49
47
 
50
- if curl.status.to_i >= 400
48
+ if @curl.status.to_i >= 400
51
49
  messages = [
52
50
  "Upload failure ! #{src_file_path}",
53
- extract_title(curl.body_str)
51
+ extract_title(@curl.body_str)
54
52
  ].compact
55
- close_curl(curl)
56
53
  raise RestError, messages.join("\n")
57
54
  end
58
55
 
59
- str = curl.body_str
60
- close_curl(curl)
61
- str
56
+ @curl.body_str
62
57
  end
63
58
 
64
59
  private
65
60
 
66
- def close_curl(curl)
67
- curl.close
68
- # force process to kill socket
69
- GC.start
70
- end
71
-
72
- def init_curl_client(url)
73
- ::Curl::Easy.new(url) do |curl|
61
+ def easy_curl
62
+ Curl::Easy.new do |curl|
74
63
  curl.timeout = 300
75
64
  curl.enable_cookies = false
76
65
  curl.encoding = ''
@@ -79,8 +68,6 @@ module Zm
79
68
  curl.multipart_form_post = true
80
69
  curl.verbose = verbose
81
70
  curl.follow_location = follow_location
82
- curl.verbose = @verbose
83
- curl.cookies = @cookies
84
71
  end
85
72
  end
86
73