/**
* Copyright (c) Istituto Nazionale di Fisica Nucleare (INFN). 2006-2016
*
* 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 org.glite.security.voms.admin.service;
import java.rmi.RemoteException;
import java.util.Collection;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.glite.security.voms.User;
import org.glite.security.voms.VOMSException;
import org.glite.security.voms.admin.error.UnimplementedFeatureException;
import org.glite.security.voms.admin.operations.attributes.CreateAttributeDescriptionOperation;
import org.glite.security.voms.admin.operations.attributes.DeleteAttributeDescriptionOperation;
import org.glite.security.voms.admin.operations.attributes.FindAttributeDescriptionOperation;
import org.glite.security.voms.admin.operations.attributes.ListAttributeDescriptionsOperation;
import org.glite.security.voms.admin.operations.groups.DeleteGroupAttributeOperation;
import org.glite.security.voms.admin.operations.groups.FindGroupOperation;
import org.glite.security.voms.admin.operations.groups.ListAttributesForGroupOperation;
import org.glite.security.voms.admin.operations.groups.SetGroupAttributeOperation;
import org.glite.security.voms.admin.operations.roles.DeleteRoleAttributeOperation;
import org.glite.security.voms.admin.operations.roles.FindRoleOperation;
import org.glite.security.voms.admin.operations.roles.ListRoleAttributesOperation;
import org.glite.security.voms.admin.operations.roles.SetRoleAttributeOperation;
import org.glite.security.voms.admin.operations.users.DeleteUserAttributeOperation;
import org.glite.security.voms.admin.operations.users.FindUserOperation;
import org.glite.security.voms.admin.operations.users.ListAttributesForUserOperation;
import org.glite.security.voms.admin.operations.users.SetUserAttributeOperation;
import org.glite.security.voms.admin.persistence.error.NoSuchGroupException;
import org.glite.security.voms.admin.persistence.error.NoSuchRoleException;
import org.glite.security.voms.admin.persistence.error.NoSuchUserException;
import org.glite.security.voms.admin.persistence.model.VOMSGroup;
import org.glite.security.voms.admin.persistence.model.VOMSRole;
import org.glite.security.voms.admin.persistence.model.VOMSUser;
import org.glite.security.voms.admin.persistence.model.attribute.VOMSAttributeDescription;
import org.glite.security.voms.admin.util.PathNamingScheme;
import org.glite.security.voms.service.attributes.AttributeClass;
import org.glite.security.voms.service.attributes.AttributeValue;
import org.glite.security.voms.service.attributes.VOMSAttributes;
public class VomsAttributesService implements VOMSAttributes {
private static final Logger log = LoggerFactory
.getLogger(VomsAttributesService.class);
public void createAttributeClass(String name, String description,
boolean unique) throws RemoteException, VOMSException {
log.info("createAttributeClass("
+ StringUtils.join(
new Object[] { name, description, new Boolean(unique) }, ',') + ");");
try {
Validator.validateInputString(name,
"Invalid characters in attribute class name!");
Validator.validateInputString(description,
"Invalid characters in attribute class description!");
CreateAttributeDescriptionOperation.instance(name, description,
new Boolean(unique)).execute();
} catch (RuntimeException e) {
ServiceExceptionHelper.handleServiceException(log, e);
throw e;
}
}
public void createAttributeClass(String name, String description)
throws RemoteException, VOMSException {
log.info("createAttributeClass("
+ StringUtils.join(new Object[] { name, description }, ',') + ");");
try {
Validator.validateInputString(name,
"Invalid characters in attribute class name!");
Validator.validateInputString(description,
"Invalid characters in attribute class description!");
CreateAttributeDescriptionOperation.instance(name, description,
new Boolean(false)).execute();
} catch (RuntimeException e) {
ServiceExceptionHelper.handleServiceException(log, e);
throw e;
}
}
public void createAttributeClass(String name) throws RemoteException,
VOMSException {
log.info("createAttributeClass("
+ StringUtils.join(new Object[] { name }, ',') + ");");
try {
Validator.validateInputString(name,
"Invalid characters in attribute class name!");
CreateAttributeDescriptionOperation.instance(name, null,
new Boolean(false)).execute();
} catch (RuntimeException e) {
ServiceExceptionHelper.handleServiceException(log, e);
throw e;
}
}
public void deleteAttributeClass(String name) throws RemoteException,
VOMSException {
log.info("deleteAttributeClass("
+ StringUtils.join(new Object[] { name }, ',') + ");");
try {
DeleteAttributeDescriptionOperation.instance(name).execute();
} catch (RuntimeException e) {
ServiceExceptionHelper.handleServiceException(log, e);
throw e;
}
}
public void deleteAttributeClass(AttributeClass attributeClass)
throws RemoteException, VOMSException {
log.info("deleteAttributeClass("
+ StringUtils.join(new Object[] { attributeClass }, ',') + ");");
try {
DeleteAttributeDescriptionOperation.instance(attributeClass.getName())
.execute();
} catch (RuntimeException e) {
ServiceExceptionHelper.handleServiceException(log, e);
throw e;
}
}
public void deleteGroupAttribute(String groupName, String attributeName)
throws RemoteException, VOMSException {
log
.info("deleteGroupAttribute("
+ StringUtils.join(new Object[] { groupName, attributeName }, ',')
+ ");");
try {
DeleteGroupAttributeOperation.instance(groupName, attributeName)
.execute();
} catch (RuntimeException e) {
ServiceExceptionHelper.handleServiceException(log, e);
throw e;
}
}
public void deleteGroupAttribute(String groupName, AttributeValue value)
throws RemoteException, VOMSException {
log.info("deleteGroupAttribute("
+ StringUtils.join(new Object[] { groupName, value }, ',') + ");");
try {
DeleteGroupAttributeOperation.instance(groupName,
value.getAttributeClass().getName()).execute();
} catch (RuntimeException e) {
ServiceExceptionHelper.handleServiceException(log, e);
throw e;
}
}
public void deleteRoleAttribute(String groupName, String roleName,
String attributeName) throws RemoteException, VOMSException {
log.info("deleteRoleAttribute("
+ StringUtils.join(new Object[] { groupName, roleName, attributeName },
',') + ");");
try {
if (PathNamingScheme.isRole(roleName))
roleName = PathNamingScheme.getRoleName(roleName);
DeleteRoleAttributeOperation.instance(groupName, roleName, attributeName)
.execute();
} catch (RuntimeException e) {
ServiceExceptionHelper.handleServiceException(log, e);
throw e;
}
}
public void deleteRoleAttribute(String groupName, String roleName,
AttributeValue attributeValue) throws RemoteException, VOMSException {
log.info("deleteRoleAttribute("
+ StringUtils.join(new Object[] { groupName, roleName,
attributeValue.getAttributeClass().getName() }, ',') + ");");
try {
if (PathNamingScheme.isRole(roleName))
roleName = PathNamingScheme.getRoleName(roleName);
DeleteRoleAttributeOperation.instance(groupName, roleName,
attributeValue.getAttributeClass().getName()).execute();
} catch (RuntimeException e) {
ServiceExceptionHelper.handleServiceException(log, e);
throw e;
}
}
public void deleteUserAttribute(User user, String attributeName)
throws RemoteException, VOMSException {
log.info("deleteUserAttribute("
+ StringUtils.join(new Object[] { user, attributeName }, ',') + ");");
try {
DeleteUserAttributeOperation.instance(user, attributeName).execute();
} catch (RuntimeException e) {
ServiceExceptionHelper.handleServiceException(log, e);
throw e;
}
}
public void deleteUserAttribute(User user, AttributeValue attributeValue)
throws RemoteException, VOMSException {
log.info("deleteUserAttribute("
+ StringUtils.join(new Object[] { user, attributeValue }, ',') + ");");
try {
DeleteUserAttributeOperation.instance(user,
attributeValue.getAttributeClass().getName()).execute();
} catch (RuntimeException e) {
ServiceExceptionHelper.handleServiceException(log, e);
throw e;
}
}
public AttributeClass getAttributeClass(String name) throws RemoteException,
VOMSException {
log.info("getAttributeClass("
+ StringUtils.join(new Object[] { name }, ',') + ");");
try {
VOMSAttributeDescription desc = (VOMSAttributeDescription) FindAttributeDescriptionOperation
.instance(name).execute();
return desc.asAttributeClass();
} catch (RuntimeException e) {
ServiceExceptionHelper.handleServiceException(log, e);
throw e;
}
}
public AttributeClass[] listAttributeClasses() throws RemoteException,
VOMSException {
log.info("listAttributeClasses(" + StringUtils.join(new Object[] {}, ',')
+ ");");
try {
List descriptions = (List) ListAttributeDescriptionsOperation.instance()
.execute();
return ServiceUtils.toAttributeClassArray(descriptions);
} catch (RuntimeException e) {
ServiceExceptionHelper.handleServiceException(log, e);
throw e;
}
}
public AttributeValue[] listGroupAttributes(String groupName)
throws RemoteException, VOMSException {
log.info("listGroupAttributes("
+ StringUtils.join(new Object[] { groupName }, ',') + ");");
try {
VOMSGroup g = (VOMSGroup) FindGroupOperation.instance(groupName)
.execute();
if (g == null)
throw new NoSuchGroupException("Group '" + groupName + "' not found!");
Collection attributes = (Collection) ListAttributesForGroupOperation
.instance(g).execute();
return ServiceUtils.toAttributeValueArray(attributes);
} catch (RuntimeException e) {
ServiceExceptionHelper.handleServiceException(log, e);
throw e;
}
}
public AttributeValue[] listRoleAttributes(String groupName, String roleName)
throws RemoteException, VOMSException {
log.info("listRoleAttributes("
+ StringUtils.join(new Object[] { groupName, roleName }, ',') + ");");
try {
if (roleName.startsWith("Role="))
roleName = PathNamingScheme.getRoleName(roleName);
VOMSRole r = (VOMSRole) FindRoleOperation.instance(roleName).execute();
VOMSGroup g = (VOMSGroup) FindGroupOperation.instance(groupName)
.execute();
if (r == null)
throw new NoSuchRoleException("Role '" + roleName + "' not found!");
if (g == null)
throw new NoSuchRoleException("Group '" + groupName + "' not found!");
Collection attributes = (Collection) ListRoleAttributesOperation
.instance(g, r).execute();
return ServiceUtils.toAttributeValueArray(attributes);
} catch (RuntimeException e) {
ServiceExceptionHelper.handleServiceException(log, e);
throw e;
}
}
public AttributeValue[] listUserAttributes(User user) throws RemoteException,
VOMSException {
log.info("listUserAttributes("
+ StringUtils.join(new Object[] { user }, ',') + ");");
try {
VOMSUser u = (VOMSUser) FindUserOperation.instance(user.getDN(),
user.getCA()).execute();
if (u == null)
throw new NoSuchUserException("User '" + user.getDN() + ","
+ user.getCA() + "' not found!");
Collection attributes = (Collection) ListAttributesForUserOperation
.instance(u).execute();
return ServiceUtils.toAttributeValueArray(attributes);
} catch (RuntimeException e) {
ServiceExceptionHelper.handleServiceException(log, e);
throw e;
}
}
public void saveAttributeClass(AttributeClass in0) throws RemoteException,
VOMSException {
log.info("saveAttributeClass("
+ StringUtils.join(new Object[] { in0 }, ',') + ");");
throw new UnimplementedFeatureException("saveAttributeClass(...)");
}
public void setGroupAttribute(String groupName, AttributeValue attributeValue)
throws RemoteException, VOMSException {
log.info("setGroupAttribute("
+ StringUtils.join(new Object[] { groupName, attributeValue }, ',')
+ ");");
try {
Validator.validateInputString(attributeValue.getValue(),
"Invalid characters in attribute value!");
SetGroupAttributeOperation.instance(groupName, attributeValue).execute();
} catch (RuntimeException e) {
ServiceExceptionHelper.handleServiceException(log, e);
throw e;
}
}
public void setRoleAttribute(String groupName, String roleName,
AttributeValue attributeValue) throws RemoteException, VOMSException {
log.info("setRoleAttribute("
+ StringUtils.join(new Object[] { groupName, roleName, attributeValue },
',') + ");");
try {
Validator.validateInputString(attributeValue.getValue(),
"Invalid characters in attribute value!");
if (PathNamingScheme.isRole(roleName))
roleName = PathNamingScheme.getRoleName(roleName);
SetRoleAttributeOperation.instance(groupName, roleName, attributeValue)
.execute();
} catch (RuntimeException e) {
ServiceExceptionHelper.handleServiceException(log, e);
throw e;
}
}
public void setUserAttribute(User user, AttributeValue attributeValue)
throws RemoteException, VOMSException {
log.info("setUserAttribute("
+ StringUtils.join(new Object[] { user, attributeValue }, ',') + ");");
try {
Validator.validateInputString(attributeValue.getValue(),
"Invalid characters in attribute value!");
SetUserAttributeOperation.instance(user, attributeValue).execute();
} catch (RuntimeException e) {
ServiceExceptionHelper.handleServiceException(log, e);
throw e;
}
}
}