blob: 5582cf44c2be8fe196cb2a0611270f6e3288d1b0 [file] [log] [blame]
#!/usr/bin/python
#
# Copyright 2012 Google Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Sample to delete suspended users whose last login date is 6 months old.
Sample to obtain the suspended users and their last login date from the
Reporting API and delete the user if the last login date is older than
6 months using the Provisioning API.
"""
__author__ = 'Shraddha Gupta <shraddhag@google.com>'
import datetime
import getopt
import sys
import gdata.apps.client
import gdata.client
import google.apps.reporting
def Usage():
print ('Usage: suspended_users_cleanup.py --email=<email> '
'--password=<password> --domain=<domain> ')
def GetAccountsReport(report_runner):
"""Gets the account report from the Reporting API for current date.
Args:
report_runner: An instance of google.apps.reporting.ReportRunner.
Returns:
response: String containing accounts report.
"""
if report_runner.token is None:
report_runner.Login()
request = google.apps.reporting.ReportRequest()
request.token = report_runner.token
request.domain = report_runner.domain
request.report_name = 'accounts'
request.date = report_runner.GetLatestReportDate()
response = report_runner.GetReportData(request)
return response
def main():
"""Gets accounts report and deletes old suspended users."""
try:
(opts, args) = getopt.getopt(sys.argv[1:], '', ['email=', 'password=',
'domain='])
except getopt.GetoptError:
print 'Error'
Usage()
sys.exit(1)
opts = dict(opts)
report_runner = google.apps.reporting.ReportRunner()
email = opts.get('--email')
report_runner.admin_email = email
password = opts.get('--password')
report_runner.admin_password = password
domain = opts.get('--domain')
report_runner.domain = domain
if not email or not password or not domain:
Usage()
sys.exit(1)
# Instantiate a client for Provisioning API
client = gdata.apps.client.AppsClient(domain=domain)
client.ClientLogin(email=email, password=password,
source='DeleteOldSuspendedUsers')
# Get accounts report from the Reporting API
response = GetAccountsReport(report_runner)
accounts = response.splitlines()
current_date = datetime.datetime.now()
# accounts[0] contains the headings for fields, read data starting at index 1
for i in range(1, len(accounts)):
account_fields = accounts[i].split(',')
# Find the suspended users and check if last login date is 180 days old
if account_fields[3] != 'ACTIVE':
last_login_date_str = account_fields[10]
last_login_date = datetime.datetime.strptime(last_login_date_str,
'%Y%m%d')
duration = current_date - last_login_date
days = duration.days
if days > 180:
account_id = account_fields[2]
print 'This user is obsolete: %s' % account_id
user_name = account_id.split('@')
delete_flag = raw_input('Do you want to delete the user (y/n)? ')
if delete_flag == 'y':
try:
client.DeleteUser(user_name[0])
print 'Deleted %s ' % account_id
except gdata.client.RequestError, e:
print 'Request Error %s %s %s' % (e.status, e.reason, e.body)
if __name__ == '__main__':
main()