Commit 74c4021

mo <mo.khan@gmail.com>
2018-02-11 20:38:02
check if a file is encrypted before decrypting.
1 parent d0db2be
Changed files (2)
exe/tfa
@@ -1,5 +1,9 @@
 #!/usr/bin/env ruby
 require 'tfa'
 
-result = TFA::CLI.start(ARGV)
-puts result unless result.is_a?(IO)
+begin
+  result = TFA::CLI.start(ARGV)
+  puts result unless result.is_a?(IO)
+rescue OpenSSL::Cipher::CipherError => error
+  puts error.message
+end
lib/tfa/secure_proxy.rb
@@ -20,8 +20,6 @@ module TFA
     end
 
     def decrypt!
-      return unless File.exist?(@original.path)
-
       data = JSON.parse(IO.read(@original.path), symbolize_names: true)
       decipher = OpenSSL::Cipher.new(data[:algorithm])
       decipher.decrypt
@@ -35,10 +33,19 @@ module TFA
     def method_missing(name, *args, &block)
       super unless @original.respond_to?(name)
 
-      decrypt!
+      was_encrypted = encrypted?
+      decrypt! if was_encrypted
       result = @original.public_send(name, *args, &block)
-      encrypt!
+      encrypt! if was_encrypted
       result
     end
+
+    def encrypted?
+      return false unless File.exist?(@original.path)
+      JSON.parse(IO.read(@original.path))
+      true
+    rescue JSON::ParseError
+      false
+    end
   end
 end