/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.google.apps.connector.util;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.services.admin.directory.Directory;
import com.google.api.services.admin.directory.DirectoryRequest;
import com.google.api.services.admin.directory.model.Alias;
import com.google.api.services.admin.directory.model.Group;
import com.google.api.services.admin.directory.model.Member;
import com.google.api.services.admin.directory.model.Members;
import com.google.api.services.admin.directory.model.User;
import com.google.api.services.admin.directory.model.UserName;
import com.liferay.google.apps.connector.auth.GoogleCredentialUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.util.StringPool;
import javax.servlet.http.HttpServletResponse;
/**
* @author Matthew Kong
* @author Amos Fong
*/
public class GoogleDirectoryUtil {
public static void addGroup(String name, String groupEmailAddress)
throws PortalException {
try {
Directory directory = _getDirectory();
Directory.Groups groups = directory.groups();
Group group = new Group();
group.setEmail(groupEmailAddress);
group.setName(name);
Directory.Groups.Insert insert = groups.insert(group);
_executeAction(insert);
}
catch (Exception e) {
throw new PortalException(e);
}
}
public static void addGroupMember(
String groupEmailAddress, String emailAddress)
throws PortalException {
try {
Directory directory = _getDirectory();
Directory.Members members = directory.members();
Member member = new Member();
member.setEmail(emailAddress);
Directory.Members.Insert insert = members.insert(
groupEmailAddress, member);
_executeAction(insert);
}
catch (Exception e) {
throw new PortalException(e);
}
}
public static void addUser(
String primaryEmailAddress, String password, String firstName,
String middleName, String lastName)
throws PortalException {
try {
Directory directory = _getDirectory();
Directory.Users users = directory.users();
User user = new User();
UserName userName = new UserName();
userName.setFamilyName(lastName);
userName.setGivenName(firstName);
user.setName(userName);
user.setPassword(password);
user.setPrimaryEmail(primaryEmailAddress);
Directory.Users.Insert insert = users.insert(user);
_executeAction(insert);
}
catch (Exception e) {
throw new PortalException(e);
}
}
public static void addUserAlias(
String primaryEmailAddress, String aliasEmailAddress)
throws PortalException {
try {
Directory directory = _getDirectory();
Directory.Users users = directory.users();
Directory.Users.Aliases aliases = users.aliases();
Alias alias = new Alias();
alias.setAlias(aliasEmailAddress);
Directory.Users.Aliases.Insert insert = aliases.insert(
primaryEmailAddress, alias);
_executeAction(insert);
}
catch (Exception e) {
throw new PortalException(e);
}
}
public static void deleteGroup(String groupEmailAddress)
throws PortalException {
try {
Directory directory = _getDirectory();
Directory.Groups groups = directory.groups();
Directory.Groups.Delete delete = groups.delete(groupEmailAddress);
_executeAction(delete);
}
catch (Exception e) {
throw new PortalException(e);
}
}
public static void deleteGroupMember(
String groupEmailAddress, String emailAddress)
throws PortalException {
try {
Directory directory = _getDirectory();
Group group = getGroup(groupEmailAddress);
if (group == null) {
return;
}
Directory.Members members = directory.members();
Directory.Members.Delete delete = members.delete(
groupEmailAddress, emailAddress);
_executeAction(delete);
}
catch (Exception e) {
throw new PortalException(e);
}
}
public static void deleteUser(String primaryEmailAddress)
throws PortalException {
try {
Directory directory = _getDirectory();
Directory.Users users = directory.users();
Directory.Users.Delete delete = users.delete(primaryEmailAddress);
_executeAction(delete);
}
catch (Exception e) {
throw new PortalException(e);
}
}
public static void deleteUserAlias(
String primaryEmailAddress, String aliasEmailAddress)
throws PortalException {
try {
Directory directory = _getDirectory();
Directory.Users users = directory.users();
Directory.Users.Aliases aliases = users.aliases();
Directory.Users.Aliases.Delete delete = aliases.delete(
primaryEmailAddress, aliasEmailAddress);
_executeAction(delete);
}
catch (Exception e) {
throw new PortalException(e);
}
}
public static Group getGroup(String groupEmailAddress) {
try {
Directory directory = _getDirectory();
Directory.Groups groups = directory.groups();
Directory.Groups.Get get = groups.get(groupEmailAddress);
return get.execute();
}
catch (Exception e) {
return null;
}
}
public static Member getGroupMember(
String groupEmailAddress, String userEmailAddress) {
try {
Directory directory = _getDirectory();
Directory.Members members = directory.members();
Directory.Members.Get get = members.get(
groupEmailAddress, userEmailAddress);
return get.execute();
}
catch (Exception e) {
return null;
}
}
public static Members getGroupMembers(String groupEmailAddress) {
try {
Directory directory = _getDirectory();
Directory.Members members = directory.members();
Directory.Members.List list = members.list(groupEmailAddress);
return list.execute();
}
catch (Exception e) {
return null;
}
}
public static void updateGroupMember(
String groupEmailAddress, String userEmailAddress, Member member)
throws PortalException {
try {
Directory directory = _getDirectory();
Directory.Members members = directory.members();
Directory.Members.Update update = members.update(
groupEmailAddress, userEmailAddress, member);
_executeAction(update);
}
catch (Exception e) {
throw new PortalException(e);
}
}
public static void updateUserPassword(
String primaryEmailAddress, String password)
throws PortalException {
try {
Directory directory = _getDirectory();
Directory.Users users = directory.users();
User user = new User();
user.setPassword(password);
Directory.Users.Update update = users.update(
primaryEmailAddress, user);
_executeAction(update);
}
catch (Exception e) {
throw new PortalException(e);
}
}
private static void _executeAction(DirectoryRequest<?> directoryRequest)
throws Exception {
directoryRequest.setFields(StringPool.BLANK);
for (int i = 1; i <= PortletPropsValues.GOOGLE_API_RETRY_ATTEMPTS;
i++) {
try {
directoryRequest.execute();
return;
}
catch (GoogleJsonResponseException gjre) {
if (gjre.getStatusCode() == HttpServletResponse.SC_CONFLICT) {
return;
}
if (i == PortletPropsValues.GOOGLE_API_RETRY_ATTEMPTS) {
throw new PortalException(gjre);
}
else {
Thread.sleep(PortletPropsValues.GOOGLE_API_RETRY_INTERVAL);
}
}
}
}
private static Directory _getDirectory() throws Exception {
if (_directory != null) {
return _directory;
}
GoogleCredential googleCredential =
GoogleCredentialUtil.getGoogleCredential();
Directory.Builder builder = new Directory.Builder(
googleCredential.getTransport(), googleCredential.getJsonFactory(),
googleCredential);
_directory = builder.build();
return _directory;
}
private static Directory _directory;
}