52 lines
1.4 KiB
TypeScript
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();
|
|
};
|