4 from __future__ import print_function
11 from gkeys.log import log_levels, set_logger
13 from gkeys import config
14 from gkeys import seed
16 from gkeys.config import GKeysConfig
17 from gkeyldap import search
18 from gkeyldap.actions import Actions, Available_Actions
23 '''Main command line interface class'''
26 def __init__(self, root=None, config=None, print_results=True):
27 """ Main class init function.
29 @param root: string, root path to use
30 @param config: optional GKeysConfig instance, For API use
31 @param print_results: optional boolean, for API use
33 self.root = root or "/"
34 self.config = config or GKeysConfig(root=root)
35 self.print_results = print_results
40 def __call__(self, args=None):
41 """Main class call function
43 @param args: Optional list of argumanets to parse and action to run
44 Defaults to sys.argv[1:]
47 self.run(self.parse_args(args))
49 self.run(self.parse_args(sys.argv[1:]))
52 def parse_args(self, args):
53 '''Parse a list of aruments
56 @returns argparse.Namespace object
58 #logger.debug('MAIN: parse_args; args: %s' % args)
59 actions = Available_Actions
60 parser = argparse.ArgumentParser(
62 description='Gentoo-keys manager program',
63 epilog='''Caution: adding untrusted keys to these keyrings can
64 be hazardous to your system!''')
66 parser.add_argument('action', choices=actions, nargs='?',
67 default='ldapsearch', help='Search ldap or update the seed file')
69 parser.add_argument('-c', '--config', dest='config', default=None,
70 help='The path to an alternate config file')
71 parser.add_argument('-d', '--dest', dest='destination', default=None,
72 help='The destination db file path')
73 parser.add_argument('-N', '--name', dest='name', default=None,
74 help='The name to search for')
75 parser.add_argument('-n', '--nick', dest='nick', default=None,
76 help='The nick or user id (uid) to search for')
77 parser.add_argument('-m', '--mail', dest='mail', default=None,
78 help='The email address to search for')
79 parser.add_argument('-k', '--keyid', dest='keyid', default=None,
80 help='The gpg keyid to search for')
81 parser.add_argument('-f', '--fingerprint', dest='fingerprint', default=None,
82 help='The gpg fingerprint to search for')
83 parser.add_argument('-S', '--status', default=False,
84 help='The seedfile path to use')
85 parser.add_argument('-D', '--debug', default='DEBUG',
86 choices=list(log_levels),
87 help='The logging level to set for the logfile')
89 return parser.parse_args(args)
93 '''Run the args passed in
95 @param args: list or argparse.Namespace object
100 message = "Main: run; invalid args argument passed in"
101 if isinstance(args, list):
102 args = self.parse_args(args)
104 self.config.defaults['config'] = args.config
105 # now make it load the config file
106 self.config.read_config()
108 # establish our logger and update it in the imported files
109 logger = set_logger('gkeyldap', self.config['logdir'], args.debug)
110 config.logger = logger
112 search.logger = logger
115 logger.error(message)
117 # now that we have a logger, record the alternate config setting
119 logger.debug("Main: run; Found alternate config request: %s"
122 # establish our actions instance
123 self.actions = Actions(self.config, print, logger)
125 logger.info("Begin running action: %s" % args.action)
128 func = getattr(self.actions, '%s' % args.action)
130 logger.debug('Main: run; Found action: %s' % args.action)