gems-validator 0.3.1 → 0.4.2
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 +4 -4
- data/Gemfile +1 -0
- data/Gemfile.lock +24 -0
- data/README.md +25 -0
- data/lib/gems-validator/audit-service.rb +33 -0
- data/lib/gems-validator/format-error.rb +3 -1
- data/lib/gems-validator/gems-service.rb +21 -9
- data/lib/gems-validator/validate.rb +16 -8
- data/lib/gems-validator/version.rb +1 -1
- data/lib/gems-validator.rb +5 -2
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a76e6d3822ec786140734de928eaab7dca72945489b882590efcffc81047c4cd
|
4
|
+
data.tar.gz: 210e2e460dcd583a7cae39bf8ce83d9a5589ee1919351838c451ac32bb01df52
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 875c78fe6ea29105c351cd8403fe381dbe01e0b72bf07f53192c93f060e3be94c80702e45bd798fc5ff87881e20d714b9897ed702bceaf256856bcfff2561d04
|
7
|
+
data.tar.gz: 4adcc359c08e4356d94cd1c9051e9fccbd76b5015dd1f24262438fdba829df7caa5e05dcd90685240258b1df52726bca172485903a9b67d6a542c46647ae2f90
|
data/Gemfile
CHANGED
data/Gemfile.lock
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
gems-validator (0.4.1)
|
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 > 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,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module GemsValidator
|
2
4
|
class FormatError < Bundler::InstallError
|
3
5
|
def initialize(gem:, message:)
|
4
|
-
super("[
|
6
|
+
super("[GemsValidator::Error] - Não foi possível instalar a gem #{gem}. Motivo: #{message}")
|
5
7
|
end
|
6
8
|
end
|
7
9
|
end
|
@@ -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 =
|
6
|
+
@access_token = get_token
|
5
7
|
end
|
6
8
|
|
7
9
|
# Response:
|
8
10
|
# {
|
9
|
-
#
|
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
|
-
#
|
23
|
+
# pending_gems: {
|
22
24
|
# [name]: {
|
23
25
|
# requested_at: Date
|
24
26
|
# }
|
25
27
|
# }
|
26
28
|
# }
|
27
29
|
def get_gems()
|
28
|
-
|
29
|
-
JSON.parse(response.body)["data"]
|
30
|
+
JSON.parse(gems_formatted_request.body)["data"]
|
30
31
|
end
|
31
32
|
|
32
33
|
private
|
33
|
-
def
|
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"] =
|
39
|
-
|
50
|
+
request["Authorization"] = @access_token
|
51
|
+
http.request request
|
40
52
|
end
|
41
53
|
end
|
42
54
|
end
|
@@ -8,8 +8,8 @@ module GemsValidator
|
|
8
8
|
begin
|
9
9
|
is_blocked?
|
10
10
|
is_pending?
|
11
|
-
|
12
|
-
Bundler.ui.confirm "[
|
11
|
+
is_allowed?
|
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)
|
15
15
|
end
|
@@ -38,23 +38,31 @@ module GemsValidator
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
-
def
|
42
|
-
if gems_from_service["
|
43
|
-
|
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
|
50
|
-
if gems_from_service["
|
51
|
-
required_version = gems_from_service["
|
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
|
data/lib/gems-validator.rb
CHANGED
@@ -15,8 +15,11 @@ module GemsValidator
|
|
15
15
|
return if defined?(@registered) && @registered
|
16
16
|
@registered = true
|
17
17
|
|
18
|
-
|
19
|
-
|
18
|
+
GemsValidator::AuditService.new
|
19
|
+
|
20
|
+
Bundler::Plugin.add_hook('before-install') do |gem|
|
21
|
+
GemsValidator::Validate.exec(gem)
|
22
|
+
GemsValidator::AuditService.is_a_vulnerable_gem(gem.name)
|
20
23
|
end
|
21
24
|
end
|
22
25
|
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.
|
4
|
+
version: 0.4.2
|
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-
|
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
|
@@ -47,7 +50,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
47
50
|
- !ruby/object:Gem::Version
|
48
51
|
version: '0'
|
49
52
|
requirements: []
|
50
|
-
rubygems_version: 3.
|
53
|
+
rubygems_version: 3.3.7
|
51
54
|
signing_key:
|
52
55
|
specification_version: 4
|
53
56
|
summary: gems-validator
|