|
@@ -27,13 +27,16 @@ import lombok.Builder;
|
|
|
import lombok.Value;
|
|
|
import password.pwm.AppProperty;
|
|
|
import password.pwm.PwmApplication;
|
|
|
+import password.pwm.PwmDomain;
|
|
|
import password.pwm.bean.SessionLabel;
|
|
|
import password.pwm.bean.UserIdentity;
|
|
|
-import password.pwm.config.Configuration;
|
|
|
+import password.pwm.config.AppConfig;
|
|
|
import password.pwm.config.PwmSetting;
|
|
|
import password.pwm.config.SettingUIFunction;
|
|
|
+import password.pwm.config.stored.StoredConfigKey;
|
|
|
import password.pwm.config.stored.StoredConfiguration;
|
|
|
import password.pwm.config.stored.StoredConfigurationModifier;
|
|
|
+import password.pwm.config.stored.StoredConfigurationUtil;
|
|
|
import password.pwm.config.value.StoredValue;
|
|
|
import password.pwm.config.value.ValueTypeConverter;
|
|
|
import password.pwm.config.value.data.UserPermission;
|
|
@@ -46,12 +49,16 @@ import password.pwm.i18n.Display;
|
|
|
import password.pwm.ldap.permission.UserPermissionType;
|
|
|
import password.pwm.ldap.permission.UserPermissionUtility;
|
|
|
import password.pwm.util.i18n.LocaleHelper;
|
|
|
+import password.pwm.util.java.CollectionUtil;
|
|
|
import password.pwm.util.java.TimeDuration;
|
|
|
import password.pwm.util.logging.PwmLogger;
|
|
|
|
|
|
import java.io.Serializable;
|
|
|
import java.time.Instant;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.Collection;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.Iterator;
|
|
|
import java.util.LinkedHashSet;
|
|
|
import java.util.List;
|
|
|
import java.util.Set;
|
|
@@ -64,16 +71,20 @@ public class UserMatchViewerFunction implements SettingUIFunction
|
|
|
public Serializable provideFunction(
|
|
|
final PwmRequest pwmRequest,
|
|
|
final StoredConfigurationModifier storedConfiguration,
|
|
|
- final PwmSetting setting,
|
|
|
- final String profile,
|
|
|
+ final StoredConfigKey key,
|
|
|
final String extraData )
|
|
|
throws Exception
|
|
|
{
|
|
|
- final PwmApplication pwmApplication = pwmRequest.getPwmApplication();
|
|
|
+ final PwmDomain pwmDomain = pwmRequest.getPwmDomain();
|
|
|
|
|
|
final Instant startSearchTime = Instant.now();
|
|
|
- final int maxResultSize = Integer.parseInt( pwmApplication.getConfig().readAppProperty( AppProperty.CONFIG_EDITOR_USER_PERMISSION_MATCH_LIMIT ) );
|
|
|
- final Collection<UserIdentity> users = discoverMatchingUsers( pwmApplication, maxResultSize, storedConfiguration.newStoredConfiguration(), setting, profile );
|
|
|
+ final int maxResultSize = Integer.parseInt( pwmDomain.getConfig().readAppProperty( AppProperty.CONFIG_EDITOR_USER_PERMISSION_MATCH_LIMIT ) );
|
|
|
+ final Collection<UserIdentity> users = discoverMatchingUsers(
|
|
|
+ pwmRequest.getLabel(),
|
|
|
+ pwmDomain,
|
|
|
+ maxResultSize,
|
|
|
+ storedConfiguration.newStoredConfiguration(),
|
|
|
+ key );
|
|
|
final TimeDuration searchDuration = TimeDuration.fromCurrent( startSearchTime );
|
|
|
|
|
|
final String message = LocaleHelper.getLocalizedMessage(
|
|
@@ -91,28 +102,34 @@ public class UserMatchViewerFunction implements SettingUIFunction
|
|
|
}
|
|
|
|
|
|
public List<UserIdentity> discoverMatchingUsers(
|
|
|
- final PwmApplication pwmApplication,
|
|
|
+ final SessionLabel sessionLabel,
|
|
|
+ final PwmDomain pwmDomain,
|
|
|
final int maxResultSize,
|
|
|
final StoredConfiguration storedConfiguration,
|
|
|
- final PwmSetting setting,
|
|
|
- final String profile
|
|
|
+ final StoredConfigKey key
|
|
|
)
|
|
|
throws Exception
|
|
|
{
|
|
|
- final Configuration config = new Configuration( storedConfiguration );
|
|
|
- final PwmApplication tempApplication = PwmApplication.createPwmApplication( pwmApplication.getPwmEnvironment().makeRuntimeInstance( config ) );
|
|
|
- final StoredValue storedValue = storedConfiguration.readSetting( setting, profile );
|
|
|
+ final AppConfig config = new AppConfig( storedConfiguration );
|
|
|
+ final PwmApplication tempApplication = PwmApplication.createPwmApplication( pwmDomain.getPwmApplication().getPwmEnvironment().makeRuntimeInstance( config ) );
|
|
|
+ final StoredValue storedValue = StoredConfigurationUtil.getValueOrDefault( storedConfiguration, key );
|
|
|
final List<UserPermission> permissions = ValueTypeConverter.valueToUserPermissions( storedValue );
|
|
|
+ final PwmDomain tempDomain = tempApplication.domains().get( key.getDomainID() );
|
|
|
|
|
|
- validateUserPermissionLdapValues( tempApplication, permissions );
|
|
|
+ validateUserPermissionLdapValues( sessionLabel, tempDomain, permissions );
|
|
|
|
|
|
- final long maxSearchSeconds = config.getLdapProfiles().getOrDefault( profile, config.getDefaultLdapProfile() ).readSettingAsLong( PwmSetting.LDAP_SEARCH_TIMEOUT );
|
|
|
+ final long maxSearchSeconds = pwmDomain.getConfig().getDefaultLdapProfile().readSettingAsLong( PwmSetting.LDAP_SEARCH_TIMEOUT );
|
|
|
final TimeDuration maxSearchTime = TimeDuration.of( maxSearchSeconds, TimeDuration.Unit.SECONDS );
|
|
|
- return UserPermissionUtility.discoverMatchingUsers( tempApplication, permissions, SessionLabel.SYSTEM_LABEL, maxResultSize, maxSearchTime );
|
|
|
+ final Iterator<UserIdentity> matches = UserPermissionUtility.discoverMatchingUsers( tempDomain, permissions, SessionLabel.SYSTEM_LABEL, maxResultSize, maxSearchTime );
|
|
|
+ final List<UserIdentity> sortedResults = new ArrayList<>( CollectionUtil.iteratorToList( matches ) );
|
|
|
+ Collections.sort( sortedResults );
|
|
|
+ return Collections.unmodifiableList ( sortedResults );
|
|
|
+
|
|
|
}
|
|
|
|
|
|
private static void validateUserPermissionLdapValues(
|
|
|
- final PwmApplication pwmApplication,
|
|
|
+ final SessionLabel sessionLabel,
|
|
|
+ final PwmDomain pwmDomain,
|
|
|
final List<UserPermission> permissions
|
|
|
)
|
|
|
throws PwmUnrecoverableException, PwmOperationalException
|
|
@@ -123,25 +140,30 @@ public class UserMatchViewerFunction implements SettingUIFunction
|
|
|
{
|
|
|
if ( userPermission.getLdapBase() != null && !userPermission.getLdapBase().isEmpty() )
|
|
|
{
|
|
|
- testIfLdapDNIsValid( pwmApplication, userPermission.getLdapBase(), userPermission.getLdapProfileID() );
|
|
|
+ testIfLdapDNIsValid( sessionLabel, pwmDomain, userPermission.getLdapBase(), userPermission.getLdapProfileID() );
|
|
|
}
|
|
|
}
|
|
|
else if ( userPermission.getType() == UserPermissionType.ldapGroup )
|
|
|
{
|
|
|
- testIfLdapDNIsValid( pwmApplication, userPermission.getLdapBase(), userPermission.getLdapProfileID() );
|
|
|
+ testIfLdapDNIsValid( sessionLabel, pwmDomain, userPermission.getLdapBase(), userPermission.getLdapProfileID() );
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
- private static void testIfLdapDNIsValid( final PwmApplication pwmApplication, final String baseDN, final String profileID )
|
|
|
+ private static void testIfLdapDNIsValid(
|
|
|
+ final SessionLabel sessionLabel,
|
|
|
+ final PwmDomain pwmDomain,
|
|
|
+ final String baseDN,
|
|
|
+ final String profileID
|
|
|
+ )
|
|
|
throws PwmOperationalException, PwmUnrecoverableException
|
|
|
{
|
|
|
final Set<String> profileIDsToTest = new LinkedHashSet<>();
|
|
|
|
|
|
if ( UserPermissionUtility.isAllProfiles( profileID ) )
|
|
|
{
|
|
|
- profileIDsToTest.addAll( pwmApplication.getConfig().getLdapProfiles().keySet() );
|
|
|
+ profileIDsToTest.addAll( pwmDomain.getConfig().getLdapProfiles().keySet() );
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -158,7 +180,7 @@ public class UserMatchViewerFunction implements SettingUIFunction
|
|
|
ChaiEntry chaiEntry = null;
|
|
|
try
|
|
|
{
|
|
|
- final ChaiProvider proxiedProvider = pwmApplication.getProxyChaiProvider( loopID );
|
|
|
+ final ChaiProvider proxiedProvider = pwmDomain.getProxyChaiProvider( sessionLabel, loopID );
|
|
|
chaiEntry = proxiedProvider.getEntryFactory().newChaiEntry( baseDN );
|
|
|
}
|
|
|
catch ( final Exception e )
|