strelka 0.18.0 → 0.19.0

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.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/History.rdoc +24 -0
  5. data/IDEAS.rdoc +0 -1
  6. data/README.rdoc +12 -6
  7. data/Rakefile +4 -94
  8. data/lib/strelka.rb +1 -1
  9. data/lib/strelka/app.rb +2 -3
  10. data/lib/strelka/app/parameters.rb +3 -12
  11. data/lib/strelka/app/restresources.rb +0 -3
  12. data/lib/strelka/cookie.rb +1 -1
  13. data/lib/strelka/mixins.rb +1 -1
  14. data/lib/strelka/multirunner.rb +34 -11
  15. data/lib/strelka/paramvalidator.rb +22 -45
  16. data/lib/strelka/session/default.rb +1 -1
  17. data/spec/strelka/app/parameters_spec.rb +1 -27
  18. data/spec/strelka/app_spec.rb +0 -12
  19. data/spec/strelka/mixins_spec.rb +0 -10
  20. data/spec/strelka/paramvalidator_spec.rb +4 -54
  21. metadata +51 -143
  22. metadata.gz.sig +0 -0
  23. data/.gemtest +0 -0
  24. data/ChangeLog +0 -3824
  25. data/MILESTONES.rdoc +0 -24
  26. data/Manifest.txt +0 -144
  27. data/contrib/hoetemplate/History.rdoc.erb +0 -4
  28. data/contrib/hoetemplate/Manifest.txt.erb +0 -8
  29. data/contrib/hoetemplate/README.rdoc.erb +0 -35
  30. data/contrib/hoetemplate/Rakefile.erb +0 -24
  31. data/contrib/hoetemplate/data/project/apps/file_name_app +0 -37
  32. data/contrib/hoetemplate/data/project/templates/layout.tmpl.erb +0 -13
  33. data/contrib/hoetemplate/data/project/templates/top.tmpl.erb +0 -8
  34. data/contrib/hoetemplate/lib/file_name.rb.erb +0 -15
  35. data/contrib/hoetemplate/spec/file_name_spec.rb.erb +0 -21
  36. data/contrib/strelka-dogs/doggie6.svg +0 -271
  37. data/contrib/strelka-dogs/doggie7.svg +0 -49
  38. data/examples/Procfile +0 -9
  39. data/examples/apps/auth-demo +0 -29
  40. data/examples/apps/auth-demo2 +0 -37
  41. data/examples/apps/hello-world +0 -30
  42. data/examples/apps/sessions-demo +0 -42
  43. data/examples/apps/upload-demo +0 -74
  44. data/examples/apps/ws-chat +0 -69
  45. data/examples/apps/ws-echo +0 -61
  46. data/examples/config.yml +0 -33
  47. data/examples/gen-config.rb +0 -52
  48. data/examples/static/examples.css +0 -4
  49. data/examples/static/examples.html +0 -33
  50. data/examples/strelka.conf.example +0 -51
  51. data/examples/templates/auth-form.tmpl +0 -14
  52. data/examples/templates/auth-success.tmpl +0 -5
  53. data/examples/templates/layout.tmpl +0 -31
  54. data/examples/templates/upload-form.tmpl +0 -17
  55. data/examples/templates/upload-success.tmpl +0 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7dad453a5871872ca4f793e78253510d82e4ed27fbb173c82629501c60962477
4
- data.tar.gz: 8bf1feafca4c80397808322ed09c93b9c6ed56cd917c5db12ab0f1e33cf8a59f
3
+ metadata.gz: 3a9926577075cbf009622a30ab13dc4f1fe38c4ba943419c318359d6648a58ba
4
+ data.tar.gz: 5c19c5a7b328e6cedbba07107a3c732e62e62aa71d0e48fb6b8e5efea3b40ca9
5
5
  SHA512:
