#!/opt/osstech/bin/python2.7
# -*- coding: utf-8 -*-

# unicornidm-account-csvuseradd.py
# - Account create by Unicorn ID Manager
#
# Copyright (C) TAKEDA Yasuma @ Open Source Solution Technology Co. Ltd.
# License: GNU General Public License version 2 or later
# Date: 2010-01-15

import os, subprocess, sys, pwd
from optparse import OptionParser

def main():
    UNICORNIDM_PATH = "/opt/osstech/lib/unicornIDM"
    UNICORNIDM_CMD = "%s/manage.py" % UNICORNIDM_PATH

    HTTPDUSER = "apache"

    try:
        webuser = pwd.getpwnam(HTTPDUSER)
    except KeyError, e:
        sys.stderr.write("user %s does not exist on this system.\n")

    ruid = os.getuid()
    if ruid != 0 and ruid != webuser.pw_uid:
        sys.stderr.write("You are not permited.\n")
        sys.exit(1)

    usage = "usage: %prog -t <target> -f <file> -o <optype>"

    parser = OptionParser(usage=usage)
    parser.add_option("-t", "--target", dest="orgname", help="Target organization name")
    parser.add_option("-f", "--file", dest="csvfile", help="Input csv file to read data from"),
    parser.add_option("-o", "--optype", dest="opType", type="choice", choices=["useradd", "userdel", "usermod", "userenable", "userdisable"], help="Type of operation [useradd,userdel,usermod,userenable,userdisable]")

    (opts, args) = parser.parse_args(sys.argv)

    if not args:
        parser.print_help()
        sys.exit(1)

    if not opts.csvfile:
        sys.stderr.write("CSV file is not specified.\n")
        parser.print_help()
        sys.exit(1)
    else:
        csvfile = opts.csvfile
        filename = os.path.abspath(csvfile)

    if not opts.orgname:
        sys.stderr.write("Target organization is not specified.\n")
        parser.print_help()
        sys.exit(1)
    else:
        orgname = opts.orgname

    if not opts.opType:
        sys.stderr.write("Type of operation is not specified.\n")
        parser.print_help()
        sys.exit(1)
    else:
        opType = opts.opType

    try:
        cmd = [UNICORNIDM_CMD, "csvhandle", "-t", orgname, "-f", filename, "-o", opType]
        p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=UNICORNIDM_PATH)
        stdstr = p.stdout.readlines()
        errstr = p.stderr.readlines()
        r = p.wait()

        if (r == 0):
            for line in stdstr:
                sys.stdout.write(line)
        else:
            # Fail to execute
            sys.stderr.write("Failed to handle csv file. \n%s\n" % str(errstr))
            sys.stderr.write(str(errstr))
            sys.exit(1)
    except Exception, e:
        sys.stderr.write("Failed to handle csv file. \n%s\n" % str(e))
        sys.exit(1)

    return

main()
