Skip to main content

PI Generate Credentials Client

1. Descripción general

pi-generate-credentials-client es una librería cliente reutilizable (JAR) que encapsula la comunicación con el servicio interno de generación de credenciales (pi-generate-credentials) del ecosistema Hawkers. El proyecto no expone ningún endpoint REST propio; se publica en el registro de artefactos Maven interno y es consumido por otros microservicios que necesiten obtener o (re)generar tokens de credenciales gestionados centralizadamente por dicho servicio.

Además del cliente HTTP, la librería aporta una utilidad de codificación/decodificación Base64 para el manejo de cadenas de credenciales.

2. Información técnica

PropiedadValor
artifactIdpi-generate-credentials-client
groupIdcom.hawkersco
version1.0.25-SNAPSHOT
Java25
Spring Boot4.0.6
Tipo de artefactoJAR (librería, no ejecutable)
MódulosProyecto único (no multi-módulo)

3. Arquitectura y diseño

Estructura del proyecto:

com.hawkersco.pigeneratecredentialsclient
├── PiGenerateCredentialsClientApplication.java # Clase @SpringBootApplication (residual, sin lógica)
├── client/
│ └── PiGenerateCredentialsClient.java # Interfaz @HttpExchange: getToken, generateToken
├── config/
│ └── PiGenerateCredentialsClientAutoConfiguration.java # @AutoConfiguration principal
└── utils/
└── PiGenerateCredentialsClientUtils.java # Utilidad plana (no bean Spring) de codificación/decodificación Base64

Flujo principal

sequenceDiagram
participant Consumidor as Microservicio consumidor
participant Client as PiGenerateCredentialsClient
participant API as Servicio pi-generate-credentials

Consumidor->>Client: getToken(tokenName) / generateToken(tokenName)
Client->>API: GET /api/token/get?tokenName=... | POST /api/token/generate?tokenName=...
API-->>Client: ResponseEntity<String> (JSON del token)
Client-->>Consumidor: ResponseEntity<String>

La autoconfiguración (PiGenerateCredentialsClientAutoConfiguration) se activa condicionalmente con @ConditionalOnProperty(prefix = "credentials-client.api", name = "host"), registrando el bean PiGenerateCredentialsClient con un RestClient simple (sin interceptores). Antes de construir el RestClient, normaliza la URL configurada: si credentials-client.api.host no empieza por http:// ni https://, se le antepone http:// automáticamente.

El registro de la autoconfiguración se realiza mediante el fichero estándar de Spring Boot:

META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

PiGenerateCredentialsClientUtils no es un bean Spring: el consumidor debe instanciarla manualmente (new PiGenerateCredentialsClientUtils()) para usar sus métodos encode/decode.

4. Dependencias principales

DependenciaVersiónPropósito
spring-boot-starter(gestionada SB4)Base de Spring Boot (contexto, autoconfiguración)
spring-web(gestionada SB4)RestClient + @HttpExchange / HttpServiceProxyFactory
com.google.code.gson:gson2.11.0Declarada en el pom.xml; no se encuentra ninguna referencia a Gson en el código fuente actual
spring-boot-starter-test(gestionada SB4)Testing (scope test)

5. API / Endpoints

No aplica a este proyecto. pi-generate-credentials-client es una librería cliente JAR que no expone endpoints REST propios. Las operaciones que encapsula sobre el servicio pi-generate-credentials se detallan en la sección 6.

6. Integraciones externas

Servicio interno pi-generate-credentials

Método clienteHTTPRuta remotaDirecciónDescripción
getTokenGET/api/token/get?tokenName=SalienteRecupera un token existente por nombre
generateTokenPOST/api/token/generate?tokenName=SalienteGenera o regenera un token por nombre

Ambos métodos devuelven ResponseEntity<String> con el token en formato JSON crudo (sin deserializar a un tipo concreto) y declaran throws RestClientResponseException en su Javadoc (comportamiento heredado de RestClient, no una excepción comprobada declarada en la firma Java).

Protocolo: HTTPS/HTTP REST (JSON, accept/contentType = application/json). Autenticación: no se observa ningún mecanismo de autenticación (cabecera, token, API key) en la construcción del RestClient — el propio propósito del servicio es generar/consultar tokens, no consumirlos con autenticación previa. Pendiente de verificar si el servicio remoto exige algún control de acceso adicional a nivel de red.

7. Configuración

No se incluye ningún application.properties/application.yml en la librería. La única propiedad requerida debe ser suministrada por la aplicación consumidora:

PropiedadDescripciónEjemplo de valor
credentials-client.api.hostHost/URL base del servicio pi-generate-credentials (activa la autoconfiguración)${CREDENTIALS_CLIENT_API_HOST}

