/* 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.adminsettings; import com.google.gdata.util.common.util.Base64; import com.google.gdata.client.appsforyourdomain.adminsettings.AdminSettingsConstants; import com.google.gdata.client.appsforyourdomain.adminsettings.DomainSettingsService; import com.google.gdata.client.appsforyourdomain.adminsettings.DomainVerificationService; import com.google.gdata.client.appsforyourdomain.adminsettings.EmailManagementService; import com.google.gdata.client.appsforyourdomain.adminsettings.EncodeUtil; import com.google.gdata.client.appsforyourdomain.adminsettings.SingleSignOnService; import sample.util.SimpleCommandLineParser; 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.List; import java.util.Scanner; import java.util.logging.Level; import java.util.logging.Logger; /** * A sample client for Admin Settings API. Consists of drivers to run these * services: {@link DomainSettingsService} {@link SingleSignOnService} * {@link DomainVerificationService} {@link EmailManagementService} * * * */ public class AdminSettingsClient { private static final Logger LOGGER = Logger.getLogger(AdminSettingsClient.class.getName()); /** * run() does a demo run and performs all operations possible with the client * * @param adminEmail the email id of the administrator. * @param password the administrator password. * @param domainName the domain name to be configured. */ public static void runAccountSettings(String adminEmail, String password, String domainName) { System.out.println("Intiating demo run"); try { DomainSettingsService client = new DomainSettingsService(adminEmail, password, domainName, "test"); System.out.println("Enter full path to logo file"); Scanner in = new Scanner(System.in); String file = in.nextLine(); client.setDomainLogo(EncodeUtil.encodeBinaryFile(file)); String countryCode = client.getCountryCodeForDomain(); LOGGER.log(Level.INFO, "Retrieved CountryCode: " + countryCode); String customerPIN = client.getCustomerPIN(); LOGGER.log(Level.INFO, "Retrieved customerPIN: " + customerPIN); String defaultLanguage = client.getDefaultLanguage(); LOGGER.log(Level.INFO, "Retrieved defaultLanguage: " + defaultLanguage); String domainCreationTime = client.getDomainCreationTime(); LOGGER.log(Level.INFO, "Retrieved domainCreationTime: " + domainCreationTime); String domainEdition = client.getDomainEdition(); LOGGER.log(Level.INFO, "Retrieved domainEdition: " + domainEdition); String domainSecondaryEmailAddress = client.getDomainSecondaryEmailAddress(); LOGGER.log(Level.INFO, "Retrieved domainSecondaryEmailAddress: " + domainSecondaryEmailAddress); String domainVerificationStatus = client.getDomainVerificationStatus(); LOGGER.log(Level.INFO, "Retrieved domainVerificationStatus: " + domainVerificationStatus); int maxUserCount = client.getMaxUserCount(); LOGGER.log(Level.INFO, "Retrieved maxUserCount: " + maxUserCount); String organizationName = client.getOrganizationName(); LOGGER.log(Level.INFO, "Retrieved organizationName: " + organizationName); String supportPin = client.getSupportPIN(); LOGGER.log(Level.INFO, "Retrieved supportPin: " + supportPin); System.out.println("Enter a secondary email ID for your domain:"); String secondaryEmail = in.nextLine(); LOGGER.log(Level.INFO, "Changing secondary email address to admin email: " + secondaryEmail); client.setDomainSecondaryEmailAddress(secondaryEmail); LOGGER.log(Level.INFO, "Changed secondary email address to : " + client.getDomainSecondaryEmailAddress()); LOGGER.log(Level.INFO, "Changing organization name to newOrg:"); client.setOrganizationName("newOrg"); LOGGER.log(Level.INFO, "Changed organization name: " + client.getOrganizationName()); LOGGER.log(Level.INFO, "Changing default language to fr:"); client.setDefaultLanguage("fr"); LOGGER.log(Level.INFO, "Changed default language: " + client.getDefaultLanguage()); // Restore original values client.setDefaultLanguage(defaultLanguage); client.setDomainSecondaryEmailAddress(domainSecondaryEmailAddress); client.setOrganizationName(organizationName); } catch (AuthenticationException e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); } catch (IllegalArgumentException e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); } catch (ServiceException e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); } catch (MalformedURLException e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); } catch (IOException e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); } } /** * A sample run for SSO settings API * * @param adminEmail the email id of the administrator. * @param password the administrator password. * @param domainName the domain name to be configured. */ public static void runSsoSettings(String adminEmail, String password, String domainName) { try { SingleSignOnService client = new SingleSignOnService(adminEmail, password, domainName, "test"); final String key = Base64.encode(("-----BEGIN CERTIFICATE-----\n" + "MIIEbDCCA9WgAwIBAgIBCTANBgkqhkiG9w0BAQUFADCBjDELMAkGA1UEBhMCVVMx\n" + "ETAPBgNVBAgTCE5ldyBZb3JrMREwDwYDVQQHEwhOZXcgWW9yazEPMA0GA1UEChMG\n" + "R29vZ2xlMSQwIgYDVQQDFBtUaW0gRGllcmtzIENBIFtubyBzZWN1cml0eV0xIDAe\n" + "BgkqhkiG9w0BCQEWEWRpZXJrc0Bnb29nbGUuY29tMB4XDTA0MDQxNDIwMzM1NFoX\n" + "DTA1MDQxNDIwMzM1NFowQTEPMA0GA1UEChMGR29vZ2xlMRcwFQYDVQQLEw5TaW5n\n" + "bGUgU2lnbi1vbjEVMBMGA1UEAxMMTG9naW4gU2VydmVyMIIBtzCCASwGByqGSM44\n" + "BAEwggEfAoGBAKGpKYcoXxcgewIuAdDxT8QzSNI9I7Lja/LoueR1z7A/l0UWqZHO\n" + "6J8SyudgXFVxfkQEeYGbidsew2RMxvMl6pWMfqr/22eCqr9GPVkT7GVGqjAVdHVu\n" + "qJOPKSW7fQV3c82aj5g2qgkpwc1fUep8Cn1+Nz4ApCttVCSJD5kPtDTPAhUAo9jk\n" + "HrC8TH0kMFARmNbG5pizRS8CgYEAiB/TJmxCStDDMhDwo0ccnWgNo4oOQlMSeN46\n" + "Gb5YyVejeFBZSGni958ZcaaPW0Dg4VpbGxsQTSuF8P1BVY03fqimMd+dbRWSGgNy\n" + "YpkpdWBe21FnsSrnIrWnv/3K/7HMB7Xn4rEbhSvJF14I5TDuRN3lIOnIOKK6I5O9\n" + "QYfIfYoDgYQAAoGABPbEsbJS59Gj9556j9eAnGeLur56b98AGO7OFvYSoo9XcjoS\n" + "uYiFNhxu8MLzhkEqA6bqUif0mpl/d/VAXc74mdxaeg3vGb5MUGzdcr/mk9+32KYx\n" + "aX1hxn3UEN6WuypWe1eKuRVUzI/OepC88ib60XZHnkW9ByqqYXWdyGxW/G2jggEN\n" + "MIIBCTAJBgNVHRMEAjAAMCEGCWCGSAGG+EIBDQQUFhJHb29nbGUgLSBEaWVya3Mg\n" + "Q0EwHQYDVR0OBBYEFISoKKfKZlD6QIGqX60VCQA07sGLMIG5BgNVHSMEgbEwga6A\n" + "FK517Zhw+C2LH0rAjGRdEx61PYsIoYGSpIGPMIGMMQswCQYDVQQGEwJVUzERMA8G\n" + "A1UECBMITmV3IFlvcmsxETAPBgNVBAcTCE5ldyBZb3JrMQ8wDQYDVQQKEwZHb29n\n" + "bGUxJDAiBgNVBAMUG1RpbSBEaWVya3MgQ0EgW25vIHNlY3VyaXR5XTEgMB4GCSqG\n" + "SIb3DQEJARYRZGllcmtzQGdvb2dsZS5jb22CAQAwDQYJKoZIhvcNAQEFBQADgYEA\n" + "qwjvp27Xq1lp2ZyVWrGj8A3vuwUhsA2xGHvw4FTk4bCPwuuErugP/pwNl2582KNR\n" + "bjl1Vnz6zXkW1T4855EFWOZZkhIrvLGTRIoyQODCoW/Zd+3e7CfTvPdmJJNaVpD7\n" + "1RMPC45yjolVq4JLTT9/y6/+/5Nnn7oELnXRgDiMAR0=\n" + "-----END CERTIFICATE-----").getBytes()); LOGGER.log(Level.INFO, "Retrieving SSO Settings: \n" + client.getSsoSettings().getAllProperties()); LOGGER.log(Level.INFO, "Retrieving SSO Key: \n" + client.getSsoSigningKey().getAllProperties()); LOGGER.log(Level.INFO, "Updating SSO Key: \n" + client.updateSsoSigningKey(key).getAllProperties()); } catch (AuthenticationException e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); } catch (IllegalArgumentException e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); } catch (ServiceException e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); } catch (MalformedURLException e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); } catch (IOException e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); } } /** * * @param adminEmail the email id of the administrator. * @param adminPassword the administrator password. * @param domainName the domain name to be configured. */ public static void runDomainVerificationService(String adminEmail, String password, String domainName) { try { DomainVerificationService client = new DomainVerificationService(adminEmail, password, domainName, "test"); GenericEntry entry = client.retrieveCnameVerificationStatus(); LOGGER.log(Level.INFO, "Retrieving CNAME verification status: " + entry.getAllProperties()); entry = client.updateVerifiedStatus(entry, true); LOGGER.log(Level.INFO, "Updated CNAME verfication status: " + entry.getAllProperties()); entry = client.retrieveMxVerificationStatus(); LOGGER.log(Level.INFO, "Retrieving MX verification status: " + entry.getAllProperties()); entry = client.updateVerifiedStatus(entry, true); LOGGER.log(Level.INFO, "Updating MX verfication status: " + entry.getAllProperties()); } catch (AuthenticationException e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); } catch (IllegalArgumentException e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); } catch (ServiceException e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); } catch (MalformedURLException e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); } catch (IOException e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); } } /** * * @param adminEmail the email id of the administrator. * @param adminPassword the administrator password. * @param domainName the domain name to be configured. */ public static void runEmailManagementService( String adminEmail, String password, String domainName) { try { EmailManagementService client = new EmailManagementService(adminEmail, password, domainName, "test"); GenericEntry entry = client.retrieveOutboundGatewaySettings(); LOGGER.log(Level.INFO, "Outbound gateway settings" + entry.getAllProperties()); client.updateOutboundGatewaySettings(AdminSettingsConstants.TEST_EMAIL_ROUTE, AdminSettingsConstants.TEST_SMTPMODE); GenericFeed feed = client.retrieveEmailRoutingSettings(); List<GenericEntry> entries = feed.getEntries(); for (GenericEntry genericEntry : entries) { LOGGER.log(Level.INFO, "Email Routing Settings" + genericEntry.getAllProperties()); LOGGER.log(Level.INFO, "Email Routing Settings" + genericEntry.getId()); // update settings LOGGER.log(Level.INFO, "Updating Routing Settings"); genericEntry.removeProperty("routeEnabled"); genericEntry.addProperty("routeEnabled", String.valueOf(false)); genericEntry.update(); } } catch (AuthenticationException e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); } catch (IllegalArgumentException e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); } catch (ServiceException e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); } catch (MalformedURLException e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); } catch (IOException e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); } } /** * @param args */ public static void main(String[] args) { SimpleCommandLineParser parser = new SimpleCommandLineParser(args); String adminEmail = parser.getValue("admin_email", "email", "e"); String adminPassword = parser.getValue("admin_password", "pass", "p"); String domain = parser.getValue("domain", "domain", "d"); boolean help = parser.containsKey("help", "h"); if (help || (adminEmail == null) || (adminPassword == null) || (domain == null)) { usage(); System.exit(1); } System.out.println("WARNING: This sample modifies the admin settings of a domain." + "Use a TEST domain only.\nDo you want to continue (y/n):"); Scanner in = new Scanner(System.in); String continueDemo = in.next(); if (!String.valueOf(continueDemo).equalsIgnoreCase("y")) { System.exit(1); } LOGGER.log(Level.INFO, "-----------------Domain Settings Demo-------------"); runAccountSettings(adminEmail, adminPassword, domain); LOGGER.log(Level.INFO, "-------------------SSO Settings Demo--------------"); runSsoSettings(adminEmail, adminPassword, domain); LOGGER.log(Level.INFO, "--------------Verification Settings Demo----------"); runDomainVerificationService(adminEmail, adminPassword, domain); LOGGER.log(Level.INFO, "---------------Email Management Demo--------------"); runEmailManagementService(adminEmail, adminPassword, domain); } /* * Prints the command line usage of this sample application. */ private static void usage() { System.out.println("Usage: java AdminSettngsClient" + " --admin_email [email] --admin_password [pass] --domain [domain]"); System.out.println("\nA simple application that performs domain configuration \n" + "on the given domain using the provided admin username and password.\n" + "WARNING: Please use a test domain for the sample run."); } }