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
@@ -0,0 +1,299 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'zm/client/connector/rest_account'
4
+ require 'zm/client/signature'
5
+ require 'zm/client/folder'
6
+ require 'zm/client/mountpoint'
7
+ require 'zm/client/search_folder'
8
+ require 'zm/client/share'
9
+ require 'zm/client/tag'
10
+ require 'zm/client/ace'
11
+ require 'zm/client/contact'
12
+ require 'zm/client/appointment'
13
+ require 'zm/client/task'
14
+ require 'zm/client/document'
15
+ require 'zm/client/message'
16
+ require 'zm/client/identity'
17
+ require 'zm/client/upload'
18
+ require 'zm/client/filter_rule'
19
+ require 'zm/client/datasource'
20
+
21
+ module Zm
22
+ module Client
23
+ module Base
24
+ # Abstract Class for Account and Resource
25
+ class MailboxObject < Object
26
+ include HasSoapAdminConnector
27
+
28
+ attr_accessor :home_url, :public_url, :password, :carLicense
29
+ attr_writer :used, :domain_key
30
+
31
+ def soap_account_connector
32
+ @soap_account_connector ||= SoapAccountConnector.create(@parent.config)
33
+ end
34
+ alias sacc soap_account_connector
35
+
36
+ def rest_account_connector
37
+ @rest_account_connector ||= RestAccountConnector.new
38
+ end
39
+
40
+ alias rac rest_account_connector
41
+
42
+ def domain_name
43
+ @domain_name ||= @name.split('@').last
44
+ end
45
+
46
+ def infos
47
+ @infos ||= MailboxInfosCollection.new(self)
48
+ end
49
+
50
+ def prefs
51
+ @prefs ||= MailboxPrefsCollection.new(self)
52
+ end
53
+
54
+ def used
55
+ @used || used!
56
+ end
57
+
58
+ def used!
59
+ @used = mailbox_infos[:s]
60
+ end
61
+
62
+ def mbxid
63
+ @mbxid || mbxid!
64
+ end
65
+
66
+ def mbxid!
67
+ @mbxid = mailbox_infos[:mbxid]
68
+ end
69
+
70
+ def mailbox_infos
71
+ soap_request = SoapElement.admin(SoapAdminConstants::GET_MAILBOX_REQUEST)
72
+ node_mbox = SoapElement.create(SoapConstants::MBOX).add_attribute(SoapConstants::ID, @id)
73
+ soap_request.add_node(node_mbox)
74
+ sac.invoke(soap_request)[:GetMailboxResponse][:mbox].first
75
+ end
76
+
77
+ # #################################################################
78
+ # Authentication
79
+ # #################################################################
80
+
81
+ def logged?
82
+ !@token.nil?
83
+ end
84
+
85
+ def domain_key
86
+ return @domain_key if @domain_key
87
+ return @parent.domain_key(domain_name) if @parent.logged?
88
+
89
+ nil
90
+ end
91
+
92
+ def login
93
+ if @parent.logged?
94
+ admin_login
95
+ else
96
+ account_login
97
+ end
98
+ end
99
+
100
+ def account_login
101
+ sacc.token = nil
102
+
103
+ if password
104
+ account_login_password
105
+ else
106
+ account_login_preauth
107
+ end
108
+ end
109
+
110
+ def account_login_preauth(expires = 0)
111
+ raise ZmError, 'domain key is required to login !' if domain_key.nil?
112
+
113
+ content, by = account_content_by
114
+
115
+ @token = sacc.auth_preauth(content, by, expires, domain_key)
116
+ sacc.context.token(@token)
117
+ end
118
+
119
+ def account_login_password
120
+ raise ZmError, 'password is required to login !' if password.nil?
121
+
122
+ content, by = account_content_by
123
+
124
+ @token = sacc.auth_password(content, by, @password)
125
+ sacc.context.token(@token)
126
+ end
127
+
128
+ def account_content_by
129
+ @id ? [@id, :id] : [@name, :name]
130
+ end
131
+
132
+ def admin_login
133
+ # @token = sac.delegate_auth(@name)
134
+
135
+ soap_request = SoapElement.admin(SoapAdminConstants::DELEGATE_AUTH_REQUEST)
136
+ node_account = SoapElement.create(SoapConstants::ACCOUNT)
137
+
138
+ if recorded?
139
+ node_account.add_attribute(SoapConstants::BY, SoapConstants::ID).add_content(@id)
140
+ else
141
+ node_account.add_attribute(SoapConstants::BY, SoapConstants::NAME).add_content(@name)
142
+ end
143
+
144
+ soap_request.add_node(node_account)
145
+ @token = sac.invoke(soap_request)[:DelegateAuthResponse][:authToken].first[:_content]
146
+ sacc.context.token(@token)
147
+ end
148
+
149
+ # #################################################################
150
+ # Associations
151
+ # #################################################################
152
+
153
+ def token_metadata
154
+ @token_metadata ||= TokenMetaData.new(@token)
155
+ end
156
+
157
+ def messages
158
+ @messages ||= MessagesCollection.new(self)
159
+ end
160
+
161
+ def folders
162
+ @folders ||= FoldersCollection.new(self)
163
+ end
164
+
165
+ def mountpoints
166
+ @mountpoints ||= MountPointsCollection.new(self)
167
+ end
168
+
169
+ def search_folders
170
+ @search_folders ||= SearchFoldersCollection.new(self)
171
+ end
172
+
173
+ def identities
174
+ @identities ||= IdentitiesCollection.new(self)
175
+ end
176
+
177
+ def shares
178
+ @shares ||= SharesCollection.new(self)
179
+ end
180
+
181
+ def contacts
182
+ @contacts ||= ContactsCollection.new(self)
183
+ end
184
+
185
+ def appointments
186
+ @appointments ||= AppointmentsCollection.new(self)
187
+ end
188
+
189
+ def tags
190
+ @tags ||= TagsCollection.new(self)
191
+ end
192
+
193
+ def tasks
194
+ @tasks ||= TasksCollection.new(self)
195
+ end
196
+
197
+ def aces
198
+ @aces ||= AcesCollection.new(self)
199
+ end
200
+ alias rights aces
201
+
202
+ def signatures
203
+ @signatures ||= SignaturesCollection.new(self)
204
+ end
205
+
206
+ def documents
207
+ @documents ||= DocumentsCollection.new(self)
208
+ end
209
+
210
+ def memberships
211
+ @memberships ||= AccountDlsMembershipCollection.new(self)
212
+ end
213
+
214
+ def dls_owner
215
+ @dls_owner ||= AccountDlsOwnerCollection.new(self)
216
+ end
217
+
218
+ def filter_rules
219
+ @filter_rules ||= FilterRulesCollection.new(self)
220
+ end
221
+
222
+ def outgoing_filter_rules
223
+ @outgoing_filter_rules ||= OutgoingFilterRulesCollection.new(self)
224
+ end
225
+
226
+ def data_sources
227
+ @data_sources ||= DataSourcesCollection.new(self)
228
+ end
229
+
230
+ # #################################################################
231
+ # SOAP Actions
232
+ # #################################################################
233
+
234
+ def password!(new_password = nil)
235
+ new_password ||= @password
236
+ return false if new_password.nil?
237
+
238
+ soap_request = SoapElement.admin(SoapAdminConstants::SET_PASSWORD_REQUEST)
239
+ soap_request.add_attributes({ id: @id, newPassword: new_password })
240
+ sac.invoke(soap_request)
241
+
242
+ @password = new_password
243
+ end
244
+
245
+ def rename!(email)
246
+ soap_request = SoapElement.admin(SoapAdminConstants::RENAME_ACCOUNT_REQUEST)
247
+ soap_request.add_attributes({ id: @id, newName: email })
248
+ sac.invoke(soap_request)
249
+
250
+ @name = email
251
+ end
252
+
253
+ def update!(hash)
254
+ return false if hash.delete_if { |k, v| v.nil? || !respond_to?(k) }.empty?
255
+
256
+ do_update!(hash)
257
+
258
+ hash.each do |key, value|
259
+ update_attribute(key, value)
260
+ end
261
+
262
+ true
263
+ end
264
+
265
+ def local_transport
266
+ raise Zm::Client::ZmError, 'zimbraMailHost is null' if zimbraMailHost.nil?
267
+
268
+ "lmtp:#{zimbraMailHost}:7025"
269
+ end
270
+
271
+ def local_transport!
272
+ update!(zimbraMailTransport: local_transport)
273
+ end
274
+
275
+ def is_local_transport?
276
+ return nil unless zimbraMailTransport
277
+
278
+ zimbraMailTransport.start_with?(SoapConstants::LMTP)
279
+ end
280
+
281
+ def is_external_transport?
282
+ return nil unless zimbraMailTransport
283
+
284
+ zimbraMailTransport.start_with?(SoapConstants::SMTP)
285
+ end
286
+
287
+ def last_logon
288
+ @last_logon ||= Time.parse(zimbraLastLogonTimestamp) unless zimbraLastLogonTimestamp.nil?
289
+ end
290
+
291
+ # #################################################################
292
+
293
+ def uploader
294
+ @uploader ||= Upload.new(self)
295
+ end
296
+ end
297
+ end
298
+ end
299
+ end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ class MailboxPrefsCollection
6
+ def initialize(parent)
7
+ @parent = parent
8
+ @preferences = []
9
+ end
10
+
11
+ def all
12
+ @all || all!
13
+ end
14
+
15
+ def all!
16
+ build_response
17
+ end
18
+
19
+ def clear
20
+ reset_query_params
21
+ @all.clear
22
+ end
23
+
24
+ def preferences(*entries)
25
+ @preferences += entries
26
+ self
27
+ end
28
+
29
+ def update!(hash)
30
+ # The JSON version is different:
31
+ # {
32
+ # ModifyPrefsRequest: {
33
+ # "_attrs": {
34
+ # "prefName1": "prefValue1",
35
+ # "prefName2": "prefValue2"
36
+ # "+nameOfMulitValuedPref3": "addedPrefValue3",
37
+ # "-nameOfMulitValuedPref4": "removedPrefValue4",
38
+ # "nameOfMulitValuedPref5": ["prefValue5one","prefValue5two"],
39
+ # ...
40
+ # },
41
+ # _jsns: "urn:zimbraAccount"
42
+ # }
43
+ # }
44
+
45
+ req = {
46
+ _attrs: hash
47
+ }
48
+
49
+ soap_request = SoapElement.account(SoapAccountConstants::MODIFY_PREFS_REQUEST).add_attributes(req)
50
+ @parent.sacc.invoke(soap_request)
51
+ end
52
+
53
+ private
54
+
55
+ def build_response
56
+ @all = make_query.dig(:GetPrefsResponse, :_attrs)
57
+ end
58
+
59
+ def make_query
60
+ soap_request = SoapElement.account(SoapAccountConstants::GET_PREFS_REQUEST).add_attributes(jsns)
61
+ @parent.sacc.invoke(soap_request)
62
+ end
63
+
64
+ def jsns
65
+ return nil if @preferences.empty?
66
+
67
+ { prefs: @preferences.map { |name| { name: name } } }
68
+ end
69
+
70
+ def reset_query_params
71
+ @preferences.clear
72
+ end
73
+ end
74
+ end
75
+ end
@@ -6,49 +6,12 @@ module Zm
6
6
  # Abstract Class Provisionning Object
7
7
  class Object
8
8
  attr_accessor :parent, :token, :name, :id
9
- attr_reader :grantee_type
10
9
 
11
10
  def initialize(parent)
12
11
  @parent = parent
13
- @use_builder = true
14
12
  yield(self) if block_given?
15
13
  end
16
14
 
17
- def disable_builder
18
- @use_builder = false
19
- self
20
- end
21
-
22
- def enable_builder
23
- @use_builder = true
24
- self
25
- end
26
-
27
- def use_builder?
28
- @use_builder
29
- end
30
-
31
- def init_from_json(json)
32
- @id = json[:id]
33
- @name = json[:name]
34
- end
35
-
36
- def concat
37
- instance_variables.map { |variable| instance_variable_get(variable) }
38
- end
39
-
40
- def to_s
41
- concat.join(DOUBLEPOINT)
42
- end
43
-
44
- def convert_json_string_value(value)
45
- return value unless value.is_a?(String)
46
- return 0 if value == '0'
47
-
48
- c = value.to_i
49
- c.to_s == value ? c : value
50
- end
51
-
52
15
  def recorded?
53
16
  !@id.nil?
54
17
  end
@@ -57,41 +20,44 @@ module Zm
57
20
  recorded? ? modify! : create!
58
21
  end
59
22
 
