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
| Propiedad | Valor |
|---|---|
artifactId | pi-generate-credentials-client |
groupId | com.hawkersco |
version | 1.0.25-SNAPSHOT |
| Java | 25 |
| Spring Boot | 4.0.6 |
| Tipo de artefacto | JAR (librería, no ejecutable) |
| Módulos | Proyecto ú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
| Dependencia | Versión | Propósito |
|---|---|---|
spring-boot-starter | (gestionada SB4) | Base de Spring Boot (contexto, autoconfiguración) |
spring-web | (gestionada SB4) | RestClient + @HttpExchange / HttpServiceProxyFactory |
com.google.code.gson:gson | 2.11.0 | Declarada 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 cliente | HTTP | Ruta remota | Dirección | Descripción |
|---|---|---|---|---|
getToken | GET | /api/token/get?tokenName= | Saliente | Recupera un token existente por nombre |
generateToken | POST | /api/token/generate?tokenName= | Saliente | Genera 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:
| Propiedad | Descripción | Ejemplo de valor |
|---|---|---|
credentials-client.api.host | Host/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
| Variable | Propiedad mapeada |
|---|---|
CREDENTIALS_CLIENT_API_HOST | credentials-client.api.host |
Importante: Si
credentials-client.api.hostno está definida, el beanPiGenerateCredentialsClientno 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:
- Checkout — descarga el código del repositorio.
- Publish to Artifact Registry — ejecuta
mvn deploy -DskipTestspara 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ámetro | Valor |
|---|---|
| JDK | JDK25 (tool Jenkins) |
| Maven | Maven3 (tool Jenkins) |
| Repositorio | europe-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
gsonsin uso: Elpom.xmldeclaracom.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,PiGenerateCredentialsClientAutoConfigurationañade automáticamente el prefijohttp://(nohttps://) sicredentials-client.api.hostno incluye esquema. Esto sugiere que el servicio se consume típicamente en red interna sin TLS; conviene que el consumidor configure explícitamentehttps://si el servicio se expone fuera de una red de confianza. -
Sin autenticación en el cliente: Ni
PiGenerateCredentialsClientni su autoconfiguración añaden cabeceras de autenticación, API key o token hacia el propio serviciopi-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 serviciopi-generate-credentialsen sí. -
PiGenerateCredentialsClientUtilsno 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.