48 lines
1.1 KiB
Ruby
48 lines
1.1 KiB
Ruby
require "digest"
|
|
|
|
module Hbc
|
|
module Verify
|
|
class Checksum
|
|
def self.me?(cask)
|
|
return true unless cask.sha256 == :no_check
|
|
ohai "No checksum defined for Cask #{cask}, skipping verification"
|
|
false
|
|
end
|
|
|
|
attr_reader :cask, :downloaded_path
|
|
|
|
def initialize(cask, downloaded_path)
|
|
@cask = cask
|
|
@downloaded_path = downloaded_path
|
|
end
|
|
|
|
def verify
|
|
return unless self.class.me?(cask)
|
|
ohai "Verifying checksum for Cask #{cask}"
|
|
verify_checksum
|
|
end
|
|
|
|
private
|
|
|
|
def expected
|
|
@expected ||= cask.sha256
|
|
end
|
|
|
|
def computed
|
|
@computed ||= Digest::SHA2.file(downloaded_path).hexdigest
|
|
end
|
|
|
|
def verify_checksum
|
|
raise CaskSha256MissingError.new(cask.token, expected, computed) if expected.nil? || expected.empty?
|
|
|
|
if expected == computed
|
|
odebug "SHA256 checksums match"
|
|
else
|
|
ohai 'Note: running "brew update" may fix sha256 checksum errors'
|
|
raise CaskSha256MismatchError.new(cask.token, expected, computed, downloaded_path)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|