Caminho no Gestor bibliotecas/2fa.php
Implementa os dois segundos fatores do login: TOTP (RFC 6238, o código de 30 segundos do Google Authenticator, Authy e similares) e código por e-mail. As telas e o fluxo ficam no módulo perfil-usuario (signin-2fa/ e o equivalente no OAuth); a biblioteca só calcula, valida e envia.
Os dados ficam na tabela usuarios: two_factor_enabled, two_factor_type (app ou email), two_factor_secret, two_factor_email_code e two_factor_email_expire. Os métodos oferecidos saem de AUTH_2FA_METHOD_APP e AUTH_2FA_METHOD_EMAIL (padrão true) no .env.
TOTP
gestor_incluir_biblioteca('2fa');
$secret = two_factor_generate_secret(); // 16 caracteres Base32 = 80 bits
$uri = two_factor_get_qr_code($email, $secret); // otpauth://totp/Conn2Flow:<email>?secret=…
// renderize $uri como QR Code; grave $secret em usuarios.two_factor_secret
$ok = two_factor_validate_code($secret, $codigoDigitado);-
SHA-1, 6 dígitos, período de 30 s, com tolerância de um período para trás e um para frente (o código vale por até 90 s).
-
two_factor_generate_secret($n)aceita no mínimo 16 caracteres. -
O emissor mostrado no aplicativo é sempre
Conn2Flow, não o nome do site. -
O segredo fica em texto claro no banco.
Código por e-mail
-
two_factor_email_send_code($id_usuarios, $email)sorteia 6 dígitos, grava com validade de 5 minutos (substituindo qualquer código anterior) e envia comcomunicacao_email(). O assunto e o texto do e-mail são fixos em português. -
two_factor_email_validate($id_usuarios, $codigo)confere valor e prazo e apaga o código ao aceitar, impedindo o reuso.
O perfil-usuario acrescenta os códigos de recuperação (req-119), tentados só quando o segundo fator falha e válidos uma vez cada.
Auxiliares internos (usados pelas funções acima; raramente chamados direto): two_factor_base32_encode(), two_factor_base32_decode(), two_factor_hotp().
Funções
Gerado a partir de gestor/bibliotecas/2fa.php · 8 funções
two_factor_base32_encode
ver no código · linha 33 ↗two_factor_base32_encode(string $data): stringCodifica uma string binária em Base32 (RFC 4648, sem padding).
Parâmetros
$datastring- Dados binários.
Retorno
two_factor_base32_decode
ver no código · linha 57 ↗two_factor_base32_decode(string $b32): stringDecodifica uma string Base32 (RFC 4648) para binário.
Parâmetros
$b32string- Texto Base32.
Retorno
two_factor_generate_secret
ver no código · linha 87 ↗two_factor_generate_secret(int $length = 16): stringGera um segredo TOTP aleatório em Base32.
Parâmetros
$lengthint- Quantidade de caracteres Base32 (padrão 16 = 80 bits).
Retorno
two_factor_get_qr_code
ver no código · linha 109 ↗two_factor_get_qr_code(string $email, string $secret): stringMonta a URI otpauth:// para renderização em QR Code.
Parâmetros
$emailstring- E-mail / conta do usuário (rótulo da conta).
$secretstring- Segredo Base32.
Retorno
two_factor_hotp
ver no código · linha 126 ↗two_factor_hotp(string $secret, int $counter): stringCalcula um código HOTP (RFC 4226) para um contador específico.
Parâmetros
$secretstring- Segredo Base32.
$counterint- Contador (no TOTP é floor(time()/30)).
Retorno
two_factor_validate_code
ver no código · linha 155 ↗two_factor_validate_code(string $secret, string $code): boolValida um código TOTP informado pelo usuário, com tolerância de ±1 ciclo de 30s.
Parâmetros
$secretstring- Segredo Base32 do usuário.
$codestring- Código de 6 dígitos informado.
Retorno
two_factor_email_send_code
ver no código · linha 178 ↗two_factor_email_send_code(int $usuario_id, string $email): boolGera um código numérico de 6 dígitos, grava-o no usuário com validade de 5 minutos e o envia por e-mail HTML.
Parâmetros
$usuario_idint- ID do usuário (coluna id_usuarios).
$emailstring- E-mail de destino.
Retorno
two_factor_email_validate
ver no código · linha 223 ↗two_factor_email_validate(int $usuario_id, string $code): boolValida o código 2FA enviado por e-mail, conferindo valor e prazo de validade. Em caso de sucesso, limpa o código para impedir reutilização.
Parâmetros
$usuario_idint- ID do usuário (coluna id_usuarios).
$codestring- Código de 6 dígitos informado.
Retorno