__init__.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. # ============================================================================
  2. # This file is part of Pwman3.
  3. #
  4. # Pwman3 is free software; you can redistribute it and/or modify
  5. # it under the terms of the GNU General Public License, version 2
  6. # as published by the Free Software Foundation;
  7. #
  8. # Pwman3 is distributed in the hope that it will be useful,
  9. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. # GNU General Public License for more details.
  12. #
  13. # You should have received a copy of the GNU General Public License
  14. # along with Pwman3; if not, write to the Free Software
  15. # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  16. # ============================================================================
  17. # Copyright (C) 2012 Oz Nahum Tiram <nahumoz@gmail.com>
  18. # ============================================================================
  19. # Copyright (C) 2006 Ivan Kelly <ivan@ivankelly.net>
  20. # ============================================================================
  21. import os
  22. import argparse
  23. import sys
  24. import re
  25. import colorama
  26. import pkg_resources
  27. from pwman.util import config
  28. from pwman.data.factory import check_db_version
  29. appname = "pwman3"
  30. try:
  31. version = pkg_resources.get_distribution('pwman3').version
  32. except pkg_resources.DistributionNotFound: # pragma: no cover
  33. version = "0.7.1"
  34. website = "http://pwman3.github.io/pwman3/"
  35. author = "Oz Nahum Tiram"
  36. authoremail = "nahumoz@gmail.com"
  37. description = "a command line password manager with support for multiple databases."
  38. keywords = "password management sqlite crypto"
  39. long_description = u"""
  40. Pwman3 aims to provide a simple but powerful commandline interface for
  41. password management.
  42. It allows one to store passwords in database locked by master password which
  43. is AES encrypted.
  44. Pwman3 supports MySQL, Postgresql and SQLite"""
  45. def which(cmd): # pragma: no cover
  46. _, cmdname = os.path.split(cmd)
  47. for path in os.environ["PATH"].split(os.pathsep):
  48. cmd = os.path.join(path, cmdname)
  49. if os.path.isfile(cmd) and os.access(cmd, os.X_OK): # pragma: no cover
  50. return cmd
  51. return ''
  52. config_dir = os.path.expanduser("~/.pwman")
  53. def parser_options(formatter_class=argparse.HelpFormatter): # pragma: no cover
  54. parser = argparse.ArgumentParser(prog=appname,
  55. description=description,
  56. formatter_class=formatter_class)
  57. parser.add_argument('-c', '--config', dest='cfile',
  58. default=os.path.expanduser("~/.pwman/config"),
  59. help='cofiguration file to read')
  60. parser.add_argument('-d', '--database', dest='dbase')
  61. parser.add_argument('-i', '--import', nargs=2, dest='file_delim')
  62. return parser
  63. def get_conf(args):
  64. config_dir = os.path.expanduser("~/.pwman")
  65. if not os.path.isdir(config_dir): # pragma: no cover
  66. os.mkdir(config_dir)
  67. configp = config.Config(args.cfile, config.default_config)
  68. return configp
  69. def set_xsel(configp, OSX):
  70. if not OSX:
  71. xselpath = which("xsel")
  72. configp.set_value("Global", "xsel", xselpath)
  73. elif OSX:
  74. pbcopypath = which("pbcopy")
  75. configp.set_value("Global", "xsel", pbcopypath)
  76. def set_win_colors(config): # pragma: no cover
  77. if 'win' in sys.platform:
  78. colorama.init()
  79. def set_umask(configp):
  80. umask = configp.get_value("Global", "umask")
  81. if re.search(r'^\d{4}$', umask):
  82. os.umask(int(umask))
  83. def set_db(args, configp):
  84. if args.dbase:
  85. configp.set_value("Database", "dburi", args.dbase)
  86. configp.set_value("Global", "save", "False")
  87. def get_conf_options(args, OSX):
  88. configp = get_conf(args)
  89. xselpath = configp.get_value("Global", "xsel")
  90. if not xselpath: # pragma: no cover
  91. set_xsel(configp, OSX)
  92. set_win_colors(configp)
  93. set_db(args, configp)
  94. set_umask(configp)
  95. dburi = configp.get_value("Database", "dburi")
  96. return xselpath, dburi, configp
  97. def get_db_version(config, args):
  98. dburi = check_db_version(config.get_value("Database", "dburi"))
  99. return dburi