X-Git-Url: https://git.josue.xyz/?a=blobdiff_plain;f=_webi%2Fua-detect.js;h=426db69615e15ed13c686b5afdb17ad1c8e37376;hb=d1fc251c5c5b58c0c81a499ebc9e56c96847478d;hp=fb0a316e9d00ac45e7b2db7f2379870a1f1639c8;hpb=5e0debf4c54c1e55476c1bc533c26db2b54d2f77;p=webi-installers%2F.git diff --git a/_webi/ua-detect.js b/_webi/ua-detect.js index fb0a316..426db69 100644 --- a/_webi/ua-detect.js +++ b/_webi/ua-detect.js @@ -1,5 +1,27 @@ 'use strict'; +function getRequest(req) { + var ua = req.headers['user-agent'] || ''; + var os = req.query.os; + var arch = req.query.arch; + var scheme = req.socket.encrypted ? 'https' : 'http'; + var host = req.headers.host || 'beta.webinstall.dev'; + var url = scheme + '://' + host + '/api/debug'; + if (os && arch) { + ua = os + ' ' + arch; + } else if (os || arch) { + ua = os || arch; + } + + return { + unix: 'curl -fsSA "$(uname -a)" ' + url, + windows: 'curl.exe -fsSA "MS $Env:PROCESSOR_ARCHITECTURE" ' + url, + ua: ua, + os: uaDetect.os(ua), + arch: uaDetect.arch(ua) + }; +} + function getOs(ua) { if ('-' === ua) { return '-'; @@ -10,10 +32,17 @@ function getOs(ua) { return 'android'; } else if (/iOS|iPhone|Macintosh|Darwin|OS\s*X|macOS|mac/i.test(ua)) { return 'macos'; - } else if (/Microsoft|Windows|win32|win|PowerShell/.test(ua)) { + } else if (/Linux/i.test(ua) && !/cygwin|msysgit/i.test(ua)) { + // It's the year of the Linux Desktop! + // See also http://www.mslinux.org/ + // 'linux' must be tested before 'Microsoft' because WSL + // (TODO: does this affect cygwin / msysgit?) + return 'linux'; + } else if (/^ms$|Microsoft|Windows|win32|win|PowerShell/i.test(ua)) { // 'win' must be tested after 'darwin' return 'windows'; } else if (/Linux|curl|wget/i.test(ua)) { + // test 'linux' again, after 'win' return 'linux'; } else { return 'error'; @@ -25,9 +54,13 @@ function getArch(ua) { return '-'; } - if (/arm64|arm8|armv8/i.test(ua)) { + // quick hack for Apple Silicon M1 + // Native: Darwin boomer.local 20.2.0 Darwin Kernel Version 20.2.0: Wed Dec 2 20:40:21 PST 2020; root:xnu-7195.60.75~1/RELEASE_ARM64_T8101 arm64 + // Resetta: Darwin boomer.local 20.2.0 Darwin Kernel Version 20.2.0: Wed Dec 2 20:40:21 PST 2020; root:xnu-7195.60.75~1/RELEASE_ARM64_T8101 x86_64 + ua = ua.replace(/xnu-.*RELEASE_[^\s]*/, '') + if (/aarch64|arm64|arm8|armv8/i.test(ua)) { return 'arm64'; - } else if (/arm7|armv7/i.test(ua)) { + } else if (/aarch|arm7|armv7/i.test(ua)) { return 'armv7l'; } else if (/arm6|armv6/i.test(ua)) { return 'armv6l'; @@ -49,5 +82,7 @@ function getArch(ua) { } } -module.exports.os = getOs; -module.exports.arch = getArch; +var uaDetect = module.exports; +uaDetect.os = getOs; +uaDetect.arch = getArch; +uaDetect.request = getRequest;