fix cache auth method
authorAlec Armbruster <35377827+alectrocute@users.noreply.github.com>
Fri, 30 Jun 2023 13:42:09 +0000 (09:42 -0400)
committerAlec Armbruster <35377827+alectrocute@users.noreply.github.com>
Fri, 30 Jun 2023 13:42:09 +0000 (09:42 -0400)
src/server/middleware.ts
src/server/utils/is-request-authenticated.ts [new file with mode: 0644]

index 235f07296cdc155ebf41d9d2389e8db0f2f20052..7505d6500afccc3c403444c6b1e567c05a70bc06 100644 (file)
@@ -1,5 +1,5 @@
 import type { NextFunction, Request, Response } from "express";
-import { UserService } from "../shared/services";
+import { isRequestAuthenticated } from "./utils/is-request-authenticated";
 
 export function setDefaultCsp({
   res,
@@ -22,23 +22,30 @@ export function setDefaultCsp({
 // interval is rather arbitrary and could be set higher (less server load) or lower (fresher data).
 //
 // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
-export function setCacheControl(
-  req: Request,
-  res: Response,
-  next: NextFunction
-) {
-  const user = UserService.Instance;
+export function setCacheControl({
+  res,
+  req,
+  next,
+}: {
+  res: Response;
+  req: Request;
+  next: NextFunction;
+}) {
   let caching: string;
 
+  // Avoid any sort of caching in development
+  if (process.env.NODE_ENV !== "production") {
+    return next();
+  }
+
   if (
-    process.env.NODE_ENV === "production" &&
-    (req.path.match(/\.(js|css|txt|manifest\.webmanifest)\/?$/) ||
-      req.path.includes("/css/themelist"))
+    req.path.match(/\.(js|css|txt|manifest\.webmanifest)\/?$/) ||
+    req.path.includes("/css/themelist")
   ) {
     // Static content gets cached publicly for a day
     caching = "public, max-age=86400";
   } else {
-    if (user.auth()) {
+    if (isRequestAuthenticated(req)) {
       caching = "private";
     } else {
       caching = "public, max-age=5";
diff --git a/src/server/utils/is-request-authenticated.ts b/src/server/utils/is-request-authenticated.ts
new file mode 100644 (file)
index 0000000..7b9fb22
--- /dev/null
@@ -0,0 +1,9 @@
+import type { Request } from "express";
+
+export function isRequestAuthenticated(req: Request): boolean {
+  if (!req.headers.cookie) {
+    return false;
+  }
+
+  return req.headers.cookie?.split("; ").some(c => c.startsWith("jwt"));
+}