Add support for showing anycast addresses in the UI

This commit is contained in:
Daniel 2024-05-28 15:39:05 +02:00
parent 1381556e93
commit dc1b9f98f2
6 changed files with 24 additions and 2 deletions
assets/data/img/flags
desktop/angular
docker.sh
src/app
pages/spn/map-renderer
shared/netquery/pipes
service/intel/geoip

Binary file not shown.

After

(image error) Size: 461 B

View file

@ -11,8 +11,8 @@ mnt="$( cd ../.. && pwd )"
docker run \
-ti \
--rm \
-v $mnt:/portmaster-ui \
-w /portmaster-ui/modules/portmaster \
-v $mnt:/portmaster \
-w /portmaster/desktop/angular \
-p 8081:8080 \
node:latest \
npm start -- --host 0.0.0.0 --port 8080

View file

@ -195,6 +195,8 @@ export class MapRendererComponent implements OnInit, AfterViewInit, OnDestroy {
data.forEach((country: any) => {
this.countryNames[country.properties.iso_a2] = country.properties.name
})
// Add special country values.
this.countryNames["__"] = "Anycast"
this.worldGroup.selectAll()
.data<GeoPermissibleObjects>(data)

View file

@ -11,6 +11,9 @@ export class ConnectionLocationPipe implements PipeTransform {
return '';
}
if (!!conn.country) {
if (conn.country === "__") {
return "Anycast"
}
return conn.country;
}

View file

@ -11,6 +11,14 @@ func (l *Location) AddCountryInfo() {
return
}
// Check for anycast.
if l.IsAnycast {
// Reset data for anycast.
l.Country.Code = "__"
l.Coordinates.Latitude = 0
l.Coordinates.Longitude = 0
}
// Get country info.
info, ok := countries[l.Country.Code]
if !ok {
@ -83,6 +91,10 @@ func init() {
}
var countries = map[string]CountryInfo{
"__": {
Name: "Anycast",
Center: Coordinates{AccuracyRadius: earthCircumferenceInKm},
},
"MN": {
Name: "Mongolia",
Continent: ContinentInfo{Region: "AS-E"},

View file

@ -9,6 +9,11 @@ func TestCountryInfo(t *testing.T) {
t.Parallel()
for key, country := range countries {
// Skip special anycast country.
if key == "__" {
continue
}
if key != country.Code {
t.Errorf("%s has a wrong country code of %q", key, country.Code)
}