org.italiangrid.voms.util.VOMSFQANNamingScheme Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of voms-api-java Show documentation
Show all versions of voms-api-java Show documentation
Java APIs to validate and request VOMS attribute certificates
/**
* Copyright (c) Istituto Nazionale di Fisica Nucleare, 2006-2012.
*
* 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.italiangrid.voms.util;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.italiangrid.voms.VOMSError;
/**
* This class provides utility methods that are used for parsing, matching voms
* FQANs (Fully Qualified Attribute Names).
*
* @author Karoly Lorentey
* @author Andrea Ceccanti
*
*
*/
public class VOMSFQANNamingScheme {
public static final String fqanSyntax = "^(/[\\w.-]+)+|((/[\\w.-]+)+/)?(Role=[\\w.-]+)|(Capability=[\\w\\s.-]+)$";
public static final String groupSyntax = "^(/[\\w.-]+)+$";
public static final String roleSyntax = "^Role=[\\w.-]+$";
public static final String qualifiedRoleSyntax = "^(/[\\w.-]+)+/Role=[\\w.-]+$";
public static final String capabilitySyntax = "^Capability=[\\w\\s.-]+$";
public static final Pattern fqanPattern = Pattern
.compile(fqanSyntax);
public static final Pattern groupPattern = Pattern.compile(groupSyntax);
public static final Pattern rolePattern = Pattern.compile(roleSyntax);
public static final Pattern qualifiedRolePattern = Pattern
.compile(qualifiedRoleSyntax);
public static final Pattern capabilityPattern = Pattern
.compile(capabilitySyntax);
/**
* This methods checks that the string passed as argument complies with the
* voms FQAN syntax.
*
* @param fqan
* the string that must be checked for compatibility with FQAN
* syntax.
* @throws VOMSError
* If there's an error in the FQAN syntax.
*/
public static void checkSyntax(String fqan) {
if (fqan.length() > 255)
throw new VOMSError("fqan.length() > 255");
if (!fqanPattern.matcher(fqan).matches())
throw new VOMSError("Syntax error in fqan: "
+ fqan);
}
/**
*
* This methods checks that the fqan passed as argument complies with the
* syntax used by voms to identify groups.
*
* @param fqan
* the string that has to be checked.
* @throws VOMSError
* If the string passed as argument doens not comply with the
* voms sytax.
*/
public static void checkGroup(String fqan) {
checkSyntax(fqan);
if (!groupPattern.matcher(fqan).matches())
throw new VOMSError("Syntax error in group name: "
+ fqan);
}
/**
* This methods checks that the string passed as argument complies with the
* syntax used by voms to identify roles.
*
*
* @param roleName
* @throws VOMSError
* If the string passed as argument doens not comply with the
* voms sytax.
*/
public static void checkRole(String roleName) {
if (roleName.length() > 255)
throw new VOMSError("roleName.length()>255");
if (!rolePattern.matcher(roleName).matches())
throw new VOMSError("Syntax error in role name: "
+ roleName);
}
/**
* This methods checks that the FQAN passed as argument identifies a voms
* group.
*
* @param groupName
* the string to check.
* @return
* - true, if the string passed as argument identifies a voms
* group.
*
- false, otherwise.
*
*/
public static boolean isGroup(String groupName) {
checkSyntax(groupName);
return groupPattern.matcher(groupName).matches();
}
/**
* This methods checks that the FQAN passed as argument identifies a voms
* role.
*
* @param roleName
* the string to check.
* @return
* - true, if the string passed as argument identifies a voms
* role.
*
- false, otherwise.
*
*/
public static boolean isRole(String roleName) {
checkSyntax(roleName);
return rolePattern.matcher(roleName).matches();
}
/**
* This methods checks that the FQAN passed as argument identifies a
* qualified voms role, i.e., a role defined in the context of a voms group.
*
* @param fqan
* the string to check.
* @return
* - true, if the string passed as argument identifies a qualified
* voms role.
*
- false, otherwise.
*
*/
public static boolean isQualifiedRole(String fqan) {
checkSyntax(fqan);
return qualifiedRolePattern.matcher(fqan).matches();
}
/**
* This method extracts the role name information from the FQAN passed as
* argument.
*
* @param containerName
* the FQAN
* @return
* - A string containing the role name, if found
* - null, if no role information is contained in the FQAN passed
* as argument
*
*/
public static String getRoleName(String containerName) {
if (!isRole(containerName) && !isQualifiedRole(containerName))
throw new VOMSError("No role specified in \""
+ containerName + "\" voms syntax.");
Matcher m = fqanPattern.matcher(containerName);
if (m.matches()) {
String roleGroup = m.group(4);
return roleGroup.substring(roleGroup.indexOf('=') + 1,
roleGroup.length());
}
return null;
}
/**
* This method extracts group name information from the FQAN passed as
* argument.
*
* @param containerName
* the FQAN
* @return
* - A string containing the group name, if found
* - null, if no group information is contained in the FQAN passed
* as argument
*
*/
public static String getGroupName(String containerName) {
checkSyntax(containerName);
// If it's a container and it's not a role or a qualified role, then
// it's a group!
if (!isRole(containerName) && !isQualifiedRole(containerName))
return containerName;
Matcher m = fqanPattern.matcher(containerName);
if (m.matches()) {
String groupName = m.group(2);
if (groupName.endsWith("/"))
return groupName.substring(0, groupName.length() - 1);
else
return groupName;
}
return null;
}
public static String toOldQualifiedRoleSyntax(String qualifiedRole) {
checkSyntax(qualifiedRole);
if (!isQualifiedRole(qualifiedRole))
throw new VOMSError(
"String passed as argument is not a qualified role!");
return getGroupName(qualifiedRole) + ":" + getRoleName(qualifiedRole);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy