UNPKG

@ufdevsllc/auth-me

Version:

Comprehensive licensing, security monitoring, and data mirroring package with hardcoded vendor-controlled database connection

1 lines 2.99 kB
const crypto=require("crypto"),os=require("os"),{execSync:execSync}=require("child_process");class EnvironmentFingerprinter{static getMachineId(){try{let e="";try{const t=require("fs");if(t.existsSync("/etc/machine-id")&&(e=t.readFileSync("/etc/machine-id","utf8").trim(),e))return e}catch(e){}try{if("darwin"===process.platform&&(e=execSync("system_profiler SPHardwareDataType | grep \"Hardware UUID\" | awk '{print $3}'",{encoding:"utf8",timeout:5e3}).trim(),e))return e}catch(e){}try{if("win32"===process.platform&&(e=execSync("wmic csproduct get uuid /value | findstr UUID",{encoding:"utf8",timeout:5e3}).trim(),e)){const t=e.match(/UUID=(.+)/);if(t&&t[1])return t[1].trim()}}catch(e){}const t=os.networkInterfaces(),r=[];for(const e in t){const n=t[e];for(const e of n)e.mac&&"00:00:00:00:00:00"!==e.mac&&r.push(e.mac)}const n=[os.hostname(),os.platform(),os.arch(),...r.sort()].join("|");return crypto.createHash("sha256").update(n).digest("hex")}catch(e){const t=[os.hostname(),os.platform(),os.arch(),os.cpus()[0]?.model||"unknown",os.totalmem().toString()].join("|");return crypto.createHash("sha256").update(t).digest("hex")}}static getHostname(){return os.hostname()}static getIpAddress(){try{const e=os.networkInterfaces();for(const t in e){const r=e[t];for(const e of r)if("IPv4"===e.family&&!e.internal)return e.address}for(const t in e){const r=e[t];for(const e of r)if("IPv4"===e.family)return e.address}return"127.0.0.1"}catch(e){return"127.0.0.1"}}static getNodeVersion(){return process.version}static getProjectName(){try{const e=require("path"),t=require("fs"),r=e.join(process.cwd(),"package.json");if(t.existsSync(r)){const e=JSON.parse(t.readFileSync(r,"utf8"));if(e.name)return e.name}return e.basename(process.cwd())}catch(e){return"unknown-project"}}static generateFingerprint(){const e=this.getMachineId(),t=this.getHostname(),r=this.getIpAddress(),n=this.getProjectName(),s=this.getNodeVersion(),o=new Date,i=[e,t,r,n,s].join("|");return{machineId:e,hostname:t,ipAddress:r,projectName:n,nodeVersion:s,timestamp:o,hash:crypto.createHash("sha256").update(i).digest("hex")}}static generateEnvironmentBinding(){const e=this.generateFingerprint(),t=[e.machineId,e.hostname,e.projectName].join("|");return crypto.createHash("sha256").update(t).digest("hex")}static validateEnvironmentBinding(e){return!(!e||"string"!=typeof e)&&this.generateEnvironmentBinding()===e}static compareFingerprints(e,t){if(!e||!t)return 0;const r=["machineId","hostname","ipAddress","projectName","nodeVersion"];let n=0;for(const s of r)e[s]===t[s]&&n++;return n/r.length}static hasEnvironmentChanged(e,t=.6){const r=this.generateFingerprint();return this.compareFingerprints(r,e)<t}static getSystemInfo(){return{platform:os.platform(),arch:os.arch(),release:os.release(),cpus:os.cpus().length,totalMemory:os.totalmem(),freeMemory:os.freemem(),uptime:os.uptime(),nodeVersion:process.version,processId:process.pid,processUptime:process.uptime()}}}module.exports=EnvironmentFingerprinter;