zm-ruby-client 0.18.3 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/Gemfile +2 -2
  4. data/README.md +7 -0
  5. data/lib/zm/client/account/account.rb +31 -319
  6. data/lib/zm/client/account/account_aliases_collection.rb +52 -0
  7. data/lib/zm/client/account/account_dls_membership_collection.rb +4 -1
  8. data/lib/zm/client/account/account_dls_owner_collection.rb +8 -1
  9. data/lib/zm/client/account/account_jsns_builder.rb +77 -0
  10. data/lib/zm/client/account/account_jsns_initializer.rb +9 -24
  11. data/lib/zm/client/account/accounts_builder.rb +0 -1
  12. data/lib/zm/client/account/accounts_collection.rb +32 -8
  13. data/lib/zm/client/account.rb +1 -0
  14. data/lib/zm/client/ace/ace.rb +6 -22
  15. data/lib/zm/client/ace/ace_jsns_builder.rb +15 -16
  16. data/lib/zm/client/ace/ace_jsns_initializer.rb +0 -1
  17. data/lib/zm/client/ace/aces_builder.rb +0 -1
  18. data/lib/zm/client/ace/aces_collection.rb +2 -18
  19. data/lib/zm/client/appointment/appointment.rb +38 -30
  20. data/lib/zm/client/appointment/appointment_jsns_builder.rb +22 -34
  21. data/lib/zm/client/appointment/appointment_jsns_initializer.rb +6 -3
  22. data/lib/zm/client/appointment/appointments_builder.rb +6 -18
  23. data/lib/zm/client/appointment/appointments_collection.rb +25 -4
  24. data/lib/zm/client/backup/backup.rb +4 -32
  25. data/lib/zm/client/backup/backup_jsns_initializer.rb +26 -0
  26. data/lib/zm/client/backup/backups_builder.rb +8 -13
  27. data/lib/zm/client/backup/backups_collection.rb +2 -1
  28. data/lib/zm/client/backup.rb +1 -0
  29. data/lib/zm/client/base/account_search_objects_collection.rb +34 -13
  30. data/lib/zm/client/base/admin_objects_collection.rb +82 -17
  31. data/lib/zm/client/base/base_account_jsns_builder.rb +98 -0
  32. data/lib/zm/client/base/base_jsns_builder.rb +47 -0
  33. data/lib/zm/client/base/base_jsns_initializer.rb +43 -12
  34. data/lib/zm/client/base/ldap_filter.rb +20 -5
  35. data/lib/zm/client/base/mailbox_infos_collection.rb +88 -0
  36. data/lib/zm/client/base/mailbox_object.rb +299 -0
  37. data/lib/zm/client/base/mailbox_prefs_collection.rb +75 -0
  38. data/lib/zm/client/base/object.rb +28 -62
  39. data/lib/zm/client/base/objects_builder.rb +4 -10
  40. data/lib/zm/client/base/objects_collection.rb +13 -10
  41. data/lib/zm/client/base/zimbra_attribute.rb +10 -8
  42. data/lib/zm/client/base/zimbra_attributes_collection.rb +154 -10
  43. data/lib/zm/client/base.rb +5 -5
  44. data/lib/zm/client/cluster/cluster.rb +43 -39
  45. data/lib/zm/client/cluster/cluster_config.rb +5 -5
  46. data/lib/zm/client/common/recipients.rb +3 -3
  47. data/lib/zm/client/common/token_metadata.rb +4 -1
  48. data/lib/zm/client/common/utils.rb +57 -0
  49. data/lib/zm/client/common.rb +2 -1
  50. data/lib/zm/client/connector/rest_account.rb +14 -4
  51. data/lib/zm/client/connector/soap_account.rb +38 -441
  52. data/lib/zm/client/connector/soap_admin.rb +16 -552
  53. data/lib/zm/client/connector/soap_base.rb +25 -5
  54. data/lib/zm/client/connector/soap_error.rb +1 -3
  55. data/lib/zm/client/constant.rb +21 -11
  56. data/lib/zm/client/contact/contact.rb +42 -83
  57. data/lib/zm/client/contact/contact_jsns_builder.rb +60 -0
  58. data/lib/zm/client/contact/contact_jsns_initializer.rb +78 -0
  59. data/lib/zm/client/contact/contact_member.rb +29 -28
  60. data/lib/zm/client/contact/contact_members_collection.rb +44 -0
  61. data/lib/zm/client/contact/contacts_builder.rb +8 -1
  62. data/lib/zm/client/contact/contacts_collection.rb +17 -1
  63. data/lib/zm/client/contact/group_contact_jsns_builder.rb +51 -0
  64. data/lib/zm/client/contact/mod_group_contact.rb +4 -67
  65. data/lib/zm/client/contact.rb +5 -1
  66. data/lib/zm/client/cos/cos.rb +35 -40
  67. data/lib/zm/client/cos/cos_accounts_collection.rb +19 -0
  68. data/lib/zm/client/cos/cos_domains_collection.rb +20 -0
  69. data/lib/zm/client/cos/cos_jsns_builder.rb +72 -0
  70. data/lib/zm/client/cos/cos_jsns_initializer.rb +29 -0
  71. data/lib/zm/client/cos/cos_servers_collection.rb +60 -0
  72. data/lib/zm/client/cos/coses_builder.rb +8 -1
  73. data/lib/zm/client/cos/coses_collection.rb +8 -5
  74. data/lib/zm/client/cos.rb +5 -0
  75. data/lib/zm/client/datasource/datasource.rb +69 -0
  76. data/lib/zm/client/datasource/datasource_jsns_builder.rb +32 -0
  77. data/lib/zm/client/datasource/datasource_jsns_initializer.rb +27 -0
  78. data/lib/zm/client/datasource/datasources_builder.rb +29 -0
  79. data/lib/zm/client/datasource/datasources_collection.rb +21 -0
  80. data/lib/zm/client/datasource.rb +7 -0
  81. data/lib/zm/client/distributionlist/distributionlist.rb +52 -118
  82. data/lib/zm/client/distributionlist/distributionlist_aces_collection.rb +31 -0
  83. data/lib/zm/client/distributionlist/distributionlist_aliases_collection.rb +53 -0
  84. data/lib/zm/client/distributionlist/distributionlist_jsns_builder.rb +82 -0
  85. data/lib/zm/client/distributionlist/distributionlist_jsns_initializer.rb +32 -0
  86. data/lib/zm/client/distributionlist/distributionlist_members_collection.rb +47 -0
  87. data/lib/zm/client/distributionlist/distributionlist_owners_collection.rb +52 -0
  88. data/lib/zm/client/distributionlist/distributionlists_builder.rb +8 -1
  89. data/lib/zm/client/distributionlist/distributionlists_collection.rb +8 -9
  90. data/lib/zm/client/distributionlist/dls_membership_collection.rb +4 -1
  91. data/lib/zm/client/distributionlist.rb +2 -0
  92. data/lib/zm/client/document/document.rb +27 -24
  93. data/lib/zm/client/document/document_jsns_builder.rb +18 -0
  94. data/lib/zm/client/document/document_jsns_initializer.rb +44 -0
  95. data/lib/zm/client/document/documents_builder.rb +6 -16
  96. data/lib/zm/client/document/documents_collection.rb +17 -67
  97. data/lib/zm/client/document.rb +2 -0
  98. data/lib/zm/client/domain/domain.rb +45 -68
  99. data/lib/zm/client/domain/domain_accounts_collection.rb +1 -1
  100. data/lib/zm/client/domain/domain_distributionlists_collection.rb +13 -0
  101. data/lib/zm/client/domain/domain_jsns_builder.rb +69 -0
  102. data/lib/zm/client/domain/domain_jsns_initializer.rb +25 -0
  103. data/lib/zm/client/domain/domain_resources_collection.rb +13 -0
  104. data/lib/zm/client/domain/domains_builder.rb +8 -1
  105. data/lib/zm/client/domain/domains_collection.rb +7 -7
  106. data/lib/zm/client/domain.rb +4 -0
  107. data/lib/zm/client/filter_rule.rb +7 -0
  108. data/lib/zm/client/filter_rules/filter_rule.rb +10 -0
  109. data/lib/zm/client/filter_rules/filter_rule_jsns_initializer.rb +24 -0
  110. data/lib/zm/client/filter_rules/filter_rules_builder.rb +21 -0
  111. data/lib/zm/client/filter_rules/filter_rules_collection.rb +21 -0
  112. data/lib/zm/client/filter_rules/outgoing_filter_rules_collection.rb +15 -0
  113. data/lib/zm/client/folder/folder.rb +77 -61
  114. data/lib/zm/client/folder/folder_grant.rb +34 -14
  115. data/lib/zm/client/folder/folder_grant_jsns_builder.rb +15 -4
  116. data/lib/zm/client/folder/folder_grants_collection.rb +36 -2
  117. data/lib/zm/client/folder/folder_jsns_builder.rb +22 -48
  118. data/lib/zm/client/folder/folder_jsns_initializer.rb +34 -17
  119. data/lib/zm/client/folder/folder_retention_policies_collection.rb +2 -3
  120. data/lib/zm/client/folder/folder_retention_policy.rb +0 -1
  121. data/lib/zm/client/folder/folders_builder.rb +7 -10
  122. data/lib/zm/client/folder/folders_collection.rb +5 -2
  123. data/lib/zm/client/folder/folders_jsns_builder.rb +3 -1
  124. data/lib/zm/client/folder/mod_document_folder.rb +10 -6
  125. data/lib/zm/client/folder.rb +1 -1
  126. data/lib/zm/client/identity/identities_builder.rb +8 -1
  127. data/lib/zm/client/identity/identities_collection.rb +2 -1
  128. data/lib/zm/client/identity/identity.rb +34 -42
  129. data/lib/zm/client/identity/identity_jsns_builder.rb +57 -0
  130. data/lib/zm/client/identity/identity_jsns_initializer.rb +29 -0
  131. data/lib/zm/client/identity.rb +3 -1
  132. data/lib/zm/client/license/license.rb +9 -22
  133. data/lib/zm/client/license/license_jsns_initializer.rb +20 -0
  134. data/lib/zm/client/license/licenses_collection.rb +3 -13
  135. data/lib/zm/client/license.rb +2 -1
  136. data/lib/zm/client/message/attachments_collection.rb +55 -0
  137. data/lib/zm/client/message/message.rb +36 -264
  138. data/lib/zm/client/message/message_flags.rb +107 -0
  139. data/lib/zm/client/message/message_jsns_builder.rb +85 -0
  140. data/lib/zm/client/message/message_jsns_initializer.rb +71 -0
  141. data/lib/zm/client/message/message_recipients.rb +59 -0
  142. data/lib/zm/client/message/messages_builder.rb +7 -18
  143. data/lib/zm/client/message/messages_collection.rb +17 -2
  144. data/lib/zm/client/message.rb +5 -0
  145. data/lib/zm/client/mountpoint/mountpoint.rb +43 -21
  146. data/lib/zm/client/mountpoint/mountpoint_jsns_builder.rb +8 -53
  147. data/lib/zm/client/mountpoint/mountpoint_jsns_initializer.rb +22 -13
  148. data/lib/zm/client/mountpoint/mountpoints_builder.rb +4 -5
  149. data/lib/zm/client/mountpoint/mountpoints_collection.rb +1 -2
  150. data/lib/zm/client/mta_queue/mta_queue.rb +13 -28
  151. data/lib/zm/client/mta_queue/mta_queue_jsns_builder.rb +41 -0
  152. data/lib/zm/client/mta_queue/mta_queue_jsns_initializer.rb +23 -0
  153. data/lib/zm/client/mta_queue/mta_queues_builder.rb +4 -8
  154. data/lib/zm/client/mta_queue/mta_queues_collection.rb +8 -27
  155. data/lib/zm/client/mta_queue.rb +2 -0
  156. data/lib/zm/client/mta_queue_item/mta_queue_item.rb +4 -31
  157. data/lib/zm/client/mta_queue_item/mta_queue_item_jsns_initializer.rb +33 -0
  158. data/lib/zm/client/mta_queue_item/mta_queue_items_builder.rb +4 -9
  159. data/lib/zm/client/mta_queue_item/mta_queue_items_collection.rb +7 -42
  160. data/lib/zm/client/mta_queue_item.rb +2 -1
  161. data/lib/zm/client/resource/resource.rb +24 -91
  162. data/lib/zm/client/resource/resource_jsns_builder.rb +79 -0
  163. data/lib/zm/client/resource/resource_jsns_initializer.rb +29 -0
  164. data/lib/zm/client/resource/resources_builder.rb +8 -1
  165. data/lib/zm/client/resource/resources_collection.rb +9 -7
  166. data/lib/zm/client/resource.rb +2 -0
  167. data/lib/zm/client/search_folder/search_folder.rb +38 -16
  168. data/lib/zm/client/search_folder/search_folder_jsns_builder.rb +38 -19
  169. data/lib/zm/client/search_folder/search_folder_jsns_initializer.rb +17 -13
  170. data/lib/zm/client/search_folder/search_folders_builder.rb +0 -1
  171. data/lib/zm/client/search_folder/search_folders_collection.rb +2 -1
  172. data/lib/zm/client/server/server.rb +16 -488
  173. data/lib/zm/client/server/server_jsns_initializer.rb +16 -0
  174. data/lib/zm/client/server/servers_builder.rb +8 -1
  175. data/lib/zm/client/server/servers_collection.rb +13 -5
  176. data/lib/zm/client/server.rb +1 -0
  177. data/lib/zm/client/share/share.rb +5 -43
  178. data/lib/zm/client/share/share_jsns_initializer.rb +32 -0
  179. data/lib/zm/client/share/share_mountpoints_collection.rb +38 -0
  180. data/lib/zm/client/share/shares_builder.rb +8 -1
  181. data/lib/zm/client/share/shares_collection.rb +11 -16
  182. data/lib/zm/client/share.rb +2 -0
  183. data/lib/zm/client/signature/signature.rb +25 -29
  184. data/lib/zm/client/signature/signature_jsns_builder.rb +31 -13
  185. data/lib/zm/client/signature/signature_jsns_initializer.rb +16 -12
  186. data/lib/zm/client/signature/signatures_builder.rb +1 -2
  187. data/lib/zm/client/signature/signatures_collection.rb +2 -1
  188. data/lib/zm/client/signature.rb +1 -1
  189. data/lib/zm/client/soap_request/account_soap_constants.rb +76 -0
  190. data/lib/zm/client/soap_request/admin_soap_constants.rb +214 -0
  191. data/lib/zm/client/soap_request/mail_soap_constants.rb +162 -0
  192. data/lib/zm/client/soap_request/soap_constants.rb +55 -0
  193. data/lib/zm/client/soap_request/soap_context.rb +38 -0
  194. data/lib/zm/client/soap_request/soap_element.rb +90 -0
  195. data/lib/zm/client/soap_request.rb +8 -0
  196. data/lib/zm/client/tag/account_object_tags_collection.rb +65 -0
  197. data/lib/zm/client/tag/tag.rb +34 -22
  198. data/lib/zm/client/tag/tag_jsns_builder.rb +14 -35
  199. data/lib/zm/client/tag/tag_jsns_initializer.rb +4 -6
  200. data/lib/zm/client/tag/tags_builder.rb +0 -1
  201. data/lib/zm/client/tag/tags_collection.rb +2 -1
  202. data/lib/zm/client/tag.rb +1 -0
  203. data/lib/zm/client/task/task.rb +18 -49
  204. data/lib/zm/client/task/task_jsns_initializer.rb +45 -0
  205. data/lib/zm/client/task/tasks_builder.rb +6 -16
  206. data/lib/zm/client/task/tasks_collection.rb +29 -0
  207. data/lib/zm/client/task.rb +1 -0
  208. data/lib/zm/client/upload/upload.rb +26 -30
  209. data/lib/zm/client/version.rb +3 -3
  210. data/lib/zm/client.rb +4 -1
  211. data/lib/zm/modules/base.rb +10 -0
  212. data/lib/zm/modules/belongs_to_folder.rb +37 -0
  213. data/lib/zm/modules/belongs_to_tag.rb +11 -0
  214. data/lib/zm/modules/common/zimbra-attrs.json +33 -1
  215. data/lib/zm/modules/has_soap_admin_connector.rb +12 -0
  216. data/lib/zm/modules/inspector.rb +24 -0
  217. data/lib/zm/modules/missing_method_static_collection.rb +13 -0
  218. data/lib/zm/modules/zm_logger.rb +3 -1
  219. data/lib/zm/modules/zm_model.rb +4 -2
  220. data/lib/zm/utils/thread_pool.rb +4 -2
  221. data/lib/zm-ruby-client.rb +2 -0
  222. data/zm-ruby-client.gemspec +12 -9
  223. metadata +93 -34
  224. data/lib/zm/client/base/account_object.rb +0 -51
  225. data/lib/zm/client/base/admin_object.rb +0 -51
  226. data/lib/zm/client/base/folder_object.rb +0 -41
  227. data/lib/zm/client/config.rb +0 -12
  228. data/lib/zm/client/data_source.rb +0 -5
  229. data/lib/zm/modules/common/account_common.rb +0 -71
  230. data/lib/zm/modules/common/cos_common.rb +0 -463
  231. data/lib/zm/modules/common/dl_common.rb +0 -38
  232. data/lib/zm/modules/common/identity_common.rb +0 -19
  233. data/lib/zm/modules/common/resource_common.rb +0 -59
  234. data/lib/zm/modules/common/signature_common.rb +0 -16
  235. data/lib/zm/modules/common/zimbra-attrs.json.bak +0 -1
  236. data/test/accounts.rb +0 -89
  237. data/test/ace.rb +0 -50
  238. data/test/cluster.rb +0 -41
  239. data/test/cluster_config.rb +0 -30
  240. data/test/cluster_zimbra_attributes.rb +0 -38
  241. data/test/coses.rb +0 -26
  242. data/test/domains.rb +0 -70
  243. data/test/folder.rb +0 -125
  244. data/test/folder_grant.rb +0 -51
  245. data/test/mountpoint.rb +0 -49
  246. data/test/retention_policies.rb +0 -40
  247. data/test/search_folder.rb +0 -67
  248. data/test/signature.rb +0 -53
  249. data/test/tag.rb +0 -65
  250. data/test/zimbra_attributes.rb +0 -35
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4291a3894ee2caa740aff649e8fdbaa57a55e4091a151ef7695c6d95ee14057d
4
- data.tar.gz: 7f3a2333df68c482e0f45fc32c10c60eba17f3c979b6cca9cd59528da1453826
3
+ metadata.gz: 886f564163908a1480548f4a95d6ce5eb0518d1c448d0843813614028c86a3c1
4
+ data.tar.gz: '08a2890e60d812eb839b6e128e17aac9bf56fd3732930bcff4b953466b3d96a4'
5
5
  SHA512:
6
- metadata.gz: e6a4bc55cffe7887b6cfba72a9185930ab4adb1a654d35b849296189aed6a6a18be49c2b0fdf1a3a238f31afbc63f64679c5b38ac0a2fb9073791df3ee1a80ef
7
- data.tar.gz: 3b79c94a2572c6b4ca9939df062a0fd427666aed491f3322372b1d291e47d0d0bd1d178ebb8673fbbf4ed19240ea07cb599a3be25885a916d38c99277028954d
6
+ metadata.gz: f01208b8b4c217d2af7bfbcc3e750e9934c78032a63bf0eba9ec5bfd46837506987f05f23a7e8a154b46262aa7a1d4d4eedd3837f32fcc6f69ad4a49991ee768
7
+ data.tar.gz: d0d58cb2644a8eaaf376602e1724cd0e4eb670789912b4055cfe73bf451b3d838c180ed010a633427223e98506f4710f54791f469de170b5b8e7f633d7582998
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,356 +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_reader :name, :id, :token
29
- # attr_writer :home_url
30
- # attr_accessor :password, :domainkey, :company, :zimbraCOSId, :zimbraMailHost, :zimbraMailTransport, :carLicense
31
- attr_accessor :name, :id, :token, :home_url, :password, :domainkey, :carLicense
8
+ class Account < Base::MailboxObject
9
+ # #################################################################
10
+ # Associations
11
+ # #################################################################
32
12
 
