class Encruby::File
Attributes
path[RW]
Public Class Methods
new(path, key, options = {})
click to toggle source
# File lib/encruby/file.rb, line 5 def initialize(path, key, options = {}) @options, @path = options, Pathname.new(path.to_s) @options[:save] ||= @options[:replace] case when !@path.readable? raise Encruby::Error, "Unable to read file: #{path}" when !@path.file? raise Encruby::Error, "Must be a file: #{path}" end @crypto = Encruby::Message.new(key) end
Public Instance Methods
decrypt()
click to toggle source
# File lib/encruby/file.rb, line 45 def decrypt content = extract_meta(@path.read) unless content[:code] && data = content[:code].split(/^__END__\s*\n/)[1] raise Error, "No encrypted content found. You sure this file has been encrypted?" end hash = @options[:signature] if @options[:verify] response = @crypto.decrypt(data, hash: hash) decrypted, hmac = response[:content], response[:signature] shebang = decrypted.lines[0] if decrypted.lines[0] =~ /^#\!/ decrypted = decrypted.lines[1..-1].join if shebang content = "#{shebang}#{content[:comments]}#{decrypted}" path = save_converted(type: :decrypt, content: content) if @options[:save] { signature: hmac, content: content, path: path } end
encrypt()
click to toggle source
# File lib/encruby/file.rb, line 33 def encrypt content = extract_meta(@path.read) data = content[:shebang].to_s + content[:code] response = @crypto.encrypt(data) encrypted, hmac = response[:content], response[:signature] shebang = "#{Encruby.shebang}\n" if content[:shebang] content = "#{shebang}#{content[:comments]}\n__END__\n#{encrypted}" path = save_converted(type: :encrypt, content: content) if @options[:save] { signature: hmac, content: content, path: path } end
save_converted(type: :encrypt, content: nil)
click to toggle source
# File lib/encruby/file.rb, line 19 def save_converted(type: :encrypt, content: nil) if @options[:replace] path = @path else extension = type == :encrypt ? ".enc" : ".dec" path = @path.basename('.*').to_s + extension + @path.extname.to_s path = @path.dirname.join(path) end path.open("w"){|f| f.puts content} path.chmod(@path.stat.mode) path.chown(@path.stat.uid, @path.stat.gid) path end
Private Instance Methods
extract_meta(content)
click to toggle source
# File lib/encruby/file.rb, line 64 def extract_meta(content) shebang = content.lines[0] if content =~ /^#\!/ code = content.scan(/^\s+[^\s|#].*/m)[0] comments = content.gsub(/^\s+[^\s|#].*/m, '') comments = comments.gsub(shebang, '') if shebang { shebang: shebang, comments: comments, code: code } end