rake_check 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,81 @@
1
+ require 'colored'
2
+ require 'json'
3
+ ##
4
+ # BrakemanChecker checks the output for undocumented classes and methods
5
+ #
6
+ # @author dmasur
7
+ class BrakemanChecker
8
+ ##
9
+ # Gives the Checkresult
10
+ #
11
+ # @return [Hash] Checkresult
12
+ # @author dmasur
13
+ def result
14
+ @shell_output = begin
15
+ `brakeman -f json 2>/dev/null`
16
+ rescue Errno::ENOENT
17
+ "Brakeman not found"
18
+ end
19
+ {:type => :brakeman, :check_output => output, :status => status}
20
+ end
21
+
22
+ private
23
+ ##
24
+ # Color the Coverage
25
+ #
26
+ # @return [String] colored Coverage
27
+ # @author dmasur
28
+ def color_count count
29
+ case count
30
+ when 0 then count.to_s.green
31
+ else count.to_s.red
32
+ end
33
+ end
34
+
35
+ ##
36
+ # Gives the Check Status
37
+ #
38
+ # @return [String] Checkstatus
39
+ # @author dmasur
40
+ def status
41
+ if @shell_output == ''
42
+ return 'N/A'
43
+ else
44
+ begin
45
+ warnings_string = "#{color_count data["warnings"].count} Warnings"
46
+ errors_string = "#{color_count data["errors"].count} Errors"
47
+ return "#{warnings_string}, #{errors_string}"
48
+ rescue JSON::ParserError
49
+ return 'Parse Error'
50
+ end
51
+ end
52
+ end
53
+
54
+ ##
55
+ # Parses the JSON Output
56
+ #
57
+ # @author dmasur
58
+ def data
59
+ raise JSON::ParserError if @shell_output.empty?
60
+ json_string = @shell_output.split("Generating report...").last
61
+ json = JSON.parse(json_string)
62
+ end
63
+
64
+ ##
65
+ # Gives the check output
66
+ #
67
+ # @return [String] Output
68
+ # @author dmasur
69
+ def output
70
+ if @shell_output == ''
71
+ return ''
72
+ else
73
+ begin
74
+ (data["warnings"].map { |warning| warning["message"] } +
75
+ data["errors"].map { |error| error["error"] }).join(", ")
76
+ rescue JSON::ParserError
77
+ return @shell_output
78
+ end
79
+ end
80
+ end
81
+ end
@@ -15,7 +15,7 @@ class CucumberChecker
15
15
  rescue Errno::ENOENT
16
16
  "Cucumber not found"
17
17
  end
18
- {:type => :cucumber, :check_output => '', :status => status}
18
+ {:type => :cucumber, :check_output => output, :status => status}
19
19
  end
20
20
 
21
21
  private
@@ -38,4 +38,18 @@ class CucumberChecker
38
38
  'N/A'
39
39
  end
40
40
  end
41
+
42
+ ##
43
+ # Cucumber Output
44
+ #
45
+ # @author dmasur
46
+ def output
47
+ if status == "N/A"
48
+ ''
49
+ elsif status == "OK".green
50
+ ''
51
+ else
52
+ @shell_output
53
+ end
54
+ end
41
55
  end
@@ -5,6 +5,7 @@ require 'rake_check/reek_checker'
5
5
  require 'rake_check/yard_checker'
6
6
  require 'rake_check/cane_checker'
7
7
  require 'rake_check/cucumber_checker'
8
+ require 'rake_check/brakeman_checker'
8
9
  ##
9
10
  # Do exakt what it is called
10
11
  #
@@ -39,9 +40,10 @@ end
39
40
  #
40
41
  # @author dmasur
41
42
  def print_summary results
42
- results.each do |result|
43
- puts "#{result[:type]}:\t#{result[:status]}"
43
+ result = results.map do |result|
44
+ "#{result[:type]} #{result[:status]}"
44
45
  end
46
+ puts `echo "#{result.join("\n")}" | column -t`
45
47
  end
46
48
 
47
49
  desc "Check all Metric tools"
@@ -55,5 +57,6 @@ task :check do
55
57
  results << YardChecker.new.result
