gems-status 0.63.0 → 0.64.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.
@@ -11,29 +11,51 @@ module GemsStatus
11
11
  puts "---"
12
12
  end
13
13
 
14
- def print_results(results, checker_results, comments)
14
+
15
+ def print_results(gem_list, checker_results, comments)
16
+ print_gem_list(gem_list)
17
+ print_gem_comments(gem_list, comments)
18
+ print_gem_checker_results(checker_results)
19
+ end
20
+
21
+ def print_head
22
+ end
23
+
24
+ def print_tail
25
+ puts "---"
26
+ date = Time.now.strftime('%a %b %d %H:%M:%S %Z %Y')
27
+ puts "run by https://github.com/jordimassaguerpla/gems-status"
28
+ puts "#{date} - version: #{GemsStatus::VERSION}"
29
+ end
30
+
31
+ private
32
+
33
+ def print_gem_list(gem_list)
15
34
  puts "Gem list"
16
35
  puts ""
17
- results.each do |result|
18
- result.sort.each do |_, gem|
19
- puts "#{gem.name} #{gem.version} #{gem.license}"
20
- end
36
+ gem_list.sort.each do |_, gem|
37
+ puts "#{gem.name} #{gem.version} #{gem.license}"
21
38
  end
22
39
  puts ""
23
40
  puts "---"
41
+ end
42
+
43
+ def print_gem_comments(gem_list, comments)
24
44
  puts "Comments"
25
45
  puts ""
26
- results.each do |result|
27
- result.sort.each do |_, gem|
28
- if comments[gem.name]
29
- puts "#{gem.name}:"
30
- puts "#{comments[gem.name]}"
31
- puts ""
32
- end
46
+ gem_list.sort.each do |_, gem|
47
+ if comments[gem.name]
48
+ puts "#{gem.name}:"
49
+ puts "#{comments[gem.name]}"
50
+ puts ""
33
51
  end
34
52
  end
35
53
  puts ""
36
54
  puts "---"
55
+ end
56
+
57
+
58
+ def print_gem_checker_results(checker_results)
37
59
  if checker_results.length == 0
38
60
  puts "Checker results: SUCCESS"
39
61
  else
@@ -42,22 +64,12 @@ module GemsStatus
42
64
  puts ""
43
65
  checker_results.sort.each do |gem_name, checker_r|
44
66
  puts "#{gem_name}"
45
- checker_r.each do |_, checker|
67
+ checker_r.each do |checker|
46
68
  puts "#{checker.description}"
47
69
  end
48
70
  puts ""
49
71
  end
50
72
  end
51
73
 
52
- def print_head
53
- end
54
-
55
- def print_tail
56
- puts "---"
57
- date = Time.now.strftime('%a %b %d %H:%M:%S %Z %Y')
58
- puts "run by https://github.com/jordimassaguerpla/gems-status"
59
- puts "#{date} - version: #{GemsStatus::VERSION}"
60
- end
61
-
62
74
  end
63
75
  end
@@ -1,5 +1,7 @@
1
1
  require "openssl"
2
2
  OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
3
+ require "gmail"
4
+ require "rubygems/format"
3
5
 
4
6
  module GemsStatus
5
7
  class Mail
@@ -161,6 +163,34 @@ module GemsStatus
161
163
  return license
162
164
  end
163
165
 
166
+ def Utils.send_email(email_receiver, email_username, email_password, name, mssg)
167
+ Gmail.new(email_username, email_password) do |gmail|
168
+ gmail.deliver do
169
+ to email_receiver
170
+ subject "[gems-status] security alerts for #{name}"
171
+ text_part do
172
+ body mssg
173
+ end
174
+ end
175
+ end
176
+ end
177
+
178
+ def Utils.download_date(name, version)
179
+ Utils::log_debug "looking for date for #{name} - #{version}"
180
+ begin
181
+ versions = JSON.parse(open("https://rubygems.org/api/v1/versions/#{name}.json").read)
182
+ versions.each do |version|
183
+ if Gem::Version.new(version["number"]) == version
184
+ Utils::log_debug "Date for #{name} - #{version} : #{version["built_at"]}"
185
+ return Time.parse version["built_at"]
186
+ end
187
+ end
188
+ rescue
189
+ Utils::log_error(name, "There was a problem opening https://rubygems.org/api/v1/versions/#{name}.json")
190
+ end
191
+ nil
192
+ end
193
+
164
194
  private
165
195
 
166
196
  def Utils.download_gem(name, version, gems_url)
