From 6de97a3b8b5e7cf0f4f0fd5516c3336501decd05 Mon Sep 17 00:00:00 2001 From: ximon18 <3304436+ximon18@users.noreply.github.com> Date: Tue, 5 Dec 2023 13:14:49 +0100 Subject: [PATCH] Updated to krill-ui v0.8.0. --- README.md | 3 +++ src/daemon/http/statics.rs | 8 ++++---- ui/assets/de-aaa0f1e4.js | 1 - ui/assets/de-faf2935a.js | 1 + ui/assets/{index-0659e542.js => index-16c05fa1.js} | 2 +- ui/index.html | 2 +- 6 files changed, 10 insertions(+), 7 deletions(-) delete mode 100644 ui/assets/de-aaa0f1e4.js create mode 100644 ui/assets/de-faf2935a.js rename ui/assets/{index-0659e542.js => index-16c05fa1.js} (99%) diff --git a/README.md b/README.md index b3c9624cb..6baef3ffd 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,9 @@ or the server is rebooted in the middle of writing. This issue was introduced in release 0.14.0, and we recommend that all users upgrade to this version to avoid issues. +This release also includes: +- Updated German UI translations krill-ui/#51 + ## 0.14.2 'Extra, Extra, Extra!' This release fixes an additional corner case in the migration code that affects diff --git a/src/daemon/http/statics.rs b/src/daemon/http/statics.rs index ed40261fd..f3390bc9e 100644 --- a/src/daemon/http/statics.rs +++ b/src/daemon/http/statics.rs @@ -17,10 +17,10 @@ pub async fn statics(req: Request) -> RoutingResult { "/assets/favicon-f84116cb.ico" => Ok(HttpResponse::fav(FAVICON)), - "/assets/index-0659e542.js" => Ok(HttpResponse::js(JS_INDEX)), + "/assets/index-16c05fa1.js" => Ok(HttpResponse::js(JS_INDEX)), "/assets/en-d3d88bc8.js" => Ok(HttpResponse::js(JS_TRANSLATIONS_ENGLISH)), - "/assets/de-aaa0f1e4.js" => Ok(HttpResponse::js(JS_TRANSLATIONS_GERMAN)), + "/assets/de-faf2935a.js" => Ok(HttpResponse::js(JS_TRANSLATIONS_GERMAN)), "/assets/es-52cbfc21.js" => Ok(HttpResponse::js(JS_TRANSLATIONS_SPANISH)), "/assets/fr-ac1aafd8.js" => Ok(HttpResponse::js(JS_TRANSLATIONS_FRENCH)), "/assets/gr-5a66c94a.js" => Ok(HttpResponse::js(JS_TRANSLATIONS_GREEK)), @@ -70,9 +70,9 @@ pub static INDEX: &[u8] = include_bytes!("../../../ui/index.html"); static FAVICON: &[u8] = include_bytes!("../../../ui/assets/favicon-f84116cb.ico"); -static JS_INDEX: &[u8] = include_bytes!("../../../ui/assets/index-0659e542.js"); +static JS_INDEX: &[u8] = include_bytes!("../../../ui/assets/index-16c05fa1.js"); -static JS_TRANSLATIONS_GERMAN: &[u8] = include_bytes!("../../../ui/assets/de-aaa0f1e4.js"); +static JS_TRANSLATIONS_GERMAN: &[u8] = include_bytes!("../../../ui/assets/de-faf2935a.js"); static JS_TRANSLATIONS_ENGLISH: &[u8] = include_bytes!("../../../ui/assets/en-d3d88bc8.js"); static JS_TRANSLATIONS_SPANISH: &[u8] = include_bytes!("../../../ui/assets/es-52cbfc21.js"); static JS_TRANSLATIONS_FRENCH: &[u8] = include_bytes!("../../../ui/assets/fr-ac1aafd8.js"); diff --git a/ui/assets/de-aaa0f1e4.js b/ui/assets/de-aaa0f1e4.js deleted file mode 100644 index 7965ee3a2..000000000 --- a/ui/assets/de-aaa0f1e4.js +++ /dev/null @@ -1 +0,0 @@ -const e={common:{readthedocs:"Lesen Sie die Dokumentation",report:"Ein Problem melden",confirm:"Bestätigen",cancel:"Abbruch",ok:"OK",error:"Error",success:"Erfolgreich!",copy:"In die Zwischenablage kopieren",download:"Download",dropOrClick:"Die Datei hierhin ziehen oder zum Hochladen hier klicken",started:"Krill läuft seit",newversion:"Es gibt eine neue Version!",supportcontracts:"Support Verträge",warning:"Warnung",idle:"Sie wurden aufgrund von Inaktivität ausgeloggt.",nodata:"Keine Daten",copySuccess:"XML in die Zwischenablage kopiert",edit:"Ändern",page:"page",userInfo:{title:"Login Details",user:"Benutzer"}},login:{password:"Passwort",placeholder:"Ihr Passwort",signin:"Einloggen",required:"Bitte geben Sie Ihr Passwort ein",error:"Das eingegebene Passwort ist falsch",copied:"Nutzen Sie kein Passwort von https://xkcd.com/936/",id:"Benutzer",idPlaceholder:"Ihr Benutzername",idRequired:"Bitte Ihren Benutzernamen eingeben",retry:"Klicken Sie {0} um zurück zum Login zu gelangen.",here:"hier"},onboarding:{welcome:"Willkommen zu Krill",welcomeHtml:"Starten wir mit der Erstellung Ihrer RPKI Zertifizierungsstelle (CA). Diese wird zur Konfiguration einer delegierten RPKI mit einer oder mehreren Eltern-Zertifizierungsstellen benötigt. Im Normalfall ist dies Ihre Regionale oder Nationale Internet Registrierungsstelle.

Der von Ihnen gewählte Name wird zur Identifizierung Ihrer Zertifizierungsstelle gegenüber den Eltern- und Kinderzertifizierungsstellen genutzt. Der Name selber wird nicht in der RPKI veröffentlicht. Bitte wählen Sie den Namen so, dass er es anderen erlaubt Ihre Organisation zu identifizieren. Dieser Name kann nicht mehr geändert werden.",addCAForm:{required:"Dies ist ein Pflichtfeld",format:"Kein gültiger Name für eine Zertifizierungsstelle",confirm:"Zertifizierungsstelle erstellen",confirmation:{title:"Warnung",message:"Dieser Name kann nicht nachträglich geändert werden. Fortfahren?"}}},cas:{loading:"Lade Zertifizierungsstellen",ca:"Zertifizierungsstelle",cas:"Zertifizierungsstellen",search:"Suche Zertifizierungsstellen...",noCas:"Aktuell sind keine Zertifizierungsstellen festgelegt."},caDetails:{loading:"Lade {handle}",refresh:"Aktualisiere {handle}. Dies kann einige Minuten dauern",current:"Aktuelle Zertifizierungsstelle",download:"Download PEM",noRoas:"Keine ROAs gefunden.",noResources:"Sie haben noch keine Ressourcen erhalten",noChildren:"Keine Kinder gefunden.",addRoa:"ROA hinzufügen",roas:"ROAs",resources:"Ressourcen",parents:"Eltern",repo:"Repository",type:"Typ",properties:"Eigenschaften",property:"Eigenschaft",value:"Wert",kind:"Art",resource:"Ressource",children:"Kinder",handle:"Name",comment:"Anmerkung",maxLength:"MaxLength",maxLengthTooltip:"Wenn maxLength nicht angegeben wird, wird die Präfixlänge genutzt.",confirmation:{title:"Warnung",message:"Diese Aktion entfernt das ROA '{prefix}-{max_length} => {asn}'. Fortfahren?",added:"ROA hinzugefügt",retired:"ROA entfernt",retiredSuccess:"Das ROA wurde entfernt",addedSuccess:"Das ROA wurde hinzugefügt",commentUpdatedSuccess:"Die Anmerkung des ROAs wurde aktualisiert"},addROAForm:{required:"Dies ist ein Pflichtfeld",asn_format:"Dies ist kein gültiges ASN",prefix_format:"Bitte geben Sie ein gültiges IPv4 oder IPv6 Präfix ein"},onboardingWarning:"Um Ihr Zertifikat und Ihre ROAs zu veröffentlichen müssen Sie Ihre Zertifizierungsstelle mit einer öffentlichen RPKI Datenbank (Repository) verbinden. Sobald die Konfiguration der Eltern-Zertifizierungsstelle abgeschlossen ist, wird die Relying Party Software mit dem Herunterladen Ihres Zertifikates sowie Ihrer ROAs, welche in dieser Datenbank veröffentlicht wurden, beginnen.",initializeRepository:"Sie müssen die RPKI Datenbank (Repository) konfigurieren bevor Ihre Zertifizierungsstelle die Resourcen-Zertifikate von der Eltern-Zertifizierungsstelle anfordern kann.",initialize:"Bitte initialisieren Sie die RPKI Datenbank (Repository) und/oder die Eltern-Zertifizierungsstelle zuerst.",noResourcesYet:"Sie haben noch keine Ressourcen erhalten",clickToRefresh:"Klicken Sie hier um neu zu laden",parentsTab:{request:"Anfrage der Kinderzertifizierungsstelle",response:"Antwort der Eltern-Zertifizierungsstelle",addParent:"Eine zusätzliche Eltern-Zertifizierungsstelle hinzufügen",addParentSuccess:"Eltern-Zertifizierungsstelle hinzugefügt",name:"Name der Eltern-Zertifizierungsstelle",namerequired:"Ein Name der Eltern-Zertifizierungsstelle ist verpflichtend",nameformat:"Dies ist kein gültiger Name"},repoTab:{request:"Anfrage des Publishers",response:"Antwort der Datenbank (Repository)",addRepo:"Eine Datenbank (Repository) hinzufügen",addRepoSuccess:"Datenbank (Repository) hinzugefügt"},analyseThis:"Meine ROAs analysieren",analysis:"ROA Analyse",suggestions:{following:"Bitte überprüfen Sie die folgenden vorgeschlagenen Änderungen an Ihren ROAs.",readMore:"Weitere Informationen...",nochanges:"Keine Änderungsvorschläge im Moment",adding:"Hinzufügen",removing:"Entfernen des ROA",keep:"Alles beibehalten.",willResult:"Wird resultieren in",yourChoice:"Ihre Auswahl",ourSuggestion:"Unser Vorschlag",ourSuggestionHelp:"Unser Vorschlag basiert auf der RIPE RIS Routing Information, bitte überprüfen!",addThis:"Dieses hinzufügen",removeThis:"Dieses entfernen",willAdd:"Fügt dieses ROA hinzu",willRemove:"Entfernt dieses ROA",reasons:{not_found:"Nicht gefunden",not_held:"Das Präfix ist nicht länger in einem Ihrer Zertifikate enthalten. Das ROA wird nicht veröffentlicht",invalid_asn:"Ungültiges ASN",invalid_length:"Ungültige Länge",stale:"Nicht sichtbar",disallowing:"ROA führt zu ungültigen Ankündigungen. Die Nutzung eines AS0 ROA wird stattdessen empfohlen.",as0_redundant:"Redundantes ROA",redundant:"Redundantes ROA",too_permissive:"Nicht restriktiv genug",specific:"Spezifische Ankündigungen im ROA erlauben welches nicht restriktiv genug wäre",new:"Neu"}},syncParents:"Synchronisiere mit Eltern-Zertifizierungsstelle",syncRepo:"Repository aktualisieren",lastExchange:"Letzte Synchronisierung",exchangeUri:"URI",nextExchange:"Nächste Synchronisierung vor",allResources:"Ihre zertifizierten IP- und ASN-Adressen",entitlements:"Berechtigte Adressen",showEntitlements:"Zeige Details",parentCertificate:"Eltern-Zertifikat",published:"Veröffentlicht"},announcements:{noRoasOrAnnouncements:"Keine ROAs oder BGP-Ankündigung gefunden.",search:"Suche nach ASN, Präfix, Status...",authorizes:"Autorisiert {number} BGP-Ankündigungen",disallows:"Verweigert {number} BGP-Ankündigungen",asn:"ASN",prefix:"Präfix",stateLabel:"Status",state:{roa_seen:"SICHTBAR",roa_seen_help:"Dieses ROA stimmt mit BGP Ankündigungen überein",roa_unseen:"NICHT SICHTBAR",roa_unseen_help:"Wir sehen keine BGP Ankündigungen welche mit dem ROA übereinstimmen",roa_not_held:"PRÄFIX ENTFERNT",roa_not_held_help:"Das Präfix ist nicht länger in einem Ihrer Zertifikate enthalten. Das ROA wird nicht veröffentlicht",roa_no_announcement_info:"KEINE BGP-ANKÜNDIGUNG INFORMATION",roa_too_permissive:"NICHT RESTRIKTIV GENUG",roa_too_permissive_help:"Dieses ROA stimmt mit BGP Ankündigungen überein, erlaubt darüber hinaus aber auch noch weitere BGP Ankündigungen",roa_disallowing:"Verursacht ungültige Ankündigungen",roa_disallowing_help:"Dieses ROA führt ausschließlich zu ungültigen Ankündigungen. Falls dies beabsichtigt ist, wird die Nutzung eines AS0 ROAs empfohlen.",roa_redundant:"REDUNDANT",roa_redundant_help:"Dieses ROA ist redundant da ein oder mehrere andere ROAs das Präfix, die Länge und das ASN bereits einschließen",roa_as0:"AS0",roa_as0_help:"Dieses ROA dient dazu alle BGP Ankündigungen für dieses Präfix zu verbieten",roa_as0_redundant:"REDUNDANT",roa_as0_redundant_help:"Dieses AS0 ROA ist redundant da ein oder mehrere andere ROAs das Präfix bereits einschließen",announcement_not_found:"NICHT GEFUNDEN",announcement_not_found_help:"Diese BGP Ankündigung wird von keinem Ihrer ROAs geschützt",announcement_invalid_length:"UNGÜLTIGE LÄNGE",announcement_invalid_length_help:"Diese BGP Ankündigung ist nicht erlaubt, da es spezifischer ist als das Präfix und die MaxLength welche Sie für dieses ASN autorisiert haben",announcement_invalid_asn:"UNGÜLTIGES ASN",announcement_invalid_asn_help:"Diese BGP Ankündigung ist nicht erlaubt, da Sie nur das Präfix für ein anderes ASN autorisiert haben",announcement_disallowed:"DISALLOWED BY AS0",announcement_disallowed_help:"This announcement is not allowed because you have an AS0 ROA that disallows it"},download:"CSV herunterladen"},deltaErrors:{duplicates:"ROA existiert bereits",covered:"Überlappendes ROA existiert",notheld:"Nicht Ihr Präfix",unknowns:"ROA existiert nicht",invalid_length:"Ungültige Länge",covering:"Überlappt mit bestehendem ROA",as0_exists:"Überlappendes AS0 ROA besteht bereits",as0_overlaps:"Überlappt bestehendes ROA"},errors:{repo_not_set:"Sie müssen erst eine Datenbank (Repository) konfigurieren",pub_unknown:"Publisher '{publisher}' unbekannt",pub_duplicate:"Publisher '{publisher}' wurde bereits initialisiert",pub_outside_jail:"Publisher uri '{uri}' außerhalb der Datenbank (Repository) uri '{sia_base}'",pub_uri_no_slash:"Publisher uri '{uri}' muss mit einen Slash enden",pub_no_embedded_repo:"Keine integrierte Datenbank (Repository) konfiguriert",ca_duplicate:"Die Zertifizierungsstelle '{ca}' wurde bereits initialisiert",ca_unknown:"Die Zertifizierungsstelle '{ca}' ist unbekannt",ca_repo_same:"Diese Datenbank (Repository) ist bereits in Benutzung",ca_repo_issue:"Die Datenbank (Repository) hat folgenden Error zurückgeliefert: {cause}",ca_repo_response_invalid_xml:"Datenbank (Repository) Antwort ist ungültig",ca_repo_response_wrong_xml:"Antwort der Eltern-Zertifizierungsstelle anstatt der Datenbank (Repository) erhalten",ca_parent_duplicate:"Es existiert bereits eine Eltern-Zertifizierungsstelle mit dem Namen '{parent}'",ca_parent_xml_duplicate:"Diese Antwort XML ist bereits in Gebrauch von einer Eltern-Zertifizierungsstelle mit dem Namen '{parent}'",ca_parent_unknown:"Es existiert keine Eltern-Zertifizierungsstelle mit dem Namen '{parent}'",ca_parent_issue:"Error von Eltern-Zertifizierungsstelle empfangen '{parent}': {cause}",ca_parent_response_invalid_xml:"Ungültige Eltern-Zertifizierungsstelle xml empfangen",ca_parent_response_wrong_xml:"Datenbank (Repository) Antwort während des Hinzufügens der Eltern-Zertifizierungsstelle erhalten",ca_child_duplicate:"Es existiert bereits eine Kinder-Zertifizierungsstelle mit dem Namen '{child}'",ca_child_unknown:"Es existiert keine Kinder-Zertifizierungsstelle mit dem Namen '{child}'",ca_child_resources_required:"Sie müssen Ressourcen für die Kinder-Zertifizierungsstelle angeben '{child}'",ca_roa_unknown:"Unbekanntes ROA kann nicht entfernt werden '{prefix}-{max_length} => {asn}'",ca_roa_duplicate:"ROA existiert bereits '{prefix}-{max_length} => {asn}'",ca_roa_invalid_max_length:"Ungültige maxLength in ROA '{prefix}-{max_length} => {asn}'",ca_roa_not_entitled:"Das ROA Präfix '{prefix}' ist in keinem Ihrer aktuellen Zertifikate zu finden",ta_not_allowed:"Diese Funktionalität wird vom Test Vertrauensanker nicht unterstützt",ta_name_reserved:"Name reserviert",ca_roa_delta_error:"Das ROA wurde aus den folgenden Gründen zurückgewiesen",api_insufficient_rights:"Ihr Benutzer hat keine ausreichenden Rechte um die Aktion durchzuführen. Bitte kontaktieren Sie Ihren Administrator.",api_invalid_credentials:"Die eingegebenen Benutzerdaten waren inkorrekt.",api_login_error:"Während des Logins ist ein Fehler aufgetreten: {cause}",api_auth_transient_error:"Bei der Authentifizierung Ihrer Anfrage ist ein (temporärer) Fehler aufgetreten. Bitte versuchen Sie es später erneut.",api_auth_permanent_error:"Bei der Authentifizierung Ihrer Anfrage ist ein Fehler aufgetreten. Bitte kontaktieren Sie Ihren Administrator.",api_auth_session_expired:"Ihre Sitzung ist abgelaufen. Bitte loggen Sie sich erneut ein..",general_error:"Es ist ein Fehler aufgetreten. Bitte kontaktieren Sie Ihren Administrator."},testbed:{welcome:"Willkommen zur RPKI Testumgebung",disclaimer:{heading:"Haftungsausschluss",body:"Diese Testumgebung stellt eine komplett unabhängige RPKI Hierarchie zu Evaluierungszwecken zu Verfügung. Sie erlaubt Ihnen die Registrierung jedweder Ressourcen für Ihre Kinder-Zertifizierungsstelle. Es werden keinerlei Garantien bezüglich der Verfügbarkeit des Dienstes gegeben. Falls Probleme auftreten, melden Sie diese bitte."},rpconfighelp:{heading:"Testumgebungs TAL",body:"Um die Daten für diese Testumgebung zu laden, starten Sie bitte den Download von diesem Trust Anchor Locator (TAL) und konfigurieren Sie diesen in Ihrer Relying Party Software. Bitte beachten Sie, dass Sie diesen TAL NIEMALS in einer Produktivumgebung einsetzen sollten. Er wird ausschließlich zu Testzwecken zur Verfügung gestellt."},regunreg:{heading:"(De-)Registrieren",body:"

