330 lines
7.6 KiB
TypeScript
330 lines
7.6 KiB
TypeScript
import * as plugins from '../plugins.js';
|
|
import * as authInterfaces from '../data/auth.js';
|
|
|
|
// ============================================================================
|
|
// RADIUS Client Management
|
|
// ============================================================================
|
|
|
|
/**
|
|
* Get all RADIUS clients (NAS devices)
|
|
*/
|
|
export interface IReq_GetRadiusClients extends plugins.typedrequestInterfaces.implementsTR<
|
|
plugins.typedrequestInterfaces.ITypedRequest,
|
|
IReq_GetRadiusClients
|
|
> {
|
|
method: 'getRadiusClients';
|
|
request: {
|
|
identity?: authInterfaces.IIdentity;
|
|
};
|
|
response: {
|
|
clients: Array<{
|
|
name: string;
|
|
ipRange: string;
|
|
description?: string;
|
|
enabled: boolean;
|
|
}>;
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Add or update a RADIUS client
|
|
*/
|
|
export interface IReq_SetRadiusClient extends plugins.typedrequestInterfaces.implementsTR<
|
|
plugins.typedrequestInterfaces.ITypedRequest,
|
|
IReq_SetRadiusClient
|
|
> {
|
|
method: 'setRadiusClient';
|
|
request: {
|
|
identity?: authInterfaces.IIdentity;
|
|
client: {
|
|
name: string;
|
|
ipRange: string;
|
|
secret: string;
|
|
description?: string;
|
|
enabled: boolean;
|
|
};
|
|
};
|
|
response: {
|
|
success: boolean;
|
|
message?: string;
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Remove a RADIUS client
|
|
*/
|
|
export interface IReq_RemoveRadiusClient extends plugins.typedrequestInterfaces.implementsTR<
|
|
plugins.typedrequestInterfaces.ITypedRequest,
|
|
IReq_RemoveRadiusClient
|
|
> {
|
|
method: 'removeRadiusClient';
|
|
request: {
|
|
identity?: authInterfaces.IIdentity;
|
|
name: string;
|
|
};
|
|
response: {
|
|
success: boolean;
|
|
message?: string;
|
|
};
|
|
}
|
|
|
|
// ============================================================================
|
|
// VLAN Mapping Management
|
|
// ============================================================================
|
|
|
|
/**
|
|
* Get all MAC-to-VLAN mappings
|
|
*/
|
|
export interface IReq_GetVlanMappings extends plugins.typedrequestInterfaces.implementsTR<
|
|
plugins.typedrequestInterfaces.ITypedRequest,
|
|
IReq_GetVlanMappings
|
|
> {
|
|
method: 'getVlanMappings';
|
|
request: {
|
|
identity?: authInterfaces.IIdentity;
|
|
};
|
|
response: {
|
|
mappings: Array<{
|
|
mac: string;
|
|
vlan: number;
|
|
description?: string;
|
|
enabled: boolean;
|
|
createdAt: number;
|
|
updatedAt: number;
|
|
}>;
|
|
config: {
|
|
defaultVlan: number;
|
|
allowUnknownMacs: boolean;
|
|
};
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Add or update a VLAN mapping
|
|
*/
|
|
export interface IReq_SetVlanMapping extends plugins.typedrequestInterfaces.implementsTR<
|
|
plugins.typedrequestInterfaces.ITypedRequest,
|
|
IReq_SetVlanMapping
|
|
> {
|
|
method: 'setVlanMapping';
|
|
request: {
|
|
identity?: authInterfaces.IIdentity;
|
|
mapping: {
|
|
mac: string;
|
|
vlan: number;
|
|
description?: string;
|
|
enabled: boolean;
|
|
};
|
|
};
|
|
response: {
|
|
success: boolean;
|
|
mapping?: {
|
|
mac: string;
|
|
vlan: number;
|
|
description?: string;
|
|
enabled: boolean;
|
|
createdAt: number;
|
|
updatedAt: number;
|
|
};
|
|
message?: string;
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Remove a VLAN mapping
|
|
*/
|
|
export interface IReq_RemoveVlanMapping extends plugins.typedrequestInterfaces.implementsTR<
|
|
plugins.typedrequestInterfaces.ITypedRequest,
|
|
IReq_RemoveVlanMapping
|
|
> {
|
|
method: 'removeVlanMapping';
|
|
request: {
|
|
identity?: authInterfaces.IIdentity;
|
|
mac: string;
|
|
};
|
|
response: {
|
|
success: boolean;
|
|
message?: string;
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Update VLAN configuration
|
|
*/
|
|
export interface IReq_UpdateVlanConfig extends plugins.typedrequestInterfaces.implementsTR<
|
|
plugins.typedrequestInterfaces.ITypedRequest,
|
|
IReq_UpdateVlanConfig
|
|
> {
|
|
method: 'updateVlanConfig';
|
|
request: {
|
|
identity?: authInterfaces.IIdentity;
|
|
defaultVlan?: number;
|
|
allowUnknownMacs?: boolean;
|
|
};
|
|
response: {
|
|
success: boolean;
|
|
config: {
|
|
defaultVlan: number;
|
|
allowUnknownMacs: boolean;
|
|
};
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Test VLAN assignment for a MAC address
|
|
*/
|
|
export interface IReq_TestVlanAssignment extends plugins.typedrequestInterfaces.implementsTR<
|
|
plugins.typedrequestInterfaces.ITypedRequest,
|
|
IReq_TestVlanAssignment
|
|
> {
|
|
method: 'testVlanAssignment';
|
|
request: {
|
|
identity?: authInterfaces.IIdentity;
|
|
mac: string;
|
|
};
|
|
response: {
|
|
assigned: boolean;
|
|
vlan: number;
|
|
isDefault: boolean;
|
|
matchedRule?: {
|
|
mac: string;
|
|
vlan: number;
|
|
description?: string;
|
|
};
|
|
};
|
|
}
|
|
|
|
// ============================================================================
|
|
// Accounting / Session Management
|
|
// ============================================================================
|
|
|
|
/**
|
|
* Get active RADIUS sessions
|
|
*/
|
|
export interface IReq_GetRadiusSessions extends plugins.typedrequestInterfaces.implementsTR<
|
|
plugins.typedrequestInterfaces.ITypedRequest,
|
|
IReq_GetRadiusSessions
|
|
> {
|
|
method: 'getRadiusSessions';
|
|
request: {
|
|
identity?: authInterfaces.IIdentity;
|
|
filter?: {
|
|
username?: string;
|
|
nasIpAddress?: string;
|
|
vlanId?: number;
|
|
};
|
|
};
|
|
response: {
|
|
sessions: Array<{
|
|
sessionId: string;
|
|
username: string;
|
|
macAddress?: string;
|
|
nasIpAddress: string;
|
|
nasIdentifier?: string;
|
|
vlanId?: number;
|
|
framedIpAddress?: string;
|
|
startTime: number;
|
|
lastUpdateTime: number;
|
|
status: 'active' | 'stopped' | 'terminated';
|
|
inputOctets: number;
|
|
outputOctets: number;
|
|
sessionTime: number;
|
|
}>;
|
|
totalCount: number;
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Disconnect a RADIUS session
|
|
*/
|
|
export interface IReq_DisconnectRadiusSession extends plugins.typedrequestInterfaces.implementsTR<
|
|
plugins.typedrequestInterfaces.ITypedRequest,
|
|
IReq_DisconnectRadiusSession
|
|
> {
|
|
method: 'disconnectRadiusSession';
|
|
request: {
|
|
identity?: authInterfaces.IIdentity;
|
|
sessionId: string;
|
|
reason?: string;
|
|
};
|
|
response: {
|
|
success: boolean;
|
|
message?: string;
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Get accounting summary/report
|
|
*/
|
|
export interface IReq_GetRadiusAccountingSummary extends plugins.typedrequestInterfaces.implementsTR<
|
|
plugins.typedrequestInterfaces.ITypedRequest,
|
|
IReq_GetRadiusAccountingSummary
|
|
> {
|
|
method: 'getRadiusAccountingSummary';
|
|
request: {
|
|
identity?: authInterfaces.IIdentity;
|
|
startTime: number;
|
|
endTime: number;
|
|
};
|
|
response: {
|
|
summary: {
|
|
periodStart: number;
|
|
periodEnd: number;
|
|
totalSessions: number;
|
|
activeSessions: number;
|
|
totalInputBytes: number;
|
|
totalOutputBytes: number;
|
|
totalSessionTime: number;
|
|
averageSessionDuration: number;
|
|
uniqueUsers: number;
|
|
sessionsByVlan: Record<number, number>;
|
|
topUsersByTraffic: Array<{ username: string; totalBytes: number }>;
|
|
};
|
|
};
|
|
}
|
|
|
|
// ============================================================================
|
|
// Statistics
|
|
// ============================================================================
|
|
|
|
/**
|
|
* Get RADIUS server statistics
|
|
*/
|
|
export interface IReq_GetRadiusStatistics extends plugins.typedrequestInterfaces.implementsTR<
|
|
plugins.typedrequestInterfaces.ITypedRequest,
|
|
IReq_GetRadiusStatistics
|
|
> {
|
|
method: 'getRadiusStatistics';
|
|
request: {
|
|
identity?: authInterfaces.IIdentity;
|
|
};
|
|
response: {
|
|
stats: {
|
|
running: boolean;
|
|
uptime: number;
|
|
authRequests: number;
|
|
authAccepts: number;
|
|
authRejects: number;
|
|
accountingRequests: number;
|
|
activeSessions: number;
|
|
vlanMappings: number;
|
|
clients: number;
|
|
};
|
|
vlanStats: {
|
|
totalMappings: number;
|
|
enabledMappings: number;
|
|
exactMatches: number;
|
|
ouiPatterns: number;
|
|
wildcardPatterns: number;
|
|
};
|
|
accountingStats: {
|
|
activeSessions: number;
|
|
totalSessionsStarted: number;
|
|
totalSessionsStopped: number;
|
|
totalInputBytes: number;
|
|
totalOutputBytes: number;
|
|
interimUpdatesReceived: number;
|
|
};
|
|
};
|
|
}
|