zm-ruby-client 0.10.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +58 -0
- data/Gemfile +8 -0
- data/LICENSE +674 -0
- data/README.md +47 -0
- data/SECURITY.md +21 -0
- data/lib/zm/client/account/account.rb +335 -0
- data/lib/zm/client/account/account_dls_membership_collection.rb +22 -0
- data/lib/zm/client/account/account_dls_owner_collection.rb +22 -0
- data/lib/zm/client/account/accounts_builder.rb +19 -0
- data/lib/zm/client/account/accounts_collection.rb +48 -0
- data/lib/zm/client/account.rb +7 -0
- data/lib/zm/client/ace/ace.rb +32 -0
- data/lib/zm/client/ace/aces_builder.rb +25 -0
- data/lib/zm/client/ace/aces_collection.rb +36 -0
- data/lib/zm/client/ace.rb +5 -0
- data/lib/zm/client/appointment/appointment.rb +143 -0
- data/lib/zm/client/appointment/appointment_jsns_builder.rb +125 -0
- data/lib/zm/client/appointment/appointment_jsns_initializer.rb +129 -0
- data/lib/zm/client/appointment/appointments_builder.rb +33 -0
- data/lib/zm/client/appointment/appointments_collection.rb +106 -0
- data/lib/zm/client/appointment.rb +7 -0
- data/lib/zm/client/backup/backup.rb +59 -0
- data/lib/zm/client/backup/backups_builder.rb +26 -0
- data/lib/zm/client/backup/backups_collection.rb +22 -0
- data/lib/zm/client/backup.rb +5 -0
- data/lib/zm/client/base/account_object.rb +17 -0
- data/lib/zm/client/base/admin_object.rb +45 -0
- data/lib/zm/client/base/object.rb +80 -0
- data/lib/zm/client/base/objects_builder.rb +31 -0
- data/lib/zm/client/base/objects_collection.rb +135 -0
- data/lib/zm/client/base.rb +7 -0
- data/lib/zm/client/cluster/cluster.rb +117 -0
- data/lib/zm/client/cluster/cluster_config.rb +100 -0
- data/lib/zm/client/cluster.rb +4 -0
- data/lib/zm/client/common/message.rb +10 -0
- data/lib/zm/client/common/recipients.rb +67 -0
- data/lib/zm/client/common.rb +4 -0
- data/lib/zm/client/config.rb +12 -0
- data/lib/zm/client/connector/rest_account.rb +74 -0
- data/lib/zm/client/connector/soap_account.rb +562 -0
- data/lib/zm/client/connector/soap_admin.rb +512 -0
- data/lib/zm/client/connector/soap_base.rb +65 -0
- data/lib/zm/client/connector/soap_error.rb +26 -0
- data/lib/zm/client/connector/soap_xml_builder.rb +68 -0
- data/lib/zm/client/constant.rb +217 -0
- data/lib/zm/client/contact/contact.rb +124 -0
- data/lib/zm/client/contact/contact_member.rb +73 -0
- data/lib/zm/client/contact/contacts_builder.rb +24 -0
- data/lib/zm/client/contact/contacts_collection.rb +26 -0
- data/lib/zm/client/contact/mod_group_contact.rb +74 -0
- data/lib/zm/client/contact.rb +7 -0
- data/lib/zm/client/cos/cos.rb +59 -0
- data/lib/zm/client/cos/coses_builder.rb +29 -0
- data/lib/zm/client/cos/coses_collection.rb +33 -0
- data/lib/zm/client/cos.rb +5 -0
- data/lib/zm/client/data_source.rb +5 -0
- data/lib/zm/client/distributionlist/distributionlist.rb +125 -0
- data/lib/zm/client/distributionlist/distributionlists_builder.rb +29 -0
- data/lib/zm/client/distributionlist/distributionlists_collection.rb +41 -0
- data/lib/zm/client/distributionlist.rb +5 -0
- data/lib/zm/client/document/document.rb +47 -0
- data/lib/zm/client/document/documents_builder.rb +31 -0
- data/lib/zm/client/document/documents_collection.rb +93 -0
- data/lib/zm/client/document.rb +5 -0
- data/lib/zm/client/domain/domain.rb +74 -0
- data/lib/zm/client/domain/domains_builder.rb +32 -0
- data/lib/zm/client/domain/domains_collection.rb +36 -0
- data/lib/zm/client/domain.rb +5 -0
- data/lib/zm/client/folder/folder.rb +215 -0
- data/lib/zm/client/folder/folder_grant.rb +58 -0
- data/lib/zm/client/folder/folder_retention_policy.rb +48 -0
- data/lib/zm/client/folder/folders_builder.rb +58 -0
- data/lib/zm/client/folder/folders_collection.rb +70 -0
- data/lib/zm/client/folder/mod_document_folder.rb +17 -0
- data/lib/zm/client/folder.rb +8 -0
- data/lib/zm/client/identity/identities_builder.rb +25 -0
- data/lib/zm/client/identity/identities_collection.rb +26 -0
- data/lib/zm/client/identity/identity.rb +75 -0
- data/lib/zm/client/identity.rb +5 -0
- data/lib/zm/client/license/license.rb +29 -0
- data/lib/zm/client/license/licenses_collection.rb +28 -0
- data/lib/zm/client/license.rb +4 -0
- data/lib/zm/client/message/message.rb +225 -0
- data/lib/zm/client/message/messages_builder.rb +31 -0
- data/lib/zm/client/message/messages_collection.rb +111 -0
- data/lib/zm/client/message.rb +5 -0
- data/lib/zm/client/mountpoint/mountpoint.rb +95 -0
- data/lib/zm/client/mountpoint/mountpoints_builder.rb +38 -0
- data/lib/zm/client/mountpoint/mountpoints_collection.rb +61 -0
- data/lib/zm/client/mountpoint.rb +5 -0
- data/lib/zm/client/mta_queue/mta_queue.rb +60 -0
- data/lib/zm/client/mta_queue/mta_queues_builder.rb +26 -0
- data/lib/zm/client/mta_queue/mta_queues_collection.rb +95 -0
- data/lib/zm/client/mta_queue.rb +5 -0
- data/lib/zm/client/mta_queue_item/mta_queue_item.rb +51 -0
- data/lib/zm/client/mta_queue_item/mta_queue_items_builder.rb +27 -0
- data/lib/zm/client/mta_queue_item/mta_queue_items_collection.rb +99 -0
- data/lib/zm/client/mta_queue_item.rb +5 -0
- data/lib/zm/client/resource/resource.rb +149 -0
- data/lib/zm/client/resource/resources_builder.rb +29 -0
- data/lib/zm/client/resource/resources_collection.rb +41 -0
- data/lib/zm/client/resource.rb +5 -0
- data/lib/zm/client/search_folder/search_folder.rb +63 -0
- data/lib/zm/client/search_folder/search_folders_builder.rb +26 -0
- data/lib/zm/client/search_folder/search_folders_collection.rb +28 -0
- data/lib/zm/client/search_folder.rb +5 -0
- data/lib/zm/client/server/server.rb +516 -0
- data/lib/zm/client/server/servers_builder.rb +26 -0
- data/lib/zm/client/server/servers_collection.rb +37 -0
- data/lib/zm/client/server.rb +5 -0
- data/lib/zm/client/share/share.rb +60 -0
- data/lib/zm/client/share/shares_builder.rb +23 -0
- data/lib/zm/client/share/shares_collection.rb +48 -0
- data/lib/zm/client/share.rb +5 -0
- data/lib/zm/client/signature/signature.rb +62 -0
- data/lib/zm/client/signature/signature_jsns_builder.rb +29 -0
- data/lib/zm/client/signature/signatures_builder.rb +26 -0
- data/lib/zm/client/signature/signatures_collection.rb +28 -0
- data/lib/zm/client/signature.rb +6 -0
- data/lib/zm/client/tag/tag.rb +45 -0
- data/lib/zm/client/tag/tags_builder.rb +25 -0
- data/lib/zm/client/tag/tags_collection.rb +26 -0
- data/lib/zm/client/tag.rb +5 -0
- data/lib/zm/client/task/task.rb +74 -0
- data/lib/zm/client/task/tasks_builder.rb +31 -0
- data/lib/zm/client/task/tasks_collection.rb +100 -0
- data/lib/zm/client/task.rb +5 -0
- data/lib/zm/client/upload/upload.rb +154 -0
- data/lib/zm/client/upload.rb +3 -0
- data/lib/zm/client/version.rb +18 -0
- data/lib/zm/client.rb +5 -0
- data/lib/zm/modules/common/account_common.rb +71 -0
- data/lib/zm/modules/common/cos_common.rb +463 -0
- data/lib/zm/modules/common/dl_common.rb +33 -0
- data/lib/zm/modules/common/identity_common.rb +19 -0
- data/lib/zm/modules/common/resource_common.rb +59 -0
- data/lib/zm/modules/common/signature_common.rb +16 -0
- data/lib/zm/modules/common/zimbra-attrs.json +1 -0
- data/lib/zm/utils/thread_pool.rb +72 -0
- data/lib/zm-ruby-client.rb +1 -0
- data/test/accounts.rb +62 -0
- data/test/cluster_config.rb +30 -0
- data/test/coses.rb +26 -0
- data/test/domains.rb +62 -0
- data/zm-ruby-client.gemspec +24 -0
- metadata +243 -0
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zm
|
4
|
+
module Client
|
5
|
+
# collection of shares
|
6
|
+
class SharesCollection < Base::ObjectsCollection
|
7
|
+
def initialize(parent)
|
8
|
+
@parent = parent
|
9
|
+
reset_query_params
|
10
|
+
end
|
11
|
+
|
12
|
+
def new(json)
|
13
|
+
share = Share.new(@parent, json)
|
14
|
+
yield(share) if block_given?
|
15
|
+
share
|
16
|
+
end
|
17
|
+
|
18
|
+
def where(owner_name: nil)
|
19
|
+
@owner_name = owner_name
|
20
|
+
self
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def build_response
|
26
|
+
share_builder.make
|
27
|
+
end
|
28
|
+
|
29
|
+
def share_response
|
30
|
+
@parent.sacc.get_share_info @parent.token, build_options
|
31
|
+
end
|
32
|
+
|
33
|
+
def share_builder
|
34
|
+
ShareBuilder.new(@parent, share_response)
|
35
|
+
end
|
36
|
+
|
37
|
+
def build_options
|
38
|
+
return {} if @owner_name.nil?
|
39
|
+
|
40
|
+
{ owner: { by: :name, _content: @owner_name } }
|
41
|
+
end
|
42
|
+
|
43
|
+
def reset_query_params
|
44
|
+
@owner_name = nil
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zm
|
4
|
+
module Client
|
5
|
+
# class account signature
|
6
|
+
class Signature < Base::AccountObject
|
7
|
+
TYPE_TXT = 'text/plain'
|
8
|
+
TYPE_HTML = 'text/html'
|
9
|
+
|
10
|
+
INSTANCE_VARIABLE_KEYS = %i[id name txt html]
|
11
|
+
|
12
|
+
attr_accessor *INSTANCE_VARIABLE_KEYS
|
13
|
+
|
14
|
+
def concat
|
15
|
+
INSTANCE_VARIABLE_KEYS.map { |key| instance_variable_get(arrow_name(key)) }
|
16
|
+
end
|
17
|
+
|
18
|
+
def init_from_json(json)
|
19
|
+
@id = json[:id]
|
20
|
+
@name = json[:name]
|
21
|
+
json[:content].each do |c|
|
22
|
+
@txt = c[:_content] if c[:type] == TYPE_TXT
|
23
|
+
@html = c[:_content] if c[:type] == TYPE_HTML
|
24
|
+
end if json[:content].is_a?(Array)
|
25
|
+
end
|
26
|
+
|
27
|
+
def create!
|
28
|
+
rep = @parent.sacc.create_signature(@parent.token, as_jsns)
|
29
|
+
@id = rep[:Body][:CreateSignatureResponse][:signature].first[:id]
|
30
|
+
end
|
31
|
+
|
32
|
+
def modify!
|
33
|
+
@parent.sacc.modify_signature(@parent.token, as_jsns)
|
34
|
+
end
|
35
|
+
|
36
|
+
def delete!
|
37
|
+
@parent.sacc.delete_signature(@parent.token, id)
|
38
|
+
end
|
39
|
+
|
40
|
+
def type
|
41
|
+
return TYPE_HTML unless html.nil?
|
42
|
+
TYPE_TXT
|
43
|
+
end
|
44
|
+
|
45
|
+
def html?
|
46
|
+
type == TYPE_HTML
|
47
|
+
end
|
48
|
+
|
49
|
+
def txt?
|
50
|
+
type == TYPE_TXT
|
51
|
+
end
|
52
|
+
|
53
|
+
def content
|
54
|
+
html || txt
|
55
|
+
end
|
56
|
+
|
57
|
+
def as_jsns
|
58
|
+
SignatureJsnsBuilder.new(self).to_jsns
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zm
|
4
|
+
module Client
|
5
|
+
# class for account signature
|
6
|
+
class SignatureJsnsBuilder
|
7
|
+
|
8
|
+
def initialize(signature)
|
9
|
+
@signature = signature
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_jsns
|
13
|
+
jsns = {
|
14
|
+
signature: {
|
15
|
+
name: @signature.name,
|
16
|
+
content: {
|
17
|
+
type: @signature.type,
|
18
|
+
_content: @signature.content
|
19
|
+
}
|
20
|
+
}
|
21
|
+
}
|
22
|
+
|
23
|
+
jsns[:signature][:id] = @signature.id unless @signature.id.nil?
|
24
|
+
|
25
|
+
jsns
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zm
|
4
|
+
module Client
|
5
|
+
# class factory [folders]
|
6
|
+
class SignaturesBuilder < Base::ObjectsBuilder
|
7
|
+
def initialize(parent, json)
|
8
|
+
@parent = parent
|
9
|
+
@json = json
|
10
|
+
end
|
11
|
+
|
12
|
+
def make
|
13
|
+
root = @json[:Body][:GetSignaturesResponse][:signature]
|
14
|
+
return [] if root.nil?
|
15
|
+
|
16
|
+
root = [root] unless root.is_a?(Array)
|
17
|
+
|
18
|
+
root.map do |s|
|
19
|
+
signature = Signature.new(@parent)
|
20
|
+
signature.init_from_json(s)
|
21
|
+
signature
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zm
|
4
|
+
module Client
|
5
|
+
# collection of signatures
|
6
|
+
class SignaturesCollection < Base::ObjectsCollection
|
7
|
+
METHODS_MISSING_LIST = %i[select each map length].to_set.freeze
|
8
|
+
|
9
|
+
def initialize(parent)
|
10
|
+
@parent = parent
|
11
|
+
end
|
12
|
+
|
13
|
+
def new
|
14
|
+
signature = Signature.new(@parent)
|
15
|
+
yield(signature) if block_given?
|
16
|
+
signature
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def build_response
|
22
|
+
rep = @parent.sacc.get_signatures(@parent.token)
|
23
|
+
sb = SignaturesBuilder.new @parent, rep
|
24
|
+
sb.make
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zm
|
4
|
+
module Client
|
5
|
+
# class account tag
|
6
|
+
class Tag < Base::AccountObject
|
7
|
+
|
8
|
+
INSTANCE_VARIABLE_KEYS = %i[id name color rgb u n d rev md ms]
|
9
|
+
|
10
|
+
attr_accessor *INSTANCE_VARIABLE_KEYS
|
11
|
+
|
12
|
+
def concat
|
13
|
+
INSTANCE_VARIABLE_KEYS.map { |key| instance_variable_get(arrow_name(key)) }
|
14
|
+
end
|
15
|
+
|
16
|
+
def init_from_json(json)
|
17
|
+
INSTANCE_VARIABLE_KEYS.each do |key|
|
18
|
+
instance_variable_set(arrow_name(key), json[key])
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def create!
|
23
|
+
rep = @parent.sacc.create_tag(@parent.token, @name, @color, @rgb)
|
24
|
+
init_from_json(rep[:Body][:CreateTagResponse][:tag].first)
|
25
|
+
end
|
26
|
+
|
27
|
+
def modify!
|
28
|
+
@parent.sacc.tag_action(@parent.token, :update, @id, { color: @color, rgb: @rgb })
|
29
|
+
end
|
30
|
+
|
31
|
+
def delete!
|
32
|
+
@parent.sacc.tag_action(@parent.token, :delete, @id)
|
33
|
+
end
|
34
|
+
|
35
|
+
def rename!(new_name)
|
36
|
+
@parent.sacc.tag_action(
|
37
|
+
@parent.token,
|
38
|
+
:rename,
|
39
|
+
@id,
|
40
|
+
name: new_name
|
41
|
+
)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zm
|
4
|
+
module Client
|
5
|
+
# class factory [tags]
|
6
|
+
class TagBuilder < Base::ObjectsBuilder
|
7
|
+
def initialize(parent, json)
|
8
|
+
@parent = parent
|
9
|
+
@json = json
|
10
|
+
end
|
11
|
+
|
12
|
+
def make
|
13
|
+
root = @json[:Body][:GetTagResponse][:tag]
|
14
|
+
return [] if root.nil?
|
15
|
+
|
16
|
+
root = [root] unless root.is_a?(Array)
|
17
|
+
root.map do |s|
|
18
|
+
tag = Tag.new(@parent)
|
19
|
+
tag.init_from_json(s)
|
20
|
+
tag
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zm
|
4
|
+
module Client
|
5
|
+
# collection account tags
|
6
|
+
class TagsCollection < Base::ObjectsCollection
|
7
|
+
def initialize(parent)
|
8
|
+
@parent = parent
|
9
|
+
end
|
10
|
+
|
11
|
+
def new
|
12
|
+
tag = Tag.new(@parent)
|
13
|
+
yield(tag) if block_given?
|
14
|
+
tag
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def build_response
|
20
|
+
rep = @parent.sacc.get_tag(@parent.token)
|
21
|
+
tb = TagBuilder.new @parent, rep
|
22
|
+
tb.make
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zm
|
4
|
+
module Client
|
5
|
+
# class for account task
|
6
|
+
class Task < Base::AccountObject
|
7
|
+
|
8
|
+
INSTANCE_VARIABLE_KEYS = %i[id uid name l desc start_at dur end_at tn]
|
9
|
+
|
10
|
+
attr_accessor *INSTANCE_VARIABLE_KEYS
|
11
|
+
attr_writer :folder
|
12
|
+
attr_reader :json
|
13
|
+
|
14
|
+
alias description desc
|
15
|
+
alias parent_id l
|
16
|
+
|
17
|
+
def initialize(parent, json = nil)
|
18
|
+
@parent = parent
|
19
|
+
init_from_json(json) if json.is_a?(Hash)
|
20
|
+
yield(self) if block_given?
|
21
|
+
end
|
22
|
+
|
23
|
+
def concat
|
24
|
+
INSTANCE_VARIABLE_KEYS.map { |key| instance_variable_get(arrow_name(key)) }
|
25
|
+
end
|
26
|
+
|
27
|
+
def folder
|
28
|
+
@folder ||= @parent.folders.all.find { |folder| folder.id == l }
|
29
|
+
end
|
30
|
+
|
31
|
+
def download(dest_file_path, fmt = 'ics')
|
32
|
+
# @parent.uploader.download_file(folder.absFolderPath, 'ics', ['task'], [id], dest_file_path)
|
33
|
+
uploader = Upload.new(@parent, RestAccountConnector.new)
|
34
|
+
uploader.download_file(folder.absFolderPath, fmt, ['task'], [id], dest_file_path)
|
35
|
+
end
|
36
|
+
|
37
|
+
def create!
|
38
|
+
# rep = @parent.sacc.create_task(@parent.token, @l, @name, @view)
|
39
|
+
# init_from_json(rep[:Body][:CreateTaskResponse][:task].first)
|
40
|
+
end
|
41
|
+
|
42
|
+
def reload!
|
43
|
+
# rep = @parent.sacc.get_task(@parent.token, @id)
|
44
|
+
# init_from_json(rep[:Body][:GetTaskResponse][:task].first)
|
45
|
+
end
|
46
|
+
|
47
|
+
def delete!
|
48
|
+
# @parent.sacc.task_action(@parent.token, :delete, @id)
|
49
|
+
end
|
50
|
+
|
51
|
+
def init_from_json(json)
|
52
|
+
@json = json
|
53
|
+
@id = json[:id].to_i
|
54
|
+
@uid = json[:uid]
|
55
|
+
@tn = json[:tn]
|
56
|
+
@name = json[:name]
|
57
|
+
@l = json[:l]
|
58
|
+
@desc = json[:fr]
|
59
|
+
make_date(json)
|
60
|
+
end
|
61
|
+
|
62
|
+
def make_date(json)
|
63
|
+
return if json[:inst].nil? || json[:inst].first.empty? || json[:dur].nil?
|
64
|
+
|
65
|
+
@start_at = Time.at(json[:inst].first[:s] / 1000)
|
66
|
+
@end_at = Time.at((json[:inst].first[:s] + json[:dur]) / 1000)
|
67
|
+
|
68
|
+
return if json[:dur].nil?
|
69
|
+
|
70
|
+
@dur = json[:dur] / 1000
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zm
|
4
|
+
module Client
|
5
|
+
# class factory [tasks]
|
6
|
+
class TasksBuilder < Base::ObjectsBuilder
|
7
|
+
def initialize(parent, json)
|
8
|
+
@parent = parent
|
9
|
+
@json = json
|
10
|
+
end
|
11
|
+
|
12
|
+
def make
|
13
|
+
root.map do |s|
|
14
|
+
Task.new(@parent, s)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def ids
|
19
|
+
root.map { |s| s[:id] }
|
20
|
+
end
|
21
|
+
|
22
|
+
def root
|
23
|
+
root = @json[:Body][:SearchResponse][:task]
|
24
|
+
return [] if root.nil?
|
25
|
+
|
26
|
+
root = [root] unless root.is_a?(Array)
|
27
|
+
root
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zm
|
4
|
+
module Client
|
5
|
+
# collection of tasks
|
6
|
+
class TasksCollection < Base::ObjectsCollection
|
7
|
+
attr_accessor :more
|
8
|
+
|
9
|
+
def initialize(parent)
|
10
|
+
@parent = parent
|
11
|
+
@more = true
|
12
|
+
reset_query_params
|
13
|
+
end
|
14
|
+
|
15
|
+
def new
|
16
|
+
task = Task.new(@parent)
|
17
|
+
yield(task) if block_given?
|
18
|
+
task
|
19
|
+
end
|
20
|
+
|
21
|
+
def start_at(start_at)
|
22
|
+
@start_at = start_at
|
23
|
+
self
|
24
|
+
end
|
25
|
+
|
26
|
+
def end_at(end_at)
|
27
|
+
@end_at = end_at
|
28
|
+
self
|
29
|
+
end
|
30
|
+
|
31
|
+
def folders(folders)
|
32
|
+
@folders = folders
|
33
|
+
@folder_ids = @folders.map(&:id)
|
34
|
+
self
|
35
|
+
end
|
36
|
+
|
37
|
+
def folder_ids(folder_ids)
|
38
|
+
@folder_ids = folder_ids
|
39
|
+
self
|
40
|
+
end
|
41
|
+
|
42
|
+
def where(query)
|
43
|
+
@query = query
|
44
|
+
self
|
45
|
+
end
|
46
|
+
|
47
|
+
def ids
|
48
|
+
search_builder.ids
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def search_response
|
54
|
+
rep = @parent.sacc.search(@parent.token, 'task', @offset, @limit, 'taskDueAsc', query, build_options)
|
55
|
+
@more = rep[:Body][:SearchResponse][:more]
|
56
|
+
rep
|
57
|
+
end
|
58
|
+
|
59
|
+
def search_builder
|
60
|
+
TasksBuilder.new(@parent, search_response)
|
61
|
+
end
|
62
|
+
|
63
|
+
def build_response
|
64
|
+
tasks = search_builder.make
|
65
|
+
tasks.each { |appo| appo.folder = find_folder(appo) } unless @folders.empty?
|
66
|
+
tasks
|
67
|
+
end
|
68
|
+
|
69
|
+
def build_options
|
70
|
+
return {} if !@start_at.is_a?(Time) && !@end_at.is_a?(Time)
|
71
|
+
|
72
|
+
{
|
73
|
+
calExpandInstStart: (@start_at.to_f * 1000).to_i,
|
74
|
+
calExpandInstEnd: (@end_at.to_f * 1000).to_i,
|
75
|
+
}
|
76
|
+
end
|
77
|
+
|
78
|
+
def query
|
79
|
+
return @query unless @query.nil?
|
80
|
+
|
81
|
+
return nil if @folder_ids.empty?
|
82
|
+
|
83
|
+
@folder_ids.map { |id| %Q{inid:"#{id}"} }.join(' OR ')
|
84
|
+
end
|
85
|
+
|
86
|
+
def find_folder(task)
|
87
|
+
@folders.find { |folder| folder.id == task.l }
|
88
|
+
end
|
89
|
+
|
90
|
+
def reset_query_params
|
91
|
+
super
|
92
|
+
@start_at = nil
|
93
|
+
@end_at = nil
|
94
|
+
@query = nil
|
95
|
+
@folder_ids = []
|
96
|
+
@folders = []
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,154 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zm
|
4
|
+
module Client
|
5
|
+
# class for upload account file
|
6
|
+
class Upload
|
7
|
+
FMT_TYPES_H = {
|
8
|
+
'ics' => ['appointment'],
|
9
|
+
'vcard' => ['contact']
|
10
|
+
}
|
11
|
+
|
12
|
+
def initialize(parent, rac = nil)
|
13
|
+
@parent = parent
|
14
|
+
@rac = rac || @parent.rac
|
15
|
+
end
|
16
|
+
|
17
|
+
def download_file_with_url(url, dest_file_path)
|
18
|
+
url = File.join(@parent.home_url, url) unless url.start_with?('http')
|
19
|
+
@rac.download(url, dest_file_path)
|
20
|
+
end
|
21
|
+
|
22
|
+
def download_file(folder_path, fmt, types, ids, dest_file_path)
|
23
|
+
@rac.download(download_file_url(folder_path, fmt, types, ids), dest_file_path)
|
24
|
+
end
|
25
|
+
|
26
|
+
def download_folder(id, fmt, dest_file_path)
|
27
|
+
@rac.download(download_folder_url(id, fmt), dest_file_path)
|
28
|
+
end
|
29
|
+
|
30
|
+
def download_folder_url(id, fmt)
|
31
|
+
url_folder_path = @parent.home_url
|
32
|
+
|
33
|
+
h = {
|
34
|
+
fmt: fmt,
|
35
|
+
id: id,
|
36
|
+
emptyname: 'Vide',
|
37
|
+
charset: 'UTF-8',
|
38
|
+
auth: 'qp',
|
39
|
+
zauthtoken: @parent.token,
|
40
|
+
disp: 'a'
|
41
|
+
}
|
42
|
+
|
43
|
+
uri = Addressable::URI.new
|
44
|
+
uri.query_values = h
|
45
|
+
url_folder_path << '?' << uri.query
|
46
|
+
|
47
|
+
puts url_folder_path
|
48
|
+
|
49
|
+
url_folder_path
|
50
|
+
end
|
51
|
+
|
52
|
+
def download_file_url(folder_path, fmt, types, ids = [])
|
53
|
+
url_folder_path = File.join(@parent.home_url, folder_path.to_s)
|
54
|
+
|
55
|
+
h = {
|
56
|
+
fmt: fmt,
|
57
|
+
types: query_value_types(types, fmt),
|
58
|
+
emptyname: 'Vide',
|
59
|
+
charset: 'UTF-8',
|
60
|
+
auth: 'qp',
|
61
|
+
zauthtoken: @parent.token,
|
62
|
+
disp: 'a'
|
63
|
+
}
|
64
|
+
|
65
|
+
h.merge!(query_ids(ids))
|
66
|
+
|
67
|
+
h.reject! { |_, v| is_blank?(v) }
|
68
|
+
|
69
|
+
uri = Addressable::URI.new
|
70
|
+
uri.query_values = h
|
71
|
+
url_folder_path << '?' << uri.query
|
72
|
+
|
73
|
+
# puts url_folder_path
|
74
|
+
|
75
|
+
url_folder_path
|
76
|
+
end
|
77
|
+
|
78
|
+
def send_file(folder_path, fmt, types, resolve, src_file_path)
|
79
|
+
@rac.upload(send_file_url(folder_path, fmt, types, resolve), src_file_path)
|
80
|
+
end
|
81
|
+
|
82
|
+
def send_file_url(folder_path, fmt, types, resolve)
|
83
|
+
# resolve=[modfy|replace|reset|skip]
|
84
|
+
url_folder_path = File.join(@parent.home_url, folder_path.to_s)
|
85
|
+
|
86
|
+
h = {
|
87
|
+
fmt: fmt,
|
88
|
+
types: query_value_types(types, fmt),
|
89
|
+
resolve: resolve,
|
90
|
+
auth: 'qp',
|
91
|
+
zauthtoken: @parent.token
|
92
|
+
}
|
93
|
+
|
94
|
+
h.reject! { |_, v| is_blank?(v) }
|
95
|
+
|
96
|
+
uri = Addressable::URI.new
|
97
|
+
uri.query_values = h
|
98
|
+
|
99
|
+
url_folder_path << '?' << uri.query
|
100
|
+
url_folder_path
|
101
|
+
end
|
102
|
+
|
103
|
+
def send_attachment(src_file_path)
|
104
|
+
str = upload_attachment(src_file_path)
|
105
|
+
AttachmentResponse.new(str)
|
106
|
+
end
|
107
|
+
|
108
|
+
def upload_attachment(src_file_path)
|
109
|
+
@rac.upload(upload_attachment_url, src_file_path)
|
110
|
+
end
|
111
|
+
|
112
|
+
def upload_attachment_url
|
113
|
+
@rac.cookie("ZM_AUTH_TOKEN=#{@parent.token}")
|
114
|
+
uri = Addressable::URI.new
|
115
|
+
uri.query_values = {
|
116
|
+
fmt: 'extended,raw'
|
117
|
+
}
|
118
|
+
File.join(@parent.public_url, 'service/upload') << '?' << uri.query
|
119
|
+
end
|
120
|
+
|
121
|
+
def query_ids(ids)
|
122
|
+
return {} if ids.nil?
|
123
|
+
return { id: ids } unless ids.is_a?(Array)
|
124
|
+
return { id: ids.first } if ids.length == 1
|
125
|
+
return { list: ids.join(',') }
|
126
|
+
end
|
127
|
+
|
128
|
+
def query_value_types(types, fmt)
|
129
|
+
types = FMT_TYPES_H[fmt] if types.nil?
|
130
|
+
|
131
|
+
types = [types] unless types.is_a?(Array)
|
132
|
+
types.join(',')
|
133
|
+
end
|
134
|
+
|
135
|
+
def is_blank?(v)
|
136
|
+
return false if v.is_a?(Numeric)
|
137
|
+
|
138
|
+
v.nil? || v.empty?
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
# class to parse upload attachment response
|
143
|
+
class AttachmentResponse
|
144
|
+
def initialize(str)
|
145
|
+
@str = str
|
146
|
+
@str_h = JSON.parse(str[str.index('['), str.length], symbolize_names: true).first
|
147
|
+
end
|
148
|
+
|
149
|
+
def aid
|
150
|
+
@str_h[:aid]
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|