Class: RapidVaults

Inherits:
Object
  • Object
show all
Defined in:
lib/rapid-vaults.rb

Overview

interfaces from cli/api, validates settings, and then distributes actions to appropriate classes

Defined Under Namespace

Classes: API, CLI

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.process(settings) ⇒ Object

method for processing the settings and inputs



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/rapid-vaults.rb', line 22

def self.process(settings)
  # check for problems with arguments
  if settings[:algorithm] == :gpgme
    case settings[:action]
    when :generate
      raise 'GPG params file argument required for generation.' unless settings.key?(:gpgparams)
      return
    when :decrypt, :encrypt
      raise 'File and password arguments required for encryption or decryption.' unless settings.key?(:file) && settings.key?(:pw)
    else raise 'Action must be one of generate, encrypt, or decrypt.'
    end
  else
    case settings[:action]
    when :generate then return
    when :encrypt
      raise 'File, key, and nonce arguments are required for encryption.' unless settings.key?(:file) && settings.key?(:key) && settings.key?(:nonce)
    when :decrypt
      raise 'File, key, nonce, and tag arguments are required for decryption.' unless settings.key?(:file) && settings.key?(:key) && settings.key?(:nonce) && settings.key?(:tag)
    else raise 'Action must be one of generate, encrypt, or decrypt.'
    end
  end

  # check for problems with inputs and read in files
  raise 'Password must be a string.' if settings.key?(:pw) && !settings[:pw].is_a?(String)
  File.file?(settings[:file]) ? settings[:file] = File.read(settings[:file]) : (raise 'Input file is not an existing file.')
  # gnugp only uses password and file
  return if settings[:algorithm] == :gpgme
  File.file?(settings[:key]) ? settings[:key] = File.read(settings[:key]) : (raise 'Input key is not an existing file.')
  File.file?(settings[:nonce]) ? settings[:nonce] = File.read(settings[:nonce]) : (raise 'Input nonce is not an existing file.')
  # only decrypt needs a tag input
  return unless settings[:action] == :decrypt
  File.file?(settings[:tag]) ? settings[:tag] = File.read(settings[:tag]) : (raise 'Input tag is not an existing file.')
end

Instance Method Details

#main(settings) ⇒ Object

main runner for software



8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/rapid-vaults.rb', line 8

def main(settings)
  # process settings
  self.class.process(settings)

  # execute desired action and algorithm via dynamic call
  # public_send("#{settings[:action].capitalize}.#{settings[:algorithm]}".to_sym)
  case settings[:action]
  when :generate then Generate.public_send(settings[:algorithm], settings)
  when :encrypt then Encrypt.public_send(settings[:algorithm], settings)
  when :decrypt then Decrypt.public_send(settings[:algorithm], settings)
  end
end