zm-ruby-client 3.0.1 → 3.1.0

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 (229) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +96 -0
  3. data/README.md +128 -27
  4. data/VERSION +1 -1
  5. data/lib/zm/client/account/account.rb +12 -19
  6. data/lib/zm/client/account/account_aliases_collection.rb +6 -4
  7. data/lib/zm/client/account/account_dls_membership_collection.rb +4 -3
  8. data/lib/zm/client/account/account_dls_owner_collection.rb +3 -2
  9. data/lib/zm/client/account/account_jsns_builder.rb +10 -10
  10. data/lib/zm/client/account/accounts_collection.rb +27 -16
  11. data/lib/zm/client/ace/ace.rb +3 -6
  12. data/lib/zm/client/ace/ace_jsns_builder.rb +6 -6
  13. data/lib/zm/client/appointment/appointment.rb +32 -14
  14. data/lib/zm/client/appointment/appointment_jsns_builder.rb +5 -5
  15. data/lib/zm/client/appointment/appointment_jsns_initializer.rb +6 -1
  16. data/lib/zm/client/appointment/appointments_collection.rb +12 -9
  17. data/lib/zm/client/backup/backup.rb +5 -2
  18. data/lib/zm/client/backup/backups_collection.rb +3 -2
  19. data/lib/zm/client/base/account_objects_collection.rb +1 -0
  20. data/lib/zm/client/base/account_search_objects_collection.rb +6 -6
  21. data/lib/zm/client/base/admin_objects_collection.rb +60 -7
  22. data/lib/zm/client/base/base_account_jsns_builder.rb +89 -87
  23. data/lib/zm/client/base/base_jsns_builder.rb +3 -3
  24. data/lib/zm/client/base/base_jsns_initializer.rb +20 -15
  25. data/lib/zm/client/base/mailbox_infos_collection.rb +92 -90
  26. data/lib/zm/client/base/mailbox_object.rb +49 -160
  27. data/lib/zm/client/base/mailbox_prefs_collection.rb +54 -52
  28. data/lib/zm/client/base/object.rb +19 -2
  29. data/lib/zm/client/base/objects_collection.rb +10 -10
  30. data/lib/zm/client/base/zimbra_attribute.rb +28 -42
  31. data/lib/zm/client/base/zimbra_attributes_collection.rb +38 -24
  32. data/lib/zm/client/{cluster/batch_request.rb → batch_request.rb} +1 -1
  33. data/lib/zm/client/cluster/cluster.rb +24 -61
  34. data/lib/zm/client/cluster/cluster_config.rb +35 -15
  35. data/lib/zm/client/contact/contact.rb +15 -13
  36. data/lib/zm/client/contact/contact_jsns_builder.rb +9 -6
  37. data/lib/zm/client/contact/contact_jsns_initializer.rb +2 -2
  38. data/lib/zm/client/contact/contact_member.rb +3 -3
  39. data/lib/zm/client/contact/contact_members_collection.rb +3 -3
  40. data/lib/zm/client/contact/contacts_builder.rb +1 -1
  41. data/lib/zm/client/contact/contacts_collection.rb +2 -2
  42. data/lib/zm/client/contact/group_contact_jsns_builder.rb +18 -14
  43. data/lib/zm/client/contact/mod_group_contact.rb +12 -8
  44. data/lib/zm/client/cos/cos.rb +15 -31
  45. data/lib/zm/client/cos/cos_jsns_builder.rb +21 -21
  46. data/lib/zm/client/cos/coses_collection.rb +11 -6
  47. data/lib/zm/client/datasource/datasource.rb +3 -9
  48. data/lib/zm/client/datasource/datasource_jsns_builder.rb +4 -4
  49. data/lib/zm/client/datasource/datasources_builder.rb +1 -1
  50. data/lib/zm/client/datasource/datasources_collection.rb +2 -2
  51. data/lib/zm/client/deprecated_constants.rb +36 -0
  52. data/lib/zm/client/distributionlist/distributionlist.rb +15 -47
  53. data/lib/zm/client/distributionlist/distributionlist_aces_collection.rb +4 -4
  54. data/lib/zm/client/distributionlist/distributionlist_aliases_collection.rb +7 -5
  55. data/lib/zm/client/distributionlist/distributionlist_jsns_builder.rb +29 -41
  56. data/lib/zm/client/distributionlist/distributionlist_jsns_initializer.rb +14 -3
  57. data/lib/zm/client/distributionlist/distributionlist_members_collection.rb +14 -10
  58. data/lib/zm/client/distributionlist/distributionlist_owners_collection.rb +13 -13
  59. data/lib/zm/client/distributionlist/distributionlists_collection.rb +15 -7
  60. data/lib/zm/client/distributionlist/dls_membership_collection.rb +8 -6
  61. data/lib/zm/client/document/document.rb +5 -11
  62. data/lib/zm/client/document/document_jsns_builder.rb +2 -2
  63. data/lib/zm/client/document/documents_collection.rb +4 -4
  64. data/lib/zm/client/domain/domain.rb +8 -25
  65. data/lib/zm/client/domain/domain_jsns_builder.rb +13 -13
  66. data/lib/zm/client/domain/domains_collection.rb +13 -6
  67. data/lib/zm/client/filter_rules/filter_rules_collection.rb +1 -1
  68. data/lib/zm/client/filter_rules/outgoing_filter_rules_collection.rb +1 -1
  69. data/lib/zm/client/folder/folder.rb +34 -21
  70. data/lib/zm/client/folder/folder_default.rb +39 -0
  71. data/lib/zm/client/folder/folder_grant_jsns_builder.rb +3 -3
  72. data/lib/zm/client/folder/folder_grants_collection.rb +1 -1
  73. data/lib/zm/client/folder/folder_jsns_builder.rb +12 -12
  74. data/lib/zm/client/folder/folder_jsns_initializer.rb +1 -1
  75. data/lib/zm/client/folder/folder_retention_policies_collection.rb +6 -2
  76. data/lib/zm/client/folder/folder_view.rb +15 -0
  77. data/lib/zm/client/folder/folders_jsns_builder.rb +1 -1
  78. data/lib/zm/client/folder/mod_document_folder.rb +16 -12
  79. data/lib/zm/client/identity/identities_collection.rb +1 -1
  80. data/lib/zm/client/identity/identity.rb +3 -9
  81. data/lib/zm/client/identity/identity_jsns_builder.rb +8 -8
  82. data/lib/zm/client/{base/ldap_filter.rb → ldap_filter.rb} +1 -1
  83. data/lib/zm/client/license/licenses_collection.rb +1 -1
  84. data/lib/zm/client/mailbox/mailbox_item_concern.rb +0 -2
  85. data/lib/zm/client/message/message.rb +14 -19
  86. data/lib/zm/client/message/message_attachments_collection.rb +39 -0
  87. data/lib/zm/client/message/message_flags_collection.rb +130 -0
  88. data/lib/zm/client/message/message_jsns_builder.rb +4 -8
  89. data/lib/zm/client/message/message_jsns_initializer.rb +4 -4
  90. data/lib/zm/client/message/message_recipients.rb +19 -43
  91. data/lib/zm/client/message/messages_collection.rb +20 -4
  92. data/lib/zm/client/mountpoint/{mountpoint.rb → mount_point.rb} +4 -10
  93. data/lib/zm/client/mountpoint/{mountpoint_jsns_builder.rb → mount_point_jsns_builder.rb} +3 -3
  94. data/lib/zm/client/mountpoint/{mountpoint_jsns_initializer.rb → mount_point_jsns_initializer.rb} +1 -1
  95. data/lib/zm/client/mountpoint/{mountpoints_builder.rb → mount_points_builder.rb} +1 -1
  96. data/lib/zm/client/mta_queue/mta_queue.rb +4 -16
  97. data/lib/zm/client/mta_queue/mta_queue_action.rb +12 -0
  98. data/lib/zm/client/mta_queue/mta_queue_jsns_builder.rb +7 -7
  99. data/lib/zm/client/mta_queue/mta_queue_name.rb +14 -0
  100. data/lib/zm/client/mta_queue/mta_queues_collection.rb +4 -3
  101. data/lib/zm/client/mta_queue_item/mta_queue_items_collection.rb +1 -0
  102. data/lib/zm/client/recipient.rb +21 -0
  103. data/lib/zm/client/{common/recipients.rb → recipients.rb} +0 -16
  104. data/lib/zm/client/resource/resource.rb +3 -7
  105. data/lib/zm/client/resource/resource_jsns_builder.rb +13 -13
  106. data/lib/zm/client/resource/resources_collection.rb +20 -7
  107. data/lib/zm/client/search_folder/search_folder.rb +4 -11
  108. data/lib/zm/client/search_folder/search_folder_jsns_builder.rb +6 -6
  109. data/lib/zm/client/search_folder/search_folders_collection.rb +1 -1
  110. data/lib/zm/client/server/server.rb +16 -22
  111. data/lib/zm/client/server/server_services.rb +26 -0
  112. data/lib/zm/client/server/servers_collection.rb +6 -6
  113. data/lib/zm/client/share/share.rb +2 -5
  114. data/lib/zm/client/share/shares_builder.rb +1 -1
  115. data/lib/zm/client/share/shares_collection.rb +5 -4
  116. data/lib/zm/client/signature/signature.rb +7 -13
  117. data/lib/zm/client/signature/signature_jsns_builder.rb +13 -13
  118. data/lib/zm/client/signature/signature_jsns_initializer.rb +2 -2
  119. data/lib/zm/client/signature/signatures_collection.rb +1 -1
  120. data/lib/zm/client/tag/account_object_tags_collection.rb +45 -47
  121. data/lib/zm/client/tag/tag.rb +3 -9
  122. data/lib/zm/client/tag/tag_jsns_builder.rb +3 -3
  123. data/lib/zm/client/tag/tags_builder.rb +1 -1
  124. data/lib/zm/client/tag/tags_collection.rb +2 -2
  125. data/lib/zm/client/task/task.rb +2 -2
  126. data/lib/zm/client/task/tasks_collection.rb +2 -2
  127. data/lib/zm/client/token.rb +4 -1
  128. data/lib/zm/client/upload.rb +179 -1
  129. data/lib/zm/client/{common/utils.rb → utils.rb} +6 -3
  130. data/lib/zm/client/zm_logger.rb +1 -1
  131. data/lib/zm/client.rb +227 -10
  132. data/lib/zm/connector/network_error_handler.rb +18 -0
  133. data/lib/zm/{client/connector → connector}/rest_connector.rb +46 -40
  134. data/lib/zm/{client/connector/soap_account.rb → connector/soap_account_connector.rb} +15 -17
  135. data/lib/zm/{client/connector/soap_admin.rb → connector/soap_admin_connector.rb} +3 -5
  136. data/lib/zm/connector/soap_base_connector.rb +115 -0
  137. data/lib/zm/connector.rb +13 -0
  138. data/lib/zm/error/auth_error.rb +8 -0
  139. data/lib/zm/error/connection_error.rb +8 -0
  140. data/lib/zm/error/rest_error.rb +8 -0
  141. data/lib/zm/{client/connector → error}/soap_error.rb +1 -10
  142. data/lib/zm/error/zm_error.rb +8 -0
  143. data/lib/zm/error.rb +11 -0
  144. data/lib/zm/relationship/has_many.rb +22 -0
  145. data/lib/zm/relationship/jsns_builder.rb +21 -0
  146. data/lib/zm/relationship/relationship.rb +113 -0
  147. data/lib/zm/relationship/schema.rb +32 -0
  148. data/lib/zm/relationship.rb +5 -0
  149. data/lib/zm/{client/soap_request → soap_request}/request_methods_admin.rb +11 -5
  150. data/lib/zm/{client/soap_request → soap_request}/request_methods_mailbox.rb +1 -1
  151. data/lib/zm/{client/soap_request/account_soap_constants.rb → soap_request/soap_account_constants.rb} +1 -1
  152. data/lib/zm/{client/soap_request/admin_soap_constants.rb → soap_request/soap_admin_constants.rb} +1 -1
  153. data/lib/zm/{client/soap_request → soap_request}/soap_constants.rb +1 -1
  154. data/lib/zm/{client/soap_request → soap_request}/soap_context.rb +13 -5
  155. data/lib/zm/{client/soap_request → soap_request}/soap_element.rb +1 -1
  156. data/lib/zm/{client/soap_request/mail_soap_constants.rb → soap_request/soap_mail_constants.rb} +1 -1
  157. data/lib/zm/soap_request.rb +14 -0
  158. data/lib/zm/support/cache/entry.rb +3 -3
  159. data/lib/zm/support/cache/file_store.rb +4 -6
  160. data/lib/zm/support/cache/null_store.rb +2 -4
  161. data/lib/zm/support/cache/store.rb +17 -9
  162. data/lib/zm/support/cache.rb +13 -8
  163. data/lib/zm/support.rb +7 -0
  164. data/lib/zm/{modules → utils}/belongs_to_folder.rb +1 -1
  165. data/lib/zm/{modules → utils}/belongs_to_tag.rb +2 -2
  166. data/lib/zm/utils/content_part.rb +9 -0
  167. data/lib/zm/utils/content_type.rb +11 -0
  168. data/lib/zm/{modules → utils}/has_soap_admin_connector.rb +1 -1
  169. data/lib/zm/utils/inspector.rb +26 -0
  170. data/lib/zm/utils/log_filter.rb +30 -0
  171. data/lib/zm/utils/missing_method_static_collection.rb +17 -0
  172. data/lib/zm/utils/regex.rb +11 -0
  173. data/lib/zm/utils/search_utils.rb +13 -0
  174. data/lib/zm/utils.rb +16 -0
  175. data/lib/zm-ruby-client.rb +12 -0
  176. data/sig/zm/client/admin_objects.rbs +261 -0
  177. data/sig/zm/client/base.rbs +191 -0
  178. data/sig/zm/client/cluster.rbs +152 -0
  179. data/sig/zm/client/mailbox.rbs +766 -0
  180. data/sig/zm/error.rbs +23 -0
  181. metadata +99 -91
  182. data/.gitignore +0 -59
  183. data/.rubocop.yml +0 -6
  184. data/.ruby-version +0 -1
  185. data/Gemfile +0 -11
  186. data/SECURITY.md +0 -21
  187. data/bin/console +0 -11
  188. data/lib/zm/client/account.rb +0 -9
  189. data/lib/zm/client/ace.rb +0 -7
  190. data/lib/zm/client/appointment.rb +0 -7
  191. data/lib/zm/client/backup.rb +0 -6
  192. data/lib/zm/client/base.rb +0 -21
  193. data/lib/zm/client/cluster.rb +0 -4
  194. data/lib/zm/client/common/message.rb +0 -10
  195. data/lib/zm/client/common.rb +0 -5
  196. data/lib/zm/client/connector/soap_base.rb +0 -104
  197. data/lib/zm/client/constant.rb +0 -229
  198. data/lib/zm/client/contact.rb +0 -11
  199. data/lib/zm/client/cos.rb +0 -10
  200. data/lib/zm/client/datasource.rb +0 -7
  201. data/lib/zm/client/distributionlist.rb +0 -8
  202. data/lib/zm/client/document.rb +0 -7
  203. data/lib/zm/client/domain.rb +0 -10
  204. data/lib/zm/client/filter_rule.rb +0 -7
  205. data/lib/zm/client/folder.rb +0 -14
  206. data/lib/zm/client/identity.rb +0 -7
  207. data/lib/zm/client/license.rb +0 -5
  208. data/lib/zm/client/message/attachments_collection.rb +0 -55
  209. data/lib/zm/client/message/message_flags.rb +0 -115
  210. data/lib/zm/client/message.rb +0 -10
  211. data/lib/zm/client/mountpoint.rb +0 -7
  212. data/lib/zm/client/mta_queue.rb +0 -7
  213. data/lib/zm/client/mta_queue_item.rb +0 -6
  214. data/lib/zm/client/resource.rb +0 -7
  215. data/lib/zm/client/search_folder.rb +0 -7
  216. data/lib/zm/client/server.rb +0 -7
  217. data/lib/zm/client/share.rb +0 -7
  218. data/lib/zm/client/signature.rb +0 -7
  219. data/lib/zm/client/soap_request.rb +0 -11
  220. data/lib/zm/client/tag.rb +0 -8
  221. data/lib/zm/client/task.rb +0 -6
  222. data/lib/zm/client/upload/upload.rb +0 -160
  223. data/lib/zm/modules/base.rb +0 -9
  224. data/lib/zm/modules/common/zimbra-attrs.json +0 -58
  225. data/lib/zm/modules/inspector.rb +0 -24
  226. data/lib/zm/modules/missing_method_static_collection.rb +0 -13
  227. data/lib/zm/modules/zm_model.rb +0 -43
  228. data/zm-ruby-client.gemspec +0 -27
  229. /data/lib/zm/client/mountpoint/{mountpoints_collection.rb → mount_points_collection.rb} +0 -0
@@ -6,7 +6,7 @@ module Zm
6
6
  class TagsCollection < Base::AccountObjectsCollection
7
7
  def initialize(parent)
8
8
  @child_class = Tag
9
- @builder_class = TagBuilder
9
+ @builder_class = TagsBuilder
10
10
  super
11
11
  end
12
12
 
@@ -15,7 +15,7 @@ module Zm
15
15
  end
16
16
 
17
17
  def build_query
18
- SoapElement.mail(SoapMailConstants::GET_TAG_REQUEST)
18
+ SoapRequest::SoapElement.mail(SoapRequest::SoapMailConstants::GET_TAG_REQUEST)
19
19
  end
20
20
  end
21
21
  end
@@ -4,8 +4,8 @@ module Zm
4
4
  module Client
5
5
  # class for account task
6
6
  class Task < Base::Object
7
- include BelongsToFolder
8
- include BelongsToTag
7
+ include Zm::Utils::BelongsToFolder
8
+ include Zm::Utils::BelongsToTag
9
9
 
10
10
  attr_accessor :uid, :priority, :ptst, :percentComplete, :name, :loc, :alarm, :isOrg,
11
11
  :id, :invId, :compNum, :l, :status, :class, :allDay, :f, :tn, :t, :rev,
@@ -14,7 +14,7 @@ module Zm
14
14
  @sort_by = 'taskDueAsc'
