Files

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;
};
};
}