package org.apereo.cas.web.flow; import com.google.common.io.ByteSource; import org.apache.commons.lang3.StringUtils; import org.apereo.cas.gua.api.UserGraphicalAuthenticationRepository; import org.apereo.cas.services.UnauthorizedServiceException; import org.apereo.cas.util.EncodingUtils; import org.springframework.webflow.action.AbstractAction; import org.springframework.webflow.execution.Event; import org.springframework.webflow.execution.RequestContext; import java.nio.charset.StandardCharsets; /** * This is {@link DisplayUserGraphicsBeforeAuthenticationAction}. * * @author Misagh Moayyed * @since 5.1.0 */ public class DisplayUserGraphicsBeforeAuthenticationAction extends AbstractAction { private final UserGraphicalAuthenticationRepository repository; public DisplayUserGraphicsBeforeAuthenticationAction(final UserGraphicalAuthenticationRepository repository) { this.repository = repository; } @Override protected Event doExecute(final RequestContext requestContext) throws Exception { final String username = requestContext.getRequestParameters().get("username"); if (StringUtils.isBlank(username)) { throw new UnauthorizedServiceException(UnauthorizedServiceException.CODE_UNAUTHZ_SERVICE, StringUtils.EMPTY); } final ByteSource graphics = repository.getGraphics(username); if (graphics == null || graphics.isEmpty()) { throw new UnauthorizedServiceException(UnauthorizedServiceException.CODE_UNAUTHZ_SERVICE, StringUtils.EMPTY); } final byte[] image = EncodingUtils.encodeBase64ToByteArray(graphics.read()); requestContext.getFlowScope().put("guaUsername", username); requestContext.getFlowScope().put("guaUserImage", new String(image, StandardCharsets.UTF_8)); return success(); } }