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
@@ -4,7 +4,6 @@ module Zm
4
4
  module Client
5
5
  # collection of folders
6
6
  class FoldersCollection < Base::AccountObjectsCollection
7
-
8
7
  attr_reader :root
9
8
 
10
9
  attr_accessor :view, :tr, :visible, :needGranteeName, :depth
@@ -25,6 +24,10 @@ module Zm
25
24
  folder
26
25
  end
27
26
 
27
+ def root
28
+ find(1)
29
+ end
30
+
28
31
  def where(view: nil, tr: nil)
29
32
  @view = view
30
33
  @tr = tr
@@ -78,7 +81,7 @@ module Zm
78
81
  end
79
82
 
80
83
  def make_query
81
- @parent.sacc.get_folder(@parent.token, jsns_builder.to_jsns)
84
+ @parent.sacc.invoke(jsns_builder.to_jsns)
82
85
  end
83
86
 
84
87
  def reset_query_params
@@ -9,13 +9,15 @@ module Zm
9
9
  end
10
10
 
11
11
  def to_jsns
12
- {
12
+ attrs = {
13
13
  visible: @item.visible,
14
14
  needGranteeName: @item.needGranteeName,
15
15
  view: @item.view,
16
16
  depth: @item.depth,
17
17
  tr: @item.tr
18
18
  }.delete_if { |_, v| v.nil? }
19
+
20
+ SoapElement.mail(SoapMailConstants::GET_FOLDER_REQUEST).add_attributes(attrs)
19
21
  end
20
22
  end
21
23
  end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DocumentFolder
2
- UUID_REGEX = %r{[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}:[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}}
4
+ UUID_REGEX = /[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}:[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}/.freeze
3
5
 
4
6
  def upload(file_path)
5
7
  uploader = Zm::Client::Upload.new(@parent, Zm::Client::RestAccountConnector.new)
@@ -7,11 +9,13 @@ module DocumentFolder
7
9
 
8
10
  uuid = str.scan(UUID_REGEX).first
9
11
 
10
- raise Zm::Client::RestError, "failed to extract uuid" if uuid.nil?
12
+ raise Zm::Client::RestError, 'failed to extract uuid' if uuid.nil?
13
+
14
+ jsns = { doc: { l: l, pload: { id: uuid } } }
11
15
 
12
- upload_options = { upload: { id: uuid } }
13
- rep = @parent.sacc.save_document(@parent.token, id, upload_options)
16
+ soap_request = SoapElement.mail(SoapMailConstants::SAVE_DOCUMENT_REQUEST).add_attributes(jsns)
17
+ rep = @parent.sacc.invoke(soap_request)
14
18
 
15
- Zm::Client::Document.new(@parent, rep[:Body][:SaveDocumentResponse][:doc].first)
19
+ DocumentJsnsInitializer.create(@parent, rep[:SaveDocumentResponse][:doc].first)
16
20
  end
17
- end
21
+ end
@@ -11,4 +11,4 @@ require 'zm/client/folder/folder_retention_policy'
11
11
  require 'zm/client/folder/folder_retention_policies_collection'
12
12
  require 'zm/client/folder/folders_builder'
13
13
  require 'zm/client/folder/folders_collection'
14
- require 'zm/client/folder/mod_document_folder'
14
+ require 'zm/client/folder/mod_document_folder'
@@ -6,9 +6,16 @@ module Zm
6
6
  class IdentitiesBuilder < Base::ObjectsBuilder
7
7
  def initialize(parent, json)
8
8
  super(parent, json)
9
- @child_class = Identity
10
9
  @json_item_key = :identity
11
10
  end
11
+
12
+ def make
13
+ return [] if json_items.nil?
14
+
15
+ json_items.map do |entry|
16
+ IdentityJsnsInitializer.create(@parent, entry)
17
+ end
18
+ end
12
19
  end
13
20
  end
14
21
  end
@@ -13,7 +13,8 @@ module Zm
13
13
  private
14
14
 
15
15
  def make_query
16
- @parent.sacc.get_all_identities(@parent.token)
16
+ soap_request = SoapElement.account(SoapAccountConstants::GET_IDENTITIES_REQUEST)
17
+ @parent.sacc.invoke(soap_request)
17
18
  end
18
19
  end
19
20
  end
@@ -3,63 +3,45 @@
3
3
  module Zm
4
4
  module Client
5
5
  # class account identity
6
- class Identity < Base::AccountObject
7
- INSTANCE_VARIABLE_KEYS = %i[id name zimbraPrefIdentityName zimbraPrefFromDisplay zimbraPrefFromAddress
8
- zimbraPrefFromAddressType zimbraPrefReplyToEnabled zimbraPrefReplyToDisplay zimbraPrefReplyToAddress
9
- zimbraPrefDefaultSignatureId zimbraPrefForwardReplySignatureId zimbraPrefWhenSentToEnabled
10
- zimbraPrefWhenInFoldersEnabled zimbraPrefWhenSentToAddresses].freeze
6
+ class Identity < Base::Object
7
+ attr_accessor :id, :name, :zimbraPrefIdentityName, :zimbraPrefFromDisplay, :zimbraPrefFromAddress,
8
+ :zimbraPrefFromAddressType, :zimbraPrefReplyToEnabled, :zimbraPrefReplyToDisplay,
9
+ :zimbraPrefReplyToAddress, :zimbraPrefDefaultSignatureId, :zimbraPrefForwardReplySignatureId,
10
+ :zimbraPrefWhenSentToEnabled, :zimbraPrefWhenInFoldersEnabled, :zimbraPrefWhenSentToAddresses
11
11
 
12
- ATTRS_WRITE = %i[zimbraPrefIdentityName zimbraPrefFromDisplay zimbraPrefFromAddress
13
- zimbraPrefFromAddressType zimbraPrefReplyToEnabled zimbraPrefReplyToDisplay zimbraPrefReplyToAddress
14
- zimbraPrefDefaultSignatureId zimbraPrefForwardReplySignatureId zimbraPrefWhenSentToEnabled
15
- zimbraPrefWhenInFoldersEnabled zimbraPrefWhenSentToAddresses].freeze
16
-
17
- attr_accessor(*INSTANCE_VARIABLE_KEYS)
18
-
19
- def all_instance_variable_keys
20
- INSTANCE_VARIABLE_KEYS
21
- end
22
-
23
- def init_from_json(json)
24
- @id = json[:id]
25
- @name = json[:name]
26
- all_instance_variable_keys.each do |key|
27
- value = json[:_attrs][key]
28
- next if value.nil?
29
-
30
- instance_variable_set(arrow_name(key), value)
31
- end
12
+ def create!
13
+ rep = @parent.sacc.invoke(jsns_builder.to_jsns)
14
+ IdentityJsnsInitializer.update(self, rep[:CreateIdentityResponse][:identity].first)
15
+ @id
32
16
  end
33
17
 
34
- def create!
35
- rep = @parent.sacc.create_identity(@parent.token, name, Hash[instance_variables_array(ATTRS_WRITE)])
36
- init_from_json(rep[:Body][:CreateIdentityResponse][:identity].first)
18
+ def modify!
19
+ @parent.sacc.invoke(jsns_builder.to_update)
20
+ true
37
21
  end
38
22
 
39
23
  def update!(hash)
40
- @parent.sacc.modify_identity(@parent.token, id, hash)
24
+ return false if hash.delete_if { |k, v| v.nil? || !respond_to?(k) }.empty?
41
25
 
42
- hash.each do |k, v|
43
- arrow_attr_sym = "@#{k}".to_sym
26
+ do_update!(hash)
44
27
 
45
- if v.respond_to?(:empty?) && v.empty?
46
- remove_instance_variable(arrow_attr_sym) if instance_variable_get(arrow_attr_sym)
47
- else
48
- instance_variable_set(arrow_attr_sym, v)
49
- end
28
+ hash.each do |key, value|
29
+ update_attribute(key, value)
50
30
  end
31
+
32
+ true
51
33
  end
52
34
 
53
- def modify!
54
- @parent.sacc.modify_identity(@parent.token, id, Hash[instance_variables_array(ATTRS_WRITE)])
35
+ def rename!(new_name)
36
+ raise NotImplementedError
55
37
  end
56
38
 
57
39
  def delete!
58
- @parent.sacc.delete_identity(@parent.token, @id)
59
- super
60
- end
40
+ return if @id.nil?
61
41
 
62
- def rename!(new_name); end
42
+ @parent.sacc.invoke(jsns_builder.to_delete)
43
+ @id = nil
44
+ end
63
45
 
64
46
  def clone
65
47
  new_identity = super do |obj|
@@ -70,6 +52,16 @@ module Zm
70
52
  yield(new_identity) if block_given?
71
53
  new_identity
72
54
  end
55
+
56
+ private
57
+
58
+ def do_update!(hash)
59
+ @parent.sacc.invoke(jsns_builder.to_patch(hash))
60
+ end
61
+
62
+ def jsns_builder
63
+ @jsns_builder ||= IdentityJsnsBuilder.new(self)
64
+ end
73
65
  end
74
66
  end
75
67
  end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class for account identity jsns builder
6
+ class IdentityJsnsBuilder
7
+ def initialize(item)
8
+ @item = item
9
+ end
10
+
11
+ def to_jsns
12
+ soap_request = SoapElement.account(SoapAccountConstants::CREATE_IDENTITY_REQUEST)
13
+ node_identity = SoapElement.create(SoapConstants::IDENTITY).add_attributes({ name: @item.name, _attrs: attrs })
14
+ soap_request.add_node(node_identity)
15
+ soap_request
16
+ end
17
+
18
+ def to_update
19
+ soap_request = SoapElement.account(SoapAccountConstants::MODIFY_IDENTITY_REQUEST)
20
+ node_identity = SoapElement.create(SoapConstants::IDENTITY).add_attributes({ id: @item.id, _attrs: attrs })
21
+ soap_request.add_node(node_identity)
22
+ soap_request
23
+ end
24
+
25
+ def to_patch(hash)
26
+ soap_request = SoapElement.account(SoapAccountConstants::MODIFY_IDENTITY_REQUEST)
27
+ node_identity = SoapElement.create(SoapConstants::IDENTITY).add_attributes({ id: @item.id, _attrs: hash })
28
+ soap_request.add_node(node_identity)
29
+ soap_request
30
+ end
31
+
32
+ def to_delete
33
+ soap_request = SoapElement.account(SoapAccountConstants::DELETE_IDENTITY_REQUEST)
34
+ node_identity = SoapElement.create(SoapConstants::IDENTITY).add_attributes({ id: @item.id })
35
+ soap_request.add_node(node_identity)
36
+ soap_request
37
+ end
38
+
39
+ def attrs
40
+ {
41
+ zimbraPrefIdentityName: @item.zimbraPrefIdentityName,
42
+ zimbraPrefFromDisplay: @item.zimbraPrefFromDisplay,
43
+ zimbraPrefFromAddress: @item.zimbraPrefFromAddress,
44
+ zimbraPrefFromAddressType: @item.zimbraPrefFromAddressType,
45
+ zimbraPrefReplyToEnabled: @item.zimbraPrefReplyToEnabled,
46
+ zimbraPrefReplyToDisplay: @item.zimbraPrefReplyToDisplay,
47
+ zimbraPrefReplyToAddress: @item.zimbraPrefReplyToAddress,
48
+ zimbraPrefDefaultSignatureId: @item.zimbraPrefDefaultSignatureId,
49
+ zimbraPrefForwardReplySignatureId: @item.zimbraPrefForwardReplySignatureId,
50
+ zimbraPrefWhenSentToEnabled: @item.zimbraPrefWhenSentToEnabled,
51
+ zimbraPrefWhenInFoldersEnabled: @item.zimbraPrefWhenInFoldersEnabled,
52
+ zimbraPrefWhenSentToAddresses: @item.zimbraPrefWhenSentToAddresses
53
+ }
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class for initialize account identity
6
+ class IdentityJsnsInitializer
7
+ class << self
8
+ def create(parent, json)
9
+ item = Identity.new(parent)
10
+ update(item, json)
11
+ end
12
+
13
+ def update(item, json)
14
+ item.id = json[:id]
15
+ item.name = json[:name]
16
+
17
+ return item if json[:_attrs].nil? || json[:_attrs].empty?
18
+
19
+ json[:_attrs].each do |k, v|
20
+ m = Utils.equals_name(k)
21
+ item.send(m, v) if item.respond_to?(m)
22
+ end
23
+
24
+ item
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'zm/client/identity/identity'
4
+ require 'zm/client/identity/identity_jsns_builder'
5
+ require 'zm/client/identity/identity_jsns_initializer'
4
6
  require 'zm/client/identity/identities_builder'
5
- require 'zm/client/identity/identities_collection'
7
+ require 'zm/client/identity/identities_collection'
@@ -2,28 +2,15 @@
2
2
 
3
3
  module Zm
4
4
  module Client
5
- # objectClass: zimbraDomain
6
- class License < Base::AdminObject
7
-
8
- INSTANCE_VARIABLE_KEYS = %i[
9
- AccountsLimit ArchivingAccountsLimit AttachmentConversionEnabled AttachmentIndexingAccountsLimit BackupEnabled
10
- CrossMailboxSearchEnabled EwsAccountsLimit HierarchicalStorageManagementEnabled ISyncAccountsLimit InstallType
11
- IssuedOn IssuedToEmail IssuedToName LicenseId MAPIConnectorAccountsLimit MobileSyncAccountsLimit
12
- MobileSyncEnabled ResellerName SMIMEAccountsLimit TouchClientsAccountsLimit TwoFactorAuthAccountsLimit
13
- ValidFrom ValidUntil VoiceAccountsLimit ZSSAccountsLimit ZTalkAccountsLimit
14
- ]
15
-
16
- attr_accessor *INSTANCE_VARIABLE_KEYS
17
-
18
- def init_from_json(json)
19
- json[:attr].each do |a|
20
- instance_variable_set(arrow_name(a[:name]), a[:_content])
21
- end
22
- end
23
-
24
- def to_s
25
- INSTANCE_VARIABLE_KEYS.map { |v| [v, instance_variable_get(arrow_name(v))].join(' : ') }.join("\n")
26
- end
5
+ # objectClass: License
6
+ class License < Base::Object
7
+ attr_accessor :AccountsLimit, :ArchivingAccountsLimit, :AttachmentConversionEnabled,
8
+ :AttachmentIndexingAccountsLimit, :BackupEnabled, :CrossMailboxSearchEnabled, :EwsAccountsLimit,
9
+ :HierarchicalStorageManagementEnabled, :ISyncAccountsLimit, :InstallType, :IssuedOn,
10
+ :IssuedToEmail, :IssuedToName, :LicenseId, :MAPIConnectorAccountsLimit, :MobileSyncAccountsLimit,
11
+ :MobileSyncEnabled, :ResellerName, :SMIMEAccountsLimit, :TouchClientsAccountsLimit,
12
+ :TwoFactorAuthAccountsLimit, :ValidFrom, :ValidUntil, :VoiceAccountsLimit, :ZSSAccountsLimit,
13
+ :ZTalkAccountsLimit
27
14
  end
28
15
  end
29
16
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class for initialize license
6
+ class LicenseJsnsInitializer
7
+ class << self
8
+ def create(parent, json)
9
+ item = License.new(parent)
10
+
11
+ json[:attr].each do |a|
12
+ item.instance_variable_set(Utils.arrow_name(a[:name]), a[:_content])
13
+ end
14
+
15
+ item
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -9,20 +9,10 @@ module Zm
9
9
  end
10
10
 
11
11
  def find
12
- req = sac.get_license
13
- entry = req[:Body][:GetLicenseResponse][:license].first
14
- license = License.new(@parent)
15
- license.init_from_json(entry)
16
- license
12
+ soap_request = SoapElement.admin(SoapAdminConstants::GET_LICENSE_REQUEST)
13
+ entry = sac.invoke(soap_request)[:GetLicenseResponse][:license].first
14
+ LicenseJsnsInitializer.create(@parent, entry)
17
15
  end
18
-
19
- private
20
-
21
- def soap_admin_connector
22
- @parent.soap_admin_connector
23
- end
24
-
25
- alias sac soap_admin_connector
26
16
  end
27
17
  end
28
18
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'zm/client/license/license'
4
- require 'zm/client/license/licenses_collection'
4
+ require 'zm/client/license/license_jsns_initializer'
5
+ require 'zm/client/license/licenses_collection'
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ class Message
6
+ # collection attachments
7
+ class AttachmentsCollection
8
+ include MissingMethodStaticCollection
9
+
10
+ attr_reader :all
11
+
12
+ def initialize
13
+ @all = []
14
+ end
15
+
16
+ def add(attachment)
17
+ return unless attachment.is_a?(Attachment)
18
+
19
+ @all.push(attachment)
20
+ end
21
+ end
22
+
23
+ # class attachment for email
24
+ class Attachment
25
+ attr_accessor :aid, :part, :mid, :ct, :s, :filename, :ci, :cd
26
+
27
+ def initialize(parent)
28
+ @parent = parent
29
+ yield(self) if block_given?
30
+ end
31
+
32
+ def download(dest_file_path)
33
+ h = {
34
+ id: @parent.id,
35
+ part: part,
36
+ auth: 'qp',
37
+ zauthtoken: account.token,
38
+ disp: 'a'
39
+ }
40
+
41
+ url = account.home_url
42
+
43
+ url << '?' << Utils.format_url_params(h)
44
+
45
+ uploader = Upload.new(@parent, RestAccountConnector.new)
46
+ uploader.download_file_with_url(url, dest_file_path)
47
+ end
48
+
49
+ def account
50
+ @parent.parent
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end