UNPKG

shieldbearer

Version:

NPM package meticulously crafted to simplify JSON Web Token (JWT) operations in JavaScript projects

112 lines (87 loc) 2.78 kB
class SimpleTokenHandler { constructor() {} generateToken(object) { const _tokenHeader = this.generateHeader(); const _tokenBody = this.generateBody(object); const _tokenSignature = this.generateSignature(); const _token = _tokenHeader + "." + _tokenBody + "." + _tokenSignature; return _token; } decodeToken(token) { const _segments = token.split("."); const _decodedObject = this.decodeBody(_segments[1]); return _decodedObject; } validateToken(token) { const _segments = token.split("."); const _isValid = this.validateBody(_segments[1]); return _isValid; } validateRefreshToken(token) { const _segments = token.split("."); const _isValid = this.validateRefreshBody(_segments[1]); return _isValid; } generateHeader() { const _objectHeader = { alg: "custom", typ: "JWT" }; const _stringHeader = JSON.stringify(_objectHeader); const _base64Header = btoa(_stringHeader); return _base64Header; } generateBody(object) { // Calculate timestamps for rtt (now + 12h) and tto (now + 24h) const now = new Date(); const rtt = new Date(now.getTime() + 24 * 60 * 60 * 1000); const tto = new Date(now.getTime() + 12 * 60 * 60 * 1000); const _newObj = { ...object, rtt: rtt.getTime(), tto: tto.getTime(), }; const _stringBody = JSON.stringify(_newObj); const _base64Body = btoa(_stringBody); return _base64Body; } generateSignature() { const _objectSignature = { signTyp: "Secret Key" }; const _stringSignature = JSON.stringify(_objectSignature); const _base64Signature = btoa(_stringSignature); return _base64Signature; } decodeBody(stringBody) { const _stringBody = atob(stringBody); const _objectBody = JSON.parse(_stringBody); return _objectBody; } validateBody(stringBody) { try { const _stringBody = atob(stringBody); const _objectBody = JSON.parse(_stringBody); const _tokenTimeOut = _objectBody.tto; const currentTimestamp = Date.now(); if (_tokenTimeOut > currentTimestamp) { return true; } else { return false; } } catch (error) { throw error; } } validateRefreshBody(stringBody) { try { const _stringBody = atob(stringBody); const _objectBody = JSON.parse(_stringBody); const _tokenTimeOut = _objectBody.rtt; const currentTimestamp = Date.now(); if (_tokenTimeOut > currentTimestamp) { return true; } else { return false; } } catch (error) { throw error; } } } module.exports = SimpleTokenHandler;