'use strict';
var Promise = require('lie');
/** @module thaliNotificationServer */
/**
* This class will register the path to retrieve beacons on the submitted
* router object.
*
* The constructor MUST NOT take any action. It can only record values.
*
* @param {Object} router An express router object that the class will use
* to register its path.
* @param {ECDH} ecdhForLocalDevice - A Crypto.ECDH object initialized with the
* local device's public and private keys
* @param {number} secondsUntilExpiration - The number of seconds into the
* future after which the beacons should expire.}
* @constructor
*/
function ThaliNotificationServer(router, ecdhForLocalDevice,
secondsUntilExpiration) {
}
/**
* When called for the first time on an instance of ThaliNotificationServer
* the route "/NotificationBeacons" MUST be registered on the submitted
* router object with a GET handler. Registration of the path on the router
* MUST occur at most once.
*
* If publicKeysToNotify is null then any GET requests on the endpoint MUST be
* responded to with 204 No Content per the
* [spec](https://github.com/thaliproject/thali/blob/gh-pages/pages/documentatio
* n/PresenceProtocolBindings.md#transferring-discovery-beacon-values-over-http)
* .
*
* Otherwise the endpoint MUST respond with an application/octet-stream
* content-type with cache-control: no-cache and a response body containing
* the properly generated beacon contents from
* {@link module:thaliNotificationBeacons.generatePreambleAndBeacons}.
*
* There MUST be logic in the endpoint to make sure that if requests/second for
* this endpoint exceed a set threshold then we MUST respond with a 503
* server overloaded. We MUST be careful when logging information about
* overloads to make sure we don't overload the log. Once the request rate
* for this endpoint has fallen below the threshold then we MUST start serving
* beacons (or 204s) again.
*
* Every time this method is called the beacons MUST be updated with the
* submitted value, including NULL to start returning 204s.
*
* The following error values MUST be used as appropriate:
*
* 'bad public keys' - This indicates that one or more of the public keys is
* of the wrong type or otherwise malformed and so it is not possible to use
* these keys to create beacons.
*
* @param {string[]} publicKeysToNotify - An array of strings holding base64 url
* safe encoded ECDH public keys
* @returns {Promise<?error>} Returns null if everything went fine otherwise
* returns an error object.
*/
ThaliNotificationServer.prototype.setBeacons = function (publicKeysToNotify) {
return new Promise();
};
module.exports.ThaliNotificationServer = ThaliNotificationServer;