rewrite-tester 0.0.5 → 0.0.6
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/README.md +5 -1
- data/lib/invalid_rule.rb +2 -0
- data/lib/redirects.rb +32 -11
- data/lib/rewrite_cond.rb +9 -1
- data/lib/rewrite_rule.rb +31 -9
- data/lib/untestable.rb +2 -0
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3ae93c1fc9b599befce895a0c47deda08744fb52
|
4
|
+
data.tar.gz: 2f204d38b3584ea62804be58b2e963d5a63f68e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 246a47c50679f2e154b5d4522afa3e88e2e0c104c0df0d0158da5909f4a9244c610301e2c0e844170eb04047740efe5bdf5e5ba0cd7f22a536b068244a2045a8
|
7
|
+
data.tar.gz: ecf1ca0230049cf452674a8e9f9a3aeb17ebfa7c5ba9763a9b5643040274b63f76983696b7c9fa9c71097448eb621d065946dbcb16aaea0a04b1e59307d3f2ba
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Rewrite Tester
|
2
2
|
===
|
3
3
|
|
4
|
-
[](http://badge.fury.io/rb/rewrite-tester) [](http://badge.fury.io/rb/rewrite-tester) [](https://codeclimate.com/github/popox/rewrite-tester) [](https://gemnasium.com/popox/rewrite-tester)
|
5
5
|
|
6
6
|
This tool provides Rspec integration tests to test your server's *url rewriting* capabilities given a set of Apache `RewriteRules`.
|
7
7
|
|
@@ -33,6 +33,10 @@ Usage
|
|
33
33
|
$ HTTP_HOST=www.example.com RULES=/path/to//my/rules rake try:redirects
|
34
34
|
```
|
35
35
|
|
36
|
+
Build status
|
37
|
+
===
|
38
|
+
[](https://travis-ci.org/popox/rewrite-tester) [](https://coveralls.io/r/popox/rewrite-tester?branch=master)
|
39
|
+
|
36
40
|
LICENSE
|
37
41
|
===
|
38
42
|
|
data/lib/invalid_rule.rb
ADDED
data/lib/redirects.rb
CHANGED
@@ -8,26 +8,45 @@ class Redirects
|
|
8
8
|
|
9
9
|
def initialize(io_instance)
|
10
10
|
@rules = []
|
11
|
+
@untestable_rules = []
|
11
12
|
unless io_instance.nil?
|
12
13
|
|
13
14
|
conds = []
|
14
15
|
|
15
|
-
io_instance.readlines.each do |line|
|
16
|
+
io_instance.readlines.each.with_index do |line,i|
|
16
17
|
|
17
|
-
|
18
|
+
begin
|
19
|
+
match_data = /^[^#]*RewriteCond/.match(line)
|
18
20
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
21
|
+
unless match_data.nil?
|
22
|
+
conds << RewriteCond.new(line)
|
23
|
+
next
|
24
|
+
end
|
23
25
|
|
24
|
-
|
26
|
+
match_data = /^[^#]*RewriteRule/.match(line)
|
25
27
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
28
|
+
unless match_data.nil?
|
29
|
+
rule = RewriteRule.new(line, conds)
|
30
|
+
@rules << rule
|
31
|
+
conds = []
|
32
|
+
next
|
33
|
+
end
|
34
|
+
rescue InvalidRule => e
|
35
|
+
raise "\e[41mSyntax error on Line #{i+1}: #{line}\e[49m"
|
36
|
+
rescue Untestable => e
|
37
|
+
@untestable_rules << "(Line #{i+1}) #{/.*(Rewrite.*)/.match(line)[1]}"
|
30
38
|
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
unless @untestable_rules.empty?
|
43
|
+
text = <<EOS
|
44
|
+
\e[91m
|
45
|
+
Rewriting rule with conditions are not supported (for now..), please check the following rules by hand:
|
46
|
+
#{@untestable_rules.join("\n")}
|
47
|
+
\e[49m
|
48
|
+
EOS
|
49
|
+
puts text
|
31
50
|
end
|
32
51
|
end
|
33
52
|
end
|
@@ -35,7 +54,9 @@ class Redirects
|
|
35
54
|
attr_accessor :rules, :http_host, :http_scheme
|
36
55
|
|
37
56
|
def self.substitute substitute_rule, substituted_data = []
|
57
|
+
return nil if substitute_rule == '-'
|
38
58
|
substitution = substitute_rule
|
59
|
+
substitution = "/#{substitution}" if /^(\/|https?:\/\/)/.match(substitution).nil?
|
39
60
|
substitution = "#{HTTP_SCHEME}#{HTTP_HOST}#{substitution}" unless /^https?\:\/\//.match(substitution)
|
40
61
|
substitution = substitution.
|
41
62
|
gsub(/\$[0-9]+?/){ |m| !m.nil? && substituted_data[m[1..-1].to_i-1] || '' }.
|
data/lib/rewrite_cond.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
|
+
require 'invalid_rule'
|
2
|
+
|
1
3
|
class RewriteCond
|
2
4
|
def initialize(line)
|
3
5
|
@line = line
|
4
6
|
self.parse line
|
7
|
+
|
8
|
+
raise InvalidRule.new unless valid?
|
5
9
|
end
|
6
10
|
|
7
11
|
def parse(line)
|
@@ -11,7 +15,11 @@ class RewriteCond
|
|
11
15
|
|
12
16
|
@expression = match_data[1]
|
13
17
|
@compare = match_data[2]
|
14
|
-
@
|
18
|
+
@flags = match_data[4].nil? ? nil : match_data[4].split(',')
|
19
|
+
end
|
20
|
+
|
21
|
+
def valid?
|
22
|
+
!@expression.nil? && !@compare.nil?
|
15
23
|
end
|
16
24
|
|
17
25
|
end
|
data/lib/rewrite_rule.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'redirects'
|
2
|
+
require 'invalid_rule'
|
3
|
+
require 'untestable'
|
2
4
|
|
3
5
|
class RewriteRule
|
4
6
|
|
@@ -7,12 +9,16 @@ class RewriteRule
|
|
7
9
|
def initialize(line, conditions = [])
|
8
10
|
@line = line
|
9
11
|
@conds = conditions
|
12
|
+
|
10
13
|
self.parse line
|
14
|
+
|
15
|
+
raise Untestable.new unless @conds.empty?
|
16
|
+
raise InvalidRule.new unless valid?
|
11
17
|
end
|
12
18
|
|
13
19
|
# Parse an apache RewriteRule and transform it into a Ruby object
|
14
20
|
def parse(line)
|
15
|
-
match_data = /RewriteRule[ ]+([^ ]+)[ ]+([^ ]+)[ ]+\[([^ ]+)\]
|
21
|
+
match_data = /RewriteRule[ ]+([^ ]+)[ ]+([^ ]+)([ ]+\[([^ ]+)\]\n?)?$/.match(line)
|
16
22
|
|
17
23
|
return if match_data.nil?
|
18
24
|
|
@@ -22,12 +28,12 @@ class RewriteRule
|
|
22
28
|
@substitutions = @possibilities.map do |possibility|
|
23
29
|
::Redirects.substitute @substitution, possibility[:substituted_data]
|
24
30
|
end
|
25
|
-
@flags = match_data[
|
31
|
+
@flags = match_data[4].nil? ? nil : match_data[4].split(',')
|
26
32
|
|
27
33
|
end
|
28
34
|
|
29
35
|
def valid?
|
30
|
-
!@regex.nil? && !@substitution.nil?
|
36
|
+
!@regex.nil? && !@substitution.nil?
|
31
37
|
end
|
32
38
|
|
33
39
|
def redirection?
|
@@ -36,35 +42,51 @@ class RewriteRule
|
|
36
42
|
|
37
43
|
def redirects
|
38
44
|
@substitutions.map.with_index do |substitution, i|
|
45
|
+
request = ::Redirects.substitute(@possibilities[i][:request_uri])
|
46
|
+
response = substitution.nil? ? request : substitution
|
39
47
|
{
|
40
|
-
:possibility =>
|
41
|
-
:substitution =>
|
48
|
+
:possibility => request,
|
49
|
+
:substitution => response,
|
42
50
|
:code => redirection_code(@flags)
|
43
51
|
}
|
44
52
|
end
|
45
53
|
end
|
46
54
|
|
55
|
+
def last?
|
56
|
+
!@flags.nil? && @flags.include?('L')
|
57
|
+
end
|
58
|
+
|
47
59
|
private
|
48
60
|
|
49
61
|
def generate_possibilities regex
|
50
62
|
some = []
|
51
63
|
base = regex.gsub(/\^|\$/,'')
|
52
64
|
|
53
|
-
|
54
|
-
|
55
|
-
match_data = maybe_regex.match(base)
|
65
|
+
capture_regex = /\(([^)^(]+?)\)\??/
|
66
|
+
match_data = capture_regex.match(base)
|
56
67
|
substituted_data = []
|
57
68
|
until match_data.nil?
|
58
69
|
matched = match_data[1]
|
59
70
|
if /\.\*/.match(matched)
|
71
|
+
# Match anything -> Replace by a random string
|
60
72
|
matched = matched.gsub('.*', generate_random_string(0, 8))
|
61
73
|
elsif /\?$/.match(match_data[0])
|
74
|
+
# Maybe regex -> Replace by match or by empty string
|
62
75
|
matched = rand(2) == 0 ? matched : ''
|
63
76
|
end
|
64
77
|
|
65
78
|
base = base.gsub(match_data[0], matched)
|
66
79
|
substituted_data << matched
|
67
|
-
match_data =
|
80
|
+
match_data = capture_regex.match(base)
|
81
|
+
end
|
82
|
+
|
83
|
+
any_regex = /(\.\*)/
|
84
|
+
match_data = any_regex.match(base)
|
85
|
+
until match_data.nil?
|
86
|
+
matched = match_data[1]
|
87
|
+
matched = matched.gsub('.*', generate_random_string(0, 8))
|
88
|
+
base = base.gsub(match_data[0], matched)
|
89
|
+
match_data = any_regex.match(base)
|
68
90
|
end
|
69
91
|
|
70
92
|
some << {
|
data/lib/untestable.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rewrite-tester
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Bonaud
|
@@ -88,9 +88,11 @@ extra_rdoc_files: []
|
|
88
88
|
files:
|
89
89
|
- LICENSE
|
90
90
|
- README.md
|
91
|
+
- lib/invalid_rule.rb
|
91
92
|
- lib/redirects.rb
|
92
93
|
- lib/rewrite_cond.rb
|
93
94
|
- lib/rewrite_rule.rb
|
95
|
+
- lib/untestable.rb
|
94
96
|
homepage: http://rubygems.org/gems/rewrite-tester
|
95
97
|
licenses:
|
96
98
|
- MIT
|