31 lines
674 B
CoffeeScript
31 lines
674 B
CoffeeScript
crypto = require('crypto')
|
|
base64url = require('base64-url')
|
|
config = require('./config')
|
|
|
|
salt = 'django.core.signing'
|
|
|
|
rsplit = (token, sep, maxsplit) ->
|
|
split = token.split(sep)
|
|
|
|
if maxsplit
|
|
return [ split.slice(0, -maxsplit).join(sep) ].concat(split.slice(-maxsplit))
|
|
|
|
return split
|
|
|
|
exports.verify = (token) ->
|
|
[value, sig] = rsplit(token, ':', 1)
|
|
|
|
shasum = crypto.createHash('sha1')
|
|
shasum.update(salt + 'signer' + config.secret)
|
|
|
|
hmacKey = shasum.digest()
|
|
|
|
hmac = crypto.createHmac('sha1', hmacKey)
|
|
|
|
hmac.setEncoding('base64')
|
|
hmac.update(value)
|
|
|
|
key = base64url.escape(hmac.digest('base64'))
|
|
|
|
return key == sig
|