Moved back to compact class naming to use File.exitst?
This commit is contained in:
parent
135dcceafd
commit
95e27b0994
1 changed files with 71 additions and 74 deletions
|
@ -1,87 +1,84 @@
|
||||||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||||
|
# rubocop:disable ClassAndModuleChildren
|
||||||
|
|
||||||
class Store
|
class Store::Provider::File
|
||||||
module Provider
|
|
||||||
module File
|
|
||||||
|
|
||||||
def self.add(data, sha)
|
def self.add(data, sha)
|
||||||
write_to_fs(data, sha)
|
write_to_fs(data, sha)
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.get(sha)
|
def self.get(sha)
|
||||||
read_from_fs(sha)
|
read_from_fs(sha)
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.delete(sha)
|
def self.delete(sha)
|
||||||
unlink_from_fs(sha)
|
unlink_from_fs(sha)
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
# generate file location
|
# generate file location
|
||||||
def self.get_locaton(sha)
|
def self.get_locaton(sha)
|
||||||
|
|
||||||
# generate directory
|
# generate directory
|
||||||
base = Rails.root.to_s + '/storage/fs/'
|
base = Rails.root.to_s + '/storage/fs/'
|
||||||
parts = sha.scan(/.{1,4}/)
|
parts = sha.scan(/.{1,4}/)
|
||||||
path = parts[ 1 .. 10 ].join('/') + '/'
|
path = parts[ 1 .. 10 ].join('/') + '/'
|
||||||
file = parts[ 11 .. parts.count ].join('')
|
file = parts[ 11 .. parts.count ].join('')
|
||||||
location = "#{base}/#{path}"
|
location = "#{base}/#{path}"
|
||||||
|
|
||||||
# create directory if not exists
|
# create directory if not exists
|
||||||
if !File.exist?( location )
|
if !File.exist?( location )
|
||||||
FileUtils.mkdir_p( location )
|
FileUtils.mkdir_p( location )
|
||||||
end
|
end
|
||||||
location += file
|
location += file
|
||||||
end
|
end
|
||||||
|
|
||||||
# unlink file from fs
|
# unlink file from fs
|
||||||
def self.unlink_from_fs(sha)
|
def self.unlink_from_fs(sha)
|
||||||
if File.exist?( get_locaton(sha) )
|
if File.exist?( get_locaton(sha) )
|
||||||
puts "NOTICE: storge remove '#{ get_locaton(sha) }'"
|
puts "NOTICE: storge remove '#{ get_locaton(sha) }'"
|
||||||
File.delete( get_locaton(sha) )
|
File.delete( get_locaton(sha) )
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# read file from fs
|
|
||||||
def self.read_from_fs(sha)
|
|
||||||
puts "read from fs #{ get_locaton(sha) }"
|
|
||||||
if !File.exist?( get_locaton(sha) )
|
|
||||||
raise "ERROR: No such file #{ get_locaton(sha) }"
|
|
||||||
end
|
|
||||||
data = File.open( get_locaton(sha), 'rb' )
|
|
||||||
content = data.read
|
|
||||||
|
|
||||||
# check sha
|
|
||||||
local_sha = Digest::SHA256.hexdigest( content )
|
|
||||||
if local_sha != sha
|
|
||||||
raise "ERROR: Corrupt file in fs #{ get_locaton(sha) }, sha should be #{sha} but is #{local_sha}"
|
|
||||||
end
|
|
||||||
content
|
|
||||||
end
|
|
||||||
|
|
||||||
# write file to fs
|
|
||||||
def self.write_to_fs(data, sha)
|
|
||||||
|
|
||||||
# install file
|
|
||||||
permission = '600'
|
|
||||||
if !File.exist?( get_locaton(sha) )
|
|
||||||
puts "NOTICE: storge write '#{ get_locaton(sha) }' (#{permission})"
|
|
||||||
file = File.new( get_locaton(sha), 'wb' )
|
|
||||||
file.write( data )
|
|
||||||
file.close
|
|
||||||
end
|
|
||||||
File.chmod( permission.to_i(8), get_locaton(sha) )
|
|
||||||
|
|
||||||
# check sha
|
|
||||||
local_sha = Digest::SHA256.hexdigest( read_from_fs(sha) )
|
|
||||||
if sha != local_sha
|
|
||||||
raise "ERROR: Corrupt file in fs #{ get_locaton(sha) }, sha should be #{sha} but is #{local_sha}"
|
|
||||||
end
|
|
||||||
|
|
||||||
true
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# read file from fs
|
||||||
|
def self.read_from_fs(sha)
|
||||||
|
puts "read from fs #{ get_locaton(sha) }"
|
||||||
|
if !File.exist?( get_locaton(sha) )
|
||||||
|
raise "ERROR: No such file #{ get_locaton(sha) }"
|
||||||
|
end
|
||||||
|
data = File.open( get_locaton(sha), 'rb' )
|
||||||
|
content = data.read
|
||||||
|
|
||||||
|
# check sha
|
||||||
|
local_sha = Digest::SHA256.hexdigest( content )
|
||||||
|
if local_sha != sha
|
||||||
|
raise "ERROR: Corrupt file in fs #{ get_locaton(sha) }, sha should be #{sha} but is #{local_sha}"
|
||||||
|
end
|
||||||
|
content
|
||||||
|
end
|
||||||
|
|
||||||
|
# write file to fs
|
||||||
|
def self.write_to_fs(data, sha)
|
||||||
|
|
||||||
|
# install file
|
||||||
|
permission = '600'
|
||||||
|
if !File.exist?( get_locaton(sha) )
|
||||||
|
puts "NOTICE: storge write '#{ get_locaton(sha) }' (#{permission})"
|
||||||
|
file = File.new( get_locaton(sha), 'wb' )
|
||||||
|
file.write( data )
|
||||||
|
file.close
|
||||||
|
end
|
||||||
|
File.chmod( permission.to_i(8), get_locaton(sha) )
|
||||||
|
|
||||||
|
# check sha
|
||||||
|
local_sha = Digest::SHA256.hexdigest( read_from_fs(sha) )
|
||||||
|
if sha != local_sha
|
||||||
|
raise "ERROR: Corrupt file in fs #{ get_locaton(sha) }, sha should be #{sha} but is #{local_sha}"
|
||||||
|
end
|
||||||
|
|
||||||
|
true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue