package org.apereo.cas.services; import org.apereo.cas.util.services.RegisteredServiceJsonSerializer; import org.springframework.context.ApplicationEventPublisher; import org.springframework.core.io.Resource; import java.nio.file.Path; /** * Implementation of {@code ServiceRegistryDao} that reads services definition from JSON * configuration file at the Spring Application Context initialization time. JSON files are * expected to be found inside a directory location and this registry will recursively look through * the directory structure to find relevant JSON files. Files are expected to have the * {@value JsonServiceRegistryDao#FILE_EXTENSION} extension. An example of the JSON file is included here: * <pre> { "@class" : "RegexRegisteredService", "id" : 103935657744185, "description" : "This is the application description", "serviceId" : "https://app.school.edu", "name" : "testSaveAttributeReleasePolicyAllowedAttrRulesAndFilter", "theme" : "testtheme", "proxyPolicy" : { "@class" : "RegexMatchingRegisteredServiceProxyPolicy", "pattern" : "https://.+" }, "enabled" : true, "ssoEnabled" : false, "evaluationOrder" : 1000, "usernameAttributeProvider" : { "@class" : "DefaultRegisteredServiceUsernameProvider" }, "logoutType" : "BACK_CHANNEL", "requiredHandlers" : [ "java.util.HashSet", [ "handler1", "handler2" ] ], "attributeReleasePolicy" : { "@class" : "ReturnAllowedAttributeReleasePolicy", "attributeFilter" : { "@class" : "RegisteredServiceRegexAttributeFilter", "pattern" : "\\w+" }, "allowedAttributes" : [ "java.util.ArrayList", [ "uid", "sn", "cn" ] ] } } * </pre> * * @author Dmitriy Kopylenko * @author Marvin S. Addison * @author Misagh Moayyed * @since 4.1.0 */ public class JsonServiceRegistryDao extends AbstractResourceBasedServiceRegistryDao { /** * File extension of registered service JSON files. */ private static final String FILE_EXTENSION = "json"; /** * Instantiates a new Json service registry dao. * Sets the path to the directory where JSON service registry entries are * stored. Uses the {@link RegisteredServiceJsonSerializer} by default. * * @param configDirectory the config directory where service registry files can be found. * @param enableWatcher the enable watcher * @param eventPublisher the event publisher */ public JsonServiceRegistryDao(final Path configDirectory, final boolean enableWatcher, final ApplicationEventPublisher eventPublisher) { super(configDirectory, new RegisteredServiceJsonSerializer(), enableWatcher, eventPublisher); } /** * Instantiates a new Json service registry dao. * Sets the path to the directory where JSON service registry entries are * stored. Uses the {@link RegisteredServiceJsonSerializer} by default. * * @param configDirectory the config directory where service registry files can be found. * @param enableWatcher the enable watcher * @param eventPublisher the event publisher * @throws Exception the IO exception */ public JsonServiceRegistryDao(final Resource configDirectory, final boolean enableWatcher, final ApplicationEventPublisher eventPublisher) throws Exception { super(configDirectory, new RegisteredServiceJsonSerializer(), enableWatcher, eventPublisher); } @Override protected String getExtension() { return FILE_EXTENSION; } }