def do_edit(self, args, menu=None): ids = self._get_ids(args) for i in ids: i = int(i) node = self._db.getnodes([i]) if not node: print("Node not found ...") return node = node[0] node = node[1:5] + [node[5:]] node = Node.from_encrypted_entries(*node) if not menu: menu = CMDLoop(self.config) print("Editing node %d." % (i)) menu.add(CliMenuItem("Username", node.username)) menu.add(CliMenuItem("Password", node.password)) menu.add(CliMenuItem("Url", node.url)) menunotes = CliMenuItem("Notes", node.notes) menu.add(menunotes) menu.add( CliMenuItem("Tags", ','.join(map(lambda x: x.decode(), node.tags)))) # noqa menu.run(node) self._db.editnode(i, **node.to_encdict()) # when done with node erase it zerome(node._password)
def do_export(self, args): """export the database to a given format""" try: args = ast.literal_eval(args) except Exception: args = {} filename = args.get('filename', 'pwman-export.csv') delim = args.get('delimiter', ';') nodeids = self._db.listnodes() nodes = self._db.getnodes(nodeids) with open(filename, 'w') as csvfile: writer = csv.writer(csvfile, delimiter=delim) writer.writerow(['Username', 'URL', 'Password', 'Notes', 'Tags']) for node in nodes: n = Node.from_encrypted_entries(node[1], node[2], node[3], node[4], node[5:]) tags = n.tags tags = ','.join(t.strip().decode() for t in tags) r = list([n.username, n.url, n.password, n.notes]) writer.writerow(r + [tags]) with open(filename) as f: for line in f.readlines(): print(line) print("Successfuly exported database to {}".format( os.path.join(os.getcwd(), filename)))
def do_edit(self, args, menu=None): ids = self._get_ids(args) for i in ids: i = int(i) node = self._db.getnodes([i]) if not node: print("Node not found ...") return node = node[0] node = node[1:5] + [node[5:]] node = Node.from_encrypted_entries(*node) if not menu: menu = CMDLoop(self.config) print ("Editing node %d." % (i)) menu.add(CliMenuItem("Username", node.username)) menu.add(CliMenuItem("Password", node.password)) menu.add(CliMenuItem("Url", node.url)) menunotes = CliMenuItem("Notes", node.notes) menu.add(menunotes) tgetter = lambda: ', '.join(t for t in node.tags) menu.add(CliMenuItem("Tags", tgetter())) menu.run(node) self._db.editnode(i, **node.to_encdict()) # when done with node erase it zerome(node._password)
def do_export(self, args): """export the database to a given format""" try: args = ast.literal_eval(args) except Exception: args = {} filename = args.get('filename', 'pwman-export.csv') delim = args.get('delimiter', ';') nodeids = self._db.listnodes() nodes = self._db.getnodes(nodeids) with open(filename, 'w') as csvfile: writer = csv.writer(csvfile, delimiter=delim) writer.writerow(['Username', 'URL', 'Password', 'Notes', 'Tags']) for node in nodes: n = Node.from_encrypted_entries(node[1], node[2], node[3], node[4], node[5:]) tags = n.tags tags = ','.join(t.strip() for t in tags) r = list([n.username, n.url, n.password, n.notes]) writer.writerow(r + [tags]) print("Successfuly exported database to {}".format( os.path.join(os.getcwd(), filename)))
def listnodes(apply=['require_login']): global AUTHENTICATED, TAGS, DB _filter = None if 'POST' in request.method: _filter = request.POST.get('tag') if _filter: DB._filtertags = [] if _filter == 'None': DB._filtertags = [] nodeids = DB.listnodes() raw_nodes = DB.getnodes(nodeids) _nodes_inst = [] for node in raw_nodes: _nodes_inst.append(Node.from_encrypted_entries( node[1], node[2], node[3], node[4], node[5:])) _nodes_inst[-1]._id = node[0] nodesd = _nodes_inst ce = CryptoEngine.get() tags = [ce.decrypt(t).decode() for t in DB.listtags()] html_nodes = template("index.tpl", nodes=nodesd, tags=tags, request=request, template_lookup=[resource_filename('pwman', 'ui/templates')]) return html_nodes
def _db_entries_to_nodes(self, raw_nodes): _nodes_inst = [] # user, pass, url, notes for node in raw_nodes: _nodes_inst.append( Node.from_encrypted_entries(node[1], node[2], node[3], node[4], node[5:])) _nodes_inst[-1]._id = node[0] return _nodes_inst
def test_8_do_edit_2(self): node = self.tester.cli._db.getnodes([1])[0] node = node[1:5] + [node[5:]] node = Node.from_encrypted_entries(*node) sys.stdin = StringIO(("2\ns3kr3t\nx\n")) self.tester.cli.do_edit('1') v = StringIO() sys.stdin = sys.__stdin__ sys.stdout = v self.tester.cli.do_print('1') self.assertIn('\x1b[31mPassword:\x1b[0m s3kr3t', v.getvalue())
def test_8_do_edit_1(self): node = self.tester.cli._db.getnodes([1])[0] node = node[1:5] + [node[5:]] node = Node.from_encrypted_entries(*node) sys.stdin = StringIO(("1\nfoo\nx\n")) self.tester.cli.do_edit('1') v = StringIO() sys.stdin = sys.__stdin__ sys.stdout = v self.tester.cli.do_print('1') self.assertIn('\x1b[31mUsername:\x1b[0m foo', v.getvalue())
def view_node(no): global DB node = DB.getnodes([no]) node = DB.getnodes([no])[0] node = Node.from_encrypted_entries(node[1], node[2], node[3], node[4], node[5:]) return template("ajax.tpl", request=request, node=node, template_lookup=templates_path)
def _db_entries_to_nodes(self, raw_nodes): _nodes_inst = [] # user, pass, url, notes for node in raw_nodes: _nodes_inst.append(Node.from_encrypted_entries( node[1], node[2], node[3], node[4], node[5:])) _nodes_inst[-1]._id = node[0] return _nodes_inst
def test_5_add_node(self): innode = [u"TBONE", u"S3K43T", u"example.org", u"some note", [u"bartag", u"footag"]] kwargs = { "username":innode[0], "password": innode[1], "url": innode[2], "notes": innode[3], "tags": innode[4] } node = Node(clear_text=True, **kwargs) self.db.add_node(node) outnode = self.db.getnodes([1])[0] no = outnode[1:5] no.append(outnode[5:]) o = Node.from_encrypted_entries(*no) self.assertEqual(list(node), list(o))
def edit_node(no=None): global DB if 'POST' in request.method: submit_node(no, request) if no: node = DB.getnodes([no])[0] node = Node.from_encrypted_entries(node[1], node[2], node[3], node[4], node[5:]) output = template('edit.tpl', node=node, template_lookup=templates_path) return output
def test_5_add_node(self): innode = [ u"TBONE", u"S3K43T", u"example.org", u"some note", [u"bartag", u"footag"] ] kwargs = { "username": innode[0], "password": innode[1], "url": innode[2], "notes": innode[3], "tags": innode[4] } node = Node(clear_text=True, **kwargs) self.db.add_node(node) outnode = self.db.getnodes([1])[0] no = outnode[1:5] no.append(outnode[5:]) o = Node.from_encrypted_entries(*no) self.assertEqual(list(node), list(o))