net-knocker 0.0.3 → 0.0.4
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/lib/net/knocker/env.rb +28 -7
- data/lib/net/knocker/peer.rb +29 -14
- data/lib/net/knocker/version.rb +1 -1
- data/lib/net/knocker.rb +8 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d2b9e2759985d6e60c6ff108157155b7862d703c2e1836284f89f2786e58d199
|
4
|
+
data.tar.gz: dce4cd990ad60f354628f15e83bb2fe9cadfd7d1bb1ea973e7211447711107a7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 43ae20154a32b3a730952bec81a0b0c5a2159c7038b9d1276e4ff11fbf8edbcfb07ae8b6bfc6021c0d892ec47b797a6db14f2a13a7f496fe221c2bcc5540114b
|
7
|
+
data.tar.gz: 3b3783e2c1d6a7d7b842f6e93f07ad4b0ca2dbe1e759b94e39ea7942c085d3f2b35a7532bbbff77ee8f74bd6fd24b64dfd6bb74ee242089d4ac4337a94f642fa
|
data/lib/net/knocker/env.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'logger'
|
4
|
+
require 'net/https'
|
5
|
+
require 'uri'
|
6
|
+
|
3
7
|
module Net
|
4
8
|
class Knocker
|
5
9
|
module Env
|
@@ -36,6 +40,23 @@ module Net
|
|
36
40
|
end
|
37
41
|
end
|
38
42
|
|
43
|
+
def info(method = :info, msg)
|
44
|
+
tags = [self.class.name, Process.pid, method.to_s.upcase].join('][')
|
45
|
+
log.send(method, "[#{tags}] #{msg}")
|
46
|
+
end
|
47
|
+
|
48
|
+
def error(msg)
|
49
|
+
info(__method__, msg)
|
50
|
+
end
|
51
|
+
|
52
|
+
def warn(msg)
|
53
|
+
info(__method__, msg)
|
54
|
+
end
|
55
|
+
|
56
|
+
def debug(msg)
|
57
|
+
info(__method__, msg)
|
58
|
+
end
|
59
|
+
|
39
60
|
def ssl_certificate
|
40
61
|
@ssl_certificate ||= OpenSSL::X509::Certificate.new(env_secret)
|
41
62
|
end
|
@@ -45,13 +66,13 @@ module Net
|
|
45
66
|
end
|
46
67
|
|
47
68
|
def log
|
48
|
-
@log
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
69
|
+
@log ||= if (defined? logger) && (logger.respond_to? :debug)
|
70
|
+
logger
|
71
|
+
elsif (defined? Rails.logger) && (Rails.logger.respond_to? :debug)
|
72
|
+
Rails.logger
|
73
|
+
else
|
74
|
+
::Logger.new($stderr)
|
75
|
+
end
|
55
76
|
end
|
56
77
|
end
|
57
78
|
end
|
data/lib/net/knocker/peer.rb
CHANGED
@@ -3,25 +3,40 @@
|
|
3
3
|
module Net
|
4
4
|
class Knocker
|
5
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
|
-
content = File.read(path)
|
14
|
-
env_var_patterns.any? { |pattern| content.include? pattern }
|
15
|
-
end
|
16
|
-
.any?
|
17
|
-
end
|
18
|
-
|
19
6
|
def self.env_var_patterns
|
20
7
|
@env_var_patterns ||= %W[NET_KNOCKER_URL NET_KNOCKER_SECRET #{ENV['NET_KNOCKER_URL']}].freeze
|
21
8
|
end
|
22
9
|
|
10
|
+
# filter out /proc/self/environ, /proc/thread-self/environ, /proc/<PID>/environ" and "/proc/1/environ"
|
23
11
|
def self.self_patterns
|
24
|
-
@self_patterns ||= %r{proc/((?:thread-)?self|#{Process.pid})/environ}.freeze
|
12
|
+
@self_patterns ||= %r{proc/((?:thread-)?self|#{Process.pid}|1)/environ}.freeze
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.environ_paths
|
16
|
+
Dir['/proc/*/environ'].grep_v(self_patterns)
|
17
|
+
.map { |p| Pathname.new(p) }
|
18
|
+
.compact
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.pid_with_content
|
22
|
+
environ_paths.map do |path|
|
23
|
+
content = begin
|
24
|
+
path.binread
|
25
|
+
.split("\0")
|
26
|
+
.select { |e| env_var_patterns.any? { |p| e.include? p } }
|
27
|
+
.compact
|
28
|
+
rescue StandardError
|
29
|
+
next
|
30
|
+
end
|
31
|
+
pid = path.to_s.split('/').third.to_s
|
32
|
+
[pid, content] unless content.empty? || pid.empty?
|
33
|
+
end
|
34
|
+
.compact
|
35
|
+
.to_h
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.any?(&block)
|
39
|
+
pid_with_content.any?(&block)
|
25
40
|
end
|
26
41
|
end
|
27
42
|
end
|
data/lib/net/knocker/version.rb
CHANGED
data/lib/net/knocker.rb
CHANGED
@@ -3,9 +3,6 @@
|
|
3
3
|
require_relative './knocker/version'
|
4
4
|
require_relative './knocker/env'
|
5
5
|
require_relative './knocker/peer'
|
6
|
-
require 'logger'
|
7
|
-
require 'net/https'
|
8
|
-
require 'uri'
|
9
6
|
|
10
7
|
module Net
|
11
8
|
class Knocker
|
@@ -23,8 +20,13 @@ module Net
|
|
23
20
|
send_request 'PUT'
|
24
21
|
end
|
25
22
|
|
23
|
+
def msg_end
|
24
|
+
"to #{url}" unless url.to_s.empty?
|
25
|
+
end
|
26
|
+
|
26
27
|
def out
|
27
|
-
return
|
28
|
+
return debug("not sending DELETE request #{msg_end})") if should_omit?
|
29
|
+
return info("sending DELETE request is blocked by PID(s) #{Peer.pid_with_content.keys.join(',')}") if Peer.any?
|
28
30
|
|
29
31
|
send_request 'DELETE'
|
30
32
|
end
|
@@ -32,10 +34,10 @@ module Net
|
|
32
34
|
private
|
33
35
|
|
34
36
|
def send_request(http_method)
|
35
|
-
return
|
37
|
+
return debug("not sending #{http_method} request #{msg_end}") if should_omit?
|
36
38
|
|
37
39
|
http_client.send_request(http_method, '/') do |response|
|
38
|
-
|
40
|
+
debug("[#{self.class}][#{__method__}] Public IP: #{response.body} ")
|
39
41
|
end
|
40
42
|
end
|
41
43
|
end
|
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.4
|
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-13 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|