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:
@@ -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";
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user