You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
1.8 KiB
81 lines
1.8 KiB
'use strict'; |
|
|
|
var fs = require('fs'); |
|
var parse = require('parse-passwd'); |
|
|
|
function homedir() { |
|
// The following logic is from looking at logic used in the different platform |
|
// versions of the uv_os_homedir function found in https://github.com/libuv/libuv |
|
// This is the function used in modern versions of node.js |
|
|
|
if (process.platform === 'win32') { |
|
// check the USERPROFILE first |
|
if (process.env.USERPROFILE) { |
|
return process.env.USERPROFILE; |
|
} |
|
|
|
// check HOMEDRIVE and HOMEPATH |
|
if (process.env.HOMEDRIVE && process.env.HOMEPATH) { |
|
return process.env.HOMEDRIVE + process.env.HOMEPATH; |
|
} |
|
|
|
// fallback to HOME |
|
if (process.env.HOME) { |
|
return process.env.HOME; |
|
} |
|
|
|
return null; |
|
} |
|
|
|
// check HOME environment variable first |
|
if (process.env.HOME) { |
|
return process.env.HOME; |
|
} |
|
|
|
// on linux platforms (including OSX) find the current user and get their homedir from the /etc/passwd file |
|
var passwd = tryReadFileSync('/etc/passwd'); |
|
var home = find(parse(passwd), getuid()); |
|
if (home) { |
|
return home; |
|
} |
|
|
|
// fallback to using user environment variables |
|
var user = process.env.LOGNAME || process.env.USER || process.env.LNAME || process.env.USERNAME; |
|
|
|
if (!user) { |
|
return null; |
|
} |
|
|
|
if (process.platform === 'darwin') { |
|
return '/Users/' + user; |
|
} |
|
|
|
return '/home/' + user; |
|
} |
|
|
|
function find(arr, uid) { |
|
var len = arr.length; |
|
for (var i = 0; i < len; i++) { |
|
if (+arr[i].uid === uid) { |
|
return arr[i].homedir; |
|
} |
|
} |
|
} |
|
|
|
function getuid() { |
|
if (typeof process.geteuid === 'function') { |
|
return process.geteuid(); |
|
} |
|
return process.getuid(); |
|
} |
|
|
|
function tryReadFileSync(fp) { |
|
try { |
|
return fs.readFileSync(fp, 'utf8'); |
|
} catch (err) { |
|
return ''; |
|
} |
|
} |
|
|
|
module.exports = homedir; |
|
|
|
|