package fr.titionfire.ffsaf.rest; import fr.titionfire.ffsaf.rest.data.UserInfo; import io.quarkus.security.Authenticated; import io.quarkus.security.identity.SecurityIdentity; import jakarta.inject.Inject; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; import org.eclipse.microprofile.config.inject.ConfigProperty; import org.eclipse.microprofile.jwt.JsonWebToken; import org.eclipse.microprofile.openapi.annotations.Operation; import org.eclipse.microprofile.openapi.annotations.responses.APIResponse; import org.eclipse.microprofile.openapi.annotations.responses.APIResponses; import java.net.URI; import java.net.URISyntaxException; @Path("api/auth") public class AuthEndpoints { @ConfigProperty(name = "login_redirect") String redirect; @Inject SecurityIdentity securityIdentity; @Inject JsonWebToken IdToken; @GET @Produces(MediaType.TEXT_PLAIN) @Operation(summary = "Vérifie si l'utilisateur est authentifié", description = "Cette méthode renvoie true si " + "l'utilisateur est authentifié et false sinon.") @APIResponses(value = { @APIResponse(responseCode = "200", description = "Réussite") }) public Boolean auth() { return !securityIdentity.isAnonymous(); } @GET @Path("/userinfo") @Authenticated @Produces(MediaType.APPLICATION_JSON) @Operation(summary = "Renvoie les informations de l'utilisateur authentifié", description = "Cette méthode renvoie les" + " informations de l'utilisateur authentifié sous forme d'objet JSON.") @APIResponses(value = { @APIResponse(responseCode = "200", description = "Réussite"), @APIResponse(responseCode = "401", description = "Utilisateur non authentifié") }) public UserInfo userinfo() { return UserInfo.makeUserInfo(IdToken, securityIdentity); } @GET @Path("/login") @Authenticated @Produces(MediaType.TEXT_PLAIN) @Operation(hidden = true) public Response login() throws URISyntaxException { return Response.temporaryRedirect(new URI(redirect)).build(); } }