zm-ruby-client 0.18.3 → 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 -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 +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 +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 +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 +92 -33
  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: 0e22c8126c13210fc0be35b5358b30d5ae7cbf12118bffe8ad522e6fdc2a2379
4
+ data.tar.gz: 81eca4a1ef8efd633447c93bf782cd68e522a19db80f968475404aa3fca5c5cd
5
5
  SHA512:
6
- metadata.gz: e6a4bc55cffe7887b6cfba72a9185930ab4adb1a654d35b849296189aed6a6a18be49c2b0fdf1a3a238f31afbc63f64679c5b38ac0a2fb9073791df3ee1a80ef
7
- data.tar.gz: 3b79c94a2572c6b4ca9939df062a0fd427666aed491f3322372b1d291e47d0d0bd1d178ebb8673fbbf4ed19240ea07cb599a3be25885a916d38c99277028954d
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,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