Name: js-handler/node_modules/restify/lib/plugins/date.js 
1:
// Copyright 2012 Mark Cavage, Inc.  All rights reserved.
2:
 
3:
var assert = require('assert-plus');
4:
 
5:
var errors = require('../errors');
6:
 
7:
 
8:
 
9:
///--- Globals
10:
 
11:
var InvalidHeaderError = errors.InvalidHeaderError;
12:
var RequestExpiredError = errors.RequestExpiredError;
13:
 
14:
var BAD_MSG = 'Date header is invalid';
15:
var OLD_MSG = 'Date header %s is too old';
16:
 
17:
 
18:
 
19:
///--- API
20:
 
21:
/**
22:
 * Returns a plugin that will parse the Date header (if present) and check for
23:
 * an "expired" request, where expired means the request originated at a time
24:
 * before ($now - $clockSkew). The default clockSkew allowance is 5m (thanks
25:
 * Kerberos!)
26:
 *
27:
 * @param {Number} clockSkew optional age of time (in seconds).
28:
 * @return {Function} restify handler.
29:
 * @throws {TypeError} on bad input
30:
 */
31:
function dateParser(clockSkew) {
32:
        if (!clockSkew)
33:
                clockSkew = 300;
34:
        assert.number(clockSkew, 'clockSkew');
35:
 
36:
        clockSkew = clockSkew * 1000;
37:
 
38:
        function parseDate(req, res, next) {
39:
                if (!req.headers.date)
40:
                        return (next());
41:
 
42:
                var e;
43:
                var date = req.headers.date;
44:
                var log = req.log;
45:
 
46:
                try {
47:
                        var now = Date.now();
48:
                        var sent = new Date(date).getTime();
49:
 
50:
                        if (log.trace()) {
51:
                                log.trace({
52:
                                        allowedSkew: clockSkew,
53:
                                        now: now,
54:
                                        sent: sent
55:
                                }, 'Checking clock skew');
56:
                        }
57:
 
58:
                        if ((now - sent) > clockSkew) {
59:
                                e = new RequestExpiredError(OLD_MSG, date);
60:
                                return (next(e));
61:
                        }
62:
 
63:
 
64:
                } catch (err) {
65:
                        log.trace({
66:
                                err: err
67:
                        }, 'Bad Date header: %s', date);
68:
 
69:
                        e = new InvalidHeaderError(BAD_MSG, date);
70:
                        return (next(e));
71:
                }
72:
 
73:
                return (next());
74:
        }
75:
 
76:
        return (parseDate);
77:
}
78:
 
79:
module.exports = dateParser;