Advertisement
Guest User

Untitled

a guest
Jun 2nd, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.43 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. from sys import argv, exit, stdin
  4. from gtk import Clipboard
  5. from os import popen
  6. from pyme import core
  7.  
  8. import getpass
  9. import re
  10.  
  11.  
  12. class Pillow:
  13. def __init__(self):
  14. self.tacks = list()
  15.  
  16. def go(self, data):
  17. line = 1
  18. for i in data.split("\n"):
  19. if len(i) > 0 and i[0] != "#":
  20. reg = re.match("^([^\t]+)[\t]+([^\t]+)[\t]+(.+)$", i)
  21. if reg == None:
  22. print "Error while parsing line %d" % (line)
  23. else:
  24. t = Tack(reg.group(1), reg.group(2), reg.group(3))
  25. self.tacks.append(t)
  26.  
  27. line += 1
  28.  
  29. def filter(self, regex):
  30. result = list()
  31.  
  32. for t in self.tacks:
  33. if t.match(regex):
  34. result.append(t)
  35.  
  36. self.tacks = result
  37.  
  38. def result(self):
  39. l = len(self.tacks)
  40.  
  41. for i in self.tacks:
  42. print "MATCH %s" % (i)
  43. if l == 1:
  44. self._clipboard(i.password)
  45. break
  46.  
  47. def _clipboard(self, to_store):
  48. popen('xclip', 'wb').write(to_store)
  49. print "Password copied to clipboard."
  50.  
  51.  
  52. class Tack:
  53. def __init__(self, title, user, password):
  54. self.title = title
  55. self.user = user
  56. self.password = password
  57.  
  58. def __str__(self):
  59. return "%s (login: %s)" % (self.title, self.user)
  60.  
  61. def match(self, regex):
  62. if re.search(regex, getattr(self, "title"), re.IGNORECASE) != None:
  63. return True
  64.  
  65. return False
  66.  
  67. @property
  68. def title():
  69. return self.title
  70.  
  71. @property
  72. def user():
  73. return self.user
  74.  
  75. @property
  76. def password():
  77. return self.password
  78.  
  79.  
  80. class GnuPG:
  81. def __init__(self):
  82. c = core.Context()
  83. c.set_passphrase_cb(self._password)
  84. c.set_armor(1)
  85.  
  86. self.plain = core.Data()
  87. cipher = core.Data(file=argv[1])
  88.  
  89. c.op_decrypt(cipher, self.plain)
  90.  
  91. self.plain.seek(0, 0)
  92.  
  93. def read(self):
  94. return self.plain.read()
  95.  
  96. def _password(self, x, y, z, hook=None):
  97. p = getpass.getpass()
  98. return p
  99.  
  100.  
  101. def main():
  102. if len(argv) < 2:
  103. print "%s: [filename]"%(argv[0])
  104. exit(1)
  105.  
  106. g = GnuPG()
  107.  
  108. p = Pillow()
  109. p.go(g.read())
  110.  
  111. for i in argv[2:]:
  112. p.filter(i)
  113.  
  114. p.result()
  115.  
  116. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement