pg_rails 7.6.28 → 7.6.29
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/pg_engine/app/controllers/pg_engine/health_controller.rb +15 -33
- data/pg_engine/lib/pg_engine/utils/ssl_verifier.rb +65 -0
- data/pg_engine/lib/pg_engine.rb +1 -0
- data/pg_engine/spec/lib/pg_engine/utils/ssl_verifier_spec.rb +18 -0
- data/pg_rails/lib/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1fcc25eb9f5bfd935e0f470855b7ad4ac689fc5142a31ff4ef862daafc26a289
|
4
|
+
data.tar.gz: 82969f474062c70b3ba94bf11313ca0606f3f00f1e0106af7525ab39b7c48d7b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 725997c33ad64427b695321bc271c3c85f74e838238c0d250c0078ef2b3a0c8e69384fe47e92e720af2d2b62bf38983251b05a83e16c9200d63d2e8dd0609f2a
|
7
|
+
data.tar.gz: ae85d535f09c48c99c8311d19218f897c04ee6f8178ef3741bb23652923dfa2d4590801d7de858a2afeba0c8def2a1f7cb9b4f116cef59be69b25835d2c824ab
|
@@ -10,9 +10,7 @@ module PgEngine
|
|
10
10
|
check_redis
|
11
11
|
check_postgres
|
12
12
|
check_websocket
|
13
|
-
|
14
|
-
check_ssl(url)
|
15
|
-
end
|
13
|
+
check_ssl
|
16
14
|
render_up
|
17
15
|
end
|
18
16
|
|
@@ -59,41 +57,25 @@ module PgEngine
|
|
59
57
|
end
|
60
58
|
# rubocop:enable Metrics/MethodLength
|
61
59
|
|
62
|
-
def check_ssl
|
63
|
-
|
64
|
-
http_session = Net::HTTP.new(uri.host, uri.port)
|
65
|
-
|
66
|
-
# Use SSL/TLS
|
67
|
-
http_session.use_ssl = true
|
60
|
+
def check_ssl
|
61
|
+
raise PgEngine::Error, 'no ssl log file' unless File.exist?(PgEngine::SslVerifier::OUTPUT_PATH)
|
68
62
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
http_session.start do |http|
|
75
|
-
http.request(request)
|
63
|
+
sites = JSON.parse(File.read(PgEngine::SslVerifier::OUTPUT_PATH))
|
64
|
+
PgEngine.config.health_ssl_urls.each do |url|
|
65
|
+
check_site_ssl(sites, url)
|
66
|
+
end
|
67
|
+
end
|
76
68
|
|
77
|
-
|
69
|
+
def check_site_ssl(sites, url)
|
70
|
+
raise PgEngine::Error, "SSL record not present: #{url}" if sites[url].blank?
|
78
71
|
|
79
|
-
|
80
|
-
|
72
|
+
if Time.zone.parse(sites[url]['verified_at']) < 2.days.ago
|
73
|
+
raise PgEngine::Error, "The SSL info is outdated: #{url}"
|
74
|
+
end
|
81
75
|
|
82
|
-
|
83
|
-
# puts "Certificate Subject: #{cert.subject}"
|
84
|
-
# puts "Certificate Issuer: #{cert.issuer}"
|
85
|
-
# puts "Certificate Valid From: #{cert.not_before}"
|
86
|
-
# puts "Certificate Valid Until: #{cert.not_after}"
|
76
|
+
return unless Time.zone.parse(sites[url]['expires_at']) < 7.days.from_now
|
87
77
|
|
88
|
-
|
89
|
-
raise PgEngine::Error, "#{url}: The SSL certificate is expired (or about to expire)."
|
90
|
-
end
|
91
|
-
end
|
92
|
-
rescue OpenSSL::SSL::SSLError => e
|
93
|
-
raise PgEngine::Error, "#{url}: SSL Error: #{e.message}"
|
94
|
-
rescue StandardError => e
|
95
|
-
raise PgEngine::Error, "#{url}: An error occurred: #{e.message}"
|
96
|
-
end
|
78
|
+
raise PgEngine::Error, "The SSL certificate is expired (or about to expire): #{url}"
|
97
79
|
end
|
98
80
|
|
99
81
|
def render_up
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# :nocov:
|
2
|
+
module PgEngine
|
3
|
+
class SslVerifier
|
4
|
+
OUTPUT_PATH = 'tmp/ssl_verifier.json'.freeze
|
5
|
+
|
6
|
+
def run
|
7
|
+
PgEngine.config.health_ssl_urls.each do |url|
|
8
|
+
check_ssl(url)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def check_ssl(url)
|
13
|
+
uri = URI.parse(url)
|
14
|
+
http_session = Net::HTTP.new(uri.host, uri.port)
|
15
|
+
|
16
|
+
# Use SSL/TLS
|
17
|
+
http_session.use_ssl = true
|
18
|
+
|
19
|
+
# Create a request
|
20
|
+
request = Net::HTTP::Get.new(uri.request_uri)
|
21
|
+
|
22
|
+
begin
|
23
|
+
# Start the HTTP session
|
24
|
+
http_session.start do |http|
|
25
|
+
http.request(request)
|
26
|
+
|
27
|
+
# Check the response code
|
28
|
+
|
29
|
+
# Get the SSL certificate
|
30
|
+
cert = http.peer_cert
|
31
|
+
|
32
|
+
raise PgEngine::Error, "#{url}: No SSL certificate found." unless cert
|
33
|
+
# puts "Certificate Subject: #{cert.subject}"
|
34
|
+
# puts "Certificate Issuer: #{cert.issuer}"
|
35
|
+
# puts "Certificate Valid From: #{cert.not_before}"
|
36
|
+
# puts "Certificate Valid Until: #{cert.not_after}"
|
37
|
+
|
38
|
+
if cert.not_after < 7.days.from_now
|
39
|
+
raise PgEngine::Error, "#{url}: The SSL certificate is expired (or about to expire)."
|
40
|
+
end
|
41
|
+
|
42
|
+
log_output(url, cert.not_after)
|
43
|
+
end
|
44
|
+
rescue OpenSSL::SSL::SSLError => e
|
45
|
+
raise PgEngine::Error, "#{url}: SSL Error: #{e.message}"
|
46
|
+
rescue StandardError => e
|
47
|
+
raise PgEngine::Error, "#{url}: An error occurred: #{e.message}"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def log_output(url, expires_at)
|
52
|
+
current_content =
|
53
|
+
if File.exist?(OUTPUT_PATH)
|
54
|
+
JSON.parse(File.read(OUTPUT_PATH))
|
55
|
+
else
|
56
|
+
{}
|
57
|
+
end
|
58
|
+
|
59
|
+
current_content[url] = { verified_at: Time.current, expires_at: }
|
60
|
+
|
61
|
+
File.write(OUTPUT_PATH, current_content.to_json)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
# :nocov:
|
data/pg_engine/lib/pg_engine.rb
CHANGED
@@ -11,6 +11,7 @@ require_relative 'pg_engine/email_observer'
|
|
11
11
|
require_relative 'pg_engine/mailgun/log_sync'
|
12
12
|
require_relative 'pg_engine/route_helpers'
|
13
13
|
require_relative 'pg_engine/utils/pg_logger'
|
14
|
+
require_relative 'pg_engine/utils/ssl_verifier'
|
14
15
|
require_relative 'pg_engine/utils/pdf_preview_generator'
|
15
16
|
|
16
17
|
require_relative '../app/helpers/pg_engine/print_helper'
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# require 'rails_helper'
|
2
|
+
#
|
3
|
+
# describe PgEngine::SslVerifier do
|
4
|
+
# describe 'check_ssl' do
|
5
|
+
# subject do
|
6
|
+
# described_class.new.check_ssl(url)
|
7
|
+
# end
|
8
|
+
#
|
9
|
+
# let(:url) { 'https://factura.bien.com.ar' }
|
10
|
+
# let(:output_file) { File.read(PgEngine::SslVerifier::OUTPUT_PATH) }
|
11
|
+
# let(:output_json) { JSON.parse(output_file) }
|
12
|
+
#
|
13
|
+
# it 'checks the SSL certificate and saves the file' do
|
14
|
+
# expect { subject }.not_to raise_error
|
15
|
+
# expect(output_json.keys).to include 'https://bien.com.ar'
|
16
|
+
# end
|
17
|
+
# end
|
18
|
+
# end
|
data/pg_rails/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.6.
|
4
|
+
version: 7.6.29
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martín Rosso
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-
|
11
|
+
date: 2025-02-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -893,6 +893,7 @@ files:
|
|
893
893
|
- pg_engine/lib/pg_engine/utils/pdf_preview_generator.rb
|
894
894
|
- pg_engine/lib/pg_engine/utils/pg_logger.rb
|
895
895
|
- pg_engine/lib/pg_engine/utils/resource_reports.rb
|
896
|
+
- pg_engine/lib/pg_engine/utils/ssl_verifier.rb
|
896
897
|
- pg_engine/lib/tasks/auto_anotar_modelos.rake
|
897
898
|
- pg_engine/spec/components/alert_component_spec.rb
|
898
899
|
- pg_engine/spec/components/internal_error_component_spec.rb
|
@@ -930,6 +931,7 @@ files:
|
|
930
931
|
- pg_engine/spec/lib/pg_engine/form_helper_spec.rb
|
931
932
|
- pg_engine/spec/lib/pg_engine/mailgun/log_sync_spec.rb
|
932
933
|
- pg_engine/spec/lib/pg_engine/utils/pg_engine/pg_logger_spec.rb
|
934
|
+
- pg_engine/spec/lib/pg_engine/utils/ssl_verifier_spec.rb
|
933
935
|
- pg_engine/spec/lib/pg_form_builder_spec.rb
|
934
936
|
- pg_engine/spec/mailers/pg_engine/base_mailer_spec.rb
|
935
937
|
- pg_engine/spec/mailers/previews/devise_preview.rb
|