"use strict";
const jwt = require("jwt-simple");
const winston = require("winston");
const constants = require("../../constants");
const environment = require("../../environment");
const commonUtils = require("../../utils/commonUtils");
/**
* Provides functions that are used in API and auth.
*
* @module routes/v1/utils
*/
module.exports = {
/**
* Generates a new access token for the given user.
* @param user {User}
* @return {{token: String, expires: number}}
* @see http://jonatan.nilsson.is/stateless-tokens-with-jwt/
*/
generateAccessToken: function (user) {
winston.debug("Generating access token for %j", {"user": user.toString()}, {});
const expires = commonUtils.expiresInDays(constants.accessTokenExpireDays);
/**
* @type TokenPayload
*/
const payload = {
userId: user.id,
expires: expires,
type: "access"
};
const token = jwt.encode(payload, environment.accessTokenSecret, environment.jwtAlgorithm);
return {
token: token,
expires: expires
};
},
/**
* Generates a new game token for the given user.
* @param user {User}
* @return {{token: String, expires: number}}
* @see http://jonatan.nilsson.is/stateless-tokens-with-jwt/
*/
generateGameToken: function (user) {
const expires = commonUtils.expiresInSeconds(constants.gameTokenExpireSeconds);
/**
* @type TokenPayload
*/
const payload = {
userId: user.id,
expires: expires,
type: "game"
};
const token = jwt.encode(payload, environment.gameTokenSecret, environment.jwtAlgorithm);
return {
token: token,
expires: expires
};
}
};
/**
* Body of a token generated by this backend.
*
* @typedef {Object} TokenPayload
* @property {number} expires - when does the token expire
* @property {string} userId - what is the user's id
* @property {string} type - type of the token.
*/