104 lines
4.9 KiB
Swift
104 lines
4.9 KiB
Swift
import Foundation
|
|
|
|
/// Builds versioned endpoint paths (without host). The leading version segment
|
|
/// is applied here so call sites read like the REST docs.
|
|
///
|
|
/// Reconcile exact paths with `openapi.json`; these mirror the MCMS 6.0
|
|
/// REST API Developer Guide.
|
|
enum MCMSEndpoint {
|
|
// Auth / session / system
|
|
case authenticate
|
|
case logout
|
|
case databaseSelection
|
|
case databaseStatus
|
|
case version
|
|
|
|
// PON Controllers
|
|
case controllerConfigs
|
|
case controllerConfig(id: String)
|
|
case controllerStates // CNTL-STATE list
|
|
case controllerStats(id: String)
|
|
case controllerLogs(id: String)
|
|
|
|
// OLTs
|
|
case oltConfigs
|
|
case oltConfig(id: String)
|
|
case oltStates // OLT-STATE list (carries ONU registration buckets)
|
|
case oltState(id: String)
|
|
case oltStats(id: String)
|
|
case oltLogs(id: String)
|
|
case oltDisableONU(olt: String, onu: String)
|
|
case oltBroadcastEnableONUs(olt: String)
|
|
case oltReset(id: String)
|
|
|
|
// ONUs
|
|
case onuConfigs
|
|
case onuConfig(id: String)
|
|
case onuStates
|
|
case onuState(id: String)
|
|
case onuStats(id: String)
|
|
case onuLogs(id: String)
|
|
case onuAlarmHistories
|
|
case onuAlarmHistory(id: String)
|
|
case onuAlarmConfigs
|
|
case onuAlarmConfig(id: String)
|
|
case onuCPEStates
|
|
case onuAutomationConfigs
|
|
case onuAutomationConfig(id: String)
|
|
case onuReset(id: String)
|
|
case onuFirmwareFiles // GET /files/onu-firmware/
|
|
case onuCPE(id: String) // web helper /cpe/onu/<id>/ (no version segment)
|
|
|
|
/// Path relative to `baseURL`, including the version segment.
|
|
func path(version: String) -> String {
|
|
let v = "/\(version)"
|
|
switch self {
|
|
case .authenticate: return "\(v)/users/authenticate/"
|
|
case .logout: return "\(v)/users/logout/"
|
|
case .databaseSelection: return "\(v)/databases/selection/"
|
|
case .databaseStatus: return "\(v)/databases/status/"
|
|
case .version: return "\(v)/ponmgr/version/"
|
|
|
|
case .controllerConfigs: return "\(v)/controllers/configs/"
|
|
case .controllerConfig(let id): return "\(v)/controllers/configs/\(enc(id))/"
|
|
case .controllerStates: return "\(v)/controllers/states/"
|
|
case .controllerStats(let id): return "\(v)/controllers/stats/\(enc(id))/"
|
|
case .controllerLogs(let id): return "\(v)/controllers/logs/\(enc(id))/"
|
|
|
|
case .oltConfigs: return "\(v)/olts/configs/"
|
|
case .oltConfig(let id): return "\(v)/olts/configs/\(enc(id))/"
|
|
case .oltStates: return "\(v)/olts/states/"
|
|
case .oltState(let id): return "\(v)/olts/states/\(enc(id))/"
|
|
case .oltStats(let id): return "\(v)/olts/stats/\(enc(id))/"
|
|
case .oltLogs(let id): return "\(v)/olts/logs/\(enc(id))/"
|
|
case .oltDisableONU(let olt, let onu):
|
|
return "\(v)/olts/\(enc(olt))/disable-onu/\(enc(onu))/"
|
|
case .oltBroadcastEnableONUs(let olt):
|
|
return "\(v)/olts/\(enc(olt))/broadcast-enable-onus/"
|
|
case .oltReset(let id): return "\(v)/olts/\(enc(id))/reset/"
|
|
|
|
case .onuConfigs: return "\(v)/onus/configs/"
|
|
case .onuConfig(let id): return "\(v)/onus/configs/\(enc(id))/"
|
|
case .onuStates: return "\(v)/onus/states/"
|
|
case .onuState(let id): return "\(v)/onus/states/\(enc(id))/"
|
|
case .onuStats(let id): return "\(v)/onus/stats/\(enc(id))/"
|
|
case .onuLogs(let id): return "\(v)/onus/logs/\(enc(id))/"
|
|
case .onuAlarmHistories: return "\(v)/onus/alarm-histories/"
|
|
case .onuAlarmHistory(let id): return "\(v)/onus/alarm-histories/\(enc(id))/"
|
|
case .onuAlarmConfigs: return "\(v)/onus/alarm-configs/"
|
|
case .onuAlarmConfig(let id): return "\(v)/onus/alarm-configs/\(enc(id))/"
|
|
case .onuCPEStates: return "\(v)/onus/cpe-states/"
|
|
case .onuAutomationConfigs: return "\(v)/onus/automation/configs/"
|
|
case .onuAutomationConfig(let id): return "\(v)/onus/automation/configs/\(enc(id))/"
|
|
case .onuReset(let id): return "\(v)/onus/\(enc(id))/reset/"
|
|
case .onuFirmwareFiles: return "\(v)/files/onu-firmware/"
|
|
case .onuCPE(let id): return "/cpe/onu/\(enc(id))/" // versionless web helper
|
|
}
|
|
}
|
|
|
|
/// IDs (serials / MAC addresses) are kept RAW here — the full path is
|
|
/// percent-encoded exactly once by `URLComponents.path` in `APIClient`.
|
|
/// Pre-encoding double-encoded MAC colons (`:` → `%3A` → `%253A`), which MCMS
|
|
/// rejected as an invalid id.
|
|
private func enc(_ s: String) -> String { s }
|
|
}
|