mirror of
https://github.com/khairul169/home-lab.git
synced 2025-04-28 16:49:36 +07:00
50 lines
1.1 KiB
TypeScript
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();
|
|
};
|