56
58
  results << ReekChecker.new.result
57
59
  results << CaneChecker.new.result
60
+ results << BrakemanChecker.new.result
58
61
  print_check_result results
59
62
  end
@@ -3,5 +3,5 @@ module RakeCheck
3
3
  # The Version Constant
4
4
  #
5
5
  # @author dmasur
6
- VERSION = "0.1.6"
6
+ VERSION = "0.1.7"
7
7
  end
data/rake_check.gemspec CHANGED
@@ -21,4 +21,5 @@ Gem::Specification.new do |gem|
21
21
  gem.add_dependency "reek"
22
22
  gem.add_dependency "cane"
23
23
  gem.add_dependency "cucumber"
24
+ gem.add_dependency "brakeman"
24
25
  end
@@ -0,0 +1,53 @@
1
+ {
2
+ "scan_info": {
3
+ "app_path": "/path/to/app",
4
+ "rails_version": "3.2.6",
5
+ "security_warnings": 1,
6
+ "timestamp": "2012-06-19 10:18:54 +0200",
7
+ "checks_performed": [
8
+ "BasicAuth",
9
+ "CrossSiteScripting",
10
+ "DefaultRoutes",
11
+ "EscapeFunction",
12
+ "Evaluation",
13
+ "Execute",
14
+ "FileAccess",
15
+ "FilterSkipping",
16
+ "ForgerySetting",
17
+ "LinkTo",
18
+ "LinkToHref",
19
+ "MailTo",
20
+ "MassAssignment",
21
+ "ModelAttributes",
22
+ "NestedAttributes",
23
+ "QuoteTableName",
24
+ "Redirect",
25
+ "Render",
26
+ "ResponseSplitting",
27
+ "SQL",
28
+ "SafeBufferManipulation",
29
+ "SelectVulnerability",
30
+ "Send",
31
+ "SendFile",
32
+ "SessionSettings",
33
+ "SkipBeforeFilter",
34
+ "StripTags",
35
+ "TranslateBug",
36
+ "ValidationRegex",
37
+ "WithoutProtection"
38
+ ],
39
+ "number_of_controllers": 16,
40
+ "number_of_models": 32,
41
+ "number_of_templates": 67,
42
+ "ruby_version": "1.9.3",
43
+ "brakeman_version": "1.6.2"
44
+ },
45
+ "warnings": [
46
+ ],
47
+ "errors": [
48
+ {
49
+ "error": "unterminated string meets end of file. near line 13: \"\" While processing /path/to/app/controllers/admin/admins_controller.rb",
50
+ "location": "/path/to/gem_dir/gems/brakeman-1.6.2/lib/ruby_parser/ruby_lexer.rb:398:in `rb_compile_error'"
51
+ }
52
+ ]
53
+ }
@@ -0,0 +1,100 @@
1
+ [Notice] Detected Rails 3 application
2
+ Loading scanner...
3
+ [Notice] Using Ruby 1.9.3. Please make sure this matches the one used to run your Rails application.
4
+ Processing application in /Users/dmasur/code/jobmensa2
5
+ Processing configuration...
6
+ [Notice] Escaping HTML by default
7
+ Processing gems...
8
+ Processing initializers...
9
+ Processing libs...
10
+ Processing routes...
11
+ Processing templates...
12
+ Processing data flow in templates...
13
+ Processing models...
14
+ Processing controllers...
15
+ Processing data flow in controllers...
16
+ Indexing call sites...
17
+ Running checks in parallel...
18
+ - CheckBasicAuth
19
+ - CheckCrossSiteScripting
20
+ - CheckDefaultRoutes
21
+ - CheckEscapeFunction
22
+ - CheckEvaluation
23
+ - CheckExecute
24
+ - CheckFileAccess
25
+ - CheckFilterSkipping
26
+ - CheckForgerySetting
27
+ - CheckLinkTo
28
+ - CheckLinkToHref
29
+ - CheckMailTo
30
+ - CheckMassAssignment
31
+ - CheckModelAttributes
32
+ - CheckNestedAttributes
33
+ - CheckQuoteTableName
34
+ - CheckRedirect
35
+ - CheckRender
36
+ - CheckResponseSplitting
37
+ - CheckSafeBufferManipulation
38
+ - CheckSelectVulnerability
39
+ - CheckSend
40
+ - CheckSendFile
41
+ - CheckSessionSettings
42
+ - CheckSkipBeforeFilter
43
+ - CheckSQL
44
+ - CheckStripTags
45
+ - CheckTranslateBug
46
+ - CheckValidationRegex
47
+ - CheckWithoutProtection
48
+ Checks finished, collecting results...
49
+ Generating report...
50
+ {
51
+ "scan_info": {
52
+ "app_path": "/Users/dmasur/code/jobmensa2",
53
+ "rails_version": "3.2.6",
54
+ "security_warnings": 0,
55
+ "timestamp": "2012-06-19 09:19:41 +0200",
56
+ "checks_performed": [
57
+ "BasicAuth",
58
+ "CrossSiteScripting",
59
+ "DefaultRoutes",
60
+ "EscapeFunction",
61
+ "Evaluation",
62
+ "Execute",
63
+ "FileAccess",
64
+ "FilterSkipping",
65
+ "ForgerySetting",
66
+ "LinkTo",
67
+ "LinkToHref",
68
+ "MailTo",
69
+ "MassAssignment",
70
+ "ModelAttributes",
71
+ "NestedAttributes",
72
+ "QuoteTableName",
73
+ "Redirect",
74
+ "Render",
75
+ "ResponseSplitting",
76
+ "SQL",
77
+ "SafeBufferManipulation",
78
+ "SelectVulnerability",
79
+ "Send",
80
+ "SendFile",
81
+ "SessionSettings",
82
+ "SkipBeforeFilter",
83
+ "StripTags",
84
+ "TranslateBug",
85
+ "ValidationRegex",
86
+ "WithoutProtection"
87
+ ],
88
+ "number_of_controllers": 17,
89
+ "number_of_models": 32,
90
+ "number_of_templates": 67,
91
+ "ruby_version": "1.9.3",
92
+ "brakeman_version": "1.6.2"
93
+ },
94
+ "warnings": [
95
+
96
+ ],
97
+ "errors": [
98
+
99
+ ]
100
+ }
@@ -0,0 +1,63 @@
1
+ {
2
+ "scan_info": {
3
+ "app_path": "/path/to/app",
4
+ "rails_version": "3.2.6",
5
+ "security_warnings": 0,
6
+ "timestamp": "2012-06-19 10:06:35 +0200",
7
+ "checks_performed": [
8
+ "BasicAuth",
9
+ "CrossSiteScripting",
10
+ "DefaultRoutes",
11
+ "EscapeFunction",
12
+ "Evaluation",
13
+ "Execute",
14
+ "FileAccess",
15
+ "FilterSkipping",
16
+ "ForgerySetting",
17
+ "LinkTo",
18
+ "LinkToHref",
19
+ "MailTo",
20
+ "MassAssignment",
21
+ "ModelAttributes",
22
+ "NestedAttributes",
23
+ "QuoteTableName",
24
+ "Redirect",
25
+ "Render",
26
+ "ResponseSplitting",
27
+ "SQL",
28
+ "SafeBufferManipulation",
29
+ "SelectVulnerability",
30
+ "Send",
31
+ "SendFile",
32
+ "SessionSettings",
33
+ "SkipBeforeFilter",
34
+ "StripTags",
35
+ "TranslateBug",
36
+ "ValidationRegex",
37
+ "WithoutProtection"
38
+ ],
39
+ "number_of_controllers": 16,
40
+ "number_of_models": 32,
41
+ "number_of_templates": 67,
42
+ "ruby_version": "1.9.3",
43
+ "brakeman_version": "1.6.2"
44
+ },
45
+ "warnings": [
46
+ {
47
+ "warning_type": "SQL Injection",
48
+ "message": "Possible SQL injection",
49
+ "file": "/path/to/app/controllers/admin/admins_controller.rb",
50
+ "line": 13,
51
+ "code": "Admin.order(\"name #{parms[:direction]}\")",
52
+ "location": {
53
+ "type": "method",
54
+ "class": "Admin::AdminsController",
55
+ "method": "index"
56
+ },
57
+ "user_input": "parms[:direction]",
58
+ "confidence": "Medium"
59
+ }
60
+ ],
61
+ "errors": [
62
+ ]
63
+ }
@@ -0,0 +1,40 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../../lib/rake_check/brakeman_checker')
2
+
3
+ describe BrakemanChecker do
4
+ it "gives N/A on no Rails Apps" do
5
+ subject.stub('`' => '')
6
+ subject.result.should == { type: :brakeman, check_output: '', status: 'N/A' }
7
+ end
8
+ it "gives N/A on Error" do
9
+ subject.stub('`' => 'Error')
10
+ subject.result.should == { type: :brakeman, check_output: 'Error', status: 'Parse Error' }
11
+ end
12
+ it "gives OK with no Errors" do
13
+ shell_output = File.read(File.expand_path(File.dirname(__FILE__) +
14
+ '/../../files/brakeman_ok.json'))
15
+ subject.stub('`' => shell_output)
16
+ subject.result.should == { type: :brakeman,
17
+ check_output: '',
18
+ status: "\e[32m0\e[0m Warnings, \e[32m0\e[0m Errors" }
19
+ end
20
+ describe "Code Coverage" do
21
+ it "is red with errors" do
22
+ shell_output = File.read(File.expand_path(File.dirname(__FILE__) +
23
+ '/../../files/brakeman_error.json'))
24
+ subject.stub('`' => shell_output)
25
+ output = 'unterminated string meets end of file. near line 13:' +
26
+ ' "" While processing /path/to/app/controllers/admin/admins_controller.rb'
27
+ subject.result.should == { type: :brakeman,
28
+ check_output: output,
29
+ status: "\e[32m0\e[0m Warnings, \e[31m1\e[0m Errors" }
30
+ end
31
+ it "is red with warnings" do
32
+ shell_output = File.read(File.expand_path(File.dirname(__FILE__) +
33
+ '/../../files/brakeman_warning.json'))
34
+ subject.stub('`' => shell_output)
35
+ subject.result.should == { type: :brakeman,
36
+ check_output: 'Possible SQL injection',
37
+ status: "\e[31m1\e[0m Warnings, \e[32m0\e[0m Errors" }
38
+ end
39
+ end
40
+ end
@@ -14,7 +14,7 @@ describe CucumberChecker do
14
14
  it "is red on Error" do
