net-knocker 0.0.1 → 0.0.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/.pryrc +2 -0
- data/.rubocop.yml +4 -1
- data/lib/net/knocker/env.rb +58 -0
- data/lib/net/knocker/peer.rb +30 -0
- data/lib/net/knocker/version.rb +1 -1
- data/lib/net/knocker.rb +13 -59
- 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: a9789879bc518f157cbecee0b2275e9740cb424bc0e4337b57183c299b8a6c82
|
4
|
+
data.tar.gz: 2817492fa9cadde9138836aa266dfae4120d26c6b45aa4a4a14fd99a84cd8ed3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f254f92c4758ac0b595244d4bb7aa9556a18fa0ffdedfa80273fe055b466cca7f862f2916601f9d8ac6d36d9576623abccb558147c590f339437b459b4189990
|
7
|
+
data.tar.gz: eff3af079d67b23c36b7d534d78c82c70863124804bb27582b2c913072a77d879b0cfc4ffa84ad766cb05b38d65965526d5ec62d9e379a852356229b148a50c1
|
data/.pryrc
CHANGED
data/.rubocop.yml
CHANGED
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Net
|
4
|
+
class Knocker
|
5
|
+
module Env
|
6
|
+
def env_secret
|
7
|
+
@env_secret ||= ENV.fetch('NET_KNOCKER_SECRET')
|
8
|
+
end
|
9
|
+
|
10
|
+
def http_client
|
11
|
+
@http_client ||= Net::HTTP.new(url.host, url.port).tap do |http|
|
12
|
+
http.use_ssl = true
|
13
|
+
http.cert = ssl_certificate
|
14
|
+
http.key = ssl_key
|
15
|
+
http.set_debug_output $stderr if ENV.key? 'NET_KNOCKER_HTTP_DEBUG'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def should_omit?
|
20
|
+
@should_omit ||= (%w[NET_KNOCKER_URL NET_KNOCKER_SECRET] - ENV.keys).any?
|
21
|
+
end
|
22
|
+
|
23
|
+
def ssl_key
|
24
|
+
@ssl_key ||= begin
|
25
|
+
key_class = case ssl_certificate.signature_algorithm
|
26
|
+
when /^ecdsa/
|
27
|
+
OpenSSL::PKey::EC
|
28
|
+
when /^rsa/
|
29
|
+
OpenSSL::PKey::RSA
|
30
|
+
when /^dsa/
|
31
|
+
OpenSSL::PKey::DSA
|
32
|
+
else
|
33
|
+
raise "Unknown key type: #{ssl_certificate.signature_algorithm}"
|
34
|
+
end
|
35
|
+
key_class.new(env_secret)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def ssl_certificate
|
40
|
+
@ssl_certificate ||= OpenSSL::X509::Certificate.new(env_secret)
|
41
|
+
end
|
42
|
+
|
43
|
+
def url
|
44
|
+
@url ||= URI.parse(ENV.fetch('NET_KNOCKER_URL')) unless should_omit?
|
45
|
+
end
|
46
|
+
|
47
|
+
def log
|
48
|
+
@log ||= if defined? logger
|
49
|
+
logger
|
50
|
+
elsif defined? Rails.logger
|
51
|
+
Rails.logger
|
52
|
+
else
|
53
|
+
::Logger.new($stderr)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Net
|
4
|
+
class Knocker
|
5
|
+
class Peer
|
6
|
+
def self.any?
|
7
|
+
return unless ENV
|
8
|
+
|
9
|
+
Dir['/proc/*/environ']
|
10
|
+
.select { |path| File.readable_real? path }
|
11
|
+
.grep_v(self_patterns)
|
12
|
+
.select do |path|
|
13
|
+
File.read(path)
|
14
|
+
.then do |content|
|
15
|
+
(env_var_patterns.any? { |pattern| content.include? pattern })
|
16
|
+
end
|
17
|
+
end
|
18
|
+
.any?
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.env_var_patterns
|
22
|
+
@env_var_patterns ||= %W[NET_KNOCKER_URL NET_KNOCKER_SECRET #{ENV['NET_KNOCKER_URL']}].freeze
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.self_patterns
|
26
|
+
@self_patterns ||= %r{proc/((?:thread-)?self|#{Process.pid})/environ}.freeze
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/net/knocker/version.rb
CHANGED
data/lib/net/knocker.rb
CHANGED
@@ -1,89 +1,43 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require_relative './knocker/version'
|
4
|
+
require_relative './knocker/env'
|
5
|
+
require_relative './knocker/peer'
|
3
6
|
require 'logger'
|
4
7
|
require 'net/https'
|
5
8
|
require 'uri'
|
6
9
|
|
7
10
|
module Net
|
8
11
|
class Knocker
|
12
|
+
include Knocker::Env
|
13
|
+
|
9
14
|
def self.check
|
10
15
|
new
|
11
16
|
end
|
12
17
|
|
13
|
-
def self.
|
14
|
-
new.
|
15
|
-
end
|
16
|
-
|
17
|
-
def checkin_uri
|
18
|
-
@checkin_uri ||= URI.parse(ENV.fetch('NET_KNOCKER_URL'))
|
19
|
-
end
|
20
|
-
|
21
|
-
def log
|
22
|
-
@log ||= if defined? logger
|
23
|
-
logger
|
24
|
-
elsif defined? Rails.logger
|
25
|
-
Rails.logger
|
26
|
-
else
|
27
|
-
::Logger.new($stderr)
|
28
|
-
end
|
18
|
+
def self.should_omit?
|
19
|
+
new.should_omit?
|
29
20
|
end
|
30
21
|
|
31
22
|
def in
|
32
|
-
|
33
|
-
|
34
|
-
check_connection 'PUT'
|
23
|
+
send_request 'PUT'
|
35
24
|
end
|
36
25
|
|
37
26
|
def out
|
38
|
-
return
|
27
|
+
return log.info("[#{self.class}:#{Process.pid}] omitting send request") if Peer.any?
|
39
28
|
|
40
|
-
|
41
|
-
end
|
42
|
-
|
43
|
-
def skip_checkin?
|
44
|
-
@skip_checkin ||= %w[NET_KNOCKER_URL NET_KNOCKER_SECRET].all? { |k| !(ENV.key? k) }
|
29
|
+
send_request 'DELETE'
|
45
30
|
end
|
46
31
|
|
47
32
|
private
|
48
33
|
|
49
|
-
def
|
34
|
+
def send_request(http_method)
|
35
|
+
return log.info("[#{self.class}:#{Process.pid}] omitting send request") if should_omit?
|
36
|
+
|
50
37
|
http_client.send_request(http_method, '/') do |response|
|
51
38
|
log.debug("[#{self.class}][#{__method__}] Public IP: #{response.body} ")
|
52
39
|
end
|
53
40
|
end
|
54
|
-
|
55
|
-
def env_secret
|
56
|
-
@env_secret ||= ENV.fetch('NET_KNOCKER_SECRET')
|
57
|
-
end
|
58
|
-
|
59
|
-
def http_client
|
60
|
-
@http_client ||= Net::HTTP.new(checkin_uri.host, checkin_uri.port).tap do |http|
|
61
|
-
http.use_ssl = true
|
62
|
-
http.cert = ssl_certificate
|
63
|
-
http.key = ssl_key
|
64
|
-
http.set_debug_output $stderr if ENV.key? 'NET_KNOCKER_HTTP_DEBUG'
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def ssl_key
|
69
|
-
@ssl_key ||= begin
|
70
|
-
key_class = case ssl_certificate.signature_algorithm
|
71
|
-
when /^ecdsa/
|
72
|
-
OpenSSL::PKey::EC
|
73
|
-
when /^rsa/
|
74
|
-
OpenSSL::PKey::RSA
|
75
|
-
when /^dsa/
|
76
|
-
OpenSSL::PKey::DSA
|
77
|
-
else
|
78
|
-
raise "Unknown key type: #{ssl_certificate.signature_algorithm}"
|
79
|
-
end
|
80
|
-
key_class.new(env_secret)
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def ssl_certificate
|
85
|
-
@ssl_certificate ||= OpenSSL::X509::Certificate.new(env_secret)
|
86
|
-
end
|
87
41
|
end
|
88
42
|
end
|
89
43
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: net-knocker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tio Teath
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-04-
|
11
|
+
date: 2022-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|
@@ -31,6 +31,8 @@ files:
|
|
31
31
|
- bin/console
|
32
32
|
- bin/setup
|
33
33
|
- lib/net/knocker.rb
|
34
|
+
- lib/net/knocker/env.rb
|
35
|
+
- lib/net/knocker/peer.rb
|
34
36
|
- lib/net/knocker/version.rb
|
35
37
|
- net-knocker.gemspec
|
36
38
|
homepage: https://github.com/todosmodos/net-knocker
|