zm-ruby-client 0.18.5 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (250) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/Gemfile +2 -2
  4. data/README.md +7 -0
  5. data/lib/zm/client/account/account.rb +31 -308
  6. data/lib/zm/client/account/account_aliases_collection.rb +52 -0
  7. data/lib/zm/client/account/account_dls_membership_collection.rb +4 -1
  8. data/lib/zm/client/account/account_dls_owner_collection.rb +8 -1
  9. data/lib/zm/client/account/account_jsns_builder.rb +77 -0
  10. data/lib/zm/client/account/account_jsns_initializer.rb +9 -24
  11. data/lib/zm/client/account/accounts_builder.rb +0 -1
  12. data/lib/zm/client/account/accounts_collection.rb +32 -8
  13. data/lib/zm/client/account.rb +1 -0
  14. data/lib/zm/client/ace/ace.rb +6 -22
  15. data/lib/zm/client/ace/ace_jsns_builder.rb +15 -16
  16. data/lib/zm/client/ace/ace_jsns_initializer.rb +0 -1
  17. data/lib/zm/client/ace/aces_builder.rb +0 -1
  18. data/lib/zm/client/ace/aces_collection.rb +2 -18
  19. data/lib/zm/client/appointment/appointment.rb +38 -30
  20. data/lib/zm/client/appointment/appointment_jsns_builder.rb +22 -34
  21. data/lib/zm/client/appointment/appointment_jsns_initializer.rb +6 -3
  22. data/lib/zm/client/appointment/appointments_builder.rb +6 -18
  23. data/lib/zm/client/appointment/appointments_collection.rb +25 -4
  24. data/lib/zm/client/backup/backup.rb +4 -32
  25. data/lib/zm/client/backup/backup_jsns_initializer.rb +26 -0
  26. data/lib/zm/client/backup/backups_builder.rb +8 -13
  27. data/lib/zm/client/backup/backups_collection.rb +2 -1
  28. data/lib/zm/client/backup.rb +1 -0
  29. data/lib/zm/client/base/account_search_objects_collection.rb +34 -13
  30. data/lib/zm/client/base/admin_objects_collection.rb +82 -17
  31. data/lib/zm/client/base/base_account_jsns_builder.rb +98 -0
  32. data/lib/zm/client/base/base_jsns_builder.rb +47 -0
  33. data/lib/zm/client/base/base_jsns_initializer.rb +43 -12
  34. data/lib/zm/client/base/ldap_filter.rb +20 -5
  35. data/lib/zm/client/base/mailbox_infos_collection.rb +68 -0
  36. data/lib/zm/client/base/mailbox_object.rb +299 -0
  37. data/lib/zm/client/base/mailbox_prefs_collection.rb +75 -0
  38. data/lib/zm/client/base/object.rb +28 -62
  39. data/lib/zm/client/base/objects_builder.rb +4 -10
  40. data/lib/zm/client/base/objects_collection.rb +13 -10
  41. data/lib/zm/client/base/zimbra_attribute.rb +10 -8
  42. data/lib/zm/client/base/zimbra_attributes_collection.rb +154 -10
  43. data/lib/zm/client/base.rb +5 -5
  44. data/lib/zm/client/cluster/cluster.rb +43 -39
  45. data/lib/zm/client/cluster/cluster_config.rb +5 -5
  46. data/lib/zm/client/common/recipients.rb +3 -3
  47. data/lib/zm/client/common/token_metadata.rb +4 -1
  48. data/lib/zm/client/common/utils.rb +57 -0
  49. data/lib/zm/client/common.rb +2 -1
  50. data/lib/zm/client/connector/rest_account.rb +15 -28
  51. data/lib/zm/client/connector/soap_account.rb +38 -441
  52. data/lib/zm/client/connector/soap_admin.rb +16 -552
  53. data/lib/zm/client/connector/soap_base.rb +30 -21
  54. data/lib/zm/client/connector/soap_error.rb +1 -3
  55. data/lib/zm/client/constant.rb +21 -11
  56. data/lib/zm/client/contact/contact.rb +42 -83
  57. data/lib/zm/client/contact/contact_jsns_builder.rb +60 -0
  58. data/lib/zm/client/contact/contact_jsns_initializer.rb +78 -0
  59. data/lib/zm/client/contact/contact_member.rb +29 -28
  60. data/lib/zm/client/contact/contact_members_collection.rb +44 -0
  61. data/lib/zm/client/contact/contacts_builder.rb +8 -1
  62. data/lib/zm/client/contact/contacts_collection.rb +17 -1
  63. data/lib/zm/client/contact/group_contact_jsns_builder.rb +51 -0
  64. data/lib/zm/client/contact/mod_group_contact.rb +4 -67
  65. data/lib/zm/client/contact.rb +5 -1
  66. data/lib/zm/client/cos/cos.rb +35 -40
  67. data/lib/zm/client/cos/cos_accounts_collection.rb +19 -0
  68. data/lib/zm/client/cos/cos_domains_collection.rb +20 -0
  69. data/lib/zm/client/cos/cos_jsns_builder.rb +72 -0
  70. data/lib/zm/client/cos/cos_jsns_initializer.rb +29 -0
  71. data/lib/zm/client/cos/cos_servers_collection.rb +60 -0
  72. data/lib/zm/client/cos/coses_builder.rb +8 -1
  73. data/lib/zm/client/cos/coses_collection.rb +8 -5
  74. data/lib/zm/client/cos.rb +5 -0
  75. data/lib/zm/client/datasource/datasource.rb +69 -0
  76. data/lib/zm/client/datasource/datasource_jsns_builder.rb +32 -0
  77. data/lib/zm/client/datasource/datasource_jsns_initializer.rb +27 -0
  78. data/lib/zm/client/datasource/datasources_builder.rb +29 -0
  79. data/lib/zm/client/datasource/datasources_collection.rb +21 -0
  80. data/lib/zm/client/datasource.rb +7 -0
  81. data/lib/zm/client/distributionlist/distributionlist.rb +52 -118
  82. data/lib/zm/client/distributionlist/distributionlist_aces_collection.rb +31 -0
  83. data/lib/zm/client/distributionlist/distributionlist_aliases_collection.rb +53 -0
  84. data/lib/zm/client/distributionlist/distributionlist_jsns_builder.rb +82 -0
  85. data/lib/zm/client/distributionlist/distributionlist_jsns_initializer.rb +32 -0
  86. data/lib/zm/client/distributionlist/distributionlist_members_collection.rb +47 -0
  87. data/lib/zm/client/distributionlist/distributionlist_owners_collection.rb +52 -0
  88. data/lib/zm/client/distributionlist/distributionlists_builder.rb +8 -1
  89. data/lib/zm/client/distributionlist/distributionlists_collection.rb +8 -9
  90. data/lib/zm/client/distributionlist/dls_membership_collection.rb +4 -1
  91. data/lib/zm/client/distributionlist.rb +2 -0
  92. data/lib/zm/client/document/document.rb +27 -24
  93. data/lib/zm/client/document/document_jsns_builder.rb +18 -0
  94. data/lib/zm/client/document/document_jsns_initializer.rb +44 -0
  95. data/lib/zm/client/document/documents_builder.rb +6 -16
  96. data/lib/zm/client/document/documents_collection.rb +17 -67
  97. data/lib/zm/client/document.rb +2 -0
  98. data/lib/zm/client/domain/domain.rb +39 -55
  99. data/lib/zm/client/domain/domain_accounts_collection.rb +1 -1
  100. data/lib/zm/client/domain/domain_distributionlists_collection.rb +13 -0
  101. data/lib/zm/client/domain/domain_jsns_builder.rb +69 -0
  102. data/lib/zm/client/domain/domain_jsns_initializer.rb +25 -0
  103. data/lib/zm/client/domain/domain_resources_collection.rb +13 -0
  104. data/lib/zm/client/domain/domains_builder.rb +8 -1
  105. data/lib/zm/client/domain/domains_collection.rb +7 -7
  106. data/lib/zm/client/domain.rb +4 -0
  107. data/lib/zm/client/filter_rule.rb +7 -0
  108. data/lib/zm/client/filter_rules/filter_rule.rb +10 -0
  109. data/lib/zm/client/filter_rules/filter_rule_jsns_initializer.rb +24 -0
  110. data/lib/zm/client/filter_rules/filter_rules_builder.rb +21 -0
  111. data/lib/zm/client/filter_rules/filter_rules_collection.rb +21 -0
  112. data/lib/zm/client/filter_rules/outgoing_filter_rules_collection.rb +15 -0
  113. data/lib/zm/client/folder/folder.rb +77 -61
  114. data/lib/zm/client/folder/folder_grant.rb +34 -14
  115. data/lib/zm/client/folder/folder_grant_jsns_builder.rb +15 -4
  116. data/lib/zm/client/folder/folder_grants_collection.rb +36 -2
  117. data/lib/zm/client/folder/folder_jsns_builder.rb +22 -48
  118. data/lib/zm/client/folder/folder_jsns_initializer.rb +34 -17
  119. data/lib/zm/client/folder/folder_retention_policies_collection.rb +2 -3
  120. data/lib/zm/client/folder/folder_retention_policy.rb +0 -1
  121. data/lib/zm/client/folder/folders_builder.rb +7 -10
  122. data/lib/zm/client/folder/folders_collection.rb +5 -2
  123. data/lib/zm/client/folder/folders_jsns_builder.rb +3 -1
  124. data/lib/zm/client/folder/mod_document_folder.rb +10 -6
  125. data/lib/zm/client/folder.rb +1 -1
  126. data/lib/zm/client/identity/identities_builder.rb +8 -1
  127. data/lib/zm/client/identity/identities_collection.rb +2 -1
  128. data/lib/zm/client/identity/identity.rb +34 -42
  129. data/lib/zm/client/identity/identity_jsns_builder.rb +57 -0
  130. data/lib/zm/client/identity/identity_jsns_initializer.rb +29 -0
  131. data/lib/zm/client/identity.rb +3 -1
  132. data/lib/zm/client/license/license.rb +9 -22
  133. data/lib/zm/client/license/license_jsns_initializer.rb +20 -0
  134. data/lib/zm/client/license/licenses_collection.rb +3 -13
  135. data/lib/zm/client/license.rb +2 -1
  136. data/lib/zm/client/message/attachments_collection.rb +55 -0
  137. data/lib/zm/client/message/message.rb +36 -264
  138. data/lib/zm/client/message/message_flags.rb +107 -0
  139. data/lib/zm/client/message/message_jsns_builder.rb +85 -0
  140. data/lib/zm/client/message/message_jsns_initializer.rb +71 -0
  141. data/lib/zm/client/message/message_recipients.rb +59 -0
  142. data/lib/zm/client/message/messages_builder.rb +7 -18
  143. data/lib/zm/client/message/messages_collection.rb +17 -2
  144. data/lib/zm/client/message.rb +5 -0
  145. data/lib/zm/client/mountpoint/mountpoint.rb +43 -20
  146. data/lib/zm/client/mountpoint/mountpoint_jsns_builder.rb +8 -53
  147. data/lib/zm/client/mountpoint/mountpoint_jsns_initializer.rb +22 -13
  148. data/lib/zm/client/mountpoint/mountpoints_builder.rb +4 -5
  149. data/lib/zm/client/mountpoint/mountpoints_collection.rb +1 -2
  150. data/lib/zm/client/mta_queue/mta_queue.rb +13 -28
  151. data/lib/zm/client/mta_queue/mta_queue_jsns_builder.rb +41 -0
  152. data/lib/zm/client/mta_queue/mta_queue_jsns_initializer.rb +23 -0
  153. data/lib/zm/client/mta_queue/mta_queues_builder.rb +4 -8
  154. data/lib/zm/client/mta_queue/mta_queues_collection.rb +8 -27
  155. data/lib/zm/client/mta_queue.rb +2 -0
  156. data/lib/zm/client/mta_queue_item/mta_queue_item.rb +4 -31
  157. data/lib/zm/client/mta_queue_item/mta_queue_item_jsns_initializer.rb +33 -0
  158. data/lib/zm/client/mta_queue_item/mta_queue_items_builder.rb +4 -9
  159. data/lib/zm/client/mta_queue_item/mta_queue_items_collection.rb +7 -42
  160. data/lib/zm/client/mta_queue_item.rb +2 -1
  161. data/lib/zm/client/resource/resource.rb +24 -91
  162. data/lib/zm/client/resource/resource_jsns_builder.rb +79 -0
  163. data/lib/zm/client/resource/resource_jsns_initializer.rb +29 -0
  164. data/lib/zm/client/resource/resources_builder.rb +8 -1
  165. data/lib/zm/client/resource/resources_collection.rb +9 -7
  166. data/lib/zm/client/resource.rb +2 -0
  167. data/lib/zm/client/search_folder/search_folder.rb +38 -16
  168. data/lib/zm/client/search_folder/search_folder_jsns_builder.rb +38 -19
  169. data/lib/zm/client/search_folder/search_folder_jsns_initializer.rb +17 -13
  170. data/lib/zm/client/search_folder/search_folders_builder.rb +0 -1
  171. data/lib/zm/client/search_folder/search_folders_collection.rb +2 -1
  172. data/lib/zm/client/server/server.rb +16 -488
  173. data/lib/zm/client/server/server_jsns_initializer.rb +16 -0
  174. data/lib/zm/client/server/servers_builder.rb +8 -1
  175. data/lib/zm/client/server/servers_collection.rb +13 -5
  176. data/lib/zm/client/server.rb +1 -0
  177. data/lib/zm/client/share/share.rb +5 -43
  178. data/lib/zm/client/share/share_jsns_initializer.rb +32 -0
  179. data/lib/zm/client/share/share_mountpoints_collection.rb +38 -0
  180. data/lib/zm/client/share/shares_builder.rb +8 -1
  181. data/lib/zm/client/share/shares_collection.rb +11 -16
  182. data/lib/zm/client/share.rb +2 -0
  183. data/lib/zm/client/signature/signature.rb +25 -29
  184. data/lib/zm/client/signature/signature_jsns_builder.rb +31 -13
  185. data/lib/zm/client/signature/signature_jsns_initializer.rb +16 -12
  186. data/lib/zm/client/signature/signatures_builder.rb +1 -2
  187. data/lib/zm/client/signature/signatures_collection.rb +2 -1
  188. data/lib/zm/client/signature.rb +1 -1
  189. data/lib/zm/client/soap_request/account_soap_constants.rb +76 -0
  190. data/lib/zm/client/soap_request/admin_soap_constants.rb +214 -0
  191. data/lib/zm/client/soap_request/mail_soap_constants.rb +162 -0
  192. data/lib/zm/client/soap_request/soap_constants.rb +55 -0
  193. data/lib/zm/client/soap_request/soap_context.rb +38 -0
  194. data/lib/zm/client/soap_request/soap_element.rb +90 -0
  195. data/lib/zm/client/soap_request.rb +8 -0
  196. data/lib/zm/client/tag/account_object_tags_collection.rb +65 -0
  197. data/lib/zm/client/tag/tag.rb +34 -22
  198. data/lib/zm/client/tag/tag_jsns_builder.rb +14 -35
  199. data/lib/zm/client/tag/tag_jsns_initializer.rb +4 -6
  200. data/lib/zm/client/tag/tags_builder.rb +0 -1
  201. data/lib/zm/client/tag/tags_collection.rb +2 -1
  202. data/lib/zm/client/tag.rb +1 -0
  203. data/lib/zm/client/task/task.rb +18 -49
  204. data/lib/zm/client/task/task_jsns_initializer.rb +45 -0
  205. data/lib/zm/client/task/tasks_builder.rb +6 -16
  206. data/lib/zm/client/task/tasks_collection.rb +29 -0
  207. data/lib/zm/client/task.rb +1 -0
  208. data/lib/zm/client/upload/upload.rb +26 -30
  209. data/lib/zm/client/version.rb +3 -3
  210. data/lib/zm/client.rb +4 -1
  211. data/lib/zm/modules/base.rb +10 -0
  212. data/lib/zm/modules/belongs_to_folder.rb +37 -0
  213. data/lib/zm/modules/belongs_to_tag.rb +11 -0
  214. data/lib/zm/modules/common/zimbra-attrs.json +1 -1
  215. data/lib/zm/modules/has_soap_admin_connector.rb +12 -0
  216. data/lib/zm/modules/inspector.rb +24 -0
  217. data/lib/zm/modules/missing_method_static_collection.rb +13 -0
  218. data/lib/zm/modules/zm_logger.rb +3 -1
  219. data/lib/zm/modules/zm_model.rb +4 -2
  220. data/lib/zm/utils/thread_pool.rb +4 -2
  221. data/lib/zm-ruby-client.rb +2 -0
  222. data/zm-ruby-client.gemspec +12 -9
  223. metadata +93 -34
  224. data/lib/zm/client/base/account_object.rb +0 -51
  225. data/lib/zm/client/base/admin_object.rb +0 -51
  226. data/lib/zm/client/base/folder_object.rb +0 -41
  227. data/lib/zm/client/config.rb +0 -12
  228. data/lib/zm/client/data_source.rb +0 -5
  229. data/lib/zm/modules/common/account_common.rb +0 -71
  230. data/lib/zm/modules/common/cos_common.rb +0 -463
  231. data/lib/zm/modules/common/dl_common.rb +0 -38
  232. data/lib/zm/modules/common/identity_common.rb +0 -19
  233. data/lib/zm/modules/common/resource_common.rb +0 -59
  234. data/lib/zm/modules/common/signature_common.rb +0 -16
  235. data/lib/zm/modules/common/zimbra-attrs.json.bak +0 -1
  236. data/test/accounts.rb +0 -89
  237. data/test/ace.rb +0 -50
  238. data/test/cluster.rb +0 -41
  239. data/test/cluster_config.rb +0 -30
  240. data/test/cluster_zimbra_attributes.rb +0 -38
  241. data/test/coses.rb +0 -26
  242. data/test/domains.rb +0 -70
  243. data/test/folder.rb +0 -125
  244. data/test/folder_grant.rb +0 -51
  245. data/test/mountpoint.rb +0 -49
  246. data/test/retention_policies.rb +0 -40
  247. data/test/search_folder.rb +0 -67
  248. data/test/signature.rb +0 -53
  249. data/test/tag.rb +0 -65
  250. data/test/zimbra_attributes.rb +0 -35
@@ -6,470 +6,67 @@ require_relative 'soap_error'
6
6
  module Zm
7
7
  module Client
8
8
  class SoapAccountConnector < SoapBaseConnector
9
- MAILSPACE = 'urn:zimbraMail'
10
- ACCOUNTSPACE = 'urn:zimbraAccount'
11
- A_NODE_PROC = ->(n) { { n: n.first, _content: n.last } }
12
- A_NODE_PROC_NAME = ->(n) { { name: n.first, _content: n.last } }
13
- A_NODE_PROC_ARROW_NAME = ->(n) { { :@name => n.first, content!: n.last } }
14
-
15
- def initialize(scheme, host, port)
16
- super(scheme, host, port, '/service/soap/')
17
- end
18
-
19
- def auth_template(mail)
20
- {
21
- Body: {
22
- AuthRequest: {
23
- _jsns: ACCOUNTSPACE,
24
- account: {
25
- _content: mail,
26
- by: :name
27
- }
28
- }
29
- }
30
- }
31
- end
32
-
33
- def auth_preauth(mail, domainkey)
34
- ts = (Time.now.to_i * 1000)
35
- preauth = compute_preauth(mail, ts, domainkey)
36
- body = auth_template(mail)
37
- preauth_h = {
38
- preauth: {
39
- _content: preauth,
40
- timestamp: ts
41
- }
42
- }
43
- body[:Body][:AuthRequest].merge!(preauth_h)
44
- do_auth(body)
45
- end
46
-
47
- def auth_password(mail, password)
48
- body = auth_template(mail)
49
- body[:Body][:AuthRequest].merge!({ password: password })
50
- do_auth(body)
51
- end
52
-
53
- def do_auth(body)
54
- res = curl_request(body, AuthError)
55
- res[BODY][:AuthResponse][:authToken].first[:_content]
56
- end
57
-
58
- # -------------------------------
59
- # APPOINTMENT
60
-
61
- def get_appointment(token, id)
62
- req = { id: id }
63
- body = init_hash_request(token, :GetAppointmentRequest)
64
- body[:Body][:GetAppointmentRequest].merge!(req)
65
- curl_request(body)
66
- end
67
-
68
- def create_appointment(token, jsns)
69
- soap_name = :CreateAppointmentRequest
70
- body = init_hash_request(token, soap_name)
71
- body[:Body][soap_name].merge!(jsns)
72
- curl_request(body)
73
- end
74
-
75
- def modify_appointment(token, jsns)
76
- soap_name = :ModifyAppointmentRequest
77
- body = init_hash_request(token, soap_name)
78
- body[:Body][soap_name].merge!(jsns)
79
- curl_request(body)
80
- end
81
-
82
- def cancel_appointment(token, jsns)
83
- soap_name = :CancelAppointmentRequest
84
- body = init_hash_request(token, soap_name)
85
- body[:Body][soap_name].merge!(jsns)
86
- curl_request(body)
87
- end
88
-
89
- # -------------------------------
90
- # CONTACT
91
-
92
- def get_all_contacts(token, folder_id = nil)
93
- body = init_hash_request(token, :GetContactsRequest)
94
- unless folder_id.nil?
95
- req = { l: folder_id }
96
- body[:Body][:GetContactsRequest].merge!(req)
9
+ class << self
10
+ def create(config)
11
+ trans = new(
12
+ config.zimbra_public_scheme,
13
+ config.zimbra_public_host,
14
+ config.zimbra_public_port
15
+ )
16
+ trans.logger = config.logger
17
+ trans
97
18
  end
