password-store

Simple password manager using gpg and ordinary unix directories
git clone https://git.zx2c4.com/password-store
Log | Files | Refs | README | LICENSE

gorilla2pass.rb (1681B)


      1 #!/usr/bin/env ruby
      2 
      3 # Copyright (C) 2013 David Sklar <david.sklar@gmail.com>. All Rights Reserved.
      4 # This file is licensed under the GPLv2+. Please see COPYING for more information.
      5 
      6 entries = {}
      7 
      8 class HashCounter
      9 
     10   def initialize
     11     @h = Hash.new {|h,k| h[k] = 2 }
     12   end
     13 
     14   def get(k)
     15     v = @h[k]
     16     @h[k] = v + 1
     17     v
     18   end
     19 end
     20 
     21 hc = HashCounter.new
     22 
     23 $stdin.each do |line|
     24   uuid, group, title, url, user, password, notes = line.strip.split(',')
     25   next if uuid == "uuid"
     26 
     27   # check for missing group
     28   # check for missing title
     29 
     30   prefix = "#{group}/#{title}".gsub(/[\s\'\"()!]/,'')
     31 
     32 
     33   if user && user.length > 0
     34     entries["#{prefix}/user"] = user
     35   end
     36   if url && url.length > 0
     37     entries["#{prefix}/url"] = url
     38   end
     39   if password && password.length > 0
     40     entries["#{prefix}/password"] = password
     41   end
     42   if notes && notes.length > 0
     43     entries["#{prefix}/notes"] = notes.gsub('\n',"\n").strip
     44   end
     45 end
     46 
     47 entries.keys.each do |k|
     48   if k =~ /^(.+?)-merged\d{4}-\d\d-\d\d\d\d:\d\d:\d\d(\/.+)$/
     49     other = $1 + $2
     50     if entries.has_key?(other)
     51       if entries[k] == entries[other]
     52         entries.delete(k)
     53       else
     54         i = hc.get(other)
     55         entries["#{other}#{i}"] = entries[k]
     56         entries.delete(k)
     57       end
     58     else
     59       entries[other] = entries[k]
     60       entries.delete(k)
     61     end
     62   end
     63 end
     64 
     65 pass_top_level = "Gorilla"
     66 entries.keys.each do |k|
     67   print "#{k}...(#{entries[k]})..."
     68   IO.popen("pass insert -e -f '#{pass_top_level}/#{k}' > /dev/null", 'w') do |io|
     69     io.puts entries[k] + "\n"
     70   end
     71   if $? == 0
     72     puts " done!"
     73   else
     74     puts " error!"
     75   end
     76 end