Nutzen Sie das Formular um Ihre RPKI Zertifizierungsstelle als Kind der Testumgebung zu registrieren. Danach können Sie Route Origin Authorisations (ROAs) für Ihre Ressourcen erstellen.

Falls Sie nicht Ihre eigenen Rsync und RRDP Datenbanken bereitstellen wollen, können Sie das Publisher Registrierungsformular nutzen um Ihre ROAs in der Datenbank der Testumgebung zu veröffentlichen. Nutzen Sie das Deregistrierungsformular um bestehende Beziehungen aufzulösen (sogar die von anderen Nutzern der Testumgebung!).

"},rfcdoclink:"Klicken Sie hier um die RFC-8183 Dokumentation für dieses XML zu sehen",childhandle:"Kind Handle",publisherhandle:"Publisher Handle",responseXML:"Testumgebung Antwort XML",addChild:{heading:"Zertifizierungsstelle registrieren",requestXML:{label:"Kind Anfrage XML",placeholder:"Fügen Sie Ihr XML hier ein"},asnresources:{label:"ASN Ressourcen",placeholder:"Die AS Ressourcen: z.B. AS1, AS3-4"},ipv4resources:{label:"IPv4 Ressourcen",placeholder:"Die IPv4 Ressourcen: z.B. 192.168.0.0/16"},ipv6resources:{label:"IPv6 Ressourcen",placeholder:"Die IPv6 Ressourcen: z.B. 2001:db8::/32"},confirm:"Kinder-Zertifizierungsstelle registrieren",format:"Dies ist keine valide Kind XML Anfrage",required:"Fügen Sie eine Kind XML Anfrage hinzu",confirmation:{title:"Warnung",message:"Sind Sie sicher, dass Sie diese Kinder-Zertifizierungsstelle in der Testumgebung registrieren wollen?"},success:"Kinder-Zertifizierungsstelle '{child_handle}' wurde der Testumgebung hinzugefügt.",registeranother:"Eine andere Zertifizierungsstelle hinzufügen"},removeChild:{heading:"Zertifizierungsstelle entfernen",placeholder:"Geben Sie den Namen der Zertifizierungsstelle ein welche entfernt werden soll",confirm:"Kinder-Zertifizierungsstelle entfernen",confirmation:{title:"Warnung",message:"Sind Sie sicher, dass Sie diese Kinder-Zertifizierungsstelle aus der Testumgebung entfernen wollen?"},success:"Kinder-Zertifizierungsstelle '{child_handle}' wurde aus der Testumgebung entfernt."},addPublisher:{heading:"Publisher registrieren",requestXML:{label:"Publisher Anfrage XML",placeholder:"Fügen Sie Ihr XML hier ein"},confirm:"Publisher registrieren",format:"Dies ist keine valide Publisher XML Anfrage",required:"Fügen Sie eine Publisher XML Anfrage hinzu",confirmation:{title:"Warnung",message:"Sind Sie sicher, dass Sie diesen Publisher in der Testumgebung registrieren wollen?"},success:"Publisher '{publisher_handle}' wurde der Testumgebung hinzugefügt.",registeranother:"Einen anderen Publisher hinzufügen"},removePublisher:{heading:"Publisher entfernen",placeholder:"Geben Sie den Namen des Publishers ein welcher entfernt werden soll",confirm:"Publisher entfernen",confirmation:{title:"Warnung",message:"Sind Sie sicher, dass Sie diesen Publisher aus der Testumgebung entfernen wollen?"},success:"Publisher '{publisher_handle}' wurde aus der Testumgebung entfernt."},errors:{invalid_xml:"Ungültiges XML: {err}",missing_xml_el:"Fehlendes Element {el}",missing_xml_child_el:"Fehlendes Kind-Element {el} vom Element {parent}",missing_xml_attr:"Fehlendes Attribut {attr} vom Element {el}",empty_xml_el:"Element {el} darf nicht leer sein",empty_xml_attr:"Attribut {attr} vom Element {el} darf nicht leer sein",non_ascii_xml_el:"Element {el} darf nur ASCII-Zeichen enthalten",child_handle_required:"Kind Handle wird benötigt",publisher_handle_required:"Publisher Handle wird benötigt",non_base64_certificate_xml_el:"Element {el} muss ein korrektes Base64 encodiertes selbst-signiertes X.509 BPKI Zertifikat enthalten",invalid_registration_data:"Ihre Registrierungsdaten konnten nicht korrekt verarbeitet werden"}}};export{e as translations}; diff --git a/ui/assets/de-faf2935a.js b/ui/assets/de-faf2935a.js new file mode 100644 index 000000000..31b8efc00 --- /dev/null +++ b/ui/assets/de-faf2935a.js @@ -0,0 +1 @@ +const e={common:{readthedocs:"Lesen Sie die Dokumentation",report:"Ein Problem melden",confirm:"Bestätigen",cancel:"Abbruch",ok:"OK",error:"Error",success:"Erfolgreich!",copy:"In die Zwischenablage kopieren",download:"Download",dropOrClick:"Die Datei hierhin ziehen oder zum Hochladen hier klicken",started:"Krill läuft seit",newversion:"Es gibt eine neue Version!",supportcontracts:"Support Verträge",warning:"Warnung",idle:"Sie wurden aufgrund von Inaktivität ausgeloggt.",nodata:"Keine Daten",copySuccess:"XML in die Zwischenablage kopiert",edit:"Ändern",page:"page",userInfo:{title:"Login Details",user:"Benutzer"}},login:{password:"Passwort",placeholder:"Ihr Passwort",signin:"Einloggen",required:"Bitte geben Sie Ihr Passwort ein",error:"Das eingegebene Passwort ist falsch",copied:"Nutzen Sie kein Passwort von https://xkcd.com/936/",id:"Benutzer",idPlaceholder:"Ihr Benutzername",idRequired:"Bitte Ihren Benutzernamen eingeben",retry:"Klicken Sie {0} um zurück zum Login zu gelangen.",here:"hier"},onboarding:{welcome:"Willkommen zu Krill",welcomeHtml:"Starten wir mit der Erstellung Ihrer RPKI Zertifizierungsstelle (CA). Diese wird zur Konfiguration von delegierter RPKI mit übergeordneten Zertifizierungsstellen benötigt. Im Normalfall ist dies Ihre Regionale oder Nationale Internet Registrierungsstelle.

Der von Ihnen gewählte Name wird zur Identifizierung Ihrer Zertifizierungsstelle gegenüber den über- und untergeordneten Zertifizierungsstellen genutzt. Der Name selbst wird nicht in der RPKI veröffentlicht. Bitte wählen Sie einen Namen, der es anderen erlaubt Ihre Organisation zu identifizieren. Dieser Name kann nachträglich nicht mehr geändert werden.",addCAForm:{required:"Dies ist ein Pflichtfeld",format:"Ungültiger Name für eine Zertifizierungsstelle",confirm:"Zertifizierungsstelle erstellen",confirmation:{title:"Warnung",message:"Dieser Name kann nicht nachträglich geändert werden. Fortfahren?"}}},cas:{loading:"Lade Zertifizierungsstellen",ca:"Zertifizierungsstelle",cas:"Zertifizierungsstellen",search:"Suche Zertifizierungsstellen...",noCas:"Aktuell sind keine Zertifizierungsstellen festgelegt."},caDetails:{loading:"Lade {handle}",refresh:"Aktualisiere {handle}. Dies kann einige Minuten dauern",current:"Aktuelle Zertifizierungsstelle",download:"Download PEM",noRoas:"Keine ROAs gefunden.",noResources:"Sie haben noch keine Ressourcen erhalten",noChildren:"Keine untergeordneten Zertifizierungsstellen gefunden.",addRoa:"ROA hinzufügen",roas:"ROAs",resources:"Ressourcen",parents:"Übergeordnete CAs",repo:"Repository",type:"Typ",properties:"Eigenschaften",property:"Eigenschaft",value:"Wert",kind:"Art",resource:"Ressource",children:"Untergeordnete CAs",handle:"Name",comment:"Anmerkung",maxLength:"MaxLength",maxLengthTooltip:"Wenn maxLength nicht angegeben wird, wird die Präfixlänge genutzt.",confirmation:{title:"Warnung",message:"Diese Aktion entfernt das ROA '{prefix}-{max_length} => {asn}'. Fortfahren?",added:"ROA hinzugefügt",retired:"ROA entfernt",retiredSuccess:"Das ROA wurde entfernt",addedSuccess:"Das ROA wurde hinzugefügt",commentUpdatedSuccess:"Die Anmerkung des ROAs wurde aktualisiert"},addROAForm:{required:"Dies ist ein Pflichtfeld",asn_format:"Dies ist kein gültiges ASN",prefix_format:"Bitte geben Sie ein gültiges IPv4 oder IPv6 Präfix ein"},onboardingWarning:"Um Ihr Zertifikat und Ihre ROAs zu veröffentlichen müssen Sie Ihre Zertifizierungsstelle mit einer öffentlichen RPKI Datenbank (Repository) verbinden. Sobald die Konfiguration der Eltern-Zertifizierungsstelle abgeschlossen ist, wird die Relying Party Software mit dem Herunterladen Ihres Zertifikates sowie Ihrer ROAs, welche in dieser Datenbank veröffentlicht wurden, beginnen.",initializeRepository:"Sie müssen die RPKI Datenbank (Repository) konfigurieren bevor Ihre Zertifizierungsstelle die Resourcen-Zertifikate von der Eltern-Zertifizierungsstelle anfordern kann.",initialize:"Bitte initialisieren Sie die RPKI Datenbank (Repository) und/oder die Eltern-Zertifizierungsstelle zuerst.",noResourcesYet:"Sie haben noch keine Ressourcen erhalten",clickToRefresh:"Klicken Sie hier, um neu zu laden",parentsTab:{request:"Anfrage der untergeordneten Zertifizierungsstelle",response:"Antwort der übergeordneten Zertifizierungsstelle",addParent:"Eine zusätzliche übergeordnete Zertifizierungsstelle hinzufügen",addParentSuccess:"Übergeordnete Zertifizierungsstelle erfolgreich hinzugefügt",name:"Name der übergeordneten Zertifizierungsstelle",namerequired:"Ein Name für die übergeordnete Zertifizierungsstelle ist erforderlich",nameformat:"Dies ist kein gültiger Name"},repoTab:{request:"Anfrage des Publishers",response:"Antwort der Datenbank (Repository)",addRepo:"Eine Datenbank (Repository) hinzufügen",addRepoSuccess:"Datenbank (Repository) hinzugefügt"},analyseThis:"Meine ROAs analysieren",analysis:"ROA Analyse",suggestions:{following:"Bitte überprüfen Sie die folgenden vorgeschlagenen Änderungen an Ihren ROAs.",readMore:"Weitere Informationen...",nochanges:"Keine Änderungsvorschläge im Moment",adding:"Hinzufügen",removing:"Entfernen des ROA",keep:"Alles beibehalten.",willResult:"Wird resultieren in",yourChoice:"Ihre Auswahl",ourSuggestion:"Unser Vorschlag",ourSuggestionHelp:"Unser Vorschlag basiert auf der RIPE RIS Routing Information, bitte überprüfen!",addThis:"Dieses hinzufügen",removeThis:"Dieses entfernen",willAdd:"Fügt dieses ROA hinzu",willRemove:"Entfernt dieses ROA",reasons:{not_found:"Nicht gefunden",not_held:"Das Präfix ist nicht länger in einem Ihrer Zertifikate enthalten. Das ROA wird nicht veröffentlicht",invalid_asn:"Ungültiges ASN",invalid_length:"Ungültige Länge",stale:"Nicht sichtbar",disallowing:"ROA führt zu ungültigen Ankündigungen. Die Nutzung eines AS0 ROA wird stattdessen empfohlen.",as0_redundant:"Redundantes ROA",redundant:"Redundantes ROA",too_permissive:"Nicht restriktiv genug",specific:"Spezifische Ankündigungen im ROA erlauben welches nicht restriktiv genug wäre",new:"Neu"}},syncParents:"Synchronisiere mit übergeordneter Zertifizierungsstelle",syncRepo:"Repository aktualisieren",lastExchange:"Letzte Synchronisierung",exchangeUri:"URI",nextExchange:"Nächste Synchronisierung vor",allResources:"Ihre zertifizierten IP- und ASN-Adressen",entitlements:"Berechtigte Adressen",showEntitlements:"Zeige Details",parentCertificate:"Eltern-Zertifikat",published:"Veröffentlicht"},announcements:{noRoasOrAnnouncements:"Keine ROAs oder BGP-Ankündigung gefunden.",search:"Suche nach ASN, Präfix, Status...",authorizes:"Autorisiert {number} BGP-Ankündigungen",disallows:"Verweigert {number} BGP-Ankündigungen",asn:"ASN",prefix:"Präfix",stateLabel:"Status",state:{roa_seen:"SICHTBAR",roa_seen_help:"Dieses ROA stimmt mit BGP Ankündigungen überein",roa_unseen:"NICHT SICHTBAR",roa_unseen_help:"Wir sehen keine BGP Ankündigungen welche mit dem ROA übereinstimmen",roa_not_held:"PRÄFIX ENTFERNT",roa_not_held_help:"Das Präfix ist nicht länger in einem Ihrer Zertifikate enthalten. Das ROA wird nicht veröffentlicht",roa_no_announcement_info:"KEINE BGP-ANKÜNDIGUNG INFORMATION",roa_too_permissive:"NICHT RESTRIKTIV GENUG",roa_too_permissive_help:"Dieses ROA stimmt mit BGP Ankündigungen überein, erlaubt darüber hinaus aber auch noch weitere BGP Ankündigungen",roa_disallowing:"Verursacht ungültige Ankündigungen",roa_disallowing_help:"Dieses ROA führt ausschließlich zu ungültigen Ankündigungen. Falls dies beabsichtigt ist, wird die Nutzung eines AS0 ROAs empfohlen.",roa_redundant:"REDUNDANT",roa_redundant_help:"Dieses ROA ist redundant da ein oder mehrere andere ROAs das Präfix, die Länge und das ASN bereits einschließen",roa_as0:"AS0",roa_as0_help:"Dieses ROA dient dazu alle BGP Ankündigungen für dieses Präfix zu verbieten",roa_as0_redundant:"REDUNDANT",roa_as0_redundant_help:"Dieses AS0 ROA ist redundant da ein oder mehrere andere ROAs das Präfix bereits einschließen",announcement_not_found:"NICHT GEFUNDEN",announcement_not_found_help:"Diese BGP Ankündigung wird von keinem Ihrer ROAs geschützt",announcement_invalid_length:"UNGÜLTIGE LÄNGE",announcement_invalid_length_help:"Diese BGP Ankündigung ist nicht erlaubt, da es spezifischer ist als das Präfix und die MaxLength welche Sie für dieses ASN autorisiert haben",announcement_invalid_asn:"UNGÜLTIGES ASN",announcement_invalid_asn_help:"Diese BGP Ankündigung ist nicht erlaubt, da Sie nur das Präfix für ein anderes ASN autorisiert haben",announcement_disallowed:"DISALLOWED BY AS0",announcement_disallowed_help:"This announcement is not allowed because you have an AS0 ROA that disallows it"},download:"CSV herunterladen"},deltaErrors:{duplicates:"ROA existiert bereits",covered:"Überlappendes ROA existiert",notheld:"Nicht Ihr Präfix",unknowns:"ROA existiert nicht",invalid_length:"Ungültige Länge",covering:"Überlappt mit bestehendem ROA",as0_exists:"Überlappendes AS0 ROA besteht bereits",as0_overlaps:"Überlappt bestehendes ROA"},errors:{repo_not_set:"Sie müssen erst eine Datenbank (Repository) konfigurieren",pub_unknown:"Publisher '{publisher}' unbekannt",pub_duplicate:"Publisher '{publisher}' wurde bereits initialisiert",pub_outside_jail:"Publisher uri '{uri}' außerhalb der Datenbank (Repository) uri '{sia_base}'",pub_uri_no_slash:"Publisher uri '{uri}' muss mit einen Slash enden",pub_no_embedded_repo:"Keine integrierte Datenbank (Repository) konfiguriert",ca_duplicate:"Die Zertifizierungsstelle '{ca}' wurde bereits initialisiert",ca_unknown:"Die Zertifizierungsstelle '{ca}' ist unbekannt",ca_repo_same:"Diese Datenbank (Repository) ist bereits in Benutzung",ca_repo_issue:"Die Datenbank (Repository) hat folgenden Error zurückgeliefert: {cause}",ca_repo_response_invalid_xml:"Datenbank (Repository) Antwort ist ungültig",ca_repo_response_wrong_xml:"Antwort der übergeordneten Zertifizierungsstelle anstatt der Datenbank (Repository) erhalten",ca_parent_duplicate:"Es existiert bereits eine übergeordnete Zertifizierungsstelle mit dem Namen '{parent}'",ca_parent_xml_duplicate:"Diese Antwort XML ist bereits in Gebrauch von einer übergeordneten Zertifizierungsstelle mit dem Namen '{parent}'",ca_parent_unknown:"Es existiert keine übergeordnete Zertifizierungsstelle mit dem Namen '{parent}'",ca_parent_issue:"Error von übergeordneter Zertifizierungsstelle '{parent}' empfangen: {cause}",ca_parent_response_invalid_xml:"Ungültiges XML von übergeordneter Zertifizierungsstelle empfangen",ca_parent_response_wrong_xml:"Datenbank (Repository) Antwort während des Hinzufügens der übergeordneten Zertifizierungsstelle erhalten",ca_child_duplicate:"Es existiert bereits eine untergeordnete Zertifizierungsstelle mit dem Namen '{child}'",ca_child_unknown:"Es existiert keine untergeordnete Zertifizierungsstelle mit dem Namen '{child}'",ca_child_resources_required:"Sie müssen Ressourcen für die untergeordnete Zertifizierungsstelle angeben '{child}'",ca_roa_unknown:"Unbekanntes ROA kann nicht entfernt werden '{prefix}-{max_length} => {asn}'",ca_roa_duplicate:"ROA existiert bereits '{prefix}-{max_length} => {asn}'",ca_roa_invalid_max_length:"Ungültige maxLength in ROA '{prefix}-{max_length} => {asn}'",ca_roa_not_entitled:"Das ROA Präfix '{prefix}' ist in keinem Ihrer aktuellen Zertifikate zu finden",ta_not_allowed:"Diese Funktionalität wird vom Test Vertrauensanker nicht unterstützt",ta_name_reserved:"Name reserviert",ca_roa_delta_error:"Das ROA wurde aus den folgenden Gründen zurückgewiesen",api_insufficient_rights:"Ihr Benutzer hat keine ausreichenden Rechte um die Aktion durchzuführen. Bitte kontaktieren Sie Ihren Administrator.",api_invalid_credentials:"Die eingegebenen Benutzerdaten waren inkorrekt.",api_login_error:"Während des Logins ist ein Fehler aufgetreten: {cause}",api_auth_transient_error:"Bei der Authentifizierung Ihrer Anfrage ist ein (temporärer) Fehler aufgetreten. Bitte versuchen Sie es später erneut.",api_auth_permanent_error:"Bei der Authentifizierung Ihrer Anfrage ist ein Fehler aufgetreten. Bitte kontaktieren Sie Ihren Administrator.",api_auth_session_expired:"Ihre Sitzung ist abgelaufen. Bitte loggen Sie sich erneut ein..",general_error:"Es ist ein Fehler aufgetreten. Bitte kontaktieren Sie Ihren Administrator."},testbed:{welcome:"Willkommen zur RPKI Testumgebung",disclaimer:{heading:"Haftungsausschluss",body:"Diese Testumgebung stellt eine komplett unabhängige RPKI Hierarchie zu Evaluierungszwecken zu Verfügung. Sie erlaubt Ihnen die Registrierung jedweder Ressourcen für Ihre Kinder-Zertifizierungsstelle. Es werden keinerlei Garantien bezüglich der Verfügbarkeit des Dienstes gegeben. Falls Probleme auftreten, melden Sie diese bitte."},rpconfighelp:{heading:"Testumgebungs TAL",body:"Um die Daten für diese Testumgebung zu laden, starten Sie bitte den Download von diesem Trust Anchor Locator (TAL) und konfigurieren Sie diesen in Ihrer Relying Party Software. Bitte beachten Sie, dass Sie diesen TAL NIEMALS in einer Produktivumgebung einsetzen sollten. Er wird ausschließlich zu Testzwecken zur Verfügung gestellt."},regunreg:{heading:"(De-)Registrieren",body:"

