From 0a7ee462f511ca5c3545638dfb3686b04cda0dbd Mon Sep 17 00:00:00 2001 From: Shreyas Zare Date: Sun, 12 Feb 2023 13:19:41 +0530 Subject: [PATCH] WebServiceZonesApi: updated ListZones() to support pagination options. Other minor changes done. --- DnsServerCore/WebServiceZonesApi.cs | 46 +++++++++++++++++++---------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/DnsServerCore/WebServiceZonesApi.cs b/DnsServerCore/WebServiceZonesApi.cs index e31ec481..1f717c88 100644 --- a/DnsServerCore/WebServiceZonesApi.cs +++ b/DnsServerCore/WebServiceZonesApi.cs @@ -21,6 +21,7 @@ using DnsServerCore.Auth; using DnsServerCore.Dns; using DnsServerCore.Dns.Dnssec; using DnsServerCore.Dns.ResourceRecords; +using DnsServerCore.Dns.ZoneManagers; using DnsServerCore.Dns.Zones; using Microsoft.AspNetCore.Http; using System; @@ -717,10 +718,25 @@ namespace DnsServerCore if (!_dnsWebService._authManager.IsPermitted(PermissionSection.Zones, session.User, PermissionFlag.View)) throw new DnsWebServiceException("Access was denied."); - List zones = _dnsWebService.DnsServer.AuthZoneManager.GetAllZones(); - zones.Sort(); - + HttpRequest request = context.Request; Utf8JsonWriter jsonWriter = context.GetCurrentJsonWriter(); + IReadOnlyList zones; + + if (request.TryGetQueryOrForm("pageNumber", int.Parse, out int pageNumber)) + { + int zonesPerPage = request.GetQueryOrForm("zonesPerPage", int.Parse, 10); + + AuthZoneManager.ZonesPage page = _dnsWebService.DnsServer.AuthZoneManager.GetZonesPage(pageNumber, zonesPerPage); + zones = page.Zones; + + jsonWriter.WriteNumber("pageNumber", page.PageNumber); + jsonWriter.WriteNumber("totalPages", page.TotalPages); + jsonWriter.WriteNumber("totalZones", page.TotalZones); + } + else + { + zones = _dnsWebService.DnsServer.AuthZoneManager.GetAllZones(); + } jsonWriter.WritePropertyName("zones"); jsonWriter.WriteStartArray(); @@ -995,7 +1011,7 @@ namespace DnsServerCore AuthZoneInfo zoneInfo = _dnsWebService.DnsServer.AuthZoneManager.GetAuthZoneInfo(zoneName); if (zoneInfo is null) - throw new DnsWebServiceException("No such zone was found: " + zoneName); + throw new DnsWebServiceException("No such authoritative zone was found: " + zoneName); if (zoneInfo.Internal) throw new DnsWebServiceException("Access was denied to manage internal DNS Server zone."); @@ -1335,7 +1351,7 @@ namespace DnsServerCore AuthZoneInfo zoneInfo = _dnsWebService.DnsServer.AuthZoneManager.GetAuthZoneInfo(zoneName); if (zoneInfo is null) - throw new DnsWebServiceException("No such zone was found: " + zoneName); + throw new DnsWebServiceException("No such authoritative zone was found: " + zoneName); if (zoneInfo.Internal) throw new DnsWebServiceException("Access was denied to manage internal DNS Server zone."); @@ -1344,7 +1360,7 @@ namespace DnsServerCore throw new DnsWebServiceException("Access was denied."); if (!_dnsWebService.DnsServer.AuthZoneManager.DeleteZone(zoneInfo.Name)) - throw new DnsWebServiceException("No authoritative zone was not found for domain: " + zoneInfo.Name); + throw new DnsWebServiceException("Failed to delete the zone: " + zoneInfo.Name); _dnsWebService._authManager.RemoveAllPermissions(PermissionSection.Zones, zoneInfo.Name); _dnsWebService._authManager.SaveConfigFile(); @@ -1364,7 +1380,7 @@ namespace DnsServerCore AuthZoneInfo zoneInfo = _dnsWebService.DnsServer.AuthZoneManager.GetAuthZoneInfo(zoneName); if (zoneInfo is null) - throw new DnsWebServiceException("No authoritative zone was not found for domain: " + zoneName); + throw new DnsWebServiceException("No such authoritative zone was found: " + zoneName); if (zoneInfo.Internal) throw new DnsWebServiceException("Access was denied to manage internal DNS Server zone."); @@ -1393,7 +1409,7 @@ namespace DnsServerCore AuthZoneInfo zoneInfo = _dnsWebService.DnsServer.AuthZoneManager.GetAuthZoneInfo(zoneName); if (zoneInfo is null) - throw new DnsWebServiceException("No authoritative zone was not found for domain: " + zoneName); + throw new DnsWebServiceException("No such authoritative zone was found: " + zoneName); if (zoneInfo.Internal) throw new DnsWebServiceException("Access was denied to manage internal DNS Server zone."); @@ -1422,7 +1438,7 @@ namespace DnsServerCore AuthZoneInfo zoneInfo = _dnsWebService.DnsServer.AuthZoneManager.GetAuthZoneInfo(zoneName); if (zoneInfo is null) - throw new DnsWebServiceException("No such zone was found: " + zoneName); + throw new DnsWebServiceException("No such authoritative zone was found: " + zoneName); if (zoneInfo.Internal) throw new DnsWebServiceException("Access was denied to manage internal DNS Server zone."); @@ -1580,7 +1596,7 @@ namespace DnsServerCore AuthZoneInfo zoneInfo = _dnsWebService.DnsServer.AuthZoneManager.GetAuthZoneInfo(zoneName); if (zoneInfo is null) - throw new DnsWebServiceException("No authoritative zone was not found for domain: " + zoneName); + throw new DnsWebServiceException("No such authoritative zone was found: " + zoneName); if (zoneInfo.Internal) throw new DnsWebServiceException("Access was denied to manage internal DNS Server zone."); @@ -1714,7 +1730,7 @@ namespace DnsServerCore AuthZoneInfo zoneInfo = _dnsWebService.DnsServer.AuthZoneManager.GetAuthZoneInfo(zoneName); if (zoneInfo is null) - throw new DnsWebServiceException("No authoritative zone was not found for domain: " + zoneName); + throw new DnsWebServiceException("No such authoritative zone was found: " + zoneName); if (zoneInfo.Internal) throw new DnsWebServiceException("Access was denied to manage internal DNS Server zone."); @@ -1746,7 +1762,7 @@ namespace DnsServerCore AuthZoneInfo zoneInfo = _dnsWebService.DnsServer.AuthZoneManager.FindAuthZoneInfo(string.IsNullOrEmpty(zoneName) ? domain : zoneName); if (zoneInfo is null) - throw new DnsWebServiceException("No authoritative zone was not found for domain: " + domain); + throw new DnsWebServiceException("No such authoritative zone was found: " + domain); if (zoneInfo.Internal) throw new DnsWebServiceException("Access was denied to manage internal DNS Server zone."); @@ -2131,7 +2147,7 @@ namespace DnsServerCore AuthZoneInfo zoneInfo = _dnsWebService.DnsServer.AuthZoneManager.FindAuthZoneInfo(string.IsNullOrEmpty(zoneName) ? domain : zoneName); if (zoneInfo is null) - throw new DnsWebServiceException("No authoritative zone was not found for domain: " + domain); + throw new DnsWebServiceException("No such authoritative zone was found: " + domain); UserSession session = context.GetCurrentSession(); @@ -2167,7 +2183,7 @@ namespace DnsServerCore AuthZoneInfo zoneInfo = _dnsWebService.DnsServer.AuthZoneManager.FindAuthZoneInfo(string.IsNullOrEmpty(zoneName) ? domain : zoneName); if (zoneInfo is null) - throw new DnsWebServiceException("No authoritative zone was not found for domain: " + domain); + throw new DnsWebServiceException("No such authoritative zone was found: " + domain); if (zoneInfo.Internal) throw new DnsWebServiceException("Access was denied to manage internal DNS Server zone."); @@ -2348,7 +2364,7 @@ namespace DnsServerCore AuthZoneInfo zoneInfo = _dnsWebService.DnsServer.AuthZoneManager.FindAuthZoneInfo(string.IsNullOrEmpty(zoneName) ? domain : zoneName); if (zoneInfo is null) - throw new DnsWebServiceException("No authoritative zone was not found for domain: " + domain); + throw new DnsWebServiceException("No such authoritative zone was found: " + domain); if (zoneInfo.Internal) throw new DnsWebServiceException("Access was denied to manage internal DNS Server zone.");