Sort routes by ID and remove DNS routes from overlapping list (#2234)

This commit is contained in:
Maycon Santos 2024-07-04 16:50:07 +02:00 committed by GitHub
parent 765aba2c1c
commit f9845e53a0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -4,6 +4,7 @@ package main
import ( import (
"fmt" "fmt"
"sort"
"strings" "strings"
"time" "time"
@ -24,6 +25,7 @@ const (
allRoutes filter = "all" allRoutes filter = "all"
overlappingRoutes filter = "overlapping" overlappingRoutes filter = "overlapping"
exitNodeRoutes filter = "exit-node" exitNodeRoutes filter = "exit-node"
getClientFMT = "get client: %v"
) )
type filter string type filter string
@ -95,6 +97,8 @@ func (s *serviceClient) updateRoutes(grid *fyne.Container, f filter) {
return return
} }
sortRoutesByIDs(filteredRoutes)
for _, route := range filteredRoutes { for _, route := range filteredRoutes {
r := route r := route
@ -150,8 +154,8 @@ func (s *serviceClient) updateRoutes(grid *fyne.Container, f filter) {
func (s *serviceClient) getFilteredRoutes(f filter) ([]*proto.Route, error) { func (s *serviceClient) getFilteredRoutes(f filter) ([]*proto.Route, error) {
routes, err := s.fetchRoutes() routes, err := s.fetchRoutes()
if err != nil { if err != nil {
log.Errorf("get client: %v", err) log.Errorf(getClientFMT, err)
s.showError(fmt.Errorf("get client: %v", err)) s.showError(fmt.Errorf(getClientFMT, err))
return nil, err return nil, err
} }
switch f { switch f {
@ -168,6 +172,9 @@ func getOverlappingRoutes(routes []*proto.Route) []*proto.Route {
var filteredRoutes []*proto.Route var filteredRoutes []*proto.Route
existingRange := make(map[string][]*proto.Route) existingRange := make(map[string][]*proto.Route)
for _, route := range routes { for _, route := range routes {
if len(route.Domains) > 0 {
continue
}
if r, exists := existingRange[route.GetNetwork()]; exists { if r, exists := existingRange[route.GetNetwork()]; exists {
r = append(r, route) r = append(r, route)
existingRange[route.GetNetwork()] = r existingRange[route.GetNetwork()] = r
@ -192,10 +199,17 @@ func getExitNodeRoutes(routes []*proto.Route) []*proto.Route {
} }
return filteredRoutes return filteredRoutes
} }
func sortRoutesByIDs(routes []*proto.Route) {
sort.Slice(routes, func(i, j int) bool {
return strings.ToLower(routes[i].GetID()) < strings.ToLower(routes[j].GetID())
})
}
func (s *serviceClient) fetchRoutes() ([]*proto.Route, error) { func (s *serviceClient) fetchRoutes() ([]*proto.Route, error) {
conn, err := s.getSrvClient(defaultFailTimeout) conn, err := s.getSrvClient(defaultFailTimeout)
if err != nil { if err != nil {
return nil, fmt.Errorf("get client: %v", err) return nil, fmt.Errorf(getClientFMT, err)
} }
resp, err := conn.ListRoutes(s.ctx, &proto.ListRoutesRequest{}) resp, err := conn.ListRoutes(s.ctx, &proto.ListRoutesRequest{})
@ -209,8 +223,8 @@ func (s *serviceClient) fetchRoutes() ([]*proto.Route, error) {
func (s *serviceClient) selectRoute(id string, checked bool) { func (s *serviceClient) selectRoute(id string, checked bool) {
conn, err := s.getSrvClient(defaultFailTimeout) conn, err := s.getSrvClient(defaultFailTimeout)
if err != nil { if err != nil {
log.Errorf("get client: %v", err) log.Errorf(getClientFMT, err)
s.showError(fmt.Errorf("get client: %v", err)) s.showError(fmt.Errorf(getClientFMT, err))
return return
} }
@ -239,7 +253,7 @@ func (s *serviceClient) selectRoute(id string, checked bool) {
func (s *serviceClient) selectAllFilteredRoutes(f filter) { func (s *serviceClient) selectAllFilteredRoutes(f filter) {
conn, err := s.getSrvClient(defaultFailTimeout) conn, err := s.getSrvClient(defaultFailTimeout)
if err != nil { if err != nil {
log.Errorf("get client: %v", err) log.Errorf(getClientFMT, err)
return return
} }
@ -256,7 +270,7 @@ func (s *serviceClient) selectAllFilteredRoutes(f filter) {
func (s *serviceClient) deselectAllFilteredRoutes(f filter) { func (s *serviceClient) deselectAllFilteredRoutes(f filter) {
conn, err := s.getSrvClient(defaultFailTimeout) conn, err := s.getSrvClient(defaultFailTimeout)
if err != nil { if err != nil {
log.Errorf("get client: %v", err) log.Errorf(getClientFMT, err)
return return
} }