mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2024-12-11 22:24:21 +01:00
58 lines
1.7 KiB
Ruby
58 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# Accounting integrity verifications
|
|
module Integrity; end
|
|
|
|
# Provides checksums for archiving control
|
|
class Integrity::Checksum
|
|
class << self
|
|
def code
|
|
dir = Dir.pwd
|
|
|
|
files = if Rails.env.test?
|
|
# in test mode, we compute a "lite" checksum to speed-up test running time
|
|
children_files("#{dir}/*")
|
|
else
|
|
children_files("#{dir}/*")
|
|
.concat(children_files("#{dir}/app/**/*"))
|
|
.concat(children_files("#{dir}/bin/**/*"))
|
|
.concat(children_files("#{dir}/config/**/*"))
|
|
.concat(children_files("#{dir}/db/**/*"))
|
|
.concat(children_files("#{dir}/doc/**/*"))
|
|
.concat(children_files("#{dir}/docker/**/*"))
|
|
.concat(children_files("#{dir}/lib/**/*"))
|
|
.concat(children_files("#{dir}/node_modules/**/*"))
|
|
.concat(children_files("#{dir}/plugins/**/*"))
|
|
.concat(children_files("#{dir}/provision/**/*"))
|
|
.concat(children_files("#{dir}/scripts/**/*"))
|
|
.concat(children_files("#{dir}/test/**/*"))
|
|
.concat(children_files("#{dir}/vendor/**/*"))
|
|
end
|
|
|
|
content = files.map { |f| File.read(f) }.join
|
|
|
|
Integrity::Checksum.text(content)
|
|
end
|
|
|
|
def file(path)
|
|
return unless File.exist?(path)
|
|
|
|
content = File.read(path)
|
|
|
|
Integrity::Checksum.text(content)
|
|
end
|
|
|
|
def text(data)
|
|
require 'sha3'
|
|
|
|
SHA3::Digest.hexdigest(:sha256, data)
|
|
end
|
|
|
|
private
|
|
|
|
def children_files(path)
|
|
Dir[path].reject { |f| File.directory?(f) }
|
|
end
|
|
end
|
|
end
|