feat: add API key expiry options (#7064)

* feat: add API key expiry options

* review
This commit is contained in:
Hemachandar
2024-06-19 07:04:45 +05:30
committed by GitHub
parent c04bedef4c
commit 3af9861c4a
20 changed files with 465 additions and 100 deletions

View File

@@ -4,7 +4,25 @@ import { getTestServer } from "@server/test/support";
const server = getTestServer();
describe("#apiKeys.create", () => {
it("should allow creating an api key", async () => {
it("should allow creating an api key with expiry", async () => {
const now = new Date();
const user = await buildUser();
const res = await server.post("/api/apiKeys.create", {
body: {
token: user.getJwtToken(),
name: "My API Key",
expiresAt: now.toISOString(),
},
});
const body = await res.json();
expect(res.status).toEqual(200);
expect(body.data.name).toEqual("My API Key");
expect(body.data.expiresAt).toEqual(now.toISOString());
});
it("should allow creating an api key without expiry", async () => {
const user = await buildUser();
const res = await server.post("/api/apiKeys.create", {
@@ -17,6 +35,7 @@ describe("#apiKeys.create", () => {
expect(res.status).toEqual(200);
expect(body.data.name).toEqual("My API Key");
expect(body.data.expiresAt).toBeNull();
});
it("should require authentication", async () => {
@@ -27,10 +46,12 @@ describe("#apiKeys.create", () => {
describe("#apiKeys.list", () => {
it("should return api keys of a user", async () => {
const now = new Date();
const user = await buildUser();
await buildApiKey({
name: "My API Key",
userId: user.id,
expiresAt: now,
});
const res = await server.post("/api/apiKeys.list", {
@@ -42,6 +63,7 @@ describe("#apiKeys.list", () => {
expect(res.status).toEqual(200);
expect(body.data[0].name).toEqual("My API Key");
expect(body.data[0].expiresAt).toEqual(now.toISOString());
});
it("should require authentication", async () => {

View File

@@ -18,7 +18,7 @@ router.post(
validate(T.APIKeysCreateSchema),
transaction(),
async (ctx: APIContext<T.APIKeysCreateReq>) => {
const { name } = ctx.input.body;
const { name, expiresAt } = ctx.input.body;
const { user } = ctx.state.auth;
const { transaction } = ctx.state;
@@ -27,6 +27,7 @@ router.post(
{
name,
userId: user.id,
expiresAt,
},
{ transaction }
);

View File

@@ -5,6 +5,8 @@ export const APIKeysCreateSchema = BaseSchema.extend({
body: z.object({
/** API Key name */
name: z.string(),
/** API Key expiry date */
expiresAt: z.coerce.date().optional(),
}),
});