mindspace: close authority boundaries
This commit is contained in:
+52
-1
@@ -5,6 +5,9 @@ import os from 'node:os';
|
||||
import path from 'node:path';
|
||||
import test from 'node:test';
|
||||
import { Algorithm as Argon2Algorithm, hashRawSync as argon2HashRawSync } from '@node-rs/argon2';
|
||||
import {
|
||||
verifyMindSpaceMcpScopedToken,
|
||||
} from './mindspace-mcp-scoped-token.mjs';
|
||||
import { createUserAuth, clearUserLogoutCookies, userLoginCookies } from './user-auth.mjs';
|
||||
|
||||
test('ensureAllUserDataSpaces provisions every active non-admin user', async () => {
|
||||
@@ -164,7 +167,19 @@ function createAgentPolicyPool(userRow) {
|
||||
if (sql.includes('FROM h5_assets a') && sql.includes('JOIN h5_space_categories')) {
|
||||
return [[]];
|
||||
}
|
||||
if (sql.includes('FROM h5_user_capability_grants')) return [[]];
|
||||
if (
|
||||
sql.includes(
|
||||
'FROM h5_capability_grants',
|
||||
)
|
||||
) {
|
||||
return [[
|
||||
{
|
||||
capability_key:
|
||||
'static_publish',
|
||||
allowed: 1,
|
||||
},
|
||||
]];
|
||||
}
|
||||
if (sql.includes('FROM h5_user_policy_grants')) return [[]];
|
||||
if (sql.includes('FROM h5_user_skill_grants')) return [[]];
|
||||
if (sql.includes('UPDATE h5_users SET workspace_root = ?')) {
|
||||
@@ -410,6 +425,10 @@ test('agent session policy preserves sandbox root and exposes workspace ref meta
|
||||
H5_PORTAL_BASE_URL: 'http://127.0.0.1:18131',
|
||||
H5_PORT: '18131',
|
||||
MEMIND_PAGE_DATA_DELIVERY_BASE_URL: 'http://127.0.0.1:18131',
|
||||
MINDSPACE_MCP_BASE_URL:
|
||||
'http://mindspace.internal:8082',
|
||||
MINDSPACE_MCP_TOKEN_SECRET:
|
||||
'mindspace-user-auth-secret-1234',
|
||||
},
|
||||
});
|
||||
|
||||
@@ -429,6 +448,38 @@ test('agent session policy preserves sandbox root and exposes workspace ref meta
|
||||
sandboxFs.envs.MEMIND_PAGE_DATA_DELIVERY_BASE_URL,
|
||||
'http://127.0.0.1:18131',
|
||||
);
|
||||
assert.equal(
|
||||
sandboxFs.envs.MINDSPACE_MCP_SCOPED_TOKEN,
|
||||
undefined,
|
||||
);
|
||||
|
||||
const scopedPolicy =
|
||||
await auth.getAgentSessionPolicy(
|
||||
userRow.id,
|
||||
{ sessionId: 'session-1' },
|
||||
);
|
||||
const scopedSandbox =
|
||||
scopedPolicy.extensionOverrides.find(
|
||||
(item) => item.name === 'sandbox-fs',
|
||||
);
|
||||
const claims =
|
||||
verifyMindSpaceMcpScopedToken({
|
||||
token:
|
||||
scopedSandbox.envs
|
||||
.MINDSPACE_MCP_SCOPED_TOKEN,
|
||||
secret:
|
||||
'mindspace-user-auth-secret-1234',
|
||||
tool: 'write_file',
|
||||
});
|
||||
assert.equal(
|
||||
scopedSandbox.envs.MINDSPACE_PACKAGE_ID,
|
||||
'cp_session-1',
|
||||
);
|
||||
assert.equal(claims.sessionId, 'session-1');
|
||||
assert.equal(
|
||||
claims.workspaceRef,
|
||||
'mindspace://users/user-1/workspace',
|
||||
);
|
||||
});
|
||||
|
||||
test('admin capabilities include granted platform skills', async () => {
|
||||
|
||||
Reference in New Issue
Block a user