This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community.
Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it.
https://www.freifunk-altdorf.de
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.7 KiB
81 lines
1.7 KiB
|
|
var util = require('util'); |
|
|
|
/** |
|
* Module exports. |
|
*/ |
|
|
|
exports.parse = parse; |
|
exports.format = format; |
|
|
|
/** |
|
* Parse extensions header value |
|
*/ |
|
|
|
function parse(value) { |
|
value = value || ''; |
|
|
|
var extensions = {}; |
|
|
|
value.split(',').forEach(function(v) { |
|
var params = v.split(';'); |
|
var token = params.shift().trim(); |
|
|
|
if (extensions[token] === undefined) { |
|
extensions[token] = []; |
|
} else if (!extensions.hasOwnProperty(token)) { |
|
return; |
|
} |
|
|
|
var parsedParams = {}; |
|
|
|
params.forEach(function(param) { |
|
var parts = param.trim().split('='); |
|
var key = parts[0]; |
|
var value = parts[1]; |
|
if (typeof value === 'undefined') { |
|
value = true; |
|
} else { |
|
// unquote value |
|
if (value[0] === '"') { |
|
value = value.slice(1); |
|
} |
|
if (value[value.length - 1] === '"') { |
|
value = value.slice(0, value.length - 1); |
|
} |
|
} |
|
|
|
if (parsedParams[key] === undefined) { |
|
parsedParams[key] = [value]; |
|
} else if (parsedParams.hasOwnProperty(key)) { |
|
parsedParams[key].push(value); |
|
} |
|
}); |
|
|
|
extensions[token].push(parsedParams); |
|
}); |
|
|
|
return extensions; |
|
} |
|
|
|
/** |
|
* Format extensions header value |
|
*/ |
|
|
|
function format(value) { |
|
return Object.keys(value).map(function(token) { |
|
var paramsList = value[token]; |
|
if (!util.isArray(paramsList)) { |
|
paramsList = [paramsList]; |
|
} |
|
return paramsList.map(function(params) { |
|
return [token].concat(Object.keys(params).map(function(k) { |
|
var p = params[k]; |
|
if (!util.isArray(p)) p = [p]; |
|
return p.map(function(v) { |
|
return v === true ? k : k + '=' + v; |
|
}).join('; '); |
|
})).join('; '); |
|
}).join(', '); |
|
}).join(', '); |
|
}
|
|
|