UNPKG

@lucidcms/core

Version:

The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.

1 lines 2.63 kB
{"version":3,"file":"is-request-secure.mjs","names":[],"sources":["../../../src/utils/helpers/is-request-secure.ts"],"sourcesContent":["import type { LucidHonoContext } from \"../../types/hono.js\";\n\n/**\n * Parses an RFC 7239 Forwarded header and returns true when any entry declares\n * proto=https.\n */\nconst parseForwardedProto = (headerValue: string | undefined) => {\n\tif (!headerValue) return false;\n\n\tconst entries = headerValue.split(\",\");\n\tfor (const entry of entries) {\n\t\tconst parts = entry.split(\";\");\n\t\tfor (const part of parts) {\n\t\t\tconst [key, value] = part.split(\"=\");\n\t\t\tif (!key || !value) continue;\n\t\t\tif (key.trim().toLowerCase() !== \"proto\") continue;\n\n\t\t\tconst normalized = value\n\t\t\t\t.trim()\n\t\t\t\t.replace(/^[\"']|[\"']$/g, \"\")\n\t\t\t\t.toLowerCase();\n\t\t\treturn normalized === \"https\";\n\t\t}\n\t}\n\n\treturn false;\n};\n\n/**\n * Determines whether the incoming request should be treated as HTTPS when\n * running directly or behind common reverse proxy headers.\n */\nconst isRequestSecure = (c: LucidHonoContext) => {\n\tif (c.req.url.startsWith(\"https://\")) return true;\n\tif (!c.get(\"config\").http.security.trustProxyHeaders) return false;\n\n\tif (parseForwardedProto(c.req.header(\"Forwarded\"))) return true;\n\n\tconst forwardedProto = c.req.header(\"X-Forwarded-Proto\");\n\tif (forwardedProto) {\n\t\tconst first = forwardedProto.split(\",\")[0]?.trim().toLowerCase();\n\t\tif (first === \"https\") return true;\n\t}\n\n\tconst forwardedSsl = c.req.header(\"X-Forwarded-Ssl\");\n\tif (forwardedSsl?.trim().toLowerCase() === \"on\") return true;\n\n\tconst frontEndHttps = c.req.header(\"Front-End-Https\");\n\tif (frontEndHttps?.trim().toLowerCase() === \"on\") return true;\n\n\treturn false;\n};\n\nexport default isRequestSecure;\n"],"mappings":"AAMA,MAAM,EAAuB,GAAoC,CAChE,GAAI,CAAC,EAAa,MAAO,GAEzB,IAAM,EAAU,EAAY,MAAM,GAAG,EACrC,IAAK,IAAM,KAAS,EAAS,CAC5B,IAAM,EAAQ,EAAM,MAAM,GAAG,EAC7B,IAAK,IAAM,KAAQ,EAAO,CACzB,GAAM,CAAC,EAAK,GAAS,EAAK,MAAM,GAAG,EAC/B,MAAC,GAAO,CAAC,IACT,EAAI,KAAK,CAAC,CAAC,YAAY,IAAM,QAMjC,OAJmB,EACjB,KAAK,CAAC,CACN,QAAQ,eAAgB,EAAE,CAAC,CAC3B,YACc,IAAM,OACvB,CACD,CAEA,MAAO,EACR,EAMM,EAAmB,GAAwB,CAChD,GAAI,EAAE,IAAI,IAAI,WAAW,UAAU,EAAG,MAAO,GAC7C,GAAI,CAAC,EAAE,IAAI,QAAQ,CAAC,CAAC,KAAK,SAAS,kBAAmB,MAAO,GAE7D,GAAI,EAAoB,EAAE,IAAI,OAAO,WAAW,CAAC,EAAG,MAAO,GAE3D,IAAM,EAAiB,EAAE,IAAI,OAAO,mBAAmB,EAYvD,MAFA,GATI,GACW,EAAe,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,YAAY,IACjD,SAGM,EAAE,IAAI,OAAO,iBACnB,CAAC,EAAE,KAAK,CAAC,CAAC,YAAY,IAAM,MAErB,EAAE,IAAI,OAAO,iBACnB,CAAC,EAAE,KAAK,CAAC,CAAC,YAAY,IAAM,KAG7C"}