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