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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b9fad2347a2f7fa88c1da39a1e3dfdc85598e3dac8e7a060866b58da8fb1aa39
4
- data.tar.gz: 30b9161ed034e763748918c47675bd4440eea099bfab0a70d4089691020b7860
3
+ metadata.gz: 0e22c8126c13210fc0be35b5358b30d5ae7cbf12118bffe8ad522e6fdc2a2379
4
+ data.tar.gz: 81eca4a1ef8efd633447c93bf782cd68e522a19db80f968475404aa3fca5c5cd
5
5
  SHA512:
6
- metadata.gz: e6cd34015b3ebda5f628f27722d894ef30dc1b7e7cc9500fd91cbb63cf5d138f4aa1197b5681638945cf9c8b63bec5c7e4dbb426b7f3cee2cc11921581693a6f
7
- data.tar.gz: 2da81cb383c52918038f3e586e781b6d917ecd356a8414ca0e5aa5616b6d9023689c7dc294fd9194471c474b117cd8f016aef293b1e8ff5433a4d0469bbc9b91
6
+ metadata.gz: 1c5a99d6ff59e84e662c6715fca60e03b0087874c9679bc71309430c78c8264afea3e21c3634d4734987a3306f18c48f59e7eb94802cc1185b80893cd8615c34
7
+ data.tar.gz: 44cba59215626852bf2e2dc0189f10164112ffca3fa8c1878815515fa2e5e8e1ce5943f6ee235a74f8883f8a8a4a5acc2c2df5f69994a61b12ebc29fbd3f28aa
data/.gitignore CHANGED
@@ -16,7 +16,7 @@
16
16
  /.idea
17
17
  /zm-ruby-client.iml
18
18
 
19
- /examples
19
+ #/examples
20
20
  /vendor
21
21
 
22
22
  # Used by dotenv library to load environment variables.
data/Gemfile CHANGED
@@ -1,7 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- ruby '>= 2.6'
3
+ ruby ">= 2.7"
4
4
 
5
5
  gem 'addressable', '~> 2.8'
6
6
  gem 'curb', '~> 1.0'
7
- gem 'version_sorter', '~>2.3'
7
+ gem 'version_sorter', '~> 2.3'
data/README.md CHANGED
@@ -2,10 +2,17 @@
2
2
 
3
3
  Library to interface with Zimbra simply.
4
4
 
5
+ Author: Maxime Désécot <maxime.desecot@gmail.com>
6
+
5
7
  ## Installation
6
8
 
9
+ OS: Linux distribution LTS
10
+
11
+ Language: Ruby2.7+
12
+
7
13
  ```bash
8
14
  sudo apt install make gcc curl libcurl4-openssl-dev
15
+ gem install zm-ruby-client
9
16
  ```
10
17
 
11
18
  ## Examples of uses:
@@ -1,345 +1,68 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'zm/modules/common/account_common'
4
- # require_relative '../../modules/common/account_galsync'
5
- require 'zm/client/common'
6
- require 'zm/client/connector/rest_account'
7
- require 'zm/client/signature'
8
- require 'zm/client/folder'
9
- require 'zm/client/mountpoint'
10
- require 'zm/client/search_folder'
11
- require 'zm/client/share'
12
- require 'zm/client/tag'
13
- require 'zm/client/ace'
14
- require 'zm/client/contact'
15
- require 'zm/client/appointment'
16
- require 'zm/client/task'
17
- require 'zm/client/document'
18
- # require 'zm/client/data_source'
19
- require 'zm/client/message'
20
- require 'zm/client/identity'
21
- require 'zm/client/upload'
22
- require 'addressable/uri'
3
+ require 'zm/client/account/account_aliases_collection'
23
4
 
24
5
  module Zm
25
6
  module Client
26
7
  # objectClass: zimbraAccount
27
- class Account < Base::AdminObject
28
- attr_accessor :name, :id, :token, :home_url, :public_url, :password, :domainkey, :carLicense
8
+ class Account < Base::MailboxObject
9
+ # #################################################################
10
+ # Associations
11
+ # #################################################################
29
12
 
30
- def initialize(parent)
31
- extend(AccountCommon)
32
- super(parent)
33
- @grantee_type = 'usr'.freeze
34
- end
35
-
36
- def all_instance_variable_keys
37
- AccountCommon::ZM_ACCOUNT_ATTRS
38
- end
39
-
40
- def rest_account_connector
41
- @rest_account_connector ||= RestAccountConnector.new
42
- end
43
-
44
- alias rac rest_account_connector
45
-
46
- def logged?
47
- !@token.nil?
48
- end
49
-
50
- def login
51
- if @parent.logged?
52
- admin_login
53
- else
54
- account_login
55
- end
56
- end
57
-
58
- def account_login
59
- if password
60
- account_login_password
61
- else
62
- account_login_preauth
63
- end
64
- end
65
-
66
- def account_login_preauth
67
- domain_key
68
- raise ZmError, 'domain key is required to login !' if @domainkey.nil?
69
-
70
- @token = sacc.auth_preauth(@name, @domainkey)
71
- end
72
-
73
- def account_login_password
74
- raise ZmError, 'password is required to login !' if password.nil?
75
-
76
- @token = sacc.auth_password(@name, @password)
77
- end
78
-
79
- def admin_login
80
- @token = sac.delegate_auth(@name)
81
- end
82
-
83
- def token_metadata
84
- @token_metadata ||= TokenMetaData.new(@token)
85
- end
86
-
87
- def domain_name
88
- @domain_name ||= @name.split('@').last
89
- end
90
-
91
- def domain_key
92
- @domainkey ||= @parent.domain_key(domain_name)
93
- end
94
-
95
- def domain_key=(key)
96
- @domainkey = key
97
- end
98
-
99
- def infos
100
- @infos || read_infos
101
- end
102
-
103
- def read_infos
104
- @infos = sacc.get_info(@token)[:Body][:GetInfoResponse]
105
- @id = @infos[:id]
106
- @used = @infos[:used]
107
- @public_url = @infos[:publicURL]
108
- @zimbraCOSId = @infos[:cos][:id]
109
- @home_url = @infos[:rest]
110
- @infos
13
+ def aliases
14
+ @aliases ||= AccountAliasesCollection.new(self)
111
15
  end
112
16
 
113
17
  def cos
114
18
  @cos ||= @parent.coses.find_by(id: zimbraCOSId)
115
19
  end
116
20
 
117
- def used
118
- @used ||= sac.get_mailbox(id)[:Body][:GetMailboxResponse][:mbox].first[:s]
119
- end
120
-
121
- def public_url
122
- infos if @infos.nil?
123
- @public_url
124
- end
125
-
126
- def home_url
127
- infos if @infos.nil?
128
- @home_url
129
- end
130
-
131
- def messages
132
- @messages ||= MessagesCollection.new(self)
133
- end
134
-
135
- def folders
136
- @folders ||= FoldersCollection.new(self)
137
- end
138
-
139
- def mountpoints
140
- @mountpointss ||= MountPointsCollection.new(self)
141
- end
142
-
143
- def search_folders
144
- @search_folders ||= SearchFoldersCollection.new(self)
145
- end
146
-
147
- def identities
148
- @identities ||= IdentitiesCollection.new(self)
149
- end
150
-
151
- def shares
152
- @shares ||= SharesCollection.new(self)
153
- end
154
-
155
- def contacts
156
- @contacts ||= ContactsCollection.new(self)
157
- end
158
-
159
- def appointments
160
- @appointments ||= AppointmentsCollection.new(self)
161
- end
162
-
163
- def tags
164
- @tags ||= TagsCollection.new(self)
165
- end
166
-
167
- def tasks
168
- @tasks ||= TasksCollection.new(self)
169
- end
170
-
171
- def aces
172
- @aces ||= AcesCollection.new(self)
173
- end
174
- alias rights aces
175
-
176
- def signatures
177
- @signatures ||= SignaturesCollection.new(self)
178
- end
179
-
180
- def data_sources
181
- @data_sources ||= DataSourcesCollection.new sac, self
182
- end
183
-
184
- def documents
185
- @documents ||= DocumentsCollection.new(self)
186
- end
187
-
188
- def message_folders
189
- @message_folders ||= folders.all.select { |f| f.view == Zm::Client::FolderView::MESSAGE.to_s }
190
- end
191
-
192
- def contact_folders
193
- @contact_folders ||= folders.all.select { |f| f.view == Zm::Client::FolderView::CONTACT.to_s }
194
- end
195
-
196
- def calendar_folders
197
- @calendar_folders ||= folders.all.select { |f| f.view == Zm::Client::FolderView::APPOINTMENT.to_s }
198
- end
199
-
200
- def task_folders
201
- @task_folders ||= folders.all.select { |f| f.view == Zm::Client::FolderView::TASK.to_s }
202
- end
203
-
204
- def document_folders
205
- @document_folders ||= folders.all.select { |f| f.view == Zm::Client::FolderView::DOCUMENT.to_s }
206
- end
21
+ # #################################################################
22
+ # SOAP Actions
23
+ # #################################################################
207
24
 
208
25
  def delete!
209
- sac.delete_account(@id)
210
- end
211
-
212
- def password!(new_password)
213
- sac.set_password(@id, new_password)
214
- @password = new_password
215
- end
216
-
217
- def update!(hash)
218
- sac.modify_account(@id, hash)
219
-
220
- hash.each do |k, v|
221
- arrow_attr_sym = "@#{k}".to_sym
222
-
223
- if v.respond_to?(:empty?) && v.empty?
224
- self.remove_instance_variable(arrow_attr_sym) if self.instance_variable_get(arrow_attr_sym)
225
- else
226
- self.instance_variable_set(arrow_attr_sym, v)
227
- end
228
- end
26
+ sac.invoke(jsns_builder.to_delete)
27
+ @id = nil
229
28
  end
230
29
 
231
30
  def modify!
232
- attrs_to_modify = instance_variables_array(attrs_write)
233
- return if attrs_to_modify.empty?
234
-
235
- sac.modify_account(@id, attrs_to_modify)
31
+ sac.invoke(jsns_builder.to_update)
32
+ true
236
33
  end
237
34
 
238
35
  def create!
239
- rep = sac.create_account(
240
- @name,
241
- @password,
242
- instance_variables_array(attrs_write)
243
- )
244
- @id = rep[:Body][:CreateAccountResponse][:account].first[:id]
245
- end
246
-
247
- def set_password(new_password = nil)
248
- new_password ||= @password
249
- sac.set_password(@id, new_password)
250
- @password = new_password
251
- end
252
-
253
- def aliases
254
- @aliases ||= set_aliases
255
- end
256
-
257
- def set_aliases
258
- return [] if zimbraMailAlias.nil?
259
- return [zimbraMailAlias] if zimbraMailAlias.is_a?(String)
260
- zimbraMailAlias
261
- end
262
-
263
- def add_alias!(email)
264
- sac.add_account_alias(@id, email)
265
- aliases.push(email)
266
- end
267
-
268
- def remove_alias!(email)
269
- sac.remove_account_alias(@id, email)
270
- aliases.delete(email)
271
- end
272
-
273
- def rename!(email)
274
- sac.rename_account(@id, email)
275
- @name = email
276
- end
277
-
278
- def local_transport
279
- raise Zm::Client::SoapError, 'zimbraMailHost is null' if zimbraMailHost.nil?
280
-
281
- "lmtp:#{zimbraMailHost}:7025"
282
- end
283
-
284
- def local_transport!
285
- update!(zimbraMailTransport: local_transport)
286
- end
287
-
288
- def is_local_transport?
289
- return nil unless zimbraMailTransport
290
-
291
- zimbraMailTransport.start_with?('lmtp')
292
- end
293
-
294
- def is_external_transport?
295
- return nil unless zimbraMailTransport
296
-
297
- zimbraMailTransport.start_with?('smtp')
298
- end
299
-
300
- def uploader
301
- @uploader ||= Upload.new(self)
302
- end
303
-
304
- def last_logon
305
- @last_logon ||= Time.parse zimbraLastLogonTimestamp unless zimbraLastLogonTimestamp.nil?
36
+ resp = sac.invoke(jsns_builder.to_create)
37
+ @id = resp[:CreateAccountResponse][:account].first[:id]
306
38
  end
307
39
 
