mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-09-06 22:49:29 +00:00
* feat: add secure code environment pairing * fix: satisfy code environment type checks * fix: secure code environment administration * fix: isolate code pairing control plane * fix: validate code pairing control responses * fix: secure code pairing transport * fix: validate code pairing wire format * fix: harden pairing secret lookup
74 lines
2.2 KiB
JavaScript
74 lines
2.2 KiB
JavaScript
const express = require('express');
|
|
const request = require('supertest');
|
|
|
|
const middlewareCalls = [];
|
|
const mockRequireJwtAuth = jest.fn((req, _res, next) => {
|
|
middlewareCalls.push('jwt');
|
|
req.user = { id: 'admin-1', role: 'ADMIN' };
|
|
next();
|
|
});
|
|
const mockRequireCapability = jest.fn((capability) => (req, _res, next) => {
|
|
middlewareCalls.push(capability);
|
|
next();
|
|
});
|
|
const mockHandlers = {
|
|
createPairing: jest.fn((req, res) =>
|
|
res.status(200).json({ operation: 'pair', environmentId: req.params.environmentId }),
|
|
),
|
|
revokeWorker: jest.fn((req, res) =>
|
|
res.status(200).json({ operation: 'revoke', environmentId: req.params.environmentId }),
|
|
),
|
|
};
|
|
const mockGetAppConfig = jest.fn();
|
|
|
|
jest.mock('@librechat/data-schemas', () => ({
|
|
SystemCapabilities: {
|
|
ACCESS_ADMIN: 'access:admin',
|
|
MANAGE_CODE_ENVIRONMENTS: 'manage:code_environments',
|
|
},
|
|
}));
|
|
|
|
jest.mock('@librechat/api', () => ({
|
|
createAdminCodeEnvironmentHandlers: jest.fn(() => mockHandlers),
|
|
}));
|
|
|
|
jest.mock('~/server/middleware/roles/capabilities', () => ({
|
|
requireCapability: mockRequireCapability,
|
|
}));
|
|
|
|
jest.mock('~/server/middleware', () => ({
|
|
requireJwtAuth: mockRequireJwtAuth,
|
|
}));
|
|
|
|
jest.mock('~/server/services/Config', () => ({
|
|
getAppConfig: mockGetAppConfig,
|
|
}));
|
|
|
|
function createApp() {
|
|
delete require.cache[require.resolve('./code')];
|
|
const router = require('./code');
|
|
const app = express();
|
|
app.use(express.json());
|
|
app.use('/api/admin/code-environments', router);
|
|
return app;
|
|
}
|
|
|
|
describe('admin code environment routes', () => {
|
|
beforeEach(() => {
|
|
middlewareCalls.length = 0;
|
|
jest.clearAllMocks();
|
|
});
|
|
|
|
it.each([
|
|
['pairings', 'createPairing', 'pair'],
|
|
['revoke', 'revokeWorker', 'revoke'],
|
|
])('protects and delegates the %s operation', async (path, handlerName, operation) => {
|
|
const response = await request(createApp())
|
|
.post(`/api/admin/code-environments/attached-vm/${path}`)
|
|
.expect(200);
|
|
|
|
expect(response.body).toEqual({ operation, environmentId: 'attached-vm' });
|
|
expect(middlewareCalls).toEqual(['jwt', 'access:admin', 'manage:code_environments']);
|
|
expect(mockHandlers[handlerName]).toHaveBeenCalledTimes(1);
|
|
});
|
|
});
|