com.facebook.presto.tests.ImmutableLdapObjectDefinitions Maven / Gradle / Ivy
/*
* 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.facebook.presto.tests;
import com.google.common.collect.ImmutableMap;
import io.prestodb.tempto.fulfillment.ldap.LdapObjectDefinition;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import static java.lang.String.format;
public final class ImmutableLdapObjectDefinitions
{
private static final String DOMAIN = "dc=presto,dc=testldap,dc=com";
private static final String AMERICA_DISTINGUISHED_NAME = format("ou=America,%s", DOMAIN);
private static final String ASIA_DISTINGUISHED_NAME = format("ou=Asia,%s", DOMAIN);
private static final String LDAP_PASSWORD = "LDAPPass123";
private static final String MEMBER_OF = "memberOf";
private static final String MEMBER = "member";
private ImmutableLdapObjectDefinitions()
{}
public static final LdapObjectDefinition AMERICA_ORG = buildLdapOrganizationObject("America", AMERICA_DISTINGUISHED_NAME, "America");
public static final LdapObjectDefinition ASIA_ORG = buildLdapOrganizationObject("Asia", ASIA_DISTINGUISHED_NAME, "Asia");
public static final LdapObjectDefinition DEFAULT_GROUP = buildLdapGroupObject("DefaultGroup", "DefaultGroupUser", Optional.of(Arrays.asList("ChildGroup")));
public static final LdapObjectDefinition PARENT_GROUP = buildLdapGroupObject("ParentGroup", "ParentGroupUser", Optional.of(Arrays.asList("DefaultGroup")));
public static final LdapObjectDefinition CHILD_GROUP = buildLdapGroupObject("ChildGroup", "ChildGroupUser", Optional.empty());
public static final LdapObjectDefinition DEFAULT_GROUP_USER = buildLdapUserObject("DefaultGroupUser", Optional.of(Arrays.asList("DefaultGroup")), LDAP_PASSWORD);
public static final LdapObjectDefinition PARENT_GROUP_USER = buildLdapUserObject("ParentGroupUser", Optional.of(Arrays.asList("ParentGroup")), LDAP_PASSWORD);
public static final LdapObjectDefinition CHILD_GROUP_USER = buildLdapUserObject("ChildGroupUser", Optional.of(Arrays.asList("ChildGroup")), LDAP_PASSWORD);
public static final LdapObjectDefinition ORPHAN_USER = buildLdapUserObject("OrphanUser", Optional.empty(), LDAP_PASSWORD);
public static final LdapObjectDefinition SPECIAL_USER = buildLdapUserObject("User WithSpecialPwd", Optional.of(Arrays.asList("DefaultGroup")), "LDAP:Pass ~!@#$%^&*()_+{}|:\"<>?/.,';\\][=-`");
public static final LdapObjectDefinition USER_IN_MULTIPLE_GROUPS = buildLdapUserObject("UserInMultipleGroups", Optional.of(Arrays.asList("DefaultGroup", "ParentGroup")), LDAP_PASSWORD);
private static LdapObjectDefinition buildLdapOrganizationObject(String id, String distinguishedName, String unit)
{
return LdapObjectDefinition.builder(id)
.setDistinguishedName(distinguishedName)
.setAttributes(ImmutableMap.of("ou", unit))
.setObjectClasses(Arrays.asList("top", "organizationalUnit"))
.build();
}
private static LdapObjectDefinition buildLdapGroupObject(String groupName, String userName, Optional> childGroupNames)
{
if (childGroupNames.isPresent()) {
return buildLdapGroupObject(groupName, AMERICA_DISTINGUISHED_NAME, userName, ASIA_DISTINGUISHED_NAME, childGroupNames, Optional.of(AMERICA_DISTINGUISHED_NAME));
}
else {
return buildLdapGroupObject(groupName, AMERICA_DISTINGUISHED_NAME, userName, ASIA_DISTINGUISHED_NAME,
Optional.empty(), Optional.empty());
}
}
private static LdapObjectDefinition buildLdapGroupObject(String groupName, String groupOrganizationName,
String userName, String userOrganizationName, Optional> childGroupNames, Optional childGroupOrganizationName)
{
if (childGroupNames.isPresent() && childGroupOrganizationName.isPresent()) {
return LdapObjectDefinition.builder(groupName)
.setDistinguishedName(format("cn=%s,%s", groupName, groupOrganizationName))
.setAttributes(ImmutableMap.of(
"cn", groupName,
"member", format("uid=%s,%s", userName, userOrganizationName)))
.setModificationAttributes(getAttributes(childGroupNames.get(), childGroupOrganizationName.get(), MEMBER))
.setObjectClasses(Arrays.asList("groupOfNames"))
.build();
}
else {
return LdapObjectDefinition.builder(groupName)
.setDistinguishedName(format("cn=%s,%s", groupName, groupOrganizationName))
.setAttributes(ImmutableMap.of(
"cn", groupName,
"member", format("uid=%s,%s", userName, userOrganizationName)))
.setObjectClasses(Arrays.asList("groupOfNames"))
.build();
}
}
private static LdapObjectDefinition buildLdapUserObject(String userName, Optional> groupNames, String password)
{
if (groupNames.isPresent()) {
return buildLdapUserObject(userName, ASIA_DISTINGUISHED_NAME,
groupNames, Optional.of(AMERICA_DISTINGUISHED_NAME), password);
}
else {
return buildLdapUserObject(userName, ASIA_DISTINGUISHED_NAME,
Optional.empty(), Optional.empty(), password);
}
}
private static LdapObjectDefinition buildLdapUserObject(String userName, String userOrganizationName,
Optional> groupNames, Optional groupOrganizationName, String password)
{
if (groupNames.isPresent() && groupOrganizationName.isPresent()) {
return LdapObjectDefinition.builder(userName)
.setDistinguishedName(format("uid=%s,%s", userName, userOrganizationName))
.setAttributes(ImmutableMap.of(
"cn", userName,
"sn", userName,
"userPassword", password))
.setObjectClasses(Arrays.asList("person", "inetOrgPerson"))
.setModificationAttributes(getAttributes(groupNames.get(), groupOrganizationName.get(), MEMBER_OF))
.build();
}
else {
return LdapObjectDefinition.builder(userName)
.setDistinguishedName(format("uid=%s,%s", userName, userOrganizationName))
.setAttributes(ImmutableMap.of(
"cn", userName,
"sn", userName,
"userPassword", password))
.setObjectClasses(Arrays.asList("person", "inetOrgPerson"))
.build();
}
}
private static ImmutableMap> getAttributes(List groupNames, String groupOrganizationName, String relation)
{
return ImmutableMap.of(relation, groupNames.stream()
.map(groupName -> format("cn=%s,%s", groupName, groupOrganizationName))
.collect(Collectors.toList()));
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy