Class SmokeSessionController
302/401).
POST /smoke/sessioncom o headerX-Smoke-Token→200e o cookiexadm_session(mesmos atributos do cookie do login — verAuthSupport.authCookie(String, String, long, String, HttpRequest, boolean)).- Token errado, ausente ou vazio →
401em RFC-7807,code=invalid_smoke_token, sem distinguir os casos (comparação em tempo constante).
Principal próprio, não um usuário real: uid=smoke,
email=smoke@<auth.xadm-email-domain> e o papel SessionAuthenticationFetcher.ROLE_SMOKE
junto do ROLE_VIEW. Reusar credencial de gente daria mais permissão do que o smoke precisa e
apagaria a fronteira entre "quem testou" e "quem opera". O ROLE_VIEW é o que deixa navegar; o
SmokeReadOnlyFilter é o que garante só-leitura.
Nasce desligado — @Requires(property = "smoke.token", pattern = ".+") (env
SMOKE_TOKEN). ⚠️ pattern, nunca notEquals = "": com a property
ausente, o notEquals cai no ramo que devolve true — o bean sobe, o
@Value sem default só estoura quando ele é instanciado, e o resultado é 500 no primeiro
request com startup verde. O pattern=".+" reprova ausente e declarada-vazia: sem
a env o endpoint simplesmente não existe (404).
Rate-limit: o XadmLoginRateLimitFilter cobre /smoke/** junto com
/login/** — endpoint que emite sessão a partir de token estático sem freio de brute-force é
convite, e a peça já existia. Quem bate aqui sem credencial ainda cai na policy de glitch da
comum-web (o 401 sai em log; 404 autenticado e 5xx viram ERROR).
-
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionSmokeSessionController(AuthSettings settings, SessionTokenService sessionTokens, String tokenEsperado) Cria o seam de sessão do smoke. -
Method Summary
Modifier and TypeMethodDescriptionio.micronaut.http.HttpResponse<?> postSession(io.micronaut.http.HttpRequest<?> request, String token) Troca oSMOKE_TOKENpor um cookie de sessão só-leitura.
-
Field Details
-
SMOKE_TOKEN_HEADER
-
SMOKE_UID
subdo JWT do principal de smoke — não é um usuário do Firebase.- See Also:
-
-
Constructor Details
-
SmokeSessionController
public SmokeSessionController(AuthSettings settings, SessionTokenService sessionTokens, @Value("${smoke.token}") String tokenEsperado) Cria o seam de sessão do smoke.- Parameters:
settings- config de auth (TTL, domínio de email,cookie-secure).sessionTokens- emissor do JWT de sessão.tokenEsperado- oSMOKE_TOKENconfigurado (propertysmoke.token).
-
-
Method Details
-
postSession
@Post(value="/session", produces="application/json") public io.micronaut.http.HttpResponse<?> postSession(io.micronaut.http.HttpRequest<?> request, @Nullable @Header("X-Smoke-Token") String token) Troca oSMOKE_TOKENpor um cookie de sessão só-leitura.- Parameters:
request- a requisição (fonte do HTTPS efetivo para o atributoSecure).token- valor do headerX-Smoke-Token(pode sernull).- Returns:
200 {"status":"ok","uid":"smoke"}com o cookiexadm_session, ou401emapplication/problem+json.
-