stratagem 0.1.8 → 0.1.9

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 (64) hide show
  1. data/Manifest +16 -18
  2. data/Rakefile +3 -3
  3. data/bin/stratagem +54 -6
  4. data/generators/stratagem/stratagem_generator.rb +26 -0
  5. data/lib/generators/stratagem/install/USAGE +0 -0
  6. data/lib/generators/stratagem/install/install_base.rb +35 -0
  7. data/lib/generators/stratagem/install/install_generator.rb +24 -0
  8. data/lib/stratagem.rb +87 -57
  9. data/lib/stratagem/authentication.rb +2 -2
  10. data/lib/stratagem/auto_mock/aquifer.rb +6 -1
  11. data/lib/stratagem/auto_mock/factory.rb +2 -2
  12. data/lib/stratagem/client.rb +1 -1
  13. data/lib/stratagem/crawler.rb +2 -0
  14. data/lib/stratagem/crawler/authentication.rb +10 -9
  15. data/lib/stratagem/crawler/parameter_resolver.rb +83 -0
  16. data/lib/stratagem/crawler/route_invoker.rb +187 -0
  17. data/lib/stratagem/crawler/session.rb +23 -251
  18. data/lib/stratagem/crawler/site_model.rb +18 -16
  19. data/lib/stratagem/framework_extensions.rb +12 -1
  20. data/lib/stratagem/framework_extensions/method_invocation.rb +50 -0
  21. data/lib/stratagem/framework_extensions/models/adapters/active_model/detect.rb +1 -1
  22. data/lib/stratagem/framework_extensions/models/adapters/active_model/extensions.rb +20 -11
  23. data/lib/stratagem/framework_extensions/models/adapters/active_model/metadata.rb +7 -3
  24. data/lib/stratagem/framework_extensions/models/adapters/active_model/tracing.rb +11 -9
  25. data/lib/stratagem/framework_extensions/models/adapters/friendly_id/detect.rb +12 -0
  26. data/lib/stratagem/framework_extensions/models/adapters/friendly_id/extensions.rb +0 -0
  27. data/lib/stratagem/framework_extensions/models/adapters/friendly_id/metadata.rb +21 -0
  28. data/lib/stratagem/framework_extensions/models/adapters/friendly_id/tracing.rb +4 -0
  29. data/lib/stratagem/framework_extensions/models/annotations.rb +1 -24
  30. data/lib/stratagem/framework_extensions/models/tracing.rb +9 -3
  31. data/lib/stratagem/framework_extensions/rails.rb +0 -6
  32. data/lib/stratagem/framework_extensions/{controllers → rails2}/action_controller.rb +0 -0
  33. data/lib/stratagem/framework_extensions/{controllers → rails2}/action_mailer.rb +0 -0
  34. data/lib/stratagem/framework_extensions/rails3/parameters.rb +14 -0
  35. data/lib/stratagem/interface/browser.rb +3 -1
  36. data/lib/stratagem/model/application.rb +6 -6
  37. data/lib/stratagem/model/components/controller.rb +17 -63
  38. data/lib/stratagem/model/components/model.rb +33 -33
  39. data/lib/stratagem/model/components/reference.rb +8 -4
  40. data/lib/stratagem/model/components/route.rb +40 -14
  41. data/lib/stratagem/model/components/view.rb +1 -1
  42. data/lib/stratagem/model_builder.rb +71 -42
  43. data/lib/stratagem/site_crawler.rb +1 -1
  44. data/lib/stratagem/snapshot.rb +0 -1
  45. data/stratagem.gemspec +10 -7
  46. data/templates/install/environments/stratagem.rb.erb +16 -0
  47. data/templates/install/tasks/stratagem.rake +18 -0
  48. metadata +57 -40
  49. data/lib/stratagem/framework_extensions/controllers.rb +0 -5
  50. data/lib/stratagem/scan/checks/filter_parameter_logging.rb +0 -6
  51. data/lib/stratagem/scan/checks/mongo_mapper/base.rb +0 -19
  52. data/lib/stratagem/scan/checks/mongo_mapper/foreign_keys_exposed.rb +0 -32
  53. data/lib/stratagem/scan/checks/routes.rb +0 -16
  54. data/lib/tasks/_old_stratagem.rake +0 -99
  55. data/spec/model/component_spec.rb +0 -43
  56. data/spec/model/components/view_spec.rb +0 -43
  57. data/spec/model/test_spec.rb +0 -10
  58. data/spec/samples/404.html.erb +0 -30
  59. data/spec/samples/_form.html.erb +0 -8
  60. data/spec/samples/index.html.erb +0 -77
  61. data/spec/samples/sample_model.rb +0 -5
  62. data/spec/samples/signup.html.erb +0 -14
  63. data/spec/scan/checks/email_address_spec.rb +0 -24
  64. data/spec/scan/checks/error_pages_spec.rb +0 -22
