use of org.apereo.cas.services.RegisteredService in project cas by apereo.
the class DefaultRegisteredServiceReplicationStrategy method updateLoadedRegisteredServicesFromCache.
@Override
public List<RegisteredService> updateLoadedRegisteredServicesFromCache(final List<RegisteredService> services, final ServiceRegistry serviceRegistry) {
final Collection<DistributedCacheObject<RegisteredService>> cachedServices = this.distributedCacheManager.getAll();
for (final DistributedCacheObject<RegisteredService> entry : cachedServices) {
final RegisteredService cachedService = entry.getValue();
LOGGER.debug("Found cached service definition [{}] in the replication cache [{}]", cachedService, distributedCacheManager.getName());
if (isRegisteredServiceMarkedAsDeletedInCache(entry)) {
LOGGER.debug("Service found in the cache [{}] is marked as a deleted service. CAS will update the service registry " + "of this CAS node to remove the local service, if found.", cachedService);
serviceRegistry.delete(cachedService);
this.distributedCacheManager.remove(cachedService, entry);
continue;
}
final RegisteredService matchingService = services.stream().filter(s -> s.getId() == cachedService.getId()).findFirst().orElse(null);
if (matchingService != null) {
updateServiceRegistryWithMatchingService(services, cachedService, matchingService, serviceRegistry);
} else {
updateServiceRegistryWithNoMatchingService(services, cachedService, serviceRegistry);
}
}
return services;
}
use of org.apereo.cas.services.RegisteredService in project cas by apereo.
the class CreateResourceBasedRegisteredServiceWatcher method accept.
@Override
public void accept(final File file) {
LOGGER.debug("New service definition [{}] was created. Locating service entry from cache...", file);
final Collection<RegisteredService> services = serviceRegistryDao.load(file);
services.stream().filter(Objects::nonNull).forEach(service -> {
if (serviceRegistryDao.findServiceById(service.getId()) != null) {
LOG_SERVICE_DUPLICATE.accept(service);
}
LOGGER.debug("Updating service definitions with [{}]", service);
serviceRegistryDao.publishEvent(new CasRegisteredServicePreSaveEvent(this, service));
serviceRegistryDao.update(service);
serviceRegistryDao.publishEvent(new CasRegisteredServiceSavedEvent(this, service));
});
}
use of org.apereo.cas.services.RegisteredService in project cas by apereo.
the class DeleteResourceBasedRegisteredServiceWatcher method accept.
@Override
public void accept(final File file) {
LOGGER.debug("Service definition [{}] was deleted. Reloading cache...", file);
final RegisteredService service = serviceRegistryDao.getRegisteredServiceFromFile(file);
if (service != null) {
serviceRegistryDao.publishEvent(new CasRegisteredServicePreDeleteEvent(this, service));
serviceRegistryDao.removeRegisteredService(service);
LOGGER.debug("Successfully deleted service definition [{}]", service.getName());
serviceRegistryDao.publishEvent(new CasRegisteredServiceDeletedEvent(this, service));
} else {
LOGGER.warn("Unable to locate a matching service definition from file [{}]. Reloading cache...", file);
final List<RegisteredService> results = serviceRegistryDao.load();
serviceRegistryDao.publishEvent(new CasRegisteredServicesLoadedEvent(this, results));
}
}
use of org.apereo.cas.services.RegisteredService in project cas by apereo.
the class DefaultRegisteredServiceJsonSerializerTests method checkNullability.
@Test
public void checkNullability() {
final DefaultRegisteredServiceJsonSerializer zer = new DefaultRegisteredServiceJsonSerializer();
final String json = " {\n" + " \"@class\" : \"org.apereo.cas.services.RegexRegisteredService\",\n" + " \"serviceId\" : \"^https://xyz.*\",\n" + " \"name\" : \"XYZ\",\n" + " \"id\" : \"20161214\"\n" + " }";
final RegisteredService s = zer.from(json);
assertNotNull(s);
assertNotNull(s.getAccessStrategy());
assertNotNull(s.getAttributeReleasePolicy());
assertNotNull(s.getProxyPolicy());
assertNotNull(s.getUsernameAttributeProvider());
}
use of org.apereo.cas.services.RegisteredService in project cas by apereo.
the class GrouperMultifactorAuthenticationPolicyEventResolver method resolveInternal.
@Override
public Set<Event> resolveInternal(final RequestContext context) {
final RegisteredService service = resolveRegisteredServiceInRequestContext(context);
final Authentication authentication = WebUtils.getAuthentication(context);
if (StringUtils.isBlank(grouperField)) {
LOGGER.debug("No group field is defined to process for Grouper multifactor trigger");
return null;
}
if (authentication == null || service == null) {
LOGGER.debug("No authentication or service is available to determine event for principal");
return null;
}
final Principal principal = authentication.getPrincipal();
final Collection<WsGetGroupsResult> results = GrouperFacade.getGroupsForSubjectId(principal.getId());
if (results.isEmpty()) {
LOGGER.debug("No groups could be found for [{}] to resolve events for MFA", principal);
return null;
}
final Map<String, MultifactorAuthenticationProvider> providerMap = MultifactorAuthenticationUtils.getAvailableMultifactorAuthenticationProviders(this.applicationContext);
if (providerMap == null || providerMap.isEmpty()) {
LOGGER.error("No multifactor authentication providers are available in the application context");
throw new AuthenticationException();
}
final GrouperGroupField groupField = GrouperGroupField.valueOf(grouperField);
final Set<String> values = results.stream().map(wsGetGroupsResult -> Stream.of(wsGetGroupsResult.getWsGroups())).flatMap(Function.identity()).map(g -> GrouperFacade.getGrouperGroupAttribute(groupField, g)).collect(Collectors.toSet());
final Optional<MultifactorAuthenticationProvider> providerFound = resolveProvider(providerMap, values);
if (providerFound.isPresent()) {
final MultifactorAuthenticationProvider provider = providerFound.get();
if (provider.isAvailable(service)) {
LOGGER.debug("Attempting to build event based on the authentication provider [{}] and service [{}]", provider, service.getName());
final Event event = validateEventIdForMatchingTransitionInContext(provider.getId(), context, buildEventAttributeMap(authentication.getPrincipal(), service, provider));
return CollectionUtils.wrapSet(event);
}
LOGGER.warn("Located multifactor provider [{}], yet the provider cannot be reached or verified", providerFound.get());
return null;
}
LOGGER.debug("No multifactor provider could be found based on [{}]'s Grouper groups", principal.getId());
return null;
}
Aggregations