mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-05-24 02:02:36 -04:00
Create auth middleware in elysia
This commit is contained in:
parent
50549f20de
commit
068b19c936
36
api/src/auth.ts
Normal file
36
api/src/auth.ts
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
import jwt from "@elysiajs/jwt";
|
||||||
|
import Elysia, { t } from "elysia";
|
||||||
|
|
||||||
|
export let jwtSecret = process.env.JWT_SECRET!;
|
||||||
|
if (!jwtSecret) {
|
||||||
|
const auth = process.env.AUTH_SERVER ?? "http://auth:4568/auth";
|
||||||
|
try {
|
||||||
|
const ret = await fetch(`${auth}/info`);
|
||||||
|
const info = await ret.json();
|
||||||
|
jwtSecret = info.publicKey;
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`Can't access auth server at ${auth}:\n${error}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const auth = new Elysia({ name: "auth" })
|
||||||
|
.use(jwt({ secret: jwtSecret }))
|
||||||
|
.guard({
|
||||||
|
headers: t.Object({
|
||||||
|
authorization: t.String({ pattern: "^Bearer .+$" }),
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
.macro({
|
||||||
|
permissions(perms: string[]) {
|
||||||
|
return {
|
||||||
|
beforeHandle: () => {},
|
||||||
|
resolve: async ({ headers: { authorization }, jwt }) => {
|
||||||
|
console.log(authorization.slice(7));
|
||||||
|
const user = await jwt.verify(authorization?.slice(7));
|
||||||
|
console.log("macro", user);
|
||||||
|
return { user };
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.as("plugin");
|
@ -50,7 +50,7 @@ export const base = new Elysia({ name: "base" })
|
|||||||
})
|
})
|
||||||
.as("plugin");
|
.as("plugin");
|
||||||
|
|
||||||
export const prefix = process.env.KYOO_PREFIX;
|
export const prefix = process.env.KYOO_PREFIX ?? "";
|
||||||
export const app = new Elysia({ prefix })
|
export const app = new Elysia({ prefix })
|
||||||
.use(base)
|
.use(base)
|
||||||
.use(showsH)
|
.use(showsH)
|
||||||
|
@ -1,25 +1,13 @@
|
|||||||
import jwt from "@elysiajs/jwt";
|
|
||||||
import { swagger } from "@elysiajs/swagger";
|
import { swagger } from "@elysiajs/swagger";
|
||||||
|
import { jwtSecret } from "./auth";
|
||||||
|
import { app } from "./base";
|
||||||
import { processImages } from "./controllers/seed/images";
|
import { processImages } from "./controllers/seed/images";
|
||||||
import { migrate } from "./db";
|
import { migrate } from "./db";
|
||||||
import { app } from "./base";
|
|
||||||
import { comment } from "./utils";
|
import { comment } from "./utils";
|
||||||
|
|
||||||
await migrate();
|
await migrate();
|
||||||
|
|
||||||
let secret = process.env.JWT_SECRET;
|
if (!jwtSecret) {
|
||||||
if (!secret) {
|
|
||||||
const auth = process.env.AUTH_SERVER ?? "http://auth:4568/auth";
|
|
||||||
try {
|
|
||||||
const ret = await fetch(`${auth}/info`);
|
|
||||||
const info = await ret.json();
|
|
||||||
secret = info.publicKey;
|
|
||||||
} catch (error) {
|
|
||||||
console.error(`Can't access auth server at ${auth}:\n${error}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!secret) {
|
|
||||||
console.error("Missing jwt secret or auth server. exiting");
|
console.error("Missing jwt secret or auth server. exiting");
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
@ -76,7 +64,6 @@ app
|
|||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.use(jwt({ secret }))
|
|
||||||
.listen(3567);
|
.listen(3567);
|
||||||
|
|
||||||
console.log(`Api running at ${app.server?.hostname}:${app.server?.port}`);
|
console.log(`Api running at ${app.server?.hostname}:${app.server?.port}`);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user