@Override public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException { DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit(); KeycloakAdapterConfigService config = KeycloakAdapterConfigService.INSTANCE; String deploymentName = deploymentUnit.getName(); if (!config.isKeycloakServerDeployment(deploymentName)) { return; } final EEModuleDescription description = deploymentUnit.getAttachment(org.jboss.as.ee.component.Attachments.EE_MODULE_DESCRIPTION); String webContext = config.getWebContext(); if (webContext == null) { throw new DeploymentUnitProcessingException("Can't determine web context/module for Keycloak Server"); } description.setModuleName(webContext); addInfinispanCaches(phaseContext); }
private void massageProviderProps(ModelNode provider) { if (!provider.hasDefined("properties")) return; ModelNode providerProps = provider.remove("properties"); for (Property prop : providerProps.asPropertyList()) { ModelNode value = prop.getValue(); if (isArray(value.asString().trim())) { provider.get(prop.getName()).set(ModelNode.fromString(value.asString()).asList()); } else { provider.get(prop.getName()).set(value); } } }
ModelNode getConfig() { ModelNode copy = fullConfig.clone(); //System.out.println("******** BEFORE *************"); //System.out.println(copy); //System.out.println("*****************************"); copy.remove("web-context"); massageScheduledTaskInterval(copy); massageMasterRealm(copy); massageTheme(copy); massageSpis(copy); //System.out.println("******** JSON *************"); //System.out.println(copy.resolve().toJSONString(false)); //System.out.println("**********************"); return copy; }
@Override protected void performRemove(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException { String deploymentName = ServerUtil.getDeploymentName(operation); KeycloakAdapterConfigService.INSTANCE.setWebContext(null); if (requiresRuntime(context)) { // don't do this on a domain controller addStepToRemoveServerWar(context, deploymentName); } super.performRemove(context, operation, model); }
KeycloakAdapterConfigService.INSTANCE.setWebContext(webContext); KeycloakAdapterConfigService.INSTANCE.updateConfig(operation, model);
@Override public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException { DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit(); KeycloakAdapterConfigService config = KeycloakAdapterConfigService.INSTANCE; String deploymentName = deploymentUnit.getName(); if (config.isKeycloakServerDeployment(deploymentName)) { return; } KeycloakDeploymentInfo info = KeycloakProviderDependencyProcessor.getKeycloakProviderDeploymentInfo(deploymentUnit); if (info.isProvider()) { logger.infov("Deploying Keycloak provider: {0}", deploymentUnit.getName()); final Module module = deploymentUnit.getAttachment(Attachments.MODULE); ProviderManager pm = new ProviderManager(info, module.getClassLoader()); ProviderManagerRegistry.SINGLETON.deploy(pm); deploymentUnit.putAttachment(ATTACHMENT_KEY, pm); } }
private void massageProviders(ModelNode spi) { if (!spi.hasDefined("provider")) return; ModelNode providers = spi.remove("provider"); for (Property prop : providers.asPropertyList()) { ModelNode provider = prop.getValue(); if (provider.has("properties")) { massageProviderProps(provider); } spi.get(prop.getName()).set(provider); } }
private void massageSpis(ModelNode copy) { if (!copy.hasDefined("spi")) return; ModelNode spis = copy.remove("spi"); for (Property prop : spis.asPropertyList()) { ModelNode spi = prop.getValue(); if (spi.has("provider")) { massageProviders(spi); } if (spi.has("default-provider")) { ModelNode defaultProvider = spi.remove("default-provider"); spi.get("provider").set(defaultProvider); } copy.get(prop.getName()).set(spi); } }
private void addConfiguration(DeploymentUnit deploymentUnit, KeycloakAdapterConfigService configService) throws DeploymentUnitProcessingException { WarMetaData warMetaData = deploymentUnit.getAttachment(WarMetaData.ATTACHMENT_KEY); if (warMetaData == null) { throw new DeploymentUnitProcessingException("WarMetaData not found for KeycloakServer."); } JBossWebMetaData webMetaData = warMetaData.getMergedJBossWebMetaData(); if (webMetaData == null) { webMetaData = new JBossWebMetaData(); warMetaData.setMergedJBossWebMetaData(webMetaData); } List<ParamValueMetaData> contextParams = webMetaData.getContextParams(); if (contextParams == null) { contextParams = new ArrayList<>(); } ParamValueMetaData param = new ParamValueMetaData(); param.setParamName(KEYCLOAK_CONFIG_PARAM_NAME); param.setParamValue(configService.getConfig().toString()); contextParams.add(param); // Prefer ResteasyJackson2Provider over JsonBindingProvider param = new ParamValueMetaData(); param.setParamName("resteasy.preferJacksonOverJsonB"); // Corresponds to ResteasyContextParameters.RESTEASY_PREFER_JACKSON_OVER_JSONB param.setParamValue(Boolean.TRUE.toString()); contextParams.add(param); webMetaData.setContextParams(contextParams); }
@Override protected void finishModelStage(OperationContext context, ModelNode operation, String attributeName, ModelNode newValue, ModelNode oldValue, Resource model) throws OperationFailedException { if (!context.isNormalServer() || attribNotChanging(attributeName, newValue, oldValue)) { super.finishModelStage(context, operation, attributeName, newValue, oldValue, model); return; } String deploymentName = ServerUtil.getDeploymentName(operation); if (attributeName.equals(KeycloakSubsystemDefinition.WEB_CONTEXT.getName())) { KeycloakAdapterConfigService.INSTANCE.setWebContext(newValue.asString()); ServerUtil.addStepToRedeployServerWar(context, deploymentName); } super.finishModelStage(context, operation, attributeName, newValue, oldValue, model); }
@Override public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException { DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit(); KeycloakAdapterConfigService config = KeycloakAdapterConfigService.INSTANCE; String deploymentName = deploymentUnit.getName(); if (config.isKeycloakServerDeployment(deploymentName)) { return; } KeycloakDeploymentInfo info = getKeycloakProviderDeploymentInfo(deploymentUnit); if (info.hasServices()) { final ModuleSpecification moduleSpecification = deploymentUnit.getAttachment(Attachments.MODULE_SPECIFICATION); final ModuleLoader moduleLoader = Module.getBootModuleLoader(); moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_COMMON, false, false, false, false)); moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_CORE, false, false, false, false)); moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_SERVER_SPI, false, false, false, false)); moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_SERVER_SPI_PRIVATE, false, false, false, false)); moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, JAXRS, false, false, false, false)); moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, RESTEASY, false, false, false, false)); moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, APACHE, false, false, false, false)); moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_JPA, false, false, false, false)); } }
@Override public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException { DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit(); KeycloakAdapterConfigService configService = KeycloakAdapterConfigService.INSTANCE; String deploymentName = deploymentUnit.getName(); if (!configService.isKeycloakServerDeployment(deploymentName)) { return; } final EEModuleDescription description = deploymentUnit.getAttachment(org.jboss.as.ee.component.Attachments.EE_MODULE_DESCRIPTION); String webContext = configService.getWebContext(); if (webContext == null) { throw new DeploymentUnitProcessingException("Can't determine web context/module for Keycloak Server"); } description.setModuleName(webContext); addInfinispanCaches(phaseContext); addConfiguration(deploymentUnit, configService); }
@Override protected void performRemove(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException { String deploymentName = ServerUtil.getDeploymentName(operation); KeycloakAdapterConfigService.INSTANCE.setWebContext(null); if (requiresRuntime(context)) { // don't do this on a domain controller addStepToRemoveServerWar(context, deploymentName); } super.performRemove(context, operation, model); }
@Override protected void finishModelStage(OperationContext context, ModelNode operation, String attributeName, ModelNode newValue, ModelNode oldValue, Resource model) throws OperationFailedException { if (!context.isNormalServer() || attribNotChanging(attributeName, newValue, oldValue)) { super.finishModelStage(context, operation, attributeName, newValue, oldValue, model); return; } String deploymentName = ServerUtil.getDeploymentName(operation); if (attributeName.equals(KeycloakSubsystemDefinition.WEB_CONTEXT.getName())) { KeycloakAdapterConfigService.INSTANCE.setWebContext(newValue.asString()); ServerUtil.addStepToRedeployServerWar(context, deploymentName); } super.finishModelStage(context, operation, attributeName, newValue, oldValue, model); }
protected void populateModel(final OperationContext context, final ModelNode operation, final Resource resource) throws OperationFailedException { ModelNode model = resource.getModel(); // set attribute values from parsed model for (AttributeDefinition attrDef : ALL_ATTRIBUTES) { attrDef.validateAndSet(operation, model); } // returns early if on domain controller if (!requiresRuntime(context)) { return; } // don't want to try to start server on host controller if (!context.isNormalServer()) { return; } ModelNode webContextNode = resource.getModel().get(WEB_CONTEXT.getName()); if (!webContextNode.isDefined()) { webContextNode = WEB_CONTEXT.getDefaultValue(); } String webContext = webContextNode.asString(); ServerUtil serverUtil = new ServerUtil(operation); serverUtil.addStepToUploadServerWar(context); KeycloakAdapterConfigService.INSTANCE.setWebContext(webContext); } }