package com.provectus.kafka.ui.controller; import java.nio.charset.Charset; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.web.server.csrf.CsrfToken; import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; @RestController @RequiredArgsConstructor @Slf4j public class AuthController { @GetMapping(value = "/auth", produces = {"text/html"}) public Mono getAuth(ServerWebExchange exchange) { Mono token = exchange.getAttributeOrDefault(CsrfToken.class.getName(), Mono.empty()); return token .map(AuthController::csrfToken) .defaultIfEmpty("") .map(csrfTokenHtmlInput -> createPage(exchange, csrfTokenHtmlInput)); } private byte[] createPage(ServerWebExchange exchange, String csrfTokenHtmlInput) { MultiValueMap queryParams = exchange.getRequest() .getQueryParams(); String contextPath = exchange.getRequest().getPath().contextPath().value(); String page = "\n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " Please sign in\n" + " \n" + " \n" + " \n" + " \n" + "
\n" + formLogin(queryParams, contextPath, csrfTokenHtmlInput) + "
\n" + " \n" + ""; return page.getBytes(Charset.defaultCharset()); } private String formLogin( MultiValueMap queryParams, String contextPath, String csrfTokenHtmlInput) { boolean isError = queryParams.containsKey("error"); boolean isLogoutSuccess = queryParams.containsKey("logout"); return "
\n" + " \n" + createError(isError) + createLogoutSuccess(isLogoutSuccess) + "

\n" + " \n" + " \n" + "

\n" + "

\n" + " \n" + " \n" + "

\n" + csrfTokenHtmlInput + " \n" + "
\n"; } private static String csrfToken(CsrfToken token) { return " \n"; } private static String createError(boolean isError) { return isError ? "
Invalid credentials
" : ""; } private static String createLogoutSuccess(boolean isLogoutSuccess) { return isLogoutSuccess ? "
You have been signed out
" : ""; } }