6
- metadata.gz: a220e3f1d3f6fdaf963173170dc2186ebf580a2b93c522017df7cfd7ba3ef3d45850943552a510e7bacbed11271dca7d0a42f1349b74651c64c5a9a957f852f5
7
- data.tar.gz: b8eb408709e9fb4269d0516236d9d203a4ea3e59580b82c9b8d9939d7932c6722d79f0076aa44fd08638ce890dc7c6270e4c772ed9b064d698e043055596078e
6
+ metadata.gz: 1f44a6a2c1be7c96a96cb04111ff914c4022bdf52df94df541b183ce0150222b51d8cd21dedf60cb697fcfddb5c2a66dd339e4dc8caf1f862afa2e1c8bb313f6
7
+ data.tar.gz: 2e92f0355c0858e750bb0bbc5dfa8f3eb91103bf7632ba53bbeb7a671523bd6c0a659f2deadfb05be91d35efcd7e2a8fd603654e836fa82b47020ad43ad18192
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -1,3 +1,27 @@
1
+ = Release History for strelka
2
+
3
+ ---
4
+
5
+ == v0.19.0 [2020-02-05] Mahlon E. Smith <mahlon@martini.nu>
6
+
7
+ Bugfixes:
8
+
9
+ - Separate reaping from signal sending (FreeBSD)
10
+
11
+ Improvements:
12
+
13
+ - Default devmode to false, requiring it to be explicitly enabled.
14
+ - Remove untainting in preparation for Ruby 3.
15
+
16
+
17
+ == v0.18.0 [2019-09-25] Mahlon E. Smith <mahlon@martini.nu>
18
+
19
+ Bugfixes:
20
+
21
+ - Add an optional hook to perform arbitrary actions before forking.
22
+ - Make the signal handling for running multiple handlers less naive.
23
+
24
+
1
25
  == v0.17.0 [2019-09-18] Mahlon E. Smith <mahlon@martini.nu>
2
26
 
3
27
  Enhancements:
data/IDEAS.rdoc CHANGED
@@ -47,7 +47,6 @@ gem sandboxing.
47
47
  another app via its appid.
48
48
 
49
49
 
50
-
51
50
  === Future Plugins
52
51
 
53
52
  * CORS (cors) — manage {Cross-Origin Resource Sharing}[http://www.html5rocks.com/en/tutorials/cors/]
@@ -1,9 +1,9 @@
1
1
  = Strelka (Стрелка)
2
2
 
3
- home :: http://deveiate.org/projects/Strelka
4
- code :: http://bitbucket.org/ged/Strelka
5
- github :: https://github.com/ged/strelka
6
- docs :: http://deveiate.org/code/strelka
3
+ home:: https://hg.sr.ht/~ged/Strelka
4
+ code:: https://hg.sr.ht/~ged/Strelka/browse
5
+ github:: https://github.com/ged/strelka
6
+ docs:: http://deveiate.org/code/strelka
7
7
 
8
8
 
9
9
  == Description
@@ -197,7 +197,7 @@ Support for sending partial responses via the Chunked encoding.
197
197
  == Contributing
198
198
 
199
199
  You can check out the current development source with Mercurial via its
200
- {project page}[http://bitbucket.org/ged/Strelka]. Or if you prefer Git, via
200
+ {project page}[http://bitbucket.org/ged/Strelka]. Or if you prefer Git, via
201
201
  {its Github mirror}[https://github.com/ged/strelka].
202
202
 
203
203
  After checking out the source, run:
@@ -208,9 +208,15 @@ This task will install any missing dependencies, run the tests/specs,
208
208
  and generate the API documentation.
209
209
 
210
210
 
211
+ == Authors
212
+
213
+ - Mahlon E. Smith <mahlon@martini.nu>
214
+ - Michael Granger <ged@faeriemud.org>
215
+
216
+
211
217
  == License
212
218
 
213
- Copyright (c) 2011-2016, Michael Granger and Mahlon E. Smith
219
+ Copyright (c) 2011-2020, Michael Granger and Mahlon E. Smith
214
220
  All rights reserved.
215
221
 
216
222
  Redistribution and use in source and binary forms, with or without
data/Rakefile CHANGED
@@ -1,98 +1,8 @@
1
- #!/usr/bin/env rake
1
+ #!/usr/bin/env ruby -S rake
2
2
 
3
- require 'rake/clean'
3
+ require 'rake/deveiate'
4
4
 
5
- begin
6
- require 'hoe'
7
- rescue LoadError
8
- abort "This Rakefile requires 'hoe' (gem install hoe)"
5
+ Rake::DevEiate.setup( 'strelka' ) do |project|
6
+ project.publish_to = 'deveiate:/usr/local/www/public/code'
9
7
  end
10
8
 
11
- GEMSPEC = 'strelka.gemspec'
12
-
13
- Hoe.plugin :mercurial
14
- Hoe.plugin :signing
15
- Hoe.plugin :deveiate
16
-
17
- Hoe.plugins.delete :rubyforge
18
-
19
- hoespec = Hoe.spec( 'strelka' ) do
20
- self.readme_file = 'README.rdoc'
21
- self.history_file = 'History.rdoc'
22
- self.extra_rdoc_files = FileList[ '*.rdoc' ]
23
- self.license "BSD"
24
-
25
- self.developer 'Mahlon E. Smith', 'mahlon@martini.nu'
26
- self.developer 'Michael Granger', 'ged@FaerieMUD.org'
27
-
28
- self.dependency 'configurability', '~> 3.1'
29
- self.dependency 'foreman', '~> 0.62'
30
- self.dependency 'highline', '~> 1.6'
31
- self.dependency 'inversion', '~> 1.0'
32
- self.dependency 'loggability', '~> 0.9'
33
- self.dependency 'mongrel2', '~> 0.53'
34
- self.dependency 'pluggability', '~> 0.4'
35
- self.dependency 'sysexits', '~> 1.1'
36
- self.dependency 'uuidtools', '~> 2.1'
37
- self.dependency 'safe_yaml', '~> 1.0'
38
- self.dependency 'gli', '~> 2.14'
39
-
40
- self.dependency 'hoe-deveiate', '~> 0.6', :developer
41
- self.dependency 'rspec', '~> 3.0', :developer
42
- self.dependency 'simplecov', '~> 0.7', :developer
43
- self.dependency 'rdoc-generator-fivefish', '~> 0.1', :developer
44
-
45
- self.require_ruby_version( '>=2.2.0' )
46
- self.hg_sign_tags = true if self.respond_to?( :hg_sign_tags= )
47
- self.check_history_on_release = true if self.respond_to?( :check_history_on_release= )
48
- self.rdoc_locations << "deveiate:/usr/local/www/public/code/#{remote_rdoc_dir}"
49
- end
50
-
51
- ENV['VERSION'] ||= hoespec.spec.version.to_s
52
-
53
- # Ensure the specs pass before checking in
54
- task 'hg:precheckin' => [:check_history, :check_manifest, :spec]
55
-
56
- if Rake::Task.task_defined?( '.gemtest' )
57
- Rake::Task['.gemtest'].clear
58
- task '.gemtest' do
59
- $stderr.puts "Not including a .gemtest until I'm confident the test suite is idempotent."
60
- end
61
- end
62
-
63
- desc "Build a coverage report"
64
- task :coverage do
65
- ENV["COVERAGE"] = 'yes'
66
- Rake::Task[:spec].invoke
67
- end
68
-
69
-
70
- # Use the fivefish formatter for docs generated from development checkout
71
- if File.directory?( '.hg' )
72
- require 'rdoc/task'
73
-
74
- Rake::Task[ 'docs' ].clear
75
- RDoc::Task.new( 'docs' ) do |rdoc|
76
- rdoc.main = "README.rdoc"
77
- rdoc.rdoc_files.include( "*.rdoc", "ChangeLog", "lib/**/*.rb" )
78
- rdoc.generator = :fivefish
79
- rdoc.title = "Strelka: A Ruby Web Framework"
80
- rdoc.rdoc_dir = 'doc'
81
- end
82
- end
83
-
84
- task :gemspec => GEMSPEC
85
- file GEMSPEC => __FILE__
86
- task GEMSPEC do |task|
87
- spec = $hoespec.spec
88
- spec.files.delete( '.gemtest' )
89
- spec.signing_key = nil
90
- spec.cert_chain = [ 'certs/mahlon.pem', 'certs/ged.pem' ]
91
- spec.version = "#{spec.version.bump}.0.pre#{Time.now.strftime("%Y%m%d%H%M%S")}"
92
- File.open( task.name, 'w' ) do |fh|
93
- fh.write( spec.to_ruby )
94
- end
95
- end
96
-
97
- CLOBBER.include( GEMSPEC.to_s )
98
- task :default => :gemspec
@@ -22,7 +22,7 @@ module Strelka
22
22
  extend Loggability
23
23
 
24
24
  # Library version constant
25
- VERSION = '0.18.0'
25
+ VERSION = '0.19.0'
26
26
 
27
27
  # Version-control revision constant
28
28
  REVISION = %q$Revision$
@@ -32,7 +32,7 @@ class Strelka::App < Mongrel2::Handler
32
32
 
33
33
  ##
34
34
  # 'Developer mode' flag.
35
- setting :devmode, default: true
35
+ setting :devmode, default: false
36
36
 
37
37
  end
38
38
 
@@ -40,7 +40,6 @@ class Strelka::App < Mongrel2::Handler
40
40
  # Class instance variables
41
41
  @devmode = false
42
42
  @default_type = nil
43
- @loading_file = nil
44
43
  @subclasses = Hash.new {|h,k| h[k] = [] }
45
44
 
46
45
 
@@ -54,7 +53,7 @@ class Strelka::App < Mongrel2::Handler
54
53
  ### Developer mode is mostly informational by default (it just makes logging more
55
54
  ### verbose), but plugins and such might alter their behavior based on this setting.
56
55
  def self::devmode?
57
- return @devmode || $DEBUG
56
+ return @devmode
58
57
  end
59
58
  singleton_method_alias :in_devmode?, :devmode?
60
59
 
@@ -8,11 +8,10 @@ require 'strelka/plugins'
8
8
  require 'strelka/paramvalidator'
9
9
 
10
10
 
11
- # Parameter validation and untainting for Strelka apps.
11
+ # Parameter validation for Strelka apps.
12
12
  #
13
- # When you include the +:parameters+ plugin, you can declare valid parameters, specify
14
- # constraints that describe what they should contain, and automatically untaint the incoming
15
- # values that match.
13
+ # When you include the +:parameters+ plugin, you can declare valid parameters and specify
14
+ # constraints that describe what incoming values should match.
16
15
  #
17
16
  # == Parameter Declaration
18
17
  #
@@ -101,14 +100,6 @@ module Strelka::App::Parameters
101
100
  end
102
101
 
103
102
 
104
- ### Get/set the untainting flag. If set, all parameters which match their constraints
105
- ### will also be untainted.
106
- def untaint_all_constraints( newval=nil )
107
- self.paramvalidator.untaint_all = newval unless newval.nil?
108
- return self.paramvalidator.untaint_all?
109
- end
110
-
111
-
112
103
  ### Inheritance hook -- inheriting classes inherit their parents' parameter
113
104
  ### declarations, too.
114
105
  def inherited( subclass )
@@ -152,9 +152,6 @@ module Strelka::App::RestResources
152
152
  route = [ options[:prefix], name ].compact.join( '/' )
153
153
  self.log.warn "Route is: %p" % [[ options[:prefix], name ]]
154
154
 
155
- # Ensure validated parameters are untainted
156
- self.untaint_all_constraints
157
-
158
155
  # Make and install handler methods
159
156
  self.log.debug " adding readers"
160
157
  self.add_options_handler( route, rsrcobj, options )
@@ -79,7 +79,7 @@ class Strelka::Cookie
79
79
  raise Strelka::ParseError, "malformed cookie pair: %p" % [ cookie_pair ]
80
80
 
81
81
  # self.log.debug " matched cookie: %p" % [ match ]
82
- name = match[:cookie_name].untaint
82
+ name = match[:cookie_name]
83
83
  value = match[:cookie_value]
84
84
  value = self.dequote( value ) if value.start_with?( DQUOTE )
85
85
  value = nil if value.empty?
@@ -244,7 +244,7 @@ module Strelka
244
244
  newhash = {}
245
245
 
246
246
  hash.each do |key,val|
247
- keysym = key.to_s.dup.untaint.to_sym
247
+ keysym = key.to_s.dup.to_sym
248
248
 
249
249
  if val.is_a?( Hash )
250
250
  newhash[ keysym ] = symbolify_keys( val )
@@ -5,7 +5,7 @@
5
5
  require 'strelka' unless defined?( Strelka )
6
6
  require 'strelka/signal_handling'
7
7
 
8
- # Load multiple simulatneous Strelka handlers (of a single type) with
8
+ # Load multiple simultaneous Strelka handlers (of a single type) with
9
9
  # proper signal handling.
10
10
  #
11
11
  class Strelka::MultiRunner
@@ -53,7 +53,9 @@ class Strelka::MultiRunner
53
53
 
54
54
  self.log.debug "Starting multirunner loop..."
55
55
  self.spawn_children
56
- self.wait_for_signals while self.running
56
+ while self.running
57
+ self.reap_children if self.wait_for_signals
58
+ end
57
59
  self.log.debug "Ending multirunner."
58
60
 
59
61
  # Restore the default signal handlers
@@ -81,16 +83,37 @@ class Strelka::MultiRunner
81
83
  end
82
84
 
83
85
 
84
- ### Wait on the child associated with the given +pid+, deleting it from the
85
- ### running tasks Hash if successful.
86
- def reap_children( signal )
87
- self.handler_pids.dup.each do |pid|
88
- self.log.debug " sending %p to pid %p" % [ signal, pid ]
89
- Process.kill( signal, pid )
90
- pid, status = Process.waitpid2( pid, Process::WUNTRACED )
91
- self.log.debug " waitpid2 returned: [ %p, %p ]" % [ pid, status ]
86
+ ### Clean up after any children that have died.
87
+ def reap_children
88
+ pid, status = Process.waitpid2( -1, Process::WNOHANG|Process::WUNTRACED )
89
+ self.log.debug " waitpid2 returned: [ %p, %p ]" % [ pid, status ]
90
+ while pid
92
91
  self.handler_pids.delete( pid )
92
+ pid, status = Process.waitpid2( -1, Process::WNOHANG|Process::WUNTRACED )
93
+ self.log.debug " waitpid2 returned: [ %p, %p ]" % [ pid, status ]
94
+ end
95
+ end
96
+
97
+
98
+ ### Kill all current children with the specified +signal+. Returns
99
+ ### +true+ if the signal was sent to one or more children.
100
+ def kill_children( signal=:TERM )
101
+ return false if self.handler_pids.empty?
102
+
103
+ self.log.info "Sending %s signal to %d task pids: %p." %
104
+ [ signal, self.handler_pids.length, self.handler_pids ]
105
+ self.handler_pids.each do |pid|
106
+ begin
107
+ Process.kill( signal, pid )
108
+ rescue Errno::ESRCH => err
109
+ self.log.error "%p when trying to %s child %d: %s" %
110
+ [ err.class, signal, pid, err.message ]
111
+ end
93
112
  end
113
+
114
+ return true
115
+ rescue Errno::ESRCH
116
+ self.log.debug "Ignoring signals to unreaped children."
94
117
  end
95
118
 
96
119
 
@@ -101,7 +124,7 @@ class Strelka::MultiRunner
101
124
  when :INT, :TERM, :QUIT
102
125
  if @running
103
126
  self.log.warn "%s signal: graceful shutdown" % [ sig ]
104
- self.reap_children( sig )
127
+ self.kill_children( sig )
105
128
  @running = false
106
129
  else
107
130
  self.ignore_signals
@@ -26,10 +26,7 @@ require 'strelka/app' unless defined?( Strelka::App )
26
26
  # validator.add( :feedback, :printable, "Customer Feedback" )
27
27
  # validator.override( :email, :printable, "Your Email Address" )
28
28
  #
29
- # # Untaint all parameter values which match their constraints
30
- # validate.untaint_all_constraints = true
31
- #
32
- # # Now pass in tainted values in a hash (e.g., from an HTML form)
29
+ # # Now pass in values in a hash (e.g., from an HTML form)
33
30
  # validator.validate( req.params )
34
31
  #
35
32
  # # Now if there weren't any errors, use some form values to fill out the
@@ -79,7 +76,7 @@ class Strelka::ParamValidator
79
76
 
80
77
 
81
78
  # Flags that are passed as Symbols when declaring a parameter
82
- FLAGS = [ :required, :untaint, :multiple ]
79
+ FLAGS = [ :required, :multiple ]
83
80
 
84
81
  # Map of constraint specification types to their equivalent Constraint class.
85
82
  TYPES = { Proc => self }
@@ -124,7 +121,6 @@ class Strelka::ParamValidator
124
121
  @description = args.shift if args.first.is_a?( String )
125
122
 
126
123
  @required = args.include?( :required )
127
- @untaint = args.include?( :untaint )
128
124
  @multiple = args.include?( :multiple )
129
125
  end
130
126
 
@@ -151,19 +147,13 @@ class Strelka::ParamValidator
151
147
  # order for the parameters to be valid.
152
148
  attr_predicate :required?
153
149
 
154
- ##
155
- # Returns true if the constraint will also untaint its result before returning it.
156
- attr_predicate :untaint?
157
-
158
150
 
159
151
  ### Check the given value against the constraint and return the result if it passes.
160
- def apply( value, force_untaint=false )
161
- untaint = self.untaint? || force_untaint
162
-
152
+ def apply( value )
163
153
  if self.multiple?
164
- return self.check_multiple( value, untaint )
154
+ return self.check_multiple( value )
165
155
  else
166
- return self.check( value, untaint )
156
+ return self.check( value )
167
157
  end
168
158
  end
169
159
 
@@ -190,7 +180,6 @@ class Strelka::ParamValidator
190
180
  flags = []
191
181
  flags << 'required' if self.required?
192
182
  flags << 'multiple' if self.multiple?
193
- flags << 'untaint' if self.untaint?
194
183
 
195
184
  desc << " (%s)" % [ flags.join(',') ] unless flags.empty?
196
185
 
@@ -218,21 +207,20 @@ class Strelka::ParamValidator
218
207
  ### Check the specified value against the constraint and return the results. By
219
208
  ### default, this just calls to_proc and the block and calls the result with the
220
209
  ### value as its argument.
221
- def check( value, untaint )
210
+ def check( value )
222
211
  return self.block.to_proc.call( value ) if self.block
223
- value.untaint if untaint && value.respond_to?( :untaint )
224
212
  return value
225
213
  end
226
214
 
227
215
 
228
216
  ### Check the given +values+ against the constraint and return the results if
229
217
  ### all of them succeed.
230
- def check_multiple( values, untaint )
218
+ def check_multiple( values )
231
219
  values = [ values ] unless values.is_a?( Array )
232
220
  results = []
233
221
 
234
222
  values.each do |value|
235
- result = self.check( value, untaint ) or return nil
223
+ result = self.check( value ) or return nil
236
224
  results << result
237
225
  end
238
226
 
@@ -280,38 +268,35 @@ class Strelka::ParamValidator
280
268
 
281
269
  ### Check the +value+ against the regular expression and return its
282
270
  ### match groups if successful.
283
- def check( value, untaint )
271
+ def check( value )
284
272
  self.log.debug "Validating %p via regexp %p" % [ value, self.pattern ]
285
273
  match = self.pattern.match( value.to_s ) or return nil
286
274
 
287
275
  if match.captures.empty?
288
276
  self.log.debug " no captures, using whole match: %p" % [match[0]]
289
- return super( match[0], untaint )
277
+ return super( match[0] )
290
278
 
291
279
  elsif match.names.length > 1
292
280
  self.log.debug " extracting hash of named captures: %p" % [ match.names ]
293
- rhash = self.matched_hash( match, untaint )
294
- return super( rhash, untaint )
281
+ rhash = self.matched_hash( match )
282
+ return super( rhash )
295
283
 
296
284
  elsif match.captures.length == 1
297
285
  self.log.debug " extracting one capture: %p" % [match.captures.first]
298
- return super( match.captures.first, untaint )
286
+ return super( match.captures.first )
299
287
 
300
288
  else
301
289
  self.log.debug " extracting multiple captures: %p" % [match.captures]
302
290
  values = match.captures
303
- values.map {|val| val.untaint if val } if untaint
304
- return super( values, untaint )
291
+ return super( values )
305
292
  end
306
293
  end
307
294
 
308
295
 
309
- ### Return a Hash of the given +match+ object's named captures, untainting the values
310
- ### if +untaint+ is true.
311
- def matched_hash( match, untaint )
296
+ ### Return a Hash of the given +match+ object's named captures.
297
+ def matched_hash( match )
312
298
  return match.names.inject( {} ) do |accum,name|
313
299
  value = match[ name ]
314
- value.untaint if untaint && value
315
300
  accum[ name.to_sym ] = value
316
301
  accum
317
302
  end
@@ -566,7 +551,6 @@ class Strelka::ParamValidator
566
551
  def initialize
567
552
  @constraints = {}
568
553
  @fields = {}
569
- @untaint_all = false
570
554
 
571
555
  self.reset
572
556
  end
@@ -591,12 +575,6 @@ class Strelka::ParamValidator
591
575
  # The Hash of raw field data (if validation has occurred)
592
576
  attr_reader :fields
593
577
 
594
- ##
595
- # Global untainting flag
596
- attr_predicate_accessor :untaint_all?
597
- alias_method :untaint_all_constraints=, :untaint_all=
598
- alias_method :untaint_all_constraints?, :untaint_all?
599
-
600
578
  ##
601
579
  # Returns +true+ if the paramvalidator has been given parameters to validate. Adding or
602
580
  # overriding constraints resets this.
@@ -680,13 +658,12 @@ class Strelka::ParamValidator
680
658
  constraint.required?
681
659
  end
682
660
 
683
- return "#<%p:0x%016x %s, profile: [required: %s, optional: %s] global untaint: %s>" % [
661
+ return "#<%p:0x%016x %s, profile: [required: %s, optional: %s]>" % [
684
662
  self.class,
685
663
  self.object_id / 2,
686
664
  self.to_s,
687
665
  required.empty? ? "(none)" : required.map( &:last ).map( &:name ).join(','),
688
666
  optional.empty? ? "(none)" : optional.map( &:last ).map( &:name ).join(','),
689
- self.untaint_all? ? "enabled" : "disabled",
690
667
  ]
691
668
  end
692
669
 
@@ -754,7 +731,7 @@ class Strelka::ParamValidator
754
731
  ### result.
755
732
  def apply_constraint( constraint, value )
756
733
  if !( value.nil? || value == '' )
757
- result = constraint.apply( value, self.untaint_all? )
734
+ result = constraint.apply( value )
758
735
 
759
736
  if !result.nil?
760
737
  self.log.debug " constraint for %p passed: %p" % [ constraint.name, result ]
@@ -976,7 +953,7 @@ class Strelka::ParamValidator
976
953
  ### Build a deep hash out of the given parameter +value+
977
954
  def build_deep_hash( value, hash, levels )
978
955
  if levels.length == 0
979
- value.untaint
956
+ value
980
957
  elsif hash.nil?
981
958
  { levels.first => build_deep_hash(value, nil, levels[1..-1]) }
982
959
  else
@@ -992,11 +969,11 @@ class Strelka::ParamValidator
992
969
  if main.nil?
993
970
  return []
994
971
  elsif trailing
995
- return [key.untaint]
972
+ return [key]
996
973
  elsif bracketed
997
- return [main.untaint] + bracketed.slice(1...-1).split('][').collect {|k| k.untaint }
974
+ return [main] + bracketed.slice(1...-1).split('][')
998
975
  else
999
- return [main.untaint]
976
+ return [main]
1000
977
  end
1001
978
  end
1002
979