rack-smack 1.0.0 → 2.0.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: caa16a9a96c5b7e93b65202887ad6d85f1208c16
4
- data.tar.gz: 60f6f861038536c62a39351710c0ee236a29f613
2
+ SHA256:
3
+ metadata.gz: 82950b16399f7c3b29ace855e6e0c35ccd11912cb59e08cd4f16fa12cc6ed08a
4
+ data.tar.gz: cf203f926631582b5054a9dbe2c278c0d8beec46325161c0a4b0be1799e59e93
5
5
  SHA512:
6
- metadata.gz: 6e6e8bcff5b2a4684305fb8e39fb2b3cd9824dde306b1b76f19b7e697796ae8d266829c27ec6770cbd2ff4de4a6200b42f9c642d44c6279935e2cc7d1438e903
7
- data.tar.gz: 5c09bf8cd44898f7537bff1bdcb27fac29c0115dec37a1ba1ffe3fa023bfa1ad43b744f0012e2d4269168bab29ee8c0feb4186a9f22b8b1a5151316aaebc6716
6
+ metadata.gz: 0055d31ead65e181c44362dcd7d86fbd512e638d9575dc1abb48796e39b7b5ad640a4dc29dfe963b7b788298288b1ab472aaac6f6dfcf5250f2c6485dd12a33b
7
+ data.tar.gz: 8aaa91913e8a1a33474e8e33bb1f4f763e847d5d1126f8aea27daecdf0be85f3fb53b45f084701cfb7e9a5cda49f71c99192d5aa2038e91ed1b4b5d20e3bd51f
data/README.md CHANGED
@@ -2,21 +2,28 @@
2
2
 
3
3
  A no-nonsense force of good in a world of bad. Will prevent malicious bots/users from accessing your content once they are caught red-handed.
4
4
 
5
- ## Usage
6
- Require `smack.rb` where you need it and the slide it into your middleware stack:
5
+ ## Install
6
+ ```
7
+ $ gem install rack-smack
8
+ ```
7
9
 
10
+ ## Usage
8
11
  ```
12
+ require 'rack/smack'
13
+
9
14
  use Rack::Smack
15
+ run YourApp
10
16
  ```
11
17
 
12
18
  ## Options
13
19
  `file` for filename storing the bad guys
14
20
  `list` for the list of keywords you want to ban on
15
21
  `asset` for the list of keywords where you want to skip checking
22
+ `anon` do not log any client ips
16
23
 
17
24
  ### Example with options
18
25
  ```
19
- use Rack::Smack file: 'bad_guys.txt', list: ['wp', 'wordpress', php', 'admin']
26
+ use Rack::Smack file: 'bad_guys.txt', list: ['wp', 'wordpress', php', 'admin'], anon: true
20
27
  ```
21
28
 
22
29
  ## Defaults
