/* Copyright (c) 2008 Google Inc.
*
* 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.
*/
package sample.appsforyourdomain.audit;
import com.google.gdata.client.appsforyourdomain.audit.AccountInfo;
import com.google.gdata.client.appsforyourdomain.audit.AuditService;
import com.google.gdata.client.appsforyourdomain.audit.MailBoxDumpRequest;
import com.google.gdata.client.appsforyourdomain.audit.MailMonitor;
import com.google.gdata.data.appsforyourdomain.AppsForYourDomainErrorCode;
import com.google.gdata.data.appsforyourdomain.AppsForYourDomainException;
import com.google.gdata.data.appsforyourdomain.generic.GenericEntry;
import com.google.gdata.data.appsforyourdomain.generic.GenericFeed;
import com.google.gdata.util.AuthenticationException;
import com.google.gdata.util.ServiceException;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Calendar;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* A sample client for Google Apps Audit API service that helps you to audit
* user's emails, email drafts, and archived chats.
*
*
*
*/
public class AuditSampleClient {
private static Logger LOGGER = Logger.getLogger(AuditSampleClient.class.toString());
/**
* Google Apps Audit API sample run.
*
* Usage: java AuditSampleClient admin@example.com adminpassword domain
* srcUserName destUserName
*
*/
public static void main(String[] args) {
AuditService service = null;
try {
if (args.length != 5) {
System.out.println("Usage: java AuditSampleClient <admin@example.com> <adminpassword> "
+ "<domain> <srcUserName> <destUserName>");
System.out.println("A simple demo for Audit API features like managing email \n"
+ "monitors, mailbox dump requests, retrieving account info and uploading \n"
+ "domain key for encrypting files. The demo creates mail monitor for 'srcUserName' \n"
+ "with 'destUserName' as the auditor and uses 'srcUserName' as the test user for \n"
+ "the other listed operations above");
System.exit(1);
}
String adminEmail = args[0];
String adminPassword = args[1];
String domain = args[2];
String user = args[3];
String destUser = args[4];
//A sample base64 encoded PGP format key.
String sampleKey =
"LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tDQpWZXJzaW9uOiBHbn"
+ "VQRyB2MS40LjEwIChHTlUvTGludXgpDQoNCm1RRU5CRXJXYUQ0QkNBQ3QybmdmczYv"
+ "K1FPR1lieE5iYzNnTG5YSHRxcDdOVFRYTlc0U0pvKy9BMW9VWm9HeEENClF4NnpGWG"
+ "hRLzhNWFc2Nis4U1RTMVlxTkpPQVJGdGpiSUtQd2pyZGN1a2RQellWS0dacmUwUmF4"
+ "Q25NeUNWKzYNCkY0WU5RRDFVZWdIVHUyd0NHUjF1aVlPZkx4VWE3L2RvNnMzMVdSVE"
+ "g4dmJ0aVBZOS82b2JFSXhEakR6S0lxWU8NCnJ2UkRXcUFMQllrbE9rSjNIYmdmeWw0"
+ "MkVzbkxpQWhTK2RNczJQQ0RpMlgwWkpDUFo4ZVRqTHNkQXRxVlpKK1INCldDMUozVU"
+ "R1RmZtY3BzRFlSdFVMOXc2WU10bGFwQys5bW1KM0FCRUJBQUcwVjBSaGMyaGxjaUJV"
+ "WlhOMElDaFUNCmRHVnlNa0JrWVhOb1pYSXRhSGxrTFhSbGMzUXVZMjl0UG9rQk9BUV"
+ "RBUUlBSWdVQ1N0Wm9QZ0liRFFZTENRZ0gNCmsxOVFja1Rwd0Jkc2tFWXVtRnZtV3Zl"
+ "NVVYMlNWVjdmek9DMG5adGdGeHRaR2xKaEdtanNBM3J4RlRsYitJcmENCldaYXlYQ1"
+ "dZaUN6ZDdtOXo1L0t5R0QyR0ZUSy85NG1kbTI1TjZHWGgvYjM1cElGWlhCSS9yWmpy"
+ "WXJoWVJCRnUNCkd0ekdGSXc5QUFuRnlVekVVVVZmUFdVdEJlNXlITVc1NEM2MG5Iaz"
+ "V4WUlhNnFGaGlMcDRQWXFaQ3JZWDFpSXMNCmZSUk9GQT09DQo9U1RIcg0KLS0tLS1F"
+ "TkQgUEdQIFBVQkxJQyBLRVkgQkxPQ0stLS0tLQ==";
service = new AuditService(adminEmail, adminPassword, domain, "audit-test-" + domain);
LOGGER.log(Level.INFO, "\n-------------uploadPublicKey-------------");
GenericEntry sampleEntry = null;
sampleEntry = service.uploadPublicKey(sampleKey);
LOGGER.log(Level.INFO, "UploadedKey - " + sampleEntry.getAllProperties());
// retrieve all MailboxDump requests with fromDate query.
LOGGER.log(Level.INFO, "\n------retrieveAllMailboxDumpRequests with fromDate---- ");
Calendar c = Calendar.getInstance();
List<GenericEntry> entries = service.retrieveAllMailboxDumpRequests(c.getTime());
for (GenericEntry sampleEntry2 : entries) {
MailBoxDumpRequest request = new MailBoxDumpRequest(sampleEntry2);
LOGGER.log(Level.INFO, "All requests -" + sampleEntry2.getAllProperties().toString());
}
/*
* retrieve all MailboxDump requests without fromDate query. This will
* retrieve all requests made in the last 3 weeks.
*/
LOGGER.log(Level.INFO, "\n------------retrieveAllMailboxDumpRequests-------------");
entries = service.retrieveAllMailboxDumpRequests(null);
for (GenericEntry sampleEntry2 : entries) {
MailBoxDumpRequest request = new MailBoxDumpRequest(sampleEntry2);
LOGGER.log(Level.INFO, "All requests -" + sampleEntry2.getAllProperties().toString());
}
// Create MailboxDumpRequest
MailBoxDumpRequest request = new MailBoxDumpRequest();
request.setAdminEmailAddress(adminEmail);
c.add(Calendar.MONTH, -1);
request.setEndDate(c.getTime());
c.add(Calendar.MONTH, -1);
request.setBeginDate(c.getTime());
request.setPackageContent("FULL_MESSAGE");
request.setSearchQuery("in:chats");
request.setIncludeDeleted(false);
request.setUserEmailAddress(user + "@" + domain);
LOGGER.log(Level.INFO, "\n-------------createMailboxDumpRequest-------------");
sampleEntry = service.createMailboxDumpRequest(request);
LOGGER.log(Level.INFO, "\nCreated request - " + sampleEntry.getAllProperties().toString());
String createdId = sampleEntry.getProperty("requestId");
LOGGER.log(Level.INFO, "\n-------------retrieveMailboxDumpRequest-------------");
sampleEntry = service.retrieveMailboxDumpRequest(user, createdId);
LOGGER.log(Level.INFO, "\nRetrieved dump request - "
+ sampleEntry.getAllProperties().toString());
LOGGER.log(Level.INFO, "\n-------------deleteMailboxDumpRequest-------------");
boolean isDeleted = service.deleteMailboxDumpRequest(user, createdId);
LOGGER.log(Level.INFO, "Deleted mailbox dump request - " + isDeleted);
MailMonitor monitor = new MailMonitor();
c = Calendar.getInstance();
c.add(Calendar.MONTH, 1);
monitor.setBeginDate(c.getTime());
c.add(Calendar.MONTH, 1);
monitor.setEndDate(c.getTime());
monitor.setDestUserName(destUser);
monitor.setIncomingEmailMonitorLevel("FULL_MESSAGE");
monitor.setOutgoingEmailMonitorLevel("HEADER_ONLY");
monitor.setChatMonitorLevel("FULL_MESSAGE");
monitor.setDraftMonitorLevel("FULL_MESSAGE");
LOGGER.log(Level.INFO, "\n-------------createMailMonitor-------------");
LOGGER.log(Level.INFO, "\nCreating mail monitor for the user: " + user);
service.createMailMonitor(user, monitor);
// Retrieve all monitors for the user
LOGGER.log(Level.INFO, "\n-------------retrieveMonitors-------------");
LOGGER.log(Level.INFO, "\nRetrieving monitors for the user: " + user);
GenericFeed feed = service.retrieveMonitors(user);
for (GenericEntry entry : feed.getEntries()) {
monitor = new MailMonitor(entry);
LOGGER.log(Level.INFO, "Request Id: " + monitor.getRequestId());
LOGGER.log(Level.INFO, "Destination User: " + monitor.getDestUserName());
LOGGER.log(Level.INFO, "Monitor Begin Date: " + monitor.getBeginDate());
LOGGER.log(Level.INFO, "Monitor End Date: " + monitor.getEndDate());
LOGGER.log(Level.INFO, "Outgoing Email Monitor Level: "
+ monitor.getOutgoingEmailMonitorLevel());
LOGGER.log(Level.INFO, "Incoming Email Monitor Level: "
+ monitor.getIncomingEmailMonitorLevel());
LOGGER.log(Level.INFO, "Draft Email Monitor Level: " + monitor.getDraftMonitorLevel());
LOGGER.log(Level.INFO, "Chat Monitor Level: " + monitor.getChatMonitorLevel());
}
// Delete the monitor for the user
LOGGER.log(Level.INFO, "\n-------------deleteMonitor-------------");
LOGGER.log(Level.INFO, "Deleting monitor for the user...");
service.deleteMonitor(user, destUser);
//Account Info requests
LOGGER.log(Level.INFO, "\n-------------createAccountInfoRequest-------------");
sampleEntry = service.createAccountInfoRequest(user);
LOGGER.log(Level.INFO, sampleEntry.getAllProperties().toString());
AccountInfo info = new AccountInfo(sampleEntry);
LOGGER.log(Level.INFO, "\n-------------retrieveAccountInfoRequest-------------");
sampleEntry = service.retrieveAccountInfoRequest(user, info.getRequestId());
info = new AccountInfo(sampleEntry);
LOGGER.log(Level.INFO, info.getRequestId() + " : " + info.getStatus());
if (info.getStatus().equalsIgnoreCase("COMPLETED")) {
for ( String url : info.getFileUrls())
LOGGER.log(Level.INFO, "File: " + url);
}
// retrieve all account info requests from the given date.
LOGGER.log(Level.INFO, "\n------retrieveAllAccountInfoRequests with fromDate-----");
Calendar temp = Calendar.getInstance();
temp.add(Calendar.MONTH, -1);
entries = service.retrieveAllAccountInfoRequests(temp.getTime());
for (GenericEntry entry : entries) {
LOGGER.log(Level.INFO, entry.getAllProperties().toString());
}
/*
* retrieve all account info requests without fromDate query. This will
* retrieve all requests made in the last 3 weeks.
*/
LOGGER.log(Level.INFO, "\n-------------retrieveAllAccountInfoRequests-------------");
entries = service.retrieveAllAccountInfoRequests(null);
for (GenericEntry entry : entries) {
LOGGER.log(Level.INFO, entry.getAllProperties().toString());
}
LOGGER.log(Level.INFO, "\n-------------deleteAccountInfoRequest-------------");
try {
service.deleteAccountInfoRequest(user, info.getRequestId());
} catch (AppsForYourDomainException e) {
if (e.getErrorCode() == AppsForYourDomainErrorCode.InvalidValue) {
LOGGER.log(Level.INFO, e.getMessage());
} else {
e.printStackTrace();
}
}
LOGGER.log(Level.INFO, "End Audit API demo run");
} catch (AuthenticationException e) {
LOGGER.log(Level.SEVERE, "Authentication Error: " + e.getMessage(), e);
} catch (AppsForYourDomainException e) {
LOGGER.log(Level.SEVERE, "AppsForYourDomain Error: " + e.getMessage(), e);
} catch (MalformedURLException e) {
LOGGER.log(Level.SEVERE, "Malformed URL Error: " + e.getMessage(), e);
} catch (IOException e) {
LOGGER.log(Level.SEVERE, "Network I/O Error: " + e.getMessage(), e);
} catch (ServiceException e) {
LOGGER.log(Level.SEVERE, "Google Data Service Error: " + e.getMessage(), e);
}
}
}