98
- curl_request(body)
99
- end
100
-
101
- def create_contact(token, folder_id, attrs)
102
- a = attrs.to_a.map(&A_NODE_PROC)
103
- soap_name = :CreateContactRequest
104
- req = { cn: { a: a, l: folder_id } }
105
- body = init_hash_request(token, soap_name)
106
- body[:Body][soap_name].merge!(req)
107
- curl_request(body)
108
- end
109
-
110
- def modify_contact(token, id, attrs)
111
- a = attrs.to_a.map(&A_NODE_PROC)
112
- soap_name = :ModifyContactRequest
113
- req = { cn: { a: a, id: id } }
114
- body = init_hash_request(token, soap_name)
115
- body[:Body][soap_name].merge!(req)
116
- curl_request(body)
117
- end
118
-
119
- def create_group_contact(token, folder_id, attrs, members = [])
120
- soap_name = :CreateContactRequest
121
- a = attrs.to_a.map(&A_NODE_PROC)
122
- req = { cn: { a: a, l: folder_id, m: members } }
123
- body = init_hash_request(token, soap_name)
124
- body[:Body][soap_name].merge!(req)
125
- curl_request(body)
126
- end
127
-
128
- def modify_group_contact(token, id, attrs, members = [])
129
- soap_name = :ModifyContactRequest
130
- a = attrs.to_a.map(&A_NODE_PROC)
131
- req = { cn: { a: a, id: id, m: members } }
132
- body = init_hash_request(token, soap_name)
133
- body[:Body][soap_name].merge!(req)
134
- curl_request(body)
135
- end
136
-
137
- def contact_action(token, op, id, options = {})
138
- soap_name = :ContactActionRequest
139
- action = { op: op, id: id }.merge(options)
140
- req = { action: action }
141
- body = init_hash_request(token, soap_name)
142
- body[:Body][soap_name].merge!(req)
143
- curl_request(body)
144
- end
145
-
146
- # -------------------------------
147
- # DOCUMENT
148
-
149
- def save_document(token, l, options = {})
150
- soap_name = :SaveDocumentRequest
151
- body = init_hash_request(token, soap_name)
152
- req = { doc: { l: l } }
153
- req[:doc].merge!(options)
154
- body[:Body][soap_name].merge!(req)
155
- curl_request(body)
156
- end
157
-
158
- def item_action(token, op, id, options = {})
159
- soap_name = :ItemActionRequest
160
- action = { op: op, id: id }.merge(options)
161
- req = { action: action }
162
- body = init_hash_request(token, soap_name)
163
- body[:Body][soap_name].merge!(req)
164
- curl_request(body)
165
- end
166
-
167
- # -------------------------------
168
- # FOLDER
169
-
170
- def get_folder(token, jsns)
171
- jsns_request(:GetFolderRequest, token, jsns)
172
- end
173
-
174
- # def get_all_folders(token, view = nil, tr = nil)
175
- # soap_name = :GetFolderRequest
176
- # body = init_hash_request(token, soap_name)
177
- # req = { view: view, tr: tr }.reject { |_, v| v.nil? }
178
- # body[:Body][soap_name].merge!(req)
179
- # curl_request(body)
180
- # end
181
-
182
- def create_folder(token, jsns)
183
- jsns_request(:CreateFolderRequest, token, jsns)
184
- end
185
-
186
- def folder_action(token, jsns)
187
- jsns_request(:FolderActionRequest, token, jsns)
188
- end
189
-
190
- def get_all_search_folders(token)
191
- soap_name = :GetSearchFolderRequest
192
- body = init_hash_request(token, soap_name)
193
- curl_request(body)
194
19
  end
195
20
 
196
- # -------------------------------
197
- # SEARCH FOLDER
198
-
199
- def create_search_folder(token, jsns)
200
- jsns_request(:CreateSearchFolderRequest, token, jsns)
21
+ def token
22
+ context.to_hash[:authToken]
201
23
  end
202
24
 
203
- def modify_search_folder(token, jsns)
204
- jsns_request(:ModifySearchFolderRequest, token, jsns)
25
+ def token=(value)
26
+ context.token(value)
205
27
  end
206
28
 
207
- # -------------------------------
208
- # TASK
209
-
210
- def create_task(token, folder_id, name, description = nil, options = {})
211
- comp = { name: name }
212
- comp.merge!(options) if !options.nil? && !options.empty?
213
-
214
- task = { su: name, l: folder_id, inv: { comp: [comp] } }
215
-
216
- task[:mp] = { ct: 'text/plain', content: description } unless description.nil?
217
-
218
- req = { m: task }
219
-
220
- body = init_hash_request(token, :CreateTaskRequest)
221
- body[:Body][:CreateTaskRequest].merge!(req)
222
- curl_request(body)
223
- end
224
-
225
- # -------------------------------
226
- # SHARE
227
-
228
- def create_mountpoint(token, jsns)
229
- jsns_request(:CreateMountpointRequest, token, jsns)
230
- end
231
-
232
- def get_share_info(token, options = {})
233
- soap_name = :GetShareInfoRequest
234
- req = { includeSelf: 0 }.merge!(options)
235
- body = init_hash_request(token, soap_name, ACCOUNTSPACE)
236
- body[:Body][soap_name].merge!(req)
237
- curl_request(body)
238
- end
239
-
240
- def get_rights(token, jsns)
241
- jsns_request(:GetRightsRequest, token, jsns, ACCOUNTSPACE)
242
- end
243
-
244
- def grant_rights(token, jsns)
245
- jsns_request(:GrantRightsRequest, token, jsns, ACCOUNTSPACE)
246
- end
247
-
248
- def revoke_rights(token, jsns)
249
- jsns_request(:RevokeRightsRequest, token, jsns, ACCOUNTSPACE)
250
- end
251
-
252
- # -------------------------------
253
- # MESSAGE
254
-
255
- def get_msg(token, id, options = {})
256
- req = { m: { id: id } }
257
- req[:m].merge!(options) unless options.empty?
258
- body = init_hash_request(token, :GetMsgRequest)
259
- body[:Body][:GetMsgRequest].merge!(req)
260
- curl_request(body)
261
- end
262
-
263
- def msg_action(token, op, id, options = {})
264
- action = { op: op, id: id }.merge(options)
265
- req = { action: action }
266
- body = init_hash_request(token, :MsgActionRequest)
267
- body[:Body][:MsgActionRequest].merge!(req)
268
- curl_request(body)
269
- end
270
-
271
- def send_msg(token, m)
272
- req = { m: m }
273
- body = init_hash_request(token, :SendMsgRequest)
274
- body[:Body][:SendMsgRequest].merge!(req)
275
- # curl_request(body)
276
- end
277
-
278
- def add_msg(token, l, eml, d = nil, f = nil, tn = nil)
279
- key = :AddMsgRequest
280
- m = {
281
- l: l,
282
- d: d,
283
- f: f,
284
- tn: tn,
285
- content: { _content: eml }
286
- }.reject { |_, v| v.nil? }
287
-
288
- req = { m: m }
289
- body = init_hash_request(token, key)
290
- body[:Body][key].merge!(req)
291
-
292
- curl_request(body)
293
- end
294
-
295
- # -------------------------------
296
- # TAG
297
-
298
- def get_tag(token)
299
- body = init_hash_request(token, :GetTagRequest)
300
- curl_request(body)
301
- end
302
-
303
- def create_tag(token, jsns)
304
- jsns_request(:CreateTagRequest, token, jsns)
305
- end
306
-
307
- def tag_action(token, jsns)
308
- jsns_request(:TagActionRequest, token, jsns)
309
- end
310
-
311
- # -------------------------------
312
- # IDENTITY
313
-
314
- def get_all_identities(token)
315
- body = init_hash_request(token, :GetIdentitiesRequest, ACCOUNTSPACE)
316
- curl_request(body)
317
- end
318
-
319
- def create_identity(token, name, attrs = {})
320
- soap_name = :CreateIdentityRequest
321
- req = { identity: { name: name, _attrs: attrs } }
322
- body = init_hash_request(token, soap_name, ACCOUNTSPACE)
323
- body[:Body][soap_name].merge!(req)
324
- curl_request(body)
325
- end
326
-
327
- def modify_identity(token, id, attrs = {})
328
- soap_name = :ModifyIdentityRequest
329
- req = { identity: { id: id, _attrs: attrs } }
330
- body = init_hash_request(token, soap_name, ACCOUNTSPACE)
331
- body[:Body][soap_name].merge!(req)
332
- curl_request(body)
333
- end
334
-
335
- def delete_identity(token, id)
336
- soap_name = :DeleteIdentityRequest
337
- req = { identity: { id: id } }
338
- body = init_hash_request(token, soap_name, ACCOUNTSPACE)
339
- body[:Body][soap_name].merge!(req)
340
- curl_request(body)
341
- end
342
-
343
- # -------------------------------
344
- # PREFERENCES
345
-
346
- def get_prefs(token, *names)
347
- req = { prefs: names.map { |name| { name: name } } }
348
- body = init_hash_request(token, :GetPrefsRequest, ACCOUNTSPACE)
349
- body[:Body][:GetPrefsRequest].merge!(req) if req.any?
350
- curl_request(body)
351
- end
352
-
353
- def get_filter_rules(token)
354
- soap_name = :GetFilterRulesRequest
355
- body = init_hash_request(token, soap_name)
356
- curl_request(body)
357
- end
358
-
359
- def modify_filter_rules(token, rules)
360
- soap_name = :ModifyFilterRulesRequest
361
- req = { filterRules: [{ filterRule: rules }] }
362
- body = init_hash_request(token, soap_name)
363
- body[:Body][soap_name].merge!(req)
364
- curl_request(body)
365
- end
366
-
367
- def modify_prefs(token, hash)
368
- soap_name = :ModifyPrefsRequest
369
- body = init_hash_request(token, soap_name, ACCOUNTSPACE)
370
-
371
- req = {
372
- _attrs: hash
373
- }
374
-
375
- body[:Body][soap_name].merge!(req)
376
-
377
- curl_request(body)
378
- end
379
-
380
- def get_signatures(token)
381
- soap_name = :GetSignaturesRequest
382
- body = init_hash_request(token, soap_name, ACCOUNTSPACE)
383
- curl_request(body)
384
- end
385
-
386
- def create_signature(token, jsns)
387
- soap_name = :CreateSignatureRequest
388
- body = init_hash_request(token, soap_name, ACCOUNTSPACE)
389
- body[:Body][soap_name].merge!(jsns)
390
- curl_request(body)
391
- end
392
-
393
- def modify_signature(token, jsns)
394
- soap_name = :ModifySignatureRequest
395
- body = init_hash_request(token, soap_name, ACCOUNTSPACE)
396
- body[:Body][soap_name].merge!(jsns)
397
- curl_request(body)
29
+ def initialize(scheme, host, port)
30
+ super(scheme, host, port, SoapAccountConstants::ACCOUNT_SERVICE_URI)
398
31
  end
