250 lines
11 KiB
Java
250 lines
11 KiB
Java
/* 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);
|
|
}
|
|
}
|
|
}
|