BREAKING CHANGE(config): convert configuration management to read-only; remove updateConfiguration endpoint and client-side editing
This commit is contained in:
@@ -1,19 +1,18 @@
|
||||
import * as plugins from '../../plugins.js';
|
||||
import type { OpsServer } from '../classes.opsserver.js';
|
||||
import * as interfaces from '../../../ts_interfaces/index.js';
|
||||
import { requireAdminIdentity } from '../helpers/guards.js';
|
||||
|
||||
export class ConfigHandler {
|
||||
public typedrouter = new plugins.typedrequest.TypedRouter();
|
||||
|
||||
|
||||
constructor(private opsServerRef: OpsServer) {
|
||||
// Add this handler's router to the parent
|
||||
this.opsServerRef.typedrouter.addTypedRouter(this.typedrouter);
|
||||
this.registerHandlers();
|
||||
}
|
||||
|
||||
|
||||
private registerHandlers(): void {
|
||||
// Get Configuration Handler
|
||||
// Get Configuration Handler (read-only)
|
||||
this.typedrouter.addTypedHandler(
|
||||
new plugins.typedrequest.TypedHandler<interfaces.requests.IReq_GetConfiguration>(
|
||||
'getConfiguration',
|
||||
@@ -26,33 +25,6 @@ export class ConfigHandler {
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
// Update Configuration Handler
|
||||
this.typedrouter.addTypedHandler(
|
||||
new plugins.typedrequest.TypedHandler<interfaces.requests.IReq_UpdateConfiguration>(
|
||||
'updateConfiguration',
|
||||
async (dataArg, toolsArg) => {
|
||||
try {
|
||||
// Require admin access to update configuration
|
||||
await requireAdminIdentity(this.opsServerRef.adminHandler, dataArg);
|
||||
|
||||
const updatedConfig = await this.updateConfiguration(dataArg.section, dataArg.config);
|
||||
return {
|
||||
updated: true,
|
||||
config: updatedConfig,
|
||||
};
|
||||
} catch (error) {
|
||||
if (error instanceof plugins.typedrequest.TypedResponseError) {
|
||||
throw error;
|
||||
}
|
||||
return {
|
||||
updated: false,
|
||||
config: null,
|
||||
};
|
||||
}
|
||||
}
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
private async getConfiguration(section?: string): Promise<{
|
||||
@@ -133,31 +105,4 @@ export class ConfigHandler {
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
private async updateConfiguration(section: string, config: any): Promise<any> {
|
||||
// TODO: Implement actual configuration updates
|
||||
// This would involve:
|
||||
// 1. Validating the configuration changes
|
||||
// 2. Applying them to the running services
|
||||
// 3. Persisting them to storage
|
||||
// 4. Potentially restarting affected services
|
||||
|
||||
// For now, just validate and return the config
|
||||
if (section === 'email' && config.maxMessageSize && config.maxMessageSize < 1024) {
|
||||
throw new Error('Maximum message size must be at least 1KB');
|
||||
}
|
||||
|
||||
if (section === 'dns' && config.ttl && (config.ttl < 0 || config.ttl > 86400)) {
|
||||
throw new Error('DNS TTL must be between 0 and 86400 seconds');
|
||||
}
|
||||
|
||||
if (section === 'proxy' && config.maxConnections && config.maxConnections < 1) {
|
||||
throw new Error('Maximum connections must be at least 1');
|
||||
}
|
||||
|
||||
// In a real implementation, apply the changes here
|
||||
// For now, return the current configuration
|
||||
const currentConfig = await this.getConfiguration(section);
|
||||
return currentConfig;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user