#!/usr/bin/env python3 from pprint import pformat as pp from getpass import getpass from phi.config import get_config from phi.logging import setup_logging, get_logger from phi import cli import phi.ldap.client from phi.ldap.user import get_user_by_uid, add_user, delete_user from phi.ldap.group import get_group_by_cn, get_all_groups, add_group_member log = get_logger(__name__) @cli.register('dispaly user fields', ['user identifier']) def showuser(uid): user = get_user_by_uid(client, uid) if user is None: print('User {} not found'.format(uid)) return print(pp(user)) @cli.register('add a new user', ['user identifier']) def adduser(uid): def ask(prompt, default): full_prompt = '{} [{}] '.format(prompt, default) return input(full_prompt) or default user = get_user_by_uid(client, uid) if user is not None: print("User {} already existing".format(uid)) return cn = ask('Common name:', uid) sn = ask('Last name:', uid) mail = ask('Mail:', '{}@localhost'.format(uid)) password = getpass() pass_check = getpass('Retype password: ') if password != pass_check: print('Password not matching') return add_user(client, uid, cn, sn, mail, password) # Check user = get_user_by_uid(client, uid) print() print(pp(user)) @cli.register('delete an user', ['user identifier']) def deluser(uid): check = input('Are you sure? [y/N] ') or 'N' if check.lower() != 'y': print('Ok then') return user = get_user_by_uid(client, uid) if user is not None: delete_user(client, user) print('Done') else: print('User {} not found'.format(uid)) @cli.register('show a group', ['group common name']) def showgroup(cn): group = get_group_by_cn(client, cn) if group is None: print('Group {} not found'.format(gcn)) return print(pp(group)) @cli.register('list all groups') def listgroups(): groups = get_all_groups(client) for group in groups: print(group['cn']) @cli.register('add an user to a group', ['user identifier', 'group common name']) def addtogroup(uid, gcn): user = get_user_by_uid(client, uid) group = get_group_by_cn(client, gcn) if user is None: print('User {} not found'.format(uid)) return if group is None: print('Group {} not found'.format(gcn)) return if uid in group['members']: print('User {} is already in group {}'.format(uid, gcn)) return add_group_member(client, group, user) if __name__ == '__main__': cli.add_arg('--config', 'config.yml', 'custom configuration file') args = cli.get_args() config_file = args['config'] config_file, config = get_config(config_file) setup_logging(config.get('logging', {})) log.info("Using configuration at '{}':\n{}" .format(config_file, pp(config))) # TODO: check fields in config client = phi.ldap.client.Client(**config['ldap']) log.info('Opening LDAP client') client.open() log.info('Arguments: {}'.format(pp(args))) cli.run(args) log.info('Closing LDAP client') client.close()