pd1_tools 0.43.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.
- checksums.yaml +7 -0
- data/Gemfile +12 -0
- data/exe/pd1 +8 -0
- data/lib/avmtrf1/active_directory/user.rb +28 -0
- data/lib/avmtrf1/active_directory.rb +8 -0
- data/lib/avmtrf1/ad_user.rb +11 -0
- data/lib/avmtrf1/check_point/session/login.rb +57 -0
- data/lib/avmtrf1/check_point/session.rb +60 -0
- data/lib/avmtrf1/check_point.rb +3 -0
- data/lib/avmtrf1/default_esosti.rb +20 -0
- data/lib/avmtrf1/default_jira.rb +18 -0
- data/lib/avmtrf1/default_redmine.rb +16 -0
- data/lib/avmtrf1/docker/image.rb +49 -0
- data/lib/avmtrf1/docker/image_runner.rb +83 -0
- data/lib/avmtrf1/docker.rb +9 -0
- data/lib/avmtrf1/esosti/entities/issue.rb +24 -0
- data/lib/avmtrf1/esosti/entities.rb +9 -0
- data/lib/avmtrf1/esosti/instance/changed.rb +33 -0
- data/lib/avmtrf1/esosti/instance.rb +22 -0
- data/lib/avmtrf1/esosti/raw_data_sanitizer.rb +47 -0
- data/lib/avmtrf1/esosti/session/action_base.rb +34 -0
- data/lib/avmtrf1/esosti/session/atividades.rb +35 -0
- data/lib/avmtrf1/esosti/session/login.rb +47 -0
- data/lib/avmtrf1/esosti/session/solicitacao/main.rb +49 -0
- data/lib/avmtrf1/esosti/session/solicitacao.rb +81 -0
- data/lib/avmtrf1/esosti/session.rb +36 -0
- data/lib/avmtrf1/esosti.rb +8 -0
- data/lib/avmtrf1/executables.rb +23 -0
- data/lib/avmtrf1/forponto/parsers/day_registers.rb +19 -0
- data/lib/avmtrf1/forponto/parsers/espelho/day_node.rb +50 -0
- data/lib/avmtrf1/forponto/parsers/espelho/methods_as_fields.rb +21 -0
- data/lib/avmtrf1/forponto/parsers/espelho/row_node.rb +34 -0
- data/lib/avmtrf1/forponto/parsers/espelho/rows_consumer.rb +71 -0
- data/lib/avmtrf1/forponto/parsers/espelho/sub_node.rb +20 -0
- data/lib/avmtrf1/forponto/parsers/espelho/summary_node.rb +55 -0
- data/lib/avmtrf1/forponto/parsers/espelho/utils.rb +32 -0
- data/lib/avmtrf1/forponto/parsers/espelho.rb +26 -0
- data/lib/avmtrf1/forponto/session/day_registers.rb +39 -0
- data/lib/avmtrf1/forponto/session/interval.rb +27 -0
- data/lib/avmtrf1/forponto/session/login.rb +45 -0
- data/lib/avmtrf1/forponto/session.rb +32 -0
- data/lib/avmtrf1/forponto/user/balance.rb +155 -0
- data/lib/avmtrf1/forponto/user/day_registers.rb +32 -0
- data/lib/avmtrf1/forponto/user/month.rb +141 -0
- data/lib/avmtrf1/forponto/user.rb +22 -0
- data/lib/avmtrf1/git/cached_repository.rb +27 -0
- data/lib/avmtrf1/git/gitlab.rb +11 -0
- data/lib/avmtrf1/git/issue_on_repository.rb +100 -0
- data/lib/avmtrf1/git/push_large/_utils.rb +16 -0
- data/lib/avmtrf1/git/push_large/lfs_commit/cache.rb +21 -0
- data/lib/avmtrf1/git/push_large/lfs_commit/checkout_previous_revision.rb +35 -0
- data/lib/avmtrf1/git/push_large/lfs_commit/commit_changes.rb +48 -0
- data/lib/avmtrf1/git/push_large/lfs_commit/helpers.rb +29 -0
- data/lib/avmtrf1/git/push_large/lfs_commit/pick_source_revision.rb +103 -0
- data/lib/avmtrf1/git/push_large/lfs_commit/push.rb +90 -0
- data/lib/avmtrf1/git/push_large/lfs_commit/track_large_files.rb +53 -0
- data/lib/avmtrf1/git/push_large/lfs_commit.rb +47 -0
- data/lib/avmtrf1/git/push_large/source_commit/push.rb +42 -0
- data/lib/avmtrf1/git/push_large/source_commit.rb +58 -0
- data/lib/avmtrf1/git/push_large.rb +69 -0
- data/lib/avmtrf1/git/reference.rb +34 -0
- data/lib/avmtrf1/git.rb +10 -0
- data/lib/avmtrf1/gitlab/commit.rb +37 -0
- data/lib/avmtrf1/gitlab/repository.rb +41 -0
- data/lib/avmtrf1/ini/profile.rb +42 -0
- data/lib/avmtrf1/ini.rb +55 -0
- data/lib/avmtrf1/inventario_sistemas/parser/body.rb +27 -0
- data/lib/avmtrf1/inventario_sistemas/parser/body_row.rb +12 -0
- data/lib/avmtrf1/inventario_sistemas/parser/header.rb +38 -0
- data/lib/avmtrf1/inventario_sistemas/parser/header_column.rb +27 -0
- data/lib/avmtrf1/inventario_sistemas/parser.rb +40 -0
- data/lib/avmtrf1/inventario_sistemas/site_build/html_page_base/elements.rb +54 -0
- data/lib/avmtrf1/inventario_sistemas/site_build/html_page_base/layout.rb +55 -0
- data/lib/avmtrf1/inventario_sistemas/site_build/html_page_base/stylesheet.css +57 -0
- data/lib/avmtrf1/inventario_sistemas/site_build/html_page_base.rb +41 -0
- data/lib/avmtrf1/inventario_sistemas/site_build/index.rb +20 -0
- data/lib/avmtrf1/inventario_sistemas/site_build/sistema.rb +62 -0
- data/lib/avmtrf1/inventario_sistemas/site_build/sistemas_index.rb +31 -0
- data/lib/avmtrf1/inventario_sistemas/site_build.rb +71 -0
- data/lib/avmtrf1/inventario_sistemas.rb +38 -0
- data/lib/avmtrf1/issues/factory.rb +22 -0
- data/lib/avmtrf1/issues.rb +7 -0
- data/lib/avmtrf1/jira/entities/issue.rb +30 -0
- data/lib/avmtrf1/jira/entities.rb +9 -0
- data/lib/avmtrf1/jira/instance.rb +28 -0
- data/lib/avmtrf1/jira.rb +8 -0
- data/lib/avmtrf1/node_js/docker_image.rb +14 -0
- data/lib/avmtrf1/node_js.rb +9 -0
- data/lib/avmtrf1/openvpn/config/builder.rb +59 -0
- data/lib/avmtrf1/openvpn/config/parser/builder.rb +62 -0
- data/lib/avmtrf1/openvpn/config/parser/line.rb +47 -0
- data/lib/avmtrf1/openvpn/config/parser/simple.rb +27 -0
- data/lib/avmtrf1/openvpn/config/parser/tag.rb +39 -0
- data/lib/avmtrf1/openvpn/config/parser.rb +20 -0
- data/lib/avmtrf1/oracle/connection/base.rb +66 -0
- data/lib/avmtrf1/oracle/connection/string_builder.rb +44 -0
- data/lib/avmtrf1/oracle/connection.rb +12 -0
- data/lib/avmtrf1/oracle/object/base.rb +39 -0
- data/lib/avmtrf1/oracle/object/table.rb +15 -0
- data/lib/avmtrf1/oracle/object/user.rb +15 -0
- data/lib/avmtrf1/oracle/object/view.rb +15 -0
- data/lib/avmtrf1/oracle/object.rb +25 -0
- data/lib/avmtrf1/oracle/objects/relation.rb +23 -0
- data/lib/avmtrf1/oracle/objects/sql_builder.rb +64 -0
- data/lib/avmtrf1/oracle/objects.rb +53 -0
- data/lib/avmtrf1/oracle/oci8.rb +29 -0
- data/lib/avmtrf1/oracle.rb +10 -0
- data/lib/avmtrf1/patches/avm/git/issue/complete.rb +50 -0
- data/lib/avmtrf1/patches/avm/git/issue.rb +4 -0
- data/lib/avmtrf1/patches/avm/git/launcher/base.rb +46 -0
- data/lib/avmtrf1/patches/avm/git/launcher.rb +4 -0
- data/lib/avmtrf1/patches/avm/git.rb +4 -0
- data/lib/avmtrf1/patches/avm.rb +4 -0
- data/lib/avmtrf1/patches/inifile.rb +13 -0
- data/lib/avmtrf1/patches.rb +4 -0
- data/lib/avmtrf1/php/docker_images/base.rb +49 -0
- data/lib/avmtrf1/php/docker_images/factory.rb +37 -0
- data/lib/avmtrf1/php/docker_images/v5.rb +47 -0
- data/lib/avmtrf1/php/docker_images/v7.rb +27 -0
- data/lib/avmtrf1/php/docker_images/v7_v4.rb +30 -0
- data/lib/avmtrf1/php/docker_images/v8.rb +19 -0
- data/lib/avmtrf1/php/docker_images.rb +11 -0
- data/lib/avmtrf1/php.rb +9 -0
- data/lib/avmtrf1/red/client/authorization.xml.erb +4 -0
- data/lib/avmtrf1/red/client.rb +38 -0
- data/lib/avmtrf1/red/helper.rb +35 -0
- data/lib/avmtrf1/red/profile/put_file.xml.erb +19 -0
- data/lib/avmtrf1/red/profile.rb +58 -0
- data/lib/avmtrf1/red/server.rb +33 -0
- data/lib/avmtrf1/red.rb +5 -0
- data/lib/avmtrf1/redmine/entities/issue.rb +29 -0
- data/lib/avmtrf1/redmine/entities/issue_status.rb +23 -0
- data/lib/avmtrf1/redmine/entities.rb +10 -0
- data/lib/avmtrf1/redmine/instance.rb +41 -0
- data/lib/avmtrf1/redmine.rb +7 -0
- data/lib/avmtrf1/rest_provider/entity.rb +18 -0
- data/lib/avmtrf1/rest_provider/instance/issues.rb +30 -0
- data/lib/avmtrf1/rest_provider/instance.rb +30 -0
- data/lib/avmtrf1/rest_provider/request.rb +44 -0
- data/lib/avmtrf1/rest_provider/response.rb +73 -0
- data/lib/avmtrf1/rest_provider.rb +7 -0
- data/lib/avmtrf1/result.rb +44 -0
- data/lib/avmtrf1/ruby.rb +9 -0
- data/lib/avmtrf1/tools/application.rb +13 -0
- data/lib/avmtrf1/tools/core_ext.rb +4 -0
- data/lib/avmtrf1/tools/msgraph/api/entity.rb +35 -0
- data/lib/avmtrf1/tools/msgraph/api/member.rb +31 -0
- data/lib/avmtrf1/tools/msgraph/api/root.rb +27 -0
- data/lib/avmtrf1/tools/msgraph/api/team/member_add.rb +36 -0
- data/lib/avmtrf1/tools/msgraph/api/team.rb +40 -0
- data/lib/avmtrf1/tools/msgraph/api.rb +55 -0
- data/lib/avmtrf1/tools/msgraph/error.rb +31 -0
- data/lib/avmtrf1/tools/msgraph/request_mixin.rb +18 -0
- data/lib/avmtrf1/tools/msgraph/response_mixin.rb +23 -0
- data/lib/avmtrf1/tools/msgraph/token_retrieve.rb +42 -0
- data/lib/avmtrf1/tools/msgraph.rb +11 -0
- data/lib/avmtrf1/tools/rubygems/dependency.rb +20 -0
- data/lib/avmtrf1/tools/rubygems/not_found_error.rb +17 -0
- data/lib/avmtrf1/tools/rubygems.rb +11 -0
- data/lib/avmtrf1/tools/runner/check_point/login.rb +33 -0
- data/lib/avmtrf1/tools/runner/check_point.rb +17 -0
- data/lib/avmtrf1/tools/runner/esosti/changed.rb +39 -0
- data/lib/avmtrf1/tools/runner/esosti/fetch.rb +39 -0
- data/lib/avmtrf1/tools/runner/esosti/request.rb +76 -0
- data/lib/avmtrf1/tools/runner/esosti.rb +27 -0
- data/lib/avmtrf1/tools/runner/forponto/espelho.rb +47 -0
- data/lib/avmtrf1/tools/runner/forponto/marcacoes.rb +32 -0
- data/lib/avmtrf1/tools/runner/forponto/resumos.rb +87 -0
- data/lib/avmtrf1/tools/runner/forponto/saldo.rb +91 -0
- data/lib/avmtrf1/tools/runner/forponto.rb +70 -0
- data/lib/avmtrf1/tools/runner/git/gitlab/commit_link.rb +81 -0
- data/lib/avmtrf1/tools/runner/git/gitlab.rb +20 -0
- data/lib/avmtrf1/tools/runner/git/issues_check.rb +59 -0
- data/lib/avmtrf1/tools/runner/git/push_large.rb +46 -0
- data/lib/avmtrf1/tools/runner/git.rb +14 -0
- data/lib/avmtrf1/tools/runner/inventario_sistemas.rb +71 -0
- data/lib/avmtrf1/tools/runner/msgraph/joined_teams.rb +39 -0
- data/lib/avmtrf1/tools/runner/msgraph/request.rb +45 -0
- data/lib/avmtrf1/tools/runner/msgraph/team/member/add.rb +48 -0
- data/lib/avmtrf1/tools/runner/msgraph/team/member.rb +25 -0
- data/lib/avmtrf1/tools/runner/msgraph/team/members.rb +38 -0
- data/lib/avmtrf1/tools/runner/msgraph/team.rb +27 -0
- data/lib/avmtrf1/tools/runner/msgraph/token.rb +31 -0
- data/lib/avmtrf1/tools/runner/msgraph.rb +43 -0
- data/lib/avmtrf1/tools/runner/node_js/docker.rb +15 -0
- data/lib/avmtrf1/tools/runner/node_js.rb +18 -0
- data/lib/avmtrf1/tools/runner/openvpn.rb +91 -0
- data/lib/avmtrf1/tools/runner/oracle/query.rb +71 -0
- data/lib/avmtrf1/tools/runner/oracle/source_get.rb +51 -0
- data/lib/avmtrf1/tools/runner/oracle/user_clear.rb +59 -0
- data/lib/avmtrf1/tools/runner/oracle.rb +37 -0
- data/lib/avmtrf1/tools/runner/php/docker.rb +20 -0
- data/lib/avmtrf1/tools/runner/php.rb +18 -0
- data/lib/avmtrf1/tools/runner/red.rb +83 -0
- data/lib/avmtrf1/tools/runner/source.rb +14 -0
- data/lib/avmtrf1/tools/runner.rb +43 -0
- data/lib/avmtrf1/tools.rb +4 -0
- data/lib/pd1_tools/version.rb +5 -0
- data/lib/pd1_tools.rb +7 -0
- data/template/avmtrf1/node_js/docker_image/Dockerfile.template +25 -0
- data/template/avmtrf1/node_js/docker_image/auxiliary/config_banner.sh +15 -0
- data/template/avmtrf1/node_js/docker_image/auxiliary/init.sh +18 -0
- data/template/avmtrf1/node_js/docker_image/auxiliary/lib.sh +30 -0
- data/template/avmtrf1/node_js/docker_image/auxiliary/ng_serve.sh +16 -0
- data/template/avmtrf1/node_js/docker_image/auxiliary/npm_install.sh +21 -0
- data/template/avmtrf1/node_js/docker_image/auxiliary/start.sh +17 -0
- data/template/avmtrf1/php/docker_images/base/Dockerfile.template +104 -0
- data/template/avmtrf1/php/docker_images/base/aux/apache_foreground.sh +16 -0
- data/template/avmtrf1/php/docker_images/base/aux/apache_user.sh +54 -0
- data/template/avmtrf1/php/docker_images/base/aux/app_user_run.sh +17 -0
- data/template/avmtrf1/php/docker_images/base/aux/config_banner.sh +20 -0
- data/template/avmtrf1/php/docker_images/base/aux/init.sh +39 -0
- data/template/avmtrf1/php/docker_images/base/aux/laravel.sh +58 -0
- data/template/avmtrf1/php/docker_images/base/aux/lib.sh +70 -0
- data/template/avmtrf1/php/docker_images/base/aux/pear.sh +35 -0
- data/template/avmtrf1/php/docker_images/base/aux/php_composer.sh +31 -0
- data/template/avmtrf1/php/docker_images/base/aux/php_values.sh +41 -0
- data/template/avmtrf1/php/docker_images/base/aux/setup_apache_site.sh +16 -0
- data/template/avmtrf1/php/docker_images/base/aux/start.sh +26 -0
- data/template/avmtrf1/php/docker_images/base/aux/templates/apache_site.conf +12 -0
- data/template/avmtrf1/tools/msgraph/token_retrieve/python_retriever.py +85 -0
- metadata +460 -0
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avmtrf1/redmine/entities/issue'
|
4
|
+
require 'avmtrf1/redmine/entities/issue_status'
|
5
|
+
require 'avmtrf1/rest_provider/instance'
|
6
|
+
|
7
|
+
module Avmtrf1
|
8
|
+
module Redmine
|
9
|
+
class Instance < ::Avmtrf1::RestProvider::Instance
|
10
|
+
ISSUE_ID_PATTERN = /\Aredmine_(\d+)\z/i.freeze
|
11
|
+
|
12
|
+
class << self
|
13
|
+
def parse_issue_id(issue_id)
|
14
|
+
m = ISSUE_ID_PATTERN.match(issue_id)
|
15
|
+
m ? ::OpenStruct.new(provider_issue_id: m[1]) : nil # rubocop:disable Style/OpenStructUse
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def build_service_url(service_url_suffix)
|
20
|
+
"#{root_url}#{service_url_suffix}.json"
|
21
|
+
end
|
22
|
+
|
23
|
+
def issue_get_url_suffix(provider_issue_id)
|
24
|
+
"/issues/#{provider_issue_id}"
|
25
|
+
end
|
26
|
+
|
27
|
+
def issue_status(issue_status_id)
|
28
|
+
issue_statuses.find { |issue_status| issue_status.id == issue_status_id }
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def issue_statuses
|
34
|
+
request_json('/issue_statuses').response.body_data_or_raise.fetch('issue_statuses')
|
35
|
+
.map do |data|
|
36
|
+
::Avmtrf1::Redmine::Entities::IssueStatus.new(self, data)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/simple_cache'
|
4
|
+
|
5
|
+
module Avmtrf1
|
6
|
+
module RestProvider
|
7
|
+
class Entity
|
8
|
+
include ::EacRubyUtils::SimpleCache
|
9
|
+
|
10
|
+
attr_reader :instance, :data
|
11
|
+
|
12
|
+
def initialize(instance, data)
|
13
|
+
@instance = instance
|
14
|
+
@data = data
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Avmtrf1
|
4
|
+
module RestProvider
|
5
|
+
class Instance
|
6
|
+
module Issues
|
7
|
+
def find_issue(global_issue_id)
|
8
|
+
parsed = self.class.parse_issue_id(global_issue_id)
|
9
|
+
parsed.present? ? issue(parsed.provider_issue_id) : nil
|
10
|
+
end
|
11
|
+
|
12
|
+
def issue(provider_issue_id)
|
13
|
+
issue_request(provider_issue_id).response.body_data_or_raise
|
14
|
+
end
|
15
|
+
|
16
|
+
# @return [Avmtrf1::RestProvider::Request]
|
17
|
+
def issue_request(provider_issue_id)
|
18
|
+
request_json(issue_get_url_suffix(provider_issue_id)) do |data|
|
19
|
+
data = issue_class.parse_data(data) if issue_class.respond_to?(:parse_data)
|
20
|
+
data.present? ? issue_class.new(self, data) : nil
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def issue_class
|
25
|
+
"#{self.class.name.deconstantize}::Entities::Issue".constantize
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avmtrf1/rest_provider/request'
|
4
|
+
require 'curb'
|
5
|
+
require 'eac_ruby_utils/core_ext'
|
6
|
+
|
7
|
+
module Avmtrf1
|
8
|
+
module RestProvider
|
9
|
+
# Abstract methods
|
10
|
+
# * parse_issue_id(global_issue_id)
|
11
|
+
# * self.build_service_url(service_url_suffix)
|
12
|
+
# * self.issue_get_url_suffix(provider_issue_id)
|
13
|
+
class Instance
|
14
|
+
require_sub __FILE__, include_modules: true
|
15
|
+
common_constructor :root_url, :username, :password
|
16
|
+
|
17
|
+
def request(service_url_suffix, headers = {}, &body_data_proc)
|
18
|
+
r = Avmtrf1::RestProvider::Request.new(build_service_url(service_url_suffix),
|
19
|
+
body_data_proc)
|
20
|
+
headers.each { |name, value| r.header(name, value) }
|
21
|
+
r.autenticate(username, password)
|
22
|
+
r
|
23
|
+
end
|
24
|
+
|
25
|
+
def request_json(service_url_suffix, headers = {}, &body_data_proc)
|
26
|
+
request(service_url_suffix, headers.merge('Accept' => 'application/json'), &body_data_proc)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avmtrf1/rest_provider/response'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
require 'ostruct'
|
6
|
+
|
7
|
+
module Avmtrf1
|
8
|
+
module RestProvider
|
9
|
+
class Request
|
10
|
+
common_constructor :url, :body_data_proc, default: [nil]
|
11
|
+
|
12
|
+
def autenticate(username, password)
|
13
|
+
self.auth = ::OpenStruct.new(username: username, password: password) # rubocop:disable Style/OpenStructUse
|
14
|
+
end
|
15
|
+
|
16
|
+
def header(name, value)
|
17
|
+
headers[name.to_s] = value
|
18
|
+
end
|
19
|
+
|
20
|
+
def response
|
21
|
+
::Avmtrf1::RestProvider::Response.new(build_curl, body_data_proc)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
attr_accessor :auth
|
27
|
+
|
28
|
+
def build_curl
|
29
|
+
r = ::Curl::Easy.new(url)
|
30
|
+
auth.if_present do |a|
|
31
|
+
r.http_auth_types = :basic
|
32
|
+
r.username = a.username
|
33
|
+
r.password = a.password
|
34
|
+
end
|
35
|
+
r.headers.merge!(headers)
|
36
|
+
r
|
37
|
+
end
|
38
|
+
|
39
|
+
def headers
|
40
|
+
@headers ||= {}
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support/core_ext/hash/conversions'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
require 'json'
|
6
|
+
|
7
|
+
module Avmtrf1
|
8
|
+
module RestProvider
|
9
|
+
class Response < ::StandardError
|
10
|
+
common_constructor :curl, :body_data_proc
|
11
|
+
|
12
|
+
def body_data
|
13
|
+
r = performed_curl.headers['Accept'].if_present(body_str) do |v|
|
14
|
+
send("body_data_from_#{v.parameterize.underscore}")
|
15
|
+
end
|
16
|
+
r = body_data_proc.call(r) if body_data_proc.present?
|
17
|
+
r
|
18
|
+
end
|
19
|
+
|
20
|
+
def body_data_or_raise
|
21
|
+
raise_unless_200
|
22
|
+
|
23
|
+
body_data
|
24
|
+
end
|
25
|
+
|
26
|
+
delegate :body_str, to: :performed_curl
|
27
|
+
|
28
|
+
def body_str_or_raise
|
29
|
+
raise_unless_200
|
30
|
+
|
31
|
+
body_str
|
32
|
+
end
|
33
|
+
|
34
|
+
def raise_unless_200 # rubocop:disable Naming/VariableNumber
|
35
|
+
return nil if status == 200
|
36
|
+
|
37
|
+
raise self
|
38
|
+
end
|
39
|
+
|
40
|
+
def status
|
41
|
+
performed_curl.status.to_i
|
42
|
+
end
|
43
|
+
|
44
|
+
delegate :url, to: :curl
|
45
|
+
|
46
|
+
def to_s
|
47
|
+
"URL: #{url}\nStatus: #{status}\nBody:\n\n#{body_str}"
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def body_data_from_application_json
|
53
|
+
::JSON.parse(body_str)
|
54
|
+
end
|
55
|
+
|
56
|
+
def body_data_from_application_xml
|
57
|
+
Hash.from_xml(body_str)
|
58
|
+
end
|
59
|
+
|
60
|
+
def perform
|
61
|
+
@perform ||= begin
|
62
|
+
curl.perform || raise("CURL perform failed for #{url}")
|
63
|
+
true
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def performed_curl
|
68
|
+
perform
|
69
|
+
curl
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'colorize'
|
4
|
+
require 'eac_ruby_utils/listable'
|
5
|
+
|
6
|
+
module Avmtrf1
|
7
|
+
class Result
|
8
|
+
include ::EacRubyUtils::Listable
|
9
|
+
|
10
|
+
lists.add_string :type, :success, :error, :neutral
|
11
|
+
|
12
|
+
lists.type.values.each do |type| # rubocop:disable Style/HashEachMethods
|
13
|
+
class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1 # rubocop:disable Style/DocumentDynamicEvalDefinition
|
14
|
+
def self.#{type}(output)
|
15
|
+
new(TYPE_#{type.upcase}, output)
|
16
|
+
end
|
17
|
+
RUBY_EVAL
|
18
|
+
end
|
19
|
+
|
20
|
+
TYPE_SUCCESS_COLOR = 'green'
|
21
|
+
TYPE_ERROR_COLOR = 'red'
|
22
|
+
TYPE_NEUTRAL_COLOR = 'white'
|
23
|
+
|
24
|
+
attr_reader :type, :output
|
25
|
+
|
26
|
+
def initialize(type, output)
|
27
|
+
validate_type(type)
|
28
|
+
@type = type
|
29
|
+
@output = output
|
30
|
+
end
|
31
|
+
|
32
|
+
def label
|
33
|
+
output.send(self.class.const_get("type_#{type}_color".upcase))
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def validate_type(type)
|
39
|
+
return if self.class.lists.type.values.include?(type)
|
40
|
+
|
41
|
+
raise "Tipo desconhecido: \"#{type}\" (Válido: #{self.class.lists.type.values.join(', ')})"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/avmtrf1/ruby.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_base0/application'
|
4
|
+
|
5
|
+
module Avmtrf1
|
6
|
+
module Tools
|
7
|
+
class << self
|
8
|
+
def application
|
9
|
+
@application ||= ::EacRubyBase0::Application.new(::File.expand_path('../../..', __dir__))
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avmtrf1/tools/msgraph/request_mixin'
|
4
|
+
require 'eac_rest/entity'
|
5
|
+
require 'eac_ruby_utils/core_ext'
|
6
|
+
|
7
|
+
module Avmtrf1
|
8
|
+
module Tools
|
9
|
+
module Msgraph
|
10
|
+
class Api < ::EacRest::Api
|
11
|
+
class Entity < ::EacRest::Entity
|
12
|
+
def request_data(url_suffix, &block)
|
13
|
+
req = request_data_request(url_suffix, &block)
|
14
|
+
req.response.body_data_or_raise
|
15
|
+
rescue ::Avmtrf1::Tools::Msgraph::Error => e
|
16
|
+
raise e unless e.invalid_token?
|
17
|
+
|
18
|
+
api.clear_token_info
|
19
|
+
req.response.body_data_or_raise
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
# @return [EacRest::Request]
|
25
|
+
def request_data_request(url_suffix, &block)
|
26
|
+
req = api.request(url_suffix)
|
27
|
+
req = block.call(req) if block
|
28
|
+
req.singleton_class.prepend(::Avmtrf1::Tools::Msgraph::RequestMixin)
|
29
|
+
req
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avmtrf1/tools/msgraph/api/entity'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
|
6
|
+
module Avmtrf1
|
7
|
+
module Tools
|
8
|
+
module Msgraph
|
9
|
+
class Api < ::EacRest::Api
|
10
|
+
class Member < ::Avmtrf1::Tools::Msgraph::Api::Entity
|
11
|
+
%w[displayName email roles tenantId userId visibleHistoryStartDateTime]
|
12
|
+
.each do |key|
|
13
|
+
define_method key.underscore do
|
14
|
+
data.fetch(key)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# @return [String]
|
19
|
+
def id_from_data
|
20
|
+
data.fetch('id')
|
21
|
+
end
|
22
|
+
|
23
|
+
# @return [String]
|
24
|
+
def type
|
25
|
+
data.fetch('@odata.type')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avmtrf1/tools/msgraph/api/entity'
|
4
|
+
require 'avmtrf1/tools/msgraph/api/team'
|
5
|
+
require 'eac_ruby_utils/core_ext'
|
6
|
+
|
7
|
+
module Avmtrf1
|
8
|
+
module Tools
|
9
|
+
module Msgraph
|
10
|
+
class Api < ::EacRest::Api
|
11
|
+
class Root < ::Avmtrf1::Tools::Msgraph::Api::Entity
|
12
|
+
# @return [Array<Avmtrf1::Tools::Msgraph::Api::Group>]
|
13
|
+
def joined_teams
|
14
|
+
request_data('/me/joinedTeams').map do |team_data|
|
15
|
+
child_entity(::Avmtrf1::Tools::Msgraph::Api::Team, team_data)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# @return [Avmtrf1::Tools::Msgraph::Api::Team]
|
20
|
+
def team(team_id)
|
21
|
+
child_entity(::Avmtrf1::Tools::Msgraph::Api::Team, team_id)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avmtrf1/tools/msgraph/api/entity'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
|
6
|
+
module Avmtrf1
|
7
|
+
module Tools
|
8
|
+
module Msgraph
|
9
|
+
class Api < ::EacRest::Api
|
10
|
+
class Team < ::Avmtrf1::Tools::Msgraph::Api::Entity
|
11
|
+
class MemberAdd
|
12
|
+
acts_as_instance_method
|
13
|
+
|
14
|
+
common_constructor :team, :user_id
|
15
|
+
|
16
|
+
# @return [Hash]
|
17
|
+
def result
|
18
|
+
team.members_request do |req|
|
19
|
+
req.verb(:post).header('Content-type', 'application/json')
|
20
|
+
.body_data(body_hash.to_json)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# @return [Hash]
|
25
|
+
def body_hash
|
26
|
+
{
|
27
|
+
'@odata.type' => '#microsoft.graph.aadUserConversationMember',
|
28
|
+
'user@odata.bind' => "https://graph.microsoft.com/v1.0/users('#{user_id}')"
|
29
|
+
}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avmtrf1/tools/msgraph/api/entity'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
|
6
|
+
module Avmtrf1
|
7
|
+
module Tools
|
8
|
+
module Msgraph
|
9
|
+
class Api < ::EacRest::Api
|
10
|
+
class Team < ::Avmtrf1::Tools::Msgraph::Api::Entity
|
11
|
+
%w[classification createdDateTime description discoverySettings displayName funSettings
|
12
|
+
guestSettings internalId isArchived isMembershipLimitedToOwners memberSettings
|
13
|
+
messagingSettings specialization summary tenantId visibility webUrl].each do |key|
|
14
|
+
define_method key.underscore do
|
15
|
+
data.fetch(key)
|
16
|
+
end
|
17
|
+
|
18
|
+
# @return [String]
|
19
|
+
def id_from_data
|
20
|
+
data.fetch('id')
|
21
|
+
end
|
22
|
+
|
23
|
+
def members
|
24
|
+
members_request.map do |member_data|
|
25
|
+
child_entity(::Avmtrf1::Tools::Msgraph::Api::Member, member_data)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [EacRest::Request]
|
30
|
+
def members_request(&block)
|
31
|
+
request_data("/teams/#{id}/members", &block)
|
32
|
+
end
|
33
|
+
|
34
|
+
require_sub __FILE__, require_mode: :kernel
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_rest/api'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
|
6
|
+
module Avmtrf1
|
7
|
+
module Tools
|
8
|
+
module Msgraph
|
9
|
+
class Api < ::EacRest::Api
|
10
|
+
API_ROOT_URL = 'https://graph.microsoft.com/v1.0'
|
11
|
+
|
12
|
+
enable_simple_cache
|
13
|
+
common_constructor :client_id, super_args: -> { [API_ROOT_URL] }
|
14
|
+
|
15
|
+
# @return [String]
|
16
|
+
def access_token
|
17
|
+
token_info.fetch(:token).fetch(:accessToken)
|
18
|
+
end
|
19
|
+
|
20
|
+
# @return [void]
|
21
|
+
def clear_token_info
|
22
|
+
token_info_cache.clear
|
23
|
+
reset_cache(:token_info)
|
24
|
+
end
|
25
|
+
|
26
|
+
# @return [EacRest::Request]
|
27
|
+
def request(service_url_suffix, headers = {}, &body_data_proc)
|
28
|
+
super
|
29
|
+
.header('Authorization', "Bearer #{access_token}")
|
30
|
+
end
|
31
|
+
|
32
|
+
def fs_object_id
|
33
|
+
client_id.to_s.variableize
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
# @return [EacFs::StorageTree]
|
39
|
+
def token_info_cache
|
40
|
+
fs_cache.child('token')
|
41
|
+
end
|
42
|
+
|
43
|
+
def token_info_uncached
|
44
|
+
token_info_cache.read_or_store_yaml { new_token_info }
|
45
|
+
end
|
46
|
+
|
47
|
+
def new_token_info
|
48
|
+
::Avmtrf1::Tools::Msgraph::TokenRetrieve.new(client_id).result
|
49
|
+
end
|
50
|
+
|
51
|
+
require_sub __FILE__
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_rest/error'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
|
6
|
+
module Avmtrf1
|
7
|
+
module Tools
|
8
|
+
module Msgraph
|
9
|
+
class Error < ::EacRest::Error
|
10
|
+
INVALID_TOKEN_CODE = 'InvalidAuthenticationToken'
|
11
|
+
|
12
|
+
attr_reader :data
|
13
|
+
|
14
|
+
def initialize(data)
|
15
|
+
@data = data
|
16
|
+
super(data.pretty_inspect)
|
17
|
+
end
|
18
|
+
|
19
|
+
# @return [String]
|
20
|
+
def code
|
21
|
+
data.fetch('code')
|
22
|
+
end
|
23
|
+
|
24
|
+
# @return [Boolean]
|
25
|
+
def invalid_token?
|
26
|
+
code == INVALID_TOKEN_CODE
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avmtrf1/tools/msgraph/response_mixin'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
|
6
|
+
module Avmtrf1
|
7
|
+
module Tools
|
8
|
+
module Msgraph
|
9
|
+
module RequestMixin
|
10
|
+
def response
|
11
|
+
r = super
|
12
|
+
r.singleton_class.prepend(::Avmtrf1::Tools::Msgraph::ResponseMixin)
|
13
|
+
r
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_rest/response'
|
4
|
+
require 'avmtrf1/tools/msgraph/error'
|
5
|
+
require 'eac_ruby_utils/core_ext'
|
6
|
+
|
7
|
+
module Avmtrf1
|
8
|
+
module Tools
|
9
|
+
module Msgraph
|
10
|
+
module ResponseMixin
|
11
|
+
ERROR_KEY = 'error'
|
12
|
+
VALUE_KEY = 'value'
|
13
|
+
|
14
|
+
def body_data_or_raise
|
15
|
+
r = super
|
16
|
+
r.is_a?(::Hash) && r.key?(VALUE_KEY) ? r.fetch(VALUE_KEY) : r
|
17
|
+
rescue ::EacRest::Response => e
|
18
|
+
raise ::Avmtrf1::Tools::Msgraph::Error, e.body_data.fetch(ERROR_KEY)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_rest/api'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
require 'eac_ruby_utils/fs/temp'
|
6
|
+
require 'eac_templates/sources/from_all_gems'
|
7
|
+
|
8
|
+
module Avmtrf1
|
9
|
+
module Tools
|
10
|
+
module Msgraph
|
11
|
+
class TokenRetrieve
|
12
|
+
enable_simple_cache
|
13
|
+
common_constructor :client_id
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def python_retrieve_command(file)
|
18
|
+
::EacRubyUtils::Envs.local.command(python_retrieve_program_path, client_id, file)
|
19
|
+
end
|
20
|
+
|
21
|
+
# @return [Hash]
|
22
|
+
def result_uncached
|
23
|
+
::EacRubyUtils::Yaml.load(result_string)
|
24
|
+
end
|
25
|
+
|
26
|
+
# @return [String]
|
27
|
+
def result_string
|
28
|
+
::EacRubyUtils::Fs::Temp.on_file do |file|
|
29
|
+
raise result.pretty_inspect.to_s unless python_retrieve_command(file.to_path)
|
30
|
+
.system
|
31
|
+
|
32
|
+
file.read
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def python_retrieve_program_path
|
37
|
+
template.child('python_retriever.py').path
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|