package org.apereo.cas.oidc.web; import org.apereo.cas.oidc.OidcConstants; import org.apereo.cas.support.oauth.web.OAuth20HandlerInterceptorAdapter; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * This is {@link OidcHandlerInterceptorAdapter}. * * @author Misagh Moayyed * @since 5.1.0 */ public class OidcHandlerInterceptorAdapter extends OAuth20HandlerInterceptorAdapter { private final HandlerInterceptorAdapter requiresAuthenticationDynamicRegistrationInterceptor; private OidcConstants.DynamicClientRegistrationMode dynamicClientRegistrationMode; public OidcHandlerInterceptorAdapter(final HandlerInterceptorAdapter requiresAuthenticationAccessTokenInterceptor, final HandlerInterceptorAdapter requiresAuthenticationAuthorizeInterceptor, final HandlerInterceptorAdapter requiresAuthenticationDynamicRegistrationInterceptor, final OidcConstants.DynamicClientRegistrationMode dynamicClientRegistrationMode) { super(requiresAuthenticationAccessTokenInterceptor, requiresAuthenticationAuthorizeInterceptor); this.requiresAuthenticationDynamicRegistrationInterceptor = requiresAuthenticationDynamicRegistrationInterceptor; this.dynamicClientRegistrationMode = dynamicClientRegistrationMode; } @Override public boolean preHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler) throws Exception { if (!super.preHandle(request, response, handler)) { return false; } if (isDynamicClientRegistrationRequest(request.getRequestURI())) { if (isDynamicClientRegistrationRequestProtected()) { return requiresAuthenticationDynamicRegistrationInterceptor.preHandle(request, response, handler); } } return true; } private boolean isDynamicClientRegistrationRequestProtected() { return this.dynamicClientRegistrationMode == OidcConstants.DynamicClientRegistrationMode.PROTECTED; } /** * Is dynamic client registration request. * * @param requestPath the request path * @return the boolean */ protected boolean isDynamicClientRegistrationRequest(final String requestPath) { return doesUriMatchPattern(requestPath, OidcConstants.REGISTRATION_URL); } }