/* 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 com.google.gdata.data.appsforyourdomain; import com.google.gdata.util.common.base.StringUtil; import com.google.gdata.util.common.xml.XmlWriter; import com.google.gdata.data.Extension; import com.google.gdata.data.ExtensionDescription; import com.google.gdata.data.ExtensionPoint; import com.google.gdata.data.ExtensionProfile; import com.google.gdata.data.appsforyourdomain.Namespaces; import com.google.gdata.util.ParseException; import com.google.gdata.util.XmlParser.ElementHandler; import org.xml.sax.Attributes; import java.io.IOException; import java.util.ArrayList; /** * A name space element: "apps:login". Used to model a user account in Google * Apps for Your Domain. Has attributes "userName", "password", "suspended", * "ipWhitelisted" and "hashFunctionName". * * * * */ public class Login extends ExtensionPoint implements Extension { public static final String EXTENSION_LOCAL_NAME = "login"; public static final String ATTRIBUTE_USER_NAME = "userName"; public static final String ATTRIBUTE_PASSWORD = "password"; public static final String ATTRIBUTE_SUSPENDED = "suspended"; public static final String ATTRIBUTE_IPWHITELISTED = "ipWhitelisted"; public static final String ATTRIBUTE_HASH_FUNCTION_NAME = "hashFunctionName"; public static final String ATTRIBUTE_ADMIN = "admin"; public static final String ATTRIBUTE_AGREED_TO_TERMS = "agreedToTerms"; public static final String ATTRIBUTE_CHANGE_PASSWORD_AT_NEXT_LOGIN = "changePasswordAtNextLogin"; /* * property "userName" * Required. */ protected String userName; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } /* * property "password" * Required. */ protected String password; public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } /* * property "suspended" * The suspended attribute is optional and set to null when unspecified by * client. */ protected Boolean suspended = null; public Boolean getSuspended() { return suspended; } public void setSuspended(Boolean b) { suspended = b; } /* * property "ipWhitelisted" * The ipWhitelisted attribute is optional and set to null when unspecified by * client. */ protected Boolean ipWhitelisted = null; public Boolean getIpWhitelisted() { return ipWhitelisted; } public void setIpWhitelisted(Boolean b) { ipWhitelisted = b; } /* * property "hashFunctionName" * Optional. Specifies name of hash function used to hash the password * value. When unspecified, no hash function was used and password is * plain text. Only supported value right now is "SHA-1". */ protected String hashFunctionName = null; public String getHashFunctionName() { return hashFunctionName; } public void setHashFunctionName(String h) { hashFunctionName = h; } /* * property "admin" * Optional. The admin attribute is set to true if the user is an * administrator and false if the user is not an administrator. When * unspecified, the admin property is set to null. */ protected Boolean admin = null; public Boolean getAdmin() { return admin; } public void setAdmin(Boolean b) { admin = b; } /* * property "agreedToTerms" * Read-only. True if the user has agreed to the terms of service. */ protected Boolean agreedToTerms = null; public Boolean getAgreedToTerms() { return agreedToTerms; } public void setAgreedToTerms(Boolean b) { agreedToTerms = b; } /* * property "changePasswordAtNextLogin" * Optional. True if user needs to change password at next login. * When unspecified, the attribute is set to null. */ protected Boolean changePasswordAtNextLogin = null; public Boolean getChangePasswordAtNextLogin() { return changePasswordAtNextLogin; } public void setChangePasswordAtNextLogin(Boolean b) { changePasswordAtNextLogin = b; } /** * @return Description of this extension */ public static ExtensionDescription getDefaultDescription() { ExtensionDescription extensionDescription = new ExtensionDescription(); extensionDescription.setExtensionClass(Login.class); extensionDescription.setNamespace(Namespaces.APPS_NAMESPACE); extensionDescription.setLocalName(EXTENSION_LOCAL_NAME); extensionDescription.setRepeatable(false); return extensionDescription; } @Override public void generate(XmlWriter w, ExtensionProfile extensionProfile) throws IOException { ArrayList<XmlWriter.Attribute> attributes = new ArrayList<XmlWriter.Attribute>(); if (userName != null) { attributes.add( new XmlWriter.Attribute(ATTRIBUTE_USER_NAME, userName) ); } if (password != null) { attributes.add( new XmlWriter.Attribute(ATTRIBUTE_PASSWORD, password) ); } if (suspended != null) { attributes.add(new XmlWriter.Attribute(ATTRIBUTE_SUSPENDED, suspended)); } if (ipWhitelisted != null) { attributes.add(new XmlWriter.Attribute(ATTRIBUTE_IPWHITELISTED, ipWhitelisted)); } if (!StringUtil.isEmptyOrWhitespace(hashFunctionName)) { attributes.add(new XmlWriter.Attribute(ATTRIBUTE_HASH_FUNCTION_NAME, hashFunctionName)); } if (admin != null) { attributes.add(new XmlWriter.Attribute(ATTRIBUTE_ADMIN, admin)); } if (changePasswordAtNextLogin != null) { attributes.add(new XmlWriter.Attribute( ATTRIBUTE_CHANGE_PASSWORD_AT_NEXT_LOGIN, changePasswordAtNextLogin)); } if (agreedToTerms != null) { attributes.add(new XmlWriter.Attribute(ATTRIBUTE_AGREED_TO_TERMS, agreedToTerms)); } generateStartElement( w, Namespaces.APPS_NAMESPACE, EXTENSION_LOCAL_NAME, attributes, null); // Invoke ExtensionPoint. generateExtensions(w, extensionProfile); w.endElement(Namespaces.APPS_NAMESPACE, EXTENSION_LOCAL_NAME); } @Override public ElementHandler getHandler( ExtensionProfile extProfile, String namespace, String localName, Attributes attrs) throws ParseException { return new Handler(extProfile, attrs); } /** <apps:login> parser. */ private class Handler extends ExtensionPoint.ExtensionHandler { public Handler(ExtensionProfile extProfile, Attributes attrs) throws ParseException { super(extProfile, Login.class); ipWhitelisted = getBooleanAttribute(attrs, "ipWhitelisted"); } @Override public void processAttribute( String namespace, String localName, String value) { if ("".equals(namespace)) { if (ATTRIBUTE_USER_NAME.equals(localName)) { userName = value; } else if (ATTRIBUTE_PASSWORD.equals(localName)) { password = value; } else if (ATTRIBUTE_HASH_FUNCTION_NAME.equals(localName)) { hashFunctionName = value; } else if (ATTRIBUTE_SUSPENDED.equals(localName)) { if (value.trim().equalsIgnoreCase("true")) { suspended = true; } else if (value.trim().equalsIgnoreCase("false")) { suspended = false; } } else if (ATTRIBUTE_ADMIN.equals(localName)) { if (value.trim().equalsIgnoreCase("true")) { admin = true; } else if (value.trim().equalsIgnoreCase("false")) { admin = false; } } else if (ATTRIBUTE_AGREED_TO_TERMS.equals(localName)) { if (value.trim().equalsIgnoreCase("true")) { agreedToTerms = true; } else if (value.trim().equalsIgnoreCase("false")) { agreedToTerms = false; } } else if (ATTRIBUTE_CHANGE_PASSWORD_AT_NEXT_LOGIN.equals(localName)) { if (value.trim().equalsIgnoreCase("true")) { changePasswordAtNextLogin = true; } else if (value.trim().equalsIgnoreCase("false")) { changePasswordAtNextLogin = false; } } } } } }