Class: GemsStatus::Utils
- Inherits:
-
Object
- Object
- GemsStatus::Utils
- Defined in:
- lib/gems-status/utils.rb
Constant Summary collapse
- EMAIL_TMP_PATH =
"tmp/utils/mail"- @@errors =
{}
- @@md5_sums =
{}
- @@licenses =
{}
- @@keys =
{}
- @@gems =
{}
- @@known_licenses =
{}
- @@emails =
nil
Instance Attribute Summary collapse
-
#errors ⇒ Object
Returns the value of attribute errors.
Class Method Summary collapse
- .check_parameters(classname, conf, parameters) ⇒ Object
- .download_date(name, version) ⇒ Object
- .download_emails(email_username, email_password, mailing_lists) ⇒ Object
- .download_license(name, version, gems_url) ⇒ Object
- .download_md5(name, version, gems_url) ⇒ Object
- .errors ⇒ Object
- .get_emails_from_fs ⇒ Object
- .known_licenses ⇒ Object
- .known_licenses=(licenses) ⇒ Object
- .log_debug(msg) ⇒ Object
- .log_error(name, msg) ⇒ Object
- .save_email_to_fs(listname, mail) ⇒ Object
- .send_email(email_receiver, email_username, email_password, name, mssg) ⇒ Object
Instance Attribute Details
#errors ⇒ Object
Returns the value of attribute errors.
13 14 15 |
# File 'lib/gems-status/utils.rb', line 13 def errors @errors end |
Class Method Details
.check_parameters(classname, conf, parameters) ⇒ Object
103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/gems-status/utils.rb', line 103 def Utils.check_parameters(classname, conf, parameters) if !conf['classname'] then raise "trying to initialize #{classname} when parameter classname does not exists" end if conf['classname'] != classname then raise "trying to initialize #{classname} when parameter classname is #{conf['classname']}" end parameters.each do |p| if !conf[p] then raise "parameter #{p} not found for #{classname}" end end end |
.download_date(name, version) ⇒ Object
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 |
# File 'lib/gems-status/utils.rb', line 178 def Utils.download_date(name, version) Utils::log_debug "looking for date for #{name} - #{version}" begin versions = JSON.parse(open("https://rubygems.org/api/v1/versions/#{name}.json").read) versions.each do |v| if Gem::Version.new(v["number"]) == version Utils::log_debug "Date for #{name} - #{version} : #{v["built_at"]}" return Time.parse v["built_at"] end end rescue Utils::log_error(name, "There was a problem opening https://rubygems.org/api/v1/versions/#{name}.json") end nil end |
.download_emails(email_username, email_password, mailing_lists) ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/gems-status/utils.rb', line 57 def Utils.download_emails(email_username, email_password, mailing_lists) begin self.get_emails_from_fs if @@emails.nil? rescue Exception => e self.log_error "", "There was a problem getting emails from filesystem #{e.}" end if @@emails.nil? self.log_error "", "There was a problem getting emails from filesystem" @@emails = {} end self.log_debug "Emails read from filesystem #{@@emails.to_a.flatten.length}" Gmail.new(email_username, email_password) do |gmail| mailing_lists.each do |mailing_list| @@emails[mailing_list] = [] unless @@emails[mailing_list] Utils::log_debug "New security email alerts from #{mailing_list} #{gmail.inbox.count( :unread, :to => mailing_list)}" gmail.inbox.emails(:unread, :to => mailing_list).each do |email| mail = GemsStatus::Mail.new mail.uid = email.uid mail.subject = email.subject Utils::log_debug "Read #{mail.subject}" @@emails[mailing_list] << mail begin self.save_email_to_fs(mailing_list, mail) email.read! rescue Exception => e self.log_error "", "Error saving mail to filesystem #{e.}" email.unread! end end end end return @@emails end |
.download_license(name, version, gems_url) ⇒ Object
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/gems-status/utils.rb', line 141 def Utils.download_license(name, version, gems_url) version = version.to_s if version.is_a? Gem::Version key = "#{name}-#{version}-#{gems_url.gsub("/", "_").gsub(":", "_")}" return @@licenses[key] if @@licenses[key] begin gem_file_path = self.download_gem(name, version, gems_url) rescue Exception => e self.log_error(name, e.) return nil end license = Gem::Format.from_file_by_path(gem_file_path).spec.license if !license || license.empty? if @@known_licenses[name] if @@known_licenses[name][version] license = @@known_licenses[name][version] Utils::log_debug "get license from known licenses for #{name} #{version}" else #@@known_licenses[name] but different version Utils::log_debug "I can't find license for #{name} but I have info from another version #{@@known_licenses[name].sort.last}" end end end @@licenses[key] = license return license end |
.download_md5(name, version, gems_url) ⇒ Object
127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/gems-status/utils.rb', line 127 def Utils.download_md5(name, version, gems_url) key = "#{name}-#{version}-#{gems_url.gsub("/", "_").gsub(":", "_")}" return @@md5_sums[key] if @@md5_sums[key] begin gem_file_path = self.download_gem(name, version, gems_url) rescue Exception => e self.log_error(name, e.) return nil end md5 = Digest::MD5.hexdigest(open(gem_file_path).read) @@md5_sums["#{name}-#{version}"] = md5 return md5 end |
.errors ⇒ Object
99 100 101 |
# File 'lib/gems-status/utils.rb', line 99 def Utils.errors return @@errors end |
.get_emails_from_fs ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/gems-status/utils.rb', line 23 def Utils.get_emails_from_fs @@emails = {} Dir.glob("#{EMAIL_TMP_PATH}/**/*").each do |filename| next unless File.file?(filename) open(filename, "r") do |file| mail = GemsStatus::Mail.new mailing_list = File.dirname(filename).split("/").pop mail.uid = File.basename(filename) mail.subject = file.read if @@emails[mailing_list] @@emails[mailing_list] << mail else @@emails[mailing_list] = [mail] end self.log_debug "email from filesystem #{filename}" end end end |
.known_licenses ⇒ Object
95 96 97 |
# File 'lib/gems-status/utils.rb', line 95 def Utils.known_licenses return @@known_licenses end |
.known_licenses=(licenses) ⇒ Object
91 92 93 |
# File 'lib/gems-status/utils.rb', line 91 def Utils.known_licenses=(licenses) @@known_licenses = licenses end |
.log_debug(msg) ⇒ Object
123 124 125 |
# File 'lib/gems-status/utils.rb', line 123 def Utils.log_debug(msg) $stderr.puts "DEBUG: #{msg}" end |
.log_error(name, msg) ⇒ Object
117 118 119 120 121 |
# File 'lib/gems-status/utils.rb', line 117 def Utils.log_error(name, msg) @@errors[name] = "\n" unless @@errors[name] @@errors[name] << msg << "\n" $stderr.puts "ERROR: #{msg}" end |
.save_email_to_fs(listname, mail) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/gems-status/utils.rb', line 43 def Utils.save_email_to_fs(listname, mail) dirname = "#{EMAIL_TMP_PATH}/#{listname}" filename = "#{dirname}/#{mail.uid}" if File.exists?(filename) self.log_debug "email had already been downloaded #{mail.uid} - skipping" return end Dir.mkdir(dirname) unless File.exists?(dirname) open(filename, "w") do |f| self.log_debug "writing email to fs #{mail.uid}" f.write(mail.subject) end end |
.send_email(email_receiver, email_username, email_password, name, mssg) ⇒ Object
166 167 168 169 170 171 172 173 174 175 176 |
# File 'lib/gems-status/utils.rb', line 166 def Utils.send_email(email_receiver, email_username, email_password, name, mssg) Gmail.new(email_username, email_password) do |gmail| gmail.deliver do to email_receiver subject "[gems-status] security alerts for #{name}" text_part do body mssg end end end end |