123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344 |
- """
- Define the base CLI interface for pwman3
- """
- from __future__ import print_function
- from pwman.util.crypto_engine import zerome
- import sys
- from pwman.ui.tools import CliMenuItem
- from pwman.ui.tools import CMDLoop
- if sys.version_info.major > 2:
- raw_input = input
- class HelpUIMixin(object):
- """
- this class holds all the UI help functionality.
- in PwmanCliNew. The later inherits from this class
- and allows it to print help messages to the console.
- """
- def usage(self, string):
- print ("Usage: %s" % (string))
- def help_open(self):
- self.usage("open <ID>")
- print ("Launch default browser with 'xdg-open url',\n",
- "the url must contain http:// or https://.")
- def help_o(self):
- self.help_open()
- def help_copy(self):
- self.usage("copy <ID>")
- print ("Copy password to X clipboard (xsel required)")
- def help_cp(self):
- self.help_copy()
- def help_cls(self):
- self.usage("cls")
- print ("Clear the Screen from information.")
- def help_list(self):
- self.usage("list <tag> ...")
- print ("List nodes that match current or specified filter.",
- " ls is an alias.")
- def help_EOF(self):
- self.help_exit()
- def help_delete(self):
- self.usage("delete <ID|tag> ...")
- print ("Deletes nodes. rm is an alias.")
- self._mult_id_help()
- def help_h(self):
- self.help_help()
- def help_help(self):
- self.usage("help [topic]")
- print ("Prints a help message for a command.")
- def help_e(self):
- self.help_edit()
- def help_n(self):
- self.help_new()
- def help_p(self):
- self.help_print()
- def help_l(self):
- self.help_list()
- def help_edit(self):
- self.usage("edit <ID|tag> ... ")
- print ("Edits a nodes.")
- def help_import(self):
- self.usage("import [filename] ...")
- print ("Not implemented...")
- def help_export(self):
- self.usage("export [{'filename': 'foo.csv', 'delimiter':'|'}] ")
- print("All nodes under the current filter are exported.")
- def help_new(self):
- self.usage("new")
- print ("Creates a new node.,",
- "You can override default config settings the following way:\n",
- "pwman> n {'leetify':False, 'numerics':True}")
- def help_rm(self):
- self.help_delete()
- def help_print(self):
- self.usage("print <ID|tag> ...")
- print ("Displays a node. ")
- self._mult_id_help()
- def _mult_id_help(self):
- print("Multiple ids and nodes can be specified, separated by a space.",
- " A range of ids can be specified in the format n-N. e.g. ",
- " '10-20' would specify all nodes having ids from 10 to 20 ",
- " inclusive. Tags are considered one-by-one. e.g. 'foo 2 bar'",
- " would yield to all nodes with tag 'foo', node 2 and all ",
- " nodes with tag 'bar'.")
- def help_exit(self):
- self.usage("exit")
- print("Exits the application.")
- def help_passwd(self):
- self.usage("passwd")
- print("Changes the password on the database. ")
- def help_forget(self):
- self.usage("forget")
- print("Forgets the database password. Your password will need to ",
- "be reentered before accessing the database again.")
- def help_clear(self):
- self.usage("clear")
- print("Clears the filter criteria. ")
- def help_filter(self):
- self.usage("filter <tag> ...")
- print("Filters nodes on tag. Arguments can be zero or more tags. ",
- "Displays current tags if called without arguments.")
- def help_tags(self):
- self.usage("tags")
- print("Displays all tags in used in the database.")
- class BaseCommands(object):
- """
- Inherit from the old class, override
- all the methods related to tags, and
- newer Node format, so backward compatability is kept...
- Commands defined here, can have aliases definded in Aliases.
- You can define the aliases here too, but it makes
- the class code really long and unclear.
- """
- def do_edit(self, arg, menu=None):
- ids = self.get_ids(arg)
- for i in ids:
- try:
- i = int(i)
- node = self._db.getnodes([i])[0]
- if not menu:
- menu = CMDLoop()
- print ("Editing node %d." % (i))
- menu.add(CliMenuItem("Username", self.get_username,
- node.username,
- node.username))
- menu.add(CliMenuItem("Password", self.get_password,
- node.password,
- node.password))
- menu.add(CliMenuItem("Url", self.get_url,
- node.url,
- node.url))
- menunotes = CliMenuItem("Notes", self.get_notes,
- node.notes,
- node.notes)
- menu.add(menunotes)
- menu.add(CliMenuItem("Tags", self.get_tags,
- node.tags,
- node.tags))
- menu.run(node)
- self._db.editnode(i, node)
-
- zerome(node._password)
- except Exception as e:
- self.error(e)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- class AliasesMixin(object):
- """
- Define all the alias you want here...
- """
- def do_cp(self, args):
- self.do_copy(args)
- def do_e(self, arg):
- self.do_edit(arg)
- def do_EOF(self, args):
- return self.do_exit(args)
- def do_l(self, args):
- self.do_list(args)
- def do_ls(self, args):
- self.do_list(args)
- def do_p(self, arg):
- self.do_print(arg)
- def do_rm(self, arg):
- self.do_delete(arg)
- def do_o(self, args):
- self.do_open(args)
- def do_h(self, arg):
- self.do_help(arg)
- def do_n(self, arg):
- self.do_new(arg)
|