xtablo-source/api/src/middleware.ts
2025-07-03 21:42:49 +02:00

52 lines
1.4 KiB
TypeScript

import { createClient, type User } from "@supabase/supabase-js";
import type { Context, Next } from "hono";
import nodemailer from "nodemailer";
// Create authentication middleware
export const authMiddleware = async (c: Context, next: Next) => {
const supabase = c.get("supabase");
// Extract Bearer token from Authorization header
const authHeader = c.req.header("Authorization");
if (!authHeader || !authHeader.startsWith("Bearer ")) {
return c.json({ error: "Missing or invalid authorization header" }, 401);
}
const token = authHeader.substring(7); // Remove "Bearer " prefix
const {
data: { user },
error,
} = await supabase.auth.getUser(token);
if (error || !user) {
return c.json({ error: "Invalid or expired token" }, 401);
}
const userTyped = user as User;
c.set("user", userTyped);
await next();
};
export const supabaseMiddleware = async (c: Context, next: Next) => {
const supabase = createClient(
process.env.SUPABASE_URL as string,
process.env.SUPABASE_SERVICE_ROLE_KEY as string
);
c.set("supabase", supabase);
await next();
};
export const emailMiddleware = async (c: Context, next: Next) => {
const transporter = nodemailer.createTransport({
host: "smtp.gmail.com",
port: 465,
secure: true,
auth: {
user: process.env.EMAIL_USER,
pass: process.env.EMAIL_KEY,
},
});
c.set("transporter", transporter);
await next();
};