15
15
  subject.stub('`' => "8 scenarios (1 failed, 7 passed)")
16
16
  subject.result.should == { type: :cucumber,
17
- check_output: '',
17
+ check_output: '8 scenarios (1 failed, 7 passed)',
18
18
  status: "\e[31m1 failed scenarios\e[0m" }
19
19
  end
20
20
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rake_check
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-21 00:00:00.000000000 Z
12
+ date: 2012-06-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70208090319120 !ruby/object:Gem::Requirement
16
+ requirement: &70129581054120 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70208090319120
24
+ version_requirements: *70129581054120
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: colored
27
- requirement: &70208090317960 !ruby/object:Gem::Requirement
27
+ requirement: &70129581052460 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70208090317960
35
+ version_requirements: *70129581052460
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &70208090316700 !ruby/object:Gem::Requirement
38
+ requirement: &70129581050700 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70208090316700
46
+ version_requirements: *70129581050700
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: reek
49
- requirement: &70208090315880 !ruby/object:Gem::Requirement
49
+ requirement: &70129581049100 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70208090315880
57
+ version_requirements: *70129581049100
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: cane
60
- requirement: &70208090315320 !ruby/object:Gem::Requirement
60
+ requirement: &70129581048080 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70208090315320
68
+ version_requirements: *70129581048080
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: cucumber
71
- requirement: &70208090314700 !ruby/object:Gem::Requirement
71
+ requirement: &70129581084760 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,7 +76,18 @@ dependencies:
76
76
  version: '0'
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *70208090314700
79
+ version_requirements: *70129581084760
80
+ - !ruby/object:Gem::Dependency
81
+ name: brakeman
82
+ requirement: &70129581081740 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: *70129581081740
80
91
  description: Checking the Project for Code Smells and bad documentation