15
15
  end
16
16
 
17
- def find_each(offset: 0, limit: 500, &block)
17
+ def find_each(offset: 0, limit: 500, &)
18
18
  (Time.at(0).year..(Time.now.year + 10)).each do |year|
19
19
  @start_at = Time.new(year, 1, 1)
20
20
  @end_at = Time.new(year, 12, 31)
@@ -23,7 +23,7 @@ module Zm
23
23
  @limit = limit
24
24
 
25
25
  while @more
26
- build_response.each { |item| block.call(item) }
26
+ build_response.each(&)
27
27
  @offset += @limit
28
28
  end
29
29
  end
@@ -21,7 +21,10 @@ module Zm
21
21
  def metadatas
22
22
  return @metadatas if defined? @metadatas
23
23
 
24
- @metadatas = decoded.split(';').to_h { |part| part.split(/=\d+:/) }.freeze
24
+ @metadatas = decoded.split(';').each_with_object({}) do |part, h|
25
+ key, value = part.split(/=\d+:/, 2)
26
+ h[key] = value
27
+ end.freeze
25
28
  end
26
29
 
27
30
  def zimbra_id
@@ -1,3 +1,181 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'zm/client/upload/upload'
3
+ module Zm
4
+ module Client
5
+ # class for upload mailbox file
6
+ class Upload
7
+ FMT_TYPES_H = {
8
+ 'ics' => FolderView::APPOINTMENT,
9
+ 'vcard' => FolderView::CONTACT,
10
+ 'eml' => FolderView::MESSAGE,
11
+ 'vcf' => FolderView::CONTACT
12
+ }.freeze
13
+
14
+ AUTHORIZED_FOLDER_FMT = %w[zip tgz ics csv tar xml json rss atom html ifb].freeze
15
+
16
+ AUTHORIZED_PARAMS = %i[charset auth fmt id part list types emptyname disp resolve query meta csvfmt].freeze
17
+
18
+ AUTHORIZED_RESOLVE = %w[replace modify reset skip].freeze
19
+
20
+ attr_reader :rest_connector
21
+ attr_accessor :charset, :auth, :emptyname, :disp
22
+
23
+ def initialize(base_url, token, is_token_admin: false, **rest_options)
24
+ raise Zm::Error::ZmError, 'base_url must to be present' if base_url.nil?
25
+
26
+ @charset = 'UTF-8'
27
+ @auth = 'co'
28
+ @emptyname = 'Empty'
29
+ @disp = 'a'
30
+
31
+ yield(self) if block_given?
32
+
33
+ @base_url = base_url
34
+
35
+ @rest_connector = Zm::Connector::RestConnector.new(**rest_options) do |conn|
36
+ conn.cookies = if is_token_admin
37
+ "ZM_ADMIN_AUTH_TOKEN=#{token}"
38
+ else
39
+ "ZM_AUTH_TOKEN=#{token}"
40
+ end
41
+ end
42
+ end
43
+
44
+ def download_file(dest_file_path, file_id, type, fmt: nil)
45
+ fmt ||= File.extname(dest_file_path)[1..]
46
+ type ||= FMT_TYPES_H[fmt]
47
+
48
+ raise Zm::Error::RestError, 'Invalid fmt type' if type.nil? && fmt.nil?
49
+
50
+ remote_url = download_file_url(fmt, type, file_id)
51
+ @rest_connector.download(remote_url, dest_file_path)
52
+ end
53
+
54
+ def read_file(file_id, type, fmt: nil)
55
+ type ||= FMT_TYPES_H[fmt]
56
+
57
+ raise Zm::Error::RestError, 'Invalid fmt type' if type.nil? && fmt.nil?
58
+
59
+ remote_url = download_file_url(fmt, type, file_id)
60
+ @rest_connector.read(remote_url)
61
+ end
62
+
63
+ def download_files(dest_file_path, file_ids, type, fmt: nil)
64
+ fmt ||= File.extname(dest_file_path)[1..]
65
+ type ||= FMT_TYPES_H[fmt]
66
+
67
+ raise Zm::Error::RestError, 'Invalid fmt type' if type.nil? && fmt.nil?
68
+
69
+ remote_url = download_files_url(fmt, type, file_ids)
70
+ @rest_connector.download(remote_url, dest_file_path)
71
+ end
72
+
73
+ def download_attachment(dest_file_path, message_id, part)
74
+ remote_url = download_attachment_url(message_id, part)
75
+ @rest_connector.download(remote_url, dest_file_path)
76
+ end
77
+
78
+ def download_folder(dest_file_path, folder_id, fmt: nil)
79
+ fmt ||= File.extname(dest_file_path)[1..]
80
+
81
+ raise Zm::Error::RestError, 'Unauthorized fmt parameter' unless AUTHORIZED_FOLDER_FMT.include?(fmt)
82
+
83
+ remote_url = download_folder_url(folder_id, fmt)
84
+ @rest_connector.download(remote_url, dest_file_path)
85
+ end
86
+
87
+ def send_file(src_file_path, folder_id, fmt: nil, type: nil, resolve: nil)
88
+ fmt ||= File.extname(src_file_path)[1..]
89
+ type ||= FMT_TYPES_H[fmt]
90
+ resolve ||= AUTHORIZED_RESOLVE.first
91
+
92
+ raise Zm::Error::RestError, 'Unauthorized resolve parameter' unless AUTHORIZED_RESOLVE.include?(resolve)
93
+
94
+ raise Zm::Error::RestError, 'Invalid fmt type' if type.nil? && fmt.nil?
95
+
96
+ remote_url = send_file_url(folder_id, fmt:, type:, resolve:)
97
+ @rest_connector.upload(remote_url, src_file_path)
98
+ end
99
+
100
+ def upload_attachment(src_file_path)
101
+ @rest_connector.upload(upload_attachment_url, src_file_path)
102
+ end
103
+
104
+ def build_params(**params)
105
+ params.select! { |k, _| AUTHORIZED_PARAMS.include?(k) }
106
+
107
+ params[:charset] ||= @charset
108
+ params[:auth] ||= @auth
109
+ params[:emptyname] ||= @emptyname
110
+ params[:disp] ||= @disp
111
+
112
+ params.compact!
113
+
114
+ params
115
+ end
116
+
117
+ def format_url_params(params)
118
+ URI.encode_www_form(params)
119
+ end
120
+
121
+ def format_url(url, str_params)
122
+ return url if str_params.nil? || str_params.empty?
123
+
124
+ "#{url}?#{str_params}"
125
+ end
126
+
127
+ def download_file_with_url(url, dest_file_path)
128
+ url = File.join(@base_url, url) unless url.start_with?('http://', 'https://')
129
+ raise Zm::Error::RestError, 'url does not match base_url origin' unless same_origin?(url)
130
+
131
+ @rest_connector.download(url, dest_file_path)
132
+ end
133
+
134
+ def same_origin?(url)
135
+ uri = URI(url)
136
+ base_uri = URI(@base_url)
137
+ uri.scheme == base_uri.scheme && uri.host == base_uri.host && uri.port == base_uri.port
138
+ rescue URI::InvalidURIError
139
+ false
140
+ end
141
+
142
+ def download_folder_url(folder_id, fmt)
143
+ h = build_params(fmt:, id: folder_id)
144
+
145
+ format_url(@base_url, format_url_params(h))
146
+ end
147
+
148
+ def download_file_url(fmt, type, id)
149
+ h = build_params(fmt:, types: type, id:)
150
+
151
+ format_url(@base_url, format_url_params(h))
152
+ end
153
+
154
+ def download_attachment_url(message_id, part)
155
+ h = build_params(id: message_id, part:)
156
+
157
+ format_url(@base_url, format_url_params(h))
158
+ end
159
+
160
+ def download_files_url(fmt, type, ids)
161
+ h = build_params(fmt:, types: type, list: ids.join(','))
162
+
163
+ format_url(@base_url, format_url_params(h))
164
+ end
165
+
166
+ def send_file_url(folder_id, fmt:, type:, resolve:)
167
+ h = build_params(fmt:, types: type, resolve:, id: folder_id)
168
+
169
+ format_url(@base_url, format_url_params(h))
170
+ end
171
+
172
+ def upload_attachment_url
173
+ h = {
174
+ fmt: 'extended,raw'
175
+ }
176
+
177
+ format_url(File.join(@base_url, 'service/upload'), format_url_params(h))
178
+ end
179
+ end
180
+ end
181
+ end
@@ -10,9 +10,12 @@ module Zm
10
10
 
