#!/usr/bin/python
"""
Configure LDAP password services for ldap-password command
"""

from systematic.shell import Script
from secrets.config import SecretsConfig,SecretsConfigError

script = Script()
script.add_argument('-l','--list',action='store_true',help='List configuration')
script.add_argument('-s','--service',help='Service to manipulate')
script.add_argument('-S','--server',help='Set service LDAP URL')
script.add_argument('-E','--description',help='Set service description')
script.add_argument('-D','--dn',help='Set service DN')
script.add_argument('-A','--admin-dn',help='Set service ADMIN DN')
script.add_argument('-f','--file',help='Configuration file path')
args = script.parse_args()

try:
    config = SecretsConfig(args.file)
except SecretsConfigError,emsg:
    config = None
    script.exit(1,emsg)

if args.list:
    for name,service in config.items():
        if args.service and args.service!=name:
            continue
        if args.service:
            uid_format = service.uid_format % {'username': '<uid>', 'dn': service.dn}
            print 'Service:     %s' % name
            print 'Description: %s' % service.description
            print 'Server:      %s' % service.server
            print 'DN:          %s' % service.dn
            print 'Admin DN:    %s' % service.admin_dn
            print 'UID format:  %s' % uid_format
        else:
            print '%-12s %s' % (name,service.description)
    script.exit(0)

service = None
if args.service:
    try:
        service = config[args.service]
    except KeyError:
        script.exit(1,'Unknown service: %s' % args.service)
else:
    script.exit(1,'Service name is required')

modified = False
for flag in ['dn','admin_dn','description']:
    value = getattr(args,flag)
    if value is None:
        continue
    print 'Setting %s %s to %s' % (service.name,flag,value)
    setattr(service,flag,value)
    modified = True

if modified:
    try:
        config.save(args.file)
    except SecretsConfigError,emsg:
        script.exit(1,emsg)