308
40
  def created_at
309
- @created_at ||= Time.parse zimbraCreateTimestamp unless zimbraCreateTimestamp.nil?
41
+ @created_at ||= Time.parse(zimbraCreateTimestamp) unless zimbraCreateTimestamp.nil?
310
42
  end
311
43
 
312
44
  def flush_cache!
313
- sac.flush_cache('account', 1, @id)
314
- end
315
-
316
- def move_mailbox(server)
317
- raise Zm::Client::SoapError, 'zimbraMailHost is null' if zimbraMailHost.nil?
318
-
319
- sac.move_mailbox(@name, zimbraMailHost, server.name, server.id)
45
+ soap_request = SoapElement.admin(SoapAdminConstants::FLUSH_CACHE_REQUEST)
46
+ node_cache = SoapElement.create('cache').add_attributes({ type: SoapConstants::ACCOUNT, allServers: 1 })
47
+ soap_request.add_node(node_cache)
48
+ node_entry = SoapElement.create('entry').add_attribute(SoapConstants::BY, SoapConstants::ID).add_content(@id)
49
+ node_cache.add_node(node_entry)
50
+ sac.invoke(soap_request)
51
+ true
320
52
  end
321
53
 
322
- def is_on_to_move?(server)
323
- resp = sac.query_mailbox_move(@name, server.id)
324
- resp[:Body][:QueryMailboxMoveResponse][:account].nil?
54
+ def attrs_write
55
+ @parent.zimbra_attributes.all_account_attrs_writable_names
325
56
  end
326
57
 
327
- def memberships
328
- @memberships ||= AccountDlsMembershipCollection.new(self)
329
- end
330
-
331
- def dls_owner
332
- @dls_owner ||= AccountDlsOwnerCollection.new(self)
333
- end
58
+ private
334
59
 
335
- def ranking(op, email = nil)
336
- sacc.ranking_action(@token, op, email)
60
+ def do_update!(hash)
61
+ sac.invoke(jsns_builder.to_patch(hash))
337
62
  end
338
63
 
339
- def init_from_json(json)
340
- @used = json[:used] if json[:used]
341
- @zimbraMailQuota = json[:limit] if json[:limit]
342
- super(json)
64
+ def jsns_builder
65
+ @jsns_builder ||= AccountJsnsBuilder.new(self)
343
66
  end
344
67
  end
345
68
  end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # Collection Account Aliases
6
+ class AccountAliasesCollection
7
+ def initialize(parent)
8
+ @parent = parent
9
+ build_aliases
10
+ end
11
+
12
+ def all
13
+ @parent.zimbraMailAlias
14
+ end
15
+
16
+ def add!(email)
17
+ return false if all.include?(Utils.format_email(email))
18
+
19
+ soap_request = SoapElement.admin(SoapAdminConstants::ADD_ACCOUNT_ALIAS_REQUEST)
20
+ soap_request.add_attributes({ id: @parent.id, alias: email })
21
+ @parent.sac.invoke(soap_request)
22
+
23
+ all.push(email)
24
+ true
25
+ end
26
+
27
+ def remove!(email)
28
+ return false unless all.include?(Utils.format_email(email))
29
+
30
+ soap_request = SoapElement.admin(SoapAdminConstants::REMOVE_ACCOUNT_ALIAS_REQUEST)
31
+ soap_request.add_attributes({ id: @parent.id, alias: email })
32
+ @parent.sac.invoke(soap_request)
33
+
34
+ all.delete(email)
35
+ true
36
+ end
37
+
38
+ private
39
+
40
+ def build_aliases
41
+ return if @parent.zimbraMailAlias.is_a?(Array)
42
+
43
+ if @parent.zimbraMailAlias.nil?
44
+ @parent.zimbraMailAlias = []
45
+ return
46
+ end
47
+
48
+ @parent.zimbraMailAlias = [@parent.zimbraMailAlias]
49
+ end
50
+ end
51
+ end
52
+ end
@@ -11,7 +11,10 @@ module Zm
11
11
  private
12
12
 
13
13
  def make_query