60
- def instance_variables_array(zcs_attrs)
61
- selected_attrs = zcs_attrs.map { |a| arrow_name(a).to_sym }
62
- attrs_only_set = instance_variables & selected_attrs
63
-
64
- arr = attrs_only_set.map do |name|
65
- n = name.to_s[1..-1]
66
- value = instance_variable_get(name)
67
- [n, value]
68
- end
23
+ def clone
24
+ obj = super
25
+ obj.remove_instance_variable(:@id)
26
+ yield(obj) if block_given?
27
+ obj
28
+ end
69
29
 
70
- multi_value = arr.select { |a| a.last.is_a?(Array) }
71
- arr.reject! { |a| a.last.is_a?(Array) }
72
- multi_value.each { |a| arr += a.last.map { |v| [a.first, v] } }
73
- arr
30
+ def logger
31
+ @parent.logger
74
32
  end
75
33
 
76
- def instance_variables_hash(zcs_attrs)
77
- Hash[instance_variables_array(zcs_attrs)]
34
+ def update_attribute(key, value)
35
+ arrow_attr_sym = Utils.arrow_name_sym(key)
36
+
37
+ if value.respond_to?(:empty?) && value.empty?
38
+ remove_instance_variable(arrow_attr_sym) if instance_variable_get(arrow_attr_sym)
39
+ else
40
+ instance_variable_set(arrow_attr_sym, value)
41
+ end
78
42
  end
