La extensión del MIR: cincuenta casillas rellenadas con tu credencial, no con tu cookie
Qué campos del formulario del Ministerio rellena la extensión, por qué usa un token propio en vez de la sesión, y las tres trampas que solo se ven usándolo.
Comunicar una operación al Ministerio del Interior se hace en un formulario web con cuatro pestañas, en la sede de drones del Ministerio, y los datos que pide son en su mayoría los mismos que ya están escritos en el estudio: el operador, el piloto, los datos técnicos del aparato y los de la operación. Copiarlos a mano cada vez es donde se cuelan las erratas. La extensión de Chrome de LOWLEVEL los lleva de un sitio al otro, y lo interesante no es que rellene: es de dónde saca el permiso para leerlos y qué se niega a dar por hecho.
Qué rellena, y de dónde sale cada cosa
El formulario está construido con JSF y PrimeFaces, y sus identificadores son deterministas, así que se rellena por identificador exacto y no buscando etiquetas por su texto. Contados sobre el código que lo hace: doce campos del bloque de operador, ocho de la operación, trece del piloto y diecisiete del bloque del aparato.
El operador y el piloto salen de Ajustes; los datos técnicos, de la ficha del aparato asignado al rodaje; el tipo, las horas y la altura máxima, del rodaje; la comunidad autónoma, de la localización. Los lugares de protección y de recuperación se rellenan con las coordenadas de la localización, que es lo que pide el trámite, y solo caen al nombre del sitio cuando el rodaje todavía no tiene coordenadas.
Queda a mano el mapa de la zona de vuelo. Y la identidad de quien presenta la fija el certificado digital, no la extensión.
El token, y por qué no la cookie
La extensión no usa la cookie de sesión, y no es una preferencia: esa cookie es SameSite=Lax y no viaja en una petición hecha desde el dominio del Ministerio. Funcionaría en un portátil y daría un 401 en producción. Relajarla arreglaría la extensión debilitando todas las demás peticiones de la plataforma.
En su lugar hay un token propio que se concede una vez: se abre LOWLEVEL con la sesión que ya hay, se autoriza, y la página se lo entrega a la extensión sin copiar ni pegar nada. Quién puede entregarlo lo limita el manifiesto, y el proceso de fondo vuelve a comprobar el origen antes de guardar nada.
Ese token abre dos rutas y solo dos. Con él contra cualquier otra dirección del estudio la respuesta es 403.
La credencial vive en el equipo de quien la concede, así que no tiene por qué abrir el producto entero. Se revoca desde el estudio y deja de funcionar en la petición siguiente: los tokens de extensión no se cachean, a propósito.
Tres trampas que solo se ven usándolo
La primera es una cascada. Provincia y localidad no son dos desplegables: la localidad llega con una sola opción y no se puebla hasta que el formulario recibe un evento de cambio en la provincia y contesta por AJAX. Medido sobre el formulario en vivo, cincuenta y tres opciones en una y una en la otra.
Escribir la provincia en silencio —como se escribe todo lo demás— la deja marcada en pantalla y la localidad bloqueada: su desplegable se abre vacío y no hay forma de elegir. Eso es peor que dejarla vacía, porque parece puesta. Así que ese evento sí se dispara, después de comprobar leyendo su manejador que no repinta nada. El peligroso es el de la localidad, que sí repintaría el bloque de dirección con lo ya escrito dentro, y por eso la localidad se escribe sin evento y se vuelve a poner en cada pasada.
La segunda es un desplegable disfrazado. Las comunidades autónomas parecen casillas y el control real es una lista de selección múltiple con diecinueve opciones, oculta por estilos y con su nombre intacto, así que lo marcado viaja en el envío. Pero la piel que se ve la pinta la biblioteca con su propio estado, y una escritura silenciosa no la repinta: medido, el control decía Cantabria y a la vista había cero casillas marcadas. Se marca también la piel.
Y ese mismo campo tiene otro AJAX colgado del cambio. La extensión no lo dispara, pero el operador sí lo hace en cuanto marca una comunidad a mano, y ese repintado borra los otros veintitantos campos. Es lo más natural que puede hacer alguien después de rellenar, así que la extensión escucha esos clics y vuelve a aplicar los datos, igual que al cambiar de pestaña.
La tercera es de vocabulario. El campo «Clase» del bloque del aparato es el tipo de fuselaje —ala fija, híbrido, rotor— y no la clase europea C0, C1 o C2. Un multirrotor es rotor. Confundirlos produce un formulario relleno con un valor equivocado que tiene toda la pinta de ser el bueno.
El panel dice lo que falta, no lo que hizo
Durante un tiempo la línea de estado decía cuántos campos se habían rellenado. Es un número con cara de éxito: un rodaje sin aparato asignado dejaba las diecisiete casillas del bloque del aparato vacías y el panel felicitaba igual.
Ahora se leen del formulario, después de rellenar, los campos que el trámite marca con asterisco, y se dice qué falta agrupado por bloque. Se lee lo que hay en la página, no lo que creemos haber escrito, porque lo que importa es lo que va a viajar cuando alguien firme. Y un valor que el formulario rechazó —hoy siempre un desplegable cuyo texto no casó— se dice con su nombre: un valor descartado en silencio es un campo que su dueño da por relleno.
El listado de rodajes se vuelve a pedir al volver a la pestaña y con el botón de recargar. Antes era una foto del momento en que se abrió el formulario: creabas un rodaje, volvías, y no estaba, y la única salida era recargar una página cuya sesión viene de un certificado digital.
Lo que no hace, y conviene decirlo
No presenta nada. Rellena, tú revisas, tú firmas con tu certificado. Y no recibe ningún acuse de vuelta: el formulario oficial no le devuelve nada a la extensión, así que la referencia de expediente que se anota luego en el estudio la teclea una persona. Cuando el manual de vuelo dice que consta presentada una comunicación, está diciendo eso: consta, según su operador.