gems-validator 0.3.2 → 0.4.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5c72c2d22879cd9c8d66a2062c5ca188b1b47c92e7ec75fa8a3cc98c895b4f12
4
- data.tar.gz: ac70c06d03af86a323676b31fccac4d2046565209dfb285842299de9a23e96b2
3
+ metadata.gz: ab34a7d9ea4625c880476c97fd355b40d254f29ed6d9750db1f4564cd1ed8b8b
4
+ data.tar.gz: 53e50ad4df15efb914a787fb8307810918b112ff96986123c81b00cfbc7ce257
5
5
  SHA512:
6
- metadata.gz: fbc2ae946a37031e557ac9791b87ae04fc9cec6de319cac856e4fb63da0ab80906f9f31d8c74d21f1c9bd5e708a45b7a8485bef54486d7deab82b817f1cbb61c
7
- data.tar.gz: e97823d37609d686b94b37ca9ff8dadad5a59e014ef71d6281052e39df41d271166dd2f7e75fff64724664500e26cf562eb34f51ba5c01069c3f5b308a3a8ca4
6
+ metadata.gz: d724ced1423b2deb614f000997789efda0a2cfb7167b59e5fa74e0f22afd2826eff62e3822c7eaf61cc4b2e5ea04ffb95fd5e136b56f4b5ebcc97ffb970fc6aa
7
+ data.tar.gz: f8f354bfd8a7976258b878adec62ef7a4815b1ed50a5a052f52f679aae624cf66db04b89c26d374e4fcc685ccfbcdf76f23cbb96474ab3fe43eb42d5040ab7f2
data/Gemfile CHANGED
@@ -6,3 +6,4 @@ source "https://rubygems.org"
6
6
  gemspec
7
7
 
8
8
  gem "rake", "~> 13.0"
