rack-dedos 0.2.2 → 0.3.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
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +25 -0
- data/README.md +5 -10
- data/exe/geoipget +5 -0
- data/lib/rack/dedos/executables/geoipget.rb +98 -0
- data/lib/rack/dedos/version.rb +1 -1
- data/lib/rack/dedos.rb +1 -0
- data.tar.gz.sig +0 -0
- metadata +7 -4
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c0f4f96c99d1126d17cd0ede822cce3e90e0d56cceb51cb4d8396e3f72242d03
|
4
|
+
data.tar.gz: 1fba85f7f58c450dcd7fc82b0a26098790d21befae28f411ae96c26f62d23811
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 86320d0b5bb8c3328f50101ff9b460a3efaf10f31b5ff54c7f350a436d5e594e4c6fabbcf11a943f766a136f7999a9610fb20912ffc4ad9843537c9871a49a4c
|
7
|
+
data.tar.gz: 9f5d286d924b2ab3cfb22402a9894cdfc0b96a0ca2fc31e451a572d43257237dbbe4226cc3c438a2bc5cf3f226fbe681ee8fc9fc9b6d16796b8b28507816d428
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,31 @@
|
|
2
2
|
|
3
3
|
Nothing so far
|
4
4
|
|
5
|
+
## 0.3.2
|
6
|
+
|
7
|
+
#### Changes
|
8
|
+
* Resolve all paths to prevent problems with relative paths
|
9
|
+
|
10
|
+
## 0.3.1
|
11
|
+
|
12
|
+
#### Changes
|
13
|
+
* Root `File` operations to prevent clashes with Rack
|
14
|
+
|
15
|
+
## 0.3.0
|
16
|
+
|
17
|
+
#### Changes
|
18
|
+
* Convert `geoipget` from Bash to Ruby
|
19
|
+
|
20
|
+
## 0.2.4
|
21
|
+
|
22
|
+
#### Changes
|
23
|
+
* Use Bash for `geoipget` to prevent problems with `/bin/sh` diversity
|
24
|
+
|
25
|
+
## 0.2.3
|
26
|
+
|
27
|
+
#### Additions
|
28
|
+
* `geoipget` shell script
|
29
|
+
|
5
30
|
## 0.2.2
|
6
31
|
|
7
32
|
#### Changes
|
data/README.md
CHANGED
@@ -125,18 +125,13 @@ Either allow or deny requests by probable country of origin. If both are set, th
|
|
125
125
|
|
126
126
|
The MaxMind GeoLite2 database is free, however, you have to create an account on [maxmind.com](https://www.maxmind.com) and then download the country database.
|
127
127
|
|
128
|
-
For automatic updates, create a `geoipupdate.conf` file and then use the [geoipupdate tool](https://github.com/maxmind/geoipupdate/releases) to fetch the latest country database
|
128
|
+
For automatic updates, create a `geoipupdate.conf` file and then use the [geoipupdate tool for your arch](https://github.com/maxmind/geoipupdate/releases) to fetch the latest country database.
|
129
129
|
|
130
|
-
|
131
|
-
version=4.10.0
|
132
|
-
arch=linux_amd64
|
133
|
-
conf=/etc/geoipupdate.conf
|
134
|
-
dir=/var/db/maxmind/
|
130
|
+
The bundled `geoipget` executable does all this in one swipe:
|
135
131
|
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
/tmp/geoipupdate_${version}_${arch}/geoipupdate -f "${conf}" -d "${dir}"
|
132
|
+
```
|
133
|
+
geoipget --help
|
134
|
+
geoipget --dir . --arch linux_amd64 /etc/geoipupdate.conf
|
140
135
|
```
|
141
136
|
|
142
137
|
## Real Client IP
|
data/exe/geoipget
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
require 'tmpdir'
|
5
|
+
require 'open-uri'
|
6
|
+
require 'json'
|
7
|
+
require 'rubygems/package'
|
8
|
+
|
9
|
+
module Rack
|
10
|
+
module Dedos
|
11
|
+
module Executables
|
12
|
+
class Geoipget
|
13
|
+
attr_reader :config, :dir, :arch
|
14
|
+
|
15
|
+
def initialize(**options)
|
16
|
+
@arch, @dir = 'linux_amd64', '.'
|
17
|
+
OptionParser.new do |o|
|
18
|
+
o.banner = <<~END
|
19
|
+
Download the geoip database from Maxmind.
|
20
|
+
Usage: #{::File.basename($0)} CONFIG_FILE
|
21
|
+
END
|
22
|
+
o.on('-a', '--arch ARCH', String, "architecture (default: #{arch})") { @arch = _1 }
|
23
|
+
o.on('-d', '--dir DIR', String, "destination directory (default: #{dir})") { @dir = _1 }
|
24
|
+
o.on('-A', '--about', 'show author/license information and exit') { self.class.about }
|
25
|
+
o.on('-V', '--version', 'show version and exit') { self.class.version }
|
26
|
+
end.parse!
|
27
|
+
@config = ARGV.first
|
28
|
+
end
|
29
|
+
|
30
|
+
def run
|
31
|
+
fail "cannot read config file #{config}" unless config && ::File.readable?(config)
|
32
|
+
Maxmind.new(::File.realpath(config), ::File.realpath(dir), arch).get
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.about
|
36
|
+
puts 'Written by Sven Schwyn (bitcetera.com) and distributed under MIT license.'
|
37
|
+
exit
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.version
|
41
|
+
puts Rack::Dedos::VERSION
|
42
|
+
exit
|
43
|
+
end
|
44
|
+
|
45
|
+
class Maxmind
|
46
|
+
REPO = "maxmind/geoipupdate"
|
47
|
+
|
48
|
+
attr_reader :config, :dir, :arch
|
49
|
+
|
50
|
+
def initialize(config, dir, arch)
|
51
|
+
@config, @dir, @arch = config, dir, arch
|
52
|
+
end
|
53
|
+
|
54
|
+
def get
|
55
|
+
prepare(latest_version) { download }
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def latest_version
|
61
|
+
URI("https://api.github.com/repos/#{REPO}/releases/latest")
|
62
|
+
.read
|
63
|
+
.then { JSON.parse(_1) }
|
64
|
+
.fetch('tag_name')
|
65
|
+
.slice(1..)
|
66
|
+
end
|
67
|
+
|
68
|
+
def prepare(version)
|
69
|
+
uri = URI("https://github.com/#{REPO}/releases/download/v#{version}/geoipupdate_#{version}_#{arch}.tar.gz")
|
70
|
+
Dir.mktmpdir do |tmp|
|
71
|
+
Dir.chdir tmp
|
72
|
+
uri.open do |file|
|
73
|
+
Zlib::GzipReader.wrap(file) do |gz|
|
74
|
+
Gem::Package::TarReader.new(gz) do |tar|
|
75
|
+
tar.each do |entry|
|
76
|
+
if entry.full_name.match? %r(/geoipupdate$)
|
77
|
+
::File.write('geoipupdate', entry.read)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
::File.chmod(0755, 'geoipupdate')
|
84
|
+
yield
|
85
|
+
end
|
86
|
+
ensure
|
87
|
+
lockfile = "#{dir}/.geoipupdate.lock"
|
88
|
+
::File.unlink(lockfile) if ::File.exist? lockfile
|
89
|
+
end
|
90
|
+
|
91
|
+
def download
|
92
|
+
`./geoipupdate -f "#{config}" -d "#{dir}"`
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
data/lib/rack/dedos/version.rb
CHANGED
data/lib/rack/dedos.rb
CHANGED
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-dedos
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sven Schwyn
|
8
|
-
bindir:
|
8
|
+
bindir: exe
|
9
9
|
cert_chain:
|
10
10
|
- |
|
11
11
|
-----BEGIN CERTIFICATE-----
|
@@ -28,7 +28,7 @@ cert_chain:
|
|
28
28
|
jTyRsT1gymASS2KHe+BaCTwD74GqO8q4woYLZgXnJ/PvgcFgY2FEi2Kn/sXLp4JE
|
29
29
|
boIgxQCMT+nxBHCD
|
30
30
|
-----END CERTIFICATE-----
|
31
|
-
date:
|
31
|
+
date: 2025-01-16 00:00:00.000000000 Z
|
32
32
|
dependencies:
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: rack
|
@@ -195,7 +195,8 @@ description: |
|
|
195
195
|
resort only to be enabled during an attack.
|
196
196
|
email:
|
197
197
|
- ruby@bitcetera.com
|
198
|
-
executables:
|
198
|
+
executables:
|
199
|
+
- geoipget
|
199
200
|
extensions: []
|
200
201
|
extra_rdoc_files:
|
201
202
|
- README.md
|
@@ -205,8 +206,10 @@ files:
|
|
205
206
|
- CHANGELOG.md
|
206
207
|
- LICENSE.txt
|
207
208
|
- README.md
|
209
|
+
- exe/geoipget
|
208
210
|
- lib/rack/dedos.rb
|
209
211
|
- lib/rack/dedos/cache.rb
|
212
|
+
- lib/rack/dedos/executables/geoipget.rb
|
210
213
|
- lib/rack/dedos/filters/base.rb
|
211
214
|
- lib/rack/dedos/filters/country.rb
|
212
215
|
- lib/rack/dedos/filters/user_agent.rb
|
metadata.gz.sig
CHANGED
Binary file
|