/* * oxAuth is available under the MIT License (2008). See http://opensource.org/licenses/MIT for full text. * * Copyright (c) 2014, Gluu */ package org.xdi.oxauth.service.external; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.ejb.DependsOn; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import javax.inject.Named; import org.xdi.model.SimpleCustomProperty; import org.xdi.model.custom.script.CustomScriptType; import org.xdi.model.custom.script.conf.CustomScriptConfiguration; import org.xdi.model.custom.script.type.uma.AuthorizationPolicyType; import org.xdi.oxauth.service.uma.authorization.AuthorizationContext; import org.xdi.service.LookupService; import org.xdi.service.custom.script.ExternalScriptService; import org.xdi.util.StringHelper; /** * Provides factory methods needed to create external UMA authorization policies extension * * @author Yuriy Movchan Date: 01/14/2015 */ @ApplicationScoped @DependsOn("appInitializer") @Named public class ExternalUmaAuthorizationPolicyService extends ExternalScriptService { private static final long serialVersionUID = -8609727759114795432L; @Inject private LookupService lookupService; protected Map<String, CustomScriptConfiguration> customScriptConfigurationsInumMap; public ExternalUmaAuthorizationPolicyService() { super(CustomScriptType.UMA_AUTHORIZATION_POLICY); } @Override protected void reloadExternal() { this.customScriptConfigurationsInumMap = buildExternalConfigurationsInumMap(this.customScriptConfigurations); } private Map<String, CustomScriptConfiguration> buildExternalConfigurationsInumMap(List<CustomScriptConfiguration> customScriptConfigurations) { Map<String, CustomScriptConfiguration> reloadedExternalConfigurations = new HashMap<String, CustomScriptConfiguration>(customScriptConfigurations.size()); for (CustomScriptConfiguration customScriptConfiguration : customScriptConfigurations) { reloadedExternalConfigurations.put(customScriptConfiguration.getInum(), customScriptConfiguration); } return reloadedExternalConfigurations; } public CustomScriptConfiguration getAuthorizationPolicyByDn(String authorizationPolicyDn) { String authorizationPolicyInum = lookupService.getInumFromDn(authorizationPolicyDn); return getCustomScriptConfigurationByInum(authorizationPolicyInum); } public CustomScriptConfiguration getCustomScriptConfigurationByInum(String inum) { if (StringHelper.isEmpty(inum)) { return null; } return this.customScriptConfigurationsInumMap.get(inum); } public boolean executeExternalAuthorizeMethod(CustomScriptConfiguration customScriptConfiguration, AuthorizationContext authorizationContext) { try { log.debug("Executing python 'authorize' method"); AuthorizationPolicyType externalType = (AuthorizationPolicyType) customScriptConfiguration.getExternalType(); Map<String, SimpleCustomProperty> configurationAttributes = customScriptConfiguration.getConfigurationAttributes(); return externalType.authorize(authorizationContext, configurationAttributes); } catch (Exception ex) { log.error(ex.getMessage(), ex); } return false; } }