81
92
  email:
82
93
  - dominik.masur@googlemail.com
@@ -94,6 +105,7 @@ files:
94
105
  - README.md
95
106
  - Rakefile
96
107
  - lib/rake_check.rb
108
+ - lib/rake_check/brakeman_checker.rb
97
109
  - lib/rake_check/cane_checker.rb
98
110
  - lib/rake_check/cucumber_checker.rb
99
111
  - lib/rake_check/rbp_checker.rb
@@ -103,16 +115,19 @@ files:
103
115
  - lib/rake_check/version.rb
104
116
  - lib/rake_check/yard_checker.rb
105
117
  - rake_check.gemspec
106
- - spec
107
- - spec_no_rails/files/cucumber_fail_output.txt
108
- - spec_no_rails/files/reek_output.yaml
109
- - spec_no_rails/lib/rake_check/cane_checker_spec.rb
110
- - spec_no_rails/lib/rake_check/cucumber_checker_spec.rb
111
- - spec_no_rails/lib/rake_check/rbp_checker_spec.rb
112
- - spec_no_rails/lib/rake_check/reek_checker_spec.rb
113
- - spec_no_rails/lib/rake_check/rspec_checker_spec.rb
114
- - spec_no_rails/lib/rake_check/yard_checker_spec.rb
115
- - spec_no_rails/spec_helper.rb
118
+ - spec/files/brakeman_error.json
119
+ - spec/files/brakeman_ok.json
120
+ - spec/files/brakeman_warning.json
121
+ - spec/files/cucumber_fail_output.txt
122
+ - spec/files/reek_output.yaml
123
+ - spec/lib/rake_check/brakeman_checker_spec.rb
124
+ - spec/lib/rake_check/cane_checker_spec.rb
125
+ - spec/lib/rake_check/cucumber_checker_spec.rb
126
+ - spec/lib/rake_check/rbp_checker_spec.rb
127
+ - spec/lib/rake_check/reek_checker_spec.rb
128
+ - spec/lib/rake_check/rspec_checker_spec.rb
129
+ - spec/lib/rake_check/yard_checker_spec.rb
130
+ - spec/spec_helper.rb
116
131
  homepage: https://github.com/TBAA/rake_check
