@agentcairn/mcp-server 0.1.5 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/authn.d.ts +7 -1
- package/dist/authn.js +34 -8
- package/dist/authn.js.map +1 -1
- package/dist/context.d.ts +9 -2
- package/dist/context.js +48 -10
- package/dist/context.js.map +1 -1
- package/dist/dashboard.js +305 -21
- package/dist/dashboard.js.map +1 -1
- package/dist/http.js +51 -9
- package/dist/http.js.map +1 -1
- package/dist/security.d.ts +2 -0
- package/dist/security.js +6 -0
- package/dist/security.js.map +1 -1
- package/dist/serve.js +3 -3
- package/dist/serve.js.map +1 -1
- package/dist/server.d.ts +2 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/dist/tools.d.ts +1 -1
- package/dist/tools.js +81 -6
- package/dist/tools.js.map +1 -1
- package/package.json +2 -2
- package/ui/css/app.css +27 -1
- package/ui/js/app.js +18 -4
- package/ui/js/dom.js +39 -1
- package/ui/js/views/access.js +10 -4
- package/ui/js/views/audit.js +77 -0
- package/ui/js/views/auth.js +7 -8
- package/ui/js/views/graph.js +123 -18
- package/ui/js/views/invite.js +50 -0
- package/ui/js/views/project.js +162 -10
- package/ui/js/views/projects.js +8 -6
- package/ui/js/views/users.js +235 -0
package/dist/dashboard.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { readFile } from 'node:fs/promises';
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { extname, join, normalize, sep } from 'node:path';
|
|
4
|
-
import { AdminError, MEMORY_KINDS, QueryRejectedError, changeAdminPassword, checkConnection, countActiveTokens, countAdmins, createApiToken, createFirstAdmin, deleteProject,
|
|
4
|
+
import { AdminError, InviteError, MEMORY_KINDS, QueryRejectedError, accessibleProjectIds, acceptInvite, authorize, changeAdminPassword, checkConnection, countActiveTokens, countActiveUsers, countAdmins, createApiToken, createFirstAdmin, createInvite, createProject, deleteProject, findAccessibleProject, getGraph, getMemory, getMemoryChain, getProjectDetail, ensureSchema, getSystemInfo, getUserByUsername, hasDefaultCredentials, isProjectRole, listApiTokens, listAudit, listInvites, listMembers, listProjects, listSessions, listUserOverview, loadConfig, migrateUsers, previewInvite, principalOf, projectRoles, recordAudit, removeMembership, removeUser, revokeInvite, setMembership, setUserLimits, setUserRole, setUserStatus, transferOwnership, recall, revokeApiToken, runReadOnlyCypher, schemaVersion, tidySystemNodes, verifyAdmin, } from '@agentcairn/core';
|
|
5
5
|
import { RateLimiter, SESSION_COOKIE, clearedSessionCookie, parseCookies, sameOrigin, sessionCookie, setupBanner, } from './security.js';
|
|
6
6
|
import { HttpError, asRecord, clientIp, readJson, send } from './util.js';
|
|
7
7
|
const MIME = {
|
|
@@ -40,6 +40,8 @@ export function createDashboard(deps) {
|
|
|
40
40
|
const loginByIp = new RateLimiter(10, 10 * 60_000);
|
|
41
41
|
const loginByUser = new RateLimiter(5, 10 * 60_000);
|
|
42
42
|
const setupGuesses = new RateLimiter(5, 10 * 60_000);
|
|
43
|
+
const inviteLookups = new RateLimiter(40, 10 * 60_000);
|
|
44
|
+
const inviteAccepts = new RateLimiter(12, 10 * 60_000);
|
|
43
45
|
let adminCache;
|
|
44
46
|
const adminCount = async () => {
|
|
45
47
|
if (adminCache && adminCache.until > Date.now())
|
|
@@ -57,6 +59,27 @@ export function createDashboard(deps) {
|
|
|
57
59
|
function sessionOf(req) {
|
|
58
60
|
return sessions.get(parseCookies(req)[SESSION_COOKIE]);
|
|
59
61
|
}
|
|
62
|
+
/** Who a signed-in dashboard session acts as. Looked up (briefly cached) so a disabled account loses access quickly. */
|
|
63
|
+
const principals = new Map();
|
|
64
|
+
async function principalFor(username) {
|
|
65
|
+
const cached = principals.get(username);
|
|
66
|
+
if (cached && cached.until > Date.now()) {
|
|
67
|
+
if (cached.principal)
|
|
68
|
+
return cached.principal;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
const user = await getUserByUsername(brain, username);
|
|
72
|
+
const principal = user && user.status === 'active' ? principalOf(user, (await countActiveUsers(brain)) <= 1) : null;
|
|
73
|
+
principals.set(username, { principal, until: Date.now() + 3000 });
|
|
74
|
+
if (principal)
|
|
75
|
+
return principal;
|
|
76
|
+
}
|
|
77
|
+
throw new HttpError(401, 'login_required', 'Sign in first.');
|
|
78
|
+
}
|
|
79
|
+
const requireAdmin = (principal) => {
|
|
80
|
+
if (principal.role !== 'admin')
|
|
81
|
+
throw new HttpError(403, 'forbidden', 'Only an admin can do that.');
|
|
82
|
+
};
|
|
60
83
|
async function serveStatic(res, path) {
|
|
61
84
|
const vendored = vendor[path];
|
|
62
85
|
let file;
|
|
@@ -96,11 +119,15 @@ export function createDashboard(deps) {
|
|
|
96
119
|
if (route === 'state' && method === 'GET') {
|
|
97
120
|
await ensureSetupGate();
|
|
98
121
|
const session = sessionOf(req);
|
|
122
|
+
const me = session ? await principalFor(session.username).catch(() => null) : null;
|
|
99
123
|
return send(res, 200, {
|
|
100
124
|
version: deps.version,
|
|
101
125
|
setupRequired: (await adminCount()) === 0,
|
|
102
|
-
authenticated: Boolean(session),
|
|
103
|
-
username: session
|
|
126
|
+
authenticated: Boolean(session && me),
|
|
127
|
+
username: me ? session.username : null,
|
|
128
|
+
userId: me?.userId ?? null,
|
|
129
|
+
role: me?.role ?? null,
|
|
130
|
+
solo: me?.solo ?? true,
|
|
104
131
|
});
|
|
105
132
|
}
|
|
106
133
|
if (route === 'setup' && method === 'POST') {
|
|
@@ -115,11 +142,15 @@ export function createDashboard(deps) {
|
|
|
115
142
|
throw new HttpError(403, 'bad_code', 'That setup code is not right.');
|
|
116
143
|
try {
|
|
117
144
|
const admin = await createFirstAdmin(brain, String(body.username ?? ''), String(body.password ?? ''));
|
|
145
|
+
// projects made before there were accounts now belong to the first admin
|
|
146
|
+
await migrateUsers(brain);
|
|
147
|
+
auth.invalidate();
|
|
118
148
|
setup.close();
|
|
119
149
|
adminCache = undefined;
|
|
120
150
|
setupGuesses.reset(ip);
|
|
121
151
|
const s = sessions.create(admin.username);
|
|
122
152
|
deps.log(`dashboard: admin "${admin.username}" created`);
|
|
153
|
+
void recordAudit(brain, { actor: admin.username, action: 'setup.completed' });
|
|
123
154
|
// the first-setup lock has done its job; remove it once any racing attempts are finished with it
|
|
124
155
|
setTimeout(() => void tidySystemNodes(brain).catch(() => undefined), 3000).unref();
|
|
125
156
|
return send(res, 200, { username: admin.username }, { 'set-cookie': cookieFor(s.id, s.maxAgeSeconds) });
|
|
@@ -138,12 +169,56 @@ export function createDashboard(deps) {
|
|
|
138
169
|
throw new HttpError(429, 'rate_limited', `Too many attempts. Try again in ${Math.max(loginByIp.retryAfterSeconds(ip), loginByUser.retryAfterSeconds(username))}s.`);
|
|
139
170
|
}
|
|
140
171
|
const admin = await verifyAdmin(brain, username, String(body.password ?? ''));
|
|
141
|
-
if (!admin)
|
|
172
|
+
if (!admin) {
|
|
173
|
+
void recordAudit(brain, { actor: null, action: 'login.failed', target: username.slice(0, 64) });
|
|
142
174
|
throw new HttpError(401, 'bad_credentials', 'Wrong username or password.');
|
|
175
|
+
}
|
|
143
176
|
loginByUser.reset(username);
|
|
177
|
+
void recordAudit(brain, { actor: admin.username, action: 'login' });
|
|
144
178
|
const s = sessions.create(admin.username);
|
|
145
179
|
return send(res, 200, { username: admin.username }, { 'set-cookie': cookieFor(s.id, s.maxAgeSeconds) });
|
|
146
180
|
}
|
|
181
|
+
// ---- invitations: the link is the credential, so these are public and rate limited --------
|
|
182
|
+
const inviteMatch = /^invite\/([^/]+)(\/accept)?$/.exec(route);
|
|
183
|
+
if (inviteMatch) {
|
|
184
|
+
const token = decodeURIComponent(inviteMatch[1]);
|
|
185
|
+
if (method === 'GET' && !inviteMatch[2]) {
|
|
186
|
+
if (!inviteLookups.attempt(ip))
|
|
187
|
+
throw new HttpError(429, 'rate_limited', 'Too many attempts. Try again in a few minutes.');
|
|
188
|
+
const info = await previewInvite(brain, token);
|
|
189
|
+
if (!info)
|
|
190
|
+
throw new HttpError(404, 'invite_gone', 'This invitation is not valid: it was used, withdrawn or has expired.');
|
|
191
|
+
return send(res, 200, {
|
|
192
|
+
kind: info.kind,
|
|
193
|
+
role: info.role,
|
|
194
|
+
username: info.username,
|
|
195
|
+
forUsername: info.forUsername,
|
|
196
|
+
grants: info.grants.map(g => ({ projectName: g.projectName, role: g.role })),
|
|
197
|
+
invitedBy: info.createdBy,
|
|
198
|
+
expiresAt: info.expiresAt,
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
if (method === 'POST' && inviteMatch[2]) {
|
|
202
|
+
if (!inviteAccepts.attempt(ip))
|
|
203
|
+
throw new HttpError(429, 'rate_limited', 'Too many attempts. Try again in a few minutes.');
|
|
204
|
+
const body = asRecord(await readJson(req, deps.maxBodyBytes));
|
|
205
|
+
try {
|
|
206
|
+
const user = await acceptInvite(brain, token, { username: typeof body.username === 'string' ? body.username : undefined, password: String(body.password ?? '') });
|
|
207
|
+
sessions.destroyUser(user.username);
|
|
208
|
+
auth.invalidate();
|
|
209
|
+
principals.delete(user.username);
|
|
210
|
+
void recordAudit(brain, { actor: user.username, action: 'invite.accepted', target: user.username });
|
|
211
|
+
const s = sessions.create(user.username);
|
|
212
|
+
return send(res, 200, { username: user.username }, { 'set-cookie': cookieFor(s.id, s.maxAgeSeconds) });
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
if (error instanceof InviteError) {
|
|
216
|
+
throw new HttpError(error.code === 'gone' ? 410 : error.code === 'taken' ? 409 : 400, error.code === 'gone' ? 'invite_gone' : error.code === 'taken' ? 'username_taken' : 'invalid', error.message);
|
|
217
|
+
}
|
|
218
|
+
throw error;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
147
222
|
if (route === 'logout' && method === 'POST') {
|
|
148
223
|
sessions.destroy(parseCookies(req)[SESSION_COOKIE]);
|
|
149
224
|
return send(res, 200, { ok: true }, { 'set-cookie': clearedSessionCookie(deps.secureCookies) });
|
|
@@ -152,6 +227,8 @@ export function createDashboard(deps) {
|
|
|
152
227
|
const session = sessionOf(req);
|
|
153
228
|
if (!session)
|
|
154
229
|
throw new HttpError(401, 'login_required', 'Sign in first.');
|
|
230
|
+
const principal = await principalFor(session.username);
|
|
231
|
+
const isAdmin = principal.role === 'admin';
|
|
155
232
|
if (route === 'password' && method === 'POST') {
|
|
156
233
|
const body = asRecord(await readJson(req, deps.maxBodyBytes));
|
|
157
234
|
if (!loginByUser.attempt(`pw:${session.username}`))
|
|
@@ -166,6 +243,7 @@ export function createDashboard(deps) {
|
|
|
166
243
|
throw new HttpError(400, 'invalid', error.message);
|
|
167
244
|
throw error;
|
|
168
245
|
}
|
|
246
|
+
void recordAudit(brain, { actor: session.username, action: 'password.changed' });
|
|
169
247
|
sessions.clear();
|
|
170
248
|
const s = sessions.create(session.username);
|
|
171
249
|
return send(res, 200, { ok: true }, { 'set-cookie': cookieFor(s.id, s.maxAgeSeconds) });
|
|
@@ -174,20 +252,21 @@ export function createDashboard(deps) {
|
|
|
174
252
|
const started = Date.now();
|
|
175
253
|
const info = await checkConnection(brain);
|
|
176
254
|
const pingMs = Date.now() - started;
|
|
177
|
-
const projects = await listProjects(brain);
|
|
255
|
+
const projects = await listProjects(brain, { projectIds: await accessibleProjectIds(brain, principal) });
|
|
178
256
|
return send(res, 200, {
|
|
179
|
-
stats: events.stats(),
|
|
257
|
+
stats: isAdmin ? events.stats() : null,
|
|
180
258
|
db: {
|
|
181
259
|
projects: projects.length,
|
|
182
260
|
memories: projects.reduce((a, p) => a + p.active, 0),
|
|
183
261
|
superseded: projects.reduce((a, p) => a + p.superseded, 0),
|
|
184
|
-
tokens: await countActiveTokens(brain),
|
|
262
|
+
tokens: isAdmin ? await countActiveTokens(brain) : (await listApiTokens(brain, { createdBy: principal.username })).filter(t => !t.revokedAt).length,
|
|
185
263
|
},
|
|
186
|
-
neo4j: { agent: info.agent, address: info.address, pingMs },
|
|
264
|
+
neo4j: isAdmin ? { agent: info.agent, address: info.address, pingMs } : null,
|
|
187
265
|
server: { version: deps.version },
|
|
188
266
|
});
|
|
189
267
|
}
|
|
190
268
|
if (route === 'events' && method === 'GET') {
|
|
269
|
+
requireAdmin(principal);
|
|
191
270
|
const ok = q.get('ok');
|
|
192
271
|
return send(res, 200, {
|
|
193
272
|
events: events.recent({
|
|
@@ -203,40 +282,230 @@ export function createDashboard(deps) {
|
|
|
203
282
|
}
|
|
204
283
|
const eventMatch = /^events\/(\d+)$/.exec(route);
|
|
205
284
|
if (eventMatch && method === 'GET') {
|
|
285
|
+
requireAdmin(principal);
|
|
206
286
|
const event = events.get(Number(eventMatch[1]));
|
|
207
287
|
if (!event)
|
|
208
288
|
throw new HttpError(404, 'not_found', 'That event has aged out of the buffer.');
|
|
209
289
|
return send(res, 200, event);
|
|
210
290
|
}
|
|
211
|
-
if (route === 'stream' && method === 'GET')
|
|
291
|
+
if (route === 'stream' && method === 'GET') {
|
|
292
|
+
requireAdmin(principal);
|
|
212
293
|
return stream(req, res);
|
|
213
|
-
|
|
214
|
-
|
|
294
|
+
}
|
|
295
|
+
if (route === 'projects' && method === 'GET') {
|
|
296
|
+
const roles = await projectRoles(brain, principal);
|
|
297
|
+
const list = await listProjects(brain, { projectIds: await accessibleProjectIds(brain, principal) });
|
|
298
|
+
return send(res, 200, { projects: list.map(p => ({ ...p, role: roles.get(p.id) ?? (principal.solo ? 'owner' : null) })) });
|
|
299
|
+
}
|
|
215
300
|
if (route === 'projects' && method === 'POST') {
|
|
216
|
-
const
|
|
217
|
-
|
|
218
|
-
throw new HttpError(400, 'invalid', 'Project id: letters, digits, ".", "_" or "-", up to 64 characters.');
|
|
301
|
+
const body = asRecord(await readJson(req, deps.maxBodyBytes));
|
|
302
|
+
const name = String(body.name ?? body.id ?? '').trim();
|
|
219
303
|
await ensureSchema(brain);
|
|
220
|
-
|
|
304
|
+
// a name you already own is the same project, not a second one
|
|
305
|
+
const existing = await findAccessibleProject(brain, principal, name).catch(() => null);
|
|
306
|
+
const owned = existing && (await authorize(brain, principal, 'project.delete', existing.id).then(() => true, () => false));
|
|
307
|
+
if (existing && owned)
|
|
308
|
+
return send(res, 200, { id: existing.id, name: existing.name, created: false });
|
|
309
|
+
const made = await createProject(brain, principal.userId, name);
|
|
310
|
+
void recordAudit(brain, { actor: principal.username, action: 'project.created', target: made.name });
|
|
311
|
+
return send(res, 200, { id: made.id, name: made.name, created: true });
|
|
221
312
|
}
|
|
222
313
|
const projectMatch = /^projects\/([^/]+)$/.exec(route);
|
|
223
314
|
if (projectMatch && method === 'GET') {
|
|
315
|
+
await authorize(brain, principal, 'memory.read', decodeURIComponent(projectMatch[1]));
|
|
224
316
|
const detail = await getProjectDetail(brain, decodeURIComponent(projectMatch[1]));
|
|
225
317
|
if (!detail)
|
|
226
318
|
throw new HttpError(404, 'not_found', 'No such project.');
|
|
227
|
-
|
|
319
|
+
const role = (await projectRoles(brain, principal)).get(detail.id) ?? (principal.solo ? 'owner' : null);
|
|
320
|
+
return send(res, 200, { ...detail, role });
|
|
228
321
|
}
|
|
229
322
|
if (projectMatch && method === 'DELETE') {
|
|
230
323
|
const id = decodeURIComponent(projectMatch[1]);
|
|
324
|
+
await authorize(brain, principal, 'project.delete', id);
|
|
325
|
+
const label = (await getProjectDetail(brain, id))?.name ?? id;
|
|
231
326
|
const gone = await deleteProject(brain, id);
|
|
232
327
|
if (!gone)
|
|
233
328
|
throw new HttpError(404, 'not_found', 'No such project.');
|
|
329
|
+
void recordAudit(brain, { actor: principal.username, action: 'project.deleted', target: label, detail: `${gone.memories} memories` });
|
|
234
330
|
return send(res, 200, { id, ...gone });
|
|
235
331
|
}
|
|
332
|
+
const membersMatch = /^projects\/([^/]+)\/members(?:\/([^/]+))?$/.exec(route);
|
|
333
|
+
if (membersMatch) {
|
|
334
|
+
const id = decodeURIComponent(membersMatch[1]);
|
|
335
|
+
const userId = membersMatch[2] ? decodeURIComponent(membersMatch[2]) : undefined;
|
|
336
|
+
const projectName = async () => (await getProjectDetail(brain, id))?.name ?? id;
|
|
337
|
+
const usernameOf = async (uid) => (await listMembers(brain, id)).find(m => m.userId === uid)?.username ?? uid;
|
|
338
|
+
if (method === 'GET' && !userId) {
|
|
339
|
+
await authorize(brain, principal, 'memory.read', id);
|
|
340
|
+
return send(res, 200, { members: await listMembers(brain, id) });
|
|
341
|
+
}
|
|
342
|
+
if (method === 'POST' && !userId) {
|
|
343
|
+
await authorize(brain, principal, 'member.manage', id);
|
|
344
|
+
const body = asRecord(await readJson(req, deps.maxBodyBytes));
|
|
345
|
+
const role = body.role;
|
|
346
|
+
if (!isProjectRole(role) || role === 'owner')
|
|
347
|
+
throw new HttpError(400, 'invalid', 'Role must be viewer, editor or maintainer.');
|
|
348
|
+
const target = await getUserByUsername(brain, String(body.username ?? ''));
|
|
349
|
+
if (!target || target.status !== 'active')
|
|
350
|
+
throw new HttpError(404, 'no_such_user', 'No such user. Ask an admin to invite them first.');
|
|
351
|
+
await setMembership(brain, id, target.id, role);
|
|
352
|
+
void recordAudit(brain, { actor: principal.username, action: 'member.added', target: await projectName(), detail: `${target.username} as ${role}` });
|
|
353
|
+
return send(res, 200, { members: await listMembers(brain, id) });
|
|
354
|
+
}
|
|
355
|
+
if (method === 'PUT' && userId) {
|
|
356
|
+
await authorize(brain, principal, 'member.manage', id);
|
|
357
|
+
const role = asRecord(await readJson(req, deps.maxBodyBytes)).role;
|
|
358
|
+
if (!isProjectRole(role) || role === 'owner')
|
|
359
|
+
throw new HttpError(400, 'invalid', 'Role must be viewer, editor or maintainer.');
|
|
360
|
+
await setMembership(brain, id, userId, role);
|
|
361
|
+
void recordAudit(brain, { actor: principal.username, action: 'member.changed', target: await projectName(), detail: `${await usernameOf(userId)} is now ${role}` });
|
|
362
|
+
return send(res, 200, { members: await listMembers(brain, id) });
|
|
363
|
+
}
|
|
364
|
+
if (method === 'DELETE' && userId) {
|
|
365
|
+
// you may always leave a project; removing someone else needs member.manage
|
|
366
|
+
const leaving = userId === principal.userId;
|
|
367
|
+
if (!leaving)
|
|
368
|
+
await authorize(brain, principal, 'member.manage', id);
|
|
369
|
+
else
|
|
370
|
+
await authorize(brain, principal, 'memory.read', id);
|
|
371
|
+
const who = await usernameOf(userId);
|
|
372
|
+
if (!(await removeMembership(brain, id, userId)))
|
|
373
|
+
throw new HttpError(404, 'not_found', 'That user is not a member.');
|
|
374
|
+
void recordAudit(brain, { actor: principal.username, action: leaving ? 'member.left' : 'member.removed', target: await projectName(), detail: leaving ? undefined : who });
|
|
375
|
+
return send(res, 200, { members: await listMembers(brain, id) });
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
const transferMatch = /^projects\/([^/]+)\/transfer$/.exec(route);
|
|
379
|
+
if (transferMatch && method === 'POST') {
|
|
380
|
+
const id = decodeURIComponent(transferMatch[1]);
|
|
381
|
+
await authorize(brain, principal, 'project.delete', id); // only the owner hands a project over
|
|
382
|
+
const target = await getUserByUsername(brain, String(asRecord(await readJson(req, deps.maxBodyBytes)).username ?? ''));
|
|
383
|
+
if (!target || target.status !== 'active')
|
|
384
|
+
throw new HttpError(404, 'no_such_user', 'No such user.');
|
|
385
|
+
if (target.id === principal.userId)
|
|
386
|
+
throw new HttpError(400, 'invalid', 'You already own this project.');
|
|
387
|
+
await transferOwnership(brain, id, target.id);
|
|
388
|
+
void recordAudit(brain, { actor: principal.username, action: 'project.transferred', target: (await getProjectDetail(brain, id))?.name ?? id, detail: `to ${target.username}` });
|
|
389
|
+
return send(res, 200, { members: await listMembers(brain, id) });
|
|
390
|
+
}
|
|
391
|
+
const sessionsMatch = /^projects\/([^/]+)\/sessions$/.exec(route);
|
|
392
|
+
if (sessionsMatch && method === 'GET') {
|
|
393
|
+
const id = decodeURIComponent(sessionsMatch[1]);
|
|
394
|
+
await authorize(brain, principal, 'memory.read', id);
|
|
395
|
+
return send(res, 200, { sessions: await listSessions(brain, id, { limit: q.get('limit') ? Number(q.get('limit')) : 20 }) });
|
|
396
|
+
}
|
|
397
|
+
if (route === 'users/lookup' && method === 'GET') {
|
|
398
|
+
const found = await getUserByUsername(brain, q.get('username') ?? '');
|
|
399
|
+
if (!found || found.status !== 'active')
|
|
400
|
+
throw new HttpError(404, 'no_such_user', 'No such user.');
|
|
401
|
+
return send(res, 200, { id: found.id, username: found.username });
|
|
402
|
+
}
|
|
403
|
+
if (route === 'users' && method === 'GET') {
|
|
404
|
+
requireAdmin(principal);
|
|
405
|
+
return send(res, 200, { users: await listUserOverview(brain), invites: await listInvites(brain) });
|
|
406
|
+
}
|
|
407
|
+
const userMatch = /^users\/([^/]+)$/.exec(route);
|
|
408
|
+
if (userMatch && (method === 'PATCH' || method === 'DELETE')) {
|
|
409
|
+
requireAdmin(principal);
|
|
410
|
+
const id = decodeURIComponent(userMatch[1]);
|
|
411
|
+
const target = (await listUserOverview(brain)).find(u => u.id === id);
|
|
412
|
+
if (!target)
|
|
413
|
+
throw new HttpError(404, 'not_found', 'No such user.');
|
|
414
|
+
// what they may do is looked up again at once; their sign-ins end only when they are disabled or removed
|
|
415
|
+
const refresh = (endSessions) => {
|
|
416
|
+
if (endSessions)
|
|
417
|
+
sessions.destroyUser(target.username);
|
|
418
|
+
principals.delete(target.username);
|
|
419
|
+
auth.invalidate();
|
|
420
|
+
};
|
|
421
|
+
try {
|
|
422
|
+
if (method === 'DELETE') {
|
|
423
|
+
if (id === principal.userId)
|
|
424
|
+
throw new HttpError(400, 'invalid', 'You cannot remove your own account.');
|
|
425
|
+
await removeUser(brain, id);
|
|
426
|
+
refresh(true);
|
|
427
|
+
void recordAudit(brain, { actor: principal.username, action: 'user.removed', target: target.username });
|
|
428
|
+
return send(res, 200, { ok: true });
|
|
429
|
+
}
|
|
430
|
+
const body = asRecord(await readJson(req, deps.maxBodyBytes));
|
|
431
|
+
if (body.role !== undefined) {
|
|
432
|
+
if (body.role !== 'admin' && body.role !== 'member')
|
|
433
|
+
throw new HttpError(400, 'invalid', 'Role must be admin or member.');
|
|
434
|
+
if (body.role !== target.role) {
|
|
435
|
+
await setUserRole(brain, id, body.role);
|
|
436
|
+
void recordAudit(brain, { actor: principal.username, action: 'user.role', target: target.username, detail: String(body.role) });
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
if (body.status !== undefined) {
|
|
440
|
+
if (body.status !== 'active' && body.status !== 'disabled')
|
|
441
|
+
throw new HttpError(400, 'invalid', 'Status must be active or disabled.');
|
|
442
|
+
if (body.status === 'disabled' && id === principal.userId)
|
|
443
|
+
throw new HttpError(400, 'invalid', 'You cannot disable your own account.');
|
|
444
|
+
if (body.status !== target.status) {
|
|
445
|
+
await setUserStatus(brain, id, body.status);
|
|
446
|
+
if (body.status === 'disabled')
|
|
447
|
+
refresh(true);
|
|
448
|
+
void recordAudit(brain, { actor: principal.username, action: body.status === 'disabled' ? 'user.disabled' : 'user.enabled', target: target.username });
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
if (body.maxProjects !== undefined) {
|
|
452
|
+
await setUserLimits(brain, id, { maxProjects: body.maxProjects === null || body.maxProjects === '' ? null : Number(body.maxProjects) });
|
|
453
|
+
void recordAudit(brain, { actor: principal.username, action: 'user.limit', target: target.username, detail: String(body.maxProjects ?? 'none') });
|
|
454
|
+
}
|
|
455
|
+
refresh(false);
|
|
456
|
+
return send(res, 200, { user: (await listUserOverview(brain)).find(u => u.id === id) });
|
|
457
|
+
}
|
|
458
|
+
catch (error) {
|
|
459
|
+
if (error instanceof AdminError)
|
|
460
|
+
throw new HttpError(400, 'invalid', error.message);
|
|
461
|
+
throw error;
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
if (route === 'invites' && method === 'POST') {
|
|
465
|
+
requireAdmin(principal);
|
|
466
|
+
const body = asRecord(await readJson(req, deps.maxBodyBytes));
|
|
467
|
+
try {
|
|
468
|
+
const made = await createInvite(brain, principal, {
|
|
469
|
+
kind: body.kind === 'reset' ? 'reset' : 'join',
|
|
470
|
+
role: body.role === 'admin' ? 'admin' : 'member',
|
|
471
|
+
username: typeof body.username === 'string' ? body.username : undefined,
|
|
472
|
+
forUserId: typeof body.forUserId === 'string' ? body.forUserId : undefined,
|
|
473
|
+
grants: Array.isArray(body.grants) ? body.grants : undefined,
|
|
474
|
+
maxProjects: body.maxProjects === undefined || body.maxProjects === null || body.maxProjects === '' ? null : Number(body.maxProjects),
|
|
475
|
+
ttlDays: typeof body.ttlDays === 'number' ? body.ttlDays : undefined,
|
|
476
|
+
});
|
|
477
|
+
void recordAudit(brain, { actor: principal.username, action: 'invite.created', target: made.info.forUsername ?? made.info.username ?? made.info.role, detail: made.info.kind === 'reset' ? 'password reset' : `${made.info.role}, ${made.info.grants.length} project(s)` });
|
|
478
|
+
return send(res, 200, made);
|
|
479
|
+
}
|
|
480
|
+
catch (error) {
|
|
481
|
+
if (error instanceof InviteError)
|
|
482
|
+
throw new HttpError(error.code === 'taken' ? 409 : 400, error.code === 'taken' ? 'username_taken' : 'invalid', error.message);
|
|
483
|
+
throw error;
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
const inviteIdMatch = /^invites\/([0-9a-f-]+)$/.exec(route);
|
|
487
|
+
if (inviteIdMatch && method === 'DELETE') {
|
|
488
|
+
requireAdmin(principal);
|
|
489
|
+
if (!(await revokeInvite(brain, inviteIdMatch[1])))
|
|
490
|
+
throw new HttpError(404, 'not_found', 'No such pending invitation.');
|
|
491
|
+
void recordAudit(brain, { actor: principal.username, action: 'invite.revoked' });
|
|
492
|
+
return send(res, 200, { ok: true });
|
|
493
|
+
}
|
|
494
|
+
if (route === 'audit' && method === 'GET') {
|
|
495
|
+
requireAdmin(principal);
|
|
496
|
+
return send(res, 200, {
|
|
497
|
+
events: await listAudit(brain, {
|
|
498
|
+
limit: q.get('limit') ? Number(q.get('limit')) : 100,
|
|
499
|
+
before: q.get('before') ?? undefined,
|
|
500
|
+
action: q.get('action') ?? undefined,
|
|
501
|
+
}),
|
|
502
|
+
});
|
|
503
|
+
}
|
|
236
504
|
if (route === 'memories' && method === 'GET') {
|
|
237
505
|
const project = q.get('project');
|
|
238
506
|
if (!project)
|
|
239
507
|
throw new HttpError(400, 'invalid', 'project is required.');
|
|
508
|
+
await authorize(brain, principal, 'memory.read', project);
|
|
240
509
|
const kind = q.get('kind');
|
|
241
510
|
if (kind && !MEMORY_KINDS.includes(kind))
|
|
242
511
|
throw new HttpError(400, 'invalid', 'Unknown kind.');
|
|
@@ -246,6 +515,7 @@ export function createDashboard(deps) {
|
|
|
246
515
|
kind: kind ?? undefined,
|
|
247
516
|
area: q.get('area') ?? undefined,
|
|
248
517
|
limit: q.get('limit') ? Number(q.get('limit')) : 50,
|
|
518
|
+
sort: q.get('sort') === 'recent' || q.get('sort') === 'oldest' ? q.get('sort') : undefined,
|
|
249
519
|
includeSuperseded: status !== 'active',
|
|
250
520
|
});
|
|
251
521
|
return send(res, 200, { memories: status === 'superseded' ? found.filter(m => m.status === 'superseded') : found });
|
|
@@ -255,16 +525,22 @@ export function createDashboard(deps) {
|
|
|
255
525
|
const project = q.get('project');
|
|
256
526
|
if (!project)
|
|
257
527
|
throw new HttpError(400, 'invalid', 'project is required.');
|
|
528
|
+
await authorize(brain, principal, 'memory.read', project);
|
|
258
529
|
const memory = await getMemory(brain, project, decodeURIComponent(memoryMatch[1]));
|
|
259
530
|
if (!memory)
|
|
260
531
|
throw new HttpError(404, 'not_found', 'No such memory.');
|
|
261
532
|
return send(res, 200, { memory, chain: await getMemoryChain(brain, project, memory.id) });
|
|
262
533
|
}
|
|
263
534
|
if (route === 'graph' && method === 'GET') {
|
|
264
|
-
|
|
535
|
+
const only = q.get('project') ?? undefined;
|
|
536
|
+
if (only)
|
|
537
|
+
await authorize(brain, principal, 'memory.read', only);
|
|
538
|
+
return send(res, 200, await getGraph(brain, { projectId: only, projectIds: await accessibleProjectIds(brain, principal), limit: q.get('limit') ? Number(q.get('limit')) : undefined }));
|
|
265
539
|
}
|
|
266
540
|
if (route === 'cypher' && method === 'POST') {
|
|
541
|
+
requireAdmin(principal);
|
|
267
542
|
const body = asRecord(await readJson(req, deps.maxBodyBytes));
|
|
543
|
+
void recordAudit(brain, { actor: principal.username, action: 'console.query', detail: String(body.query ?? '').replace(/\s+/g, ' ').slice(0, 200) });
|
|
268
544
|
try {
|
|
269
545
|
return send(res, 200, await runReadOnlyCypher(brain, String(body.query ?? '')));
|
|
270
546
|
}
|
|
@@ -277,13 +553,19 @@ export function createDashboard(deps) {
|
|
|
277
553
|
throw error;
|
|
278
554
|
}
|
|
279
555
|
}
|
|
280
|
-
if (route === 'tokens' && method === 'GET')
|
|
281
|
-
return send(res, 200, { tokens: await listApiTokens(brain) });
|
|
556
|
+
if (route === 'tokens' && method === 'GET') {
|
|
557
|
+
return send(res, 200, { tokens: await listApiTokens(brain, isAdmin ? {} : { createdBy: principal.username }) });
|
|
558
|
+
}
|
|
282
559
|
if (route === 'tokens' && method === 'POST') {
|
|
283
560
|
const body = asRecord(await readJson(req, deps.maxBodyBytes));
|
|
284
561
|
try {
|
|
285
|
-
const
|
|
562
|
+
const projects = Array.isArray(body.projects) ? body.projects.filter((p) => typeof p === 'string') : [];
|
|
563
|
+
// a token can only be limited to projects its owner can reach
|
|
564
|
+
for (const p of projects)
|
|
565
|
+
await authorize(brain, principal, 'memory.read', p);
|
|
566
|
+
const created = await createApiToken(brain, String(body.name ?? ''), session.username, { readOnly: body.readOnly === true, projects });
|
|
286
567
|
auth.invalidate();
|
|
568
|
+
void recordAudit(brain, { actor: principal.username, action: 'token.created', target: created.info.name, detail: [created.info.readOnly ? 'read-only' : '', projects.length ? `${projects.length} project(s)` : ''].filter(Boolean).join(', ') || undefined });
|
|
287
569
|
return send(res, 200, created);
|
|
288
570
|
}
|
|
289
571
|
catch (error) {
|
|
@@ -294,12 +576,14 @@ export function createDashboard(deps) {
|
|
|
294
576
|
}
|
|
295
577
|
const tokenMatch = /^tokens\/([0-9a-f]+)$/.exec(route);
|
|
296
578
|
if (tokenMatch && method === 'DELETE') {
|
|
297
|
-
if (!(await revokeApiToken(brain, tokenMatch[1])))
|
|
579
|
+
if (!(await revokeApiToken(brain, tokenMatch[1], isAdmin ? {} : { createdBy: principal.username })))
|
|
298
580
|
throw new HttpError(404, 'not_found', 'No such active token.');
|
|
299
581
|
auth.invalidate();
|
|
582
|
+
void recordAudit(brain, { actor: principal.username, action: 'token.revoked', target: tokenMatch[1].slice(0, 8) });
|
|
300
583
|
return send(res, 200, { ok: true });
|
|
301
584
|
}
|
|
302
585
|
if (route === 'system' && method === 'GET') {
|
|
586
|
+
requireAdmin(principal);
|
|
303
587
|
const config = loadConfig();
|
|
304
588
|
const started = Date.now();
|
|
305
589
|
const info = await checkConnection(brain);
|
package/dist/dashboard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../src/dashboard.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../src/dashboard.ts"],"names":[],"mappings":"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"}
|