41 lines
1.2 KiB
Go
41 lines
1.2 KiB
Go
package app
|
|
|
|
import "net/http"
|
|
|
|
func handleTransportInterfaces(w http.ResponseWriter, r *http.Request) {
|
|
if r.Method != http.MethodGet {
|
|
http.Error(w, "method not allowed", http.StatusMethodNotAllowed)
|
|
return
|
|
}
|
|
|
|
transportMu.Lock()
|
|
clientsState := loadTransportClientsState()
|
|
ifacesState := loadTransportInterfacesState()
|
|
snapshot := captureTransportInterfacesStateSnapshot(clientsState, ifacesState)
|
|
transportMu.Unlock()
|
|
|
|
normIfaces, changed := normalizeTransportInterfacesState(ifacesState, clientsState.Items)
|
|
if changed {
|
|
if err := saveTransportInterfacesIfSnapshotCurrent(snapshot, normIfaces); err != nil {
|
|
writeJSON(w, http.StatusOK, TransportInterfacesResponse{
|
|
OK: false,
|
|
Code: "TRANSPORT_INTERFACES_SAVE_FAILED",
|
|
Message: "interfaces state save failed: " + err.Error(),
|
|
})
|
|
return
|
|
}
|
|
}
|
|
|
|
items := buildTransportInterfaceItems(normIfaces.Items, clientsState.Items)
|
|
if adguardTarget, ok := buildTransportPolicyAdGuardTarget(); ok {
|
|
items = appendTransportVirtualInterfaceItems(items, []TransportClient{adguardTarget})
|
|
}
|
|
|
|
writeJSON(w, http.StatusOK, TransportInterfacesResponse{
|
|
OK: true,
|
|
Message: "ok",
|
|
Count: len(items),
|
|
Items: items,
|
|
})
|
|
}
|