@@ -0,0 +1,48 @@
1
+ require './test/test-helper.rb'
2
+ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
3
+ require 'test/unit'
4
+ require 'gems-status'
5
+
6
+ module GemsStatus
7
+ class Utils
8
+ def self.download_md5(name, version, gems_url)
9
+ "12345"
10
+ end
11
+ def self.download_license(name, version, gems_url)
12
+ "license"
13
+ end
14
+ def self.download_date(name, version)
15
+ Time.parse "2012/03/01"
16
+ end
17
+ end
18
+ class GemSimpleTest < Test::Unit::TestCase
19
+ def test_from_git
20
+ gs = GemSimple.new("name", "version", "md5", "origin")
21
+ assert !gs.from_git?
22
+ gs = GemSimple.new("name", "version", "md5", "origin", "git://blalba")
23
+ assert gs.from_git?
24
+ end
25
+
26
+ def test_license
27
+ gs = GemSimple.new("name", "version", "md5", "origin")
28
+ assert_equal gs.license, "license"
29
+ gs = GemSimple.new("name", "version", "md5", "origin", "git://blalba")
30
+ assert_equal gs.license, nil
31
+ end
32
+
33
+ def test_md5
34
+ gs = GemSimple.new("name", "version", "md5", "origin")
35
+ assert_equal gs.md5, "12345"
36
+ gs = GemSimple.new("name", "version", "md5", "origin", "git://blalba")
37
+ assert_equal gs.md5, nil
38
+ end
39
+
40
+ def test_date
41
+ gs = GemSimple.new("name", "version", "md5", "origin")
42
+ assert_equal gs.date, Time.parse("2012/03/01")
43
+ gs = GemSimple.new("name", "version", "md5", "origin", "git://blalba")
44
+ assert_equal gs.date, Time.parse("2012/03/01")
45
+ end
46
+
47
+ end
48
+ end
@@ -0,0 +1,17 @@
1
+ require './test/test-helper.rb'
2
+ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
3
+ require 'test/unit'
4
+ require 'gems-status'
5
+
6
+ module GemsStatus
7
+ class GemTest
8
+ attr_accessor :license
9
+ end
10
+ class HasALicenseTest < Test::Unit::TestCase
11
+ def test_check
12
+ gem = GemTest.new
13
+ gem.license = "something"
14
+ assert GemsStatus::HasALicense.new(nil).check?(gem)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,28 @@
1
+ require './test/test-helper.rb'
2
+ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
3
+ require 'test/unit'
4
+ require 'gems-status'
5
+
6
+ module GemsStatus
7
+ class GemTest
8
+ attr_accessor :license
9
+ end
10
+ class IsNotGplTest < Test::Unit::TestCase
11
+ def test_check
12
+ gem = GemTest.new
13
+ gem.license = "something"
14
+ assert GemsStatus::IsNotGpl.new(nil).check?(gem)
15
+ gem.license = "GPL"
16
+ assert !GemsStatus::IsNotGpl.new(nil).check?(gem)
17
+ gem.license = "GPLv2"
18
+ assert !GemsStatus::IsNotGpl.new(nil).check?(gem)
19
+ gem.license = "GPLblabla "
20
+ assert !GemsStatus::IsNotGpl.new(nil).check?(gem)
21
+ end
22
+
23
+ def test_when_there_is_no_license
24
+ gem = GemTest.new
25
+ assert GemsStatus::IsNotGpl.new(nil).check?(gem)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,34 @@
1
+
2
+ require './test/test-helper.rb'
3
+ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
4
+ require 'test/unit'
5
+ require 'gems-status'
6
+
7
+ module GemsStatus
8
+ class Utils
9
+ def self.download_md5(name, version, gems_url)
10
+ "12345"
11
+ end
12
+ def self.download_license(name, version, gems_url)
13
+ "license"
14
+ end
15
+ def self.download_date(name, version)
16
+ Time.parse "2012/03/01"
17
+ end
18
+ end
19
+ class IsRubygemsTest < Test::Unit::TestCase
20
+ def test_check
21
+ ch = IsRubygems.new([])
22
+ gem = GemSimple.new("name", "version", "md5", "origin")
23
+ def gem.md5
24
+ return "12345"
25
+ end
26
+ assert ch.check?(gem)
27
+ gem = GemSimple.new("name", "version", "md5", "origin")
28
+ def gem.md5
29
+ return "_"
30
+ end
31
+ assert !ch.check?(gem)
32
+ end
33
+ end
34
+ end
@@ -13,36 +13,43 @@ module GemsStatus
13
13
  puts "DEBUG: dir : #{dir} #{dir.class.name}"
