summaryrefslogtreecommitdiffstats
path: root/_site/examples/cross-domain/csrf.js
blob: 4d85e70568505001871965f1d06d57b9525f8e5c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

// TODO - Write a better csrf module lol
// hacked this together for the tutorial

var crypto = require('crypto');

var generateToken = function(len) {
  return crypto.randomBytes(Math.ceil(len * 3 / 4))
    .toString('base64')
    .slice(0, len);
};
function defaultValue(req) {
  return (req.body && req.body._csrf)
    || (req.query && req.query._csrf)
    || (req.headers['x-csrf-token']);
}
var checkToken = function(req, res, next){
    var token = req.session._csrf || (req.session._csrf = generateToken(24));
    if ('GET' == req.method || 'HEAD' == req.method || 'OPTIONS' == req.method) return next();
    var val = defaultValue(req);
    if (val != token) return next(function(){
        res.send({auth: false});
    });
    next();
}
var newToken = function(req, res, next) {
  var token = req.session._csrf || (req.session._csrf = generateToken(24));
  next();
}
module.exports = {
    check: checkToken,
    generate: newToken 
};