Si el valor no incluye esquema (http:///https://), la autoconfiguración le antepone http:// automáticamente.

Variables de entorno recomendadas

VariablePropiedad mapeada
CREDENTIALS_CLIENT_API_HOSTcredentials-client.api.host

Importante: Si credentials-client.api.host no está definida, el bean PiGenerateCredentialsClient no se registra (condición @ConditionalOnProperty).

8. Persistencia

No aplica a este proyecto. La librería no accede a ninguna base de datos ni mantiene estado en memoria.

9. Procesos programados y mensajería

No aplica a este proyecto. No existen jobs @Scheduled, listeners de colas/topics ni runners batch.

10. Ejecución en local

pi-generate-credentials-client es una librería JAR, no una aplicación ejecutable. No tiene servidor embebido ni endpoint de health.

Requisitos previos

  • Java 25
  • Maven 3.x
  • Acceso al registro de artefactos Maven interno (europe-west3-maven.pkg.dev/pi-saldum/pi-repo-maven) para resolver/publicar dependencias.

Compilar e instalar en repositorio local

# Compilar sin tests
./mvnw -B -DskipTests clean install

# Compilar con tests
./mvnw clean install

# Ejecutar un test concreto
./mvnw test -Dtest=ClassName#methodName

# Empaquetar
./mvnw package

Uso como dependencia en un microservicio consumidor

<dependency>
<groupId>com.hawkersco</groupId>
<artifactId>pi-generate-credentials-client</artifactId>
<version>1.0.25-SNAPSHOT</version>
</dependency>

La autoconfiguración se activa automáticamente al declarar credentials-client.api.host en la aplicación consumidora. Consumidores que usaran previamente @EnableFeignClients(basePackages = "com.hawkersco.pigeneratecredentialsclient") deben eliminar esa anotación, ya que el bean se registra ahora vía autoconfiguración de Spring Boot (@HttpExchange/RestClient), no mediante Feign.

11. Despliegue

El pipeline de Jenkins (Jenkinsfile) consta de dos etapas:

  1. Checkout — descarga el código del repositorio.
  2. Publish to Artifact Registry — ejecuta mvn deploy -DskipTests para publicar el JAR en Google Artifact Registry.

CLAUDE.md menciona que el build se ejecuta vía jenkins/scripts/mvn.sh, script que no está presente en este repositorio ni referenciado directamente en el Jenkinsfile actual (que invoca mvn deploy -DskipTests directamente). Se documenta el Jenkinsfile realmente presente en el repositorio.

ParámetroValor
JDKJDK25 (tool Jenkins)
MavenMaven3 (tool Jenkins)
Repositorioeurope-west3-maven.pkg.dev/pi-saldum/pi-repo-maven (Artifact Registry GCP)

No existe Dockerfile ni despliegue como servicio independiente; el artefacto es un JAR publicado en el registro Maven.

Job de Jenkins:

https://jenkins-pi.hawkersco.net/job/pi-generate-credentials-client/

12. Manejo de errores y logging

La librería no implementa ninguna estrategia propia de manejo de excepciones ni logging estructurado. Las excepciones de red o HTTP propagadas por RestClient (como RestClientResponseException) son responsabilidad del servicio consumidor; el Javadoc de PiGenerateCredentialsClient documenta explícitamente esta excepción en @throws, aunque no está declarada como throws comprobado en la firma del método. No hay configuración de logback ni de niveles de log específicos en la librería.

13. Notas y consideraciones

  • Dependencia gson sin uso: El pom.xml declara com.google.code.gson:gson (versión 2.11.0) pero no se encuentra ninguna referencia a Gson en el código fuente del proyecto (client/, config/, utils/). Posible remanente de una plantilla compartida con otros clientes del ecosistema que sí usan Gson. Pendiente de verificar si puede eliminarse.

  • Normalización de URL con esquema por defecto http://: A diferencia de otros clientes del ecosistema, PiGenerateCredentialsClientAutoConfiguration añade automáticamente el prefijo http:// (no https://) si credentials-client.api.host no incluye esquema. Esto sugiere que el servicio se consume típicamente en red interna sin TLS; conviene que el consumidor configure explícitamente https:// si el servicio se expone fuera de una red de confianza.

  • Sin autenticación en el cliente: Ni PiGenerateCredentialsClient ni su autoconfiguración añaden cabeceras de autenticación, API key o token hacia el propio servicio pi-generate-credentials. Dado que el servicio existe precisamente para gestionar credenciales de otras integraciones, la ausencia de control de acceso a nivel de cliente HTTP podría ser intencional (control de acceso delegado a la red/gateway) — pendiente de verificar contra la configuración del servicio pi-generate-credentials en sí.

  • PiGenerateCredentialsClientUtils no es un bean gestionado: A diferencia del resto de la librería (que se autoconfigura), la utilidad de Base64 debe instanciarse manualmente por el consumidor, sin inyección de dependencias.

  • Sin tests implementados: No existe directorio src/test/ en el proyecto.

  • PiGenerateCredentialsClientApplication.java: Clase principal de Spring Boot en el paquete raíz, sin funcionalidad operativa. Artefacto residual de la generación inicial del proyecto con Spring Initializr, mismo patrón observado en otros clientes del ecosistema.