Un servicio se negaba a autenticar en preproducción. La variable existía, el valor estaba puesto y el log repetía 401. Antes de seguir dando palos de ciego quise una utilidad tonta: pegar un .env y ver las claves que trae, las que le faltan respecto al .env.example y un aviso si alguna está declarada dos veces. Media hora en el IDE del navegador.
El reto: el .env no es un formato
Parece dos columnas separadas por un igual, y por eso casi todos lo partimos con un split y a otra cosa. Luego llega la realidad:
- El valor puede llevar iguales dentro: un secreto en base64 acaba en ==, y partir por todos los iguales te devuelve medio secreto.
- La almohadilla abre comentario… salvo dentro de comillas. La contraseña era del estilo "7bK#q2vz" y mi primera versión guardaba 7bK tan contenta. Sin error: un valor más corto y perfectamente plausible.
- Las comillas dobles interpretan \n; las simples lo dejan literal. Una clave privada pegada entre comillas simples es una sola línea con barras dentro.
- Hay líneas con export delante, espacios alrededor del igual y claves sin valor.
- Si una clave aparece dos veces gana la última. Mi tabla mostraba la primera, justo la que el proceso no usa.
El 401 era eso. La contraseña buena llevaba almohadilla y quien la cortaba no era el servidor: era mi herramienta de diagnóstico. Y una herramienta de diagnóstico que miente es peor que no tener ninguna, porque te manda a buscar el fallo al otro lado.
Dónde ayudó la IA local
No le pedí «hazme un parser de .env». Le pedí la lista de casos raros antes de escribir una línea, y después esto:
Este es el fichero de verdad. Dime qué líneas rompen el parser de abajo y por qué.
Pegué el .env entero, con sus secretos dentro. Ahí está la gracia del asunto: el fallo no estaba en un ejemplo de manual, estaba en una contraseña concreta que alguien generó con caracteres especiales hace meses.
Por qué importa que no salga de aquí
Con un asistente remoto tienes dos opciones y las dos son malas. Anonimizar el fichero a mano, cambiar los valores por xxx y mandar eso: pero el ejemplo ya no tiene la almohadilla, que era precisamente el bug. O pegarlo tal cual, y en ese instante ese secreto está comprometido: hay que rotarlo, avisar al equipo y explicar por qué. Rotar credenciales de producción por haber depurado un parser es un precio ridículo.
Con el modelo corriendo dentro de la pestaña, el fichero es un fixture y nada más. No hay petición que salga, ni copia que pedir que borren, ni nada que rotar. El test que acabó en el repositorio lleva valores inventados, como debe ser. El que me enseñó el fallo se quedó donde estaba.
Abre Elffuss Code y pégale tu fichero raro tal cual: el modelo corre en tu navegador, así que nada de lo que escribas sube a ningún sitio.
Abrir Code →