mirror of
https://github.com/tiennm99/ccs.git
synced 2026-09-02 16:19:27 +00:00
fix(cursor): clean up settings validation and route consistency
This commit is contained in:
@@ -2,8 +2,8 @@
|
|||||||
* Cursor Routes - Cursor IDE integration via cursor proxy daemon
|
* Cursor Routes - Cursor IDE integration via cursor proxy daemon
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type { Router, Request, Response } from 'express';
|
import type { Request, Response } from 'express';
|
||||||
import { Router as ExpressRouter } from 'express';
|
import { Router } from 'express';
|
||||||
import {
|
import {
|
||||||
checkAuthStatus,
|
checkAuthStatus,
|
||||||
autoDetectTokens,
|
autoDetectTokens,
|
||||||
@@ -14,7 +14,7 @@ import { DEFAULT_CURSOR_CONFIG } from '../../config/unified-config-types';
|
|||||||
import { loadOrCreateUnifiedConfig } from '../../config/unified-config-loader';
|
import { loadOrCreateUnifiedConfig } from '../../config/unified-config-loader';
|
||||||
import cursorSettingsRoutes from './cursor-settings-routes';
|
import cursorSettingsRoutes from './cursor-settings-routes';
|
||||||
|
|
||||||
const router: Router = ExpressRouter();
|
const router = Router();
|
||||||
|
|
||||||
// Mount settings sub-routes
|
// Mount settings sub-routes
|
||||||
router.use('/settings', cursorSettingsRoutes);
|
router.use('/settings', cursorSettingsRoutes);
|
||||||
@@ -34,7 +34,7 @@ async function getDaemonStatus(port: number): Promise<{ running: boolean; port?:
|
|||||||
*/
|
*/
|
||||||
async function getAvailableModels(): Promise<string[]> {
|
async function getAvailableModels(): Promise<string[]> {
|
||||||
// Stub - will be implemented in #520
|
// Stub - will be implemented in #520
|
||||||
return ['claude-3-opus', 'claude-3-sonnet', 'claude-3-haiku'];
|
return []; // TODO: populated by cursor-models.ts (#520)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2,15 +2,15 @@
|
|||||||
* Cursor Settings Routes - Settings editor and raw settings for Cursor IDE
|
* Cursor Settings Routes - Settings editor and raw settings for Cursor IDE
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type { Router, Request, Response } from 'express';
|
import type { Request, Response } from 'express';
|
||||||
import { Router as ExpressRouter } from 'express';
|
import { Router } from 'express';
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import { getCcsDir } from '../../utils/config-manager';
|
import { getCcsDir } from '../../utils/config-manager';
|
||||||
import { DEFAULT_CURSOR_CONFIG } from '../../config/unified-config-types';
|
import { DEFAULT_CURSOR_CONFIG } from '../../config/unified-config-types';
|
||||||
import { loadOrCreateUnifiedConfig, saveUnifiedConfig } from '../../config/unified-config-loader';
|
import { loadOrCreateUnifiedConfig, saveUnifiedConfig } from '../../config/unified-config-loader';
|
||||||
|
|
||||||
const router: Router = ExpressRouter();
|
const router = Router();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GET /api/cursor/settings - Get cursor config (port, auto_start, ghost_mode)
|
* GET /api/cursor/settings - Get cursor config (port, auto_start, ghost_mode)
|
||||||
@@ -39,26 +39,24 @@ router.put('/', (req: Request, res: Response): void => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Validate input types
|
// Validate input types
|
||||||
if (updates && typeof updates === 'object') {
|
if ('port' in updates) {
|
||||||
if ('port' in updates) {
|
if (typeof updates.port !== 'number' || !Number.isInteger(updates.port)) {
|
||||||
if (typeof updates.port !== 'number' || !Number.isInteger(updates.port)) {
|
res.status(400).json({ error: 'port must be an integer' });
|
||||||
res.status(400).json({ error: 'port must be an integer' });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (updates.port < 1 || updates.port > 65535) {
|
|
||||||
res.status(400).json({ error: 'port must be between 1 and 65535' });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ('auto_start' in updates && typeof updates.auto_start !== 'boolean') {
|
|
||||||
res.status(400).json({ error: 'auto_start must be a boolean' });
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ('ghost_mode' in updates && typeof updates.ghost_mode !== 'boolean') {
|
if (updates.port < 1 || updates.port > 65535) {
|
||||||
res.status(400).json({ error: 'ghost_mode must be a boolean' });
|
res.status(400).json({ error: 'port must be between 1 and 65535' });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if ('auto_start' in updates && typeof updates.auto_start !== 'boolean') {
|
||||||
|
res.status(400).json({ error: 'auto_start must be a boolean' });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ('ghost_mode' in updates && typeof updates.ghost_mode !== 'boolean') {
|
||||||
|
res.status(400).json({ error: 'ghost_mode must be a boolean' });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const config = loadOrCreateUnifiedConfig();
|
const config = loadOrCreateUnifiedConfig();
|
||||||
|
|
||||||
@@ -132,7 +130,7 @@ router.put('/raw', (req: Request, res: Response): void => {
|
|||||||
try {
|
try {
|
||||||
const { settings, expectedMtime } = req.body;
|
const { settings, expectedMtime } = req.body;
|
||||||
|
|
||||||
if (!settings || typeof settings !== 'object') {
|
if (!settings || typeof settings !== 'object' || Array.isArray(settings)) {
|
||||||
res.status(400).json({ error: 'settings must be a JSON object' });
|
res.status(400).json({ error: 'settings must be a JSON object' });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user