# 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