Use forms with or without client-side JavaScript--no code duplication required!
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 

56 satır
1.3 KiB

  1. import { IncomingMessage, ServerResponse } from 'http';
  2. import * as nookies from 'nookies';
  3. const COMMON_COOKIE_CONFIG = {
  4. path: '/',
  5. httpOnly: true,
  6. };
  7. const COMMON_SET_COOKIE_CONFIG = {
  8. ...COMMON_COOKIE_CONFIG,
  9. maxAge: 30 * 24 * 60 * 60,
  10. };
  11. const cookieKeys: Record<string, string> = {};
  12. export const BODY_COOKIE_KEY = 'b' as const;
  13. export const STATUS_CODE_COOKIE_KEY = 'sc' as const;
  14. export const STATUS_MESSAGE_COOKIE_KEY = 'sm' as const;
  15. export const CONTENT_TYPE_COOKIE_KEY = 'ct' as const;
  16. export class CookieManager {
  17. private readonly ctx: { req: IncomingMessage, res: ServerResponse<IncomingMessage> };
  18. constructor(ctx: { req: IncomingMessage, res: ServerResponse<IncomingMessage> }) {
  19. // noop
  20. this.ctx = ctx;
  21. }
  22. private static generateCookieKey(key: string) {
  23. return `if${key}${Date.now()}`;
  24. }
  25. setCookie(key: string, value: string) {
  26. nookies.setCookie(
  27. this.ctx,
  28. cookieKeys[key] = CookieManager.generateCookieKey(key),
  29. value,
  30. COMMON_SET_COOKIE_CONFIG,
  31. );
  32. }
  33. unsetCookie(key: string) {
  34. nookies.destroyCookie(this.ctx, cookieKeys[key], COMMON_COOKIE_CONFIG);
  35. }
  36. hasCookie(key: string) {
  37. const cookies = nookies.parseCookies(this.ctx);
  38. return cookieKeys[key] in cookies;
  39. }
  40. getCookie(key: string) {
  41. const cookies = nookies.parseCookies(this.ctx);
  42. return cookies[cookieKeys[key]];
  43. }
  44. }