79
43
 
80
- def arrow_name(name)
81
- return name if name.to_s.start_with?('@')
44
+ def to_s
45
+ inspect
46
+ end
82
47
 
83
- "@#{name}"
48
+ def to_h
49
+ Hash[instance_variables_map]
84
50
  end
85
51
 
86
- def clone
87
- obj = super
88
- obj.remove_instance_variable(:@id)
89
- yield(obj) if block_given?
90
- obj
52
+ def inspect
53
+ keys_str = to_h.map { |k, v| "#{k}: #{v}" }.join(', ')
54
+ "#{self.class}:#{format('0x00%x', (object_id << 1))} #{keys_str}"
91
55
  end
92
56
 
93
- def logger
94
- @parent.logger
57
+ def instance_variables_map
58
+ keys = instance_variables.dup
59
+ keys.delete(:@parent)
60
+ keys.map { |key| [key, instance_variable_get(key)] }
95
61
  end
96
62
  end
97
63
  end
@@ -10,24 +10,18 @@ module Zm
10
10
  @json = json
11
11
  end
12
12
 
13
- def make
14
- return [] if json_items.nil?
15
-
16
- json_items.map do |entry|
17
- child = @child_class.new(@parent)
18
- child.init_from_json(entry)
19
- child
20
- end
13
+ def ids
14
+ @json[:Body][json_key][:hit]&.map { |s| s[:id] } || []
21
15
  end