33
- def initialize(parent)
34
- extend(AccountCommon)
35
- super(parent)
36
- @grantee_type = 'usr'.freeze
37
- end
38
-
39
- # def init_by_hash(attrs)
40
- # attrs.each do |k, v|
41
- # self.instance_variable_set(arrow_name(k), v)
42
- # end
43
- # end
44
-
45
- # def to_h
46
- # hashmap = Hash[all_instance_variable_keys.map { |key| [key, instance_variable_get(arrow_name(key))] }]
47
- # hashmap.delete_if { |_, v| v.nil? }
48
- # hashmap
49
- # end
50
-
51
- def all_instance_variable_keys
52
- AccountCommon::ZM_ACCOUNT_ATTRS
53
- end
54
-
55
- def rest_account_connector
56
- @rest_account_connector ||= RestAccountConnector.new
57
- end
58
-
59
- alias rac rest_account_connector
60
-
61
- def logged?
62
- !@token.nil?
63
- end
64
-
65
- def login
66
- if @parent.logged?
67
- admin_login
68
- else
69
- account_login
70
- end
71
- end
72
-
73
- def account_login
74
- if password
75
- account_login_password
76
- else
77
- account_login_preauth
78
- end
79
- end
80
-
81
- def account_login_preauth
82
- domain_key
83
- raise ZmError, 'domain key is required to login !' if @domainkey.nil?
84
-
85
- @token = sacc.auth_preauth(@name, @domainkey)
86
- end
87
-
88
- def account_login_password
89
- raise ZmError, 'password is required to login !' if password.nil?
90
-
91
- @token = sacc.auth_password(@name, @password)
92
- end
93
-
94
- def admin_login
95
- @token = sac.delegate_auth(@name)
96
- end
97
-
98
- def token_metadata
99
- @token_metadata ||= TokenMetaData.new(@token)
100
- end
101
-
102
- def domain_name
103
- @domain_name ||= @name.split('@').last
104
- end
105
-
106
- def domain_key
107
- @domainkey ||= @parent.domain_key(domain_name)
108
- end
109
-
110
- def infos
111
- @infos || read_infos
112
- end
113
-
114
- def read_infos
115
- @infos = sacc.get_info(@token)[:Body][:GetInfoResponse]
116
- @id = @infos[:id]
117
- @used = @infos[:used]
118
- @public_url = @infos[:publicURL]
119
- @zimbraCOSId = @infos[:cos][:id]
120
- @home_url = @infos[:rest]
121
- @infos
13
+ def aliases
14
+ @aliases ||= AccountAliasesCollection.new(self)
122
15
  end
