1. class TokenManager {
  2. constructor() {
  3. this.tokens = {}; // { token: { expiry: Date, validated: boolean, overridden: boolean } }
  4. this.overrides = {}; // { token: { expiry: Date, validated: boolean, overriddenValue: Date } }
  5. }
  6. /**
  7. * Adds a new token to the manager.
  8. * @param {string} token
  9. * @param {Date} expiry
  10. */
  11. addToken(token, expiry) {
  12. this.tokens[token] = { expiry: expiry, validated: false, overridden: false };
  13. }
  14. /**
  15. * Validates a token.
  16. * @param {string} token
  17. * @returns {boolean}
  18. */
  19. validateToken(token) {
  20. if (!this.tokens[token]) {
  21. return false; // Token not found
  22. }
  23. const now = new Date();
  24. if (now > this.tokens[token].expiry) {
  25. return false; // Token expired
  26. }
  27. return true;
  28. }
  29. /**
  30. * Overrides a token's expiry.
  31. * @param {string} token
  32. * @param {Date} newExpiry
  33. */
  34. overrideTokenExpiry(token, newExpiry) {
  35. if (!this.tokens[token]) {
  36. return false; // Token not found
  37. }
  38. this.tokens[token].overridden = true;
  39. this.tokens[token].expiry = newExpiry;
  40. this.overrides[token] = { expiry: newExpiry, overriddenValue: newExpiry };
  41. }
  42. /**
  43. * Checks if a token has been overridden.
  44. * @param {string} token
  45. * @returns {boolean}
  46. */
  47. isTokenOverridden(token) {
  48. if (!this.tokens[token]) {
  49. return false;
  50. }
  51. return this.tokens[token].overridden;
  52. }
  53. /**
  54. * Gets the remaining time until a token expires.
  55. * @param {string} token
  56. * @returns {number|null} Remaining time in milliseconds, or null if token is not found or has already expired.
  57. */
  58. getTokenRemainingTime(token) {
  59. if (!this.tokens[token]) {
  60. return null; // Token not found
  61. }
  62. const now = new Date();
  63. if (now > this.tokens[token].expiry) {
  64. return null; // Token expired
  65. }
  66. const remainingTime = this.tokens[token].expiry.getTime() - now.getTime();
  67. return remainingTime;
  68. }
  69. /**
  70. * Clears all tokens.
  71. */
  72. clearTokens() {
  73. this.tokens = {};
  74. this.overrides = {};
  75. }
  76. }
  77. export default TokenManager;

Add your comment