package org.apereo.cas.logout;
import org.apache.commons.validator.routines.UrlValidator;
import org.apereo.cas.authentication.principal.WebApplicationService;
import org.apereo.cas.services.RegisteredService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.URL;
/**
* This is {@link DefaultSingleLogoutServiceLogoutUrlBuilder} which acts on a registered
* service to determine how the logout url endpoint should be decided.
*
* @author Misagh Moayyed
* @since 5.0.0
*/
public class DefaultSingleLogoutServiceLogoutUrlBuilder implements SingleLogoutServiceLogoutUrlBuilder {
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultSingleLogoutServiceLogoutUrlBuilder.class);
@Override
public URL determineLogoutUrl(final RegisteredService registeredService, final WebApplicationService singleLogoutService) {
try {
final URL serviceLogoutUrl = registeredService.getLogoutUrl();
if (serviceLogoutUrl != null) {
LOGGER.debug("Logout request will be sent to [{}] for service [{}]", serviceLogoutUrl, singleLogoutService);
return serviceLogoutUrl;
}
if (UrlValidator.getInstance().isValid(singleLogoutService.getOriginalUrl())) {
return new URL(singleLogoutService.getOriginalUrl());
}
return null;
} catch (final Exception e) {
throw new IllegalArgumentException(e);
}
}
}