9
+ gem "bundler-audit"
data/Gemfile.lock ADDED
@@ -0,0 +1,24 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ gems-validator (0.4.3)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ bundler-audit (0.9.1)
10
+ bundler (>= 1.2.0, < 3)
11
+ thor (~> 1.0)
12
+ rake (13.0.6)
13
+ thor (1.2.1)
14
+
15
+ PLATFORMS
16
+ ruby
17
+
18
+ DEPENDENCIES
19
+ bundler-audit
20
+ gems-validator!
21
+ rake (~> 13.0)
22
+
23
+ BUNDLED WITH
24
+ 1.17.3
data/README.md ADDED
@@ -0,0 +1,25 @@
1
+ # Gems validator
2
+
3
+ Um plugin Bundle para validar gems homologadas nas aplicações do grupo EUAX.
4
+
5
+ ## 📦 **Instalação**
6
+
7
+ Execute `bundle plugin install gems-validator` para adicionar o plugin ao seu bundle.
8
+
9
+ ## 🤷‍♂️ **Como funciona?**
10
+
11
+ Após instalar o plugin ele irá rodar toda vez que `bundle install` for executado. O plugin utiliza da [API de gems homologadas](https://github.com/Artia/euax-gems)
12
+ para validar as gems de um produto, verificando se elas podem ou não serem instaladas. Ao detectar que uma gem não pode ser instalada o processo de instalação
13
+ é interrompido e uma mensagem de erro com o motivo da falha é apresentada no terminal.
14
+
15
+ ## 🤝 **Contribuindo**
16
+
17
+ Todo tipo de contribuição é muito bem vinda e apreciada!
18
+
19
+ - ⭐️ Dê uma estrela ao projeto
20
+ - 🐛 Encontre e reporte issues
21
+ - 📥 Envie PRs e ajude a resolver issues e adição de features
22
+
23
+ ---
24
+
25
+ Feito com ❤️ por **Henrique Schmeller**.
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GemsValidator
4
+ class AuditService
5
+ def initialize()
6
+ system 'bundler-audit check --format json --output bundler-audit.json'
7
+ @read_file = read_parsed_file
8
+ end
9
+
10
+ def is_a_vulnerable_gem?(gem_name)
11
+ gem_vulnerabilities = @read_file["results"].select { |item| item["gem"]["name"] == gem_name }
12
+ generate_messages(gem_vulnerabilities)
13
+ end
14
+
15
+ private
16
+ def generate_messages(gem_vulnerabilities)
17
+ if (gem_vulnerabilities.empty?)
18
+ return Bundler.ui.confirm "[GemsValidator::Success] - A gem não apresenta nenhum vulnerabilidade!"
19
+ end
20
+
21
+ Bundler.ui.warn "[GemsValidator::Error] - A gem #{gem_vulnerabilities[0]["gem"]["name"]} na versao #{gem_vulnerabilities[0]["gem"]["version"]} apresenta #{gem_vulnerabilities.size} vulnerabilidade#{gem_vulnerabilities.size ? "s" : ""}"
22
+
23
+ gem_vulnerabilities.map.with_index do |vulnerability, number|
24
+ Bundler.ui.error "#{number+1} -> #{vulnerability["advisory"]["title"]} \n Nivel: #{vulnerability["advisory"]["criticality"]} \n URL da issue: #{vulnerability["advisory"]["url"]}"
25
+ end
26
+ end
27
+
28
+ def read_parsed_file
29
+ file = File.read('bundler-audit.json')
30
+ parsed_file = JSON.parse(file)
31
+ end
32
+ end
33
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GemsValidator
2
4
  class FormatError < Bundler::InstallError
3
5
  def initialize(gem:, message:)
@@ -1,12 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GemsValidator
2
4
  class GemsService
3
5
  def initialize()
4
- @access_token = 'eG5hJT9SZUQyYXpyLUBUX2pqJVU0eiRmVjl5RisjdUV0WmY4LTRWanZ2Rz1VVyo3VHlYXndCbms4V3dkLU1MWA=='
6
+ @access_token = get_token
5
7
  end
6
8
 
7
9
  # Response:
8
10
  # {
9
- # available_gems: {
11
+ # allowed_gems: {
10
12
  # [name]: {
11
13
  # approved_at: Date,
12
14
  # version?: String
@@ -18,25 +20,35 @@ module GemsValidator
18
20
  # version?: String
19
21
  # }
20
22
  # },
21
- # gems_pending_approval: {
23
+ # pending_gems: {
22
24
  # [name]: {
23
25
  # requested_at: Date
24
26
  # }
25
27
  # }
26
28
  # }
27
29
  def get_gems()
28
- response = request
29
- JSON.parse(response.body)["data"]
30
+ JSON.parse(gems_formatted_request.body)["data"]
30
31
  end
31
32
 
32
33
  private
33
- def request
34
+ def get_token
35
+ uri = URI('http://ec2-54-173-249-114.compute-1.amazonaws.com:3333/sessions/token')
36
+ request = Net::HTTP::Post.new(uri)
37
+ request.body = { username: 'developers', password: 'devs@euax' }.to_json
38
+ request['Content-Type'] = 'application/json'
39
+
40
+ Net::HTTP.start(uri.host, uri.port) do |http|
41
+ response = http.request request
42
+ response.header['access_token']
43
+ end
44
+ end
45
+
46
+ def gems_formatted_request
34
47
  uri = URI('http://ec2-54-173-249-114.compute-1.amazonaws.com:3333/gems/formatted')
35
- # Net::HTTP.get_response(uri, { "Authorization" => "Bearer #{@access_token}" })
36
48
  Net::HTTP.start(uri.host, uri.port) do |http|
37
49
  request = Net::HTTP::Get.new uri
38
- request["Authorization"] = "Bearer #{@access_token}"
39
- response = http.request request
50
+ request["Authorization"] = @access_token
51
+ http.request request
40
52
  end
41
53
  end
42
54
  end
@@ -8,7 +8,7 @@ module GemsValidator
8
8
  begin
9
9
  is_blocked?
10
10
  is_pending?
11
- is_available?
11
+ is_allowed?
12
12
  Bundler.ui.confirm "[GemsValidator::Success] - A gem #{@gem.name} está homologada e pode ser instalada!"
13
13
  rescue => error
14
14
  raise GemsValidator::FormatError.new(gem: @gem.name, message: error.to_s)
@@ -38,23 +38,31 @@ module GemsValidator
38
38
  end
39
39
  end
40
40
 
41
- def is_available?
42
- if gems_from_service["available_gems"].keys.include?(@gem.name)
43
- is_version_available?
41
+ def is_allowed?
42
+ if gems_from_service["allowed_gems"].keys.include?(@gem.name)
43
+ is_version_allowed?
44
+ is_deprecated?
44
45
  else
45
46
  raise "Essa gem não foi homologada."
46
47
  end
47
48
  end
48
49
 
49
- def is_version_available?
50
- if gems_from_service["available_gems"][@gem.name]["version"]
51
- required_version = gems_from_service["available_gems"][@gem.name]["version"]
50
+ def is_version_allowed?
51
+ if gems_from_service["allowed_gems"][@gem.name]["version"]
52
+ required_version = gems_from_service["allowed_gems"][@gem.name]["version"]
52
53
  if @gem.version.to_s != required_version
53
54
  raise "Essa gem só pode ser instalada na versão #{@gem.version.to_s}."
54
55
  end
55
56
  end
56
57
  end
57
58
 
59
+ def is_deprecated?
60
+ if gems_from_service["allowed_gems"][@gem.name]["deprecated"]
61
+ message = gems_from_service["allowed_gems"][@gem.name]["deprecated_message"]
62
+ Bundler.ui.warn "[GemsValidator::Warn] - A gem #{@gem.name} está depreciada. Motivo: #{message}"
63
+ end
64
+ end
65
+
58
66
  def gems_service
59
67
  @gems_service ||= GemsValidator::GemsService.new()
60
68
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GemsValidator
4
- VERSION = "0.3.2"
4
+ VERSION = "0.4.3"
5
5
  end
@@ -4,10 +4,11 @@ require 'net/http'
4
4
  require 'uri'
5
5
  require 'json'
6
6
 
7
- require_relative "gems-validator/version"
8
- require_relative "gems-validator/validate"
7
+ require_relative "gems-validator/audit-service"
9
8
  require_relative "gems-validator/format-error"
10
9
  require_relative "gems-validator/gems-service"
10
+ require_relative "gems-validator/validate"
11
+ require_relative "gems-validator/version"
11
12
 
12
13
  module GemsValidator
13
14
  class << self
@@ -15,8 +16,11 @@ module GemsValidator
15
16
  return if defined?(@registered) && @registered
16
17
  @registered = true
17
18
 
18
- Bundler::Plugin.add_hook('before-install') do |dependencie|
19
- GemsValidator::Validate.exec(dependencie)
19
+ GemsValidator::AuditService.new
20
+
21
+ Bundler::Plugin.add_hook('before-install') do |gem|
22
+ GemsValidator::Validate.exec(gem)
23
+ GemsValidator::AuditService.is_a_vulnerable_gem(gem.name)
20
24
  end
21
25
  end
22
26
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gems-validator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - henriquesml
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-06-16 00:00:00.000000000 Z
11
+ date: 2022-06-24 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: gems-validator
14
14
  email:
@@ -20,10 +20,13 @@ files:
20
20
  - ".rspec"
21
21
  - Dockerfile
22
22
  - Gemfile
23
+ - Gemfile.lock
23
24
  - Makefile
25
+ - README.md
24
26
  - Rakefile
25
27
  - docker-compose.yml
26
28
  - lib/gems-validator.rb
29
+ - lib/gems-validator/audit-service.rb
27
30
  - lib/gems-validator/format-error.rb
28
31
  - lib/gems-validator/gems-service.rb
29
32
  - lib/gems-validator/validate.rb