@@ -25,6 +32,7 @@ use Rack::Smack file: 'bad_guys.txt', list: ['wp', 'wordpress', php', 'admin']
25
32
  |file|'./ban_list.txt'|
26
33
  |list|['wp', 'wordpress', 'xmlrpc', 'sfn']|
27
34
  |asset|['css', 'gif', 'jpg', 'jpeg', 'js', 'png', 'ico', 'txt']|
35
+ |anon|false|
28
36
 
29
37
  ## Want to understand?
30
38
  [Code overview](https://alessandrominali.github.io/block_malicious_users_with_rack_app)
@@ -0,0 +1,7 @@
1
+ require 'digest/sha2'
2
+
3
+ IO.foreach('./ban_list.txt') do |row|
4
+ items = row.split(',')
5
+ items[0] = Digest::SHA2.hexdigest(items[0])[0...16]
6
+ IO.write('./ban_list_new.txt', items.join(','), mode: 'a')
7
+ end
@@ -1 +1,4 @@
1
+ require 'digest/sha2'
2
+
1
3
  require 'rack/smack'
4
+ require 'rack/smack/version'
@@ -1,5 +1,3 @@
1
- require 'rack/smack/version'
2
-
3
1
  module Rack
4
2
  # don't cross me boy
5
3
  class Smack
@@ -12,8 +10,13 @@ module Rack
12
10
  @asset = opts.delete(:asset) || ASSET
13
11
  @blocked = opts.delete(:list) || BLOCKED
14
12
  @file = opts.delete(:file) || FILENAME
13
+ @anon = opts.delete(:anon) || false
15
14
  raise TypeError unless options_valid?
16
15
  IO.write(FILENAME, '') unless ::File.file?(@file)
16
+
17
+ if @anon
18
+ define_singleton_method(:ip) { Digest::SHA2.hexdigest(@req.ip)[0...16] }
19
+ end
17
20
  end
18
21
 
19
22
  def call(env)
@@ -27,13 +30,13 @@ module Rack
27
30
  private
28
31
 
29
32
  def ban!
30
- IO.write(@file, "#{@req.ip},#{@req.path},#{Time.now}\n", mode: 'a')
33
+ IO.write(@file, "#{ip},#{@req.path},#{Time.now}\n", mode: 'a')
31
34
  smack
32
35
  end
33
36
 
34
37
  def banned?
35
38
  IO.foreach(@file) do |row|
36
- return true if row.split(',')[0] == @req.ip
39
+ return true if row.split(',')[0] == ip
37
40
  end
38
41
  false
39
42
  end
@@ -45,5 +48,9 @@ module Rack
45
48
  def smack
46
49
  [403, { 'Content-Type' => 'text/html' }, ['Banned.']]
47
50
  end
51
+
52
+ def ip
53
+ @req.ip
54
+ end
48
55
  end
49
56
  end
@@ -1,5 +1,5 @@
1
1
  module Rack
2
2
  class Smack
3
- VERSION = '1.0.0'.freeze
3
+ VERSION = '2.0.1'.freeze
4
4
  end
5
5
  end
@@ -21,9 +21,9 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ['lib']
23
23
 
24
- spec.add_development_dependency 'bundler', '~> 1.15'
25
- spec.add_development_dependency 'rake', '~> 10.0'
26
- spec.add_development_dependency 'rspec', '~> 3.2'
24
+ spec.add_development_dependency 'bundler', '~> 1.15'
25
+ spec.add_development_dependency "rake", '>= 12.3.3'
26
+ spec.add_development_dependency 'rspec', '~> 3.2'
27
27
  spec.add_development_dependency 'rack-test'
28
28
  spec.add_development_dependency 'pry'
29
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-smack
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - AlessandroMinali
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-09-12 00:00:00.000000000 Z
11
+ date: 2020-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: 12.3.3
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: 12.3.3
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -80,7 +80,7 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
- description:
83
+ description:
84
84
  email:
85
85
  - alessandro.minali@gmail.com
86
86
  executables: []
@@ -93,6 +93,7 @@ files:
93
93
  - LICENSE.txt
94
94
  - README.md
95
95
  - Rakefile
96
+ - anon_convert_sample.rb
96
97
  - lib/rack-smack.rb
97
98
  - lib/rack/smack.rb
98
99
  - lib/rack/smack/version.rb
@@ -101,7 +102,7 @@ homepage: https://github.com/AlessandroMinali/rack-smack
101
102
  licenses:
102
103
  - MIT
103
104
  metadata: {}
104
- post_install_message:
105
+ post_install_message:
105
106
  rdoc_options: []
106
107
  require_paths:
107
108
  - lib
@@ -116,9 +117,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
116
117
  - !ruby/object:Gem::Version
117
118
  version: '0'
118
119
  requirements: []
119
- rubyforge_project:
120
- rubygems_version: 2.6.12
121
- signing_key:
120
+ rubygems_version: 3.1.2
121
+ signing_key:
122
122
  specification_version: 4
123
123
  summary: A no-nonsense force of good in a world of bad. Will prevent malicious bots/users
124
124
  from accessing your content once they are caught red-handed.