Files
elmprodvpn/selective-vpn-api/app/transport_handlers_interfaces.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,
})
}