51 lines
1.2 KiB
CoffeeScript
51 lines
1.2 KiB
CoffeeScript
# node libraries
|
|
redis = (require 'redis')
|
|
crypto = (require 'crypto')
|
|
logger = (require 'logging').default 'session'
|
|
|
|
# expiry times in seconds
|
|
EXPIRY =
|
|
# games expire 1 week after last action
|
|
game: 1 * 60 * 60 * 24 * 7
|
|
# logins expire 1 month after last action
|
|
login: 1 * 60 * 60 * 24 * 7 * 4
|
|
|
|
|
|
FFTCGSESSION = () ->
|
|
@db = redis.createClient
|
|
host: 'redis'
|
|
port: 6379
|
|
|
|
@db.on 'error', (err) ->
|
|
logger.error err.message
|
|
|
|
return
|
|
|
|
FFTCGSESSION::start = (data) ->
|
|
that = @
|
|
|
|
new Promise (resolve) ->
|
|
# hash data
|
|
hmac = crypto.createHmac 'sha256', Math.random().toString()
|
|
hmac.update (JSON.stringify data)
|
|
digest = hmac.digest 'base64'
|
|
logger.debug 'digest', digest
|
|
|
|
# push (hash, data) into DB for the configured timespan
|
|
that.db.setex digest, EXPIRY.login, (JSON.stringify data), (err) ->
|
|
resolve digest
|
|
|
|
FFTCGSESSION::check = (digest) ->
|
|
that = @
|
|
|
|
new Promise (resolve, reject) ->
|
|
# refresh expiry timer on digest
|
|
that.db.expire digest, EXPIRY.login, (err, res) ->
|
|
if res == 0
|
|
reject null
|
|
|
|
else
|
|
that.db.get digest, (err, res) ->
|
|
resolve JSON.parse res
|
|
|
|
module.exports = FFTCGSESSION
|