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.
141 lines
2.7 KiB
141 lines
2.7 KiB
|
|
/** |
|
* headers.js |
|
* |
|
* Headers class offers convenient helpers |
|
*/ |
|
|
|
module.exports = Headers; |
|
|
|
/** |
|
* Headers class |
|
* |
|
* @param Object headers Response headers |
|
* @return Void |
|
*/ |
|
function Headers(headers) { |
|
|
|
var self = this; |
|
this._headers = {}; |
|
|
|
// Headers |
|
if (headers instanceof Headers) { |
|
headers = headers.raw(); |
|
} |
|
|
|
// plain object |
|
for (var prop in headers) { |
|
if (!headers.hasOwnProperty(prop)) { |
|
continue; |
|
} |
|
|
|
if (typeof headers[prop] === 'string') { |
|
this.set(prop, headers[prop]); |
|
|
|
} else if (typeof headers[prop] === 'number' && !isNaN(headers[prop])) { |
|
this.set(prop, headers[prop].toString()); |
|
|
|
} else if (Array.isArray(headers[prop])) { |
|
headers[prop].forEach(function(item) { |
|
self.append(prop, item.toString()); |
|
}); |
|
} |
|
} |
|
|
|
} |
|
|
|
/** |
|
* Return first header value given name |
|
* |
|
* @param String name Header name |
|
* @return Mixed |
|
*/ |
|
Headers.prototype.get = function(name) { |
|
var list = this._headers[name.toLowerCase()]; |
|
return list ? list[0] : null; |
|
}; |
|
|
|
/** |
|
* Return all header values given name |
|
* |
|
* @param String name Header name |
|
* @return Array |
|
*/ |
|
Headers.prototype.getAll = function(name) { |
|
if (!this.has(name)) { |
|
return []; |
|
} |
|
|
|
return this._headers[name.toLowerCase()]; |
|
}; |
|
|
|
/** |
|
* Iterate over all headers |
|
* |
|
* @param Function callback Executed for each item with parameters (value, name, thisArg) |
|
* @param Boolean thisArg `this` context for callback function |
|
* @return Void |
|
*/ |
|
Headers.prototype.forEach = function(callback, thisArg) { |
|
Object.getOwnPropertyNames(this._headers).forEach(function(name) { |
|
this._headers[name].forEach(function(value) { |
|
callback.call(thisArg, value, name, this) |
|
}, this) |
|
}, this) |
|
} |
|
|
|
/** |
|
* Overwrite header values given name |
|
* |
|
* @param String name Header name |
|
* @param String value Header value |
|
* @return Void |
|
*/ |
|
Headers.prototype.set = function(name, value) { |
|
this._headers[name.toLowerCase()] = [value]; |
|
}; |
|
|
|
/** |
|
* Append a value onto existing header |
|
* |
|
* @param String name Header name |
|
* @param String value Header value |
|
* @return Void |
|
*/ |
|
Headers.prototype.append = function(name, value) { |
|
if (!this.has(name)) { |
|
this.set(name, value); |
|
return; |
|
} |
|
|
|
this._headers[name.toLowerCase()].push(value); |
|
}; |
|
|
|
/** |
|
* Check for header name existence |
|
* |
|
* @param String name Header name |
|
* @return Boolean |
|
*/ |
|
Headers.prototype.has = function(name) { |
|
return this._headers.hasOwnProperty(name.toLowerCase()); |
|
}; |
|
|
|
/** |
|
* Delete all header values given name |
|
* |
|
* @param String name Header name |
|
* @return Void |
|
*/ |
|
Headers.prototype['delete'] = function(name) { |
|
delete this._headers[name.toLowerCase()]; |
|
}; |
|
|
|
/** |
|
* Return raw headers (non-spec api) |
|
* |
|
* @return Object |
|
*/ |
|
Headers.prototype.raw = function() { |
|
return this._headers; |
|
};
|
|
|