399
32
 
400
- def delete_signature(token, jsns)
401
- soap_name = :DeleteSignatureRequest
402
- body = init_hash_request(token, soap_name, ACCOUNTSPACE)
403
- body[:Body][soap_name].merge!(jsns)
404
- curl_request(body)
405
- end
33
+ def auth_preauth(content, by, expires, domainkey)
34
+ ts = (Time.now.to_i * 1000)
35
+ preauth = compute_preauth(content, by, ts, expires, domainkey)
406
36
 
407
- # -------------------------------
408
- # GENERIC
37
+ soap_request = SoapElement.account(SoapAccountConstants::AUTH_REQUEST)
38
+ node_account = SoapElement.create(SoapConstants::ACCOUNT).add_attribute(SoapConstants::BY,
39
+ by).add_content(content)
40
+ soap_request.add_node(node_account)
41
+ node_preauth = SoapElement.create(SoapConstants::PREAUTH).add_attribute(SoapConstants::TIMESTAMP,
42
+ ts).add_content(preauth)
43
+ soap_request.add_node(node_preauth)
409
44
 
410
- def get_info(token, sections = 'mbox,prefs,attrs,zimlets,props,idents,sigs,dsrcs,children', rights = nil)
411
- req = { rights: rights, sections: sections }.reject { |_, v| v.nil? }
412
- body = init_hash_request(token, :GetInfoRequest, ACCOUNTSPACE)
413
- body[:Body][:GetInfoRequest].merge!(req) if req.any?
414
- curl_request(body)
45
+ do_login(soap_request)
415
46
  end
416
47
 
417
- def search(token, types = nil, offset = nil, limit = nil, sortBy = nil, query = nil, options = {})
418
- soap_name = :SearchRequest
419
- # types: conversation|message|contact|appointment|task|wiki|document
420
- req = {
421
- types: types,
422
- offset: offset,
423
- limit: limit,
424
- sortBy: sortBy,
425
- query: query,
426
- header: [{ n: 'messageIdHeader' }]
427
- }.merge!(options)
428
- req.reject! { |_, v| v.nil? }
48
+ def auth_password(content, by, password)
49
+ soap_request = SoapElement.account(SoapAccountConstants::AUTH_REQUEST)
50
+ node_account = SoapElement.create(SoapConstants::ACCOUNT).add_attribute(SoapConstants::BY,
51
+ by).add_content(content)
52
+ soap_request.add_node(node_account)
53
+ soap_request.add_attribute('password', password)
429
54
 
430
- body = init_hash_request(token, soap_name)
431
- body[:Body][soap_name].merge!(req) if req.any?
432
- curl_request(body)
55
+ do_login(soap_request)
433
56
  end
434
57
 
435
- def jsns_request(soap_name, token, jsns, namespace = MAILSPACE)
436
- body = init_hash_request(token, soap_name, namespace)
437
- body[:Body][soap_name].merge!(jsns) if jsns.is_a?(Hash)
438
- curl_request(body)
439
- end
440
-
441
- def ranking_action(token, op, email = nil)
442
- soap_name = :RankingActionRequest
443
- req = {
444
- action: {
445
- op: op,
446
- email: email
447
- }
448
- }
449
- req[:action].delete_if { |_, v| v.nil? }
450
-
451
- body = init_hash_request(token, soap_name)
452
- body[:Body][soap_name].merge!(req) if req.any?
453
-
454
- curl_request(body)
58
+ def do_login(soap_request)
59
+ invoke(soap_request)[:AuthResponse][:authToken].first[:_content]
455
60
  end
456
61
 
457
62
  private
458
63
 
459
- def compute_preauth(mail, ts, domainkey)
460
- data = "#{mail}|name|0|#{ts}"
64
+ def compute_preauth(content, by, ts, expires, domain_key)
65
+ data = "#{content}|#{by}|#{expires}|#{ts}"
461
66
  digest = OpenSSL::Digest.new('sha1')
462
- hmac = OpenSSL::HMAC.hexdigest(digest, domainkey, data)
67
+ hmac = OpenSSL::HMAC.hexdigest(digest, domain_key, data)
463
68
  hmac.to_s
464
69
  end
465
-
466
- def init_hash_request(token, soap_name, namespace = MAILSPACE)
467
- {
468
- Body: {
469
- soap_name => { _jsns: namespace }
470
- }
471
- }.merge(hash_header(token))
472
- end
473
70
  end
474
71
  end
475
72
  end