Nutzen Sie das Formular um Ihre RPKI Zertifizierungsstelle als Kind der Testumgebung zu registrieren. Danach können Sie Route Origin Authorisations (ROAs) für Ihre Ressourcen erstellen.

Falls Sie nicht Ihre eigenen Rsync und RRDP Datenbanken bereitstellen wollen, können Sie das Publisher Registrierungsformular nutzen um Ihre ROAs in der Datenbank der Testumgebung zu veröffentlichen. Nutzen Sie das Deregistrierungsformular um bestehende Beziehungen aufzulösen (sogar die von anderen Nutzern der Testumgebung!).

"},rfcdoclink:"Klicken Sie hier um die RFC-8183 Dokumentation für dieses XML zu sehen",childhandle:"Kind Handle",publisherhandle:"Publisher Handle",responseXML:"Testumgebung Antwort XML",addChild:{heading:"Zertifizierungsstelle registrieren",requestXML:{label:"Kind Anfrage XML",placeholder:"Fügen Sie Ihr XML hier ein"},asnresources:{label:"ASN Ressourcen",placeholder:"Die AS Ressourcen: z.B. AS1, AS3-4"},ipv4resources:{label:"IPv4 Ressourcen",placeholder:"Die IPv4 Ressourcen: z.B. 192.168.0.0/16"},ipv6resources:{label:"IPv6 Ressourcen",placeholder:"Die IPv6 Ressourcen: z.B. 2001:db8::/32"},confirm:"Kinder-Zertifizierungsstelle registrieren",format:"Dies ist keine valide Kind XML Anfrage",required:"Fügen Sie eine Kind XML Anfrage hinzu",confirmation:{title:"Warnung",message:"Sind Sie sicher, dass Sie diese Kinder-Zertifizierungsstelle in der Testumgebung registrieren wollen?"},success:"Kinder-Zertifizierungsstelle '{child_handle}' wurde der Testumgebung hinzugefügt.",registeranother:"Eine andere Zertifizierungsstelle hinzufügen"},removeChild:{heading:"Zertifizierungsstelle entfernen",placeholder:"Geben Sie den Namen der Zertifizierungsstelle ein welche entfernt werden soll",confirm:"Kinder-Zertifizierungsstelle entfernen",confirmation:{title:"Warnung",message:"Sind Sie sicher, dass Sie diese Kinder-Zertifizierungsstelle aus der Testumgebung entfernen wollen?"},success:"Kinder-Zertifizierungsstelle '{child_handle}' wurde aus der Testumgebung entfernt."},addPublisher:{heading:"Publisher registrieren",requestXML:{label:"Publisher Anfrage XML",placeholder:"Fügen Sie Ihr XML hier ein"},confirm:"Publisher registrieren",format:"Dies ist keine valide Publisher XML Anfrage",required:"Fügen Sie eine Publisher XML Anfrage hinzu",confirmation:{title:"Warnung",message:"Sind Sie sicher, dass Sie diesen Publisher in der Testumgebung registrieren wollen?"},success:"Publisher '{publisher_handle}' wurde der Testumgebung hinzugefügt.",registeranother:"Einen anderen Publisher hinzufügen"},removePublisher:{heading:"Publisher entfernen",placeholder:"Geben Sie den Namen des Publishers ein welcher entfernt werden soll",confirm:"Publisher entfernen",confirmation:{title:"Warnung",message:"Sind Sie sicher, dass Sie diesen Publisher aus der Testumgebung entfernen wollen?"},success:"Publisher '{publisher_handle}' wurde aus der Testumgebung entfernt."},errors:{invalid_xml:"Ungültiges XML: {err}",missing_xml_el:"Fehlendes Element {el}",missing_xml_child_el:"Fehlendes Kind-Element {el} vom Element {parent}",missing_xml_attr:"Fehlendes Attribut {attr} vom Element {el}",empty_xml_el:"Element {el} darf nicht leer sein",empty_xml_attr:"Attribut {attr} vom Element {el} darf nicht leer sein",non_ascii_xml_el:"Element {el} darf nur ASCII-Zeichen enthalten",child_handle_required:"Kind Handle wird benötigt",publisher_handle_required:"Publisher Handle wird benötigt",non_base64_certificate_xml_el:"Element {el} muss ein korrektes Base64 encodiertes selbst-signiertes X.509 BPKI Zertifikat enthalten",invalid_registration_data:"Ihre Registrierungsdaten konnten nicht korrekt verarbeitet werden"}}};export{e as translations}; diff --git a/ui/assets/index-0659e542.js b/ui/assets/index-16c05fa1.js similarity index 99% rename from ui/assets/index-0659e542.js rename to ui/assets/index-16c05fa1.js index 1dc580878..64b4b5cf5 100644 --- a/ui/assets/index-0659e542.js +++ b/ui/assets/index-16c05fa1.js @@ -72,7 +72,7 @@ and limitations under the License. ${t.id_cert} -`}function E0(t){const e=[];if(t.too_permissive)for(const n of t.too_permissive){e.push({action:"remove",reason:vt.tooPermissive,prefix:n.current.prefix,asn:n.current.asn,max_length:n.current.max_length||parseInt(n.current.prefix.split("/")[1])});for(const r of n.new)e.push({action:"remove",reason:vt.specific,prefix:r.prefix,asn:r.asn,max_length:parseInt(r.prefix.split("/")[1])})}if(t.not_found)for(const n of t.not_found)e.push({action:"add",reason:vt.notFound,prefix:n.prefix,asn:n.asn,max_length:parseInt(n.prefix.split("/")[1])});if(t.invalid_length)for(const n of t.invalid_length)e.push({action:"add",reason:vt.invalidLength,prefix:n.prefix,asn:n.asn,max_length:parseInt(n.prefix.split("/")[1])});if(t.redundant)for(const n of t.redundant)e.push({action:"remove",reason:vt.redundant,prefix:n.prefix,asn:n.asn,max_length:parseInt(n.prefix.split("/")[1])});if(t.stale)for(const n of t.stale)e.push({action:"remove",reason:vt.stale,prefix:n.prefix,asn:n.asn,max_length:parseInt(n.prefix.split("/")[1])});if(t.invalid_asn)for(const n of t.invalid_asn)e.push({action:"remove",reason:vt.invalidAsn,prefix:n.prefix,asn:n.asn,max_length:parseInt(n.prefix.split("/")[1])});if(t.as0_redundant)for(const n of t.as0_redundant)e.push({action:"remove",reason:vt.as0Redundant,prefix:n.prefix,asn:n.asn,max_length:parseInt(n.prefix.split("/")[1])});if(t.disallowing)for(const n of t.disallowing)e.push({action:"remove",reason:vt.disallowing,prefix:n.prefix,asn:n.asn,max_length:parseInt(n.prefix.split("/")[1])});return e}class wm{constructor(){ce(this,"baseUrl");ce(this,"VERSION_URL","https://api.github.com/repos/nlnetlabs/krill/releases/latest");ce(this,"token");this.baseUrl=window.location.origin,this.token=null}setToken(e){this.token=e}async get(e,n){const r=await fetch(`${this.baseUrl}${e}`,{...n,headers:{Authorization:`Bearer ${this.token}`,...(n==null?void 0:n.headers)||{}}});if((r.status===401||r.status===403)&&this.setToken(null),!(r.headers.get("Content-Type")==="application/json")){const a=await r.text();if(r.status===200)return a;throw{status:r.status,msg:a}}const s=await r.json();if(r.status===200)return s;throw{status:r.status,msg:s.msg||null}}post(e,n){return this.get(e,{method:"POST",...n})}postCas(e){return this.post("/api/v1/cas",{body:JSON.stringify({handle:e}),headers:{"Content-Type":"application/json"}})}getCas(){return this.get("/api/v1/cas").then(({cas:e})=>e.map(({handle:n})=>n).reverse())}getCaDetails(e){return this.get(`/api/v1/cas/${e}`)}getCaRoas(e){return this.get(`/api/v1/cas/${e}/routes/analysis/full`).then(n=>n.map(r=>({id:Vc(10),...r})))}getCaSuggestions(e){return this.get(`/api/v1/cas/${e}/routes/analysis/suggest`).then(n=>E0(n)).then(n=>n.map(r=>({id:Vc(10),...r})))}refreshCaParents(){return this.post("/api/v1/bulk/cas/sync/parent")}getCaParents(e){return this.get(`/api/v1/cas/${e}/parents`).then(n=>Object.entries(n).map(([r,i])=>({name:r,...i})))}refreshCaRepo(){return this.post("/api/v1/bulk/cas/sync/repo")}getCaRepoStatus(e){return this.get(`/api/v1/cas/${e}/repo/status`)}getInfo(){return this.get("/stats/info")}getVersion(){return fetch(this.VERSION_URL).then(e=>e.json())}getChildRequest(e){return this.get(`/api/v1/cas/${e}/id/child_request.xml`)}getPublisherRequest(e){return this.get(`/api/v1/cas/${e}/id/publisher_request.xml`)}postParent(e,n,r){return this.post(`/api/v1/cas/${e}/parents/${n}`,{body:r})}postRepository(e,n,r){return this.post(`/api/v1/cas/${e}/repo`,{body:r})}updateRoutes(e,n){return this.get(`/api/v1/cas/${e}/routes`,{method:"POST",body:JSON.stringify(n),headers:{"Content-Type":"application/json"}})}getLoginMethod(){return fetch(`${this.baseUrl}/auth/login`).then(e=>e.status===200?e.text().then(n=>w0(n)?{redirect_url:n}:{with_id:x0(n)}):Promise.reject(e))}postLogin(e,n){const r="/auth/login";if(n){this.setToken(null);const i=btoa(`${n}:${e}`);return this.post(r,{headers:{Authorization:`Basic ${i}`}})}return this.setToken(e),this.post(r)}checkToken(e){return this.setToken(e),this.get("/api/v1/authorized")}getTestBedEnabled(){return fetch("/testbed/enabled").then(e=>e.status===200?!0:e.status===400?!1:Promise.reject(e))}}let Wc=null;function T0(){const[t,e]=P.useState(Wc);return P.useEffect(()=>{t||new wm().getInfo().then(r=>{e(r),Wc=r})},[]),t}const N0="/assets/logout-c725fd2c.svg",C0="/assets/user-5d1f1b14.svg";function iu({initial:t}){const e=On(),[n,r]=P.useState(t);return P.useEffect(()=>e.usePlugin(()=>({onTransitionStart:()=>r(!0),onTransitionSuccess:()=>r(!1)})),[]),n?u.jsx("div",{className:"loader",children:u.jsx("span",{children:"Loading…"})}):null}function xm({options:t,value:e,onChange:n,className:r}){const[i,s]=P.useState(!1);return u.jsxs("div",{className:`select ${r||""}`,children:[u.jsx("button",{className:i?"open":"",onClick:()=>s(!i),onBlur:()=>{setTimeout(()=>s(!1),300)},onKeyDown:a=>{a.key==="Escape"&&s(!1)},children:t[e]}),u.jsx("ul",{className:i?"show":"hide",children:Object.entries(t).map(([a,o])=>u.jsx("li",{className:e===a?"selected":"",onClick:()=>n(a),children:o},a))})]})}function xi({notification:t,onClose:e}){return u.jsxs("div",{className:`notification popup ${t.type}`,children:[u.jsx("button",{className:"close",onClick:e,children:"×"}),u.jsx("span",{children:t.message})]})}function _0(){const t=Ne(),[e,n]=P.useState(!1),r=()=>{n(!0),t.setNotification(null)};return P.useEffect(()=>{if(t.notification){n(!1);const i=setTimeout(r,5e3);return()=>clearTimeout(i)}},[t.notification]),!t.notification||e?null:u.jsx(xi,{notification:t.notification,onClose:r})}function Rn({children:t}){const e=ue(),{route:n}=He(),r=T0(),i=Ne(),s=new Date().getFullYear(),a=H();return P.useEffect(()=>{document.title=i.ca?`Krill - ${i.ca}`:"Krill"},[i.ca]),u.jsxs(u.Fragment,{children:[u.jsx(iu,{initial:!1}),u.jsxs("header",{children:[u.jsx("h1",{onClick:()=>e({},"cas"),children:u.jsx("span",{children:"Krill"})}),u.jsxs("menu",{children:[u.jsx(xm,{options:pg,value:i.locale,onChange:o=>e({locale:o})}),i.userDetails&&u.jsxs(u.Fragment,{children:[u.jsxs("button",{className:"pop",children:[u.jsx("img",{src:C0}),u.jsxs("div",{children:[u.jsx("h5",{children:a.common.userInfo.title}),u.jsx("table",{children:u.jsxs("tbody",{children:[u.jsxs("tr",{children:[u.jsxs("th",{children:[a.common.userInfo.user,":"]}),u.jsx("td",{children:i.userDetails.id})]}),Object.entries(i.userDetails.attributes).map(([o,l])=>u.jsxs("tr",{children:[u.jsxs("th",{className:"user-attribute",children:[o,":"]}),u.jsx("td",{children:l})]},o))]})})]})]}),u.jsx("button",{onClick:()=>e({},"logout"),children:u.jsx("img",{src:N0})})]})]})]}),u.jsx(_0,{}),u.jsx("div",{className:`content route-${n.name}`,children:t}),u.jsxs("footer",{children:[u.jsxs("span",{children:["© ",s," Stichting NLnet Labs"," - ","Krill ",r==null?void 0:r.version]}),u.jsxs("span",{children:[u.jsx("a",{href:"https://nlnetlabs.nl/services/contracts/",target:"_blank",rel:"noreferrer",children:a.common.supportcontracts})," - ",u.jsx("a",{href:"https://krill.docs.nlnetlabs.nl/",target:"_blank",rel:"noreferrer",children:a.common.readthedocs})," - ",u.jsx("a",{href:"https://github.com/NLnetLabs/krill/issues/new",target:"_blank",rel:"noreferrer",children:a.common.report})]})]})]})}function j0({columns:t,filtering:e}){const n=ue(),r=i=>{const s=e.sort===i&&e.order===ft.asc?ft.desc:ft.asc;n({sort:i,order:s})};return u.jsx("thead",{children:u.jsxs("tr",{children:[u.jsx("th",{}),t.map(({label:i,accessor:s})=>u.jsxs("th",{onClick:()=>r(s),children:[i,s===e.sort&&u.jsx("span",{className:e.order})]},s)),u.jsx("th",{})]})})}function qc({announcements:t}){const e=H();return u.jsxs("table",{children:[u.jsx("thead",{children:u.jsxs("tr",{children:[u.jsx("th",{children:e.announcements.asn}),u.jsx("th",{children:e.announcements.prefix})]})}),u.jsxs("tbody",{children:[t.length===0&&u.jsx("tr",{children:u.jsx("td",{colSpan:2,children:u.jsx("span",{className:"muted",children:e.common.nodata})})}),t.map((n,r)=>u.jsxs("tr",{children:[u.jsx("td",{children:n.asn}),u.jsx("td",{children:n.prefix})]},r))]})]})}function O0({authorizes:t,disallows:e}){const n=H();return u.jsxs("div",{className:"row",children:[u.jsxs("div",{children:[u.jsx("h3",{children:n.announcements.authorizes.replace("{number}",t.length.toString())}),u.jsx(qc,{announcements:t})]}),u.jsxs("div",{children:[u.jsx("h3",{children:n.announcements.disallows.replace("{number}",e.length.toString())}),u.jsx(qc,{announcements:e})]})]})}const P0="/assets/trash-d9c6ee55.svg",R0="/assets/edit-776bf3c3.svg",D0="/assets/plus-e8f1d182.svg";function I0({roa:t,allowAdd:e,allowDelete:n,hasAnnouncements:r}){var d;const i=ue(),[s,a]=P.useState(!1),o=H(),l={id:((d=t.id)==null?void 0:d.toString())||"new"},c=`${t.state}_help`,f=o.announcements.state[c];return u.jsxs(u.Fragment,{children:[u.jsxs("tr",{className:r?"announcements":"",children:[u.jsx("td",{children:r&&u.jsx("button",{className:`expand ${s?"open":""}`,onClick:()=>a(!s)})}),u.jsx("td",{children:t.asn}),u.jsxs("td",{children:[t.prefix,t.max_length&&-t.max_length]}),u.jsxs("td",{children:[t.comment,n&&u.jsx("button",{className:"button icon light right",onClick:()=>i(l,"cas.edit"),children:u.jsx("img",{src:R0})})]}),u.jsxs("td",{children:[u.jsx("span",{className:`state ${t.state}`,title:f,children:o.announcements.state[t.state]}),t.authorizes&&u.jsx("span",{className:"badge success",children:t.authorizes.length}),t.disallows&&u.jsx("span",{className:"badge warning",children:t.disallows.length})]}),u.jsxs("td",{className:"actions",children:[e&&u.jsx("button",{className:"button icon",onClick:()=>i(l,"cas.add"),children:u.jsx("img",{src:D0})}),n&&u.jsx("button",{className:"button icon",onClick:()=>i(l,"cas.delete"),children:u.jsx("img",{src:P0})})]})]}),r&&s&&u.jsx("tr",{className:"announcements",children:u.jsx("td",{colSpan:6,children:u.jsx(O0,{authorizes:t.authorizes||[],disallows:t.disallows||[]})})})]})}function M0({tableData:t}){return u.jsx("tbody",{children:t.filter(e=>e.state!=Re.AnnouncementDisallowedAs0).map(e=>u.jsx(I0,{roa:e,hasAnnouncements:!!e.authorizes||!!e.disallows,allowDelete:e.state===Re.RoaSeen||e.state===Re.RoaUnseen||e.state===Re.RoaNotHeld||e.state==Re.RoaNoAnnouncementInfo||e.state===Re.RoaTooPermissive||e.state===Re.RoaDisallowing||e.state===Re.RoaRedundant||e.state==Re.RoaAs0||e.state===Re.RoaAs0Redundant,allowAdd:e.state===Re.AnnouncementNotFound||e.state===Re.AnnouncementInvalidLength||e.state===Re.AnnouncementInvalidAsn},e.id))})}function L0({filtering:t}){const e=H(),r=Ne().getRoas(t),i=[{label:e.announcements.asn,accessor:Yn.asn},{label:e.announcements.prefix,accessor:Yn.prefix},{label:e.caDetails.comment,accessor:Yn.comment},{label:e.announcements.stateLabel,accessor:Yn.state}];return u.jsxs("table",{className:"roa-table",children:[u.jsx(j0,{columns:i,filtering:t}),u.jsx(M0,{tableData:r})]})}function F0({details:t}){return u.jsx("div",{className:"ca-details card",children:u.jsx("table",{children:u.jsx("tbody",{children:Object.entries(t.resources).map(([e,n])=>u.jsxs("tr",{children:[u.jsx("th",{children:e}),u.jsx("td",{children:n.split(",").map(r=>u.jsx("p",{children:r},r))})]},e))})})})}function A0({onClose:t,roa:e}){var w;const n=H(),r=ue(),[i,s]=P.useState((e==null?void 0:e.asn.toString())||""),[a,o]=P.useState((e==null?void 0:e.prefix)||""),[l,c]=P.useState((e==null?void 0:e.comment)||""),f=Hc(e==null?void 0:e.prefix),[d,v]=P.useState(((w=e==null?void 0:e.max_length)==null?void 0:w.toString())||f),y=g=>{g.preventDefault();const k=g.target;k.checkValidity()?r({asn:i,prefix:a,comment:l,max_length:d}):k.reportValidity()};return u.jsxs(u.Fragment,{children:[u.jsx("h3",{children:n.caDetails.addRoa}),u.jsxs("form",{onSubmit:y,children:[u.jsxs("div",{children:[u.jsx("label",{htmlFor:"asn required",children:n.announcements.asn}),u.jsx("input",{type:"number",min:"0",name:"asn",onInput:g=>g.target.setCustomValidity(""),onInvalid:g=>g.target.setCustomValidity(n.caDetails.addROAForm.asn_format),value:i,onChange:g=>s(g.target.value),required:!0})]}),u.jsxs("div",{children:[u.jsx("label",{htmlFor:"prefix required",children:n.announcements.prefix}),u.jsx("input",{name:"prefix",pattern:"^((([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\\.(?!\\/)|\\/)){4}([0-9]|[1-2][0-9]|3[0-2]))|(([a-fA-F0-9:]+)\\/([1-9]|[1-9][0-9]|1[01][0-9]|12[0-8]))$",onInput:g=>g.target.setCustomValidity(""),onInvalid:g=>g.target.setCustomValidity(n.caDetails.addROAForm.prefix_format),title:n.caDetails.addROAForm.prefix_format,value:a,onChange:g=>o(g.target.value),required:!0})]}),u.jsxs("div",{children:[u.jsx("label",{htmlFor:"maxLength",children:n.caDetails.maxLength}),u.jsx("input",{type:"number",min:Hc(a)||1,max:a.includes(".")||!a.includes(":")?32:128,name:"maxLength",value:d,onChange:g=>v(g.target.value),placeholder:n.caDetails.maxLengthTooltip})]}),u.jsxs("div",{children:[u.jsx("label",{htmlFor:"comment",children:n.caDetails.comment}),u.jsx("input",{name:"comment",value:l,onChange:g=>c(g.target.value)})]}),u.jsxs("div",{className:"actions",children:[u.jsx("button",{type:"button",className:"button outline",onClick:t,children:n.common.cancel}),u.jsx("button",{type:"submit",className:"button",children:n.common.confirm})]})]})]})}const z0="modulepreload",$0=function(t){return"/"+t},Bc={},Et=function(e,n,r){if(!n||n.length===0)return e();const i=document.getElementsByTagName("link");return Promise.all(n.map(s=>{if(s=$0(s),s in Bc)return;Bc[s]=!0;const a=s.endsWith(".css"),o=a?'[rel="stylesheet"]':"";if(!!r)for(let f=i.length-1;f>=0;f--){const d=i[f];if(d.href===s&&(!a||d.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${s}"]${o}`))return;const c=document.createElement("link");if(c.rel=a?"stylesheet":z0,a||(c.as="script",c.crossOrigin=""),c.href=s,document.head.appendChild(c),a)return new Promise((f,d)=>{c.addEventListener("load",f),c.addEventListener("error",()=>d(new Error(`Unable to preload CSS for ${s}`)))})})).then(()=>e())},U0=(t,e)=>{const n=t[e];return n?typeof n=="function"?n():Promise.resolve(n):new Promise((r,i)=>{(typeof queueMicrotask=="function"?queueMicrotask:setTimeout)(i.bind(null,new Error("Unknown variable dynamic import: "+e)))})};async function b0(t){return(await U0(Object.assign({"../locales/de.ts":()=>Et(()=>import("./de-aaa0f1e4.js"),[]),"../locales/en.ts":()=>Et(()=>import("./en-d3d88bc8.js"),[]),"../locales/es.ts":()=>Et(()=>import("./es-52cbfc21.js"),[]),"../locales/fr.ts":()=>Et(()=>import("./fr-ac1aafd8.js"),[]),"../locales/gr.ts":()=>Et(()=>import("./gr-5a66c94a.js"),[]),"../locales/nl.ts":()=>Et(()=>import("./nl-f2dd1189.js"),[]),"../locales/pt.ts":()=>Et(()=>import("./pt-e9bf4047.js"),[]),"../locales/zh-Hans.ts":()=>Et(()=>import("./zh-Hans-f7c709f7.js"),[]),"../locales/zh-Hant.ts":()=>Et(()=>import("./zh-Hant-0d86c694.js"),[])}),`../locales/${t}.ts`)).translations}function V0(t,e){return Object.entries(e).reduce((n,[r,i])=>n.replace(`{${r}}`,i),t)}function H0({onClose:t,roa:e}){var s;const n=H(),r=ue(),i={asn:e.asn.toString(),prefix:e.prefix,max_length:((s=e.max_length)==null?void 0:s.toString())||""};return u.jsxs(u.Fragment,{children:[u.jsx("h3",{children:n.common.warning}),u.jsx("p",{children:V0(n.caDetails.confirmation.message,i)}),u.jsxs("div",{className:"actions",children:[u.jsx("button",{type:"button",className:"button outline",onClick:t,children:n.common.cancel}),u.jsx("button",{className:"button",onClick:()=>{r(i)},children:n.common.ok})]})]})}function W0({onClose:t,roa:e}){const n=H(),r=ue(),[i,s]=P.useState((e==null?void 0:e.comment)||"");return u.jsxs(u.Fragment,{children:[u.jsx("h3",{children:n.common.edit}),u.jsxs("form",{autoComplete:"off",onSubmit:a=>{a.preventDefault(),i!==(e==null?void 0:e.comment)?r({comment:i}):t()},children:[u.jsxs("div",{children:[u.jsx("label",{htmlFor:"comment required",children:n.caDetails.comment}),u.jsx("input",{name:"comment",value:i,onChange:a=>s(a.target.value)})]}),u.jsxs("div",{className:"actions",children:[u.jsx("button",{type:"button",className:"button outline",onClick:t,children:n.common.cancel}),u.jsx("button",{type:"submit",className:"button",children:n.common.confirm})]})]})]})}function Si({onClose:t,children:e}){return u.jsx("div",{className:"modal",onMouseDown:t,children:u.jsx("div",{onMouseDown:n=>{n.stopPropagation()},children:e})})}function q0(){const{route:t}=He(),e=On(),{route:{params:n}}=He(),s=Ne().getRoas().find(o=>o.id===n.id),a=()=>{e.navigate("cas",{ca:n.ca})};return!s&&t.name!=="cas.add_new"?null:u.jsxs(Si,{onClose:a,children:[t.name.startsWith("cas.add")&&u.jsx(A0,{onClose:a,roa:s}),t.name.startsWith("cas.edit")&&u.jsx(W0,{onClose:a,roa:s}),t.name==="cas.delete"&&u.jsx(H0,{onClose:a,roa:s})]})}function su(){var s,a,o;const t=Ne(),e=H(),n=ue(),r=t.ca&&t.parents[t.ca].length>0,i=t.repoStatus&&t.ca&&((s=t.repoStatus[t.ca])==null?void 0:s.last_exchange);return u.jsxs(u.Fragment,{children:[u.jsxs("div",{className:"space-between border-bottom row",children:[u.jsxs("h2",{children:[e.cas.ca," ",u.jsx("strong",{children:t.ca})]}),t.cas&&((a=t.cas)==null?void 0:a.length)>1&&u.jsxs("div",{children:[u.jsx("label",{htmlFor:"ca",children:e.caDetails.current}),u.jsx(xm,{className:"wide",options:((o=t.cas)==null?void 0:o.sort().reduce((l,c)=>({...l,[c]:[c]}),{}))||{},value:t.ca||"",onChange:l=>n({ca:l},"cas")})]})]}),!r&&u.jsx("div",{className:"notification error",children:e.caDetails.onboardingWarning}),r&&!i&&u.jsx("div",{className:"notification error",children:e.caDetails.initializeRepository}),u.jsx("div",{children:u.jsxs("ul",{className:"tabs",children:[u.jsx("li",{children:u.jsx(yn,{routeName:"cas",activeStrict:!0,routeParams:{ca:t.ca},children:e.caDetails.roas})}),u.jsx("li",{children:u.jsx(yn,{routeName:"cas.parents",routeParams:{ca:t.ca},children:e.caDetails.parents})}),u.jsx("li",{children:u.jsx(yn,{routeName:"cas.repository",routeParams:{ca:t.ca},children:e.caDetails.repo})})]})})]})}function B0({currentPage:t,numPages:e}){const n=ue();let r;if(e<=7)r=[...Array(e).keys()].map(i=>(i+1).toString());else if(r=Array(7),r[0]="1",r[6]=e.toString(),t>=1&&t<=4){for(let i=1;i<5;i++)r[i]=(i+1).toString();r[5]="..."}else if(t>=e-3&&t<=e){r[1]="...";for(let i=2;i<7;i++)r[i]=(e-6+i).toString()}else{r[1]="...";for(let i=2;i<5;i++)r[i]=(t-3+i).toString();r[5]="..."}return u.jsx(u.Fragment,{children:r.map((i,s)=>u.jsx("button",{className:i===t.toString()?"number current":"number",disabled:i===t.toString()||i==="...",onClick:()=>n({page:i}),children:i},s))})}function Z0({filtering:t}){const e=H(),r=Ne().getRoas().length,i=ue(),s=Math.ceil(r/t.limit);return u.jsxs("div",{className:"pagination",children:[u.jsx("select",{value:t.limit,onChange:a=>i({limit:a.target.value,page:"1"}),children:mg.map(a=>u.jsxs("option",{value:a,children:[a," / ",e.common.page]},a))}),u.jsxs("div",{children:[u.jsx("button",{disabled:t.page===1,className:"arrow prev",onClick:()=>i({page:(t.page-1).toString()}),children:u.jsx("span",{children:"<"})}),u.jsx(B0,{currentPage:t.page,numPages:s}),u.jsx("button",{disabled:t.page>s-1,className:"arrow next",onClick:()=>i({page:(t.page+1).toString()}),children:u.jsx("span",{children:">"})})]})]})}function Q0({columns:t,filtering:e,setAllCheckboxes:n,checkBoxState:r}){const i=ue(),s=a=>{const o=e.sort===a&&e.order===ft.asc?ft.desc:ft.asc;i({sort:a,order:o})};return u.jsx("thead",{children:u.jsxs("tr",{children:[u.jsx("th",{children:u.jsx("input",{type:"checkbox",checked:r===yt.checked,onChange:n,ref:a=>{a&&(a.indeterminate=r===yt.intermediate)}})}),u.jsx("th",{}),t.map(({label:a,accessor:o})=>u.jsxs("th",{onClick:()=>s(o),children:[a,o===e.sort&&u.jsx("span",{className:e.order})]},o)),u.jsx("th",{})]})})}const Y0="/assets/trash-red-65027383.svg",K0="/assets/check-green-4525c79c.svg";function G0({suggestion:t,id:e,checked:n,handleCheckbox:r}){const i=H(),s=i.caDetails.suggestions.reasons[t.reason];return u.jsxs(u.Fragment,{children:[u.jsx("td",{children:u.jsx("input",{type:"checkbox",id:e,onChange:r,checked:n})}),u.jsxs("td",{children:[t.action==="add"&&u.jsx("span",{className:"add",title:i.caDetails.suggestions.adding,children:u.jsx("img",{src:K0,title:`${i.caDetails.suggestions.willAdd} (${s})`})}),t.action==="remove"&&u.jsx("span",{className:"remove",title:i.caDetails.suggestions.willRemove,children:u.jsx("img",{src:Y0,title:`${i.caDetails.suggestions.willRemove} (${s})`})})]}),u.jsx("td",{children:t.asn}),u.jsx("td",{children:t.prefix}),u.jsx("td",{children:i.caDetails.suggestions.reasons[t.reason]})]})}function J0({suggestions:t,checkedBoxes:e,handleCheckbox:n}){return u.jsx("tbody",{children:t.map(r=>u.jsx("tr",{children:u.jsx(G0,{checked:e.includes(r.id||""),suggestion:r,id:r.id||"",handleCheckbox:n})},r.id))})}function X0({suggestions:t,filtering:e,checkedBoxes:n,handleCheckbox:r,handleAllCheckboxes:i,topCheckBoxState:s}){const a=H(),o=[{label:a.announcements.asn,accessor:Ls.asn},{label:a.announcements.prefix,accessor:Ls.prefix}];return u.jsxs("table",{className:"roa-table",children:[u.jsx(Q0,{columns:o,filtering:e,setAllCheckboxes:i,checkBoxState:s}),u.jsx(J0,{checkedBoxes:n,suggestions:t,handleCheckbox:r})]})}function e1(t){const n=Ne().getSuggestions(t),r=[];for(const f of n)r.push(f.id||"");const[i,s]=P.useState([]),[a,o]=P.useState(yt.unchecked);return{checked:i,topCheckbox:a,suggestions:n,handleCheckbox:f=>{let d=[...i];f.target.checked?(d=[...i,f.target.id],r.every(v=>d.includes(v))?o(yt.checked):o(yt.intermediate)):(d.splice(i.indexOf(f.target.id),1),d.length>0?o(yt.intermediate):o(yt.unchecked)),s(d)},handleAllCheckboxes:f=>{f.target.checked?(s(r),o(yt.checked)):(s([]),o(yt.unchecked))}}}function t1({onClose:t,filtering:e}){const n=H(),r=ue(),{checked:i,topCheckbox:s,suggestions:a,handleCheckbox:o,handleAllCheckboxes:l}=e1(e);return u.jsxs(u.Fragment,{children:[u.jsx("h3",{children:n.caDetails.analysis}),a.length>0&&u.jsxs(u.Fragment,{children:[u.jsxs("div",{children:[n.caDetails.suggestions.following," ",u.jsx("a",{href:"https://krill.docs.nlnetlabs.nl/en/stable/manage-roas.html",target:"_blank",rel:"noreferrer",children:n.caDetails.suggestions.readMore})]}),u.jsx(X0,{checkedBoxes:i,suggestions:a,filtering:e,handleCheckbox:o,handleAllCheckboxes:l,topCheckBoxState:s})]}),a.length===0&&n.caDetails.suggestions.nochanges,u.jsxs("div",{className:"actions",children:[a.length>0&&u.jsxs(u.Fragment,{children:[u.jsx("button",{type:"button",className:"button outline",onClick:t,children:n.common.cancel}),u.jsx("button",{className:"button",onClick:()=>r({ids:JSON.stringify(i)},"cas.change"),children:n.common.confirm})]}),a.length===0&&u.jsx("button",{className:"button",onClick:t,children:n.common.ok})]})]})}function n1(){const t=On(),{route:e,route:{params:n}}=He(),r=()=>{t.navigate("cas",{ca:n.ca})};if(e.name!=="cas.analyse")return null;const i={search:null,sort:n.sort||Ls.asn,order:n.order||ft.asc,limit:parseInt(n.limit,10)||10,page:parseInt(n.page,10)||1};return u.jsx(Si,{onClose:r,children:e.name==="cas.analyse"&&u.jsx(t1,{onClose:r,filtering:i})})}function r1({filtering:t}){const e=H(),n=ue(),[r,i]=P.useState(t.search);return P.useEffect(()=>{const s=setTimeout(()=>{n(r?{search:r}:{search:void 0})},500);return()=>clearTimeout(s)},[r]),P.useEffect(()=>{i(t.search)},[t.search]),u.jsx("input",{type:"search",value:r||"",placeholder:e.announcements.search,onChange:s=>i(s.target.value)})}function i1(){const t=H(),e=Ne(),{route:n}=He(),r=ue(),i=n.params,s={search:i.search||null,sort:i.sort||Yn.asn,order:i.order||ft.asc,limit:parseInt(i.limit,10)||25,page:parseInt(i.page,10)||1};return u.jsxs(Rn,{children:[u.jsx(q0,{}),n.name==="cas.analyse"&&u.jsx(n1,{}),u.jsx(su,{}),u.jsxs("div",{className:"row",children:[u.jsxs("div",{className:"flex-1",children:[u.jsx(r1,{filtering:s}),u.jsx(L0,{filtering:s}),u.jsx(Z0,{filtering:s}),u.jsxs("div",{className:"roa-actions",children:[u.jsx("div",{children:u.jsx("button",{className:"button",onClick:()=>r({},"cas.add_new"),children:t.caDetails.addRoa})}),u.jsx("div",{children:u.jsx("button",{className:"button inverted",onClick:()=>r({},"cas.analyse"),children:t.caDetails.analyseThis})})]})]}),e.ca&&u.jsx(F0,{details:e.caDetails[e.ca]})]})]})}const Sm="/assets/upload-87e6fdfd.svg";let Zc="";function s1(){const[t,e]=P.useState(Zc),n=Ne();return P.useEffect(()=>{n.ca&&n.api.getChildRequest(n.ca).then(r=>{e(r),Zc=r})},[]),t}function km(t){const[e,n]=P.useState(null),[r,i]=P.useState(t),[s,a]=P.useState("");return P.useEffect(()=>{i(t)},[t]),{notification:e,setNotification:n,request:r,setRequest:i,response:s,setResponse:a,handleUpload:l=>{if(l.currentTarget.files){const c=new FileReader;c.onload=()=>{a(c.result)},c.readAsText(l.currentTarget.files[0])}}}}function a1(){const t=s1(),e=On(),{route:{params:n}}=He(),r=ue(),[i,s]=P.useState(""),{notification:a,setNotification:o,request:l,setRequest:c,response:f,setResponse:d,handleUpload:v}=km(t);return{notification:a,setNotification:o,name:i,setName:s,request:l,setRequest:c,response:f,setResponse:d,onSubmit:async g=>{g.preventDefault(),r({name:i,response:f})},onClose:()=>{e.navigate("cas.parents",{ca:n.ca})},handleUpload:v}}const o1="/assets/clipboard-4659ffea.svg",l1="/assets/download-2dfead4c.svg";function la({xml:t,name:e,setNotification:n}){const r=H(),i=()=>{navigator.clipboard.writeText(t),n({type:V.success,message:r.common.copySuccess})};return u.jsxs(u.Fragment,{children:[u.jsx("button",{className:"button large icon",type:"button",title:r.common.copy,onClick:i,children:u.jsx("img",{src:o1,alt:r.common.copy})}),u.jsx("a",{className:"button large icon",title:r.common.download,href:`data:application/xml;base64,${btoa(t)}`,download:`${e}.xml`,children:u.jsx("img",{src:l1,alt:r.common.download})})]})}function u1(){const t=H(),{notification:e,setNotification:n,name:r,setName:i,request:s,setRequest:a,response:o,setResponse:l,onSubmit:c,onClose:f,handleUpload:d}=a1();return u.jsxs(Si,{onClose:f,children:[e&&u.jsx(xi,{notification:e,onClose:()=>n(null)}),u.jsx("h3",{children:t.caDetails.parentsTab.addParent}),u.jsxs("form",{onSubmit:c,method:"POST",children:[u.jsxs("div",{children:[u.jsx("label",{children:t.caDetails.parentsTab.request}),u.jsx("textarea",{name:"request",readOnly:!0,value:s,id:"request",onChange:v=>a(v.target.value)}),u.jsx("div",{children:u.jsx(la,{xml:s,name:"child_request",setNotification:n})})]}),u.jsxs("div",{children:[u.jsx("label",{children:t.caDetails.parentsTab.response}),u.jsx("textarea",{name:"response",value:o,onChange:v=>l(v.target.value)}),u.jsx("input",{type:"file",id:"upload",onChange:d}),u.jsx("label",{className:"button large icon",htmlFor:"upload",title:t.common.dropOrClick,children:u.jsx("img",{src:Sm,alt:t.common.dropOrClick})})]}),u.jsxs("div",{children:[u.jsx("label",{children:t.caDetails.parentsTab.name}),u.jsx("input",{name:"name",value:r,onChange:v=>i(v.target.value),required:!0})]}),u.jsxs("div",{className:"actions",children:[u.jsx("button",{type:"button",className:"button outline",onClick:f,children:t.common.cancel}),u.jsx("button",{type:"submit",className:"button",children:t.common.confirm})]})]})]})}function c1({parent:t,loading:e}){const n=H(),{locale:r}=Ne(),i=e?n.caDetails.loading.replace("{handle}","..."):gm(t.last_exchange.timestamp,r);return u.jsxs("div",{className:"info-table",children:[u.jsx("h4",{children:t.name}),u.jsx("table",{children:u.jsxs("tbody",{children:[u.jsxs("tr",{children:[u.jsx("th",{children:n.caDetails.parents}),u.jsx("td",{children:t.last_exchange.uri})]}),u.jsxs("tr",{children:[u.jsx("th",{children:n.caDetails.lastExchange}),u.jsx("td",{children:t.last_exchange.result!="Success"?u.jsxs("p",{className:"failure",children:[i,u.jsx("br",{}),t.last_exchange.result.Failure.msg]}):u.jsx("p",{className:"success",children:i})})]}),u.jsxs("tr",{children:[u.jsx("th",{children:n.caDetails.allResources}),u.jsxs("td",{children:["ASN: ",t.all_resources.asn,u.jsx("br",{}),"IPv4: ",t.all_resources.ipv4,u.jsx("br",{}),"IPv6: ",t.all_resources.ipv6,u.jsx("br",{})]})]})]})})]})}function d1(){var o;const t=H(),{route:e}=He(),n=Ne(),r=ue(),[i,s]=P.useState(!1),a=()=>{s(!0),n.refreshParents().then(()=>{s(!1)})};return u.jsxs(Rn,{children:[e.name==="cas.parents.add"&&u.jsx(u1,{}),i&&u.jsx(xi,{notification:{type:V.success,message:t.caDetails.refresh.replace("{handle}",t.caDetails.parents.toLowerCase())},onClose:()=>s(!1)}),u.jsx(su,{}),n.parents&&n.ca&&((o=n.parents[n.ca])==null?void 0:o.map(l=>u.jsx(c1,{parent:l,loading:i},l.name))),u.jsx("button",{className:"button",onClick:()=>r({},"cas.parents.add"),children:t.caDetails.parentsTab.addParent}),u.jsx("button",{className:"button inverted",onClick:a,children:t.caDetails.syncParents})]})}function f1({repo:t,locale:e,loading:n}){const r=H(),i=n?r.caDetails.loading.replace("{handle}","..."):gm(t.last_exchange.timestamp,e);return u.jsx("div",{className:"info-table",children:u.jsx("table",{children:u.jsxs("tbody",{children:[u.jsxs("tr",{children:[u.jsx("th",{children:r.caDetails.exchangeUri}),u.jsx("td",{children:t.last_exchange.uri})]}),u.jsxs("tr",{children:[u.jsx("th",{children:r.caDetails.lastExchange}),u.jsx("td",{children:t.last_exchange.result!="Success"?u.jsxs("p",{className:"failure",children:[i,u.jsx("br",{}),t.last_exchange.result.Failure.msg]}):u.jsx("p",{className:"success",children:i})})]})]})})})}let Qc="";function h1(){const[t,e]=P.useState(Qc),n=Ne();return P.useEffect(()=>{n.ca&&n.api.getPublisherRequest(n.ca).then(r=>{e(r),Qc=r})},[]),t}function m1(){const t=h1(),e=On(),{route:{params:n}}=He(),r=ue(),{notification:i,setNotification:s,request:a,setRequest:o,response:l,setResponse:c,handleUpload:f}=km(t);return{notification:i,setNotification:s,request:a,setRequest:o,response:l,setResponse:c,onSubmit:async y=>{y.preventDefault(),r({response:l})},onClose:()=>{e.navigate("cas.repository",{ca:n.ca})},handleUpload:f}}function p1(){const t=H(),{notification:e,setNotification:n,request:r,setRequest:i,response:s,setResponse:a,onSubmit:o,onClose:l,handleUpload:c}=m1();return u.jsxs(Si,{onClose:l,children:[e&&u.jsx(xi,{notification:e,onClose:()=>n(null)}),u.jsx("h3",{children:t.caDetails.repoTab.addRepo}),u.jsxs("form",{onSubmit:o,method:"POST",children:[u.jsxs("div",{children:[u.jsx("label",{children:t.caDetails.repoTab.request}),u.jsx("textarea",{name:"request",readOnly:!0,value:r,id:"request",onChange:f=>i(f.target.value)}),u.jsx("div",{children:u.jsx(la,{xml:r,name:"publisher_request",setNotification:n})})]}),u.jsxs("div",{children:[u.jsx("label",{children:t.caDetails.repoTab.response}),u.jsx("textarea",{name:"response",value:s,onChange:f=>a(f.target.value)}),u.jsx("input",{type:"file",id:"upload",onChange:c}),u.jsx("label",{className:"button large icon",htmlFor:"upload",title:t.common.dropOrClick,children:u.jsx("img",{src:Sm,alt:t.common.dropOrClick})})]}),u.jsxs("div",{className:"actions",children:[u.jsx("button",{type:"button",className:"button outline",onClick:l,children:t.common.cancel}),u.jsx("button",{type:"submit",className:"button",children:t.common.confirm})]})]})]})}function v1(){var l;const t=H(),e=Ne(),n=ue(),{route:r}=He(),[i,s]=P.useState(!1),a=()=>{s(!0),e.refreshRepo().then(()=>{s(!1)})};if(!e.ca)return null;const o=e.repoStatus&&e.ca&&((l=e.repoStatus[e.ca])==null?void 0:l.last_exchange);return u.jsxs(Rn,{children:[r.name==="cas.repository.add"&&u.jsx(p1,{}),i&&u.jsx(xi,{notification:{type:V.success,message:t.caDetails.refresh.replace("{handle}",t.caDetails.repo.toLowerCase())},onClose:()=>s(!1)}),u.jsx(su,{}),o?u.jsx(f1,{repo:e.repoStatus[e.ca],locale:e.locale,loading:i}):u.jsx("button",{className:"button",onClick:()=>n({},"cas.repository.add"),children:t.caDetails.repoTab.addRepo}),u.jsx("button",{className:"button inverted",onClick:a,children:t.caDetails.syncRepo})]})}function Em(){const t=H();return u.jsxs(Rn,{children:[u.jsx("h1",{children:t.common.error}),u.jsx("pre",{children:window.location.pathname})]})}function g1(){const[t,e]=P.useState(""),[n,r]=P.useState(""),i=ue(),s=Ne(),a=H(),o=s.loginMethod;if(!o)return u.jsx(iu,{initial:!0});const l=async c=>{c.preventDefault(),o.with_id?i({password:n,username:t}):i({password:n})};return u.jsx(Rn,{children:u.jsxs("form",{onSubmit:l,method:"POST",className:`login card ${o.with_id?"vertical-form":""}`,children:[o.with_id&&u.jsxs("div",{children:[u.jsx("label",{htmlFor:"admin required",children:a.login.id}),u.jsx("input",{name:"token",type:"username",value:t,onChange:c=>e(c.target.value),placeholder:a.login.idPlaceholder,required:!0})]}),u.jsxs("div",{children:[u.jsx("label",{htmlFor:"token required",children:a.login.password}),u.jsx("input",{name:"token",type:"password",value:n,onChange:c=>r(c.target.value),placeholder:a.login.placeholder,required:!0})]}),u.jsx("div",{children:u.jsx("button",{type:"submit",className:"button",children:a.login.signin})})]})})}function fr({notification:t}){const e=ue();return u.jsxs("div",{className:`notification ${t.type}`,children:[u.jsx("button",{className:"close",onClick:()=>e({notification:"clear"}),children:"×"}),u.jsx("span",{children:t.message})]})}function ua({onClose:t,onConfirm:e}){const n=H(),{route:r}=He();let i="",s="";return r.name==="testbed"?(i=n.testbed.addChild.confirmation.title,s=n.testbed.addChild.confirmation.message):r.name==="testbed.add_pub"?(i=n.testbed.addPublisher.confirmation.title,s=n.testbed.addPublisher.confirmation.message):r.name==="testbed.del_ca"?(i=n.testbed.removeChild.confirmation.title,s=n.testbed.removeChild.confirmation.message):r.name==="testbed.del_pub"&&(i=n.testbed.removePublisher.confirmation.title,s=n.testbed.removePublisher.confirmation.message),u.jsxs(Si,{onClose:t,children:[u.jsx("h3",{children:i}),u.jsx("p",{children:s}),u.jsxs("div",{className:"actions",children:[u.jsx("button",{className:"button outline",onClick:t,children:n.common.cancel}),u.jsx("button",{className:"button",onClick:e,children:n.common.ok})]})]})}function y1(){const t=H(),[e,n]=P.useState(),[r,i]=P.useState(!1),[s,a]=P.useState(""),[o,l]=P.useState(""),[c,f]=P.useState(""),[d,v]=P.useState(""),[y,w]=P.useState(""),g=async(S,T,N,_,D)=>{const R=await fetch("/testbed/children",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({handle:S,id_cert:T,resources:{asn:N,v4:_,v6:D}})});if(R.status===200){n({type:V.success,message:t.testbed.addChild.success.replace("{child_handle}",S)});const q=S0(await R.json());w(q)}else{const q=await R.json();q.label==="pub-duplicate"?await g(S+Date.now(),T,N,_,D):n({type:V.error,message:q.msg})}},k=async S=>{S.preventDefault(),p(s)&&i(!0)},m=async()=>{const S=p(s);S&&await g(S.handle,S.id_cert,o,c,d)},h=S=>{const T=ym(S);return T?(n({type:V.error,message:t.testbed.errors.invalid_xml.replace("{err}",T)}),!1):S.getElementsByTagName("child_request").length===0?(n({type:V.error,message:t.testbed.errors.missing_xml_el.replace("{el}","child_request")}),!1):S.getElementsByTagName("child_bpki_ta").length===0?(n({type:V.error,message:t.testbed.errors.missing_xml_el.replace("{el}","child_bpki_ta")}),!1):S.getElementsByTagName("child_request")[0].attributes.child_handle?S.getElementsByTagName("child_bpki_ta")[0].childNodes.length===0?(n({type:V.error,message:t.testbed.errors.empty_xml_el.replace("{el}","child_bpki_ta")}),!1):S.getElementsByTagName("child_bpki_ta")[0].childNodes[0].nodeValue.trim().length===0?(n({type:V.error,message:t.testbed.errors.empty_xml_el.replace("{el}","child_bpki_ta")}),!1):!0:(n({type:V.error,message:t.testbed.errors.missing_xml_attr.replace("{attr}","child_handle").replace("{el}","child_request")}),!1)},p=S=>{const T=new window.DOMParser().parseFromString(S,"text/xml");if(h(T))return{handle:T.getElementsByTagName("child_request")[0].attributes.child_handle.value,id_cert:T.getElementsByTagName("child_bpki_ta")[0].childNodes[0].nodeValue.trim()}},x=()=>{w(""),i(!1),a(t.testbed.addChild.requestXML.placeholder),l(""),f(""),v("")};return y!==""?u.jsxs("div",{className:"testbed-result",children:[e&&u.jsx(fr,{notification:e}),u.jsx("pre",{children:y}),u.jsx("p",{children:u.jsx(la,{xml:y,name:"parent_response",setNotification:n})}),u.jsx("div",{className:"actions",children:u.jsx("button",{onClick:x,className:"button",children:t.testbed.addChild.registeranother})})]}):u.jsxs(u.Fragment,{children:[r&&u.jsx(ua,{onClose:()=>i(!1),onConfirm:m}),u.jsxs("form",{onSubmit:k,method:"POST",children:[e&&u.jsx(fr,{notification:e}),u.jsxs("div",{children:[u.jsxs("label",{children:[t.testbed.addChild.requestXML.label,u.jsx("a",{href:"https://tools.ietf.org/html/rfc8183#section-5.2.1",children:t.testbed.rfcdoclink})]}),u.jsx("textarea",{name:"request",value:s,placeholder:t.testbed.addChild.requestXML.placeholder,onChange:S=>a(S.target.value),required:!0})]}),u.jsxs("div",{children:[u.jsx("label",{children:t.testbed.addChild.asnresources.label}),u.jsx("input",{name:"asn",value:o,onChange:S=>l(S.target.value),placeholder:t.testbed.addChild.asnresources.placeholder})]}),u.jsxs("div",{children:[u.jsx("label",{children:t.testbed.addChild.ipv4resources.label}),u.jsx("input",{name:"v4",value:c,onChange:S=>f(S.target.value),placeholder:t.testbed.addChild.ipv4resources.placeholder})]}),u.jsxs("div",{children:[u.jsx("label",{children:t.testbed.addChild.ipv6resources.label}),u.jsx("input",{name:"v6",value:d,onChange:S=>v(S.target.value),placeholder:t.testbed.addChild.ipv6resources.placeholder})]}),u.jsx("button",{type:"submit",className:"button",children:t.testbed.addChild.confirm})]})]})}function w1(){const t=H(),[e,n]=P.useState(),[r,i]=P.useState(!1),[s,a]=P.useState(""),[o,l]=P.useState(""),c=async(g,k)=>{const m=await fetch("/testbed/publishers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({publisher_handle:g,id_cert:k,tag:null})});if(m.status===200)n({type:V.success,message:t.testbed.addPublisher.success.replace("{publisher_handle}",g)}),l(k0(await m.json()));else{const h=await m.json();h.label==="pub-duplicate"?await c(g+Date.now(),k):n({type:V.error,message:h.msg})}},f=g=>{const k=ym(g);return k?(n({type:V.error,message:t.testbed.errors.invalid_xml.replace("{err}",k)}),!1):g.getElementsByTagName("publisher_request").length===0?(n({type:V.error,message:t.testbed.errors.missing_xml_el.replace("{el}","publisher_request")}),!1):g.getElementsByTagName("publisher_bpki_ta").length===0?(n({type:V.error,message:t.testbed.errors.missing_xml_el.replace("{el}","publisher_bpki_ta")}),!1):g.getElementsByTagName("publisher_request")[0].attributes.publisher_handle?g.getElementsByTagName("publisher_bpki_ta")[0].childNodes.length===0?(n({type:V.error,message:t.testbed.errors.empty_xml_el.replace("{el}","publisher_bpki_ta")}),!1):g.getElementsByTagName("publisher_bpki_ta")[0].childNodes[0].nodeValue.trim().length===0?(n({type:V.error,message:t.testbed.errors.empty_xml_el.replace("{el}","publisher_bpki_ta")}),!1):!0:(n({type:V.error,message:t.testbed.errors.missing_xml_attr.replace("{attr}","publisher_handle").replace("{el}","publisher_request")}),!1)},d=g=>{const k=new window.DOMParser().parseFromString(g,"text/xml");if(f(k))return{publisher_handle:k.getElementsByTagName("publisher_request")[0].attributes.publisher_handle.value,id_cert:k.getElementsByTagName("publisher_bpki_ta")[0].childNodes[0].nodeValue.trim()}},v=async g=>{g.preventDefault(),d(s)&&i(!0)},y=async()=>{const g=d(s);g&&await c(g.publisher_handle,g.id_cert)},w=()=>{a(t.testbed.addPublisher.requestXML.placeholder),l(""),i(!1)};return o!==""?u.jsxs("div",{className:"testbed-result",children:[e&&u.jsx(fr,{notification:e}),u.jsx("pre",{children:o}),u.jsx("p",{children:u.jsx(la,{xml:o,name:"publisher_response",setNotification:n})}),u.jsx("div",{className:"actions",children:u.jsx("button",{onClick:w,className:"button",children:t.testbed.addPublisher.registeranother})})]}):u.jsxs(u.Fragment,{children:[r&&u.jsx(ua,{onClose:()=>i(!1),onConfirm:y}),u.jsxs("form",{onSubmit:v,method:"POST",children:[e&&u.jsx(fr,{notification:e}),u.jsxs("div",{children:[u.jsxs("label",{children:[t.testbed.addPublisher.requestXML.label,u.jsx("a",{href:"https://tools.ietf.org/html/rfc8183#section-5.2.3",children:t.testbed.rfcdoclink})]}),u.jsx("textarea",{name:"request",value:s,placeholder:t.testbed.addPublisher.requestXML.placeholder,onChange:g=>a(g.target.value),required:!0})]}),u.jsx("button",{type:"submit",className:"button",children:t.testbed.addPublisher.confirm})]})]})}function x1(){const t=H(),[e,n]=P.useState(),[r,i]=P.useState(!1),[s,a]=P.useState(""),o=async()=>{const f=await fetch(`/testbed/children/${s}`,{method:"DELETE"});if(f.status===200)n({type:V.success,message:t.testbed.removeChild.success.replace("{child_handle}",s)}),a("");else{const d=await f.json();n({type:V.error,message:d.msg})}},l=f=>{f.preventDefault(),i(!0)},c=async()=>{await o(),i(!1)};return u.jsxs(u.Fragment,{children:[r&&u.jsx(ua,{onClose:()=>i(!1),onConfirm:c}),u.jsxs("form",{onSubmit:l,method:"POST",children:[e&&u.jsx(fr,{notification:e}),u.jsxs("div",{children:[u.jsx("label",{children:t.testbed.childhandle}),u.jsx("input",{name:"handle",value:s,onChange:f=>a(f.target.value),placeholder:t.testbed.removeChild.placeholder,required:!0})]}),u.jsx("button",{type:"submit",className:"button",children:t.testbed.removeChild.confirm})]})]})}function S1(){const t=H(),[e,n]=P.useState(),[r,i]=P.useState(!1),[s,a]=P.useState(""),o=async()=>{const f=await fetch(`/testbed/publishers/${s}`,{method:"DELETE"});if(f.status===200)n({type:V.success,message:t.testbed.removePublisher.success.replace("{publisher_handle}",s)}),a("");else{const d=await f.json();n({type:V.error,message:d.msg})}},l=async f=>{f.preventDefault(),i(!0)},c=async()=>{await o(),i(!1)};return u.jsxs(u.Fragment,{children:[r&&u.jsx(ua,{onClose:()=>i(!1),onConfirm:c}),u.jsxs("form",{onSubmit:l,method:"POST",children:[e&&u.jsx(fr,{notification:e}),u.jsxs("div",{children:[u.jsx("label",{children:t.testbed.publisherhandle}),u.jsx("input",{name:"handle",value:s,onChange:f=>a(f.target.value),placeholder:t.testbed.removePublisher.placeholder,required:!0})]}),u.jsx("button",{type:"submit",className:"button",children:t.testbed.removePublisher.confirm})]})]})}const Tm="/assets/welcome-9fadc7f2.svg";function Zi({children:t}){const e=H();return u.jsx(Rn,{children:u.jsxs("div",{className:"testbed",children:[u.jsxs("div",{children:[u.jsx("img",{src:Tm,className:"hero",alt:e.common.copy}),u.jsx("h2",{children:e.testbed.welcome})]}),u.jsxs("div",{children:[u.jsx("h3",{children:e.testbed.disclaimer.heading}),u.jsx("p",{dangerouslySetInnerHTML:{__html:e.testbed.disclaimer.body}}),u.jsx("h3",{children:e.testbed.rpconfighelp.heading}),u.jsx("p",{dangerouslySetInnerHTML:{__html:e.testbed.rpconfighelp.body.replace("{tallink}","/ta/ta.tal")}}),u.jsx("h3",{children:e.testbed.regunreg.heading}),u.jsx("p",{dangerouslySetInnerHTML:{__html:e.testbed.regunreg.body}})]}),u.jsx("div",{children:u.jsxs("ul",{className:"tabs",children:[u.jsx("li",{children:u.jsx(yn,{routeName:"testbed",activeStrict:!0,children:e.testbed.addChild.heading})}),u.jsx("li",{children:u.jsx(yn,{routeName:"testbed.del_ca",children:e.testbed.removeChild.heading})}),u.jsx("li",{children:u.jsx(yn,{routeName:"testbed.add_pub",children:e.testbed.addPublisher.heading})}),u.jsx("li",{children:u.jsx(yn,{routeName:"testbed.del_pub",children:e.testbed.removePublisher.heading})})]})}),t]})})}function k1(){const{route:t}=He();return Ne().testBedEnabled?t.name=="testbed.del_ca"?u.jsx(Zi,{children:u.jsx(x1,{})}):t.name=="testbed.add_pub"?u.jsx(Zi,{children:u.jsx(w1,{})}):t.name=="testbed.del_pub"?u.jsx(Zi,{children:u.jsx(S1,{})}):u.jsx(Zi,{children:u.jsx(y1,{})}):u.jsx(Em,{})}function E1(){const t=ue(),[e,n]=P.useState(""),r=H(),i=s=>{s.preventDefault(),t({name:e})};return u.jsx(Rn,{children:u.jsxs("form",{method:"POST",onSubmit:i,className:"center-form",children:[u.jsxs("div",{children:[u.jsx("img",{src:Tm,alt:r.common.copy}),u.jsx("h2",{children:r.onboarding.welcome}),u.jsx("div",{dangerouslySetInnerHTML:{__html:r.onboarding.welcomeHtml}})]}),u.jsxs("div",{children:[u.jsxs("label",{htmlFor:"token required",children:["CA ",r.caDetails.handle]}),u.jsx("input",{name:"name",type:"test",value:e,onChange:s=>n(s.target.value),required:!0})]}),u.jsx("div",{children:u.jsx("button",{type:"submit",className:"button",children:r.onboarding.addCAForm.confirm})})]})})}function T1(){const{route:t}=He();return!t||t.name==="loading"?u.jsx(iu,{initial:!0}):t.name==="login"?u.jsx(g1,{}):t.name==="onboarding"?u.jsx(E1,{}):t.name.startsWith("cas.parents")?u.jsx(d1,{}):t.name.startsWith("cas.repository")?u.jsx(v1,{}):t.name.startsWith("cas")?u.jsx(i1,{}):t.name.startsWith("testbed")?u.jsx(k1,{}):u.jsx(Em,{})}/*! ***************************************************************************** +`}function E0(t){const e=[];if(t.too_permissive)for(const n of t.too_permissive){e.push({action:"remove",reason:vt.tooPermissive,prefix:n.current.prefix,asn:n.current.asn,max_length:n.current.max_length||parseInt(n.current.prefix.split("/")[1])});for(const r of n.new)e.push({action:"remove",reason:vt.specific,prefix:r.prefix,asn:r.asn,max_length:parseInt(r.prefix.split("/")[1])})}if(t.not_found)for(const n of t.not_found)e.push({action:"add",reason:vt.notFound,prefix:n.prefix,asn:n.asn,max_length:parseInt(n.prefix.split("/")[1])});if(t.invalid_length)for(const n of t.invalid_length)e.push({action:"add",reason:vt.invalidLength,prefix:n.prefix,asn:n.asn,max_length:parseInt(n.prefix.split("/")[1])});if(t.redundant)for(const n of t.redundant)e.push({action:"remove",reason:vt.redundant,prefix:n.prefix,asn:n.asn,max_length:parseInt(n.prefix.split("/")[1])});if(t.stale)for(const n of t.stale)e.push({action:"remove",reason:vt.stale,prefix:n.prefix,asn:n.asn,max_length:parseInt(n.prefix.split("/")[1])});if(t.invalid_asn)for(const n of t.invalid_asn)e.push({action:"remove",reason:vt.invalidAsn,prefix:n.prefix,asn:n.asn,max_length:parseInt(n.prefix.split("/")[1])});if(t.as0_redundant)for(const n of t.as0_redundant)e.push({action:"remove",reason:vt.as0Redundant,prefix:n.prefix,asn:n.asn,max_length:parseInt(n.prefix.split("/")[1])});if(t.disallowing)for(const n of t.disallowing)e.push({action:"remove",reason:vt.disallowing,prefix:n.prefix,asn:n.asn,max_length:parseInt(n.prefix.split("/")[1])});return e}class wm{constructor(){ce(this,"baseUrl");ce(this,"VERSION_URL","https://api.github.com/repos/nlnetlabs/krill/releases/latest");ce(this,"token");this.baseUrl=window.location.origin,this.token=null}setToken(e){this.token=e}async get(e,n){const r=await fetch(`${this.baseUrl}${e}`,{...n,headers:{Authorization:`Bearer ${this.token}`,...(n==null?void 0:n.headers)||{}}});if((r.status===401||r.status===403)&&this.setToken(null),!(r.headers.get("Content-Type")==="application/json")){const a=await r.text();if(r.status===200)return a;throw{status:r.status,msg:a}}const s=await r.json();if(r.status===200)return s;throw{status:r.status,msg:s.msg||null}}post(e,n){return this.get(e,{method:"POST",...n})}postCas(e){return this.post("/api/v1/cas",{body:JSON.stringify({handle:e}),headers:{"Content-Type":"application/json"}})}getCas(){return this.get("/api/v1/cas").then(({cas:e})=>e.map(({handle:n})=>n).reverse())}getCaDetails(e){return this.get(`/api/v1/cas/${e}`)}getCaRoas(e){return this.get(`/api/v1/cas/${e}/routes/analysis/full`).then(n=>n.map(r=>({id:Vc(10),...r})))}getCaSuggestions(e){return this.get(`/api/v1/cas/${e}/routes/analysis/suggest`).then(n=>E0(n)).then(n=>n.map(r=>({id:Vc(10),...r})))}refreshCaParents(){return this.post("/api/v1/bulk/cas/sync/parent")}getCaParents(e){return this.get(`/api/v1/cas/${e}/parents`).then(n=>Object.entries(n).map(([r,i])=>({name:r,...i})))}refreshCaRepo(){return this.post("/api/v1/bulk/cas/sync/repo")}getCaRepoStatus(e){return this.get(`/api/v1/cas/${e}/repo/status`)}getInfo(){return this.get("/stats/info")}getVersion(){return fetch(this.VERSION_URL).then(e=>e.json())}getChildRequest(e){return this.get(`/api/v1/cas/${e}/id/child_request.xml`)}getPublisherRequest(e){return this.get(`/api/v1/cas/${e}/id/publisher_request.xml`)}postParent(e,n,r){return this.post(`/api/v1/cas/${e}/parents/${n}`,{body:r})}postRepository(e,n,r){return this.post(`/api/v1/cas/${e}/repo`,{body:r})}updateRoutes(e,n){return this.get(`/api/v1/cas/${e}/routes`,{method:"POST",body:JSON.stringify(n),headers:{"Content-Type":"application/json"}})}getLoginMethod(){return fetch(`${this.baseUrl}/auth/login`).then(e=>e.status===200?e.text().then(n=>w0(n)?{redirect_url:n}:{with_id:x0(n)}):Promise.reject(e))}postLogin(e,n){const r="/auth/login";if(n){this.setToken(null);const i=btoa(`${n}:${e}`);return this.post(r,{headers:{Authorization:`Basic ${i}`}})}return this.setToken(e),this.post(r)}checkToken(e){return this.setToken(e),this.get("/api/v1/authorized")}getTestBedEnabled(){return fetch("/testbed/enabled").then(e=>e.status===200?!0:e.status===400?!1:Promise.reject(e))}}let Wc=null;function T0(){const[t,e]=P.useState(Wc);return P.useEffect(()=>{t||new wm().getInfo().then(r=>{e(r),Wc=r})},[]),t}const N0="/assets/logout-c725fd2c.svg",C0="/assets/user-5d1f1b14.svg";function iu({initial:t}){const e=On(),[n,r]=P.useState(t);return P.useEffect(()=>e.usePlugin(()=>({onTransitionStart:()=>r(!0),onTransitionSuccess:()=>r(!1)})),[]),n?u.jsx("div",{className:"loader",children:u.jsx("span",{children:"Loading…"})}):null}function xm({options:t,value:e,onChange:n,className:r}){const[i,s]=P.useState(!1);return u.jsxs("div",{className:`select ${r||""}`,children:[u.jsx("button",{className:i?"open":"",onClick:()=>s(!i),onBlur:()=>{setTimeout(()=>s(!1),300)},onKeyDown:a=>{a.key==="Escape"&&s(!1)},children:t[e]}),u.jsx("ul",{className:i?"show":"hide",children:Object.entries(t).map(([a,o])=>u.jsx("li",{className:e===a?"selected":"",onClick:()=>n(a),children:o},a))})]})}function xi({notification:t,onClose:e}){return u.jsxs("div",{className:`notification popup ${t.type}`,children:[u.jsx("button",{className:"close",onClick:e,children:"×"}),u.jsx("span",{children:t.message})]})}function _0(){const t=Ne(),[e,n]=P.useState(!1),r=()=>{n(!0),t.setNotification(null)};return P.useEffect(()=>{if(t.notification){n(!1);const i=setTimeout(r,5e3);return()=>clearTimeout(i)}},[t.notification]),!t.notification||e?null:u.jsx(xi,{notification:t.notification,onClose:r})}function Rn({children:t}){const e=ue(),{route:n}=He(),r=T0(),i=Ne(),s=new Date().getFullYear(),a=H();return P.useEffect(()=>{document.title=i.ca?`Krill - ${i.ca}`:"Krill"},[i.ca]),u.jsxs(u.Fragment,{children:[u.jsx(iu,{initial:!1}),u.jsxs("header",{children:[u.jsx("h1",{onClick:()=>e({},"cas"),children:u.jsx("span",{children:"Krill"})}),u.jsxs("menu",{children:[u.jsx(xm,{options:pg,value:i.locale,onChange:o=>e({locale:o})}),i.userDetails&&u.jsxs(u.Fragment,{children:[u.jsxs("button",{className:"pop",children:[u.jsx("img",{src:C0}),u.jsxs("div",{children:[u.jsx("h5",{children:a.common.userInfo.title}),u.jsx("table",{children:u.jsxs("tbody",{children:[u.jsxs("tr",{children:[u.jsxs("th",{children:[a.common.userInfo.user,":"]}),u.jsx("td",{children:i.userDetails.id})]}),Object.entries(i.userDetails.attributes).map(([o,l])=>u.jsxs("tr",{children:[u.jsxs("th",{className:"user-attribute",children:[o,":"]}),u.jsx("td",{children:l})]},o))]})})]})]}),u.jsx("button",{onClick:()=>e({},"logout"),children:u.jsx("img",{src:N0})})]})]})]}),u.jsx(_0,{}),u.jsx("div",{className:`content route-${n.name}`,children:t}),u.jsxs("footer",{children:[u.jsxs("span",{children:["© ",s," Stichting NLnet Labs"," - ","Krill ",r==null?void 0:r.version]}),u.jsxs("span",{children:[u.jsx("a",{href:"https://nlnetlabs.nl/services/contracts/",target:"_blank",rel:"noreferrer",children:a.common.supportcontracts})," - ",u.jsx("a",{href:"https://krill.docs.nlnetlabs.nl/",target:"_blank",rel:"noreferrer",children:a.common.readthedocs})," - ",u.jsx("a",{href:"https://github.com/NLnetLabs/krill/issues/new",target:"_blank",rel:"noreferrer",children:a.common.report})]})]})]})}function j0({columns:t,filtering:e}){const n=ue(),r=i=>{const s=e.sort===i&&e.order===ft.asc?ft.desc:ft.asc;n({sort:i,order:s})};return u.jsx("thead",{children:u.jsxs("tr",{children:[u.jsx("th",{}),t.map(({label:i,accessor:s})=>u.jsxs("th",{onClick:()=>r(s),children:[i,s===e.sort&&u.jsx("span",{className:e.order})]},s)),u.jsx("th",{})]})})}function qc({announcements:t}){const e=H();return u.jsxs("table",{children:[u.jsx("thead",{children:u.jsxs("tr",{children:[u.jsx("th",{children:e.announcements.asn}),u.jsx("th",{children:e.announcements.prefix})]})}),u.jsxs("tbody",{children:[t.length===0&&u.jsx("tr",{children:u.jsx("td",{colSpan:2,children:u.jsx("span",{className:"muted",children:e.common.nodata})})}),t.map((n,r)=>u.jsxs("tr",{children:[u.jsx("td",{children:n.asn}),u.jsx("td",{children:n.prefix})]},r))]})]})}function O0({authorizes:t,disallows:e}){const n=H();return u.jsxs("div",{className:"row",children:[u.jsxs("div",{children:[u.jsx("h3",{children:n.announcements.authorizes.replace("{number}",t.length.toString())}),u.jsx(qc,{announcements:t})]}),u.jsxs("div",{children:[u.jsx("h3",{children:n.announcements.disallows.replace("{number}",e.length.toString())}),u.jsx(qc,{announcements:e})]})]})}const P0="/assets/trash-d9c6ee55.svg",R0="/assets/edit-776bf3c3.svg",D0="/assets/plus-e8f1d182.svg";function I0({roa:t,allowAdd:e,allowDelete:n,hasAnnouncements:r}){var d;const i=ue(),[s,a]=P.useState(!1),o=H(),l={id:((d=t.id)==null?void 0:d.toString())||"new"},c=`${t.state}_help`,f=o.announcements.state[c];return u.jsxs(u.Fragment,{children:[u.jsxs("tr",{className:r?"announcements":"",children:[u.jsx("td",{children:r&&u.jsx("button",{className:`expand ${s?"open":""}`,onClick:()=>a(!s)})}),u.jsx("td",{children:t.asn}),u.jsxs("td",{children:[t.prefix,t.max_length&&-t.max_length]}),u.jsxs("td",{children:[t.comment,n&&u.jsx("button",{className:"button icon light right",onClick:()=>i(l,"cas.edit"),children:u.jsx("img",{src:R0})})]}),u.jsxs("td",{children:[u.jsx("span",{className:`state ${t.state}`,title:f,children:o.announcements.state[t.state]}),t.authorizes&&u.jsx("span",{className:"badge success",children:t.authorizes.length}),t.disallows&&u.jsx("span",{className:"badge warning",children:t.disallows.length})]}),u.jsxs("td",{className:"actions",children:[e&&u.jsx("button",{className:"button icon",onClick:()=>i(l,"cas.add"),children:u.jsx("img",{src:D0})}),n&&u.jsx("button",{className:"button icon",onClick:()=>i(l,"cas.delete"),children:u.jsx("img",{src:P0})})]})]}),r&&s&&u.jsx("tr",{className:"announcements",children:u.jsx("td",{colSpan:6,children:u.jsx(O0,{authorizes:t.authorizes||[],disallows:t.disallows||[]})})})]})}function M0({tableData:t}){return u.jsx("tbody",{children:t.filter(e=>e.state!=Re.AnnouncementDisallowedAs0).map(e=>u.jsx(I0,{roa:e,hasAnnouncements:!!e.authorizes||!!e.disallows,allowDelete:e.state===Re.RoaSeen||e.state===Re.RoaUnseen||e.state===Re.RoaNotHeld||e.state==Re.RoaNoAnnouncementInfo||e.state===Re.RoaTooPermissive||e.state===Re.RoaDisallowing||e.state===Re.RoaRedundant||e.state==Re.RoaAs0||e.state===Re.RoaAs0Redundant,allowAdd:e.state===Re.AnnouncementNotFound||e.state===Re.AnnouncementInvalidLength||e.state===Re.AnnouncementInvalidAsn},e.id))})}function L0({filtering:t}){const e=H(),r=Ne().getRoas(t),i=[{label:e.announcements.asn,accessor:Yn.asn},{label:e.announcements.prefix,accessor:Yn.prefix},{label:e.caDetails.comment,accessor:Yn.comment},{label:e.announcements.stateLabel,accessor:Yn.state}];return u.jsxs("table",{className:"roa-table",children:[u.jsx(j0,{columns:i,filtering:t}),u.jsx(M0,{tableData:r})]})}function F0({details:t}){return u.jsx("div",{className:"ca-details card",children:u.jsx("table",{children:u.jsx("tbody",{children:Object.entries(t.resources).map(([e,n])=>u.jsxs("tr",{children:[u.jsx("th",{children:e}),u.jsx("td",{children:n.split(",").map(r=>u.jsx("p",{children:r},r))})]},e))})})})}function A0({onClose:t,roa:e}){var w;const n=H(),r=ue(),[i,s]=P.useState((e==null?void 0:e.asn.toString())||""),[a,o]=P.useState((e==null?void 0:e.prefix)||""),[l,c]=P.useState((e==null?void 0:e.comment)||""),f=Hc(e==null?void 0:e.prefix),[d,v]=P.useState(((w=e==null?void 0:e.max_length)==null?void 0:w.toString())||f),y=g=>{g.preventDefault();const k=g.target;k.checkValidity()?r({asn:i,prefix:a,comment:l,max_length:d}):k.reportValidity()};return u.jsxs(u.Fragment,{children:[u.jsx("h3",{children:n.caDetails.addRoa}),u.jsxs("form",{onSubmit:y,children:[u.jsxs("div",{children:[u.jsx("label",{htmlFor:"asn required",children:n.announcements.asn}),u.jsx("input",{type:"number",min:"0",name:"asn",onInput:g=>g.target.setCustomValidity(""),onInvalid:g=>g.target.setCustomValidity(n.caDetails.addROAForm.asn_format),value:i,onChange:g=>s(g.target.value),required:!0})]}),u.jsxs("div",{children:[u.jsx("label",{htmlFor:"prefix required",children:n.announcements.prefix}),u.jsx("input",{name:"prefix",pattern:"^((([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\\.(?!\\/)|\\/)){4}([0-9]|[1-2][0-9]|3[0-2]))|(([a-fA-F0-9:]+)\\/([1-9]|[1-9][0-9]|1[01][0-9]|12[0-8]))$",onInput:g=>g.target.setCustomValidity(""),onInvalid:g=>g.target.setCustomValidity(n.caDetails.addROAForm.prefix_format),title:n.caDetails.addROAForm.prefix_format,value:a,onChange:g=>o(g.target.value),required:!0})]}),u.jsxs("div",{children:[u.jsx("label",{htmlFor:"maxLength",children:n.caDetails.maxLength}),u.jsx("input",{type:"number",min:Hc(a)||1,max:a.includes(".")||!a.includes(":")?32:128,name:"maxLength",value:d,onChange:g=>v(g.target.value),placeholder:n.caDetails.maxLengthTooltip})]}),u.jsxs("div",{children:[u.jsx("label",{htmlFor:"comment",children:n.caDetails.comment}),u.jsx("input",{name:"comment",value:l,onChange:g=>c(g.target.value)})]}),u.jsxs("div",{className:"actions",children:[u.jsx("button",{type:"button",className:"button outline",onClick:t,children:n.common.cancel}),u.jsx("button",{type:"submit",className:"button",children:n.common.confirm})]})]})]})}const z0="modulepreload",$0=function(t){return"/"+t},Bc={},Et=function(e,n,r){if(!n||n.length===0)return e();const i=document.getElementsByTagName("link");return Promise.all(n.map(s=>{if(s=$0(s),s in Bc)return;Bc[s]=!0;const a=s.endsWith(".css"),o=a?'[rel="stylesheet"]':"";if(!!r)for(let f=i.length-1;f>=0;f--){const d=i[f];if(d.href===s&&(!a||d.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${s}"]${o}`))return;const c=document.createElement("link");if(c.rel=a?"stylesheet":z0,a||(c.as="script",c.crossOrigin=""),c.href=s,document.head.appendChild(c),a)return new Promise((f,d)=>{c.addEventListener("load",f),c.addEventListener("error",()=>d(new Error(`Unable to preload CSS for ${s}`)))})})).then(()=>e())},U0=(t,e)=>{const n=t[e];return n?typeof n=="function"?n():Promise.resolve(n):new Promise((r,i)=>{(typeof queueMicrotask=="function"?queueMicrotask:setTimeout)(i.bind(null,new Error("Unknown variable dynamic import: "+e)))})};async function b0(t){return(await U0(Object.assign({"../locales/de.ts":()=>Et(()=>import("./de-faf2935a.js"),[]),"../locales/en.ts":()=>Et(()=>import("./en-d3d88bc8.js"),[]),"../locales/es.ts":()=>Et(()=>import("./es-52cbfc21.js"),[]),"../locales/fr.ts":()=>Et(()=>import("./fr-ac1aafd8.js"),[]),"../locales/gr.ts":()=>Et(()=>import("./gr-5a66c94a.js"),[]),"../locales/nl.ts":()=>Et(()=>import("./nl-f2dd1189.js"),[]),"../locales/pt.ts":()=>Et(()=>import("./pt-e9bf4047.js"),[]),"../locales/zh-Hans.ts":()=>Et(()=>import("./zh-Hans-f7c709f7.js"),[]),"../locales/zh-Hant.ts":()=>Et(()=>import("./zh-Hant-0d86c694.js"),[])}),`../locales/${t}.ts`)).translations}function V0(t,e){return Object.entries(e).reduce((n,[r,i])=>n.replace(`{${r}}`,i),t)}function H0({onClose:t,roa:e}){var s;const n=H(),r=ue(),i={asn:e.asn.toString(),prefix:e.prefix,max_length:((s=e.max_length)==null?void 0:s.toString())||""};return u.jsxs(u.Fragment,{children:[u.jsx("h3",{children:n.common.warning}),u.jsx("p",{children:V0(n.caDetails.confirmation.message,i)}),u.jsxs("div",{className:"actions",children:[u.jsx("button",{type:"button",className:"button outline",onClick:t,children:n.common.cancel}),u.jsx("button",{className:"button",onClick:()=>{r(i)},children:n.common.ok})]})]})}function W0({onClose:t,roa:e}){const n=H(),r=ue(),[i,s]=P.useState((e==null?void 0:e.comment)||"");return u.jsxs(u.Fragment,{children:[u.jsx("h3",{children:n.common.edit}),u.jsxs("form",{autoComplete:"off",onSubmit:a=>{a.preventDefault(),i!==(e==null?void 0:e.comment)?r({comment:i}):t()},children:[u.jsxs("div",{children:[u.jsx("label",{htmlFor:"comment required",children:n.caDetails.comment}),u.jsx("input",{name:"comment",value:i,onChange:a=>s(a.target.value)})]}),u.jsxs("div",{className:"actions",children:[u.jsx("button",{type:"button",className:"button outline",onClick:t,children:n.common.cancel}),u.jsx("button",{type:"submit",className:"button",children:n.common.confirm})]})]})]})}function Si({onClose:t,children:e}){return u.jsx("div",{className:"modal",onMouseDown:t,children:u.jsx("div",{onMouseDown:n=>{n.stopPropagation()},children:e})})}function q0(){const{route:t}=He(),e=On(),{route:{params:n}}=He(),s=Ne().getRoas().find(o=>o.id===n.id),a=()=>{e.navigate("cas",{ca:n.ca})};return!s&&t.name!=="cas.add_new"?null:u.jsxs(Si,{onClose:a,children:[t.name.startsWith("cas.add")&&u.jsx(A0,{onClose:a,roa:s}),t.name.startsWith("cas.edit")&&u.jsx(W0,{onClose:a,roa:s}),t.name==="cas.delete"&&u.jsx(H0,{onClose:a,roa:s})]})}function su(){var s,a,o;const t=Ne(),e=H(),n=ue(),r=t.ca&&t.parents[t.ca].length>0,i=t.repoStatus&&t.ca&&((s=t.repoStatus[t.ca])==null?void 0:s.last_exchange);return u.jsxs(u.Fragment,{children:[u.jsxs("div",{className:"space-between border-bottom row",children:[u.jsxs("h2",{children:[e.cas.ca," ",u.jsx("strong",{children:t.ca})]}),t.cas&&((a=t.cas)==null?void 0:a.length)>1&&u.jsxs("div",{children:[u.jsx("label",{htmlFor:"ca",children:e.caDetails.current}),u.jsx(xm,{className:"wide",options:((o=t.cas)==null?void 0:o.sort().reduce((l,c)=>({...l,[c]:[c]}),{}))||{},value:t.ca||"",onChange:l=>n({ca:l},"cas")})]})]}),!r&&u.jsx("div",{className:"notification error",children:e.caDetails.onboardingWarning}),r&&!i&&u.jsx("div",{className:"notification error",children:e.caDetails.initializeRepository}),u.jsx("div",{children:u.jsxs("ul",{className:"tabs",children:[u.jsx("li",{children:u.jsx(yn,{routeName:"cas",activeStrict:!0,routeParams:{ca:t.ca},children:e.caDetails.roas})}),u.jsx("li",{children:u.jsx(yn,{routeName:"cas.parents",routeParams:{ca:t.ca},children:e.caDetails.parents})}),u.jsx("li",{children:u.jsx(yn,{routeName:"cas.repository",routeParams:{ca:t.ca},children:e.caDetails.repo})})]})})]})}function B0({currentPage:t,numPages:e}){const n=ue();let r;if(e<=7)r=[...Array(e).keys()].map(i=>(i+1).toString());else if(r=Array(7),r[0]="1",r[6]=e.toString(),t>=1&&t<=4){for(let i=1;i<5;i++)r[i]=(i+1).toString();r[5]="..."}else if(t>=e-3&&t<=e){r[1]="...";for(let i=2;i<7;i++)r[i]=(e-6+i).toString()}else{r[1]="...";for(let i=2;i<5;i++)r[i]=(t-3+i).toString();r[5]="..."}return u.jsx(u.Fragment,{children:r.map((i,s)=>u.jsx("button",{className:i===t.toString()?"number current":"number",disabled:i===t.toString()||i==="...",onClick:()=>n({page:i}),children:i},s))})}function Z0({filtering:t}){const e=H(),r=Ne().getRoas().length,i=ue(),s=Math.ceil(r/t.limit);return u.jsxs("div",{className:"pagination",children:[u.jsx("select",{value:t.limit,onChange:a=>i({limit:a.target.value,page:"1"}),children:mg.map(a=>u.jsxs("option",{value:a,children:[a," / ",e.common.page]},a))}),u.jsxs("div",{children:[u.jsx("button",{disabled:t.page===1,className:"arrow prev",onClick:()=>i({page:(t.page-1).toString()}),children:u.jsx("span",{children:"<"})}),u.jsx(B0,{currentPage:t.page,numPages:s}),u.jsx("button",{disabled:t.page>s-1,className:"arrow next",onClick:()=>i({page:(t.page+1).toString()}),children:u.jsx("span",{children:">"})})]})]})}function Q0({columns:t,filtering:e,setAllCheckboxes:n,checkBoxState:r}){const i=ue(),s=a=>{const o=e.sort===a&&e.order===ft.asc?ft.desc:ft.asc;i({sort:a,order:o})};return u.jsx("thead",{children:u.jsxs("tr",{children:[u.jsx("th",{children:u.jsx("input",{type:"checkbox",checked:r===yt.checked,onChange:n,ref:a=>{a&&(a.indeterminate=r===yt.intermediate)}})}),u.jsx("th",{}),t.map(({label:a,accessor:o})=>u.jsxs("th",{onClick:()=>s(o),children:[a,o===e.sort&&u.jsx("span",{className:e.order})]},o)),u.jsx("th",{})]})})}const Y0="/assets/trash-red-65027383.svg",K0="/assets/check-green-4525c79c.svg";function G0({suggestion:t,id:e,checked:n,handleCheckbox:r}){const i=H(),s=i.caDetails.suggestions.reasons[t.reason];return u.jsxs(u.Fragment,{children:[u.jsx("td",{children:u.jsx("input",{type:"checkbox",id:e,onChange:r,checked:n})}),u.jsxs("td",{children:[t.action==="add"&&u.jsx("span",{className:"add",title:i.caDetails.suggestions.adding,children:u.jsx("img",{src:K0,title:`${i.caDetails.suggestions.willAdd} (${s})`})}),t.action==="remove"&&u.jsx("span",{className:"remove",title:i.caDetails.suggestions.willRemove,children:u.jsx("img",{src:Y0,title:`${i.caDetails.suggestions.willRemove} (${s})`})})]}),u.jsx("td",{children:t.asn}),u.jsx("td",{children:t.prefix}),u.jsx("td",{children:i.caDetails.suggestions.reasons[t.reason]})]})}function J0({suggestions:t,checkedBoxes:e,handleCheckbox:n}){return u.jsx("tbody",{children:t.map(r=>u.jsx("tr",{children:u.jsx(G0,{checked:e.includes(r.id||""),suggestion:r,id:r.id||"",handleCheckbox:n})},r.id))})}function X0({suggestions:t,filtering:e,checkedBoxes:n,handleCheckbox:r,handleAllCheckboxes:i,topCheckBoxState:s}){const a=H(),o=[{label:a.announcements.asn,accessor:Ls.asn},{label:a.announcements.prefix,accessor:Ls.prefix}];return u.jsxs("table",{className:"roa-table",children:[u.jsx(Q0,{columns:o,filtering:e,setAllCheckboxes:i,checkBoxState:s}),u.jsx(J0,{checkedBoxes:n,suggestions:t,handleCheckbox:r})]})}function e1(t){const n=Ne().getSuggestions(t),r=[];for(const f of n)r.push(f.id||"");const[i,s]=P.useState([]),[a,o]=P.useState(yt.unchecked);return{checked:i,topCheckbox:a,suggestions:n,handleCheckbox:f=>{let d=[...i];f.target.checked?(d=[...i,f.target.id],r.every(v=>d.includes(v))?o(yt.checked):o(yt.intermediate)):(d.splice(i.indexOf(f.target.id),1),d.length>0?o(yt.intermediate):o(yt.unchecked)),s(d)},handleAllCheckboxes:f=>{f.target.checked?(s(r),o(yt.checked)):(s([]),o(yt.unchecked))}}}function t1({onClose:t,filtering:e}){const n=H(),r=ue(),{checked:i,topCheckbox:s,suggestions:a,handleCheckbox:o,handleAllCheckboxes:l}=e1(e);return u.jsxs(u.Fragment,{children:[u.jsx("h3",{children:n.caDetails.analysis}),a.length>0&&u.jsxs(u.Fragment,{children:[u.jsxs("div",{children:[n.caDetails.suggestions.following," ",u.jsx("a",{href:"https://krill.docs.nlnetlabs.nl/en/stable/manage-roas.html",target:"_blank",rel:"noreferrer",children:n.caDetails.suggestions.readMore})]}),u.jsx(X0,{checkedBoxes:i,suggestions:a,filtering:e,handleCheckbox:o,handleAllCheckboxes:l,topCheckBoxState:s})]}),a.length===0&&n.caDetails.suggestions.nochanges,u.jsxs("div",{className:"actions",children:[a.length>0&&u.jsxs(u.Fragment,{children:[u.jsx("button",{type:"button",className:"button outline",onClick:t,children:n.common.cancel}),u.jsx("button",{className:"button",onClick:()=>r({ids:JSON.stringify(i)},"cas.change"),children:n.common.confirm})]}),a.length===0&&u.jsx("button",{className:"button",onClick:t,children:n.common.ok})]})]})}function n1(){const t=On(),{route:e,route:{params:n}}=He(),r=()=>{t.navigate("cas",{ca:n.ca})};if(e.name!=="cas.analyse")return null;const i={search:null,sort:n.sort||Ls.asn,order:n.order||ft.asc,limit:parseInt(n.limit,10)||10,page:parseInt(n.page,10)||1};return u.jsx(Si,{onClose:r,children:e.name==="cas.analyse"&&u.jsx(t1,{onClose:r,filtering:i})})}function r1({filtering:t}){const e=H(),n=ue(),[r,i]=P.useState(t.search);return P.useEffect(()=>{const s=setTimeout(()=>{n(r?{search:r}:{search:void 0})},500);return()=>clearTimeout(s)},[r]),P.useEffect(()=>{i(t.search)},[t.search]),u.jsx("input",{type:"search",value:r||"",placeholder:e.announcements.search,onChange:s=>i(s.target.value)})}function i1(){const t=H(),e=Ne(),{route:n}=He(),r=ue(),i=n.params,s={search:i.search||null,sort:i.sort||Yn.asn,order:i.order||ft.asc,limit:parseInt(i.limit,10)||25,page:parseInt(i.page,10)||1};return u.jsxs(Rn,{children:[u.jsx(q0,{}),n.name==="cas.analyse"&&u.jsx(n1,{}),u.jsx(su,{}),u.jsxs("div",{className:"row",children:[u.jsxs("div",{className:"flex-1",children:[u.jsx(r1,{filtering:s}),u.jsx(L0,{filtering:s}),u.jsx(Z0,{filtering:s}),u.jsxs("div",{className:"roa-actions",children:[u.jsx("div",{children:u.jsx("button",{className:"button",onClick:()=>r({},"cas.add_new"),children:t.caDetails.addRoa})}),u.jsx("div",{children:u.jsx("button",{className:"button inverted",onClick:()=>r({},"cas.analyse"),children:t.caDetails.analyseThis})})]})]}),e.ca&&u.jsx(F0,{details:e.caDetails[e.ca]})]})]})}const Sm="/assets/upload-87e6fdfd.svg";let Zc="";function s1(){const[t,e]=P.useState(Zc),n=Ne();return P.useEffect(()=>{n.ca&&n.api.getChildRequest(n.ca).then(r=>{e(r),Zc=r})},[]),t}function km(t){const[e,n]=P.useState(null),[r,i]=P.useState(t),[s,a]=P.useState("");return P.useEffect(()=>{i(t)},[t]),{notification:e,setNotification:n,request:r,setRequest:i,response:s,setResponse:a,handleUpload:l=>{if(l.currentTarget.files){const c=new FileReader;c.onload=()=>{a(c.result)},c.readAsText(l.currentTarget.files[0])}}}}function a1(){const t=s1(),e=On(),{route:{params:n}}=He(),r=ue(),[i,s]=P.useState(""),{notification:a,setNotification:o,request:l,setRequest:c,response:f,setResponse:d,handleUpload:v}=km(t);return{notification:a,setNotification:o,name:i,setName:s,request:l,setRequest:c,response:f,setResponse:d,onSubmit:async g=>{g.preventDefault(),r({name:i,response:f})},onClose:()=>{e.navigate("cas.parents",{ca:n.ca})},handleUpload:v}}const o1="/assets/clipboard-4659ffea.svg",l1="/assets/download-2dfead4c.svg";function la({xml:t,name:e,setNotification:n}){const r=H(),i=()=>{navigator.clipboard.writeText(t),n({type:V.success,message:r.common.copySuccess})};return u.jsxs(u.Fragment,{children:[u.jsx("button",{className:"button large icon",type:"button",title:r.common.copy,onClick:i,children:u.jsx("img",{src:o1,alt:r.common.copy})}),u.jsx("a",{className:"button large icon",title:r.common.download,href:`data:application/xml;base64,${btoa(t)}`,download:`${e}.xml`,children:u.jsx("img",{src:l1,alt:r.common.download})})]})}function u1(){const t=H(),{notification:e,setNotification:n,name:r,setName:i,request:s,setRequest:a,response:o,setResponse:l,onSubmit:c,onClose:f,handleUpload:d}=a1();return u.jsxs(Si,{onClose:f,children:[e&&u.jsx(xi,{notification:e,onClose:()=>n(null)}),u.jsx("h3",{children:t.caDetails.parentsTab.addParent}),u.jsxs("form",{onSubmit:c,method:"POST",children:[u.jsxs("div",{children:[u.jsx("label",{children:t.caDetails.parentsTab.request}),u.jsx("textarea",{name:"request",readOnly:!0,value:s,id:"request",onChange:v=>a(v.target.value)}),u.jsx("div",{children:u.jsx(la,{xml:s,name:"child_request",setNotification:n})})]}),u.jsxs("div",{children:[u.jsx("label",{children:t.caDetails.parentsTab.response}),u.jsx("textarea",{name:"response",value:o,onChange:v=>l(v.target.value)}),u.jsx("input",{type:"file",id:"upload",onChange:d}),u.jsx("label",{className:"button large icon",htmlFor:"upload",title:t.common.dropOrClick,children:u.jsx("img",{src:Sm,alt:t.common.dropOrClick})})]}),u.jsxs("div",{children:[u.jsx("label",{children:t.caDetails.parentsTab.name}),u.jsx("input",{name:"name",value:r,onChange:v=>i(v.target.value),required:!0})]}),u.jsxs("div",{className:"actions",children:[u.jsx("button",{type:"button",className:"button outline",onClick:f,children:t.common.cancel}),u.jsx("button",{type:"submit",className:"button",children:t.common.confirm})]})]})]})}function c1({parent:t,loading:e}){const n=H(),{locale:r}=Ne(),i=e?n.caDetails.loading.replace("{handle}","..."):gm(t.last_exchange.timestamp,r);return u.jsxs("div",{className:"info-table",children:[u.jsx("h4",{children:t.name}),u.jsx("table",{children:u.jsxs("tbody",{children:[u.jsxs("tr",{children:[u.jsx("th",{children:n.caDetails.parents}),u.jsx("td",{children:t.last_exchange.uri})]}),u.jsxs("tr",{children:[u.jsx("th",{children:n.caDetails.lastExchange}),u.jsx("td",{children:t.last_exchange.result!="Success"?u.jsxs("p",{className:"failure",children:[i,u.jsx("br",{}),t.last_exchange.result.Failure.msg]}):u.jsx("p",{className:"success",children:i})})]}),u.jsxs("tr",{children:[u.jsx("th",{children:n.caDetails.allResources}),u.jsxs("td",{children:["ASN: ",t.all_resources.asn,u.jsx("br",{}),"IPv4: ",t.all_resources.ipv4,u.jsx("br",{}),"IPv6: ",t.all_resources.ipv6,u.jsx("br",{})]})]})]})})]})}function d1(){var o;const t=H(),{route:e}=He(),n=Ne(),r=ue(),[i,s]=P.useState(!1),a=()=>{s(!0),n.refreshParents().then(()=>{s(!1)})};return u.jsxs(Rn,{children:[e.name==="cas.parents.add"&&u.jsx(u1,{}),i&&u.jsx(xi,{notification:{type:V.success,message:t.caDetails.refresh.replace("{handle}",t.caDetails.parents.toLowerCase())},onClose:()=>s(!1)}),u.jsx(su,{}),n.parents&&n.ca&&((o=n.parents[n.ca])==null?void 0:o.map(l=>u.jsx(c1,{parent:l,loading:i},l.name))),u.jsx("button",{className:"button",onClick:()=>r({},"cas.parents.add"),children:t.caDetails.parentsTab.addParent}),u.jsx("button",{className:"button inverted",onClick:a,children:t.caDetails.syncParents})]})}function f1({repo:t,locale:e,loading:n}){const r=H(),i=n?r.caDetails.loading.replace("{handle}","..."):gm(t.last_exchange.timestamp,e);return u.jsx("div",{className:"info-table",children:u.jsx("table",{children:u.jsxs("tbody",{children:[u.jsxs("tr",{children:[u.jsx("th",{children:r.caDetails.exchangeUri}),u.jsx("td",{children:t.last_exchange.uri})]}),u.jsxs("tr",{children:[u.jsx("th",{children:r.caDetails.lastExchange}),u.jsx("td",{children:t.last_exchange.result!="Success"?u.jsxs("p",{className:"failure",children:[i,u.jsx("br",{}),t.last_exchange.result.Failure.msg]}):u.jsx("p",{className:"success",children:i})})]})]})})})}let Qc="";function h1(){const[t,e]=P.useState(Qc),n=Ne();return P.useEffect(()=>{n.ca&&n.api.getPublisherRequest(n.ca).then(r=>{e(r),Qc=r})},[]),t}function m1(){const t=h1(),e=On(),{route:{params:n}}=He(),r=ue(),{notification:i,setNotification:s,request:a,setRequest:o,response:l,setResponse:c,handleUpload:f}=km(t);return{notification:i,setNotification:s,request:a,setRequest:o,response:l,setResponse:c,onSubmit:async y=>{y.preventDefault(),r({response:l})},onClose:()=>{e.navigate("cas.repository",{ca:n.ca})},handleUpload:f}}function p1(){const t=H(),{notification:e,setNotification:n,request:r,setRequest:i,response:s,setResponse:a,onSubmit:o,onClose:l,handleUpload:c}=m1();return u.jsxs(Si,{onClose:l,children:[e&&u.jsx(xi,{notification:e,onClose:()=>n(null)}),u.jsx("h3",{children:t.caDetails.repoTab.addRepo}),u.jsxs("form",{onSubmit:o,method:"POST",children:[u.jsxs("div",{children:[u.jsx("label",{children:t.caDetails.repoTab.request}),u.jsx("textarea",{name:"request",readOnly:!0,value:r,id:"request",onChange:f=>i(f.target.value)}),u.jsx("div",{children:u.jsx(la,{xml:r,name:"publisher_request",setNotification:n})})]}),u.jsxs("div",{children:[u.jsx("label",{children:t.caDetails.repoTab.response}),u.jsx("textarea",{name:"response",value:s,onChange:f=>a(f.target.value)}),u.jsx("input",{type:"file",id:"upload",onChange:c}),u.jsx("label",{className:"button large icon",htmlFor:"upload",title:t.common.dropOrClick,children:u.jsx("img",{src:Sm,alt:t.common.dropOrClick})})]}),u.jsxs("div",{className:"actions",children:[u.jsx("button",{type:"button",className:"button outline",onClick:l,children:t.common.cancel}),u.jsx("button",{type:"submit",className:"button",children:t.common.confirm})]})]})]})}function v1(){var l;const t=H(),e=Ne(),n=ue(),{route:r}=He(),[i,s]=P.useState(!1),a=()=>{s(!0),e.refreshRepo().then(()=>{s(!1)})};if(!e.ca)return null;const o=e.repoStatus&&e.ca&&((l=e.repoStatus[e.ca])==null?void 0:l.last_exchange);return u.jsxs(Rn,{children:[r.name==="cas.repository.add"&&u.jsx(p1,{}),i&&u.jsx(xi,{notification:{type:V.success,message:t.caDetails.refresh.replace("{handle}",t.caDetails.repo.toLowerCase())},onClose:()=>s(!1)}),u.jsx(su,{}),o?u.jsx(f1,{repo:e.repoStatus[e.ca],locale:e.locale,loading:i}):u.jsx("button",{className:"button",onClick:()=>n({},"cas.repository.add"),children:t.caDetails.repoTab.addRepo}),u.jsx("button",{className:"button inverted",onClick:a,children:t.caDetails.syncRepo})]})}function Em(){const t=H();return u.jsxs(Rn,{children:[u.jsx("h1",{children:t.common.error}),u.jsx("pre",{children:window.location.pathname})]})}function g1(){const[t,e]=P.useState(""),[n,r]=P.useState(""),i=ue(),s=Ne(),a=H(),o=s.loginMethod;if(!o)return u.jsx(iu,{initial:!0});const l=async c=>{c.preventDefault(),o.with_id?i({password:n,username:t}):i({password:n})};return u.jsx(Rn,{children:u.jsxs("form",{onSubmit:l,method:"POST",className:`login card ${o.with_id?"vertical-form":""}`,children:[o.with_id&&u.jsxs("div",{children:[u.jsx("label",{htmlFor:"admin required",children:a.login.id}),u.jsx("input",{name:"token",type:"username",value:t,onChange:c=>e(c.target.value),placeholder:a.login.idPlaceholder,required:!0})]}),u.jsxs("div",{children:[u.jsx("label",{htmlFor:"token required",children:a.login.password}),u.jsx("input",{name:"token",type:"password",value:n,onChange:c=>r(c.target.value),placeholder:a.login.placeholder,required:!0})]}),u.jsx("div",{children:u.jsx("button",{type:"submit",className:"button",children:a.login.signin})})]})})}function fr({notification:t}){const e=ue();return u.jsxs("div",{className:`notification ${t.type}`,children:[u.jsx("button",{className:"close",onClick:()=>e({notification:"clear"}),children:"×"}),u.jsx("span",{children:t.message})]})}function ua({onClose:t,onConfirm:e}){const n=H(),{route:r}=He();let i="",s="";return r.name==="testbed"?(i=n.testbed.addChild.confirmation.title,s=n.testbed.addChild.confirmation.message):r.name==="testbed.add_pub"?(i=n.testbed.addPublisher.confirmation.title,s=n.testbed.addPublisher.confirmation.message):r.name==="testbed.del_ca"?(i=n.testbed.removeChild.confirmation.title,s=n.testbed.removeChild.confirmation.message):r.name==="testbed.del_pub"&&(i=n.testbed.removePublisher.confirmation.title,s=n.testbed.removePublisher.confirmation.message),u.jsxs(Si,{onClose:t,children:[u.jsx("h3",{children:i}),u.jsx("p",{children:s}),u.jsxs("div",{className:"actions",children:[u.jsx("button",{className:"button outline",onClick:t,children:n.common.cancel}),u.jsx("button",{className:"button",onClick:e,children:n.common.ok})]})]})}function y1(){const t=H(),[e,n]=P.useState(),[r,i]=P.useState(!1),[s,a]=P.useState(""),[o,l]=P.useState(""),[c,f]=P.useState(""),[d,v]=P.useState(""),[y,w]=P.useState(""),g=async(S,T,N,_,D)=>{const R=await fetch("/testbed/children",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({handle:S,id_cert:T,resources:{asn:N,v4:_,v6:D}})});if(R.status===200){n({type:V.success,message:t.testbed.addChild.success.replace("{child_handle}",S)});const q=S0(await R.json());w(q)}else{const q=await R.json();q.label==="pub-duplicate"?await g(S+Date.now(),T,N,_,D):n({type:V.error,message:q.msg})}},k=async S=>{S.preventDefault(),p(s)&&i(!0)},m=async()=>{const S=p(s);S&&await g(S.handle,S.id_cert,o,c,d)},h=S=>{const T=ym(S);return T?(n({type:V.error,message:t.testbed.errors.invalid_xml.replace("{err}",T)}),!1):S.getElementsByTagName("child_request").length===0?(n({type:V.error,message:t.testbed.errors.missing_xml_el.replace("{el}","child_request")}),!1):S.getElementsByTagName("child_bpki_ta").length===0?(n({type:V.error,message:t.testbed.errors.missing_xml_el.replace("{el}","child_bpki_ta")}),!1):S.getElementsByTagName("child_request")[0].attributes.child_handle?S.getElementsByTagName("child_bpki_ta")[0].childNodes.length===0?(n({type:V.error,message:t.testbed.errors.empty_xml_el.replace("{el}","child_bpki_ta")}),!1):S.getElementsByTagName("child_bpki_ta")[0].childNodes[0].nodeValue.trim().length===0?(n({type:V.error,message:t.testbed.errors.empty_xml_el.replace("{el}","child_bpki_ta")}),!1):!0:(n({type:V.error,message:t.testbed.errors.missing_xml_attr.replace("{attr}","child_handle").replace("{el}","child_request")}),!1)},p=S=>{const T=new window.DOMParser().parseFromString(S,"text/xml");if(h(T))return{handle:T.getElementsByTagName("child_request")[0].attributes.child_handle.value,id_cert:T.getElementsByTagName("child_bpki_ta")[0].childNodes[0].nodeValue.trim()}},x=()=>{w(""),i(!1),a(t.testbed.addChild.requestXML.placeholder),l(""),f(""),v("")};return y!==""?u.jsxs("div",{className:"testbed-result",children:[e&&u.jsx(fr,{notification:e}),u.jsx("pre",{children:y}),u.jsx("p",{children:u.jsx(la,{xml:y,name:"parent_response",setNotification:n})}),u.jsx("div",{className:"actions",children:u.jsx("button",{onClick:x,className:"button",children:t.testbed.addChild.registeranother})})]}):u.jsxs(u.Fragment,{children:[r&&u.jsx(ua,{onClose:()=>i(!1),onConfirm:m}),u.jsxs("form",{onSubmit:k,method:"POST",children:[e&&u.jsx(fr,{notification:e}),u.jsxs("div",{children:[u.jsxs("label",{children:[t.testbed.addChild.requestXML.label,u.jsx("a",{href:"https://tools.ietf.org/html/rfc8183#section-5.2.1",children:t.testbed.rfcdoclink})]}),u.jsx("textarea",{name:"request",value:s,placeholder:t.testbed.addChild.requestXML.placeholder,onChange:S=>a(S.target.value),required:!0})]}),u.jsxs("div",{children:[u.jsx("label",{children:t.testbed.addChild.asnresources.label}),u.jsx("input",{name:"asn",value:o,onChange:S=>l(S.target.value),placeholder:t.testbed.addChild.asnresources.placeholder})]}),u.jsxs("div",{children:[u.jsx("label",{children:t.testbed.addChild.ipv4resources.label}),u.jsx("input",{name:"v4",value:c,onChange:S=>f(S.target.value),placeholder:t.testbed.addChild.ipv4resources.placeholder})]}),u.jsxs("div",{children:[u.jsx("label",{children:t.testbed.addChild.ipv6resources.label}),u.jsx("input",{name:"v6",value:d,onChange:S=>v(S.target.value),placeholder:t.testbed.addChild.ipv6resources.placeholder})]}),u.jsx("button",{type:"submit",className:"button",children:t.testbed.addChild.confirm})]})]})}function w1(){const t=H(),[e,n]=P.useState(),[r,i]=P.useState(!1),[s,a]=P.useState(""),[o,l]=P.useState(""),c=async(g,k)=>{const m=await fetch("/testbed/publishers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({publisher_handle:g,id_cert:k,tag:null})});if(m.status===200)n({type:V.success,message:t.testbed.addPublisher.success.replace("{publisher_handle}",g)}),l(k0(await m.json()));else{const h=await m.json();h.label==="pub-duplicate"?await c(g+Date.now(),k):n({type:V.error,message:h.msg})}},f=g=>{const k=ym(g);return k?(n({type:V.error,message:t.testbed.errors.invalid_xml.replace("{err}",k)}),!1):g.getElementsByTagName("publisher_request").length===0?(n({type:V.error,message:t.testbed.errors.missing_xml_el.replace("{el}","publisher_request")}),!1):g.getElementsByTagName("publisher_bpki_ta").length===0?(n({type:V.error,message:t.testbed.errors.missing_xml_el.replace("{el}","publisher_bpki_ta")}),!1):g.getElementsByTagName("publisher_request")[0].attributes.publisher_handle?g.getElementsByTagName("publisher_bpki_ta")[0].childNodes.length===0?(n({type:V.error,message:t.testbed.errors.empty_xml_el.replace("{el}","publisher_bpki_ta")}),!1):g.getElementsByTagName("publisher_bpki_ta")[0].childNodes[0].nodeValue.trim().length===0?(n({type:V.error,message:t.testbed.errors.empty_xml_el.replace("{el}","publisher_bpki_ta")}),!1):!0:(n({type:V.error,message:t.testbed.errors.missing_xml_attr.replace("{attr}","publisher_handle").replace("{el}","publisher_request")}),!1)},d=g=>{const k=new window.DOMParser().parseFromString(g,"text/xml");if(f(k))return{publisher_handle:k.getElementsByTagName("publisher_request")[0].attributes.publisher_handle.value,id_cert:k.getElementsByTagName("publisher_bpki_ta")[0].childNodes[0].nodeValue.trim()}},v=async g=>{g.preventDefault(),d(s)&&i(!0)},y=async()=>{const g=d(s);g&&await c(g.publisher_handle,g.id_cert)},w=()=>{a(t.testbed.addPublisher.requestXML.placeholder),l(""),i(!1)};return o!==""?u.jsxs("div",{className:"testbed-result",children:[e&&u.jsx(fr,{notification:e}),u.jsx("pre",{children:o}),u.jsx("p",{children:u.jsx(la,{xml:o,name:"publisher_response",setNotification:n})}),u.jsx("div",{className:"actions",children:u.jsx("button",{onClick:w,className:"button",children:t.testbed.addPublisher.registeranother})})]}):u.jsxs(u.Fragment,{children:[r&&u.jsx(ua,{onClose:()=>i(!1),onConfirm:y}),u.jsxs("form",{onSubmit:v,method:"POST",children:[e&&u.jsx(fr,{notification:e}),u.jsxs("div",{children:[u.jsxs("label",{children:[t.testbed.addPublisher.requestXML.label,u.jsx("a",{href:"https://tools.ietf.org/html/rfc8183#section-5.2.3",children:t.testbed.rfcdoclink})]}),u.jsx("textarea",{name:"request",value:s,placeholder:t.testbed.addPublisher.requestXML.placeholder,onChange:g=>a(g.target.value),required:!0})]}),u.jsx("button",{type:"submit",className:"button",children:t.testbed.addPublisher.confirm})]})]})}function x1(){const t=H(),[e,n]=P.useState(),[r,i]=P.useState(!1),[s,a]=P.useState(""),o=async()=>{const f=await fetch(`/testbed/children/${s}`,{method:"DELETE"});if(f.status===200)n({type:V.success,message:t.testbed.removeChild.success.replace("{child_handle}",s)}),a("");else{const d=await f.json();n({type:V.error,message:d.msg})}},l=f=>{f.preventDefault(),i(!0)},c=async()=>{await o(),i(!1)};return u.jsxs(u.Fragment,{children:[r&&u.jsx(ua,{onClose:()=>i(!1),onConfirm:c}),u.jsxs("form",{onSubmit:l,method:"POST",children:[e&&u.jsx(fr,{notification:e}),u.jsxs("div",{children:[u.jsx("label",{children:t.testbed.childhandle}),u.jsx("input",{name:"handle",value:s,onChange:f=>a(f.target.value),placeholder:t.testbed.removeChild.placeholder,required:!0})]}),u.jsx("button",{type:"submit",className:"button",children:t.testbed.removeChild.confirm})]})]})}function S1(){const t=H(),[e,n]=P.useState(),[r,i]=P.useState(!1),[s,a]=P.useState(""),o=async()=>{const f=await fetch(`/testbed/publishers/${s}`,{method:"DELETE"});if(f.status===200)n({type:V.success,message:t.testbed.removePublisher.success.replace("{publisher_handle}",s)}),a("");else{const d=await f.json();n({type:V.error,message:d.msg})}},l=async f=>{f.preventDefault(),i(!0)},c=async()=>{await o(),i(!1)};return u.jsxs(u.Fragment,{children:[r&&u.jsx(ua,{onClose:()=>i(!1),onConfirm:c}),u.jsxs("form",{onSubmit:l,method:"POST",children:[e&&u.jsx(fr,{notification:e}),u.jsxs("div",{children:[u.jsx("label",{children:t.testbed.publisherhandle}),u.jsx("input",{name:"handle",value:s,onChange:f=>a(f.target.value),placeholder:t.testbed.removePublisher.placeholder,required:!0})]}),u.jsx("button",{type:"submit",className:"button",children:t.testbed.removePublisher.confirm})]})]})}const Tm="/assets/welcome-9fadc7f2.svg";function Zi({children:t}){const e=H();return u.jsx(Rn,{children:u.jsxs("div",{className:"testbed",children:[u.jsxs("div",{children:[u.jsx("img",{src:Tm,className:"hero",alt:e.common.copy}),u.jsx("h2",{children:e.testbed.welcome})]}),u.jsxs("div",{children:[u.jsx("h3",{children:e.testbed.disclaimer.heading}),u.jsx("p",{dangerouslySetInnerHTML:{__html:e.testbed.disclaimer.body}}),u.jsx("h3",{children:e.testbed.rpconfighelp.heading}),u.jsx("p",{dangerouslySetInnerHTML:{__html:e.testbed.rpconfighelp.body.replace("{tallink}","/ta/ta.tal")}}),u.jsx("h3",{children:e.testbed.regunreg.heading}),u.jsx("p",{dangerouslySetInnerHTML:{__html:e.testbed.regunreg.body}})]}),u.jsx("div",{children:u.jsxs("ul",{className:"tabs",children:[u.jsx("li",{children:u.jsx(yn,{routeName:"testbed",activeStrict:!0,children:e.testbed.addChild.heading})}),u.jsx("li",{children:u.jsx(yn,{routeName:"testbed.del_ca",children:e.testbed.removeChild.heading})}),u.jsx("li",{children:u.jsx(yn,{routeName:"testbed.add_pub",children:e.testbed.addPublisher.heading})}),u.jsx("li",{children:u.jsx(yn,{routeName:"testbed.del_pub",children:e.testbed.removePublisher.heading})})]})}),t]})})}function k1(){const{route:t}=He();return Ne().testBedEnabled?t.name=="testbed.del_ca"?u.jsx(Zi,{children:u.jsx(x1,{})}):t.name=="testbed.add_pub"?u.jsx(Zi,{children:u.jsx(w1,{})}):t.name=="testbed.del_pub"?u.jsx(Zi,{children:u.jsx(S1,{})}):u.jsx(Zi,{children:u.jsx(y1,{})}):u.jsx(Em,{})}function E1(){const t=ue(),[e,n]=P.useState(""),r=H(),i=s=>{s.preventDefault(),t({name:e})};return u.jsx(Rn,{children:u.jsxs("form",{method:"POST",onSubmit:i,className:"center-form",children:[u.jsxs("div",{children:[u.jsx("img",{src:Tm,alt:r.common.copy}),u.jsx("h2",{children:r.onboarding.welcome}),u.jsx("div",{dangerouslySetInnerHTML:{__html:r.onboarding.welcomeHtml}})]}),u.jsxs("div",{children:[u.jsxs("label",{htmlFor:"token required",children:["CA ",r.caDetails.handle]}),u.jsx("input",{name:"name",type:"test",value:e,onChange:s=>n(s.target.value),required:!0})]}),u.jsx("div",{children:u.jsx("button",{type:"submit",className:"button",children:r.onboarding.addCAForm.confirm})})]})})}function T1(){const{route:t}=He();return!t||t.name==="loading"?u.jsx(iu,{initial:!0}):t.name==="login"?u.jsx(g1,{}):t.name==="onboarding"?u.jsx(E1,{}):t.name.startsWith("cas.parents")?u.jsx(d1,{}):t.name.startsWith("cas.repository")?u.jsx(v1,{}):t.name.startsWith("cas")?u.jsx(i1,{}):t.name.startsWith("testbed")?u.jsx(k1,{}):u.jsx(Em,{})}/*! ***************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any diff --git a/ui/index.html b/ui/index.html index ca876a8f3..185a3c4e5 100644 --- a/ui/index.html +++ b/ui/index.html @@ -5,7 +5,7 @@ Krill-RPKI - +