123
16
 
124
17
  def cos
125
18
  @cos ||= @parent.coses.find_by(id: zimbraCOSId)
126
19
  end
127
20
 
128
- def used
129
- @used ||= sac.get_mailbox(id)[:Body][:GetMailboxResponse][:mbox].first[:s]
130
- end
131
-
132
- def public_url
133
- infos if @infos.nil?
134
- @public_url
135
- end
136
-
137
- def home_url
138
- infos if @infos.nil?
139
- @home_url
140
- end
141
-
142
- def messages
143
- @messages ||= MessagesCollection.new(self)
144
- end
145
-
146
- def folders
147
- @folders ||= FoldersCollection.new(self)
148
- end
149
-
150
- def mountpoints
151
- @mountpointss ||= MountPointsCollection.new(self)
152
- end
153
-
154
- def search_folders
155
- @search_folders ||= SearchFoldersCollection.new(self)
156
- end
157
-
158
- def identities
159
- @identities ||= IdentitiesCollection.new(self)
160
- end
161
-
162
- def shares
163
- @shares ||= SharesCollection.new(self)
164
- end
165
-
166
- def contacts
167
- @contacts ||= ContactsCollection.new(self)
168
- end
169
-
170
- def appointments
171
- @appointments ||= AppointmentsCollection.new(self)
172
- end
173
-
174
- def tags
175
- @tags ||= TagsCollection.new(self)
176
- end
177
-
178
- def tasks
179
- @tasks ||= TasksCollection.new(self)
180
- end
181
-
182
- def aces
183
- @aces ||= AcesCollection.new(self)
184
- end
185
- alias rights aces
186
-
187
- def signatures
188
- @signatures ||= SignaturesCollection.new(self)
189
- end
190
-
191
- def data_sources
192
- @data_sources ||= DataSourcesCollection.new sac, self
193
- end
194
-
195
- def documents
196
- @documents ||= DocumentsCollection.new(self)
197
- end
198
-
199
- def message_folders
200
- @message_folders ||= folders.all.select { |f| f.view == Zm::Client::FolderView::MESSAGE.to_s }
201
- end
202
-
203
- def contact_folders
204
- @contact_folders ||= folders.all.select { |f| f.view == Zm::Client::FolderView::CONTACT.to_s }
205
- end
206
-
207
- def calendar_folders
208
- @calendar_folders ||= folders.all.select { |f| f.view == Zm::Client::FolderView::APPOINTMENT.to_s }
209
- end
210
-
211
- def task_folders
212
- @task_folders ||= folders.all.select { |f| f.view == Zm::Client::FolderView::TASK.to_s }
213
- end
214
-
215
- def document_folders
216
- @document_folders ||= folders.all.select { |f| f.view == Zm::Client::FolderView::DOCUMENT.to_s }
217
- end
21
+ # #################################################################
22
+ # SOAP Actions
23
+ # #################################################################
218
24
 