14
14
  @filename = "#{dir}/Gemfile.lock.test"
15
15
  @gems_url = ""
16
- @result = {}
17
16
  end
18
17
  end
19
18
 
20
19
  class TestLockfileGems < Test::Unit::TestCase
21
20
  def test_get_rubygems_names
22
21
  lockfilegems = LockfileGemsTest.new
23
- lockfilegems.execute
24
- assert(lockfilegems.result.length == 6)
25
- result = lockfilegems.result["test"].name
22
+ gem_list = lockfilegems.gem_list
23
+ assert(gem_list.length == 6)
24
+ result = gem_list["test"].name
26
25
  assert_equal("test",result)
27
- result = lockfilegems.result["test"].version
26
+ result = gem_list["test"].version
28
27
  assert_equal(Gem::Version.new("0.8.6"), result)
29
- result = lockfilegems.result["test2"].name
28
+ result = gem_list["test2"].name
30
29
  assert_equal("test2",result)
31
- result = lockfilegems.result["test2"].version
30
+ result = gem_list["test2"].version
32
31
  assert_equal(Gem::Version.new("1.2.3"), result)
33
- result = lockfilegems.result["test3"].name
32
+ result = gem_list["test3"].name
34
33
  assert_equal("test3",result)
35
- result = lockfilegems.result["test3"].version
34
+ result = gem_list["test3"].version
36
35
  assert_equal(Gem::Version.new("1.2.3"), result)
37
- result = lockfilegems.result["test4"].name
36
+ result = gem_list["test4"].name
38
37
  assert_equal("test4",result)
39
- result = lockfilegems.result["test4"].version
38
+ result = gem_list["test4"].version
40
39
  assert_equal(Gem::Version.new("1.2.3"), result)
41
- result = lockfilegems.result["from_git"].version
40
+ result = gem_list["from_git"].version
42
41
  assert_equal(Gem::Version.new("1.0.3"), result)
43
- result = lockfilegems.result["dep_from_git"].version
42
+ result = gem_list["dep_from_git"].version
44
43
  assert_equal(Gem::Version.new("1.0.0"), result)
45
44
  end
45
+ def test_filename
46
+ conf = {}
47
+ conf["filename"] = "fn"
48
+ conf["gems_url"] = "gu"
49
+ conf["classname"] = "LockfileGems"
50
+ lg = GemsStatus::LockfileGems.new(conf)
51
+ assert_equal(lg.filename, "fn")
52
+ end
46
53
 
47
54
  end
48
55
 
@@ -0,0 +1,158 @@
1
+ require './test/test-helper.rb'
2
+ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
3
+ require 'test/unit'
4
+ require 'gems-status'
5
+
6
+ module GemsStatus
7
+ class NotASecurityAlertChecker
8
+ attr_reader :security_messages, :fixed
9
+ attr_accessor :emails
10
+ def initialize(conf)
11
+ @security_messages = {}
12
+ @fixed = {}
13
+ end
14
+ public :match_name, :key_for_emails, :look_in_emails, :gem_uri, :filter_security_messages_already_fixed
15
+ end
16
+ class MockGem
17
+ def name
18
+ "NAME"
19
+ end
20
+ def origin
21
+ "ORG"
22
+ end
23
+ def date
24
+ Date.new(2012, 12, 12)
25
+ end
26
+ end
27
+ class MockEmail
28
+ def uid
29
+ "UID"
30
+ end
31
+ def subject
32
+ "subject"
33
+ end
34
+ end
35
+ class NotASecurityAlertCheckerTest <Test::Unit::TestCase
36
+ def test_match_name
37
+ ch = NotASecurityAlertChecker.new([])
38
+ assert ch.match_name("rubygem mail", "mail")
39
+ assert !ch.match_name("mail","mail")
40
+ assert ch.match_name("ruby mail", "mail")
41
+ assert ch.match_name("mail gem", "mail")
42
+ end
43
+
44
+ def test_key_for_emails
45
+ ch = NotASecurityAlertChecker.new([])
46
+ result = ch.key_for_emails( "LN", MockGem.new, MockEmail.new)
47
+ assert_equal "email_LN_NAME_ORG_UID", result
48
+ end
49
+
50
+ def test_look_in_emails_for_rubyonrails_sec_mail
51
+ ch = NotASecurityAlertChecker.new([])
52
+ ch.emails = {
53
+ "rubyonrails-security@googlegroups.com" => [MockEmail.new]
54
+ }
55
+ gem = MockGem.new
56
+ def gem.name
57
+ "rails"
58
+ end
59
+ assert_equal Hash, ch.security_messages.class
60
+ assert_equal 0, ch.security_messages.length
61
+ ch.look_in_emails(gem)
62
+ assert_equal Hash, ch.security_messages.class
63
+ assert_equal 1, ch.security_messages.length
64
+ end
65
+
66
+ def test_look_in_emails_for_other_mail
67
+ mail = MockEmail.new
68
+ def mail.subject
69
+ "gem rails"
70
+ end
71
+ ch = NotASecurityAlertChecker.new([])
72
+ ch.emails = {
73
+ "other" => [mail]
74
+ }
75
+ gem = MockGem.new
76
+ def gem.name
77
+ "rails"
78
+ end
79
+ assert_equal Hash, ch.security_messages.class
80
+ assert_equal 0, ch.security_messages.length
81
+ ch.look_in_emails(gem)
82
+ assert_equal Hash, ch.security_messages.class
83
+ assert_equal 1, ch.security_messages.length
84
+ end
85
+
86
+ def test_gem_uri_with_project_uri
87
+ ch = NotASecurityAlertChecker.new([])
88
+
89
+ result = ch.gem_uri({"project_uri" => "github.com/a"})
90
+ assert_equal "github.com/a", result
91
+ result = ch.gem_uri({"project_uri" => "a"})
92
+ assert_equal nil, result
93
+ end
94
+
95
+ def test_gem_uri_with_homepage_url
96
+ ch = NotASecurityAlertChecker.new([])
97
+
98
+ result = ch.gem_uri({"homepage_uri" => "github.com/a"})
99
+ assert_equal "github.com/a", result
100
+ result = ch.gem_uri({"homepage_uri" => "a"})
101
+ assert_equal nil, result
102
+ end
103
+
104
+ def test_gem_uri_with_source_code_uri
105
+ ch = NotASecurityAlertChecker.new([])
106
+
107
+ result = ch.gem_uri({"source_code_uri" => "github.com/a"})
108
+ assert_equal "github.com/a", result
109
+ result = ch.gem_uri({"source_code_uri" => "a"})
110
+ assert_equal nil, result
111
+ end
112
+
113
+ def test_filter_security_messages_already_fixed_with_equal_version
114
+ ch = NotASecurityAlertChecker.new([])
115
+ gem = MockGem.new
116
+ ch.security_messages["key"] = gem
117
+ ch.fixed["key"] = "1.1.1"
118
+ version = Gem::Version.new("1.1.1")
119
+ date = Date.new(2011, 12, 12)
120
+ ch.filter_security_messages_already_fixed(version, date)
121
+ assert_equal 0, ch.security_messages.length
122
+ end
123
+
124
+ def test_filter_security_messages_already_fixed_with_newer_version
125
+ ch = NotASecurityAlertChecker.new([])
126
+ gem = MockGem.new
127
+ ch.security_messages["key"] = gem
128
+ ch.fixed["key"] = "1.1.0"
129
+ version = Gem::Version.new("1.1.1")
130
+ date = Date.new(2011, 12, 12)
131
+ ch.filter_security_messages_already_fixed(version, date)
132
+ assert_equal 0, ch.security_messages.length
133
+ end
134
+
135
+ def test_filter_security_messages_already_fixed_with_older_version
136
+ ch = NotASecurityAlertChecker.new([])
137
+ gem = MockGem.new
138
+ ch.security_messages["key"] = gem
139
+ ch.fixed["key"] = "1.1.2"
140
+ version = Gem::Version.new("1.1.1")
141
+ date = Date.new(2011, 12, 12)
142
+ ch.filter_security_messages_already_fixed(version, date)
143
+ assert_equal 1, ch.security_messages.length
144
+ end
145
+
146
+ def test_filter_security_messages_already_fixed_with_newer_date
147
+ ch = NotASecurityAlertChecker.new([])
148
+ gem = MockGem.new
149
+ ch.security_messages["key"] = gem
150
+ ch.fixed["key"] = "1.1.2"
151
+ version = Gem::Version.new("1.1.1")
152
+ date = Date.new(2013, 12, 12)
153
+ ch.filter_security_messages_already_fixed(version, date)
154
+ assert_equal 0, ch.security_messages.length
155
+ end
156
+
157
+ end
158
+ end