|  | @@ -30,6 +30,9 @@ from pwman.data.nodes import Node
 | 
	
		
			
				|  |  |  from pwman.ui import tools
 | 
	
		
			
				|  |  |  from pwman.util.crypto_engine import CryptoEngine
 | 
	
		
			
				|  |  |  from .base import HelpUIMixin, AliasesMixin
 | 
	
		
			
				|  |  | +from pwman.util.crypto_engine import zerome
 | 
	
		
			
				|  |  | +from pwman.ui.tools import CliMenuItem
 | 
	
		
			
				|  |  | +from pwman.ui.tools import CMDLoop
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  if sys.version_info.major > 2:  # pragma: no cover
 | 
	
		
			
				|  |  |      raw_input = input
 | 
	
	
		
			
				|  | @@ -133,10 +136,6 @@ class BaseCommands(HelpUIMixin, AliasesMixin):
 | 
	
		
			
				|  |  |          """clear the screen"""
 | 
	
		
			
				|  |  |          os.system("clear")
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    def do_edit(self, args):
 | 
	
		
			
				|  |  | -        """edit a node"""
 | 
	
		
			
				|  |  | -        pass
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |      def do_export(self, args):
 | 
	
		
			
				|  |  |          """export the database to a given format"""
 | 
	
		
			
				|  |  |          try:
 | 
	
	
		
			
				|  | @@ -248,6 +247,44 @@ class BaseCommands(HelpUIMixin, AliasesMixin):
 | 
	
		
			
				|  |  |              _nodes_inst[-1]._id = node[0]
 | 
	
		
			
				|  |  |          return _nodes_inst
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    def do_edit(self, args, menu=None):
 | 
	
		
			
				|  |  | +        ids = self._get_ids(args)
 | 
	
		
			
				|  |  | +        for i in ids:
 | 
	
		
			
				|  |  | +            try:
 | 
	
		
			
				|  |  | +                i = int(i)
 | 
	
		
			
				|  |  | +                import ipdb; ipdb.set_trace()
 | 
	
		
			
				|  |  | +                node = self._db.getnodes([i])[0]
 | 
	
		
			
				|  |  | +                node = node[1:5] + [node[5:]]
 | 
	
		
			
				|  |  | +                node = Node.from_encrypted_entries(*node)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                if not menu:
 | 
	
		
			
				|  |  | +                    menu = CMDLoop()
 | 
	
		
			
				|  |  | +                    print ("Editing node %d." % (i))
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    menu.add(CliMenuItem("Username",
 | 
	
		
			
				|  |  | +                                         self._get_input,
 | 
	
		
			
				|  |  | +                                         node.username,
 | 
	
		
			
				|  |  | +                                         node.username))
 | 
	
		
			
				|  |  | +                    menu.add(CliMenuItem("Password", self._get_secret,
 | 
	
		
			
				|  |  | +                                         node.password,
 | 
	
		
			
				|  |  | +                                         node.password))
 | 
	
		
			
				|  |  | +                    menu.add(CliMenuItem("Url", self._get_input,
 | 
	
		
			
				|  |  | +                                         node.url,
 | 
	
		
			
				|  |  | +                                         node.url))
 | 
	
		
			
				|  |  | +                    menunotes = CliMenuItem("Notes", self._get_input,
 | 
	
		
			
				|  |  | +                                            node.notes,
 | 
	
		
			
				|  |  | +                                            node.notes)
 | 
	
		
			
				|  |  | +                    menu.add(menunotes)
 | 
	
		
			
				|  |  | +                    menu.add(CliMenuItem("Tags", self._get_input,
 | 
	
		
			
				|  |  | +                                         node.tags,
 | 
	
		
			
				|  |  | +                                         node.tags))
 | 
	
		
			
				|  |  | +                menu.run(node)
 | 
	
		
			
				|  |  | +                self._db.editnode(i, node)
 | 
	
		
			
				|  |  | +                # when done with node erase it
 | 
	
		
			
				|  |  | +                zerome(node._password)
 | 
	
		
			
				|  |  | +            except Exception as e:
 | 
	
		
			
				|  |  | +                self.error(e)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      def do_list(self, args):
 | 
	
		
			
				|  |  |          """list all existing nodes in database"""
 | 
	
		
			
				|  |  |          rows, cols = self._prep_term()
 |