feat: capture and log browser information during user login

- Integrated browser information capture in the login process, including user agent and IP address.
- Enhanced device and browser detection logic to provide more detailed insights into user environments.
- Improved system detection for various operating systems and devices, ensuring accurate reporting during authentication.
This commit is contained in:
2025-11-04 02:27:56 -03:00
parent 372b2b5bf9
commit f278ad4d17
3 changed files with 272 additions and 12 deletions

View File

@@ -37,26 +37,182 @@ export async function registrarLogin(
// Helpers para extrair informações do userAgent
function extrairDevice(userAgent: string): string {
if (/mobile/i.test(userAgent)) return "Mobile";
if (/tablet/i.test(userAgent)) return "Tablet";
const ua = userAgent.toLowerCase();
// Detectar dispositivos móveis primeiro
if (/mobile|android|iphone|ipod|blackberry|opera mini|iemobile|wpdesktop/i.test(ua)) {
// Verificar se é tablet
if (/ipad|tablet|playbook|silk|(android(?!.*mobile))/i.test(ua)) {
return "Tablet";
}
return "Mobile";
}
// Detectar outros dispositivos
if (/smart-tv|smarttv|googletv|appletv|roku|chromecast/i.test(ua)) {
return "Smart TV";
}
if (/watch|wear/i.test(ua)) {
return "Smart Watch";
}
// Padrão: Desktop
return "Desktop";
}
function extrairBrowser(userAgent: string): string {
if (/edg/i.test(userAgent)) return "Edge";
if (/chrome/i.test(userAgent)) return "Chrome";
if (/firefox/i.test(userAgent)) return "Firefox";
if (/safari/i.test(userAgent)) return "Safari";
if (/opera/i.test(userAgent)) return "Opera";
const ua = userAgent.toLowerCase();
// Ordem de detecção é importante (Edge deve vir antes de Chrome)
if (/edgios/i.test(ua)) {
return "Edge iOS";
}
if (/edg/i.test(ua)) {
// Extrair versão do Edge
const match = ua.match(/edg[e\/]([\d.]+)/i);
return match ? `Edge ${match[1]}` : "Edge";
}
if (/opr|opera/i.test(ua)) {
const match = ua.match(/(?:opr|opera)[\/\s]([\d.]+)/i);
return match ? `Opera ${match[1]}` : "Opera";
}
if (/chrome|crios/i.test(ua) && !/edg|opr|opera/i.test(ua)) {
const match = ua.match(/chrome[/\s]([\d.]+)/i);
return match ? `Chrome ${match[1]}` : "Chrome";
}
if (/firefox|fxios/i.test(ua)) {
const match = ua.match(/firefox[/\s]([\d.]+)/i);
return match ? `Firefox ${match[1]}` : "Firefox";
}
if (/safari/i.test(ua) && !/chrome|crios|android/i.test(ua)) {
const match = ua.match(/version[/\s]([\d.]+)/i);
return match ? `Safari ${match[1]}` : "Safari";
}
if (/msie|trident/i.test(ua)) {
const match = ua.match(/(?:msie |rv:)([\d.]+)/i);
return match ? `Internet Explorer ${match[1]}` : "Internet Explorer";
}
if (/samsungbrowser/i.test(ua)) {
return "Samsung Internet";
}
if (/ucbrowser/i.test(ua)) {
return "UC Browser";
}
if (/micromessenger/i.test(ua)) {
return "WeChat";
}
if (/baiduboxapp/i.test(ua)) {
return "Baidu Browser";
}
return "Desconhecido";
}
function extrairSistema(userAgent: string): string {
if (/windows/i.test(userAgent)) return "Windows";
if (/mac/i.test(userAgent)) return "MacOS";
if (/linux/i.test(userAgent)) return "Linux";
if (/android/i.test(userAgent)) return "Android";
if (/ios/i.test(userAgent)) return "iOS";
const ua = userAgent.toLowerCase();
// Windows
if (/windows nt 10.0/i.test(ua)) {
return "Windows 10/11";
}
if (/windows nt 6.3/i.test(ua)) {
return "Windows 8.1";
}
if (/windows nt 6.2/i.test(ua)) {
return "Windows 8";
}
if (/windows nt 6.1/i.test(ua)) {
return "Windows 7";
}
if (/windows nt 6.0/i.test(ua)) {
return "Windows Vista";
}
if (/windows nt 5.1/i.test(ua)) {
return "Windows XP";
}
if (/windows/i.test(ua)) {
return "Windows";
}
// macOS
if (/macintosh|mac os x/i.test(ua)) {
const match = ua.match(/mac os x ([\d_]+)/i);
if (match) {
const version = match[1].replace(/_/g, '.');
return `macOS ${version}`;
}
return "macOS";
}
// iOS
if (/iphone|ipad|ipod/i.test(ua)) {
const match = ua.match(/os ([\d_]+)/i);
if (match) {
const version = match[1].replace(/_/g, '.');
return `iOS ${version}`;
}
return "iOS";
}
// Android
if (/android/i.test(ua)) {
const match = ua.match(/android ([\d.]+)/i);
if (match) {
return `Android ${match[1]}`;
}
return "Android";
}
// Linux
if (/linux/i.test(ua)) {
// Tentar identificar distribuição
if (/ubuntu/i.test(ua)) {
return "Ubuntu";
}
if (/debian/i.test(ua)) {
return "Debian";
}
if (/fedora/i.test(ua)) {
return "Fedora";
}
if (/centos/i.test(ua)) {
return "CentOS";
}
if (/redhat/i.test(ua)) {
return "Red Hat";
}
if (/suse/i.test(ua)) {
return "SUSE";
}
return "Linux";
}
// Chrome OS
if (/cros/i.test(ua)) {
return "Chrome OS";
}
// BlackBerry
if (/blackberry/i.test(ua)) {
return "BlackBerry OS";
}
// Windows Phone
if (/windows phone/i.test(ua)) {
return "Windows Phone";
}
return "Desconhecido";
}