@nuxthub/core
Version:
Build full-stack Nuxt applications on Cloudflare, with zero configuration.
64 lines (63 loc) • 1.9 kB
JavaScript
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}`
});
}
}