14
- @parent.sac.get_account_membership(@parent.id, :id)
14
+ soap_request = SoapElement.admin(SoapAdminConstants::GET_ACCOUNT_MEMBERSHIP_REQUEST)
15
+ node_account = SoapElement.create(SoapConstants::ACCOUNT).add_attribute(SoapConstants::BY, SoapConstants::ID).add_content(@parent.id)
16
+ soap_request.add_node(node_account)
17
+ sac.invoke(soap_request)
15
18
  end
16
19
 
17
20
  def build_response
@@ -11,7 +11,14 @@ module Zm
11
11
  private
12
12
 
13
13
  def make_query
14
- @parent.sac.search_directory("(zimbraACE=#{@parent.id} usr ownDistList)", SoapUtils::MAX_RESULT, nil, nil, nil, nil, nil, nil, SearchType::DL)
14
+ jsns = {
15
+ query: "(zimbraACE=#{@parent.id} usr ownDistList)",
16
+ types: SearchType::DL
17
+ }
18
+
19
+ soap_request = SoapElement.admin(SoapAdminConstants::SEARCH_DIRECTORY_REQUEST)
20
+ soap_request.add_attributes(jsns)
21
+ @parent.sac.invoke(soap_request)
15
22
  end
16
23
 
17
24
  def build_response
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class for account jsns builder
6
+ class AccountJsnsBuilder
7
+ def initialize(item)
8
+ @item = item
9
+ end
10
+
11
+ def to_create
12
+ req = {
13
+ name: @item.name,
14
+ password: @item.password
15
+ }.reject { |_, v| v.nil? }
16
+
17
+ soap_request = SoapElement.admin(SoapAdminConstants::CREATE_ACCOUNT_REQUEST).add_attributes(req)
18
+
19
+ attrs_only_set_h.each do |key, values|
20
+ values.each do |value|
21
+ node_attr = SoapElement.create(SoapConstants::A).add_attribute(SoapConstants::N, key).add_content(value)
22
+ soap_request.add_node(node_attr)
23
+ end
24
+ end
25
+
26
+ soap_request
27
+ end
28
+
29
+ def to_update
30
+ soap_request = SoapElement.admin(SoapAdminConstants::MODIFY_ACCOUNT_REQUEST).add_attribute(SoapConstants::ID,
31
+ @item.id)
32
+
33
+ attrs_only_set_h.each do |key, values|
34
+ values.each do |value|
35
+ node_attr = SoapElement.create(SoapConstants::A).add_attribute(SoapConstants::N, key).add_content(value)
36
+ soap_request.add_node(node_attr)
37
+ end
38
+ end
39
+
40
+ soap_request
41
+ end
42
+
43
+ def to_patch(hash)
44
+ soap_request = SoapElement.admin(SoapAdminConstants::MODIFY_ACCOUNT_REQUEST).add_attribute(SoapConstants::ID,
45
+ @item.id)
46
+
47
+ hash.each do |key, values|
48
+ values = [values] unless values.is_a?(Array)
49
+ values.each do |value|
50
+ node_attr = SoapElement.create(SoapConstants::A).add_attribute(SoapConstants::N, key).add_content(value)
51
+ soap_request.add_node(node_attr)
52
+ end
53
+ end
54
+
55
+ soap_request
56
+ end
57
+
58
+ def to_delete
59
+ SoapElement.admin(SoapAdminConstants::DELETE_ACCOUNT_REQUEST).add_attribute('id', @item.id)
60
+ end
61
+
62
+ def attrs_only_set_h
63
+ selected_attrs = @item.attrs_write.map { |a| Utils.arrow_name_sym(a) }
64
+ attrs_only_set = @item.instance_variables & selected_attrs
65
+
66
+ arr = attrs_only_set.map do |name|
67
+ n = name.to_s[1..]
68
+ values = @item.instance_variable_get(name)
69
+ values = [values] unless values.is_a?(Array)
70
+ [n, values]
71
+ end
72
+
73
+ Hash[arr]
74
+ end
75
+ end
76
+ end
77
+ end
@@ -3,7 +3,7 @@
3
3
  module Zm
4
4
  module Client
5
5
  # class for initialize account
6
- class AccountJsnsInitializer
6
+ class AccountJsnsInitializer < Base::BaseJsnsInitializer
7
7
  class << self
8
8
  def create(parent, json)
9
9
  item = Account.new(parent)
@@ -12,29 +12,14 @@ module Zm
12
12
  end
13
13
 
14
14
  def update(item, json)
15
-
16
- # attr_types_h = item.parent.zimbra_attributes.all_account_attr_types_h
17
-
18
- # puts attr_types_h
19
-
20
- item.id = json[:id]
21
- item.name = json[:name]
22
-
23
- json[:a]&.reject! { |n| n[:n].nil? }
24
- # json_map = Hash[json[:a].map { |n| [n[:n], n[:_content]] }].freeze
25
-
26
- # puts json_map
27
-
28
- # item.parent.zimbra_attributes.all_account_attrs.each do |attr|
29
- # if attr.type.nil?
30
- # # p attr
31
- # else
32
- # json_field = json_map[attr.name]
33
- # puts json_field unless json_field.nil?
34
- # end
35
- # end
36
-
37
- item.init_from_json(json)
15
+ item.id = json[:id]
16
+ item.name = json[:name]
17
+ item.used = json[:used] unless json[:used].nil?
18
+ item.zimbraMailQuota = json[:limit] unless json[:limit].nil?
19
+
20
+ formatted_json(json).each do |k, v|
21
+ valorise(item, k, v)
22
+ end
38
23
 
39
24
  item
40
25
  end
@@ -6,7 +6,6 @@ module Zm
6
6
  class AccountsBuilder < Base::ObjectsBuilder
7
7
  def initialize(parent, json)
8
8
  super(parent, json)
9
- @child_class = Account
10
9
  @json_item_key = :account
11
10
  end
12
11
 
@@ -11,19 +11,43 @@ module Zm
11
11
  super(parent)
12
12
  end
13
13
 
14
- def find_by(hash)
15
- rep = sac.get_account(hash.values.first, hash.keys.first, attrs_comma, @apply_cos)
16
- entry = rep[:Body][:GetAccountResponse][:account].first
17
- # puts entry
14
+ def find_by!(hash)
15
+ soap_request = SoapElement.admin(SoapAdminConstants::GET_ACCOUNT_REQUEST)
16
+ node_account = SoapElement.create(SoapConstants::ACCOUNT).add_attribute(SoapConstants::BY, hash.keys.first).add_content(hash.values.first)
17
+ soap_request.add_node(node_account)
18
+ soap_request.add_attribute(SoapConstants::ATTRS, attrs_comma)
19
+ soap_request.add_attribute(SoapConstants::APPLY_COS, @apply_cos)
20
+ entry = sac.invoke(soap_request)[:GetAccountResponse][:account].first
18
21
 
19
22
  reset_query_params
20
- build_from_entry(entry)
23
+ AccountJsnsInitializer.create(@parent, entry)
21
24
  end
22
25
 
23
- def quotas
24
- return nil if @domain_name.nil? && @target_server_id.nil?
26
+ def quotas(domain_name: @domain_name, target_server_id: @target_server_id)
27
+ return nil if domain_name.nil? && target_server_id.nil?
28
+
29
+ if target_server_id.nil?
30
+ @all_servers = SoapUtils::ON
31
+ else
32
+ sac.context.target_server(target_server_id)
33
+ end
34
+
35
+ jsns = {
36
+ domain: domain_name,
37
+ allServers: @all_servers,
38
+ limit: @limit,
39
+ offset: @offset,
40
+ sortBy: @sort_by,
41
+ sortAscending: @sort_ascending,
42
+ refresh: @refresh
43
+ }.delete_if { |_, value| value.nil? }
44
+
45
+ soap_request = SoapElement.admin(SoapAdminConstants::GET_QUOTA_USAGE_REQUEST)
46
+ soap_request.add_attributes(jsns)
47
+ json = sac.invoke(soap_request)
48
+
49
+ sac.context.target_server(nil) unless target_server_id.nil?
25
50
 
26
- json = sac.get_quota_usage(@domain_name, @all_servers, @limit, @offset, @sort_by, @sort_ascending, @refresh, @target_server_id)
27
51
  reset_query_params
28
52
  @builder_class.new(@parent, json).make
29
53
  end