Add temporary user tokens (khanon/oai-reverse-proxy!42)

This commit is contained in:
khanon
2023-09-09 22:21:38 +00:00
parent 5728e235dc
commit 2a453ab657
27 changed files with 758 additions and 259 deletions
+24 -6
View File
@@ -2,7 +2,7 @@ import { Router } from "express";
import { z } from "zod";
import * as userStore from "../../shared/users/user-store";
import { parseSort, sortBy } from "../../shared/utils";
import { UserPartialSchema } from "../../shared/users/schema";
import { UserPartialSchema, UserSchema } from "../../shared/users/schema";
const router = Router();
@@ -30,11 +30,32 @@ router.get("/:token", (req, res) => {
/**
* Creates a new user.
* Optionally accepts a JSON body containing `type`, and for temporary-type
* users, `tokenLimits` and `expiresAt` fields.
* Returns the created user's token.
* POST /admin/users
*/
router.post("/", (req, res) => {
const token = userStore.createUser();
const body = req.body;
const base = z.object({
type: UserSchema.shape.type.exclude(["temporary"]).default("normal"),
});
const tempUser = base
.extend({
type: z.literal("temporary"),
expiresAt: UserSchema.shape.expiresAt,
tokenLimits: UserSchema.shape.tokenLimits,
})
.required();
const schema = z.union([base, tempUser]);
const result = schema.safeParse(body);
if (!result.success) {
return res.status(400).json({ error: result.error });
}
const token = userStore.createUser({ ...result.data });
res.json({ token });
});
@@ -68,10 +89,7 @@ router.put("/", (req, res) => {
return res.status(400).json({ error: result.error });
}
const upserts = result.data.map((user) => userStore.upsertUser(user));
res.json({
upserted_users: upserts,
count: upserts.length,
});
res.json({ upserted_users: upserts, count: upserts.length });
});
/**