rack_attack_admin 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/rack_attack_admin/banned_ips_controller.rb +3 -2
- data/app/controllers/rack_attack_admin/keys_controller.rb +2 -1
- data/app/views/rack_attack_admin/banned_ips/_banned_ip.html.haml +1 -1
- data/app/views/rack_attack_admin/rack_attack/index.html.haml +13 -11
- data/lib/rack/attack_extensions.rb +0 -16
- data/lib/rack_attack_admin/version.rb +1 -1
- data/lib/rack_attack_admin.rb +1 -0
- data/rack_attack_admin.gemspec +20 -19
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9ecd6ce1a1b78254993c7d6b6e72b23c7e0aeea62268282666ff3f9c55177f35
|
4
|
+
data.tar.gz: fb1449910735e43bff061886f9d362c0358b8f37b8de2332701864b3d123f859
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d5cb6070210f2b5ba29f3d2c219d9ec3574df58e3e56f0f87294cc60be6c20f719b94379079e3736093a4411584c171445ef2f435e0958d519fee76808ff84c1
|
7
|
+
data.tar.gz: eb24534ef311d712d43647d0804f04ddf193d8f3b623e54bafa80be491e353d83897a05138add8106e0a859f9be8eecc7885d42c0e1318f34c70fde94fe2ff11
|
@@ -19,10 +19,11 @@ module RackAttackAdmin
|
|
19
19
|
end
|
20
20
|
if ban.valid?
|
21
21
|
Rack::Attack::BannedIps.ban! ban.ip, ban.bantime
|
22
|
-
|
22
|
+
flash[:success] = "Added #{ban.ip}"
|
23
23
|
else
|
24
|
-
|
24
|
+
flash[:alert] = "Failed to add: #{ban.errors.full_messages.join('. ')}"
|
25
25
|
end
|
26
|
+
redirect_to root_path
|
26
27
|
end
|
27
28
|
end
|
28
29
|
end
|
@@ -4,7 +4,8 @@ module RackAttackAdmin
|
|
4
4
|
orig_key = params[:id]
|
5
5
|
unprefixed_key = Rack::Attack.unprefix_key(orig_key)
|
6
6
|
Rack::Attack.cache.delete unprefixed_key
|
7
|
-
|
7
|
+
flash[:success] = "Deleted #{unprefixed_key}"
|
8
|
+
redirect_to root_path
|
8
9
|
end
|
9
10
|
end
|
10
11
|
end
|
@@ -11,6 +11,6 @@
|
|
11
11
|
- interval = Rack::Attack.cache.store.ttl("#{Rack::Attack.cache.prefix}:#{key}")
|
12
12
|
- if interval
|
13
13
|
=# distance_of_time_in_words(interval)
|
14
|
-
in #{ActiveSupport::Duration.build(interval)&.
|
14
|
+
in #{ActiveSupport::Duration.build(interval)&.human_str}
|
15
15
|
|
16
16
|
%td= link_to 'Delete', rack_attack_admin.banned_ip_path(key), method: :delete, class: 'btn'
|
@@ -44,12 +44,12 @@
|
|
44
44
|
%tr
|
45
45
|
%th Type:Name
|
46
46
|
%th Discriminator
|
47
|
-
%th
|
48
|
-
Expires<br/>
|
49
|
-
(Time bucket)
|
50
47
|
%th
|
51
48
|
Value<br/>
|
52
49
|
\/Limit
|
50
|
+
%th
|
51
|
+
Expires<br/>
|
52
|
+
(Time bucket)
|
53
53
|
%th Actions
|
54
54
|
- @counters_h.each do |key, value|
|
55
55
|
%tr
|
@@ -63,6 +63,14 @@
|
|
63
63
|
%code= rule.inspect_with_options
|
64
64
|
|
65
65
|
%td= parsed[:discriminator]
|
66
|
+
|
67
|
+
- limit = parsed && (rule = parsed[:rule]) && rule.limit.to_i
|
68
|
+
- over_limit = value >= limit
|
69
|
+
%td{class: ('over_limit' if over_limit), style: ('color: red' if over_limit)}
|
70
|
+
= value
|
71
|
+
- if limit
|
72
|
+
= "/#{limit}"
|
73
|
+
|
66
74
|
%td
|
67
75
|
-# We can get expires_in from redis or directly from the mached throttle rule
|
68
76
|
:ruby
|
@@ -73,7 +81,7 @@
|
|
73
81
|
(time_range.end - Time.now)
|
74
82
|
end
|
75
83
|
- if interval
|
76
|
-
in #{ActiveSupport::Duration.build(interval)&.
|
84
|
+
in #{ActiveSupport::Duration.build(interval)&.human_str}<br/>
|
77
85
|
|
78
86
|
- if parsed and time_range = parsed[:time_range]
|
79
87
|
%small
|
@@ -81,14 +89,8 @@
|
|
81
89
|
%span><
|
82
90
|
\-
|
83
91
|
#{time_range.end .to_s(:time_with_s)}
|
84
|
-
\= #{time_range.duration&.
|
92
|
+
\= #{time_range.duration&.human_str})
|
85
93
|
|
86
|
-
- limit = parsed && (rule = parsed[:rule]) && rule.limit.to_i
|
87
|
-
- over_limit = value >= limit
|
88
|
-
%td{class: ('over_limit' if over_limit), style: ('color: red' if over_limit)}
|
89
|
-
= value
|
90
|
-
- if limit
|
91
|
-
= "/#{limit}"
|
92
94
|
%td= link_to 'Delete', rack_attack_admin.key_path(key), method: :delete, class: 'btn'
|
93
95
|
.current_time.mb-2 (Current time: #{Time.now.to_s(:time_with_s)})
|
94
96
|
|
@@ -1,22 +1,6 @@
|
|
1
1
|
require 'memoist'
|
2
2
|
require 'active_model'
|
3
3
|
|
4
|
-
ActiveSupport::Duration.class_eval do
|
5
|
-
# Returns a concise and human-readable string, like '3 h' or '3 h, 5 m, 7 s'
|
6
|
-
# This is unlike #to_s, which is concise but not very human-readable (gives time in seconds even for large durations),
|
7
|
-
# This is unlike #to_s, which is concise but not very human-readable ("P3Y6M4DT12H30M5S").
|
8
|
-
def human_to_s
|
9
|
-
iso8601.
|
10
|
-
sub('P', '').
|
11
|
-
sub('T', '').
|
12
|
-
downcase.
|
13
|
-
gsub(/
|
14
|
-
\D # Not a digit
|
15
|
-
(?!$) # Not at end
|
16
|
-
/x) { |m| " #{m}, " }
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
4
|
Rack::Attack
|
21
5
|
class Rack::Attack
|
22
6
|
class << self
|
data/lib/rack_attack_admin.rb
CHANGED
data/rack_attack_admin.gemspec
CHANGED
@@ -4,37 +4,38 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require "rack_attack_admin/version"
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
7
|
+
spec.name = 'rack_attack_admin'
|
8
8
|
spec.version = RackAttackAdmin.version
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
11
|
-
spec.license =
|
9
|
+
spec.authors = ['Tyler Rick']
|
10
|
+
spec.email = ['tyler@tylerrick.com']
|
11
|
+
spec.license = 'MIT'
|
12
12
|
|
13
13
|
spec.summary = %q{A Rack::Attack admin dashboard}
|
14
14
|
spec.description = %q{Lets you see the current state of all throttles and bans. Delete existing keys/bans. Manually add bans.}
|
15
|
-
spec.homepage =
|
15
|
+
spec.homepage = 'https://github.com/TylerRick/rack_attack_admin'
|
16
16
|
|
17
|
-
spec.metadata[
|
18
|
-
spec.metadata[
|
19
|
-
spec.metadata[
|
17
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
18
|
+
spec.metadata['source_code_uri'] = spec.homepage
|
19
|
+
spec.metadata['changelog_uri'] = "#{spec.metadata['source_code_uri']}/blob/master/Changelog.md"
|
20
20
|
|
21
21
|
# Specify which files should be added to the gem when it is released.
|
22
22
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
23
23
|
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
24
24
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
25
25
|
end
|
26
|
-
spec.bindir =
|
26
|
+
spec.bindir = 'exe'
|
27
27
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
|
-
spec.require_paths = [
|
28
|
+
spec.require_paths = ['lib']
|
29
29
|
|
30
|
-
spec.required_ruby_version =
|
31
|
-
spec.add_dependency
|
32
|
-
spec.add_dependency
|
33
|
-
spec.add_dependency
|
34
|
-
spec.add_dependency
|
35
|
-
spec.add_dependency
|
30
|
+
spec.required_ruby_version = '>= 2.3.0'
|
31
|
+
spec.add_dependency 'activesupport', ['>= 4.2', '< 5.3']
|
32
|
+
spec.add_dependency 'activesupport-duration-human_string', '>= 0.1.1'
|
33
|
+
spec.add_dependency 'haml'
|
34
|
+
spec.add_dependency 'memoist'
|
35
|
+
spec.add_dependency 'rack-attack'
|
36
|
+
spec.add_dependency 'rails', ['>= 4.2', '< 5.3']
|
36
37
|
|
37
|
-
spec.add_development_dependency
|
38
|
-
spec.add_development_dependency
|
39
|
-
spec.add_development_dependency
|
38
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
39
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
40
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
40
41
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack_attack_admin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tyler Rick
|
@@ -30,6 +30,20 @@ dependencies:
|
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '5.3'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: activesupport-duration-human_string
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 0.1.1
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 0.1.1
|
33
47
|
- !ruby/object:Gem::Dependency
|
34
48
|
name: haml
|
35
49
|
requirement: !ruby/object:Gem::Requirement
|