bugfix(misc): fix kind, gprox, myip, pandoc
[webi-installers/.git] / _webi / ua-detect.js
index 89c18c8919d166d71d67aca0b778d8c6b788c6d3..6b972cb914b6b27e610027c19ee18a0d38f0860a 100644 (file)
@@ -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 '-';
@@ -32,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';
@@ -56,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;