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

# googleapps-account-userlist.py
# - List users account from Google Apps
#
# Copyright (C) KAMEI Yutaka @ Open Source Solution Technology Co. Ltd.
# License: GNU General Public License version 2 or later
# Date: 2012-10-24

# Command Option
# -d domain name of Google Apps(Must)
# -g group list flag

import sys
import getopt
import googleappsutils.usercommand
import googleappsutils.client

def usage():
  sys.stderr.write("Usage:" + sys.argv[0] + " [-g] -d domain\n")
  sys.exit(1)

def main():
  # Group, organization list flag
  group_flag = False

  # Create objects
  userEntryClient = googleappsutils.client.GoogleAppsAccountClient()
  configClient    = googleappsutils.domain.Domain()

  # Parse option - getopt()
  try:
    (opts, args) = getopt.getopt(sys.argv[1:], "d:g")
  except:
    sys.stderr.write("Error : Invalid Option.\n")
    usage()

  # Parse option - get each option
  for (opt, value) in opts:
    if value.startswith("-"):
      usage()
    elif opt == "-d":
      userEntryClient.domain = value
    elif opt == "-g":
      group_flag             = True

  # Check necessary option
  if not userEntryClient.domain:
    usage()

  # Read configuration
  try:
    configClient.readConfig(userEntryClient.domain)
  except Exception, e:
    sys.stderr.write("Error : Invalid configuration "
                    + "[" + userEntryClient.domain + "]\n"
                    + str(e))
    sys.exit(1)

  # Set config parameters to user entry client object
  userEntryClient.readConfigFromDomainObject(configClient)

  # Action
  try:
    (user_result, group_result) = (
              userEntryClient.listUserEntries(group_flag=group_flag))
    sys.stdout.write(",".join(["username"] + user_result.pop("!user!")) + "\n")
    for key in sorted(user_result):
      sys.stdout.write(
          (",".join([key] + user_result[key]) + "\n").encode("utf-8"))

    if group_flag:
      sys.stdout.write("\nuser,group...\n")
      for key in sorted(group_result.keys()):
        sys.stdout.write(",".join([key] + group_result[key]) + "\n")
  except Exception, e:
    sys.stderr.write(e.errormsg)
    sys.exit(1)
  else:
    sys.exit(0)

main()

