package org.apereo.cas.oidc.web;
import org.apereo.cas.oidc.OidcConstants;
import org.apereo.cas.oidc.util.OidcAuthorizationRequestSupport;
import org.apereo.cas.support.oauth.OAuth20Constants;
import org.apereo.cas.support.oauth.web.views.OAuth20CallbackAuthorizeViewResolver;
import org.pac4j.core.context.J2EContext;
import org.pac4j.core.profile.ProfileManager;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* This is {@link OidcCallbackAuthorizeViewResolver}.
*
* @author Misagh Moayyed
* @since 5.1.0
*/
public class OidcCallbackAuthorizeViewResolver implements OAuth20CallbackAuthorizeViewResolver {
private final OidcAuthorizationRequestSupport authorizationRequestSupport;
public OidcCallbackAuthorizeViewResolver(final OidcAuthorizationRequestSupport authorizationRequestSupport) {
this.authorizationRequestSupport = authorizationRequestSupport;
}
@Override
public ModelAndView resolve(final J2EContext ctx, final ProfileManager manager, final String url) {
final Set<String> prompt = authorizationRequestSupport.getOidcPromptFromAuthorizationRequest(url);
if (prompt.contains(OidcConstants.PROMPT_NONE)) {
if (manager.get(true) != null) {
return new ModelAndView(url);
}
final Map<String, String> model = new HashMap<>();
model.put(OAuth20Constants.ERROR, OidcConstants.LOGIN_REQUIRED);
return new ModelAndView(new MappingJackson2JsonView(), model);
}
return new ModelAndView(new RedirectView(url));
}
}