|  | @@ -190,7 +190,6 @@ class BaseUI(object):
 | 
											
												
													
														|  |              return _tags
 |  |              return _tags
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  import pwman.exchange.importer as importer
 |  |  import pwman.exchange.importer as importer
 | 
											
												
													
														|  | -from pwman.data.nodes import Node
 |  | 
 | 
											
												
													
														|  |  from pwman.util.crypto import CryptoEngine
 |  |  from pwman.util.crypto import CryptoEngine
 | 
											
												
													
														|  |  from pwman.util.crypto import zerome
 |  |  from pwman.util.crypto import zerome
 | 
											
												
													
														|  |  import pwman.util.config as config
 |  |  import pwman.util.config as config
 | 
											
										
											
												
													
														|  | @@ -209,12 +208,6 @@ from pwman.ui.tools import CMDLoop
 | 
											
												
													
														|  |  import getpass
 |  |  import getpass
 | 
											
												
													
														|  |  from pwman.data.tags import TagNew
 |  |  from pwman.data.tags import TagNew
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -try:
 |  | 
 | 
											
												
													
														|  | -    import readline
 |  | 
 | 
											
												
													
														|  | -    _readline_available = True
 |  | 
 | 
											
												
													
														|  | -except ImportError, e:  # pragma: no cover
 |  | 
 | 
											
												
													
														|  | -    _readline_available = False
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  def get_pass_conf():
 |  |  def get_pass_conf():
 | 
											
												
													
														|  |      numerics = config.get_value("Generator", "numerics").lower() == 'true'
 |  |      numerics = config.get_value("Generator", "numerics").lower() == 'true'
 | 
											
										
											
												
													
														|  | @@ -227,56 +220,12 @@ def get_pass_conf():
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  # pylint: disable=R0904
 |  |  # pylint: disable=R0904
 | 
											
												
													
														|  |  class PwmanCliOld(HelpUI, BaseUI):
 |  |  class PwmanCliOld(HelpUI, BaseUI):
 | 
											
												
													
														|  | -    def error(self, exception):
 |  | 
 | 
											
												
													
														|  | -        if (isinstance(exception, KeyboardInterrupt)):
 |  | 
 | 
											
												
													
														|  | -            print('')
 |  | 
 | 
											
												
													
														|  | -        else:
 |  | 
 | 
											
												
													
														|  | -            print("Error: {0} ".format(exception))
 |  | 
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      def do_exit(self, args):
 |  |      def do_exit(self, args):
 | 
											
												
													
														|  |          """exit the ui"""
 |  |          """exit the ui"""
 | 
											
												
													
														|  |          self._db.close()
 |  |          self._db.close()
 | 
											
												
													
														|  |          return True
 |  |          return True
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    def get_ids(self, args):
 |  | 
 | 
											
												
													
														|  | -        """
 |  | 
 | 
											
												
													
														|  | -        Command can get a single ID or
 |  | 
 | 
											
												
													
														|  | -        a range of IDs, with begin-end.
 |  | 
 | 
											
												
													
														|  | -        e.g. 1-3 , will get 1 to 3.
 |  | 
 | 
											
												
													
														|  | -        """
 |  | 
 | 
											
												
													
														|  | -        ids = []
 |  | 
 | 
											
												
													
														|  | -        rex = re.compile("^(?P<begin>\d+)(?:-(?P<end>\d+))?$")
 |  | 
 | 
											
												
													
														|  | -        rex = rex.match(args)
 |  | 
 | 
											
												
													
														|  | -        if hasattr(rex, 'groupdict'):
 |  | 
 | 
											
												
													
														|  | -            try:
 |  | 
 | 
											
												
													
														|  | -                begin = int(rex.groupdict()['begin'])
 |  | 
 | 
											
												
													
														|  | -                end = int(rex.groupdict()['end'])
 |  | 
 | 
											
												
													
														|  | -                if not end > begin:
 |  | 
 | 
											
												
													
														|  | -                    print("Start node should be smaller than end node")
 |  | 
 | 
											
												
													
														|  | -                    return ids
 |  | 
 | 
											
												
													
														|  | -                ids += range(begin, end+1)
 |  | 
 | 
											
												
													
														|  | -                return ids
 |  | 
 | 
											
												
													
														|  | -            except TypeError:
 |  | 
 | 
											
												
													
														|  | -                ids.append(int(begin))
 |  | 
 | 
											
												
													
														|  | -        else:
 |  | 
 | 
											
												
													
														|  | -            print("Could not understand your input...")
 |  | 
 | 
											
												
													
														|  | -        return ids
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    def get_username(self, default="", reader=raw_input):
 |  | 
 | 
											
												
													
														|  | -        return tools.getinput("Username: ", default, reader)
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    def get_url(self, default="", reader=raw_input):
 |  | 
 | 
											
												
													
														|  | -        return tools.getinput("Url: ", default, reader)
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    def get_notes(self, default="", reader=raw_input):
 |  | 
 | 
											
												
													
														|  | -        return tools.getinput("Notes: ", default, reader)
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    def do_clear(self, args):
 |  | 
 | 
											
												
													
														|  | -        try:
 |  | 
 | 
											
												
													
														|  | -            self._db.clearfilter()
 |  | 
 | 
											
												
													
														|  | -        except Exception, e:
 |  | 
 | 
											
												
													
														|  | -            self.error(e)
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |      def do_edit(self, arg):
 |  |      def do_edit(self, arg):
 | 
											
												
													
														|  |          ids = self.get_ids(arg)
 |  |          ids = self.get_ids(arg)
 | 
											
												
													
														|  |          for i in ids:
 |  |          for i in ids:
 | 
											
										
											
												
													
														|  | @@ -328,57 +277,6 @@ class PwmanCliOld(HelpUI, BaseUI):
 | 
											
												
													
														|  |      def do_export(self, arg):
 |  |      def do_export(self, arg):
 | 
											
												
													
														|  |          print('Not implemented...')
 |  |          print('Not implemented...')
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    def do_new(self, args):
 |  | 
 | 
											
												
													
														|  | -        """
 |  | 
 | 
											
												
													
														|  | -        can override default config settings the following way:
 |  | 
 | 
											
												
													
														|  | -        Pwman3 0.2.1 (c) visit: http://github.com/pwman3/pwman3
 |  | 
 | 
											
												
													
														|  | -        pwman> n {'leetify':False, 'numerics':True, 'special_chars':True}
 |  | 
 | 
											
												
													
														|  | -        Password (Blank to generate):
 |  | 
 | 
											
												
													
														|  | -        """
 |  | 
 | 
											
												
													
														|  | -        errmsg = ("could not parse config override, please input some"
 |  | 
 | 
											
												
													
														|  | -                  " kind of dictionary, e.g.: n {'leetify':False, "
 |  | 
 | 
											
												
													
														|  | -                  " numerics':True, 'special_chars':True}")
 |  | 
 | 
											
												
													
														|  | -        try:
 |  | 
 | 
											
												
													
														|  | -            username = self.get_username()
 |  | 
 | 
											
												
													
														|  | -            if args:
 |  | 
 | 
											
												
													
														|  | -                try:
 |  | 
 | 
											
												
													
														|  | -                    args = ast.literal_eval(args)
 |  | 
 | 
											
												
													
														|  | -                except Exception:
 |  | 
 | 
											
												
													
														|  | -                    raise Exception(errmsg)
 |  | 
 | 
											
												
													
														|  | -                if not isinstance(args, dict):
 |  | 
 | 
											
												
													
														|  | -                    raise Exception(errmsg)
 |  | 
 | 
											
												
													
														|  | -                password = self.get_password(1, **args)
 |  | 
 | 
											
												
													
														|  | -            else:
 |  | 
 | 
											
												
													
														|  | -                numerics = config.get_value("Generator",
 |  | 
 | 
											
												
													
														|  | -                                            "numerics").lower() == 'true'
 |  | 
 | 
											
												
													
														|  | -                # TODO: allow custom leetifying through the config
 |  | 
 | 
											
												
													
														|  | -                leetify = config.get_value("Generator",
 |  | 
 | 
											
												
													
														|  | -                                           "leetify").lower() == 'true'
 |  | 
 | 
											
												
													
														|  | -                special_chars = config.get_value("Generator",
 |  | 
 | 
											
												
													
														|  | -                                                 "special_chars").lower() == \
 |  | 
 | 
											
												
													
														|  | -                    'true'
 |  | 
 | 
											
												
													
														|  | -                password = self.get_password(0,
 |  | 
 | 
											
												
													
														|  | -                                             numerics=numerics,
 |  | 
 | 
											
												
													
														|  | -                                             symbols=leetify,
 |  | 
 | 
											
												
													
														|  | -                                             special_signs=special_chars)
 |  | 
 | 
											
												
													
														|  | -            url = self.get_url()
 |  | 
 | 
											
												
													
														|  | -            notes = self.get_notes()
 |  | 
 | 
											
												
													
														|  | -            node = Node(username, password, url, notes)
 |  | 
 | 
											
												
													
														|  | -            tags = self.get_tags()
 |  | 
 | 
											
												
													
														|  | -            node.set_tags(tags)
 |  | 
 | 
											
												
													
														|  | -            self._db.addnodes([node])
 |  | 
 | 
											
												
													
														|  | -            print ("Password ID: %d" % (node.get_id()))
 |  | 
 | 
											
												
													
														|  | -        except Exception, e:
 |  | 
 | 
											
												
													
														|  | -            self.error(e)
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    def do_print(self, arg):
 |  | 
 | 
											
												
													
														|  | -        for i in self.get_ids(arg):
 |  | 
 | 
											
												
													
														|  | -            try:
 |  | 
 | 
											
												
													
														|  | -                node = self._db.getnodes([i])
 |  | 
 | 
											
												
													
														|  | -                self.print_node(node[0])
 |  | 
 | 
											
												
													
														|  | -            except Exception, e:  # pragma: no cover
 |  | 
 | 
											
												
													
														|  | -                self.error(e)
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |      def do_delete(self, arg):
 |  |      def do_delete(self, arg):
 | 
											
												
													
														|  |          ids = self.get_ids(arg)
 |  |          ids = self.get_ids(arg)
 | 
											
												
													
														|  |          try:
 |  |          try:
 | 
											
										
											
												
													
														|  | @@ -451,78 +349,6 @@ class PwmanCliOld(HelpUI, BaseUI):
 | 
											
												
													
														|  |          except Exception, e:
 |  |          except Exception, e:
 | 
											
												
													
														|  |              self.error(e)
 |  |              self.error(e)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    def do_passwd(self, args):
 |  | 
 | 
											
												
													
														|  | -        try:
 |  | 
 | 
											
												
													
														|  | -            key = self._db.changepassword()
 |  | 
 | 
											
												
													
														|  | -            self._db._save(key)
 |  | 
 | 
											
												
													
														|  | -        except Exception, e:
 |  | 
 | 
											
												
													
														|  | -            self.error(e)
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    def do_set(self, args):
 |  | 
 | 
											
												
													
														|  | -        argstrs = args.split()
 |  | 
 | 
											
												
													
														|  | -        try:
 |  | 
 | 
											
												
													
														|  | -            if len(argstrs) == 0:
 |  | 
 | 
											
												
													
														|  | -                conf = config.get_conf()
 |  | 
 | 
											
												
													
														|  | -                for s in conf.keys():
 |  | 
 | 
											
												
													
														|  | -                    for n in conf[s].keys():
 |  | 
 | 
											
												
													
														|  | -                        print ("%s.%s = %s" % (s, n, conf[s][n]))
 |  | 
 | 
											
												
													
														|  | -            elif len(argstrs) == 1:
 |  | 
 | 
											
												
													
														|  | -                r = re.compile("(.+)\.(.+)")
 |  | 
 | 
											
												
													
														|  | -                m = r.match(argstrs[0])
 |  | 
 | 
											
												
													
														|  | -                if m is None or len(m.groups()) != 2:
 |  | 
 | 
											
												
													
														|  | -                    print ("Invalid option format")
 |  | 
 | 
											
												
													
														|  | -                    self.help_set()
 |  | 
 | 
											
												
													
														|  | -                    return
 |  | 
 | 
											
												
													
														|  | -                print ("%s.%s = %s" % (m.group(1), m.group(2),
 |  | 
 | 
											
												
													
														|  | -                                       config.get_value(m.group(1),
 |  | 
 | 
											
												
													
														|  | -                                                        m.group(2))))
 |  | 
 | 
											
												
													
														|  | -            elif len(argstrs) == 2:
 |  | 
 | 
											
												
													
														|  | -                r = re.compile("(.+)\.(.+)")
 |  | 
 | 
											
												
													
														|  | -                m = r.match(argstrs[0])
 |  | 
 | 
											
												
													
														|  | -                if m is None or len(m.groups()) != 2:
 |  | 
 | 
											
												
													
														|  | -                    print ("Invalid option format")
 |  | 
 | 
											
												
													
														|  | -                    self.help_set()
 |  | 
 | 
											
												
													
														|  | -                    return
 |  | 
 | 
											
												
													
														|  | -                config.set_value(m.group(1), m.group(2), argstrs[1])
 |  | 
 | 
											
												
													
														|  | -            else:
 |  | 
 | 
											
												
													
														|  | -                self.help_set()
 |  | 
 | 
											
												
													
														|  | -        except Exception, e:
 |  | 
 | 
											
												
													
														|  | -            self.error(e)
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    def do_save(self, args):
 |  | 
 | 
											
												
													
														|  | -        argstrs = args.split()
 |  | 
 | 
											
												
													
														|  | -        try:
 |  | 
 | 
											
												
													
														|  | -            if len(argstrs) > 0:
 |  | 
 | 
											
												
													
														|  | -                config.save(argstrs[0])
 |  | 
 | 
											
												
													
														|  | -            else:
 |  | 
 | 
											
												
													
														|  | -                config.save()
 |  | 
 | 
											
												
													
														|  | -            print ("Config saved.")
 |  | 
 | 
											
												
													
														|  | -        except Exception, e:
 |  | 
 | 
											
												
													
														|  | -            self.error(e)
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    def do_cls(self, args):
 |  | 
 | 
											
												
													
														|  | -        os.system('clear')
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    def do_copy(self, args):
 |  | 
 | 
											
												
													
														|  | -        if self.hasxsel:
 |  | 
 | 
											
												
													
														|  | -            ids = self.get_ids(args)
 |  | 
 | 
											
												
													
														|  | -            if len(ids) > 1:
 |  | 
 | 
											
												
													
														|  | -                print ("Can copy only 1 password at a time...")
 |  | 
 | 
											
												
													
														|  | -                return None
 |  | 
 | 
											
												
													
														|  | -            try:
 |  | 
 | 
											
												
													
														|  | -                node = self._db.getnodes(ids)
 |  | 
 | 
											
												
													
														|  | -                tools.text_to_clipboards(node[0].get_password())
 |  | 
 | 
											
												
													
														|  | -                print ("copied password for {}@{} clipboard".format(
 |  | 
 | 
											
												
													
														|  | -                       node[0].get_username(), node[0].get_url()))
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -                print ("erasing in 10 sec...")
 |  | 
 | 
											
												
													
														|  | -                time.sleep(10)
 |  | 
 | 
											
												
													
														|  | -                tools.text_to_clipboards("")
 |  | 
 | 
											
												
													
														|  | -            except Exception, e:
 |  | 
 | 
											
												
													
														|  | -                self.error(e)
 |  | 
 | 
											
												
													
														|  | -        else:
 |  | 
 | 
											
												
													
														|  | -            print ("Can't copy to clipboard, no xsel found in the system!")
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |      def do_open(self, args):
 |  |      def do_open(self, args):
 | 
											
												
													
														|  |          ids = self.get_ids(args)
 |  |          ids = self.get_ids(args)
 | 
											
												
													
														|  |          if not args:
 |  |          if not args:
 | 
											
										
											
												
													
														|  | @@ -538,12 +364,6 @@ class PwmanCliOld(HelpUI, BaseUI):
 | 
											
												
													
														|  |          except Exception, e:
 |  |          except Exception, e:
 | 
											
												
													
														|  |              self.error(e)
 |  |              self.error(e)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    def postloop(self):
 |  | 
 | 
											
												
													
														|  | -        try:
 |  | 
 | 
											
												
													
														|  | -            readline.write_history_file(self._historyfile)
 |  | 
 | 
											
												
													
														|  | -        except Exception:
 |  | 
 | 
											
												
													
														|  | -            pass
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |      def __init__(self, db, hasxsel):
 |  |      def __init__(self, db, hasxsel):
 | 
											
												
													
														|  |          """
 |  |          """
 | 
											
												
													
														|  |          initialize CLI interface, set up the DB
 |  |          initialize CLI interface, set up the DB
 | 
											
										
											
												
													
														|  | @@ -569,6 +389,12 @@ class BaseCommands(PwmanCliOld):
 | 
											
												
													
														|  |      You can define the aliases here too, but it makes
 |  |      You can define the aliases here too, but it makes
 | 
											
												
													
														|  |      the class code really long and unclear.
 |  |      the class code really long and unclear.
 | 
											
												
													
														|  |      """
 |  |      """
 | 
											
												
													
														|  | 
 |  | +    def error(self, exception):
 | 
											
												
													
														|  | 
 |  | +        if (isinstance(exception, KeyboardInterrupt)):
 | 
											
												
													
														|  | 
 |  | +            print('')
 | 
											
												
													
														|  | 
 |  | +        else:
 | 
											
												
													
														|  | 
 |  | +            print("Error: {0} ".format(exception))
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      def do_copy(self, args):
 |  |      def do_copy(self, args):
 | 
											
												
													
														|  |          if self.hasxsel:
 |  |          if self.hasxsel:
 | 
											
												
													
														|  |              ids = self.get_ids(args)
 |  |              ids = self.get_ids(args)
 | 
											
										
											
												
													
														|  | @@ -589,6 +415,46 @@ class BaseCommands(PwmanCliOld):
 | 
											
												
													
														|  |          else:
 |  |          else:
 | 
											
												
													
														|  |              print ("Can't copy to clipboard, no xsel found in the system!")
 |  |              print ("Can't copy to clipboard, no xsel found in the system!")
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    def do_set(self, args):
 | 
											
												
													
														|  | 
 |  | +        argstrs = args.split()
 | 
											
												
													
														|  | 
 |  | +        try:
 | 
											
												
													
														|  | 
 |  | +            if len(argstrs) == 0:
 | 
											
												
													
														|  | 
 |  | +                conf = config.get_conf()
 | 
											
												
													
														|  | 
 |  | +                for s in conf.keys():
 | 
											
												
													
														|  | 
 |  | +                    for n in conf[s].keys():
 | 
											
												
													
														|  | 
 |  | +                        print ("%s.%s = %s" % (s, n, conf[s][n]))
 | 
											
												
													
														|  | 
 |  | +            elif len(argstrs) == 1:
 | 
											
												
													
														|  | 
 |  | +                r = re.compile("(.+)\.(.+)")
 | 
											
												
													
														|  | 
 |  | +                m = r.match(argstrs[0])
 | 
											
												
													
														|  | 
 |  | +                if m is None or len(m.groups()) != 2:
 | 
											
												
													
														|  | 
 |  | +                    print ("Invalid option format")
 | 
											
												
													
														|  | 
 |  | +                    self.help_set()
 | 
											
												
													
														|  | 
 |  | +                    return
 | 
											
												
													
														|  | 
 |  | +                print ("%s.%s = %s" % (m.group(1), m.group(2),
 | 
											
												
													
														|  | 
 |  | +                                       config.get_value(m.group(1),
 | 
											
												
													
														|  | 
 |  | +                                                        m.group(2))))
 | 
											
												
													
														|  | 
 |  | +            elif len(argstrs) == 2:
 | 
											
												
													
														|  | 
 |  | +                r = re.compile("(.+)\.(.+)")
 | 
											
												
													
														|  | 
 |  | +                m = r.match(argstrs[0])
 | 
											
												
													
														|  | 
 |  | +                if m is None or len(m.groups()) != 2:
 | 
											
												
													
														|  | 
 |  | +                    print ("Invalid option format")
 | 
											
												
													
														|  | 
 |  | +                    self.help_set()
 | 
											
												
													
														|  | 
 |  | +                    return
 | 
											
												
													
														|  | 
 |  | +                config.set_value(m.group(1), m.group(2), argstrs[1])
 | 
											
												
													
														|  | 
 |  | +            else:
 | 
											
												
													
														|  | 
 |  | +                self.help_set()
 | 
											
												
													
														|  | 
 |  | +        except Exception, e:
 | 
											
												
													
														|  | 
 |  | +            self.error(e)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    def get_username(self, default="", reader=raw_input):
 | 
											
												
													
														|  | 
 |  | +        return tools.getinput("Username: ", default, reader)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    def get_url(self, default="", reader=raw_input):
 | 
											
												
													
														|  | 
 |  | +        return tools.getinput("Url: ", default, reader)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    def get_notes(self, default="", reader=raw_input):
 | 
											
												
													
														|  | 
 |  | +        return tools.getinput("Notes: ", default, reader)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      def do_open(self, args):
 |  |      def do_open(self, args):
 | 
											
												
													
														|  |          ids = self.get_ids(args)
 |  |          ids = self.get_ids(args)
 | 
											
												
													
														|  |          if not args:
 |  |          if not args:
 | 
											
										
											
												
													
														|  | @@ -604,6 +470,15 @@ class BaseCommands(PwmanCliOld):
 | 
											
												
													
														|  |          except Exception, e:
 |  |          except Exception, e:
 | 
											
												
													
														|  |              self.error(e)
 |  |              self.error(e)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    def do_clear(self, args):
 | 
											
												
													
														|  | 
 |  | +        try:
 | 
											
												
													
														|  | 
 |  | +            self._db.clearfilter()
 | 
											
												
													
														|  | 
 |  | +        except Exception, e:
 | 
											
												
													
														|  | 
 |  | +            self.error(e)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    def do_cls(self, args):
 | 
											
												
													
														|  | 
 |  | +        os.system('clear')
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      def do_edit(self, arg, menu=None):
 |  |      def do_edit(self, arg, menu=None):
 | 
											
												
													
														|  |          ids = self.get_ids(arg)
 |  |          ids = self.get_ids(arg)
 | 
											
												
													
														|  |          for i in ids:
 |  |          for i in ids:
 | 
											
										
											
												
													
														|  | @@ -680,6 +555,24 @@ class BaseCommands(PwmanCliOld):
 | 
											
												
													
														|  |                     "%d sec.)" % flushtimeout)
 |  |                     "%d sec.)" % flushtimeout)
 | 
											
												
													
														|  |              waituntil_enter(heardEnter, flushtimeout)
 |  |              waituntil_enter(heardEnter, flushtimeout)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    def do_passwd(self, args):
 | 
											
												
													
														|  | 
 |  | +        try:
 | 
											
												
													
														|  | 
 |  | +            key = self._db.changepassword()
 | 
											
												
													
														|  | 
 |  | +            self._db._save(key)
 | 
											
												
													
														|  | 
 |  | +        except Exception, e:
 | 
											
												
													
														|  | 
 |  | +            self.error(e)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    def do_save(self, args):
 | 
											
												
													
														|  | 
 |  | +        argstrs = args.split()
 | 
											
												
													
														|  | 
 |  | +        try:
 | 
											
												
													
														|  | 
 |  | +            if len(argstrs) > 0:
 | 
											
												
													
														|  | 
 |  | +                config.save(argstrs[0])
 | 
											
												
													
														|  | 
 |  | +            else:
 | 
											
												
													
														|  | 
 |  | +                config.save()
 | 
											
												
													
														|  | 
 |  | +            print ("Config saved.")
 | 
											
												
													
														|  | 
 |  | +        except Exception, e:
 | 
											
												
													
														|  | 
 |  | +            self.error(e)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      def do_tags(self, arg):
 |  |      def do_tags(self, arg):
 | 
											
												
													
														|  |          enc = CryptoEngine.get()
 |  |          enc = CryptoEngine.get()
 | 
											
												
													
														|  |          if not enc.alive():
 |  |          if not enc.alive():
 | 
											
										
											
												
													
														|  | @@ -858,6 +751,30 @@ class BaseCommands(PwmanCliOld):
 | 
											
												
													
														|  |          except Exception, e:
 |  |          except Exception, e:
 | 
											
												
													
														|  |              self.error(e)
 |  |              self.error(e)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    def get_ids(self, args):
 | 
											
												
													
														|  | 
 |  | +        """
 | 
											
												
													
														|  | 
 |  | +        Command can get a single ID or
 | 
											
												
													
														|  | 
 |  | +        a range of IDs, with begin-end.
 | 
											
												
													
														|  | 
 |  | +        e.g. 1-3 , will get 1 to 3.
 | 
											
												
													
														|  | 
 |  | +        """
 | 
											
												
													
														|  | 
 |  | +        ids = []
 | 
											
												
													
														|  | 
 |  | +        rex = re.compile("^(?P<begin>\d+)(?:-(?P<end>\d+))?$")
 | 
											
												
													
														|  | 
 |  | +        rex = rex.match(args)
 | 
											
												
													
														|  | 
 |  | +        if hasattr(rex, 'groupdict'):
 | 
											
												
													
														|  | 
 |  | +            try:
 | 
											
												
													
														|  | 
 |  | +                begin = int(rex.groupdict()['begin'])
 | 
											
												
													
														|  | 
 |  | +                end = int(rex.groupdict()['end'])
 | 
											
												
													
														|  | 
 |  | +                if not end > begin:
 | 
											
												
													
														|  | 
 |  | +                    print("Start node should be smaller than end node")
 | 
											
												
													
														|  | 
 |  | +                    return ids
 | 
											
												
													
														|  | 
 |  | +                ids += range(begin, end+1)
 | 
											
												
													
														|  | 
 |  | +                return ids
 | 
											
												
													
														|  | 
 |  | +            except TypeError:
 | 
											
												
													
														|  | 
 |  | +                ids.append(int(begin))
 | 
											
												
													
														|  | 
 |  | +        else:
 | 
											
												
													
														|  | 
 |  | +            print("Could not understand your input...")
 | 
											
												
													
														|  | 
 |  | +        return ids
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      def get_password(self, argsgiven, numerics=False, leetify=False,
 |  |      def get_password(self, argsgiven, numerics=False, leetify=False,
 | 
											
												
													
														|  |                       symbols=False, special_signs=False,
 |  |                       symbols=False, special_signs=False,
 | 
											
												
													
														|  |                       reader=getpass.getpass, length=None):
 |  |                       reader=getpass.getpass, length=None):
 |