219
25
  def delete!
220
- sac.delete_account(@id)
221
- end
222
-
223
- def password!(new_password)
224
- sac.set_password(@id, new_password)
225
- @password = new_password
226
- end
227
-
228
- def update!(hash)
229
- sac.modify_account(@id, hash)
230
-
231
- hash.each do |k, v|
232
- arrow_attr_sym = "@#{k}".to_sym
233
-
234
- if v.respond_to?(:empty?) && v.empty?
235
- self.remove_instance_variable(arrow_attr_sym) if self.instance_variable_get(arrow_attr_sym)
236
- else
237
- self.instance_variable_set(arrow_attr_sym, v)
238
- end
239
- end
26
+ sac.invoke(jsns_builder.to_delete)
27
+ @id = nil
240
28
  end
241
29
 
242
30
  def modify!
243
- attrs_to_modify = instance_variables_array(attrs_write)
244
- return if attrs_to_modify.empty?
245
-
246
- sac.modify_account(@id, attrs_to_modify)
31
+ sac.invoke(jsns_builder.to_update)
32
+ true
247
33
  end
248
34
 
249
35
  def create!
250
- rep = sac.create_account(
251
- @name,
252
- @password,
253
- instance_variables_array(attrs_write)
254
- )
255
- @id = rep[:Body][:CreateAccountResponse][:account].first[:id]
256
- end
257
-
258
- def set_password(new_password = nil)
259
- new_password ||= @password
260
- sac.set_password(@id, new_password)
261
- @password = new_password
262
- end
263
-
264
- def aliases
265
- @aliases ||= set_aliases
266
- end
267
-
268
- def set_aliases
269
- return [] if zimbraMailAlias.nil?
270
- return [zimbraMailAlias] if zimbraMailAlias.is_a?(String)
271
- zimbraMailAlias
272
- end
273
-
274
- def add_alias!(email)
275
- sac.add_account_alias(@id, email)
276
- aliases.push(email)
277
- end
278
-
279
- def remove_alias!(email)
280
- sac.remove_account_alias(@id, email)
281
- aliases.delete(email)
282
- end
283
-
284
- def rename!(email)
285
- sac.rename_account(@id, email)
286
- @name = email
287
- end
288
-
289
- def local_transport
290
- raise Zm::Client::SoapError, 'zimbraMailHost is null' if zimbraMailHost.nil?
291
-
292
- "lmtp:#{zimbraMailHost}:7025"
293
- end
294
-
295
- def local_transport!
296
- update!(zimbraMailTransport: local_transport)
297
- end
298
-
299
- def is_local_transport?
300
- return nil unless zimbraMailTransport
301
-
302
- zimbraMailTransport.start_with?('lmtp')
303
- end
304
-
305
- def is_external_transport?
306
- return nil unless zimbraMailTransport
307
-
308
- zimbraMailTransport.start_with?('smtp')
309
- end
310
-
311
- def uploader
312
- @uploader ||= Upload.new(self)
313
- end
314
-
315
- def last_logon
316
- @last_logon ||= Time.parse zimbraLastLogonTimestamp unless zimbraLastLogonTimestamp.nil?
36
+ resp = sac.invoke(jsns_builder.to_create)
37
+ @id = resp[:CreateAccountResponse][:account].first[:id]
317
38
  end
318
39
 
319
40
  def created_at
320
- @created_at ||= Time.parse zimbraCreateTimestamp unless zimbraCreateTimestamp.nil?
41
+ @created_at ||= Time.parse(zimbraCreateTimestamp) unless zimbraCreateTimestamp.nil?
321
42
  end
322
43
 
323
44
  def flush_cache!
324
- sac.flush_cache('account', 1, @id)
325
- end
326
-
327
- def move_mailbox(server)
328
- raise Zm::Client::SoapError, 'zimbraMailHost is null' if zimbraMailHost.nil?
329
-
330
- 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
331
52
  end
332
53
 
333
- def is_on_to_move?(server)
334
- resp = sac.query_mailbox_move(@name, server.id)
335
- resp[:Body][:QueryMailboxMoveResponse][:account].nil?
54
+ def attrs_write
55
+ @parent.zimbra_attributes.all_account_attrs_writable_names
336
56
  end
337
57
 
338
- def memberships
339
- @memberships ||= AccountDlsMembershipCollection.new(self)
340
- end
341
-
342
- def dls_owner
343
- @dls_owner ||= AccountDlsOwnerCollection.new(self)
344
- end
58
+ private
345
59
 
346
- def ranking(op, email = nil)
347
- sacc.ranking_action(@token, op, email)
60
+ def do_update!(hash)
61
+ sac.invoke(jsns_builder.to_patch(hash))
348
62
  end
349
63
 
350
- def init_from_json(json)
351
- @used = json[:used] if json[:used]
352
- @zimbraMailQuota = json[:limit] if json[:limit]
353
- super(json)
64
+ def jsns_builder
65
+ @jsns_builder ||= AccountJsnsBuilder.new(self)
354
66
  end
355
67
  end
356
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