11
11
  class << self
12
12
  def format_email(email)
13
- email.strip!
14
- email.downcase!
15
- email
13
+ raise ArgumentError, "email must be a String, got #{email.class}" unless email.is_a?(String)
14
+
15
+ formatted = email.strip.downcase
16
+ raise ArgumentError, 'email must not be empty' if formatted.empty?
17
+
18
+ formatted
16
19
  end
17
20
 
18
21
  # TODO: chercher - remplacer toutes les occurrences dans le code
@@ -5,7 +5,7 @@ require 'logger'
5
5
  module Zm
6
6
  module Client
7
7
  class ZmLogger < ::Logger
8
- def initialize(*args, **kwargs)
8
+ def initialize(*, **)
9
9
  super
10
10
  @formatter ||= ZmFormatter.new
11
11
  end
data/lib/zm/client.rb CHANGED
@@ -1,13 +1,230 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'date'
4
-
5
- require 'zm/client/soap_request'
6
- require 'zm/modules/inspector'
7
- require 'zm/support/cache'
8
- require 'zm/client/zm_logger'
9
3
  require 'zm/client/version'
10
- require 'zm/client/constant'
11
- require 'zm/client/token'
12
- require 'zm/client/base'
13
- require 'zm/client/cluster'
4
+
5
+ module Zm
6
+ module Client
7
+ autoload :DeprecatedConstants, 'zm/client/deprecated_constants'
8
+ extend DeprecatedConstants
9
+
10
+ autoload :Utils, 'zm/client/utils'
11
+ autoload :ZmLogger, 'zm/client/zm_logger'
12
+ autoload :Token, 'zm/client/token'
13
+ autoload :Upload, 'zm/client/upload'
14
+
15
+ autoload :Recipients, 'zm/client/recipients'
16
+ autoload :Recipient, 'zm/client/recipient'
17
+
18
+ autoload :LdapFilter, 'zm/client/ldap_filter'
19
+
20
+ autoload :BatchRequest, 'zm/client/batch_request'
21
+
22
+ autoload :MailboxItemConcern, 'zm/client/mailbox/mailbox_item_concern'
23
+ autoload :MailboxItemID, 'zm/client/mailbox/mailbox_item_id'
24
+
25
+ autoload :ClusterConfig, 'zm/client/cluster/cluster_config'
26
+ autoload :ClusterConfigDomain, 'zm/client/cluster/cluster_config'
27
+ autoload :ClusterConfigError, 'zm/client/cluster/cluster_config'
28
+ autoload :Cluster, 'zm/client/cluster/cluster'
29
+
30
+ autoload :Server, 'zm/client/server/server'
31
+ autoload :ServerJsnsInitializer, 'zm/client/server/server_jsns_initializer'
32
+ autoload :ServersBuilder, 'zm/client/server/servers_builder'
33
+ autoload :ServersCollection, 'zm/client/server/servers_collection'
34
+ autoload :ServerAccountsCollection, 'zm/client/server/server_accounts_collection'
35
+ autoload :ServerServices, 'zm/client/server/server_services'
36
+
37
+ autoload :Cos, 'zm/client/cos/cos'
38
+ autoload :CosJsnsInitializer, 'zm/client/cos/cos_jsns_initializer'
39
+ autoload :CosJsnsBuilder, 'zm/client/cos/cos_jsns_builder'
40
+ autoload :CosesBuilder, 'zm/client/cos/coses_builder'
41
+ autoload :CosesCollection, 'zm/client/cos/coses_collection'
42
+ autoload :CosServersCollection, 'zm/client/cos/cos_servers_collection'
43
+ autoload :CosDomainsCollection, 'zm/client/cos/cos_domains_collection'
44
+ autoload :CosAccountsCollection, 'zm/client/cos/cos_accounts_collection'
45
+
46
+ autoload :Domain, 'zm/client/domain/domain'
47
+ autoload :DomainsBuilder, 'zm/client/domain/domains_builder'
48
+ autoload :DomainJsnsBuilder, 'zm/client/domain/domain_jsns_builder'
49
+ autoload :DomainJsnsInitializer, 'zm/client/domain/domain_jsns_initializer'
50
+ autoload :DomainsCollection, 'zm/client/domain/domains_collection'
51
+ autoload :DomainAccountsCollection, 'zm/client/domain/domain_accounts_collection'
52
+ autoload :DomainDistributionListsCollection, 'zm/client/domain/domain_distributionlists_collection'
53
+ autoload :DomainResourcesCollection, 'zm/client/domain/domain_resources_collection'
54
+
55
+ autoload :Account, 'zm/client/account/account'
56
+ autoload :AccountJsnsBuilder, 'zm/client/account/account_jsns_builder'
57
+ autoload :AccountJsnsInitializer, 'zm/client/account/account_jsns_initializer'
58
+ autoload :AccountsBuilder, 'zm/client/account/accounts_builder'
59
+ autoload :AccountsCollection, 'zm/client/account/accounts_collection'
60
+ autoload :AccountAliasesCollection, 'zm/client/account/account_aliases_collection'
61
+ autoload :AccountDlsMembershipCollection, 'zm/client/account/account_dls_membership_collection'
62
+ autoload :AccountDlsOwnerCollection, 'zm/client/account/account_dls_owner_collection'
63
+
64
+ autoload :Resource, 'zm/client/resource/resource'
65
+ autoload :ResourceJsnsBuilder, 'zm/client/resource/resource_jsns_builder'
66
+ autoload :ResourceJsnsInitializer, 'zm/client/resource/resource_jsns_initializer'
67
+ autoload :ResourcesBuilder, 'zm/client/resource/resources_builder'
68
+ autoload :ResourcesCollection, 'zm/client/resource/resources_collection'
69
+
70
+ autoload :DistributionList, 'zm/client/distributionlist/distributionlist'
71
+ autoload :DistributionListJsnsBuilder, 'zm/client/distributionlist/distributionlist_jsns_builder'
72
+ autoload :DistributionListJsnsInitializer, 'zm/client/distributionlist/distributionlist_jsns_initializer'
73
+ autoload :DistributionListsBuilder, 'zm/client/distributionlist/distributionlists_builder'
74
+ autoload :DistributionListsCollection, 'zm/client/distributionlist/distributionlists_collection'
75
+ autoload :DlsMembershipCollection, 'zm/client/distributionlist/dls_membership_collection'
76
+ autoload :DlMembership, 'zm/client/distributionlist/dls_membership_collection'
77
+ autoload :DistributionListAliasesCollection, 'zm/client/distributionlist/distributionlist_aliases_collection'
78
+ autoload :DistributionListMembersCollection, 'zm/client/distributionlist/distributionlist_members_collection'
79
+ autoload :DistributionListOwnersCollection, 'zm/client/distributionlist/distributionlist_owners_collection'
80
+ autoload :DistributionListAcesCollection, 'zm/client/distributionlist/distributionlist_aces_collection'
81
+
82
+ autoload :License, 'zm/client/license/license'
83
+ autoload :LicenseJsnsInitializer, 'zm/client/license/license_jsns_initializer'
84
+ autoload :LicensesCollection, 'zm/client/license/licenses_collection'
85
+
86
+ autoload :MtaQueueName, 'zm/client/mta_queue/mta_queue_name'
87
+ autoload :MtaQueueAction, 'zm/client/mta_queue/mta_queue_action'
88
+
89
+ autoload :FolderDefault, 'zm/client/folder/folder_default'
90
+ autoload :FolderView, 'zm/client/folder/folder_view'
91
+
92
+ autoload :Ace, 'zm/client/ace/ace'
93
+ autoload :AceJsnsBuilder, 'zm/client/ace/ace_jsns_builder'
94
+ autoload :AceJsnsInitializer, 'zm/client/ace/ace_jsns_initializer'
95
+ autoload :AcesBuilder, 'zm/client/ace/aces_builder'
96
+ autoload :AcesCollection, 'zm/client/ace/aces_collection'
97
+
98
+ autoload :Appointment, 'zm/client/appointment/appointment'
99
+ autoload :AppointmentJsnsBuilder, 'zm/client/appointment/appointment_jsns_builder'
100
+ autoload :AppointmentJsnsInitializer, 'zm/client/appointment/appointment_jsns_initializer'
101
+ autoload :AppointmentsBuilder, 'zm/client/appointment/appointments_builder'
102
+ autoload :AppointmentsCollection, 'zm/client/appointment/appointments_collection'
103
+
104
+ autoload :Backup, 'zm/client/backup/backup'
105
+ autoload :BackupJsnsInitializer, 'zm/client/backup/backup_jsns_initializer'
106
+ autoload :BackupsBuilder, 'zm/client/backup/backups_builder'
107
+ autoload :BackupsCollection, 'zm/client/backup/backups_collection'
108
+
109
+ autoload :DataSource, 'zm/client/datasource/datasource'
110
+ autoload :DataSourceJsnsInitializer, 'zm/client/datasource/datasource_jsns_initializer'
111
+ autoload :DataSourceJsnsBuilder, 'zm/client/datasource/datasource_jsns_builder'
112
+ autoload :DataSourcesBuilder, 'zm/client/datasource/datasources_builder'
113
+ autoload :DataSourcesCollection, 'zm/client/datasource/datasources_collection'
114
+
115
+ autoload :Contact, 'zm/client/contact/contact'
116
+ autoload :ContactMembersCollection, 'zm/client/contact/contact_members_collection'
117
+ autoload :ModGroupContact, 'zm/client/contact/mod_group_contact'
118
+ autoload :ContactJsnsInitializer, 'zm/client/contact/contact_jsns_initializer'
119
+ autoload :ContactJsnsBuilder, 'zm/client/contact/contact_jsns_builder'
120
+ autoload :GroupContactJsnsBuilder, 'zm/client/contact/group_contact_jsns_builder'
121
+ autoload :ContactMember, 'zm/client/contact/contact_member'
122
+ autoload :ContactsBuilder, 'zm/client/contact/contacts_builder'
123
+ autoload :ContactsCollection, 'zm/client/contact/contacts_collection'
124
+
125
+ autoload :Document, 'zm/client/document/document'
126
+ autoload :DocumentJsnsInitializer, 'zm/client/document/document_jsns_initializer'
127
+ autoload :DocumentJsnsBuilder, 'zm/client/document/document_jsns_builder'
128
+ autoload :DocumentsBuilder, 'zm/client/document/documents_builder'
129
+ autoload :DocumentsCollection, 'zm/client/document/documents_collection'
130
+
131
+ autoload :FilterRule, 'zm/client/filter_rules/filter_rule'
132
+ autoload :FilterRuleJsnsInitializer, 'zm/client/filter_rules/filter_rule_jsns_initializer'
133
+ autoload :FilterRulesBuilder, 'zm/client/filter_rules/filter_rules_builder'
134
+ autoload :FilterRulesCollection, 'zm/client/filter_rules/filter_rules_collection'
135
+ autoload :OutgoingFilterRulesCollection, 'zm/client/filter_rules/outgoing_filter_rules_collection'
136
+
137
+ autoload :Task, 'zm/client/task/task'
138
+ autoload :TaskJsnsInitializer, 'zm/client/task/task_jsns_initializer'
139
+ autoload :TasksBuilder, 'zm/client/task/tasks_builder'
140
+ autoload :TasksCollection, 'zm/client/task/tasks_collection'
141
+
142
+ autoload :Tag, 'zm/client/tag/tag'
143
+ autoload :TagJsnsBuilder, 'zm/client/tag/tag_jsns_builder'
144
+ autoload :TagJsnsInitializer, 'zm/client/tag/tag_jsns_initializer'
145
+ autoload :TagsBuilder, 'zm/client/tag/tags_builder'
146
+ autoload :TagsCollection, 'zm/client/tag/tags_collection'
147
+ autoload :AccountObjectTagsCollection, 'zm/client/tag/account_object_tags_collection'
148
+
149
+ autoload :Signature, 'zm/client/signature/signature'
150
+ autoload :SignatureJsnsBuilder, 'zm/client/signature/signature_jsns_builder'
151
+ autoload :SignatureJsnsInitializer, 'zm/client/signature/signature_jsns_initializer'
152
+ autoload :SignaturesBuilder, 'zm/client/signature/signatures_builder'
153
+ autoload :SignaturesCollection, 'zm/client/signature/signatures_collection'
154
+
155
+ autoload :Share, 'zm/client/share/share'
156
+ autoload :ShareJsnsInitializer, 'zm/client/share/share_jsns_initializer'
157
+ autoload :SharesBuilder, 'zm/client/share/shares_builder'
158
+ autoload :SharesCollection, 'zm/client/share/shares_collection'
159
+ autoload :ShareMountPointsCollection, 'zm/client/share/share_mountpoints_collection'
160
+
161
+ autoload :SearchFolder, 'zm/client/search_folder/search_folder'
162
+ autoload :SearchFolderJsnsBuilder, 'zm/client/search_folder/search_folder_jsns_builder'
163
+ autoload :SearchFolderJsnsInitializer, 'zm/client/search_folder/search_folder_jsns_initializer'
164
+ autoload :SearchFoldersBuilder, 'zm/client/search_folder/search_folders_builder'
165
+ autoload :SearchFoldersCollection, 'zm/client/search_folder/search_folders_collection'
166
+
167
+ autoload :Folder, 'zm/client/folder/folder'
168
+ autoload :FolderJsnsBuilder, 'zm/client/folder/folder_jsns_builder'
169
+ autoload :FolderJsnsInitializer, 'zm/client/folder/folder_jsns_initializer'
170
+ autoload :FoldersJsnsBuilder, 'zm/client/folder/folders_jsns_builder'
171
+ autoload :FolderGrant, 'zm/client/folder/folder_grant'
172
+ autoload :FolderGrantsCollection, 'zm/client/folder/folder_grants_collection'
173
+ autoload :FolderGrantJsnsBuilder, 'zm/client/folder/folder_grant_jsns_builder'
174
+ autoload :FolderRetentionPolicy, 'zm/client/folder/folder_retention_policy'
175
+ autoload :FolderRetentionPoliciesCollection, 'zm/client/folder/folder_retention_policies_collection'
176
+ autoload :FoldersBuilder, 'zm/client/folder/folders_builder'
177
+ autoload :FoldersCollection, 'zm/client/folder/folders_collection'
178
+ autoload :ModDocumentFolder, 'zm/client/folder/mod_document_folder'
179
+
180
+ autoload :Identity, 'zm/client/identity/identity'
181
+ autoload :IdentityJsnsBuilder, 'zm/client/identity/identity_jsns_builder'
182
+ autoload :IdentityJsnsInitializer, 'zm/client/identity/identity_jsns_initializer'
183
+ autoload :IdentitiesBuilder, 'zm/client/identity/identities_builder'
184
+ autoload :IdentitiesCollection, 'zm/client/identity/identities_collection'
185
+
186
+ autoload :MountPoint, 'zm/client/mountpoint/mount_point'
187
+ autoload :MountPointJsnsBuilder, 'zm/client/mountpoint/mount_point_jsns_builder'
188
+ autoload :MountPointJsnsInitializer, 'zm/client/mountpoint/mount_point_jsns_initializer'
189
+ autoload :MountPointsBuilder, 'zm/client/mountpoint/mount_points_builder'
190
+ autoload :MountPointsCollection, 'zm/client/mountpoint/mount_points_collection'
191
+
192
+ autoload :Message, 'zm/client/message/message'
193
+ autoload :MessageFlagsCollection, 'zm/client/message/message_flags_collection'
194
+ autoload :MessageRecipients, 'zm/client/message/message_recipients'
195
+ autoload :MessageAttachmentsCollection, 'zm/client/message/message_attachments_collection'
196
+ autoload :Attachment, 'zm/client/message/message_attachments_collection'
197
+ autoload :MessageJsnsBuilder, 'zm/client/message/message_jsns_builder'
198
+ autoload :MessageJsnsInitializer, 'zm/client/message/message_jsns_initializer'
199
+ autoload :MessagesBuilder, 'zm/client/message/messages_builder'
200
+ autoload :MessagesCollection, 'zm/client/message/messages_collection'
201
+
202
+ autoload :MtaQueue, 'zm/client/mta_queue/mta_queue'
203
+ autoload :MtaQueueJsnsInitializer, 'zm/client/mta_queue/mta_queue_jsns_initializer'
204
+ autoload :MtaQueueJsnsBuilder, 'zm/client/mta_queue/mta_queue_jsns_builder'
205
+ autoload :MtaQueuesBuilder, 'zm/client/mta_queue/mta_queues_builder'
206
+ autoload :MtaQueuesCollection, 'zm/client/mta_queue/mta_queues_collection'
207
+
208
+ autoload :MtaQueueItem, 'zm/client/mta_queue_item/mta_queue_item'
209
+ autoload :MtaQueueItemJsnsInitializer, 'zm/client/mta_queue_item/mta_queue_item_jsns_initializer'
210
+ autoload :MtaQueueItemsBuilder, 'zm/client/mta_queue_item/mta_queue_items_builder'
211
+ autoload :MtaQueueItemsCollection, 'zm/client/mta_queue_item/mta_queue_items_collection'
212
+
213
+ module Base
214
+ autoload :BaseJsnsBuilder, 'zm/client/base/base_jsns_builder'
215
+ autoload :BaseAccountJsnsBuilder, 'zm/client/base/base_account_jsns_builder'
216
+ autoload :BaseJsnsInitializer, 'zm/client/base/base_jsns_initializer'
217
+ autoload :ObjectsBuilder, 'zm/client/base/objects_builder'
218
+ autoload :ObjectsCollection, 'zm/client/base/objects_collection'
219
+ autoload :AdminObjectsCollection, 'zm/client/base/admin_objects_collection'
220
+ autoload :AccountObjectsCollection, 'zm/client/base/account_objects_collection'
221
+ autoload :AccountSearchObjectsCollection, 'zm/client/base/account_search_objects_collection'
222
+ autoload :ZimbraAttributesCollection, 'zm/client/base/zimbra_attributes_collection'
223
+ autoload :ZimbraAttribute, 'zm/client/base/zimbra_attribute'
224
+ autoload :Object, 'zm/client/base/object'
225
+ autoload :MailboxObject, 'zm/client/base/mailbox_object'
226
+ autoload :MailboxInfosCollection, 'zm/client/base/mailbox_infos_collection'
227
+ autoload :MailboxPrefsCollection, 'zm/client/base/mailbox_prefs_collection'
228
+ end
229
+ end
230
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Connector
5
+ # convert Faraday network errors into Zm::Error::ConnectionError, the original error is kept as cause
6
+ module NetworkErrorHandler
7
+ NETWORK_ERRORS = [Faraday::ConnectionFailed, Faraday::TimeoutError, Faraday::SSLError].freeze
8
+
9
+ private
10
+
11
+ def handle_network_errors
12
+ yield
13
+ rescue *NETWORK_ERRORS => e
14
+ raise Zm::Error::ConnectionError, "#{e.class}: #{e.message}"
15
+ end
16
+ end
17
+ end
18
+ end