data/Manifest CHANGED
@@ -1,8 +1,12 @@
1
1
  Manifest
2
2
  Rakefile
3
3
  bin/stratagem
4
+ generators/stratagem/stratagem_generator.rb
4
5
  init.rb
5
6
  lib/bootstrap.rb
7
+ lib/generators/stratagem/install/USAGE
8
+ lib/generators/stratagem/install/install_base.rb
9
+ lib/generators/stratagem/install/install_generator.rb
6
10
  lib/stratagem.rb
7
11
  lib/stratagem/authentication.rb
8
12
  lib/stratagem/auto_mock.rb
@@ -20,6 +24,8 @@ lib/stratagem/crawler.rb
20
24
  lib/stratagem/crawler/authentication.rb
21
25
  lib/stratagem/crawler/form.rb
22
26
  lib/stratagem/crawler/html_utils.rb
27
+ lib/stratagem/crawler/parameter_resolver.rb
28
+ lib/stratagem/crawler/route_invoker.rb
23
29
  lib/stratagem/crawler/session.rb
24
30
  lib/stratagem/crawler/site_model.rb
25
31
  lib/stratagem/crawler/trace_utils.rb
@@ -32,9 +38,7 @@ lib/stratagem/extensions/red_parse.rb
32
38
  lib/stratagem/extensions/string.rb
33
39
  lib/stratagem/extensions/trace_compression.rb
34
40
  lib/stratagem/framework_extensions.rb
35
- lib/stratagem/framework_extensions/controllers.rb
36
- lib/stratagem/framework_extensions/controllers/action_controller.rb
37
- lib/stratagem/framework_extensions/controllers/action_mailer.rb
41
+ lib/stratagem/framework_extensions/method_invocation.rb
38
42
  lib/stratagem/framework_extensions/models.rb
39
43
  lib/stratagem/framework_extensions/models/adapters/active_model/detect.rb
40
44
  lib/stratagem/framework_extensions/models/adapters/active_model/extensions.rb
@@ -48,6 +52,10 @@ lib/stratagem/framework_extensions/models/adapters/common/detect.rb
48
52
  lib/stratagem/framework_extensions/models/adapters/common/extensions.rb
49
53
  lib/stratagem/framework_extensions/models/adapters/common/metadata.rb
50
54
  lib/stratagem/framework_extensions/models/adapters/common/tracing.rb
55
+ lib/stratagem/framework_extensions/models/adapters/friendly_id/detect.rb
56
+ lib/stratagem/framework_extensions/models/adapters/friendly_id/extensions.rb
57
+ lib/stratagem/framework_extensions/models/adapters/friendly_id/metadata.rb
58
+ lib/stratagem/framework_extensions/models/adapters/friendly_id/tracing.rb
51
59
  lib/stratagem/framework_extensions/models/adapters/restful_authentication/detect.rb
52
60
  lib/stratagem/framework_extensions/models/adapters/restful_authentication/extensions.rb
53
61
  lib/stratagem/framework_extensions/models/adapters/restful_authentication/metadata.rb
@@ -59,6 +67,9 @@ lib/stratagem/framework_extensions/models/metadata.rb
59
67
  lib/stratagem/framework_extensions/models/mocking.rb
60
68
  lib/stratagem/framework_extensions/models/tracing.rb
61
69
  lib/stratagem/framework_extensions/rails.rb
70
+ lib/stratagem/framework_extensions/rails2/action_controller.rb
71
+ lib/stratagem/framework_extensions/rails2/action_mailer.rb
72
+ lib/stratagem/framework_extensions/rails3/parameters.rb
62
73
  lib/stratagem/interface/browser.rb
63
74
  lib/stratagem/interface/public/images/backgrounds/content.png
64
75
  lib/stratagem/interface/public/images/backgrounds/shadow.png
@@ -90,22 +101,9 @@ lib/stratagem/scan.rb
90
101
  lib/stratagem/scan/checks/capistrano/secure_deploy.rb
91
102
  lib/stratagem/scan/checks/email_address.rb
92
103
  lib/stratagem/scan/checks/error_pages.rb
