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

# googleapps-nickname-list.py
# - List users nicknames 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)

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

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

def main():

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

  # Parse option - getopt()
  try:
    (opts, args) = getopt.getopt(sys.argv[1:], "d:")
  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

  # 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)

  # Connect to GoogleApps
  try:
    userEntryClient.connectUserClient()
  except googleappsutils.client.ConnectError:
    msg = ("Error : Failed to connect to Google Apps.\n")
    sys.stderr.write(msg)
    sys.exit(1)

  # Get all user entries
  try:
    userEntryClient.getAllUsersInDomain()
  except Exception, e:
    sys.stderr.write(e.errormsg)
    sys.exit(1)

  # Action
  try:
    nickname_result = userEntryClient.listNicknamesByUsers()
    sys.stdout.write("user,nickname...\n")
    for key in sorted(nickname_result):
      sys.stdout.write(",".join([key] + nickname_result[key]) + "\n")
  except Exception, e:
    sys.stderr.write(e.errormsg)
    sys.exit(1)
  else:
    sys.exit(0)

main()

