apache-config-generator 0.2 → 0.2.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +6 -0
- data/Manifest +3 -1
- data/README.rdoc +51 -0
- data/Rakefile +6 -0
- data/apache-config-generator.gemspec +4 -4
- data/config/config.reek +4 -0
- data/lib/apache/apachify.rb +140 -0
- data/lib/apache/config.rb +31 -55
- data/lib/apache/directory.rb +3 -16
- data/lib/apache/logging.rb +13 -5
- data/lib/apache/master.rb +21 -29
- data/lib/apache/modules.rb +2 -6
- data/lib/apache/permissions.rb +12 -11
- data/lib/apache/rewrites.rb +104 -101
- data/lib/apache/ssl.rb +4 -5
- metadata +8 -5
- data/lib/apache/quoteize.rb +0 -16
data/CHANGELOG
CHANGED
data/Manifest
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
CHANGELOG
|
2
2
|
README.rdoc
|
3
3
|
Rakefile
|
4
|
+
apache-config-generator.gemspec
|
4
5
|
bin/apache-configurator
|
6
|
+
config/config.reek
|
5
7
|
lib/apache.rb
|
8
|
+
lib/apache/apachify.rb
|
6
9
|
lib/apache/config.rb
|
7
10
|
lib/apache/directory.rb
|
8
11
|
lib/apache/logging.rb
|
@@ -11,7 +14,6 @@ lib/apache/modules.rb
|
|
11
14
|
lib/apache/mpm_prefork.rb
|
12
15
|
lib/apache/performance.rb
|
13
16
|
lib/apache/permissions.rb
|
14
|
-
lib/apache/quoteize.rb
|
15
17
|
lib/apache/rake/create.rb
|
16
18
|
lib/apache/rewrites.rb
|
17
19
|
lib/apache/ssl.rb
|
data/README.rdoc
CHANGED
@@ -19,6 +19,8 @@ Configs center around the Apache::Config.build method:
|
|
19
19
|
server_name 'my-cool-website.cool.wow'
|
20
20
|
document_root '/var/www/my-cool-website'
|
21
21
|
|
22
|
+
server_admin! "john@coswellproductions.com"
|
23
|
+
|
22
24
|
directory '/' do
|
23
25
|
options :follow_sym_links, :indexes
|
24
26
|
allow_from_all
|
@@ -30,5 +32,54 @@ Configs center around the Apache::Config.build method:
|
|
30
32
|
basic_authentication "My secret", '/etc/apache2/users/global.users', :user => :john
|
31
33
|
satisfy :any
|
32
34
|
end
|
35
|
+
|
36
|
+
rewrites "My old content" do
|
37
|
+
cond "%{HTTP_REFERER}", '!^my-cool-website\.cool\.wow$'
|
38
|
+
rule %r{\.(gif|jpg|png|pdf)$}, '/lol-image-stealer.html', :last => true, :redirect => true
|
39
|
+
|
40
|
+
rewrite_test '/index.html', '/index.html', :http_referer => 'other.site'
|
41
|
+
rewrite_test '/index.gif', '/lol-image-stealer.html', :http_referer => 'other.site'
|
42
|
+
rewrite_test '/index.gif', '/index.gif', :http_referer => 'my-cool-website.cool.wow'
|
43
|
+
end
|
33
44
|
end
|
34
45
|
|
46
|
+
Notes on how the conversion works:
|
47
|
+
|
48
|
+
* Methods within the build block are translated into NerdCapsed Apache directives.
|
49
|
+
* Directives that house children take blocks that contain the child methods.
|
50
|
+
* Directives that expect regular expressions take a Regexp object.
|
51
|
+
* Passing a String as a parameter, by default, double-quotes it.
|
52
|
+
* Passing in a Symbol does not quote the parameter.
|
53
|
+
** Some directives NerdCap Symbols, such as Options
|
54
|
+
* Appending an exclamation point to the method turns off quoting.
|
55
|
+
* Shortcut methods are defined as modules under the Apache module.
|
56
|
+
|
57
|
+
There are also sanity checks that occur when configuration is being generated:
|
58
|
+
|
59
|
+
* Directives that rely on a path will check to see if the path exists.
|
60
|
+
* Since you need to use Regexp objects for directives that require a regular expression,
|
61
|
+
bad expressions will be flagged by the Ruby interpreter.
|
62
|
+
* Rewrite rules can be tested with the rewrite_test method.
|
63
|
+
|
64
|
+
The above config is transformed into the following:
|
65
|
+
|
66
|
+
ServerName "my-cool-website.cool.wow"
|
67
|
+
DocumentRoot "/var/www/my-cool-website"
|
68
|
+
ServerAdmin john@coswellproductions.com
|
69
|
+
|
70
|
+
<Directory "/">
|
71
|
+
Options FollowSymLinks, Indexes
|
72
|
+
Allow from all
|
73
|
+
</Directory>
|
74
|
+
|
75
|
+
<LocationMatch "^/secret">
|
76
|
+
Deny from all
|
77
|
+
|
78
|
+
AuthType Basic
|
79
|
+
AuthName "My secret"
|
80
|
+
AuthUserFile "/etc/apache2/users/global.users"
|
81
|
+
Require user john
|
82
|
+
</LocationMatch>
|
83
|
+
|
84
|
+
RewriteCond "%{HTTP_REFERER}" "^!my-cool-website\.cool\.wow"
|
85
|
+
RewriteRule "\.(gif|jpg|png|pdf)$" "/lol-image-stealer.html" [L,R]
|
data/Rakefile
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
$LOAD_PATH << 'lib'
|
2
2
|
|
3
|
+
require 'rubygems'
|
4
|
+
|
3
5
|
require 'apache'
|
4
6
|
require 'spec/rake/spectask'
|
5
7
|
require 'sdoc'
|
@@ -39,3 +41,7 @@ Rake::RDocTask.new do |rdoc|
|
|
39
41
|
rdoc.main = 'README.rdoc'
|
40
42
|
rdoc.rdoc_dir = 'docs'
|
41
43
|
end
|
44
|
+
|
45
|
+
task :reek do
|
46
|
+
system('reek -c config/config.reek lib/*')
|
47
|
+
end
|
@@ -2,17 +2,17 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{apache-config-generator}
|
5
|
-
s.version = "0.2"
|
5
|
+
s.version = "0.2.2.1"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["John Bintz"]
|
9
|
-
s.date = %q{2010-05-
|
9
|
+
s.date = %q{2010-05-19}
|
10
10
|
s.default_executable = %q{apache-configurator}
|
11
11
|
s.description = %q{A Ruby DSL for programmatically generating Apache configs}
|
12
12
|
s.email = %q{}
|
13
13
|
s.executables = ["apache-configurator"]
|
14
|
-
s.extra_rdoc_files = ["CHANGELOG", "README.rdoc", "bin/apache-configurator", "lib/apache.rb", "lib/apache/
|
15
|
-
s.files = ["CHANGELOG", "README.rdoc", "Rakefile", "bin/apache-configurator", "lib/apache.rb", "lib/apache/
|
14
|
+
s.extra_rdoc_files = ["CHANGELOG", "README.rdoc", "bin/apache-configurator", "lib/apache.rb", "lib/apache/apachify.rb", "lib/apache/config.rb", "lib/apache/directory.rb", "lib/apache/logging.rb", "lib/apache/master.rb", "lib/apache/modules.rb", "lib/apache/mpm_prefork.rb", "lib/apache/performance.rb", "lib/apache/permissions.rb", "lib/apache/rake/create.rb", "lib/apache/rewrites.rb", "lib/apache/ssl.rb"]
|
15
|
+
s.files = ["CHANGELOG", "README.rdoc", "Rakefile", "apache-config-generator.gemspec", "bin/apache-configurator", "config/config.reek", "lib/apache.rb", "lib/apache/apachify.rb", "lib/apache/config.rb", "lib/apache/directory.rb", "lib/apache/logging.rb", "lib/apache/master.rb", "lib/apache/modules.rb", "lib/apache/mpm_prefork.rb", "lib/apache/performance.rb", "lib/apache/permissions.rb", "lib/apache/rake/create.rb", "lib/apache/rewrites.rb", "lib/apache/ssl.rb", "skel/Rakefile", "skel/config.yml", "Manifest"]
|
16
16
|
s.homepage = %q{}
|
17
17
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Apache-config-generator", "--main", "README.rdoc"]
|
18
18
|
s.require_paths = ["lib"]
|
data/config/config.reek
ADDED
@@ -0,0 +1,140 @@
|
|
1
|
+
module Apache
|
2
|
+
module Apachify
|
3
|
+
# Apachify a string
|
4
|
+
#
|
5
|
+
# Split the provided name on underscores and capitalize the individual parts
|
6
|
+
# Certain character strings are capitalized to match Apache directive names:
|
7
|
+
# * Cgi => CGI
|
8
|
+
# * Ssl => SSL
|
9
|
+
# * Ldap => LDAP
|
10
|
+
def apachify
|
11
|
+
self.to_s.split("_").collect { |part|
|
12
|
+
part.capitalize!
|
13
|
+
|
14
|
+
case part
|
15
|
+
when 'Ssl', 'Cgi', 'Ldap', 'Url'; part.upcase
|
16
|
+
when 'Etag'; 'ETag'
|
17
|
+
else; part
|
18
|
+
end
|
19
|
+
}.join
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Ruby strings
|
25
|
+
class String
|
26
|
+
include Apache::Apachify
|
27
|
+
|
28
|
+
alias :optionify :apachify
|
29
|
+
|
30
|
+
def commentize
|
31
|
+
self.split("\n")
|
32
|
+
end
|
33
|
+
|
34
|
+
def quoteize
|
35
|
+
%{"#{self}"}
|
36
|
+
end
|
37
|
+
|
38
|
+
alias :blockify :quoteize
|
39
|
+
|
40
|
+
def headerize
|
41
|
+
"#{self.quoteize}"
|
42
|
+
end
|
43
|
+
|
44
|
+
def replace_placeholderize(opts)
|
45
|
+
self.gsub(%r{%\{([^\}]+)\}}) do |match|
|
46
|
+
key = $1.downcase.to_sym
|
47
|
+
opts[key] || ''
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# Ruby symbols
|
53
|
+
class Symbol
|
54
|
+
include Apache::Apachify
|
55
|
+
|
56
|
+
# Turn this into an option for IndexOptions
|
57
|
+
def optionify
|
58
|
+
output = self.apachify
|
59
|
+
output = "-#{output[3..-1]}" if self.to_s[0..3] == 'not_'
|
60
|
+
output
|
61
|
+
end
|
62
|
+
|
63
|
+
def quoteize
|
64
|
+
self.to_s.gsub('_', ' ')
|
65
|
+
end
|
66
|
+
|
67
|
+
def blockify
|
68
|
+
self.to_s
|
69
|
+
end
|
70
|
+
|
71
|
+
def headerize
|
72
|
+
"#{self.quoteize}"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
class Fixnum
|
77
|
+
def quoteize; self; end
|
78
|
+
end
|
79
|
+
|
80
|
+
# Ruby arrays
|
81
|
+
class Array
|
82
|
+
# Apachify all the elements within this array
|
83
|
+
def apachify
|
84
|
+
self.collect(&:apachify)
|
85
|
+
end
|
86
|
+
|
87
|
+
def quoteize
|
88
|
+
self.collect(&:quoteize)
|
89
|
+
end
|
90
|
+
|
91
|
+
def quoteize!
|
92
|
+
self.collect!(&:quoteize)
|
93
|
+
end
|
94
|
+
|
95
|
+
def blockify
|
96
|
+
self.quoteize * " "
|
97
|
+
end
|
98
|
+
|
99
|
+
alias :commentize :to_a
|
100
|
+
|
101
|
+
def headerize
|
102
|
+
"#{self.first.quoteize} #{self.last}"
|
103
|
+
end
|
104
|
+
|
105
|
+
def rewrite_cond_optionify
|
106
|
+
self.collect do |opt|
|
107
|
+
{
|
108
|
+
:or => 'OR',
|
109
|
+
:case_insensitive => 'NC',
|
110
|
+
:no_vary => 'NV'
|
111
|
+
}[opt]
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def rewrite_option_listify
|
116
|
+
(!self.empty?) ? "[#{self * ','}]" : nil
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
# Ruby hashes
|
121
|
+
class Hash
|
122
|
+
REWRITE_RULE_CONDITIONS = {
|
123
|
+
:last => 'L',
|
124
|
+
:forbidden => 'F',
|
125
|
+
:no_escape => 'NE',
|
126
|
+
:redirect => lambda { |val| val == true ? 'R' : "R=#{val}" },
|
127
|
+
:pass_through => 'PT',
|
128
|
+
:preserve_query_string => 'QSA',
|
129
|
+
:query_string_append => 'QSA',
|
130
|
+
:env => lambda { |val| "E=#{val}" }
|
131
|
+
}
|
132
|
+
|
133
|
+
def rewrite_rule_optionify
|
134
|
+
self.collect do |key, value|
|
135
|
+
what = REWRITE_RULE_CONDITIONS[key]
|
136
|
+
what = what.call(value) if what.kind_of? Proc
|
137
|
+
what
|
138
|
+
end.compact.sort
|
139
|
+
end
|
140
|
+
end
|
data/lib/apache/config.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'rubygems'
|
1
2
|
require 'fileutils'
|
2
3
|
require 'rainbow'
|
3
4
|
|
@@ -56,7 +57,6 @@ module Apache
|
|
56
57
|
attr_accessor :line_indent, :rotate_logs_path
|
57
58
|
|
58
59
|
include Apache::Master
|
59
|
-
include Apache::Quoteize
|
60
60
|
include Apache::Permissions
|
61
61
|
include Apache::Directories
|
62
62
|
include Apache::Logging
|
@@ -71,19 +71,27 @@ module Apache
|
|
71
71
|
end
|
72
72
|
|
73
73
|
# Build the provided configuration
|
74
|
-
def
|
74
|
+
def build_and_return(&block)
|
75
75
|
reset!
|
76
76
|
|
77
77
|
self.instance_eval(&block)
|
78
78
|
|
79
|
-
if target
|
80
|
-
FileUtils.mkdir_p File.split(target).first
|
81
|
-
File.open(target, 'w') { |f| f.puts [ "# Generated by apache-config-generator #{Time.now.to_s}", @config ].flatten * "\n" }
|
82
|
-
end
|
83
|
-
|
84
79
|
@config
|
85
80
|
end
|
86
81
|
|
82
|
+
def build_and_return_if(*conditions, &block)
|
83
|
+
build_and_return(&block) if conditions.include? APACHE_ENV
|
84
|
+
end
|
85
|
+
|
86
|
+
def build(target, &block)
|
87
|
+
config = build_and_return(&block)
|
88
|
+
|
89
|
+
FileUtils.mkdir_p File.split(target).first
|
90
|
+
File.open(target, 'w') { |file| file.puts [ "# Generated by apache-config-generator #{Time.now.to_s}", config ].flatten * "\n" }
|
91
|
+
|
92
|
+
config
|
93
|
+
end
|
94
|
+
|
87
95
|
# Reset the current settings
|
88
96
|
def reset!
|
89
97
|
@config = []
|
@@ -94,7 +102,7 @@ module Apache
|
|
94
102
|
def indent(string_or_array)
|
95
103
|
case string_or_array
|
96
104
|
when Array
|
97
|
-
string_or_array.collect { |
|
105
|
+
string_or_array.collect { |line| indent(line) }
|
98
106
|
else
|
99
107
|
" " * (@line_indent * 2) + string_or_array.to_s
|
100
108
|
end
|
@@ -115,35 +123,18 @@ module Apache
|
|
115
123
|
@config
|
116
124
|
end
|
117
125
|
|
118
|
-
# Apachify a string
|
119
|
-
#
|
120
|
-
# Split the provided name on underscores and capitalize the individual parts
|
121
|
-
# Certain character strings are capitalized to match Apache directive names:
|
122
|
-
# * Cgi => CGI
|
123
|
-
# * Ssl => SSL
|
124
|
-
# * Ldap => LDAP
|
125
|
-
def apachify(name)
|
126
|
-
case name
|
127
|
-
when String, Symbol
|
128
|
-
name.to_s.split("_").collect(&:capitalize).join.gsub('Ssl', 'SSL').
|
129
|
-
gsub('Cgi', 'CGI').gsub('Ldap', 'LDAP').gsub('Url', 'URL').
|
130
|
-
gsub('Etag', 'ETag')
|
131
|
-
when Array
|
132
|
-
name.collect { |n| apachify(n) }
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
126
|
# Handle options that aren't specially handled
|
137
127
|
#
|
138
128
|
# Method names are NerdCapsed and paramters are quoted, unless the method ends with !
|
139
129
|
def method_missing(method, *args)
|
140
|
-
|
141
|
-
|
130
|
+
method_name = method.to_s
|
131
|
+
if method_name[-1..-1] == "!"
|
132
|
+
method = method_name[0..-2].to_sym
|
142
133
|
else
|
143
|
-
args
|
134
|
+
args.quoteize!
|
144
135
|
end
|
145
136
|
|
146
|
-
self << [ apachify
|
137
|
+
self << [ method.apachify, *args ].compact * ' '
|
147
138
|
end
|
148
139
|
|
149
140
|
# Handle creating block methods
|
@@ -156,7 +147,7 @@ module Apache
|
|
156
147
|
methods.each do |method|
|
157
148
|
self.class.class_eval <<-EOT
|
158
149
|
def #{method}(*name, &block)
|
159
|
-
blockify(
|
150
|
+
blockify("#{method}".apachify, name, &block)
|
160
151
|
end
|
161
152
|
EOT
|
162
153
|
end
|
@@ -167,25 +158,25 @@ module Apache
|
|
167
158
|
# The provided module name is converted into Apache module name format:
|
168
159
|
# if_module(:php5) do #=> <IfModule mod_php5>
|
169
160
|
def if_module(mod, &block)
|
170
|
-
blockify(
|
161
|
+
blockify('if_module'.apachify, "#{mod}_module".to_sym, &block)
|
171
162
|
end
|
172
163
|
|
173
164
|
# Create a directory block, checking to see if the source directory exists.
|
174
165
|
def directory(dir, &block)
|
175
166
|
directory? dir
|
176
|
-
blockify(
|
167
|
+
blockify('directory'.apachify, dir, &block)
|
177
168
|
end
|
178
169
|
|
179
170
|
# Create a LocationMatch block with the provided Regexp:
|
180
171
|
# location_match %r{^/my/location/[a-z0-9]+\.html} do #=> <LocationMatch "^/my/location/[a-z0-9]+\.html">
|
181
172
|
def location_match(regexp, &block)
|
182
|
-
blockify(
|
173
|
+
blockify('location_match'.apachify, regexp.source, &block)
|
183
174
|
end
|
184
175
|
|
185
176
|
# Create a FilesMatch block with the provied Regexp:
|
186
177
|
# files_match %r{\.html$} do #=> FilesMatch "\.html$">
|
187
178
|
def files_match(regexp, &block)
|
188
|
-
blockify(
|
179
|
+
blockify('files_match'.apachify, regexp.source, &block)
|
189
180
|
end
|
190
181
|
|
191
182
|
# Only execute the provided block if APACHE_ENV matches one of the provided enviroment symbols:
|
@@ -194,31 +185,16 @@ module Apache
|
|
194
185
|
self.instance_eval(&block) if env.include?(APACHE_ENV)
|
195
186
|
end
|
196
187
|
|
197
|
-
# Blockify the second parameter of a block
|
198
|
-
#
|
199
|
-
# The name is processed differently based on input object type:
|
200
|
-
# * String - the name is quoteized
|
201
|
-
# * Array - all of the array members are quoteized
|
202
|
-
# * Symbol - the name is to_s
|
203
|
-
def blockify_name(name)
|
204
|
-
case name
|
205
|
-
when String
|
206
|
-
quoteize(name).first
|
207
|
-
when Array
|
208
|
-
(quoteize(*name) * " ")
|
209
|
-
when Symbol
|
210
|
-
name.to_s
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
188
|
# Handle the blockification of a provided block
|
215
189
|
def blockify(tag_name, name, &block)
|
216
|
-
self
|
217
|
-
self << "<#{[ tag_name, blockify_name(name) ].compact * ' '}>"
|
190
|
+
self + [ '', "<#{[ tag_name, name.blockify ].compact * ' '}>" ]
|
218
191
|
@line_indent += 1
|
219
192
|
self.instance_eval(&block)
|
220
193
|
@line_indent -= 1
|
221
|
-
self
|
194
|
+
self + [ "</#{tag_name}>", '' ]
|
195
|
+
end
|
196
|
+
|
197
|
+
def blank_line!
|
222
198
|
self << ""
|
223
199
|
end
|
224
200
|
|
data/lib/apache/directory.rb
CHANGED
@@ -6,7 +6,7 @@ module Apache
|
|
6
6
|
# The options passed into this method are Apachified:
|
7
7
|
# options :exec_cgi, :follow_sym_links #=> Options ExecCGI FollowSymLinks
|
8
8
|
def options(*opt)
|
9
|
-
create_options_list('
|
9
|
+
create_options_list('options'.apachify, *opt)
|
10
10
|
end
|
11
11
|
|
12
12
|
# Create an IndexOptions directive
|
@@ -14,25 +14,12 @@ module Apache
|
|
14
14
|
# The options passed into this method are Apachified:
|
15
15
|
# index_options :fancy_indexing, :suppress_description #=> IndexOptions FancyIndexing SuppressDescription
|
16
16
|
def index_options(*opt)
|
17
|
-
create_options_list('
|
17
|
+
create_options_list('index_options'.apachify, *opt)
|
18
18
|
end
|
19
19
|
|
20
20
|
private
|
21
21
|
def create_options_list(tag, *opt)
|
22
|
-
|
23
|
-
case o
|
24
|
-
when Symbol
|
25
|
-
if o.to_s[0..3] == 'not_'
|
26
|
-
"-#{apachify(o.to_s[4..-1])}"
|
27
|
-
else
|
28
|
-
apachify(o)
|
29
|
-
end
|
30
|
-
else
|
31
|
-
apachify(o)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
self << "#{tag} #{opt * " "}"
|
22
|
+
self << "#{tag} #{opt.collect(&:optionify) * " "}"
|
36
23
|
end
|
37
24
|
end
|
38
25
|
end
|
data/lib/apache/logging.rb
CHANGED
@@ -19,11 +19,16 @@ module Apache
|
|
19
19
|
[ :custom, :error, :script, :rewrite ].each do |type|
|
20
20
|
class_eval <<-EOT
|
21
21
|
def #{type}_log(*opts)
|
22
|
-
handle_log '#{type.to_s.capitalize}Log',
|
22
|
+
handle_log :tag => '#{type.to_s.capitalize}Log',
|
23
|
+
:path => opts.first,
|
24
|
+
:additional_options => opts[1..-1]
|
23
25
|
end
|
24
26
|
|
25
27
|
def rotate_#{type}_log(*opts)
|
26
|
-
handle_log '#{type.to_s.capitalize}Log',
|
28
|
+
handle_log :tag => '#{type.to_s.capitalize}Log',
|
29
|
+
:path => opts.first,
|
30
|
+
:real_path => rotatelogs(*opts[0..1]),
|
31
|
+
:additional_options => opts[2..-1]
|
27
32
|
end
|
28
33
|
EOT
|
29
34
|
end
|
@@ -37,9 +42,12 @@ module Apache
|
|
37
42
|
end
|
38
43
|
|
39
44
|
private
|
40
|
-
def handle_log(
|
41
|
-
writable? path
|
42
|
-
|
45
|
+
def handle_log(info)
|
46
|
+
writable? (path = info[:path])
|
47
|
+
|
48
|
+
real_path = (info[:real_path] || path).quoteize
|
49
|
+
|
50
|
+
self << "#{info[:tag]} #{[real_path, info[:additional_options]].flatten * " "}"
|
43
51
|
end
|
44
52
|
end
|
45
53
|
end
|
data/lib/apache/master.rb
CHANGED
@@ -8,8 +8,14 @@ module Apache
|
|
8
8
|
@config += Modules.build(*modules, &block)
|
9
9
|
end
|
10
10
|
|
11
|
+
# Listen on network interfaces and ports
|
12
|
+
#
|
13
|
+
# Each provided parameter generates a new Listen line:
|
14
|
+
# listen "1.2.3.4:80", "2.3.4.5:80" #=>
|
15
|
+
# Listen "1.2.3.4:80"
|
16
|
+
# Listen "2.3.4.5:80"
|
11
17
|
def listen(*opt)
|
12
|
-
opt.each { |
|
18
|
+
opt.each { |adapter| self << "Listen #{adapter.quoteize}" }
|
13
19
|
end
|
14
20
|
alias :listen! :listen
|
15
21
|
|
@@ -17,9 +23,9 @@ module Apache
|
|
17
23
|
# runner('www', 'www-data') #=>
|
18
24
|
# User www
|
19
25
|
# Group www-data
|
20
|
-
def runner(user, group
|
26
|
+
def runner(user, group)
|
21
27
|
user! user
|
22
|
-
group! group
|
28
|
+
group! group
|
23
29
|
end
|
24
30
|
|
25
31
|
# Enable Passenger on this server
|
@@ -42,27 +48,19 @@ module Apache
|
|
42
48
|
end
|
43
49
|
|
44
50
|
# Set the TCP timeout. Defined here to get around various other timeout methods.
|
45
|
-
def timeout(
|
46
|
-
self << "Timeout #{
|
51
|
+
def timeout(time)
|
52
|
+
self << "Timeout #{time}"
|
47
53
|
end
|
48
54
|
|
49
55
|
# Add a comment to the Apache config. Can pass in either a String or Array of comment lines.
|
50
|
-
def comment(
|
51
|
-
|
52
|
-
case c
|
53
|
-
when String
|
54
|
-
out += c.split("\n")
|
55
|
-
when Array
|
56
|
-
out += c
|
57
|
-
end
|
58
|
-
out << ''
|
59
|
-
self + out.collect { |line| "# #{line.strip}".strip }
|
56
|
+
def comment(what)
|
57
|
+
self + [ '', what.commentize, '' ].flatten.collect { |line| "# #{line.strip}".strip }
|
60
58
|
end
|
61
59
|
|
62
60
|
# Create a ScriptAlias, checking to make sure the filesystem path exists.
|
63
61
|
def script_alias(uri, path)
|
64
62
|
directory? path
|
65
|
-
self << %{ScriptAlias #{
|
63
|
+
self << %{ScriptAlias #{[ uri, path ].quoteize * ' '}}
|
66
64
|
end
|
67
65
|
|
68
66
|
alias :script_alias! :script_alias
|
@@ -86,7 +84,7 @@ module Apache
|
|
86
84
|
# Alias a URL to a directory in the filesystem.
|
87
85
|
# Used to get around reserved Ruby keyword.
|
88
86
|
def apache_alias(*opts)
|
89
|
-
self << "Alias #{quoteize
|
87
|
+
self << "Alias #{opts.quoteize * " "}"
|
90
88
|
end
|
91
89
|
|
92
90
|
# Set multiple headers to be delivered for a particular section
|
@@ -96,27 +94,21 @@ module Apache
|
|
96
94
|
# Header set "Content-dispoaition" "attachment" env=only-for-downloads
|
97
95
|
def set_header(hash)
|
98
96
|
hash.each do |key, value|
|
99
|
-
|
100
|
-
case value
|
101
|
-
when String, Symbol
|
102
|
-
output += " #{quoteize(value)}"
|
103
|
-
when Array
|
104
|
-
output += " #{quoteize(value.first)} #{value.last}"
|
105
|
-
end
|
106
|
-
self << output
|
97
|
+
self << "Header set #{key.quoteize} #{value.headerize}"
|
107
98
|
end
|
108
99
|
end
|
109
100
|
|
110
101
|
def server_name(*opts)
|
111
102
|
if first = opts.shift
|
112
|
-
self << "ServerName #{quoteize
|
113
|
-
opts.each { |
|
103
|
+
self << "ServerName #{first.quoteize}"
|
104
|
+
opts.each { |name| server_alias name } if !opts.empty?
|
114
105
|
end
|
115
106
|
end
|
116
107
|
|
117
108
|
def document_root(*opts)
|
118
|
-
|
119
|
-
|
109
|
+
dir = opts.first
|
110
|
+
directory? dir
|
111
|
+
self << "DocumentRoot #{dir.quoteize}"
|
120
112
|
end
|
121
113
|
alias :document_root! :document_root
|
122
114
|
end
|
data/lib/apache/modules.rb
CHANGED
@@ -1,11 +1,7 @@
|
|
1
|
-
require 'apache/quoteize'
|
2
|
-
|
3
1
|
module Apache
|
4
2
|
# Create lists of modules to load in the Apache 2.2 style (with LoadModule only)
|
5
3
|
class Modules
|
6
4
|
class << self
|
7
|
-
include Apache::Quoteize
|
8
|
-
|
9
5
|
attr_accessor :modules
|
10
6
|
|
11
7
|
# Reset the list of modules to output
|
@@ -27,7 +23,7 @@ module Apache
|
|
27
23
|
def build(*modules, &block)
|
28
24
|
reset!
|
29
25
|
|
30
|
-
modules.each { |
|
26
|
+
modules.each { |mod| self.send(mod) }
|
31
27
|
self.instance_eval(&block) if block
|
32
28
|
|
33
29
|
[ '' ] + @modules + [ '' ]
|
@@ -37,7 +33,7 @@ module Apache
|
|
37
33
|
def method_missing(method, *args)
|
38
34
|
module_name = "#{method}_module"
|
39
35
|
module_path = args[0] || "modules/mod_#{method}.so"
|
40
|
-
@modules << [ 'LoadModule', *
|
36
|
+
@modules << [ 'LoadModule', *[ module_name, module_path ].quoteize ] * " "
|
41
37
|
end
|
42
38
|
end
|
43
39
|
end
|
data/lib/apache/permissions.rb
CHANGED
@@ -21,7 +21,7 @@ module Apache
|
|
21
21
|
#
|
22
22
|
# allow_from '127.0.0.1' #=> Allow from "127.0.0.1"
|
23
23
|
def allow_from(*where)
|
24
|
-
self << "Allow from #{quoteize
|
24
|
+
self << "Allow from #{where.quoteize * " "}"
|
25
25
|
end
|
26
26
|
|
27
27
|
# Specify default access order
|
@@ -58,26 +58,18 @@ module Apache
|
|
58
58
|
# basic_authentication "My other secret", '/my.users', :user => [ :john ]
|
59
59
|
def basic_authentication(zone, users_file, requires = {})
|
60
60
|
exist? users_file
|
61
|
-
|
62
|
-
auth_name zone
|
61
|
+
authentication_basics(zone, requires)
|
63
62
|
auth_user_file users_file
|
64
|
-
requires.each do |type, values|
|
65
|
-
apache_require type, *values
|
66
|
-
end
|
67
63
|
end
|
68
64
|
|
69
65
|
alias :basic_authentication! :basic_authentication
|
70
66
|
|
71
67
|
# Set up LDAP authentication
|
72
68
|
def ldap_authentication(zone, url, requires = {})
|
73
|
-
|
74
|
-
auth_name zone
|
69
|
+
authentication_basics(zone, requires)
|
75
70
|
auth_basic_provider :ldap
|
76
71
|
authz_ldap_authoritative :on
|
77
72
|
auth_ldap_url url
|
78
|
-
requires.each do |type, values|
|
79
|
-
apache_require type, *values
|
80
|
-
end
|
81
73
|
end
|
82
74
|
|
83
75
|
alias :ldap_authentication! :ldap_authentication
|
@@ -87,5 +79,14 @@ module Apache
|
|
87
79
|
def apache_require(*opts)
|
88
80
|
self << "Require #{opts.compact * " "}"
|
89
81
|
end
|
82
|
+
|
83
|
+
private
|
84
|
+
def authentication_basics(zone, requires)
|
85
|
+
auth_type :basic
|
86
|
+
auth_name zone
|
87
|
+
requires.each do |type, values|
|
88
|
+
apache_require type, *values
|
89
|
+
end
|
90
|
+
end
|
90
91
|
end
|
91
92
|
end
|
data/lib/apache/rewrites.rb
CHANGED
@@ -9,7 +9,7 @@ module Apache
|
|
9
9
|
# RewriteEngine on
|
10
10
|
# RewriteLogLevel 1
|
11
11
|
def enable_rewrite_engine(options = {})
|
12
|
-
|
12
|
+
blank_line!
|
13
13
|
rewrite_engine! :on
|
14
14
|
options.each do |option, value|
|
15
15
|
case option
|
@@ -17,7 +17,7 @@ module Apache
|
|
17
17
|
rewrite_log_level! value
|
18
18
|
end
|
19
19
|
end
|
20
|
-
|
20
|
+
blank_line!
|
21
21
|
end
|
22
22
|
|
23
23
|
# Pass the block to RewriteManager.build
|
@@ -27,17 +27,19 @@ module Apache
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def rewrite(*opt, &block)
|
30
|
-
raise "You probably want rewrites #{quoteize
|
30
|
+
raise "You probably want rewrites #{opt.quoteize * " "} do" if block
|
31
31
|
end
|
32
32
|
|
33
33
|
# Create a permanent Redirect
|
34
34
|
#
|
35
35
|
# r301 '/here', '/there' #=> Redirect permanent "/here" "/there"
|
36
36
|
def r301(*opt)
|
37
|
-
if
|
38
|
-
|
37
|
+
if first = opt.first
|
38
|
+
if !first.kind_of?(::String)
|
39
|
+
raise "First parameter should be a String. Did you mean to wrap this in a rewrites block? #{first}"
|
40
|
+
end
|
39
41
|
end
|
40
|
-
self << "Redirect permanent #{quoteize
|
42
|
+
self << "Redirect permanent #{opt.quoteize * " "}"
|
41
43
|
end
|
42
44
|
end
|
43
45
|
|
@@ -49,30 +51,34 @@ module Apache
|
|
49
51
|
# Reset the current list of rewrites
|
50
52
|
def reset!
|
51
53
|
@rewrites = []
|
54
|
+
@any_tests = false
|
55
|
+
@needs_tests = false
|
52
56
|
end
|
53
57
|
|
54
58
|
# Build rewritable things from the provided block
|
55
59
|
def build(*opt, &block)
|
56
60
|
reset!
|
57
61
|
|
58
|
-
@any_tests = false
|
59
|
-
@needs_tests = false
|
60
62
|
self.instance_eval(&block)
|
61
63
|
|
62
|
-
name = opt.first
|
64
|
+
name = block_name(opt.first)
|
63
65
|
|
64
|
-
|
65
|
-
puts " [#{"rewrite".foreground(:blue)}] no tests found for #{name}"
|
66
|
-
end
|
66
|
+
show_messages! name
|
67
67
|
|
68
|
-
|
69
|
-
|
70
|
-
end
|
68
|
+
[ "# #{name}", @rewrites.collect(&:to_a) ].flatten
|
69
|
+
end
|
71
70
|
|
72
|
-
|
73
|
-
|
71
|
+
def block_name(first)
|
72
|
+
first_rewrite = @rewrites.first
|
74
73
|
|
75
|
-
|
74
|
+
first || (@rewrites.empty? ? 'unnamed block' : "#{first_rewrite.from} => #{first_rewrite.to}")
|
75
|
+
end
|
76
|
+
|
77
|
+
def show_messages!(name)
|
78
|
+
blue = "rewrite".foreground(:blue)
|
79
|
+
|
80
|
+
puts " [#{blue}] no tests found for #{name}" if !@any_tests && !@rewrites.empty?
|
81
|
+
puts " [#{blue}] #{name} needs more tests" if @needs_tests
|
76
82
|
end
|
77
83
|
|
78
84
|
# Commit the latest rewritable thing to the list of rewrites
|
@@ -122,19 +128,18 @@ module Apache
|
|
122
128
|
def rewrite_test(from, to, opts = {})
|
123
129
|
@any_tests = true
|
124
130
|
orig_from = from.dup
|
125
|
-
@rewrites.each do |
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
from = pre_from if (r.to == '-')
|
130
|
-
from = :http_forbidden if (r.forbidden?)
|
131
|
-
break if r.stop_if_match?
|
131
|
+
@rewrites.each do |rewrite|
|
132
|
+
if rewrite.match?(from, opts)
|
133
|
+
from = rewrite.from_tester(from, opts)
|
134
|
+
break if rewrite.stop_if_match?
|
132
135
|
end
|
133
136
|
end
|
134
137
|
|
135
138
|
if from != to
|
136
|
-
|
137
|
-
|
139
|
+
[ "#{orig_from} >> #{to} failed!", "Result: #{from}"
|
140
|
+
].each do |line|
|
141
|
+
puts " [#{"rewrite".foreground(:blue)}] #{line}"
|
142
|
+
end
|
138
143
|
end
|
139
144
|
end
|
140
145
|
|
@@ -170,30 +175,16 @@ module Apache
|
|
170
175
|
module RegularExpressionMatcher
|
171
176
|
# Test this rewritable thing
|
172
177
|
def test(from, opts = {})
|
173
|
-
from
|
174
|
-
replace_placeholders(from, opts)
|
178
|
+
from.gsub(@from, @to.gsub(/\$([0-9])/) { |match| '\\' + $1 }).replace_placeholderize(opts)
|
175
179
|
end
|
176
180
|
|
177
181
|
def match?(from, opts = {})
|
178
|
-
|
179
|
-
end
|
180
|
-
|
181
|
-
# Replace the placeholders in this rewritable thing
|
182
|
-
def replace_placeholders(string, opts)
|
183
|
-
opts.each do |opt, value|
|
184
|
-
case value
|
185
|
-
when String
|
186
|
-
string = string.gsub('%{' + opt.to_s.upcase + '}', value)
|
187
|
-
end
|
188
|
-
end
|
189
|
-
string.gsub(%r{%\{[^\}]+\}}, '')
|
182
|
+
from.replace_placeholderize(opts)[@from]
|
190
183
|
end
|
191
184
|
end
|
192
185
|
|
193
186
|
# A matchable thing to be extended
|
194
187
|
class MatchableThing
|
195
|
-
include Apache::Quoteize
|
196
|
-
|
197
188
|
attr_reader :from, :to
|
198
189
|
|
199
190
|
# The Apache directive tag for this thing
|
@@ -205,12 +196,14 @@ module Apache
|
|
205
196
|
end
|
206
197
|
|
207
198
|
def rule(from, to)
|
199
|
+
raise "from must be a Regexp" if (!from.kind_of?(Regexp) && require_regexp?)
|
200
|
+
|
208
201
|
@from = from
|
209
202
|
@to = to
|
210
203
|
end
|
211
204
|
|
212
205
|
def to_s
|
213
|
-
"#{tag} #{[
|
206
|
+
"#{tag} #{[@from, @to].quoteize.compact.flatten * " "}"
|
214
207
|
end
|
215
208
|
|
216
209
|
def to_a
|
@@ -219,6 +212,14 @@ module Apache
|
|
219
212
|
|
220
213
|
def stop_if_match?; false; end
|
221
214
|
def forbidden?; false; end
|
215
|
+
def require_regexp?; false; end
|
216
|
+
|
217
|
+
def from_tester(from, opts)
|
218
|
+
from = test(from, opts)
|
219
|
+
from = @from if (@to == '-')
|
220
|
+
from = :http_forbidden if (forbidden?)
|
221
|
+
from
|
222
|
+
end
|
222
223
|
end
|
223
224
|
|
224
225
|
# A RewriteRule definition
|
@@ -237,33 +238,23 @@ module Apache
|
|
237
238
|
# Define the rule, passing in additional options
|
238
239
|
#
|
239
240
|
# rule %r{^/here}, '/there', { :last => true, :preserve_query_string => true }
|
241
|
+
#
|
242
|
+
# Options for the options hash are:
|
243
|
+
# * :last => true #=> [L]
|
244
|
+
# * :forbidden => true #=> [F]
|
245
|
+
# * :no_escape => true #=> [NE]
|
246
|
+
# * :redirect => true #=> [R]
|
247
|
+
# * :redirect => 302 #=> [R=302]
|
248
|
+
# * :pass_through => true #=> [PT]
|
249
|
+
# * :preserve_query_string => true #=> [QSA]
|
250
|
+
# * :query_string_append => true #=> [QSA]
|
251
|
+
# * :env => 'what' #=> [E=what]
|
240
252
|
def rule(from, to, options = {})
|
241
253
|
super(from, to)
|
242
254
|
|
243
|
-
raise "from must be a Regexp" if !from.kind_of?(Regexp)
|
244
|
-
|
245
255
|
@input_options = options
|
246
256
|
|
247
|
-
options = options.
|
248
|
-
case key
|
249
|
-
when :last
|
250
|
-
'L'
|
251
|
-
when :forbidden
|
252
|
-
'F'
|
253
|
-
when :no_escape
|
254
|
-
'NE'
|
255
|
-
when :redirect
|
256
|
-
(value == true) ? 'R' : "R=#{value}"
|
257
|
-
when :pass_through
|
258
|
-
'PT'
|
259
|
-
when :preserve_query_string, :query_string_append
|
260
|
-
'QSA'
|
261
|
-
when :env
|
262
|
-
"E=#{value}"
|
263
|
-
end
|
264
|
-
end.compact.sort
|
265
|
-
|
266
|
-
@options = !options.empty? ? "[#{options * ','}]" : nil
|
257
|
+
@options = options.rewrite_rule_optionify.rewrite_option_listify
|
267
258
|
end
|
268
259
|
|
269
260
|
# Add a RewriteCondition to this RewriteRule
|
@@ -274,37 +265,43 @@ module Apache
|
|
274
265
|
@conditions << rewrite_cond
|
275
266
|
end
|
276
267
|
|
268
|
+
def initial_blank!
|
269
|
+
@conditions.empty? ? nil : ''
|
270
|
+
end
|
271
|
+
|
277
272
|
def to_s
|
278
|
-
"#{tag} #{[
|
273
|
+
"#{tag} #{[@from.source.quoteize, @to.quoteize, @options].compact.flatten * " "}"
|
279
274
|
end
|
280
275
|
|
281
276
|
def to_a
|
282
|
-
[
|
277
|
+
[ initial_blank!, @conditions.collect(&:to_s), super ].flatten
|
283
278
|
end
|
284
279
|
|
285
280
|
# Test this RewriteRule, ensuring the RewriteConds also match
|
286
281
|
def test(from, opts = {})
|
282
|
+
ensure_opts!(opts)
|
287
283
|
opts[:request_uri] = from
|
288
284
|
result = from
|
289
285
|
|
290
286
|
result = super(from, opts) if match?(from, opts)
|
291
287
|
|
292
|
-
|
288
|
+
result.replace_placeholderize(opts)
|
289
|
+
end
|
290
|
+
|
291
|
+
def ensure_opts!(opts)
|
292
|
+
raise "Options must be a hash" if !opts
|
293
|
+
raise "Options must be a hash" if !opts.kind_of? ::Hash
|
293
294
|
end
|
294
295
|
|
295
296
|
def match?(from, opts = {})
|
297
|
+
ensure_opts!(opts)
|
296
298
|
opts[:request_uri] = from
|
297
|
-
ok = true
|
298
299
|
|
299
|
-
@conditions.each do |
|
300
|
-
|
300
|
+
@conditions.each do |cond|
|
301
|
+
return false if !cond.test(from, opts)
|
301
302
|
end
|
302
303
|
|
303
|
-
|
304
|
-
super(from, opts)
|
305
|
-
else
|
306
|
-
false
|
307
|
-
end
|
304
|
+
super(from, opts)
|
308
305
|
end
|
309
306
|
|
310
307
|
def stop_if_match?
|
@@ -314,25 +311,32 @@ module Apache
|
|
314
311
|
def forbidden?
|
315
312
|
@input_options[:forbidden]
|
316
313
|
end
|
314
|
+
|
315
|
+
def require_regexp?; true; end
|
317
316
|
end
|
318
317
|
|
319
318
|
# A permanent RedirectMatch
|
320
319
|
class RedirectMatchPermanent < MatchableThing
|
321
320
|
include RegularExpressionMatcher
|
322
321
|
|
322
|
+
# The Apache directive for this object.
|
323
323
|
def tag; 'RedirectMatch permanent'; end
|
324
324
|
|
325
|
+
# Define a RedirectMatch rule.
|
325
326
|
def rule(from, to)
|
326
327
|
super(from, to)
|
327
328
|
|
328
329
|
raise "from must be a Regexp" if !from.kind_of?(Regexp)
|
329
330
|
end
|
330
331
|
|
332
|
+
# Convert this tag to a String.
|
331
333
|
def to_s
|
332
|
-
"#{tag} #{[
|
334
|
+
"#{tag} #{[@from.source, @to].quoteize.compact.flatten * " "}"
|
333
335
|
end
|
334
336
|
|
337
|
+
# Stop rewrite testing if this object matches.
|
335
338
|
def stop_if_match; true; end
|
339
|
+
def require_regexp?; true; end
|
336
340
|
end
|
337
341
|
|
338
342
|
# A RewriteCond
|
@@ -345,48 +349,47 @@ module Apache
|
|
345
349
|
#
|
346
350
|
# rule "%{REQUEST_FILENAME}", "^/here", :case_insensitive #=>
|
347
351
|
# RewriteCond "%{REQUEST_FILENAME}" "^/here" [NC]
|
352
|
+
#
|
353
|
+
# Additional parameters can include the following:
|
354
|
+
# * :or #=> [OR]
|
355
|
+
# * :case_insensitive #=> [NC]
|
356
|
+
# * :no_vary #=> [NV]
|
348
357
|
def rule(from, to, *opts)
|
349
358
|
super(from, to)
|
350
359
|
|
351
|
-
options = opts.
|
352
|
-
case opt
|
353
|
-
when :or
|
354
|
-
'OR'
|
355
|
-
when :case_insensitive
|
356
|
-
'NC'
|
357
|
-
when :no_vary
|
358
|
-
'NV'
|
359
|
-
end
|
360
|
-
end
|
361
|
-
|
362
|
-
@options = (!options.empty?) ? "[#{options * ','}]" : nil
|
360
|
+
@options = opts.rewrite_cond_optionify.rewrite_option_listify
|
363
361
|
end
|
364
362
|
|
365
363
|
alias :cond :rule
|
366
364
|
|
365
|
+
# Create a new RewriteCond
|
367
366
|
def initialize
|
368
367
|
super
|
369
368
|
@options = nil
|
370
369
|
end
|
371
370
|
|
371
|
+
# Convert this tag to a String.
|
372
372
|
def to_s
|
373
|
-
"#{tag} #{[
|
373
|
+
"#{tag} #{[@from.quoteize, @to.quoteize, @options].compact.flatten * " "}"
|
374
|
+
end
|
375
|
+
|
376
|
+
def inverse_result?
|
377
|
+
@to[0..0] == '!'
|
378
|
+
end
|
379
|
+
|
380
|
+
def actual_to
|
381
|
+
to = @to
|
382
|
+
to = to[1..-1] if inverse_result?
|
383
|
+
to
|
374
384
|
end
|
375
385
|
|
376
386
|
# Test this RewriteCond
|
377
387
|
def test(from, opts = {})
|
378
388
|
super(from, opts)
|
379
|
-
source =
|
389
|
+
source = @from.replace_placeholderize(opts)
|
380
390
|
|
381
|
-
to =
|
382
|
-
reverse = false
|
383
|
-
|
384
|
-
if @to[0..0] == '!'
|
385
|
-
reverse = true
|
386
|
-
to = @to[1..-1]
|
387
|
-
end
|
391
|
+
to = actual_to
|
388
392
|
|
389
|
-
result = false
|
390
393
|
case to
|
391
394
|
when '-f'
|
392
395
|
result = opts[:files].include?(source) if opts[:files]
|
@@ -394,7 +397,7 @@ module Apache
|
|
394
397
|
result = source[Regexp.new(to)]
|
395
398
|
end
|
396
399
|
|
397
|
-
|
400
|
+
inverse_result? ? !result : result
|
398
401
|
end
|
399
402
|
end
|
400
403
|
end
|
data/lib/apache/ssl.rb
CHANGED
@@ -1,18 +1,17 @@
|
|
1
1
|
module Apache
|
2
2
|
module SSL
|
3
3
|
def enable_ssl_engine(options = {})
|
4
|
-
self
|
5
|
-
self << "SSLEngine on"
|
4
|
+
self + [ '', "SSLEngine on" ]
|
6
5
|
options.each do |key, value|
|
7
|
-
value =
|
6
|
+
value = value.quoteize
|
8
7
|
case key
|
9
8
|
when :certificate_file, :certificate_key_file
|
10
|
-
self << "SSL#{apachify
|
9
|
+
self << "SSL#{key.apachify} #{value}"
|
11
10
|
when :ca_certificate_file
|
12
11
|
self << "SSLCACertificateFile #{value}"
|
13
12
|
end
|
14
13
|
end
|
15
|
-
|
14
|
+
blank_line!
|
16
15
|
end
|
17
16
|
end
|
18
17
|
end
|
metadata
CHANGED
@@ -5,7 +5,9 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 2
|
8
|
-
|
8
|
+
- 2
|
9
|
+
- 1
|
10
|
+
version: 0.2.2.1
|
9
11
|
platform: ruby
|
10
12
|
authors:
|
11
13
|
- John Bintz
|
@@ -13,7 +15,7 @@ autorequire:
|
|
13
15
|
bindir: bin
|
14
16
|
cert_chain: []
|
15
17
|
|
16
|
-
date: 2010-05-
|
18
|
+
date: 2010-05-19 00:00:00 -04:00
|
17
19
|
default_executable:
|
18
20
|
dependencies:
|
19
21
|
- !ruby/object:Gem::Dependency
|
@@ -39,6 +41,7 @@ extra_rdoc_files:
|
|
39
41
|
- README.rdoc
|
40
42
|
- bin/apache-configurator
|
41
43
|
- lib/apache.rb
|
44
|
+
- lib/apache/apachify.rb
|
42
45
|
- lib/apache/config.rb
|
43
46
|
- lib/apache/directory.rb
|
44
47
|
- lib/apache/logging.rb
|
@@ -47,7 +50,6 @@ extra_rdoc_files:
|
|
47
50
|
- lib/apache/mpm_prefork.rb
|
48
51
|
- lib/apache/performance.rb
|
49
52
|
- lib/apache/permissions.rb
|
50
|
-
- lib/apache/quoteize.rb
|
51
53
|
- lib/apache/rake/create.rb
|
52
54
|
- lib/apache/rewrites.rb
|
53
55
|
- lib/apache/ssl.rb
|
@@ -55,8 +57,11 @@ files:
|
|
55
57
|
- CHANGELOG
|
56
58
|
- README.rdoc
|
57
59
|
- Rakefile
|
60
|
+
- apache-config-generator.gemspec
|
58
61
|
- bin/apache-configurator
|
62
|
+
- config/config.reek
|
59
63
|
- lib/apache.rb
|
64
|
+
- lib/apache/apachify.rb
|
60
65
|
- lib/apache/config.rb
|
61
66
|
- lib/apache/directory.rb
|
62
67
|
- lib/apache/logging.rb
|
@@ -65,14 +70,12 @@ files:
|
|
65
70
|
- lib/apache/mpm_prefork.rb
|
66
71
|
- lib/apache/performance.rb
|
67
72
|
- lib/apache/permissions.rb
|
68
|
-
- lib/apache/quoteize.rb
|
69
73
|
- lib/apache/rake/create.rb
|
70
74
|
- lib/apache/rewrites.rb
|
71
75
|
- lib/apache/ssl.rb
|
72
76
|
- skel/Rakefile
|
73
77
|
- skel/config.yml
|
74
78
|
- Manifest
|
75
|
-
- apache-config-generator.gemspec
|
76
79
|
has_rdoc: true
|
77
80
|
homepage: ""
|
78
81
|
licenses: []
|
data/lib/apache/quoteize.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
module Apache
|
2
|
-
# Add quotes around parameters as needed
|
3
|
-
module Quoteize
|
4
|
-
# Add quotes around most parameters, and don't add quotes around Symbols
|
5
|
-
def quoteize(*args)
|
6
|
-
args.collect do |arg|
|
7
|
-
case arg
|
8
|
-
when Symbol
|
9
|
-
arg.to_s.gsub('_', ' ')
|
10
|
-
else
|
11
|
-
%{"#{arg}"}
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|