117
132
  licenses: []
118
133
  post_install_message:
@@ -127,7 +142,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
127
142
  version: '0'
128
143
  segments:
129
144
  - 0
130
- hash: -3052005853982871500
145
+ hash: 2895400743441379252
131
146
  required_rubygems_version: !ruby/object:Gem::Requirement
132
147
  none: false
133
148
  requirements:
@@ -136,12 +151,25 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
151
  version: '0'
137
152
  segments:
138
153
  - 0
139
- hash: -3052005853982871500
154
+ hash: 2895400743441379252
140
155
  requirements: []
141
156
  rubyforge_project:
142
157
  rubygems_version: 1.8.10
143
158
  signing_key:
144
159
  specification_version: 3
145
160
  summary: Checking the Project for Code Smells and bad documentation
146
- test_files: []
161
+ test_files:
162
+ - spec/files/brakeman_error.json
163
+ - spec/files/brakeman_ok.json
164
+ - spec/files/brakeman_warning.json
165
+ - spec/files/cucumber_fail_output.txt
166
+ - spec/files/reek_output.yaml
167
+ - spec/lib/rake_check/brakeman_checker_spec.rb
168
+ - spec/lib/rake_check/cane_checker_spec.rb
169
+ - spec/lib/rake_check/cucumber_checker_spec.rb
170
+ - spec/lib/rake_check/rbp_checker_spec.rb
171
+ - spec/lib/rake_check/reek_checker_spec.rb
172
+ - spec/lib/rake_check/rspec_checker_spec.rb
173
+ - spec/lib/rake_check/yard_checker_spec.rb
174
+ - spec/spec_helper.rb
147
175
  has_rdoc:
data/spec DELETED
File without changes
File without changes
File without changes