50 lines
1.1 KiB
TypeScript

import type { Context, Next } from "hono";
import { HTTPException } from "hono/http-exception";
import * as jwt from "hono/jwt";
const JWT_SECRET =
process.env.JWT_SECRET || "75396f4ba17e0012d4511b8d4a5bae11c51008a3";
export const generateToken = async (data: any) => {
return jwt.sign(data, JWT_SECRET);
};
export const verifyToken = async (token: string) => {
return jwt.verify(token, JWT_SECRET);
};
export const authMiddleware = async (ctx: Context, next: Next) => {
const authHeader = ctx.req.raw.headers.get("Authorization");
const queryToken = ctx.req.query("token");
let token;
if (authHeader) {
const parts = authHeader.split(/\s+/);
if (parts.length !== 2) {
throw new HTTPException(401, { message: "Unauthorized!" });
} else {
token = parts[1];
}
}
if (queryToken) {
token = queryToken;
}
if (!token) {
throw new HTTPException(401, { message: "Unauthorized!" });
}
let payload;
try {
payload = await jwt.verify(token, JWT_SECRET);
} catch (e) {}
if (!payload) {
throw new HTTPException(401, { message: "Unauthorized!" });
}
ctx.set("jwtPayload", payload);
await next();
};