class FunWith::Passwords::FileStore
The FileStore
knows only where to save itself, and how to encrypt and decrypt the file. The contents of a file are a mystery for Keychain
to deal with
Constants
- DEFAULT_DIR
- DEFAULT_EXT
- DEFAULT_FILENAME
Attributes
key_chain[RW]
password_file[RW]
Public Class Methods
default_file()
click to toggle source
# File lib/fun_with/passwords/file_store.rb, line 14 def self.default_file DEFAULT_DIR.join( "#{DEFAULT_FILENAME}.#{DEFAULT_EXT}" ) end
new( filename = nil )
click to toggle source
if the key is nil, waits until a password is requested or added to decrypt password file
# File lib/fun_with/passwords/file_store.rb, line 19 def initialize( filename = nil ) @password_file = expand_filepath( filename ) @password_file.touch end
Public Instance Methods
save( yaml, master_key )
click to toggle source
def initialize_key_chain_if_needed( keychain_keys, master_key )
unless @key_chain @key_chain = Keychain.new( :keys => keychain_keys, :master_key => master_key ) @key_chain.file_store = self end
end
# File lib/fun_with/passwords/file_store.rb, line 40 def save( yaml, master_key ) encrypted_message = Crypt.encrypt( yaml, master_key ) @password_file.write( encrypted_message ) true rescue Exception => e false end
unlock( master_key )
click to toggle source
sends back a Keychain
that knows where its store is
# File lib/fun_with/passwords/file_store.rb, line 25 def unlock( master_key ) if @password_file.file? && !@password_file.empty? YAML.load( Crypt.decrypt( @password_file.read, master_key ) ) else {} end end
Protected Instance Methods
expand_filepath( filename = nil )
click to toggle source
Just the filename? Send it to the default directory. nil? Use the default filename and default directory. Only a directory given? append default filename It’s an existing file? Overwrite, I suppose. doesn’t exist? Assume filename if a dot is included
# File lib/fun_with/passwords/file_store.rb, line 54 def expand_filepath( filename = nil ) if filename.nil? return DEFAULT_DIR.join( "#{DEFAULT_FILENAME}.#{DEFAULT_EXT}" ) end file = filename.fwf_filepath if file.directory? return file.join( "#{DEFAULT_FILENAME}.#{DEFAULT_EXT}" ) elsif file.file? return file end file = file.expand if file.directory? return file.join( "#{DEFAULT_FILENAME}.#{DEFAULT_EXT}" ) else file.touch return file end end