You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
senzapaura_es/src/lib/server/correo-clave.ts

41 lines
1.6 KiB

/**
* Forma canonica de un correo, solo para contar limites.
*
* Sin esto, limitar por direccion no sirve de nada: `victima+1@gmail.com` y
* `victima+2@gmail.com` son cadenas distintas y el mismo buzon, asi que quien
* quisiera bombardear a alguien solo tendria que ir cambiando la etiqueta.
*
* IMPORTANTE: esto NO es la identidad de la cuenta. La cuenta se guarda con la
* direccion tal y como la escribio su duena, porque hay proveedores donde
* `+algo` o los puntos si distinguen buzones y fusionarlos crearia accesos
* cruzados entre cuentas ajenas. Aqui se canoniza a proposito de mas: para
* contar, pasarse de estricto solo puede hacer que un limite se comparta, que
* es el lado seguro del error.
*/
/** Proveedores en los que los puntos del usuario no distinguen buzon. */
const IGNORAN_PUNTOS = new Set(['gmail.com', 'googlemail.com']);
/**
* Clave con la que contar los envios a una direccion.
*
* Devuelve la direccion en minusculas, sin la etiqueta `+...` y, en los
* proveedores que los ignoran, sin puntos en la parte del usuario.
*/
export function claveDeCorreo(email: string): string {
const limpio = email.trim().toLowerCase();
const arroba = limpio.lastIndexOf('@');
if (arroba <= 0) return limpio;
let usuario = limpio.slice(0, arroba);
const dominio = limpio.slice(arroba + 1);
// La etiqueta `+algo` la ignoran practicamente todos los proveedores.
const mas = usuario.indexOf('+');
if (mas > 0) usuario = usuario.slice(0, mas);
if (IGNORAN_PUNTOS.has(dominio)) usuario = usuario.replaceAll('.', '');
return `${usuario}@${dominio}`;
}

Powered by TurnKey Linux.