void launchServices( final OperationContext context, final PathAddress pathAddress, final ModelNode model, final ServiceVerificationHandler verificationHandler, final List<ServiceController<?>> newControllers) throws OperationFailedException { Handler newHandler = new Handler(); newHandler.setClazz( HandlerResourceDefinition.CLASS.resolveModelAttribute(context, model).asString()); ModelNode handler = Resource.Tools.readModel(context.readResourceFromRoot(pathAddress)); if (handler.hasDefined(COMMON_HANDLER_PARAMETER.getName())) { for (ModelNode handlerParameter : handler.get(COMMON_HANDLER_PARAMETER.getName()).asList()) { Property property = handlerParameter.asProperty(); String paramName = property.getName(); String paramValue = HandlerParameterResourceDefinition.VALUE .resolveModelAttribute(context, property.getValue()) .asString(); KeyValueType kv = new KeyValueType(); kv.setKey(paramName); kv.setValue(paramValue); newHandler.add(kv); } } SAMLHandlerService service = new SAMLHandlerService(newHandler); PathElement providerAlias = pathAddress.subAddress(0, pathAddress.size() - 1).getLastElement(); ServiceTarget serviceTarget = context.getServiceTarget(); ServiceBuilder<SAMLHandlerService> serviceBuilder = serviceTarget.addService( createServiceName(providerAlias.getValue(), newHandler.getClazz()), service); ServiceName serviceName; if (providerAlias.getKey().equals(IDENTITY_PROVIDER.getName())) { serviceName = IdentityProviderService.createServiceName(providerAlias.getValue()); } else { serviceName = ServiceProviderService.createServiceName(providerAlias.getValue()); } serviceBuilder.addDependency( serviceName, EntityProviderService.class, service.getEntityProviderService()); ServiceController<SAMLHandlerService> controller = serviceBuilder .addListener(verificationHandler) .setInitialMode(ServiceController.Mode.PASSIVE) .install(); if (newControllers != null) { newControllers.add(controller); } }
static void launchServices( final OperationContext context, final PathAddress pathAddress, final ModelNode model, final ServiceVerificationHandler verificationHandler, final List<ServiceController<?>> newControllers) throws OperationFailedException { Handler newHandler = new Handler(); ModelNode classNameNode = HandlerResourceDefinition.CLASS.resolveModelAttribute(context, model); ModelNode codeNode = HandlerResourceDefinition.CODE.resolveModelAttribute(context, model); String typeName; if (classNameNode.isDefined()) { typeName = classNameNode.asString(); } else if (codeNode.isDefined()) { typeName = HandlerTypeEnum.forType(codeNode.asString()); } else { throw PicketLinkLogger.ROOT_LOGGER.federationHandlerTypeNotProvided(); } newHandler.setClazz(typeName); ModelNode handler = Resource.Tools.readModel(context.readResourceFromRoot(pathAddress)); if (handler.hasDefined(COMMON_HANDLER_PARAMETER.getName())) { for (Property handlerParameter : handler.get(COMMON_HANDLER_PARAMETER.getName()).asPropertyList()) { String paramName = handlerParameter.getName(); String paramValue = HandlerParameterResourceDefinition.VALUE .resolveModelAttribute(context, handlerParameter.getValue()) .asString(); KeyValueType kv = new KeyValueType(); kv.setKey(paramName); kv.setValue(paramValue); newHandler.add(kv); } } SAMLHandlerService service = new SAMLHandlerService(newHandler); PathElement providerAlias = pathAddress.subAddress(0, pathAddress.size() - 1).getLastElement(); ServiceTarget serviceTarget = context.getServiceTarget(); ServiceBuilder<SAMLHandlerService> serviceBuilder = serviceTarget.addService( createServiceName(providerAlias.getValue(), newHandler.getClazz()), service); ServiceName serviceName; if (providerAlias.getKey().equals(IDENTITY_PROVIDER.getName())) { serviceName = IdentityProviderService.createServiceName(providerAlias.getValue()); } else { serviceName = ServiceProviderService.createServiceName(providerAlias.getValue()); } serviceBuilder.addDependency( serviceName, EntityProviderService.class, service.getEntityProviderService()); if (verificationHandler != null) { serviceBuilder.addListener(verificationHandler); } ServiceController<SAMLHandlerService> controller = serviceBuilder.setInitialMode(ServiceController.Mode.PASSIVE).install(); if (newControllers != null) { newControllers.add(controller); } if (!context.isBooting()) { // a reload is required to get the chain properly updated with the domain model state. context.reloadRequired(); } }
/** * Parses the {@code ClaimsProcessors} section of the STS configuration file. * * @param xmlEventReader the reader used to parse the XML configuration file. * @return a {@code ClaimsProcessorsType} instance that contains the parsed data. * @throws ParsingException if an error occurs while parsing the XML file. */ private ClaimsProcessorsType parseClaimsProcessors(XMLEventReader xmlEventReader) throws ParsingException { StartElement startElement = StaxParserUtil.getNextStartElement(xmlEventReader); StaxParserUtil.validate(startElement, CLAIMS_PROCESSORS_ELEMENT); ClaimsProcessorsType claimsProcessors = new ClaimsProcessorsType(); // parse all claims processors one by one. while (xmlEventReader.hasNext()) { XMLEvent xmlEvent = StaxParserUtil.peek(xmlEventReader); if (xmlEvent == null) break; if (xmlEvent instanceof EndElement) { EndElement endElement = (EndElement) StaxParserUtil.getNextEvent(xmlEventReader); String endElementName = StaxParserUtil.getEndElementName(endElement); if (endElementName.equals(CLAIMS_PROCESSORS_ELEMENT)) break; else throw logger.parserUnknownEndElement(endElementName); } StartElement subEvent = StaxParserUtil.peekNextStartElement(xmlEventReader); if (subEvent == null) break; String elementName = StaxParserUtil.getStartElementName(subEvent); if (CLAIMS_PROCESSOR_ELEMENT.equalsIgnoreCase(elementName)) { subEvent = StaxParserUtil.getNextStartElement(xmlEventReader); StaxParserUtil.validate(subEvent, CLAIMS_PROCESSOR_ELEMENT); ClaimsProcessorType claimsProcessor = new ClaimsProcessorType(); // parse the processor attributes (class and dialect). QName attributeQName = new QName("", PROCESSOR_CLASS_ATTRIB); Attribute attribute = subEvent.getAttributeByName(attributeQName); if (attribute != null) claimsProcessor.setProcessorClass(StaxParserUtil.getAttributeValue(attribute)); attributeQName = new QName("", DIALECT_ATTRIB); attribute = subEvent.getAttributeByName(attributeQName); if (attribute != null) claimsProcessor.setDialect(StaxParserUtil.getAttributeValue(attribute)); // parse the processor properties. while (xmlEventReader.hasNext()) { xmlEvent = StaxParserUtil.peek(xmlEventReader); if (xmlEvent == null) break; if (xmlEvent instanceof EndElement) { EndElement endElement = (EndElement) StaxParserUtil.getNextEvent(xmlEventReader); String endElementName = StaxParserUtil.getEndElementName(endElement); if (endElementName.equals(CLAIMS_PROCESSOR_ELEMENT)) break; else throw logger.parserUnknownEndElement(endElementName); } subEvent = StaxParserUtil.peekNextStartElement(xmlEventReader); if (subEvent == null) break; elementName = StaxParserUtil.getStartElementName(subEvent); if (PROPERTY_ELEMENT.equalsIgnoreCase(elementName)) { // parse the property key and value. subEvent = StaxParserUtil.getNextStartElement(xmlEventReader); KeyValueType keyValue = new KeyValueType(); // parse the key and value attributes. attributeQName = new QName("", KEY_ATTRIB); attribute = subEvent.getAttributeByName(attributeQName); if (attribute != null) keyValue.setKey(StaxParserUtil.getAttributeValue(attribute)); attributeQName = new QName("", VALUE_ATTRIB); attribute = subEvent.getAttributeByName(attributeQName); if (attribute != null) keyValue.setValue(StaxParserUtil.getAttributeValue(attribute)); EndElement endElement = StaxParserUtil.getNextEndElement(xmlEventReader); StaxParserUtil.validate(endElement, PROPERTY_ELEMENT); claimsProcessor.add(keyValue); } else throw logger.parserUnknownTag(elementName, subEvent.getLocation()); } claimsProcessors.add(claimsProcessor); } else throw logger.parserUnknownTag(elementName, subEvent.getLocation()); } return claimsProcessors; }
/** * Parses the {@code TokenProviders} section of the STS configuration file. * * @param xmlEventReader the reader used to parse the XML configuration file. * @return a {@code TokenProvidersType} instance that contains the parsed data. * @throws ParsingException if an error occurs while parsing the XML file. */ private TokenProvidersType parseTokenProviders(XMLEventReader xmlEventReader) throws ParsingException { StartElement startElement = StaxParserUtil.getNextStartElement(xmlEventReader); StaxParserUtil.validate(startElement, TOKEN_PROVIDERS_ELEMENT); TokenProvidersType tokenProviders = new TokenProvidersType(); // parse all token providers one by one. while (xmlEventReader.hasNext()) { XMLEvent xmlEvent = StaxParserUtil.peek(xmlEventReader); if (xmlEvent == null) break; if (xmlEvent instanceof EndElement) { EndElement endElement = (EndElement) StaxParserUtil.getNextEvent(xmlEventReader); String endElementName = StaxParserUtil.getEndElementName(endElement); if (endElementName.equals(TOKEN_PROVIDERS_ELEMENT)) break; else throw logger.parserUnknownEndElement(endElementName); } StartElement subEvent = StaxParserUtil.peekNextStartElement(xmlEventReader); if (subEvent == null) break; String elementName = StaxParserUtil.getStartElementName(subEvent); if (TOKEN_PROVIDER_ELEMENT.equalsIgnoreCase(elementName)) { subEvent = StaxParserUtil.getNextStartElement(xmlEventReader); StaxParserUtil.validate(subEvent, TOKEN_PROVIDER_ELEMENT); TokenProviderType tokenProvider = new TokenProviderType(); // parse the provider attributes (provider class, token type, token element, token // namespace). QName attributeQName = new QName("", PROVIDER_CLASS_ATTRIB); Attribute attribute = subEvent.getAttributeByName(attributeQName); if (attribute != null) tokenProvider.setProviderClass(StaxParserUtil.getAttributeValue(attribute)); attributeQName = new QName("", TOKEN_TYPE_ATTRIB); attribute = subEvent.getAttributeByName(attributeQName); if (attribute != null) tokenProvider.setTokenType(StaxParserUtil.getAttributeValue(attribute)); attributeQName = new QName("", TOKEN_ELEMENT_ATTRIB); attribute = subEvent.getAttributeByName(attributeQName); if (attribute != null) tokenProvider.setTokenElement(StaxParserUtil.getAttributeValue(attribute)); attributeQName = new QName("", TOKEN_ELEMENT_NS_ATTRIB); attribute = subEvent.getAttributeByName(attributeQName); if (attribute != null) tokenProvider.setTokenElementNS(StaxParserUtil.getAttributeValue(attribute)); // parse the provider properties. while (xmlEventReader.hasNext()) { xmlEvent = StaxParserUtil.peek(xmlEventReader); if (xmlEvent == null) break; if (xmlEvent instanceof EndElement) { EndElement endElement = (EndElement) StaxParserUtil.getNextEvent(xmlEventReader); String endElementName = StaxParserUtil.getEndElementName(endElement); if (endElementName.equals(TOKEN_PROVIDER_ELEMENT)) break; else throw logger.parserUnknownEndElement(endElementName); } subEvent = StaxParserUtil.peekNextStartElement(xmlEventReader); if (subEvent == null) break; elementName = StaxParserUtil.getStartElementName(subEvent); if (PROPERTY_ELEMENT.equalsIgnoreCase(elementName)) { // parse the property key and value. subEvent = StaxParserUtil.getNextStartElement(xmlEventReader); KeyValueType keyValue = new KeyValueType(); // parse the key and value attributes. attributeQName = new QName("", KEY_ATTRIB); attribute = subEvent.getAttributeByName(attributeQName); if (attribute != null) keyValue.setKey(StaxParserUtil.getAttributeValue(attribute)); attributeQName = new QName("", VALUE_ATTRIB); attribute = subEvent.getAttributeByName(attributeQName); if (attribute != null) keyValue.setValue(StaxParserUtil.getAttributeValue(attribute)); EndElement endElement = StaxParserUtil.getNextEndElement(xmlEventReader); StaxParserUtil.validate(endElement, PROPERTY_ELEMENT); tokenProvider.add(keyValue); } else throw logger.parserUnknownTag(elementName, subEvent.getLocation()); } tokenProviders.add(tokenProvider); } else throw logger.parserUnknownTag(elementName, subEvent.getLocation()); } return tokenProviders; }
/** * Parses the {@code KeyProvider} section of the STS configuration file. This section is used to * setup the keystore \ that will be used to sign and encrypt security tokens. * * @param xmlEventReader the reader used to parse the XML configuration file. * @return a {@code KeyProviderType} instance that contains the parsed data. * @throws ParsingException if an error occurs while parsing the XML file. */ private KeyProviderType parseKeyProvider(XMLEventReader xmlEventReader) throws ParsingException { StartElement startElement = StaxParserUtil.getNextStartElement(xmlEventReader); StaxParserUtil.validate(startElement, KEY_PROVIDER_ELEMENT); KeyProviderType keyProvider = new KeyProviderType(); // get the key provider class name attribute. QName attributeQName = new QName("", CLASS_NAME_ATTRIB); Attribute attribute = startElement.getAttributeByName(attributeQName); if (attribute == null) throw logger.parserRequiredAttribute("ClassName"); keyProvider.setClassName(StaxParserUtil.getAttributeValue(attribute)); // parse the inner elements. while (xmlEventReader.hasNext()) { XMLEvent xmlEvent = StaxParserUtil.peek(xmlEventReader); if (xmlEvent == null) break; if (xmlEvent instanceof EndElement) { EndElement endElement = (EndElement) StaxParserUtil.getNextEvent(xmlEventReader); String endElementName = StaxParserUtil.getEndElementName(endElement); if (endElementName.equals(KEY_PROVIDER_ELEMENT)) break; else throw logger.parserUnknownEndElement(endElementName); } StartElement subEvent = StaxParserUtil.peekNextStartElement(xmlEventReader); if (subEvent == null) break; String elementName = StaxParserUtil.getStartElementName(subEvent); if (SIGNING_ALIAS_ELEMENT.equalsIgnoreCase(elementName)) { subEvent = StaxParserUtil.getNextStartElement(xmlEventReader); if (!StaxParserUtil.hasTextAhead(xmlEventReader)) throw logger.parserExpectedTextValue("SigningAlias"); keyProvider.setSigningAlias(StaxParserUtil.getElementText(xmlEventReader)); } else if (VALIDATING_ALIAS_ELEMENT.equalsIgnoreCase(elementName)) { subEvent = StaxParserUtil.getNextStartElement(xmlEventReader); KeyValueType keyValue = new KeyValueType(); // parse the key and value attributes. attributeQName = new QName("", KEY_ATTRIB); attribute = subEvent.getAttributeByName(attributeQName); if (attribute != null) keyValue.setKey(StaxParserUtil.getAttributeValue(attribute)); attributeQName = new QName("", VALUE_ATTRIB); attribute = subEvent.getAttributeByName(attributeQName); if (attribute != null) keyValue.setValue(StaxParserUtil.getAttributeValue(attribute)); EndElement endElement = StaxParserUtil.getNextEndElement(xmlEventReader); StaxParserUtil.validate(endElement, VALIDATING_ALIAS_ELEMENT); keyProvider.add(keyValue); } else if (AUTH_ELEMENT.equalsIgnoreCase(elementName)) { subEvent = StaxParserUtil.getNextStartElement(xmlEventReader); AuthPropertyType authProperty = new AuthPropertyType(); // parse the key and value attributes. attributeQName = new QName("", KEY_ATTRIB); attribute = subEvent.getAttributeByName(attributeQName); if (attribute != null) authProperty.setKey(StaxParserUtil.getAttributeValue(attribute)); attributeQName = new QName("", VALUE_ATTRIB); attribute = subEvent.getAttributeByName(attributeQName); if (attribute != null) authProperty.setValue(StaxParserUtil.getAttributeValue(attribute)); EndElement endElement = StaxParserUtil.getNextEndElement(xmlEventReader); StaxParserUtil.validate(endElement, AUTH_ELEMENT); keyProvider.add(authProperty); } else throw logger.parserUnknownTag(elementName, subEvent.getLocation()); } return keyProvider; }