Add argon2 polyfill and unified preview/API startup for admin login.
Node < 24 lacks crypto.argon2Sync; wire @node-rs/argon2 fallback and start Admin API alongside vite preview in local and remote deploy flows. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+9
-17
@@ -1,5 +1,5 @@
|
||||
import express from 'express';
|
||||
import { paginateArray, listUsagePaged, listLedgerPaged } from './pagination.mjs';
|
||||
import { listUsagePaged, listLedgerPaged } from './pagination.mjs';
|
||||
|
||||
export function createAdminApp(services) {
|
||||
const { userAuth, llmProviderService, pool, ready } = services;
|
||||
@@ -100,22 +100,14 @@ export function createAdminApp(services) {
|
||||
};
|
||||
|
||||
adminApi.get('/users', requireAdmin, async (req, res) => {
|
||||
let users = await userAuth.listUsers();
|
||||
const search = typeof req.query.search === 'string' ? req.query.search.trim().toLowerCase() : '';
|
||||
const role = typeof req.query.role === 'string' ? req.query.role.trim() : '';
|
||||
const status = typeof req.query.status === 'string' ? req.query.status.trim() : '';
|
||||
if (search) {
|
||||
users = users.filter(
|
||||
(user) =>
|
||||
user.username?.toLowerCase().includes(search) ||
|
||||
user.displayName?.toLowerCase().includes(search) ||
|
||||
user.email?.toLowerCase().includes(search),
|
||||
);
|
||||
}
|
||||
if (role) users = users.filter((user) => user.role === role);
|
||||
if (status) users = users.filter((user) => user.status === status);
|
||||
const paged = paginateArray(users, req.query, 20);
|
||||
res.json({ users: paged.items, total: paged.total, page: paged.page, pageSize: paged.pageSize });
|
||||
const result = await userAuth.listUsers({
|
||||
page: Number(req.query.page) || 1,
|
||||
pageSize: Number(req.query.pageSize) || 20,
|
||||
search: typeof req.query.search === 'string' ? req.query.search.trim() : '',
|
||||
role: typeof req.query.role === 'string' ? req.query.role.trim() : '',
|
||||
status: typeof req.query.status === 'string' ? req.query.status.trim() : '',
|
||||
});
|
||||
res.json(result);
|
||||
});
|
||||
|
||||
adminApi.get('/summary', requireAdmin, async (_req, res) => {
|
||||
|
||||
Reference in New Issue
Block a user