22
16
 
23
17
  private
24
18
 
25
19
  def json_items
26
- @json_items ||= @json[:Body][json_key][@json_item_key]
20
+ @json_items ||= @json[json_key][@json_item_key]
27
21
  end
28
22
 
29
23
  def json_key
30
- @json_key ||= @json[:Body].keys.first
24
+ @json_key ||= @json.keys.first
31
25
  end
32
26
  end
33
27
  end
@@ -6,6 +6,8 @@ module Zm
6
6
  module Base
7
7
  # Abstract Class Collection
8
8
  class ObjectsCollection
9
+ include Zm::Inspector
10
+
9
11
  METHODS_MISSING_LIST = %i[select each map length].to_set.freeze
10
12
  attr_reader :parent
11
13
 
@@ -19,12 +21,6 @@ module Zm
19
21
  find_by(id: id)
20
22
  end
21
23
 
22
- def build_from_entry(entry)
23
- child = @child_class.new(@parent)
24
- child.init_from_json(entry)
25
- child
26
- end
27
-
28
24
  def first
29
25
  @limit = 1
30
26
  build_response.first
@@ -46,6 +42,8 @@ module Zm
46
42
  self
47
43
  end
48
44
 
45
+ alias limit per_page
46
+
49
47
  def page(offset)
50
48
  return self if @offset == offset
51
49
 
@@ -54,6 +52,8 @@ module Zm
54
52
  self
55
53
  end
56
54
 
55
+ alias offset page
56
+
57
57
  def order(sort_by, sort_ascending = SoapUtils::ON)
58
58
  return self if @sort_by == sort_by && @sort_ascending == sort_ascending
59
59
 
@@ -93,7 +93,10 @@ module Zm
93
93
  def attrs_comma
94
94
  return @attrs unless @attrs.is_a?(Array)
95
95
 
96
- @attrs.uniq!
96
+ # @attrs.uniq!
97
+ # @attrs.compact!
98
+ return nil if @attrs.empty?
99
+
97
100
  @attrs.join(COMMA)
98
101
  end
99
102
 
@@ -104,9 +107,9 @@ module Zm
104
107
  @sort_by = nil
105
108
  @sort_ascending = SoapUtils::ON
106
109
  @count_only = SoapUtils::OFF
107
- @all_servers = 0
108
- @refresh = 0
109
- @apply_cos = 1
110
+ @all_servers = SoapUtils::OFF
111
+ @refresh = SoapUtils::OFF
112
+ @apply_cos = SoapUtils::ON
110
113
  end
111
114
  end
112
115
  end
@@ -7,21 +7,23 @@ module Zm
7
7
  module Client
8
8
  module Base
9
9
  class ZimbraAttribute < OpenStruct
10
-
11
- # attr_accessor :flags, :id, :immutable, :max, :min, :name, :optionalIn, :order, :requiredIn, :since, :type, :value
12
-
13
10
  def version_start
14
11
  return @version_start unless @version_start.nil?
15
12
 
16
- if since.nil?
17
- @version_start = '0.0.0'
18
- else
19
- @version_start = VersionSorter.sort(since.split(',')).first
20
- end
13
+ @version_start = if since.nil?
14
+ '0.0.0'
15
+ else
16
+ VersionSorter.sort(since.split(',')).first
17
+ end
21
18
 
22
19
  @version_start
23
20
  end
24
21
 
22
+ def immutable?
23
+ # @immutable.to_s == '1'
24
+ immutable == '1'
25
+ end
26
+
25
27
  def objects_scope
26
28
  @objects_scope ||= (optionalIn.to_s.split(',') + requiredIn.to_s.split(',')).freeze
27
29
  end