68 lines
1.6 KiB
JavaScript
68 lines
1.6 KiB
JavaScript
|
// commands for handling umask
|
||
|
|
||
|
var util = require("util")
|
||
|
var log = require("npmlog")
|
||
|
|
||
|
var defaultUmask = 0022
|
||
|
var defaultUmaskString = toString(defaultUmask)
|
||
|
|
||
|
exports.toString = toString
|
||
|
exports.fromString = fromString
|
||
|
exports.validate = validate
|
||
|
|
||
|
function toString(val) {
|
||
|
val = val.toString(8)
|
||
|
while (val.length < 4) val = "0" + val
|
||
|
return val
|
||
|
}
|
||
|
|
||
|
function validate (data, k, val) {
|
||
|
// must be either an integer or an octal string.
|
||
|
if (typeof val === "number") {
|
||
|
data[k] = val
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
if (typeof val === "string") {
|
||
|
if (val.charAt(0) !== "0" || isNaN(val)) return false
|
||
|
data[k] = parseInt(val, 8)
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
function fromString(val, cb) {
|
||
|
|
||
|
// synchronous callback, no zalgo
|
||
|
_fromString(val, cb || function (err, result) {
|
||
|
|
||
|
if (err) log.warn("invalid umask", err.message)
|
||
|
val = result
|
||
|
})
|
||
|
|
||
|
return val
|
||
|
}
|
||
|
|
||
|
function _fromString(val, cb) {
|
||
|
if(typeof val === "string") {
|
||
|
if (!/^[0-7]+$/.test(val)) {
|
||
|
return cb(new Error(util.format("Expected octal string, got %j, defaulting to %j",
|
||
|
val, defaultUmaskString)),
|
||
|
defaultUmask)
|
||
|
}
|
||
|
|
||
|
val = parseInt(val, 8)
|
||
|
} else if(typeof val !== "number") {
|
||
|
return cb(new Error(util.format("Expected number or octal string, got %j, defaulting to %j",
|
||
|
val, defaultUmaskString)),
|
||
|
defaultUmask)
|
||
|
}
|
||
|
|
||
|
if ((val < 0) || (val > 511)) {
|
||
|
return cb(new Error(util.format("Must be in range 0..511 (0000..0777), got %j", val)),
|
||
|
defaultUmask)
|
||
|
}
|
||
|
|
||
|
cb(null, val)
|
||
|
}
|