#!/usr/bin/python

import sys
from optparse import OptionParser

import Tartarus
from Tartarus.iface import SysDB, core

from Tartarus.client import initialize
comm, argv = initialize()

def main():
    name, opts = parse_cmdline()
    u = SysDB.UserRecord()
    gm = gM()
    group = gm.getByName(opts.group)
    u.gid = group.gid
    u.name = name
    u.fullName = opts.fullname or name
    u.shell = opts.shell
    if opts.groups:
        gids = [gm.getByName(g).gid for g in opts.groups.split(',')]
    uid = uM().create(u)
    if opts.groups:
        gm.addUserToGroups(uid, gids)

def parse_cmdline():
    optp = OptionParser()
    opt = optp.add_option
    opt('-c', dest='fullname', help='The new user\'s full name.')
    opt('-f', '--fullname',  help='The new user\'s full name.')
    opt('-g', '--group', help='Initial group name')
    opt('-G', '--groups', help='A list of supplementary group')
    opt('-s', '--shell', help='A name of user\'s login shell')
    optp.set_defaults(group='netusers', shell='/bin/bash')
    opts, argv = optp.parse_args(sys.argv)
    if len(argv) != 2: raise RuntimeError('You should specify user name.')
    return argv[1], opts

def uM():
    prx = comm.propertyToProxy('Tartarus.SysDB.UserManagerPrx')
    return SysDB.UserManagerPrx.checkedCast(prx)

def gM():
    prx = comm.propertyToProxy('Tartarus.SysDB.GroupManagerPrx')
    return SysDB.GroupManagerPrx.checkedCast(prx)

try:
    main()
except core.Error, e:
    print e.reason
    sys.exit(1)
except SystemExit:
    raise
except:
    _, e, _ = sys.exc_info()
    print e
    sys.exit(1)

