UNPKG

@nuxthub/core

Version:

Build full-stack Nuxt applications on Cloudflare, with zero configuration.

64 lines (63 loc) 1.9 kB
import { getHeader, createError } from "h3"; import { $fetch } from "ofetch"; const localCache = /* @__PURE__ */ new Map(); export async function requireNuxtHubAuthorization(event) { if (import.meta.dev) { return; } const secretKeyOrUserToken = (getHeader(event, "authorization") || "").split(" ")[1]; if (!secretKeyOrUserToken) { throw createError({ statusCode: 403, message: "Missing Authorization header" }); } const env = event.context.cloudflare?.env || process.env || {}; const projectKey = env.NUXT_HUB_PROJECT_KEY; const projectSecretKey = env.NUXT_HUB_PROJECT_SECRET_KEY; if (projectSecretKey && secretKeyOrUserToken === projectSecretKey) { return; } else if (projectSecretKey && !projectKey) { throw createError({ statusCode: 401, message: "Invalid secret key" }); } if (projectKey) { if (localCache.has(secretKeyOrUserToken)) { return; } await $fetch(`/api/projects/${projectKey}`, { baseURL: env.NUXT_HUB_URL || "https://admin.hub.nuxt.com", method: "HEAD", headers: { authorization: `Bearer ${secretKeyOrUserToken}` } }).catch(() => { throw createError({ statusCode: 401, message: "Could not connect to project" }); }); localCache.set(secretKeyOrUserToken, true); return; } throw createError({ statusCode: 401, message: "Missing NUXT_HUB_PROJECT_SECRET_KEY environment variable or NUXT_HUB_PROJECT_KEY environment variable" }); } export function requireNuxtHubLinkedProject(hub, featureName) { if (!hub.projectKey) { throw createError({ statusCode: 500, message: `Missing hub.projectKey variable to use ${featureName}` }); } if (!hub.userToken) { throw createError({ statusCode: 500, message: `Missing hub.userToken variable to use ${featureName}` }); } }