KEYCLOAK-886 User Federation Mappers - admin console
This commit is contained in:
1 parent
269f9fe860
commit
dfe232cf80
24 files changed
+996
-162
No files matched your search
@@ -0,0 +1,15 @@
|
||||
package org.keycloak.mappers;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
||||
*/
|
||||
public class MapperConfigValidationException extends Exception {
|
||||
|
||||
public MapperConfigValidationException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public MapperConfigValidationException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,36 @@
|
||||
package org.keycloak.mappers;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.keycloak.models.RealmModel;
|
||||
import org.keycloak.models.UserFederationMapperModel;
|
||||
import org.keycloak.provider.ConfiguredProvider;
|
||||
import org.keycloak.provider.ProviderConfigProperty;
|
||||
import org.keycloak.provider.ProviderFactory;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
||||
*/
|
||||
public interface UserFederationMapperFactory extends ProviderFactory<UserFederationMapper>, ConfiguredProvider {
|
||||
|
||||
/**
|
||||
* Refers to providerName (type) of the federation provider, which this mapper can be used for. For example "ldap" or "kerberos"
|
||||
*
|
||||
* @return providerName
|
||||
*/
|
||||
String getFederationProviderType();
|
||||
|
||||
String getDisplayCategory();
|
||||
String getDisplayType();
|
||||
|
||||
/**
|
||||
* Called when instance of mapperModel is created for this factory through admin endpoint
|
||||
*
|
||||
* @param mapperModel
|
||||
* @throws MapperConfigValidationException if configuration provided in mapperModel is not valid
|
||||
*/
|
||||
void validateConfig(UserFederationMapperModel mapperModel) throws MapperConfigValidationException;
|
||||
|
||||
// TODO: Remove this and add realm to the method on ConfiguredProvider?
|
||||
List<ProviderConfigProperty> getConfigProperties(RealmModel realm);
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.keycloak.models.utils;
|
||||
|
||||
import org.bouncycastle.openssl.PEMWriter;
|
||||
import org.keycloak.constants.KerberosConstants;
|
||||
import org.keycloak.models.ClientModel;
|
||||
import org.keycloak.models.KeycloakSession;
|
||||
import org.keycloak.models.KeycloakSessionFactory;
|
||||
@@ -8,6 +9,7 @@ import org.keycloak.models.KeycloakSessionTask;
|
||||
import org.keycloak.models.KeycloakTransaction;
|
||||
import org.keycloak.models.ModelDuplicateException;
|
||||
import org.keycloak.models.RealmModel;
|
||||
import org.keycloak.models.RequiredCredentialModel;
|
||||
import org.keycloak.models.RoleModel;
|
||||
import org.keycloak.models.UserCredentialModel;
|
||||
import org.keycloak.models.UserFederationMapperModel;
|
||||
@@ -349,4 +351,31 @@ public final class KeycloakModelUtils {
|
||||
|
||||
return mapperModel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Automatically add "kerberos" to required realm credentials if it's supported by saved provider
|
||||
*
|
||||
* @param realm
|
||||
* @param model
|
||||
* @return true if kerberos credentials were added
|
||||
*/
|
||||
public static boolean checkKerberosCredential(RealmModel realm, UserFederationProviderModel model) {
|
||||
String allowKerberosCfg = model.getConfig().get(KerberosConstants.ALLOW_KERBEROS_AUTHENTICATION);
|
||||
if (Boolean.valueOf(allowKerberosCfg)) {
|
||||
boolean found = false;
|
||||
List<RequiredCredentialModel> currentCreds = realm.getRequiredCredentials();
|
||||
for (RequiredCredentialModel cred : currentCreds) {
|
||||
if (cred.getType().equals(UserCredentialModel.KERBEROS)) {
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
realm.addRequiredCredential(UserCredentialModel.KERBEROS);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user