93
- lib/stratagem/scan/checks/filter_parameter_logging.rb
94
- lib/stratagem/scan/checks/mongo_mapper/base.rb
95
- lib/stratagem/scan/checks/mongo_mapper/foreign_keys_exposed.rb
96
- lib/stratagem/scan/checks/routes.rb
97
104
  lib/stratagem/scan/result.rb
98
105
  lib/stratagem/scanner.rb
99
106
  lib/stratagem/site_crawler.rb
100
107
  lib/stratagem/snapshot.rb
101
- lib/tasks/_old_stratagem.rake
102
- spec/model/component_spec.rb
103
- spec/model/components/view_spec.rb
104
- spec/model/test_spec.rb
105
- spec/samples/404.html.erb
106
- spec/samples/_form.html.erb
107
- spec/samples/index.html.erb
108
- spec/samples/sample_model.rb
109
- spec/samples/signup.html.erb
110
- spec/scan/checks/email_address_spec.rb
111
- spec/scan/checks/error_pages_spec.rb
108
+ templates/install/environments/stratagem.rb.erb
109
+ templates/install/tasks/stratagem.rake
data/Rakefile CHANGED
@@ -2,15 +2,15 @@ require 'rubygems'
2
2
  require 'rake'
3
3
  require 'echoe'
4
4
 
5
- Echoe.new('stratagem', '0.1.8') do |p|
5
+ Echoe.new('stratagem', '0.1.9') do |p|
6
6
  p.description = "Intuitive security analysis of your Rails applications"
7
7
  p.url = "http://github.com/stratagem/stratagem"
8
8
  p.author = "Charles Grimes"
9
9
  p.email = "cj@stratagemapp.com"
10
10
  p.executable_pattern = ['bin/*']
11
11
  p.ignore_pattern = ["tmp/*", "script/*", "spec/*", "webapp/*"]
12
- p.runtime_dependencies = ["launchy >=0.3.5", "redparse >=0.8.4", "haml >=3.0.0", "nokogiri >=1.4.3"]
13
- p.development_dependencies = ["launchy >=0.3.5", "redparse >=0.8.4", "sinatra =1.0", "haml >=3.0.0", "webrat >=0.4.3"]
12
+ p.runtime_dependencies = ["launchy >=0.3.5", "redparse >=0.8.4", "haml >=3.0.0", "nokogiri >=1.4.3", "sinatra >=1.0"]
13
+ p.development_dependencies = ["launchy >=0.3.5", "redparse >=0.8.4", "sinatra >=1.0", "haml >=3.0.0", "webrat >=0.4.3"]
14
14
  # p.requirements ["Install the stratagem-ui gem for the web browser interface."]
15
15
  end
16
16
 
@@ -1,10 +1,58 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- RAILS_ENV='test'
4
3
 
5
- require 'rubygems'
6
- require File.join(Dir.pwd, 'config', 'boot')
7
- require 'bootstrap'
8
- require './config/environment'
4
+ # ENV['RAILS_ENV'] = 'test'
5
+ # ENV['RACK_ENV'] = 'test'
6
+ #
7
+ # application_file = File.join(Dir.pwd, 'config', 'application')
8
+ # if (File.exists?(application_file+'.rb'))
9
+ # require File.join(Dir.pwd, 'config', 'boot')
10
+ # require application_file
11
+ # require 'active_record'
12
+ # else
13
+ # puts "loading environment"
14
+ # # require File.join(Dir.pwd, 'config', 'boot')
15
+ # # puts "loading environment"
16
+ # require 'config/environment'
17
+ # end
18
+ #
19
+ #
20
+ # Stratagem.init
21
+ # Stratagem::Command.run(ARGV[0])
9
22
 
10
- Stratagem::Command.run(ARGV[0])
23
+ # begin
24
+ # # rails 2
25
+ # require 'bootstrap'
26
+ # rescue Exception
27
+ # # rails 3
28
+ # end
29
+ #
30
+ # require 'config/environment'
31
+ #
32
+ # p ActiveRecord::Base
33
+ #
34
+ # Stratagem::init_system
35
+ # Stratagem::Command.run(ARGV[0])
36
+ #
37
+
38
+ #!/usr/bin/env ruby
39
+
40
+ # RAILS_ENV='test'
41
+ #
42
+ # require 'rubygems'
43
+ # require 'stratagem'
44
+ #
45
+ # require File.join(Dir.pwd, 'config', 'boot')
46
+ # begin
47
+ # # rails 2
48
+ # require 'bootstrap'
49
+ # rescue Exception
50
+ # # rails 3
51
+ # require File.join(Dir.pwd, 'config', 'application')
52
+ # end
53
+ #
54
+ # require './config/environment'
55
+ #
56
+ # Stratagem::init
57
+ #
58
+ # Stratagem::Command.run(ARGV[0])
@@ -0,0 +1,26 @@
1
+ # Rails 2 generator
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), '../../lib/generators/stratagem/install/install_base'))
4
+
5
+ class StratagemGenerator < Rails::Generator::Base
6
+ include Stratagem::Generators::InstallBase
7
+
8
+ def manifest
9
+ record do |m|
10
+ create_all(m)
11
+ end
12
+ end
13
+
14
+ def self.gem_root
15
+ File.expand_path('../../../', __FILE__)
16
+ end
17
+
18
+ def self.source_root
19
+ File.join(gem_root, 'templates', 'install')
20
+ end
21
+
22
+ def source_root
23
+ self.class.source_root
24
+ end
25
+
26
+ end
File without changes
@@ -0,0 +1,35 @@
1
+ module Stratagem
2
+ module Generators
3
+ module InstallBase
4
+ def create_all(m=self)
5
+ create_config(m)
6
+ create_tasks(m)
7
+ create_database(m)
8
+ end
9
+
10
+ def create_config(m = self)
11
+ m.template 'environments/stratagem.rb.erb', 'config/environments/stratagem.rb'
12
+ end
13
+
14
+ def create_tasks(m = self)
15
+ m.template 'tasks/stratagem.rake', 'lib/tasks/stratagem.rake'
16
+ end
17
+
18
+ def create_database(m = self)
19
+ append_yml(m, 'mongoid.yml', 'database.yml', 'workling.yml')
20
+ end
21
+
22
+ def append_yml(m, *filenames)
23
+ filenames.each do |filename|
24
+ if (File.exists?("config/#{filename}"))
25
+ unless File.read("config/#{filename}").include? 'stratagem:'
26
+ m.gsub_file "config/#{filename}", /^test:.*\n/, "test: &test\n"
27
+ m.gsub_file "config/#{filename}", /\z/, "\nstratagem:\n <<: *test"
28
+ puts " force config/#{filename}"
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,24 @@
1
+ require File.join(File.dirname(__FILE__), 'install_base')
2
+
3
+ module Stratagem
4
+ class InstallGenerator < Rails::Generators::Base
5
+ include Stratagem::Generators::InstallBase
6
+
7
+ def generate
8
+ create_all
9
+ end
10
+
11
+ def self.gem_root
12
+ File.expand_path("../../../../../", __FILE__)
13
+ end
14
+
15
+ def self.source_root
16
+ puts "SOURCE ROOT: #{gem_root}"
17
+ File.join(gem_root, 'templates/install')
18
+ end
19
+ #
20
+ # def stratagem_rails_env
21
+ # 'stratagem'
22
+ # end
23
+ end
24
+ end
@@ -7,71 +7,101 @@ class StratagemError < RuntimeError
7
7
  end
8
8
  end
9
9
 
10
- require 'rubygems'
11
- require 'haml'
12
- require 'launchy'
13
- require 'redparse'
14
- require 'stratagem/blocker'
15
- require 'stratagem/logger'
16
- require 'stratagem/extensions'
17
- require 'stratagem/framework_extensions'
18
-
19
- require 'stratagem/model'
20
- require 'stratagem/auto_mock'
21
-
22
- require 'stratagem/authentication'
23
- require 'stratagem/client'
24
- require 'stratagem/command'
25
- require 'stratagem/model_builder'
26
- require 'stratagem/scanner'
27
- require 'stratagem/scan'
28
- require 'stratagem/crawler'
29
- require 'stratagem/site_crawler'
30
- require 'stratagem/snapshot'
31
-
32
- require 'stratagem/commands'
33
-
34
10
  module Stratagem
35
- @@blocker = Blocker.new
36
- @@running = false
37
- @@session_id = Time.now.to_f.to_s # the interface uses this to determine which instance of the client it's talking to
11
+ class << self
12
+ def init
13
+ require 'haml'
14
+ require 'launchy'
15
+ require 'redparse'
16
+ require 'stratagem/blocker'
17
+ require 'stratagem/logger'
18
+ require 'stratagem/extensions'
19
+ require 'stratagem/framework_extensions'
38
20
 
39
- def self.session_id
40
- @@session_id
41
- end
21
+ require 'stratagem/model'
22
+ require 'stratagem/auto_mock'
42
23
 
43
- def self.logger
44
- Stratagem::Logger.instance
45
- end
24
+ require 'stratagem/authentication'
25
+ require 'stratagem/client'
26
+ require 'stratagem/command'
27
+ require 'stratagem/model_builder'
28
+ require 'stratagem/scanner'
29
+ require 'stratagem/scan'
30
+ require 'stratagem/crawler'
31
+ require 'stratagem/site_crawler'
32
+ require 'stratagem/snapshot'
46
33
 
47
- def self.domain
48
- ENV['STRATAGEM_HOST'] || 'stratagemapp.com'
49
- end
34
+ require 'stratagem/commands'
50
35
 
51
- def self.wait_for_completion
52
- @@blocker.wait
53
- end
36
+ @@blocker = Blocker.new
37
+ @@running = false
38
+ @@session_id = Time.now.to_f.to_s # the interface uses this to determine which instance of the client it's talking to
39
+ end
40
+
41
+ def rails_version
42
+ @@rails_version ||= begin
43
+ rails_version = Rails.version.split('.').map {|v| v.size > 1 ? 9 : v.to_i }
44
+ rails_version << 0 while rails_version.size < 3
45
+ rails_version.pop while rails_version.size > 3
46
+ rails_version.join.to_i
47
+ end
48
+ end
54
49
 
55
- def self.complete
56
- @@blocker.notify
57
- end
50
+ def rails_3?
51
+ rails_version.between?(300, 399)
52
+ end
53
+
54
+ def rails_2?
55
+ rails_version.between?(200, 299)
56
+ end
57
+
58
+ def session_id
59
+ @@session_id
60
+ end
58
61
 
59
- def self.analyze
60
- unless (@@running)
61
- @@running = true
62
- Thread.new {
63
- begin
64
- authentication = Stratagem::Authentication.instance
65
- snapshot = Stratagem::Snapshot.create(authentication.project)
66
- Stratagem::Client.new(authentication).send(snapshot)
67
- rescue
68
- puts $!.message
69
- puts $!.backtrace
70
- ensure
71
- complete
72
- end
73
- }
62
+ def logger
63
+ Stratagem::Logger.instance
74
64
  end
65
+
66
+ def domain
67
+ ENV['STRATAGEM_HOST'] || 'stratagemapp.com'
68
+ end
69
+
70
+ def wait_for_completion
71
+ @@blocker.wait
72
+ end
73
+
74
+ def complete
75
+ @@blocker.notify
76
+ end
77
+
78
+ def analyze
79
+ unless (@@running)
80
+ @@running = true
81
+ Thread.new {
82
+ begin
83
+ # RubyProf.start
84
+
85
+ authentication = Stratagem::Authentication.instance
86
+ snapshot = Stratagem::Snapshot.create(authentication.project)
87
+ Stratagem::Client.new(authentication).send(snapshot)
88
+
89
+ # result = RubyProf.stop
90
+ #
91
+ # # Print a flat profile to text
92
+ # printer = RubyProf::FlatPrinter.new(result)
93
+ # printer.print(STDOUT, 0)
94
+ rescue
95
+ puts $!.message
96
+ puts $!.backtrace
97
+ ensure
98
+ complete
99
+ end
100
+ }
101
+ end
102
+ end
103
+
75
104
  end
105
+
76
106
  end
77
107
 
@@ -22,7 +22,7 @@ module Stratagem
22
22
  if (credentials.nil?)
23
23
  base_url+"/project_links/new"
24
24
  else
25
- base_url+"/project_links/validate/#{credentials[:token]}/#{credentials[:project]}"
25
+ base_url+"/project_links/validate/#{credentials[:project]}?auth_token=#{credentials[:token]}"
26
26
  end
27
27
  end
28
28
 
@@ -32,7 +32,7 @@ module Stratagem
32
32
  end
33
33
 
34
34
  def project_url
35
- "#{base_url}/projects/#{credentials[:project]}?api_key=#{credentials[:token]}"
35
+ "#{base_url}/projects/#{credentials[:project]}?auth_token=#{credentials[:token]}"
36
36
  end
37
37
 
38
38
  def credentials
@@ -13,7 +13,7 @@ module Stratagem::AutoMock
13
13
  self.instance
14
14
  end
15
15
 
16
- def destroy
16
+ def clear
17
17
  objects = self.repo.values.inject([]) {|memo,obj| memo += obj.compact }
18
18
  i = 0
19
19
  while (objects.size > 0 && ((i+=1) < objects.size))
@@ -32,6 +32,11 @@ module Stratagem::AutoMock
32
32
  !instance.frozen?
33
33
  end
34
34
  end
35
+ self.repo.clear
36
+ end
37
+
38
+ def destroy
39
+ clear
35
40
  end
36
41
 
37
42
  def instances_of(model_klass)