diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1fa06373..edd2ae10 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,7 @@ jobs: - uses: actions/setup-node@v3 with: - node-version: 16.x + node-version: 18.x cache: npm - name: Install dependencies diff --git a/Changes b/Changes index 500b8ae9..b52d9aa9 100644 --- a/Changes +++ b/Changes @@ -1,6 +1,25 @@ Release history for Zonemaster component Zonemaster-GUI +v4.3.0 2024-07-01 (part of Zonemaster v2024.1 release) + + [Release information] + - Translations have not been fully updated in this release. They will + be updated in an upcoming release. + + [Features] + - Improves run test form (#461) + - Makes IDN names being displayed as both A-label and U-label (#464) + - Makes severity levels and module names in result page + optionally being translated (#463) + + [Fixes] + - Cleans up old FAQ architecture files (#466) + - Updates translation documentation (#462) + - Makes history modal close (#465) + - Avoid bundling the mock interceptor in prod environment (#448) + + v4.2.0 2024-03-18 (public release version) [Release information] diff --git a/docs/FAQ/gui-faq-da.md b/docs/FAQ/gui-faq-da.md deleted file mode 100755 index a5568fa6..00000000 --- a/docs/FAQ/gui-faq-da.md +++ /dev/null @@ -1,158 +0,0 @@ -Zonemaster -========== - -1. [Hvad er Zonemaster?](#q1) -2. [Hvem står bag Zonemaster?](#q2) -3. [Hvordan kan Zonemaster hjælpe mig?](#q3) -4. [Zonemaster rapporterer advarsler/fejl på mit domænenavn, hvad betyder det?](#q4) -5. [Hvordan kan Zonemaster skelne mellem, hvad der er rigtigt og forkert?](#q5) -6. [Understøtter Zonemaster IPv6?](#q6) -7. [Understøtter Zonemaster DNSSEC?](#q7) -8. [Hvad gør Zonemaster forkellig fra andre tilsvarende test-værktøjer?](#q8) -9. [Zonemaster og privatliv](#q9) -10. [Hvorfor kan jeg ikke teste mit domænenavn?](#q10) -11. [Hvilke typer af forespørgsler genererer Zonemaster?](#q11) -12. [Hvad er en "ikke-delegeret" test?](#q12) -13. [Hvordan tester jeg en "reverse" zone med Zonemaster?](#q13) - -Zonemaster ----------- -#### 1. Hvad er Zonemaster? -Zonemaster er et program designet til at hjælpe med at tjekke, måle -og forhåbentlig også forstå DNS (Domain Name System). - -Zonemaster består af tre grundlæggende moduler: - - 1. Motor (Koden der udfører alle DNS-tests), - 2. Kommandolinjeinterface (CLI), - 3. En server, der giver dig mulighed for at køre zonemaster-test og - gemme resultater ved hjælp af en JSON-RPC API, - 4. Webinterface. - -Når et domænenavn (som eksempelvis zonemaster.dk) afleveres til Zonemaster (CLI eller -Webinterface) vil Zonemaster undersøge domænenavnets generelle sundhed på baggrund af -en serie test. De forskellige sundhedstjek foretaget af Zonemaster er dokumenteret i -[Defined Test Cases]. - -#### 2. Hvem står bag Zonemaster? -Zonemaster er et fælles projekt mellem [AFNIC] (administrator af .fr samt mange andre TLD'er, -herunder .re, .pm, .tf, .yt og .paris) og [The Swedish Internet Foundation] (administrator af .se og .nu). - -#### 3. Hvordan kan Zonemaster hjælpe mig? -Zonemaster er orienteret mod to forskellige brugere: - - - Brugere som ved hvordan DNS fungerer. - - Brugere som gerne vil vide, om et givent domænenavn er konfigureret korrekt. - -Den anden kategori kan med fordel kontakte deres DNS-udbyder med spørgsmål til -testresultater, der ikke "lyser grønt" på egne domænenavne. - -#### 4. Zonemaster rapporterer advarsler/fejl på mit domænenavn, hvad betyder det? -Det kommer an på hvilke advarsler/fejl, der rapporteres. -Hver test er ledsaget af en eller flere meddelelser, der beskriver de fundne problemer. -Du kan også få yderligere indsigt om hver test fra dokumentet [Defined Test Cases] - -#### 5. Hvordan kan Zonemaster skelne mellem, hvad der er rigtigt og forkert? -Zonemasters vurdering er primært baseret på DNS-standarderne som defineret i [RFCs]. -Den baserer også sin vurdering på DNS best practices, som kan defineres mere løst. -Alle Zonemaster-tests er defineret i [Test Case Specifications][Defined Test Cases] -hvori referencerne til standarddokumenterne for den pågældende testcase findes. - -Beskrivelserne af meddelelsesniveauer såsom *notice*, *warning* og *error* findes -i [Severity Level Definitions]. - -Nogle gange er der forskellige fortolkninger af standarderne eller meninger om, hvad der er bedste praksis, -og Zonemaster-teamet er altid åbent for input. -Hvis du mener, at vi har lavet en fejl i vores vurdering, så tøv ikke med at sende os en e-mail -på [zonemaster-users@lists.iis.se] (modereret mailingliste) med et link til dit testresultat -og en forklaring på, hvorfor du mener, det viser noget, som du anser for forkert. - -#### 6. Understøtter Zonemaster IPv6? -Ja. Som udgangspunkt vil Zonemaster forespørge navneservere over IPv4 og IPv6, medmindre andet -er konfigureret under "Valgmuligheder". - -#### 7. Understøtter Zonemaster DNSSEC? -Ja. Hvis DNSSEC er tilgængeligt på et domænenavn, vil det automtisk blive testet. - -#### 8. Hvad gør Zonemaster forkellig fra andre tilsvarende test-værktøjer? -For det første gemmer Zonemaster al historik fra tidligere test baseret på de testede -domænenavn, hvilket betyder, at du kan gå tilbage til en test, du lavede for noget tid siden, og sammenligne den -til den test, du kørte for et øjeblik siden. - -For det andet er alle test, som Zonemaster kører, defineret i Test Case specifikationer -kan findes i dokumentet [Defined Test Cases]. - -For det tredje kan Zonemaster bruges til at teste ikke-delegerede domænenavne. -Se [spørgsmål 12]. - -For det fjerde kan Zonemaster bruges til at teste DS-records, før de offentliggøres i den overordnede zone -(som er påkrævet for at aktivere DNSSEC for en signeret zone). -Se [spørgsmål 13]. - -Endelig blev denne open source-version af Zonemaster bygget ved hjælp af modulær kode -hvilket i bund og grund betyder, at du kan integrere dele af det i dine egne systemer, hvis du ønsker det. -For eksempel er det ret sjældent, at du vil have et komplet program bare for at tjekke efter -redelegationer. - -#### 9. Zonemaster og privatliv -Da [Zonemaster.net] er åbent for alle, er det muligt for alle at tjekke dit -domæne og dets testhistorie. -Der er dog ingen måde at sige, hvem der har kørt en specifik test, da intet andet end testen -parametre og resultater gemmes. -Konkret gemmes ingen cookies eller oplysninger om brugerens IP-adresse i databasen. -Den bruger, der påbegyndte testen, kan ikke spores tilbage fra oplysningerne i databasen. - -#### 10. Hvorfor kan jeg ikke teste mit domænenavn? -Der er flere muligheder: - -- Dit domænenavn er endnu ikke delegeret. -- Dit domænenavn er ikke tilgængeligt fra det offentlige internet. -- Zonemaster kan kun teste det, der kaldes en DNS-zone (f.eks. 'zonemaster.net') og ikke hostnavne (f.eks. 'www.zonemaster.net') -- Der er 10 minutters beskyttelse mellem på hinanden følgende tests for et givet domænenavn (med samme testparametre). - Kørsel af en test i det vindue vil i stedet vise den sidste tilgængelige test for det pågældende domænenavn (og parametre). -- Du har stavet dit domænenavn forkert. - -#### 11. Hvilke typer af forespørgsler genererer Zonemaster? -Zonemaster sender flere DNS-forespørgsler til de navneservere, der hoster domænenavnet, der testes og -også til de navneservere, der er vært for det pågældende domænenavns overordnede zone. - -Zonemasters GUI-grænseflade viser ingen sendte forespørgsler, det kan kun CLI-grænsefladen. -Hvis du vil se sådanne forespørgsler, skal du installere lokalt -en minimalt fungerende Zonemaster-instans med både Engine- og CLI-komponenterne (et Docker-image er også tilgængeligt). -Sendte forespørgsler kan vises ved at bruge indstillingen 'DEBUG' niveau. -Advarsel: Output fra CLI kan være ret omfattende. -For mere information se [Using The CLI]. - - -#### 12. Hvad er en "ikke-delegeret" test? -En "ikke-delegeret" test af et domænenavn betyder, at testen udføres på et -domænenavn, der måske eller måske ikke er offentliggjort i DNS. Dette kan være -ganske nyttigt, såfremt man ønsker at udskifte navneservere bag et domænenavn -(redelegering af domænenavnet), og ønsker at teste opsætningen af den nye zone -inden redelegering. Såfremt Zonemasters testresultat er "grønt", er der stor -sandsynlighed for, at de nye navneservere er konfigureret korrekt, og en -redelegering vil kunne udføres med succes. - -#### 13. Kan jeg test DS-records før de offentliggøres?? -Ja. -Brug knappen "Valgmuligheder", og tilføj de DS-records, der skal testes. -Zonemaster vil derefter bruge dem på samme måde, som hvis de allerede var tilføjet i den overordnede zone. - -#### 14. Hvordan tester jeg en "reverse" zone med Zonemaster? -For at kontrollere en "reverse" zone med Zonemaster, skal man først vide, -hvad en "reverse" zone er. Hvis du vil kontrollere en "reverse" zone, -skal du indtaste den i det format, den har i DNS, f.eks.: - - - 3.2.1.in-addr.arpa - - 6.0.1.0.0.2.ip6.arpa - -[AFNIC]: https://www.afnic.fr/en/ -[Defined Test Cases]: https://github.com/zonemaster/zonemaster/tree/master/docs/public/specifications/tests#list-of-defined-test-cases -[spørgsmål 12]: #q12 -[spørgsmål 13]: #q13 -[RFCs]: https://www.ietf.org/standards/rfcs/ -[Severity Level Definitions]: https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/tests/SeverityLevelDefinitions.md -[The Swedish Internet Foundation]: https://internetstiftelsen.se/en/ -[Using The CLI]: https://github.com/zonemaster/zonemaster/blob/master/docs/public/using/cli.md -[Zonemaster.net]: https://zonemaster.net/ -[zonemaster-users@lists.iis.se]: mailto:zonemaster-users@lists.iis.se diff --git a/docs/FAQ/gui-faq-en.md b/docs/FAQ/gui-faq-en.md deleted file mode 100755 index c9e005a5..00000000 --- a/docs/FAQ/gui-faq-en.md +++ /dev/null @@ -1,169 +0,0 @@ -Zonemaster -========== - -1. [What is Zonemaster?](#q1) -2. [Who is behind Zonemaster?](#q2) -3. [How can Zonemaster help me?](#q3) -4. [Zonemaster returns "Error" or "Warning" on my domain name. What does it mean?](#q4) -5. [How can Zonemaster distinguish between what is right and wrong?](#q5) -6. [Does Zonemaster support IPv6?](#q6) -7. [Does Zonemaster verify DNSSEC?](#q7) -8. [What makes Zonemaster differ from other DNS zone validating software?](#q8) -9. [Zonemaster and privacy](#q9) -10. [How come my domain name cannot be tested?](#q10) -11. [What kind of queries does Zonemaster generate?](#q11) -12. [What is an undelegated domain test?](#q12) -13. [Can I test the DS records before they are published?](#q13) -14. [How can I test a reverse zone with Zonemaster?](#q14) - -Zonemaster ----------- - -#### 1. What is Zonemaster? -Zonemaster is a program designed to help people check, measure and -hopefully also understand how the DNS (Domain Name System) works. - -It consists of several components: - - 1. Engine - a test framework that supports all functionality to perform DNS tests. - 2. CLI - a command-line interface to the Engine. - 3. Backend - a server that allows you to run Zonemaster tests and save results using - a JSON-RPC API and a database. - 4. GUI - a web interface to the Backend. - -When a domain name (such as 'zonemaster.net') is submitted to Zonemaster (using CLI or -GUI), it will verify the domain name’s general health with a series of tests. -The tests conducted by Zonemaster can be found in the [Defined Test Cases] document. - -#### 2. Who is behind Zonemaster? -Zonemaster is a joint project between [AFNIC] (registry of '.fr' TLD and several other -TLDs, e.g. '.re', '.pm', '.tf', '.wf', '.yt' and '.paris') and [The Swedish Internet Foundation] -(registry of '.se' and '.nu' TLDs). - -#### 3. How can Zonemaster help me? -The Zonemaster tool is oriented towards two user categories: - - - Users who are knowledgable about the DNS protocol. - - Users who just want to know whether the domain name they own or use - have any issues or not. - -Users of the second category should contact their DNS operator -in case there are errors or warnings for any test of their domain name. - -#### 4. Zonemaster returns "Error" or "Warning" for my domain name. What does it mean? -It depends on which test failed for your domain name. -Each test are accompanied with one or several messages describing the issues found. -You can also get further insight about each test from the [Defined Test Cases] document. - -#### 5. How can Zonemaster distinguish between what is right and wrong? -The judgement of Zonemaster is primarily based on the DNS standards as defined in [RFCs]. -It also bases its judgement on DNS best practices, which can be more loosely defined. -All Zonemaster tests are defined in [Test Case Specifications][Defined Test Cases] -in which the references to the standard documents for that test case are found. - -The descriptions of message levels such as *notice*, *warning* and *error* are found -in [Severity Level Definitions]. - -Sometimes there are different interpretations of the standards or opinions on what is best practice, -and the Zonemaster team is always open to input. -If you think we have made a mistake in our judgement please do not hesitate to send us an email -at [zonemaster-users@lists.iis.se] (moderated mailing list) with a link to your test result -and an explanation as to why you think it shows something that you consider incorrect. - -#### 6. Does Zonemaster support IPv6? -Yes. -By default Zonemaster will query name servers both over IPv4 and IPv6, unless explicitly -configured otherwise. -Such configuration is accessible through the "Options" button. - -#### 7. Does Zonemaster verify DNSSEC? -Yes. -If DNSSEC is available for a domain name that is tested by Zonemaster, it will be -checked automatically. - -#### 8. What makes Zonemaster differ from other DNS zone validating software? -Firstly, Zonemaster saves all history from earlier tests based on the tested -domain name, which means you can go back to a test you did some time ago and compare it -to the test you ran just a moment ago. - -Secondly, all tests that Zonemaster runs are defined in Test Case specifications that -can be found in the [Defined Test Cases] document. - -Thirdly, Zonemaster can be used to test undelegated domain names. -See [Question 12]. - -Fourthly, Zonemaster can be used to test DS records before their publication in the parent zone -(which is required to enable DNSSEC for a signed zone). -See [Question 13]. - -Lastly, this open source version of Zonemaster was built using modular code -which basically means that you can integrate parts of it in your own systems, if you wish. -For example, it is quite rare that you would want a complete program just to check for -redelegations. - -#### 9. Zonemaster and privacy -Since [Zonemaster.net] is open to everyone it is possible for anyone to check your -domain and its history of tests. -However there is no way to tell who has run a specific test since nothing more than the test -parameters and results are stored. -Specifically, no cookies or information on the user's IP address is stored in the database. -The user who initiated the test cannot be traced back from the information in the database. - -#### 10. How come my domain name cannot be tested? -There are several possibilities: - -- Your domain name is not yet delegated. -- Your domain name is not reachable from public Internet. -- Zonemaster can only test what is called a DNS zone (e.g. 'zonemaster.net') and not host names (e.g. 'www.zonemaster.net') -- There is a 10 minutes protection between consecutive tests for a given domain name (with same test parameters). - Running a test within that window will instead show the last available test for that domain name (and parameters). -- You have misspelled your domain name. - -#### 11. What kind of queries does Zonemaster generate? -Zonemaster send multiple DNS queries to the name servers hosting the domain name being tested and -also to the name servers hosting the parent zone of that domain name. - -The GUI interface of Zonemaster does not show any queries sent, only the CLI interface can. -If you want to see such queries, you will have to locally install -a minimally working Zonemaster instance with both the Engine and CLI components (a Docker image is also available). -Queries sent can be shown using the 'DEBUG' level option. -Fair warning, the output from the CLI can be quite heavy. -For more information see [Using The CLI]. - -#### 12. What is an undelegated domain test? -An undelegated domain test is a test performed on a domain name that may, or may not, -be fully published in the DNS. -This can be quite useful if one is going to migrate one's domain from one registrar to another, -e.g., migrate zone 'example.com' from the name server 'ns.example.com' to the name server 'ns.example.org'. -In this scenario one could perform an undelegated domain test providing the zone ('example.com') -and the name server you are migrating to ('ns.example.org') *before* you migrate your domain. -When the results of the test doesn't show any errors or warnings one can be fairly certain that the -domain's new location is working well. -However there might still be other problems in the zone data itself that this test is unaware of. - -#### 13. Can I test the DS records before they are published? -Yes. -Use the "Options" button and there add the Delegation Signer (DS) records to be tested. -Zonemaster will then use those in the same way as if they were already added in the parent zone. - -#### 14. How can I test a "reverse" zone with Zonemaster? -To check a reverse zone with Zonemaster, one first needs to know what the -reverse zone is, and enter it in the format it has in the DNS. -A reserve zone is obtained by reversing an IP address and adding a suffix. -IPv4 addresses use the suffix "in-addr.arpa" while IPv6 addresses -use "ip6.arpa". - -Examples: - - For IPv4 prefix '198.51.100.0/24': 100.51.198.in-addr.arpa - - For IPv6 prefix '2001:db8::/32': 8.b.d.0.1.0.0.2.ip6.arpa - -[AFNIC]: https://www.afnic.fr/en/ -[Defined Test Cases]: https://github.com/zonemaster/zonemaster/tree/master/docs/public/specifications/tests#list-of-defined-test-cases -[Question 12]: #q12 -[Question 13]: #q13 -[RFCs]: https://www.ietf.org/standards/rfcs/ -[Severity Level Definitions]: https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/tests/SeverityLevelDefinitions.md -[The Swedish Internet Foundation]: https://internetstiftelsen.se/en/ -[Using The CLI]: https://github.com/zonemaster/zonemaster/blob/master/docs/public/using/cli.md -[Zonemaster.net]: https://zonemaster.net/ -[zonemaster-users@lists.iis.se]: mailto:zonemaster-users@lists.iis.se diff --git a/docs/FAQ/gui-faq-es.md b/docs/FAQ/gui-faq-es.md deleted file mode 100755 index 12f6600e..00000000 --- a/docs/FAQ/gui-faq-es.md +++ /dev/null @@ -1,200 +0,0 @@ -Zonemaster -========== - -1. [¿Qué es Zonemaster?](#q1) -2. [¿Quién está detrás de Zonemaster?](#q2) -3. [¿Cómo me puede ayudar Zonemaster?](#q3) -4. [Zonemaster indica "Error" o "Advertencia" en mi nombre de dominio. ¿Qué significa?](#q4) -5. [¿Cómo puede Zonemaster distinguir entre qué está bien y qué está mal?](#q5) -6. [¿Zonemaster soporta IPv6?](#q6) -7. [¿Zonemaster verifica DNSSEC?](#q7) -8. [¿Qué hace distinto a Zonemaster de otros software de validación DNS?](#q8) -9. [Zonemaster y privacidad](#q9) -10. [¿Por qué no puedo probar mi nombre de dominio?](#q10) -11. [¿Qué tipo de consultas genera Zonemaster?](#q11) -12. [¿Qué es una prueba de dominio no-delegado?](#q12) -13. [¿Puedo probar los registros DS antes de ser publicados?](#q13) -14. [¿Cómo puedo probar una zona reversa con Zonemaster?](#q14) - -Zonemaster ----------- - -#### 1. ¿Qué es Zonemaster? -Zonemaster es un programa diseñado para ayudar a la gente a revisar, -medir y ojalá también entender cómo funciona el DNS (Sistema de Nombres de -Dominio). - -Consiste de varios componentes: - - 1. "Engine" (Motor) - una arquitectura de pruebas que soporta toda la funcionalidad para realizar pruebas DNS. - 2. "CLI" - una interfaz de línea de comandos hacia el Engine. - 3. "Backend" - un servidor interno que permite ejecutar las pruebas de Zonemaster y guardar los resultados, usando una API JSON-RPC y una base de datos. - 4. GUI - una interfaz web hacia el Backend. - -Cuando un nombre de dominio (tal como "zonemaster.net") es enviado a Zonemaster (usando la CLI o -GUI), este verificará el estado de salud general del nombre de dominio con -una serie de pruebas. -Las distintas pruebas realizadas por Zonemaster están documentadas en el -documento de [Definición de Casos de Pruebas] (en inglés). - -#### 2. ¿Quién está detrás de Zonemaster? -Zonemaster es un proyecto conjunto entre [AFNIC] -(registro para el TLD .fr y varios otros, por ejemplo -.re, .pm, .tf, .wf, .yt y .paris) y -[The Swedish Internet Foundation] -(registro de los TLDs .se y .nu). - -#### 3. ¿Cómo me puede ayudar Zonemaster? -La herramienta Zonemaster está orientada a dos categorías de usuarios: - - - Usuarios que entienden bien el protocolo DNS. - - Usuarios que solo quieren saber si el nombre de dominio que poseen o usan tiene algún problema. - -Los usuarios de la segunda categoría deberían contactar a sus operadores -DNS tan pronto obtengan resultados distintos a "verde" en cualquiera -de las pruebas sobre sus nombres de dominio. - -#### 4. Zonemaster indica "Error" o "Advertencia" en mi dominio. ¿Qué significa? -Depende cuáles de las pruebas fallaron en su dominio. Cada prueba está -acompañada por uno o más mensajes que describen los problemas encontrados. -También puede encontrar más detalles de cada prueba en el documento de -[Definición de Casos de Pruebas] (en inglés). - -#### 5. ¿Cómo puede juzgar Zonemaster qué está bien y qué está mal? -El criterio de Zonemaster se basa principalmente en los estándares -DNS definidos en los [RFCs]. También basa su criterio en las mejores -prácticas del DNS, que pueden ser definiciones un poco más vagas. -Todas las pruebas de Zonemaster están definidas en el -[Documento de Requerimientos de Pruebas] y [Definición de Casos de Pruebas] -(ambos en inglés), donde se encuentran las referencias a los documentos -de estándar relevantes para cada caso. - -Las descripciones de los niveles de mensaje, como *información*, *advertencia* -y *error* se encuentran en [Definiciones de Nivel de Gravedad] (en inglés). - -A veces hay distintas interpretaciones de los estándares, u opiniones -de lo que es una buena práctica, y el equipo de Zonemaster siempre -está abierto a sugerencias. Si crees que hemos cometido un error de -criterio, por favor no dudes en enviarnos un email a -[zonemaster-users@lists.iis.se] (lista de correo moderada) con un enlace -al resultado de tu prueba y una explicación por qué crees que muestra -algo que consideres incorrecto. - - -#### 6. ¿Zonemaster soporta IPv6? -Sí. -Por defecto Zonemaster consultará a los servidores de nombre usando -IPv4 e IPv6, a menos que sea configurado explícitamente de otra forma. -Esta configuración se encuentra en el botón "Opciones". - -#### 7. ¿Zonemaster verifica DNSSEC? -Sí. -En caso que un nombre de dominio que esté en prueba por Zonemaster tenga -soporte DNSSEC, será revisado automáticamente. - -#### 8. ¿Qué hace distinto a Zonemaster de otros software de validación DNS? -Primero que todo, Zonemaster guarda toda la historia de pruebas anteriores -basadas en el nombre del dominio probado, de tal forma que puedes ir hacia atrás -a una prueba que hiciste hace un tiempo, y compararla con la prueba -que acabas de hacer hace unos momentos. - -En segundo lugar, todas las pruebas que ejecuta Zonemaster son definidas en Especificaciones -de Casos de Prueba que están enlazadas desde el documento -[Definición de Casos de Pruebas] (en inglés). - -En tercer lugar, Zonemaster puede ser utilizado para probar dominios no-delegados. Más -información sobre dominios no-delegados en la [Pregunta 12]. - -En cuarto lugar, Zonemaster puede usarse para probar registros DS antes -de ser publicados en la zona padre (lo que es necesario para habilitar -DNSSEC en una zona firmada). Ver la [Pregunta 13]. - -Por último, esta versión de código abierto de Zonemaster fue construida -usando código modular, lo que básicamente significa que puedes integrar -partes del software en tus propios sistemas, si así lo quisieras. -Por ejemplo, es muy raro que quieras instalar un programa completo para -sólo probar redelegaciones. - -#### 9. Zonemaster y privacidad -Dado que [Zonemaster.net] es abierto a todos, es posible que cualquiera pueda -probar tu dominio y ver la historia de pruebas anteriores. Sin embargo, no hay -forma de saber quién ejecutó una prueba en específico, ya que solo se -almacena los parámetros de la prueba y sus resultados. -En específico, no se almacenan ni las cookies ni la dirección IP del -usuario. El usuario que inició la prueba no puede ser rastreado usando -la información de la base de datos. - -#### 10. ¿Por qué no puedo probar mi nombre de dominio? -Puede haber varias posibilidades: - -- Su nombre de dominio aún no está delegado. -- Su nombre de dominio no es alcanzable desde la Internet pública. -- Zonemaster solo puede probar una zona DNS (por ej. 'zonemaster.net') -y no nombres de host (por ej. 'www.zonemaster.net'). -- Existe una protección de 10 minutos entre pruebas consecutivas por -un nombre de dominio determinado (con los mismos parámetros de pruebas). -Al ejecutar una prueba dentro de esa ventana de tiempo, se mostrará -el último resultado que se se obtuvo para ese nombre de dominio (con -los mismos parámetros). -- Ha escrito mal su nombre de dominio. - -#### 11. ¿Qué tipo de consultas genera Zonemaster? -Zonemaster envía múltiples consultas DNS a los servidores de nombre que -hospedan al nombre de dominio que se está probando, y también a los -servidores de nombre que hospedan la zona padre del nombre de dominio. - -La interfaz gráfica (GUI) de Zonemaster no muestra ninguna de las -consultas que envía, solo la interfaz CLI lo puede hacer. Si quiere -ver esas consultas, deberá instalar localmente una instancia con -funcionamiento mínimo de los componentes Engine y CLI (hay una imagen -Docker disponible). Las consultas enviadas pueden mostrarse usando -la opción de nivel 'DEBUG'. Le advertimos que la salida del CLI -puede ser bastante compleja. Para más información ver [Usando la CLI] -(en inglés). - -#### 12. ¿Qué es una prueba de dominio no-delegado?] -Una prueba de dominio no-delegado es una prueba ejecutada sobre un nombre -de dominio que puede o no estar completamente publicado en el DNS. -Esto es muy útil -cuando uno quiere mover un nombre de dominio desde un registrador a otro, -por ejemplo al mover la zona example.com desde el servidor de nombres -"ns.example.com" al servidor "ns.example.org". En este escenario, uno -podría ejecutar una prueba de dominio no-delegado indicando la zona -(example.com) y el servidor de nombres futuro al cual va a mover el -dominio (ns.example.org) *antes* de que muevas el dominio. Cuando obtenga -los resultados de las pruebas en verde, uno puede estar suficientemente -seguro que la nueva ubicación del dominio está funcionando correctamente. -Sin embargo, puede haber otros problemas en los datos de la zona en -sí misma, que esta prueba ignora. - -#### 13. ¿Puedo probar los registros DS antes de ser publicados? -Sí. -Puede utilizar el botón "Opciones" y agregar ahí los registros -"Delegation Signer" (DS) que quiera probar. Zonemaster los usará -de la misma forma que si hubieran sido obtenidos desde la zona -padre. - -#### 14. ¿Cómo puedo probar una zona reversa con Zonemaster? -Para revisar una zona "reversa" (también llamada "inversa") con Zonemaster, -lo primero que necesitas es saber qué zona reversa es, e ingresarla en -el formato que tiene en el DNS. -Una zona reversa se obtiene dando vuelta una dirección IP y agregándole -un sufijo. Las direcciones IPv4 usan el sufijo "in-addr.arpa", mientras -que las direcciones IPv6 usan "ip6.arpa". - -Ejemplos: - - Para el prefijo IPv4 '198.51.100.0/24': 100.51.198.in-addr.arpa - - Para el prefijo IPv6 '2001:db8::/32': 8.b.d.0.1.0.0.2.ip6.arpa - - -[AFNIC]: https://www.afnic.fr/en/ -[Documento de Requerimientos de Pruebas]: https://github.com/zonemaster/zonemaster/tree/master/docs/public/specifications/tests#list-of-defined-test-cases -[Definición de Casos de Pruebas]: https://github.com/zonemaster/zonemaster/tree/master/docs/public/specifications/tests#list-of-defined-test-cases -[Pregunta 12]: #q12 -[Pregunta 13]: #q13 -[RFCs]: https://www.ietf.org/standards/rfcs/ -[Definiciones de Nivel de Gravedad]: https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/tests/SeverityLevelDefinitions.md -[The Swedish Internet Foundation]: https://internetstiftelsen.se/en/ -[Usando La CLI]: https://github.com/zonemaster/zonemaster/blob/master/docs/public/using/cli.md -[Zonemaster.net]: https://zonemaster.net/ -[zonemaster-users@lists.iis.se]: mailto:zonemaster-users@lists.iis.se diff --git a/docs/FAQ/gui-faq-fi.md b/docs/FAQ/gui-faq-fi.md deleted file mode 100644 index 255e3c4f..00000000 --- a/docs/FAQ/gui-faq-fi.md +++ /dev/null @@ -1,126 +0,0 @@ -Zonemaster -========== - -1. [Mikä Zonemaster on?](#q1) -2. [Kuka on Zonemasterin takana?](#q2) -3. [Mitä hyötyä Zonemasterista on minulle?](#q3) -4. [Zonemaster näyttää virheilmoitusta tai varoitusta, kun testaan verkkotunnustani. Mitä se tarkoittaa?](#q4) -5. [Miten Zonemaster selvittää, mikä on oikein ja mikä väärin määritetty?](#q5) -6. [Pystyykö Zonemaster käsittelemään IPv6:ta?](#q6) -7. [Pystyykö Zonemaster käsittelemään DNSSEC:iä?](#q7) -8. [Miten Zonemaster eroaa muista verkkotunnusten toimintaa testaavista ohjelmista?](#q8) -9. [Zonemaster ja yksityisyys](#q9) -10. [Miksi en voi testata verkkotunnustani?](#q10) -11. [Millaisia DNS kyselyitä Zonemaster generoi?](#q11) -12. [Mikä on delegoimattoman verkkotunnuksen testi?](#q12) -13. [Voinko testata DS-tietueet ennen niiden julkaisua?](#q13) -14. [Kuinka voin testata "käänteistä" (reverse) nimipalvelua Zonemasterilla?](#q14) - -Zonemaster ----------- - -#### 1. Mikä Zonemaster on? - -Zonemaster on ohjelma, jonka tarkoitus on auttaa ihmisiä hallitsemaan ja mittaamaan DNS:ää (domain name system) ja toivottavasti myös ymmärtämään paremmin, miten se toimii. Zonemasteriin kuuluu kolme osaa: - -1. "Engine" – testimoottori, jolla suoritetaan kaikki DNS-testit. -2. "CLI" – testimoottorin komentorajapinta. -3. "Backend" – palvelu, jonka avulla voit tehdä Zonemaster-testejä ja tallentaa tulokset JSON-RPC API:lla ja tietokannalla. -4. GUI - "Backendin" ja testimoottorin verkkorajapinta, graafinen käyttöliittymä. - -Kun verkkotunnus lähetetään Zonemasteriin, ohjelma tutkii verkkotunnuksen kunnon käymällä DNS:n läpi juuresta (.) ylätason verkkotunnukseen (esimerkiksi .NET) ja lopuksi DNS-palvelimiin, joissa on toisen asteen verkkotunnuksia (esimerkiksi zonemaster.net) koskeva informaatio. Zonemaster suorittaa myös muita testejä. Ne on kaikki dokumentoitu täällä: [Test Requirements document] - -#### 2. Kuka on Zonemasterin takana? - -Zonemaster on yhteistyöprojekti, jonka takana ovat [Internetstiftelsen] (ylätason verkkotunnusten .se ja .nu hallinnoija) ja [AFNIC] (ylätason verkkotunnuksen .fr sekä muiden ylätason verkkotunnusten kuten .re, .pm, .tf, .wf, .yt ja .paris hallinnoija). - -#### 3. Mitä hyötyä Zonemasterista on minulle? - -Zonemaster on kehitetty kahdenlaisia käyttäjiä varten: - - - DNS-taitoiset käyttäjät. - - Käyttäjät, joiden tarvitsee vain tietää, onko heidän omistamissaan verkkotunnuksissa ongelmia vai ei. - -Jälkimmäiseen ryhmään kuuluvien käyttäjien tulee kääntyä DNS-operaattorin puoleen, jos testissä jokin tulos ei näytä vihreää valoa. - -#### 4. Zonemaster näyttää virheilmoitusta tai varoitusta, kun testaan verkkotunnustani. Mitä se tarkoittaa? - -Riippuu siitä, mikä testi on kyseessä. Jokaiseen testiin liittyy yksi tai useampi viesti, jossa kuvataan löydetyt ongelmat. -Voit myös saada lisätietoa jokaisesta testistä [Määritetyt testitapaukset][Defined Test Cases]-dokumentista. - -#### 5. Miten Zonemaster selvittää, mikä on oikein ja mikä väärin määritetty? - -Kukaan ei voi antaa lopullista, kaikenkattavaa lausuntoa verkkotunnuksen kunnosta. Tämä on tärkeää pitää mielessä. Me Zonemasterin kehittäjät emme väitä, että Zonemaster on aina oikeassa. Joistakin asioista on olemassa erilaisia mielipiteitä varsinkin eri maissa mutta joskus myös paikallisella tasolla. Yhteistyöprojektissamme olemme pyrkineet yhdessä parhaamme mukaan kehittämään profiilin, jonka avulla erilaisia virheitä voidaan arvioida mahdollisimman tehokkaasti, ennen kuin työkalu esittää ne käyttäjälle. -Käyttäjänä voit helposti luoda oman profiilin, jonka avulla voit arvioida tiettyjen virheiden vakavuutta. Oman profiilin voi osoittaa suoraan CLI-työkalulla. -Koska DNS kuitenkin kehittyy koko ajan, tilanteet, jotka ovat normaaleja nyt, saattavat olla tulevaisuudessa vakavia virheitä. Jos uskot löytäneesi jotakin, jonka olemme arvioineet väärin, ota epäröimättä yhteyttä osoitteeseen [zonemaster-users@lists.iis.se] (moderated mailing list) ja lähetä linkki testiisi ja selitys siitä, miksi tulos ei ole mielestäsi oikein. - -#### 6. Pystyykö Zonemaster käsittelemään IPv6:ta? - -Pystyy. Kaikki IPv4:llä tehtävät testit voidaan tehdä myös IPv6:lla, ellei IPv6:tta ole erikseen kytketty pois käytöstä. - -#### 7. Pystyykö Zonemaster käsittelemään DNSSEC:iä? - -Pystyy. Jos Zonemasterilla testattavalla verkkotunnuksella on käytössä DNSSEC, se testataan automaattisesti. - -#### 8. Miten Zonemaster eroaa muista verkkotunnusten toimintaa testaavista ohjelmista? - -Ensinnäkin Zonemaster tallentaa kaikki testitapahtumat. Niinpä voit palata katsomaan viikko sitten tekemäsi edellisen testin tuloksia ja verrata niitä uusimpiin. - -Kaikki Zonemasterin tekemät testit määritellään testitapausspesifikaatioissa, joihin on linkki asiakirjassa "[Test Requirements document]". -Zonemasterilla voi testata myös julkaisemattomia/delegoimattomia verkkotunnuksia (aiheesta enemmän [kysymyksessä 12][Question 12]). - -Lisäksi Zonemaster on avoimen lähdekoodin ohjelma, ja sen rakenne on modulaarinen. Voit siis halutessasi ottaa koko koodin tai osia siitä käyttöösi omissa järjestelmissäsi. - -#### 9. Zonemaster ja yksityisyys - -Koska Zonemaster on kaikkien käytössä, kuka tahansa voi myös tarkastaa verkkotunnuksesi ja myös nähdä verkkotunnuksesi testihistorian. Testien tekijää ei kuitenkaan ole mahdollista selvittää, sillä ainoa kirjattava tieto on testin ajankohta. -Tietokantaan ei tallenneta evästeitä tai tietoja käyttäjän IP-osoitteesta. - -#### 10. Miksi en voi testata verkkotunnustani? - -On useita mahdollisia syitä siihen ettei verkkotunnusta voi testata: - -- Kaikista yleisin syy on se että olet kirjoittanut verkkotunnuksen väärin. -- Verkkotunnustasi ei ole vielä delegoitu, verkkotunnus ei esimerkiksi löydy vielä fi-juuresta. -- Verkkotunnuksesi ei ole tavoitettavissa julkisesta Internetistä. -- Samaa verkkotunnusta ei voi testata useita kertoja yhtä aikaa samasta IP-osoitteesta, joten identtisten testien välillä on oltava vähintään viiden minuutin tauko. Niinpä et voi testata verkkotunnusta useammin kuin viiden minuutin välein. Jos testaat verkkotunnuksen uudelleen ennen kuin viisi minuuttia on kulunut, näytetään viimeisin tallennettu tulos. -- Koska Zonemaster on tarkoitettu testaamaan verkkotunnuksia merkityksessä DNS:n verkkoalue (esim. zonemaster.net) eikä verkkoalueiden isäntänimiä (esim. [www.zonemaster.net]), se antaa virheilmoituksen, jos yrität testata tunnusta, joka ei vastaa DNS:n verkkoaluetta. - -#### 11. Millaisia DNS-kyselyitä Zonemaster generoi? - -Zonemaster lähettää useita DNS-kyselyitä verkkotunnuksen nimipalvelimille sekä juurinimipalvelimille. - -Zonemasterin graafinen käyttöliittymä ei näytä lähetettyjä kyselyjä, vain CLI rajapinta voi näyttää lähetetyt kyselyt. -Jos haluat nähdä tällaisia kyselyitä, sinun on asennettava paikallisesti toimiva minimaalinen Zonemaster-instanssi, jossa on sekä Engine- että CLI-komponentit (saatavilla on myös Docker image). -Lähetetyt kyselyt voidaan näyttää käyttämällä 'DEBUG'-tason vaihtoehtoa. Varoituksena, tulokset voivat olla aika raskaita. Lisätietoja on kohdassa [CLI:n käyttäminen]. -Tätä vaihtoehtoa voi suositella vain teknisesti edistyneille käyttäjille. - -#### 12. Mikä on delegoimattoman verkkotunnuksen testi? - -Delegoimaton verkkotunnustesti tehdään verkkotunnukselle, jota ei tarvitse välttämättä olla julkaistu DNS:ssä. Se voi olla varsin hyödyllistä, jos aiot siirtää verkkotunnuksesi verkkotunnusvälittäjältä toiselle. -Jos esimerkiksi verkkotunnus esimerkki.se aiotaan siirtää nimipalvelimelta 'ns.nic.se' nimipalvelimelle 'ns.iis.se', voit tehdä verkkotunnukselle (esimerkki.se) delegoimattoman -verkkotunnustestin sillä nimipalvelimella, johon aiot siirtää sen (ns.iis.se), ennen kuin toteutat siirron. Jos testi näyttää vihreää valoa, voit olla melko varma siitä, että verkkotunnuksesi uudessa -kodissa on kaikki kunnossa. Verkkotunnuksen määrityksissä voi kuitenkin olla virheitä, joita testi ei löydä. - -#### 13. Voinko testata DS-tietueet ennen niiden julkaisua? - -Kyllä voit. -Käytä "Valinnat" painiketta ja lisää Delegation Signer (DS) tietueet testattaviksi. -Zonemaster käsittelee lisättyjä DS-tietueita samalla tavoin kuin ne olis jo lisätty verkkotunnuksen nimipalvelimille. - -#### 14. Kuinka voin testata "käänteistä" (reverse) nimipalvelua Zonemasterilla? - -Jotta voisit testata käänteisverkkotunnuksen (reverse zone), sinun on tiedettävä, mikä verkkotunnus se on. Jos haluat testata käänteisverkkotunnuksen, syötä se DNS:ssä käytettävässä muodossa, esim.: - - - 3.2.1.in-addr.arpa - - 6.0.1.0.0.2.ip6.arpa - -[AFNIC]: https://www.afnic.fr/en/ -[Defined Test Cases]: https://github.com/zonemaster/zonemaster/tree/master/docs/public/specifications/tests#list-of-defined-test-cases -[Internetstiftelsen]: https://internetstiftelsen.se/ -[Question 12]: #q12 -[Question 13]: #q13 -[Severity Level Definitions]: https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/tests/SeverityLevelDefinitions.md -[Test Requirements document]: https://github.com/zonemaster/zonemaster/blob/master/docs/requirements/TestRequirements.md -[zonemaster-users@lists.iis.se]: mailto:zonemaster-users@lists.iis.se -[www.zonemaster.net]: https://www.zonemaster.net/ diff --git a/docs/FAQ/gui-faq-fr.md b/docs/FAQ/gui-faq-fr.md deleted file mode 100755 index 8e791624..00000000 --- a/docs/FAQ/gui-faq-fr.md +++ /dev/null @@ -1,214 +0,0 @@ -Zonemaster -========== - -1. [Qu'est-ce que Zonemaster ?](#q1) -2. [Qui se cache derrière Zonemaster ?](#q2) -3. [Qu'est-ce que Zonemaster peut faire pour moi?](#q3) -4. [Zonemaster indique des « Erreurs » ou « Avertissements » sur mon nom de domaine. Qu'est-ce que cela signifie ?](#q4) -5. [Comment Zonemaster discerne-t-il le bon du mauvais ?](#q5) -6. [Zonemaster prend-il en charge IPv6 ?](#q6) -7. [Zonemaster vérifie-t-il DNSSEC ?](#q7) -8. [Qu'est-ce qui distingue Zonemaster des autres outils existants ?](#q8) -9. [Zonemaster et le respect de la vie privée](#q9) -10. [Pourquoi mon nom de domaine n'a-t-il pas pu être testé ?](#q10) -11. [Quel genre de requêtes Zonemaster génère-t-il ?](#q11) -12. [Qu'est-ce qu'un test sur un domaine non délégué ?](#q12) -13. [Peut-on tester des enregistrements DS avant leur publication ?](#q13) -14. [Comment tester une zone inverse avec Zonemaster ?](#q14) - -Zonemaster ----------- -#### 1. Qu'est-ce que Zonemaster ? - -Zonemaster est un programme conçu pour aider à vérifier, mesurer et peut-être -aussi aider à la compréhension du fonctionnement du DNS (_Domain Name -System_). - -Il est constitué de plusieurs composants : - - 1. *Engine* (moteur) - un cadriciel de tests prenant en charge toutes les - fonctionnalités pour les tests DNS ; - 2. *CLI* - une interface en ligne de commande pour le moteur ; - 3. *Backend* - un serveur permettant l'exécution de tests et la sauvegarde de - résultats au moyen d'une API JSON-RPC et d'une base de données ; - 4. *GUI* - une interface graphique (Web) pour le Backend. - -Lorsqu'un nom de domaine (comme « zonemaster.net ») est soumis à Zonemaster -(par l'interface en ligne de commande ou l'interface graphique), ce dernier -vérifie l'état de santé général du nom de domaine à l'aide d'une série de -tests. L'ensemble des tests réalisés par Zonemaster est décrit dans le -document intitulé [Defined Test Cases] (« cas de tests définis », document -rédigé en anglais). - -#### 2. Qui se cache derrière Zonemaster ? - -Zonemaster est un projet conjoint entre l'[Afnic], registre du TLD « .fr » -ainsi que d'autres TLD, comme « .re », « .pm », « .tf », « .wf », « .yt » et -« .paris » et [The Swedish Internet Foundation], registre suédois des TLD -« .se » et « .nu ». - -#### 3. Qu'est-ce que Zonemaster peut faire pour moi ? - -Zonemaster a été conçu pour deux types de publics : - - - Les utilisateurs ayant une bonne connaissance du protocole DNS ; - - Les utilisateurs souhaitant simplement savoir si les noms de domaine qu'ils - possèdent ou utilisent ont des problèmes. - -Les utilisateurs de la seconde catégorie devraient contacter leur opérateur -DNS si le moindre test de leur nom de domaine rapporte une erreur ou un -avertissement. - -#### 4. Zonemaster indique des « Erreurs » ou « Avertissements » sur mon nom de domaine. Qu'est-ce que cela signifie ? - -Cela dépend du test ayant échoué pour votre nom de domaine. Chaque test est -accompagné d'un ou plusieurs messages décrivant les problèmes qui ont été -trouvés. Vous pouvez également trouver des détails supplémentaires sur chaque -test dans le document intitulé [Defined Test Cases]. - -#### 5. Comment Zonemaster discerne-t-il le bon du mauvais ? - -Le jugement de Zonemaster repose principalement sur les normes techniques du -DNS telles qu'elles sont définies dans les [RFC]. Le jugement est également -fondé sur les bonnes pratiques du DNS, dont la définition est moins stricte. -Tous les tests de Zonemaster sont définis dans des [spécifications de cas de -test][Defined Test Cases], dans lesquels vous pourrez trouver les références -aux documents normatifs pour un cas de test donné. - -Les descriptions de niveaux de messages comme *notice*, *avertissement* et -*erreur* se trouvent dans le document intitulé [Severity Level Definitions] -(en anglais). - -Parfois, les normes techniques ou les opinions de ce qui constitue une bonne -pratique peuvent faire l'objet d'interprétations multiples ; l'équipe de -Zonemaster est toujours ouverte aux commentaires. Si vous pensez que nous -avons fait une erreur dans notre jugement, n'hésitez pas à nous envoyer un -e-mail à [zonemaster-users@lists.iis.se] (liste de diffusion modérée) avec un -lien vers le résultat de votre test et en expliquant pourquoi vous pensez que -Zonemaster affiche quelque chose que vous considérez comme incorrect. - -#### 6. Zonemaster prend-il en charge IPv6 ? - -Oui. -Par défaut, Zonemaster interroge les serveurs de noms aussi bien en IPv4 qu'en -IPv6, sauf si un paramètre de configuration prescrit le contraire. -De tels paramètres de configuration sont accessibles à travers le bouton « Options ». - - -#### 7. Zonemaster vérifie-t-il DNSSEC ? - -Oui. -Si DNSSEC est disponible pour un domaine testé par Zonemaster, des tests -DNSSEC seront effectués automatiquement. - -#### 8. Qu'est-ce qui distingue Zonemaster des autres outils existants ? - -Premièrement, Zonemaster conserve tout l'historique des tests réalisés sur un -nom de domaine, ce qui signifie que vous pouvez revenir en arrière pour -comparer les résultats d'un test remontant à un certain temps et ceux d'un -test que vous avez lancé il y a un instant. - -Deuxièmement, tous les tests qu'effectue Zonemaster sont définis dans des -spécifications de cas de test, qui se trouvent dans le document intitulé -[Defined Test Cases]. - -Troisièmement, Zonemaster peut être utilisé pour tester des zones non -déléguées. Voir [Question 12]. - -Quatrièmement, Zonemaster peut être utilisé pour tester des enregistrements DS -avant leur publication dans la zone parente (un prérequis pour l'activation de -DNSSEC dans une zone signée). Voir [Question 13]. - -Enfin, cette version « open source » de Zonemaster a été écrite de manière -modulaire, ce qui signifie en résumé qu'il est possible d'intégrer des parties -de Zonemaster dans vos propres systèmes, si vous le souhaitez. Par exemple, on -souhaite rarement utiliser un logiciel complet juste pour vérifier des -redélégations. - -#### 9. Zonemaster et le respect de la vie privée - -Puisque Zonemaster est accessible à tous, n'importe qui peut vérifier votre -nom de domaine et consulter son historique de tests. -Toutefois, il n'est pas possible de savoir qui a réalisé ces tests, car seuls -les paramètres et les résultats du test sont conservés. -En particulier, aucun cookie et aucune information sur l'adresse IP de -l'utilisateur ne sont conservés dans la base de données. L'initiateur d'un -test ne peut pas être retrouvé à partir des informations dans la base de -données. - -#### 10. Pourquoi mon nom de domaine n'a-t-il pas pu être testé ? - -Il y a plusieurs possibilités : - -- Votre domaine n'est pas encore délégué ; -- Votre domaine n'est pas joignable publiquement depuis Internet ; -- Zonemaster peut seulement tester ce qu'on appelle une zone DNS (par exemple - « zonemaster.net ») et non pas les noms d'hôte (comme - « www.zonemaster.net ») ; -- Il y a une temporisation de dix minutes entre deux tests consécutifs d'un - même nom de domaine (avec les mêmes paramètres de test). Lancer un second - test dans cette fenêtre de temps donnera les résultats du dernier test - effectué pour ce nom de domaine (et ces paramètres) au lieu d'un nouveau - test ; -- Vous avez fait une faute de frappe dans le nom de domaine. - -#### 11. Quel genre de requêtes Zonemaster génère-t-il ? - -Zonemaster envoie plusieurs requêtes DNS aux serveurs de noms hébergeant le -nom de domaine à tester ainsi qu'aux serveurs de noms hébergant la zone -parente du même nom de domaine. - -L'interface graphique de Zonemaster n'affiche pas les requêtes envoyées, seule -l'interface en ligne de commande en est capable. Si vous souhaitez voir ces -requêtes, vous devez installer localement une instance minimale et -fonctionnelle de Zonemaster doté des composants Engine et CLI (une image -Docker est également disponible). Les requêtes envoyées peuvent être affichées -avec l'option de niveau de messages 'DEBUG'. Attention, la quantité de données -affichées par l'interface en ligne de commande peut être très volumineuse. -Pour plus d'informations, voir [Utilisation de l'interface en ligne de -commandes] (document rédigé en anglais). - -#### 12. Qu'est-ce qu'un test sur un nom de domaine non délégué ? - -Un test sur un nom de domaine non délégué est un test effectué sur un nom de -domaine qui peut ne pas être entièrement publié dans le DNS. Ce type de test -peut être très utile lorsqu'on est en train de migrer un domaine d'un bureau -d'enregistrement vers un autre, par exemple lorsqu'on migre la zone -« example.com » du serveur de noms « ns.example.com » vers le serveur de noms -« ns.example.org ». Dans ce cas de figure, on pourrait effectuer un test sur -un nom de domaine non délégué, en fournissant la zone (« example.com ») et le -serveur de noms vers lequel on migre (« ns.example.org ») *avant* de migrer le -domaine. Si le résultat du test ne comporte aucune erreur ni avertissement, on -peut être relativement certain que le nouvel emplacement du domaine fonctionne -bien. Mais cela n'exclut pas l'existence d'autres problèmes dans les données -elles-mêmes de la zone que ce test n'aurait pas décelés. - -#### 13. Peut-on tester des enregistrements DS avant leur publication ? - -Oui. -Pour cela, utilisez le bouton « Options » et ajoutez-y les entrées *Delegation Signer* (DS) à tester. -Zonemaster utilisera ces entrées-là comme si elles avaient déjà été ajoutées dans la zone parent. - -#### 14. Comment tester une zone inverse avec Zonemaster ? - -Pour tester une zone inverse, il faut d'abord déterminer le nom de la zone -inverse, puis la saisir dans le format qu'elle a dans le DNS. Une zone inverse -s'obtient en inversant une adresse IP et en ajoutant un suffixe. Les adresses -IPv4 utilisent le suffixe « in-addr.arpa » tandis que les adresses IPv6 -utilisent « ip6.arpa ». - -Exemples : - - - Pour le préfixe IPv4 « 198.51.100.0/24 » : 100.51.198.in-addr.arpa ; - - Pour le préfixe IPv6 « 2001:db8::/32 » : 8.b.d.0.1.0.0.2.ip6.arpa. - -[Afnic]: https://www.afnic.fr/fr/ -[Defined Test Cases]: https://github.com/zonemaster/zonemaster/tree/master/docs/public/specifications/tests#list-of-defined-test-cases -[Question 12]: #q12 -[Question 13]: #q13 -[RFC]: https://www.ietf.org/standards/rfcs/ -[Severity Level Definitions]: https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/tests/SeverityLevelDefinitions.md -[The Swedish Internet Foundation]: https://internetstiftelsen.se/en/ -[Utilisation de l'interface en ligne de commandes]: https://github.com/zonemaster/zonemaster/blob/master/docs/public/using/cli.md -[Zonemaster.net]: https://zonemaster.net/ -[zonemaster-users@lists.iis.se]: mailto:zonemaster-users@lists.iis.se diff --git a/docs/FAQ/gui-faq-nb.md b/docs/FAQ/gui-faq-nb.md deleted file mode 100755 index 6ecc71ab..00000000 --- a/docs/FAQ/gui-faq-nb.md +++ /dev/null @@ -1,123 +0,0 @@ -Zonemaster -========== - -1. [Hva er Zonemaster?](#q1) -2. [Hvem har utviklet Zonemaster?](#q2) -3. [Hvem er verktøyet laget for?](#q3) -4. [Zonemaster returnerer "Error" eller "Warning" på mitt domene. Hva betyr det?](#q4) -5. [Hvordan avgjør Zonemaster hva som er rett eller feil?](#q5) -6. [Håndterer Zonemaster IPv6?](#q6) -7. [Håndterer Zonemaster DNSSEC?](#q7) -8. [Hva er det for forskjell på Zonemaster og andre DNS-testverktøy?](#q8) -9. [Zonemaster og personvern](#q9) -10. [Hvorfor kan jeg ikke teste mitt domene?](#q10) -11. [Hvilke DNS-spørringer gjør Zonemaster?](#q11) -12. [Hva er et udelegert test?](#q12) -13. [Kan jeg teste DS-poster innen de er publisert?](#q13) -14. [Hvordan kan jeg teste revers-soner med Zonemaster?](#q14) - -Zonemaster ----------- - -#### 1. Hva er Zonemaster? -Zonemaster er et verktøy for å overvåke, måle og forstå hvordan domenenavnsystemet (DNS) virker. Zonemaster består av flere deler: - - 1. Motoren (kode som utfører testene). - 2. CLI - et kommandolinje-grensesnitt mot motoren. - 3. Backend - en tjener som kjører Zonemaster tester og lagrer resultater i en database. - 4. GUI - et webgrensesnitt mot Backend. - -Når et domene, også kalt en sone, blir testet, vil verktøyet ta en helsesjekk på domenet ved å gå gjennom DNS fra rota (.) til toppnivået, for eksempel .no, og til slutt DNS-serverne som inneholder informasjon om det spesifikke domenet, for eksempel eksempel.no. - -Zonemaster utfører også flere andre tester. Disse er dokumentert her, [Definierte tester]. - -Zonemaster kan teste både publiserte og upubliserte (ikke delegerte) domener. - -#### 2. Hvem har utviklet Zonemaster? -Verktøyet er utviklet i et samarbeid mellom registreringstjenestene -[AFNIC] (.fr TLD og flere andre TLDs, f.eks. .re, .pm, .tf, .wf, .yt og .paris) og -[Internetstiftelsen] (.se og .nu TLDs). - -#### 3. Hvem er verktøyet laget for? -Zonemaster er beregnet på profesjonelle brukere som vet hvordan DNS-protokollen fungerer. En vanlig domeneabonnent anbefales å kontakte sin domeneforhandler eller internettleverandør for å få tatt en helsesjekk på sine domener. - -Zonemaster er basert på åpen kildekode og er modulær. Som bruker kan du gjenbruke deler av koden i dine egne systemer hvis du ønsker det. - -#### 4. Zonemaster returnerer "Error" eller "Warning" på mitt domene. Hva betyr det? -Det beror på hvilket test som gikk galt for domenet. -Hvert testsvar innholder informasjon om hva som gikk galt med testen. -Mer informasjon om hva som testes finnes i dokumentet [Definierte tester]. - -#### 5. Hvordan avgjør Zonemaster hva som er rett eller feil? -Det er viktig å understreke at ingen kan gi en endelig uttalelse om helsen til et domene. Zonemaster er ikke alltid fullstendig korrekt, og resultatene kan gi rom for tolkning. De som står bak testen understreker at de har gjort sitt aller beste for å utvikle en best mulig policy for vurdering av ulike feil før de blir presentert for deg som bruker verktøyet. Denne policy er basert på DNS-standarder som er definiert i ulike [RFCs]. -Alle tester er definiert i [Definierte tester]. Der er også alle referanser til forskjelling RFCer dokumentert. - -Beskrivelse av de ulike nivåene på feilmeldinger, *notice*, *warning*, og *error*, er beskrevet i [Definisjoner av alvorlighetsgrad]. - -Hvis du syns at et testresultat er feil så oppfordrer vi til å sende en e-post til [zonemaster-users@lists.iis.se] (moderert e-postliste) med en lenke til testresultatet og forklar hvorfor du synes testen er feil. - -#### 6. Håndterer Zonemaster IPv6? -Ja, alle tester kjøres på både IPv4 og IPv6. Man kan endre på dette ved å slå på "Avansert sjekk". - -#### 7. Håndterer Zonemaster DNSSEC? -Ja, hvis DNSSEC er konfigurert for et domene blir det automatiskt testet av Zonemaster. - -#### 8. Hva er det for forskjell på Zonemaster og andre DNS-testverktøy? -For det første lagrer Zonemaster all historikk fra tidligere tester basert på det testede domenet. Det betyr at du kan gå tilbake til en test du gjorde for en uke siden og sammenligne den med testen du kjørte for et øyeblikk siden. - -Alle tester som Zonemaster kjører er definert i test-spesifikasjoner som -er koblet til [Kravdokument for test](https://github.com/zonemaster/zonemaster/blob/master/docs/requirements/TestRequirements.md) - -Zonemaster kan brukes til å teste udelegerte domener. Mer om udelegert -domener i [Spørsmål 12](#q12). - -Zonemaster kan brukes til å teste DS-poster innen de er publisert i foreldresonen. Dette trengs da man skal slå på DNSSEC for en signert sone. Se [Spørsmål 13](#q13). - -Til slutt ble denne open source-versjonen av Zonemaster bygget ved hjelp av modulkode som i utgangspunktet betyr at du kan bruke deler av den i systemene dine hvis du ønsker det. Det er ganske sjelden at du har et komplett program bare for å sjekke for eksempel omlegeringer. - -#### 9. Zonemaster og personvern -Zonemaster lagrer all historikk. Det betyr at du kan gå tilbake og se på en test du gjorde for en uke siden og sammenligne med en test du nettopp har gjort. - -Zonemaster er tilgjengelig for alle, dermed er det også mulig for alle å teste ditt domene og også se testhistorikk for domenet. Det er imidlertid ingen som kan se hvem som har gjort en test. Det eneste som er logget, er tidspunktet da testen ble utført. Hverken IP-adresse eller informasjonskapsler (cookies) blir lagret. - -#### 10. Hvorfor kan jeg ikke teste mitt domene? -Det er flere muligheter: - - Ditt domene er ikke delegert. - - Ditt domene er ikke tilgjengelig fra internett. - - Zonemaster kan bare sjekke domener eller DNS-soner, som zonemaster.net, og - ikke vertsnavn i et domene (sone), som www.zonemaster.net. - - Det er en periode på 10 minutter mellom hver gang man kan sjekke et domene med samme testparametere. - His du prøver å teste det igjen innen 10 minutter vil det forrige resultatet vises i stedet. - - Du har feilstavet ditt domene. - -#### 11. Hvilke typer spørringer genererer Zonemaster? -Zonemaster vil generere forskjellige typer spørringer avhengig av hvordan DNS-serverne svarer. - -For å få en full visning av hvilke spørsmål og resultater som genereres, kan du kjøre CLI-grensesnittet og velg full utdata. For å kunne kjøre CLI-grensesnittet må du laste ned pakke og installer både CLI- og Engine-komponenten. Det finnes også en Docker image. -Resultatet fra CLI-verktøyet er ganske tungt teknisk så med mindre du er interessert i bit og byte, vil du kanskje hoppe over dette trinnet. For mer informasjon se [Bruk av CLI]. - -#### 12. Hva er et udelegert test? -Du kan sjekke domener og navnetjenere som ikke er publisert i DNS, eller endringer av navnetjenere for et domene før endringen er publisert. Hvis testen er feilfri, kan du regne med at navnetjeneren vil svare på spørringer om domenet. Det kan imidlertid fortsatt være feil i soneinformasjonen som denne testen ikke kjenner til. - -#### 13. Kan jeg teste DS-poster innen de er publisert? -Ja, bruk valget "Avansert sjekk" for å kunne legge inn DS-poster du vil sjekke. Zonemaster bruker da de i steden for å hendte dem fra foreldresonen. - -#### 14. Hvordan kan jeg teste revers-soner med Zonemaster? -Et reversoppslag kan brukes til å finne ut hvilket domenenavn som er knyttet til en IP-adresse. - -For en IPv4-adresse må du først finne nettverksadressen til systemet. Denne ender oftest med en 0 (null). Du sletter siste 0 (null), deretter endrer du rekkefølgen på sifrene du har mottatt og legger til suffikset in-addr.arpa. Du gjør det samme med en IPv6-adresse, men legger til suffikset ip6.arpa. - -Eksempel 1 - reversoppslag for et IPv4-nett: Nettadressen er 194.98.30.0 og gir reversoppslagssonen 30.98.194.in-addr.arpa. - -Eksempel 2 - reversoppslag for et IPv6-nett: Nettadressen er 2001:660:3003::0 og gir reversoppslagssonen 3.0.0.3.0.6.6.0.1.0.0.2.ip6.arpa. - -[AFNIC]: https://www.afnic.fr/en/ -[Definierte tester]: https://github.com/zonemaster/zonemaster/tree/master/docs/public/specifications/tests#list-of-defined-test-cases -[Spørsmål 12]: #q12 -[Spørsmål 13]: #q13 -[RFCs]: https://www.ietf.org/standards/rfcs/ -[Definisjoner av alvorlighetsgrad]: https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/tests/SeverityLevelDefinitions.md -[Internetstiftelsen]: https://internetstiftelsen.se/en/ -[Bruk av CLI]: https://github.com/zonemaster/zonemaster/blob/master/docs/public/using/cli.md -[Zonemaster.net]: https://zonemaster.net/ -[zonemaster-users@lists.iis.se]: mailto:zonemaster-users@lists.iis.se diff --git a/docs/FAQ/gui-faq-sv.md b/docs/FAQ/gui-faq-sv.md deleted file mode 100755 index 6a0a7ece..00000000 --- a/docs/FAQ/gui-faq-sv.md +++ /dev/null @@ -1,194 +0,0 @@ -Zonemaster -========== - -1. [Vad är Zonemaster?](#q1) -2. [Vem står bakom Zonemaster?](#q2) -3. [Hur kan Zonemaster hjälpa till?](#q3) -4. [Zonemaster visar "Fel" eller "Varning" när jag testar min domän, vad betyder det?](#q4) -5. [Hur kan Zonemaster bedömma vad som är rätt och fel?](#q5) -6. [Kan Zonemaster hantera IPv6?](#q6) -7. [Kan Zonemaster kontrollera DNSSEC?](#q7) -8. [Vad skiljer Zonemaster från andra program som testar domäner?](#q8) -9. [Zonemaster och integritet](#q9) -10. [Varför kan jag inte testa min domän?](#q10) -11. [Vilken typ av DNS-frågor ställer Zonemaster?](#q11) -12. [Vad är ett odelegerat domäntest?](#q12) -13. [Går det att testa DS-poster innan de publiceras?](#q13) -14. [Hur kan jag testa en "baklängeszon" med Zonemaster?](#q14) - - -Zonemaster ----------- - -#### 1. Vad är Zonemaster? -Zonemaster är ett program som är framtaget för att hjälpa användare att -kontrollera, mäta och förhoppningsvis också bättre förstå hur DNS, "Domain Name -System", fungerar. - -Den består av flera delar: - -1. *Engine* - ett testramverk med stöd för att utföra DNS-test. -2. *CLI* - ett kommandoradsgränssnitt till "Engine". -3. *Backend* - en tjänst som låter dig köra zonmastertest och spara resultat med - hjälp av ett JSON-RPC-API och en databas. -4. *GUI* - ett Webbgränssnitt mot "backend". - -När Zonemaster startar en test av ett domännamn, som "zonemaster.net" (genom -"CLI" eller "GUI") så kommer det att kontrollera domännamnets allmänna tillstånd -med hjälp av en serie av test. Testen som utförs av Zonemaster finns listade i -dokumentet "[Defined Test Cases]" (*Definierade testfall*). - - -#### 2. Vem står bakom Zonemaster? -Zonemaster är ett samarbetsprojekt mellan [Internetstiftelsen](https://internetstiftelsen.se/) -(registry för .se och .nu) och [AFNIC](https://www.afnic.fr/en/) -(registry för .fr och andra TLD:er som .re, .pm, .tf, .wf, .yt och .paris). - - -#### 3. Hur kan Zonemaster hjälpa till? -Zonemaster är framtaget för två kategorier av användare: - - - Användare med kunskap om DNS-standarden. - - Användare som bara vill veta om domäner som hen äger eller använder - har några problem eller inte. - -Användare av den andra kategorin bör vända sig till sin DNS-operatör -ifall det finns fel eller varningar när deras domännamn testats. - - -#### 4. Zonemaster visar "Fel" eller "Varning" när jag testar min domän, vad betyder det? -Det beror på vilken test det gäller. Varje testfall kommer med ett eller flera -meddelanden som beskriver det problem som har funnits. Mera detaljer om varje -testfall kan hittas via dokumentet "[Defined Test Cases]" -(*Definierade testfall*). - - -#### 5. Hur kan Zonemaster bedömma vad som är rätt och fel? -Zonemasters bedömning är i första hand baserat på DNS-standarden som den är -definierad i [RFC:er][RFCs] (text på engelska; det finns även en -[beskrivning av RFC i engelskspråkiga Wikipedia][Wikipedia#Engelska#RFC]). -Zonemaster baserar också sin bedömning på rekommenderade inställningar av DNS, -vilka är mera löst definierade. Alla zonemastertest är definierade och finns som -"[Test Case Specifications][Defined Test Cases]" (*testfallsspecifikationer*) i -vilka det återfinns referenser till dokument med relevant del av DNS-standarden. -En beskrivning av felnivåerna som används, som *notice* ("notering"), *warning* -("varning") och *error* ("fel") finns i dokumentet "[Severity Level Definitions]" -(*Defintion av felnivåer*). - -Ibland finns det olika tolkningar av standarden eller synpunkter på vad som är -den rekommenderade inställningen. Zonemastergruppen välkomnar alltid synpunkter -och kommentarer på detta. Om du tror du hittat något som du tycker att vi har -felbedömt, tveka inte att kontakta oss på -[zonemaster-users@lists.iis.se](mailto:zonemaster-users@lists.iis.se) (modererad -e-postlista) med en länk till ditt test och en förklaring av varför du anser att -resultatet inte är korrekt. - - -#### 6. Kan Zonemaster hantera IPv6? -Ja. Zonemaster kommer att skicka DNS frågor till namnservrarna över både IPv4 -och IPv6 om inte Zonemaster har konfigurerats på annat sätt. Under knappen -"alternativ" så går det att ställa in detta. - - -#### 7. Kan Zonemaster kontrollera DNSSEC? -Ja. Om en domän som testas av Zonemaster har DNSSEC konfigurerat så kommer det testas automatiskt. - - -#### 8. Vad skiljer Zonemaster från andra program som testar domäner? -För det första så sparar Zonemaster all testhistorik utifrån den testade -domänen, vilket innebär att man kan gå tillbaka till ett tidigare test och -jämföra med ett test som just har körts. - -För det andra så är alla test som Zonemaster kör specificerade i -"[Test Case Specifications][Defined Test Cases]" (*testfallsspecifikationer*). - -För det tredje så kan Zonemaster också testa icke-publicerade eller odelegerade -domäner (se [fråga 12][Question 12]). - -För det fjärde så kan Zonemaster användas för att testa DS-posterna innan de -läggs in i moderzonen, vilket är nödvändigt för att aktivera DNSSEC för en -signerad zon (se [fråga 13][Question 13]). - -Och till sist, Zonemaster är öppen källkod och är modulärt uppbyggt, vilket -betyder att man kan integrera delar av Zonemaster i sitt eget system om man -vill. - - -#### 9. Zonemaster och integritet -Eftersom [Zonemaster.net] är tillgänglig för vem som helst, så kan vem som helst -kontrollera din domän och se dess testhistorik. Å andra sidan så finns det inget -sett att ta reda på vem som har kört ett test eftersom det bara är testparametrar -och testresultat som sparas. Specifikt så sparas inga cookies eller annan -information om användarens IP-adress i databasen. Användaren som initierade -testet kan inte spåras från informationen i databasen. - - -#### 10. Varför kan jag inte testa min domän? -Det kan finnas flera olika anledningar till detta: - -- Domännamnet är ännu inte delegerat. -- Domännamnet är inte nåbart från det publika Internet. -- Zonemaster kan bara testa det som kallas DNS-zoner (t.ex. "zonemaster.net") och - inte enskilda datornamn (t.ex. "www.zonemaster.net"). -- Det finns ett skydd mot att starta upprepade test på samma domännamn (och med - samma testparametrar) oftare än var tionde minut. Om man försöker att starta - ett test innan perioden har löpt ut så får man resultatet från föregående - test för samma domännamn (och testparametrar). -- Domännamnet har stavats fel. - - -#### 11. Vilken typ av DNS-frågor ställer Zonemaster? -Zonemaster skickar flera DNS-frågor till namnservrarna som är hostingservrar för -domänen som testas, men även till namnservrarna som är hostingservrar för den -överliggande zonen till domänen som testas. - -Webbgränssnittet till Zonemaster visar inte vilka DNS-frågon som skickar. Det är -endast CLI-gränssnittet som kan visa det. Om man vill se DNS-frågorna så måste -man göra en lokal installation av både Zonemaster-Engine och Zonemaster-CLI, -alternativt installera den Docker-image som också finns tillgänglig. DNS-frågorna -kan visas genom att välja DEBUG-nivån "--level DEBUG". Det ska poängteras att det -blir mycket som visas från CLI-gränssnittet i det fallet. För mera information se -"[Using The CLI]" (*användardokumentet för CLI*). - - -#### 12. Vad är ett odelegerat domäntest? -Ett odelegerat domäntest är ett test som genomförs på en domän som inte -nödvändigtvis är publicerad i DNS. Detta kan vara mycket användbart om man tänker -flytta sin domän från en registrar till en annan, t.ex. flytta "example.se" från -namnservern "ns1.example.com" till namnserver "dns2.example.net". I detta fall -skulle du kunna köra ett odelegerat domäntest på domänen ("example.se") med den -namnservern du ska flytta till ("dns2.example.net") innan du genomför själva -flytten. När resultatet på testet inte visare några fel ("error") eller varningar -("warning") så kan man vara rätt säker på att domännamnets nya plats fungerar väl. -Det kan emellertid fortfarande finnas fel i zoninformationen som dessa test inte -känner till. - - -#### 13. Går det att testa DS-poster innan de publiceras? -Ja. Använd knappen "alternativ" och lägg sedan till DS-posterna ("Delegation -Signer") som ska testas. Zonemaster kommer att använda dessa på samma sätt som -om de redan fanns i moderzonen. - - -#### 14. Hur kan jag testa en "baklängeszon" med Zonemaster? -För att kunna kontrolla en "baklängeszon" (också kallad "reverszon" så måste man -veta vilken zon det är och testa det format det har i DNS. En baklängeszon får -man genom att vända IP-adressen och lägga på ett suffix. För IPv4-adresser -används suffixet "in-addr.arpa" medans för IPv6-adresser används "ip6.arpa". - -Exempel: - - För IPv4-prefix "198.51.100.0/24": 100.51.198.in-addr.arpa - - För IPv6-prefix "2001:db8::/32": 8.b.d.0.1.0.0.2.ip6.arpa - - -[AFNIC]: https://www.afnic.fr/en/ -[Defined Test Cases]: https://github.com/zonemaster/zonemaster/tree/master/docs/public/specifications/tests#list-of-defined-test-cases -[Question 12]: #q12 -[Question 13]: #q13 -[RFCs]: https://www.ietf.org/standards/rfcs/ -[Severity Level Definitions]: https://github.com/zonemaster/zonemaster/blob/master/docs/public/specifications/tests/SeverityLevelDefinitions.md -[The Swedish Internet Foundation]: https://internetstiftelsen.se/en/ -[Using The CLI]: https://github.com/zonemaster/zonemaster/blob/master/docs/public/using/cli.md -[Zonemaster.net]: https://zonemaster.net/ -[zonemaster-users@lists.iis.se]: mailto:zonemaster-users@lists.iis.se -[Wikipedia#Engelska#RFC]: https://en.wikipedia.org/wiki/Request_for_Comments diff --git a/docs/Testing.md b/docs/Testing.md index 019b5b69..79b2f56d 100644 --- a/docs/Testing.md +++ b/docs/Testing.md @@ -27,16 +27,21 @@ npm run e2e If the appearance of the GUI changes some tests might fail as the baseline for visual comparison is no longer up to date. In this case it is required to update the snapshots. The following commands updates the snapshots while ensuring a -similar environment than the one the CI runs in is used (ubuntu focal and UTC +similar environment than the one the CI runs in is used (Ubuntu 22.04 and UTC time). ```sh -docker run --rm --network host -v $(pwd):/work/ -w /work/ -it mcr.microsoft.com/playwright:v1.28.0-jammy /bin/bash +docker run --rm --network host -v $(pwd):/work/ -w /work/ -it mcr.microsoft.com/playwright:v1.44.1-jammy /bin/bash npm run e2e:install npm run e2e:update exit ``` +Note that this method may not always work: it could happen that the generated +snapshots are incorrect and have slight differences (e.g. appears zoomed in/out, +etc). In that case, repeat the above steps but outside of the Docker environment, +and preferably on a machine that uses a similar OS/environment as the CI. + [build environment]: https://github.com/zonemaster/zonemaster/blob/master/docs/internal/distrib-testing/Ubuntu-Node.js-build-environment.md [playwright]: https://playwright.dev/docs/intro diff --git a/docs/TranslationGuide.md b/docs/TranslationGuide.md index d7b6fce3..ea3a2a91 100644 --- a/docs/TranslationGuide.md +++ b/docs/TranslationGuide.md @@ -47,9 +47,9 @@ new or updated file as a pull request to Github (see [translators guide] for Zonemaster-Engine, -CLI and -Backend). Contact the Zonemaster Group if that does not work. -The translator must always create or update the `messages..xlf` and -the `gui-faq-.md`. The other changes are only done when -a language is added and will be completed by the Zonemaster Group. +The translator must always create or update the `messages..xlf`. The +other changes are only done when a language is added and will be completed +by the Zonemaster Group. ## messages.\.xlf @@ -81,29 +81,6 @@ In Poedit, the translator can see the new strings to translated in an accent color. Additional context for translation, if available, is shown in the bottom left corner of the window under "Notes for translators". -## gui-faq-\.md - -The FAQ document holds questions and answers on Zonemaster, and there -is one document per language, e.g. `gui-faq-en.md`. - -The files are located in the [docs/FAQ] folder, one file for each supported -language. - -When creating a new FAQ file, make a copy of `gui-faq-en.md` with the new -language code instead of `en`. The code must be in lower case. Then -translate the file using English as the model. - -It is important to preserve the structure of the file. There must be a -table of contents linking to the question plus answer below. The header -of the answer must start with `####` and then ``. -The id must be `q1` etc matching the id in the question and nothing else. - -``` -1. [What is Zonemaster?](#q1) - -#### 1. What is Zonemaster? -``` - ## Adding a new language The new language must be added to the following source files: @@ -209,13 +186,13 @@ and append the new two-letter language code of the new language. ### zonemaster.conf-example -In the Apache example configuration add a rewrite rule to redirect the -user to the new language: +In the Apache example configuration, `zonemaster.conf-example`, update the rewrite +rules and conditions to add the new language. -```apache -RewriteCond %{HTTP:Accept-Language} ^ [NC] -RewriteRule ^$ // [R,L] -``` +Identify the three places in `zonemaster.conf-example` where there is a list of +language codes. Currently you will find `da|en|es|fi|fr|nb|sv`. Add the two-letter +code of the new language following the same pattern. Preserve the alphabetical order +of the language codes. ### Configuration @@ -236,7 +213,6 @@ const testSuite = [ [ISO 639-1]: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes -[docs/FAQ]: FAQ [e2e]: ../e2e [FR05-en.e2e-spec.ts]: ../e2e/FR05-en.e2e-spec.ts [angular.json]: ../angular.json diff --git a/e2e/FR03.e2e-spec.ts b/e2e/FR03.e2e-spec.ts index c60cb525..55551471 100644 --- a/e2e/FR03.e2e-spec.ts +++ b/e2e/FR03.e2e-spec.ts @@ -11,7 +11,7 @@ test.describe('Zonemaster test FR03 - [All appropriate fields should be writable test('should be able to write in the main input', async ({ page }) => { const testString = 'afnic.fr'; - const domainInput = page.locator('#input-domain-form'); + const domainInput = page.locator('#domain-input'); await domainInput.type(testString); await expect(domainInput).toHaveValue(testString); diff --git a/e2e/FR05.e2e-spec.ts b/e2e/FR05.e2e-spec.ts index 2d795c46..9f1adc6c 100644 --- a/e2e/FR05.e2e-spec.ts +++ b/e2e/FR05.e2e-spec.ts @@ -26,7 +26,7 @@ test.describe('Zonemaster test FR05 - [Supports internationalization]', () => { test(`should switch to ${language}`, async ({ page }) => { await setLang(page, code); - await expect(page.locator('label[for="input-domain-form"]')).toHaveText(expected); + await expect(page.locator('label[for="domain-input"]')).toHaveText(expected); }) } }); diff --git a/e2e/FR08.e2e-spec.ts b/e2e/FR08.e2e-spec.ts index 7c7d0f8a..5c483c4f 100644 --- a/e2e/FR08.e2e-spec.ts +++ b/e2e/FR08.e2e-spec.ts @@ -9,6 +9,6 @@ test.describe('Zonemaster test FR08 - [Presence of a default fallback language - }); test('should have a fallback language - English', async ({ page }) => { - await expect(page.locator('label[for="input-domain-form"]')).toHaveText('Domain name'); + await expect(page.locator('label[for="domain-input"]')).toHaveText('Domain name'); }); }); diff --git a/e2e/FR09.e2e-spec.ts b/e2e/FR09.e2e-spec.ts index bfb9b881..e40009f2 100644 --- a/e2e/FR09.e2e-spec.ts +++ b/e2e/FR09.e2e-spec.ts @@ -9,7 +9,7 @@ test.describe('Zonemaster test FR09 - [Once a language is chosen, all other link }); test('should keep french when opening faq page', async ({ page }) => { - await expect(page.locator('label[for="input-domain-form"]')).toHaveText('Nom de domaine'); + await expect(page.locator('label[for="domain-input"]')).toHaveText('Nom de domaine'); await page.locator('a.nav-link[routerlink="/faq"]').click(); await expect(page.locator('main h1')).toHaveText('Questions fréquentes'); await expect(page.locator('a.nav-link[routerlink="/run-test"]')).toHaveText("Lancer un test"); diff --git a/e2e/FR10.e2e-spec.ts b/e2e/FR10.e2e-spec.ts index ac04f379..efb4c989 100644 --- a/e2e/FR10.e2e-spec.ts +++ b/e2e/FR10.e2e-spec.ts @@ -15,7 +15,7 @@ test.describe('Zonemaster test FR10 - [On launching the URL opens with a default test('should have [Options] label visible and NOT selected', async ({ page }) => { await expect(page.locator('#advanced-toggle', { hasText: 'Show options' })).toBeVisible(); - await expect(page.locator('#advanced-toggle')).toHaveAttribute('aria-expanded', 'false'); + await expect(page.locator('#advanced-options')).not.toHaveAttribute('open'); }); diff --git a/e2e/FR11.e2e-spec.ts-snapshots/domain-chromium-linux.png b/e2e/FR11.e2e-spec.ts-snapshots/domain-chromium-linux.png index e8c7a555..bea6a8b2 100644 Binary files a/e2e/FR11.e2e-spec.ts-snapshots/domain-chromium-linux.png and b/e2e/FR11.e2e-spec.ts-snapshots/domain-chromium-linux.png differ diff --git a/e2e/FR18.e2e-spec.ts b/e2e/FR18.e2e-spec.ts index 6d182696..e39f80f7 100644 --- a/e2e/FR18.e2e-spec.ts +++ b/e2e/FR18.e2e-spec.ts @@ -10,7 +10,7 @@ test.describe('Zonemaster test FR18 - [The GUI should be able to run tests by ju test('should display progress bar', async ({ page }) => { await expect(page.locator('.progress-bar')).toBeHidden(); - await page.locator('#input-domain-form').type('progress.afNiC.Fr'); + await page.locator('#domain-input').type('progress.afNiC.Fr'); await page.locator('div button.launch').click(); await expect(page.locator('.progress-bar')).toBeVisible({ timeout: 10000}); }); diff --git a/e2e/FR19.e2e-spec.ts b/e2e/FR19.e2e-spec.ts index 840bbd51..3db3dc96 100644 --- a/e2e/FR19.e2e-spec.ts +++ b/e2e/FR19.e2e-spec.ts @@ -11,7 +11,7 @@ test.describe('Zonemaster test FR19 - [The GUI should be able to run the test wi test('should NOT display progress bar when we add a NS ip', async ({ page }) => { await expect(page.locator('.progress-bar')).toBeHidden(); - await page.locator('#input-domain-form').type('progress.afNiC.Fr'); + await page.locator('#domain-input').type('progress.afNiC.Fr'); await page.locator('input[formControlName="ip"]').type('192.134.4.1'); await page.locator('div button.launch').click(); @@ -28,7 +28,7 @@ test.describe('Zonemaster test FR19 - [The GUI should be able to run the test wi test('should display progress bar when we add a NS name', async ({ page }) => { await expect(page.locator('.progress-bar')).toBeHidden(); - await page.locator('#input-domain-form').type('progress.afNiC.Fr'); + await page.locator('#domain-input').type('progress.afNiC.Fr'); await page.locator('input[formControlName="ns"]').type('ns1.nic.fr'); await page.locator('div button.launch').click(); await expect(page.locator('.progress-bar')).toBeVisible({ timeout: 10000 }); diff --git a/e2e/FR20.e2e-spec.ts b/e2e/FR20.e2e-spec.ts index 19148441..5e305eac 100644 --- a/e2e/FR20.e2e-spec.ts +++ b/e2e/FR20.e2e-spec.ts @@ -12,7 +12,7 @@ test.describe('Zonemaster test FR20 - [The user must be able to submit one or mo test('should display progress bar when we add a DS entry and launch a test', async ({ page }) => { await expect(page.locator('.progress-bar')).toBeHidden(); - await page.locator('#input-domain-form').type('progress.afNiC.Fr'); + await page.locator('#domain-input').type('progress.afNiC.Fr'); await page.locator('input[formControlName="keytag"]').first().type('37610'); await page.locator('input[formControlName="digest"]').first().type('d2681e301f632bd76544e6d5b6631a12d97b5479ff07cd24efecd19203c77db3'); diff --git a/e2e/FR21.e2e-spec.ts b/e2e/FR21.e2e-spec.ts index ca0794d9..a3363941 100644 --- a/e2e/FR21.e2e-spec.ts +++ b/e2e/FR21.e2e-spec.ts @@ -18,7 +18,7 @@ test.describe.serial('Zonemaster test FR21 - [Able to provide a summarized resul test('should display summary', async () => { await expect(page.locator('.progress-bar')).toBeHidden(); - await page.locator('#input-domain-form').type('results.afNiC.Fr'); + await page.locator('#domain-input').type('results.afNiC.Fr'); await page.locator('div button.launch').click(); await expect(page.locator('section.result')).toBeVisible({ timeout: 10000 }); diff --git a/e2e/FR21.e2e-spec.ts-snapshots/results-chromium-linux.png b/e2e/FR21.e2e-spec.ts-snapshots/results-chromium-linux.png index cea31adb..b1c407ce 100644 Binary files a/e2e/FR21.e2e-spec.ts-snapshots/results-chromium-linux.png and b/e2e/FR21.e2e-spec.ts-snapshots/results-chromium-linux.png differ diff --git a/e2e/FR22.e2e-spec.ts b/e2e/FR22.e2e-spec.ts index 80a44bcc..3c537cea 100644 --- a/e2e/FR22.e2e-spec.ts +++ b/e2e/FR22.e2e-spec.ts @@ -13,7 +13,7 @@ test.describe('Zonemaster test FR22 - [Provide the possibility to see more infor test('should display full messages', async({ page }) => { await expect(page.locator('.progress-bar')).toBeHidden(); - await page.locator('#input-domain-form').type('results.afNiC.Fr'); + await page.locator('#domain-input').type('results.afNiC.Fr'); await page.locator('button.launch').click(); // Basic header is the second one @@ -25,7 +25,7 @@ test.describe('Zonemaster test FR22 - [Provide the possibility to see more infor const basic02Messages = page.locator('#testcase-entries-BASIC02 li'); await expect(basicHeader).toBeVisible({ timeout: 10000 }); - await expect(basicHeader).toHaveText(/BASIC/); + await expect(basicHeader).toHaveText(/Basic/i); await expect(basicTestcases).toHaveCount(3); diff --git a/e2e/FR26.e2e-spec.ts b/e2e/FR26.e2e-spec.ts index 7484ef23..4d5fbaca 100644 --- a/e2e/FR26.e2e-spec.ts +++ b/e2e/FR26.e2e-spec.ts @@ -10,7 +10,7 @@ test.describe('Zonemaster test FR26 - [Should be able to show a progress bar wit test('should display progress bar', async ({ page }) => { await expect(page.locator('.progress-bar')).toBeHidden(); - await page.locator('#input-domain-form').type('progress.afNiC.Fr'); + await page.locator('#domain-input').type('progress.afNiC.Fr'); await page.locator('button.launch').click(); await expect(page.locator('.progress-bar')).toBeVisible({ timeout: 10000}); await expect(page.locator('.progress-value')).toHaveText('50%'); diff --git a/e2e/navigation.e2e-spec.ts b/e2e/navigation.e2e-spec.ts index c2cbd443..637005fd 100644 --- a/e2e/navigation.e2e-spec.ts +++ b/e2e/navigation.e2e-spec.ts @@ -17,7 +17,7 @@ test.describe('Navigation should be consistent and honor browser behaviour', () // Create a new test await expect(page).toHaveURL(domainCheckUrl); - await page.locator('#input-domain-form').type(firstDomain); + await page.locator('#domain-input').type(firstDomain); await page.locator('button.launch').click(); // Verify that when the test finishes the browser is redirect to the result page with an url /result/. // The "run domain test" form is visible. @@ -40,7 +40,7 @@ test.describe('Navigation should be consistent and honor browser behaviour', () await expect(page.locator('form.domain')).toBeVisible(); await expect(page).toHaveURL(firstTestUrl); // Create a second test for an other domain from the result page. - await page.locator('#input-domain-form').type(secondDomain); + await page.locator('#domain-input').type(secondDomain); await page.locator('div button.launch').click(); // When the second test finishes the url should change to /result/. // The result for the second test should be displayed and the "run domain test" form should still be visible. diff --git a/e2e/utils/app.utils.ts b/e2e/utils/app.utils.ts index 4d08ce40..fd08d20f 100644 --- a/e2e/utils/app.utils.ts +++ b/e2e/utils/app.utils.ts @@ -11,7 +11,8 @@ export function setLang(page, lang) { export async function showOptions(page) { const showOptionSwitch = page.locator('#advanced-toggle'); - if ((await showOptionSwitch.getAttribute('aria-expanded')) === 'false' ) { + const advancedOption = page.locator('#advanced-options'); + if ((await advancedOption.getAttribute('open')) === null ) { return showOptionSwitch.click(); } } diff --git a/package-lock.json b/package-lock.json index b6a2c1ed..e69bff39 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "zonemaster-gui", - "version": "4.1.0", + "version": "4.2.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "zonemaster-gui", - "version": "4.1.0", + "version": "4.2.0", "license": "BSD-2-Clause", "dependencies": { "@angular/animations": "^13.3.11", @@ -22,8 +22,8 @@ "bootstrap": "^5.2.0", "file-saver": "^2.0.2", "fork-awesome": "^1.2.0", + "punycode": "^2.3.1", "rxjs": "^6.6.0", - "showdown": "^1.9.1", "tslib": "^2.0.0", "zone.js": "~0.11.4" }, @@ -32,7 +32,7 @@ "@angular/cli": "^13.3.9", "@angular/compiler-cli": "^13.3.11", "@angular/language-service": "^13.3.11", - "@playwright/test": "^1.28.0", + "@playwright/test": "^1.44.1", "@types/file-saver": "^2.0.1", "@types/node": "^13.11.0", "archiver": "^3.1.1", @@ -3038,19 +3038,18 @@ } }, "node_modules/@playwright/test": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.28.0.tgz", - "integrity": "sha512-vrHs5DFTPwYox5SGKq/7TDn/S4q6RA1zArd7uhO6EyP9hj3XgZBBM12ktMbnDQNxh/fL1IUKsTNLxihmsU38lQ==", + "version": "1.44.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.44.1.tgz", + "integrity": "sha512-1hZ4TNvD5z9VuhNJ/walIjvMVvYkZKf71axoF/uiAqpntQJXpG64dlXhoDXE3OczPuTuvjf/M5KWFg5VAVUS3Q==", "dev": true, "dependencies": { - "@types/node": "*", - "playwright-core": "1.28.0" + "playwright": "1.44.1" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=14" + "node": ">=16" } }, "node_modules/@popperjs/core": { @@ -3649,6 +3648,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, "engines": { "node": ">=6" } @@ -4260,6 +4260,7 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, "engines": { "node": ">=6" } @@ -4401,16 +4402,6 @@ "node": ">= 10" } }, - "node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, "node_modules/clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", @@ -5051,14 +5042,6 @@ } } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", @@ -5314,7 +5297,8 @@ "node_modules/emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true }, "node_modules/emojis-list": { "version": "3.0.0", @@ -6170,17 +6154,6 @@ "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/follow-redirects": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", @@ -7142,6 +7115,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, "engines": { "node": ">=4" } @@ -7615,18 +7589,6 @@ "node": ">= 12.13.0" } }, - "node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -9013,6 +8975,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -9023,17 +8986,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/p-map": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", @@ -9075,6 +9027,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, "engines": { "node": ">=6" } @@ -9212,14 +9165,6 @@ "node": ">= 0.8" } }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "engines": { - "node": ">=4" - } - }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -9356,16 +9301,34 @@ "node": ">=8" } }, - "node_modules/playwright-core": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.28.0.tgz", - "integrity": "sha512-nJLknd28kPBiCNTbqpu6Wmkrh63OEqJSFw9xOfL9qxfNwody7h6/L3O2dZoWQ6Oxcm0VOHjWmGiCUGkc0X3VZA==", + "node_modules/playwright": { + "version": "1.44.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.44.1.tgz", + "integrity": "sha512-qr/0UJ5CFAtloI3avF95Y0L1xQo6r3LQArLIg/z/PoGJ6xa+EwzrwO5lpNr/09STxdHuUoP2mvuELJS+hLdtgg==", "dev": true, + "dependencies": { + "playwright-core": "1.44.1" + }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=14" + "node": ">=16" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.44.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.44.1.tgz", + "integrity": "sha512-wh0JWtYTrhv1+OSsLPgFzGzt67Y7BE/ZS3jEqgGBlp2ppp1ZDj8c+9IARNW4dwf1poq5MgHreEM2KV/GuR4cFA==", + "dev": true, + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=16" } }, "node_modules/portfinder": { @@ -10061,10 +10024,9 @@ "optional": true }, "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "engines": { "node": ">=6" } @@ -10325,11 +10287,6 @@ "node": ">=0.10.0" } }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -10764,7 +10721,8 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true }, "node_modules/setprototypeof": { "version": "1.2.0", @@ -10805,17 +10763,6 @@ "node": ">=8" } }, - "node_modules/showdown": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/showdown/-/showdown-1.9.1.tgz", - "integrity": "sha512-9cGuS382HcvExtf5AHk7Cb4pAeQQ+h0eTr33V1mu+crYWV4KvWAw6el92bDrqGEk5d46Ai/fhbEUwqJ/mTCNEA==", - "dependencies": { - "yargs": "^14.2" - }, - "bin": { - "showdown": "bin/showdown.js" - } - }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -11081,6 +11028,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, "dependencies": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -11094,6 +11042,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, "dependencies": { "ansi-regex": "^4.1.0" }, @@ -12001,11 +11950,6 @@ "node": ">= 8" } }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -12021,19 +11965,6 @@ "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", "dev": true }, - "node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -12114,11 +12045,6 @@ "sax": "^1.2.4" } }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -12133,33 +12059,6 @@ "node": ">= 6" } }, - "node_modules/yargs": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", - "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", - "dependencies": { - "cliui": "^5.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^15.0.1" - } - }, - "node_modules/yargs-parser": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", - "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -14326,13 +14225,12 @@ } }, "@playwright/test": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.28.0.tgz", - "integrity": "sha512-vrHs5DFTPwYox5SGKq/7TDn/S4q6RA1zArd7uhO6EyP9hj3XgZBBM12ktMbnDQNxh/fL1IUKsTNLxihmsU38lQ==", + "version": "1.44.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.44.1.tgz", + "integrity": "sha512-1hZ4TNvD5z9VuhNJ/walIjvMVvYkZKf71axoF/uiAqpntQJXpG64dlXhoDXE3OczPuTuvjf/M5KWFg5VAVUS3Q==", "dev": true, "requires": { - "@types/node": "*", - "playwright-core": "1.28.0" + "playwright": "1.44.1" } }, "@popperjs/core": { @@ -14863,7 +14761,8 @@ "ansi-regex": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true }, "ansi-styles": { "version": "3.2.1", @@ -15340,7 +15239,8 @@ "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true }, "caniuse-lite": { "version": "1.0.30001420", @@ -15434,16 +15334,6 @@ "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, "clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", @@ -15922,11 +15812,6 @@ "ms": "2.1.2" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", @@ -16126,7 +16011,8 @@ "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true }, "emojis-list": { "version": "3.0.0", @@ -16697,14 +16583,6 @@ "pkg-dir": "^4.1.0" } }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, "follow-redirects": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", @@ -17412,7 +17290,8 @@ "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true }, "is-glob": { "version": "4.0.3", @@ -17748,15 +17627,6 @@ "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", "dev": true }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -18815,18 +18685,11 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "requires": { "p-try": "^2.0.0" } }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, "p-map": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", @@ -18857,7 +18720,8 @@ "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true }, "pacote": { "version": "12.0.3", @@ -18967,11 +18831,6 @@ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -19075,10 +18934,20 @@ } } }, + "playwright": { + "version": "1.44.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.44.1.tgz", + "integrity": "sha512-qr/0UJ5CFAtloI3avF95Y0L1xQo6r3LQArLIg/z/PoGJ6xa+EwzrwO5lpNr/09STxdHuUoP2mvuELJS+hLdtgg==", + "dev": true, + "requires": { + "fsevents": "2.3.2", + "playwright-core": "1.44.1" + } + }, "playwright-core": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.28.0.tgz", - "integrity": "sha512-nJLknd28kPBiCNTbqpu6Wmkrh63OEqJSFw9xOfL9qxfNwody7h6/L3O2dZoWQ6Oxcm0VOHjWmGiCUGkc0X3VZA==", + "version": "1.44.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.44.1.tgz", + "integrity": "sha512-wh0JWtYTrhv1+OSsLPgFzGzt67Y7BE/ZS3jEqgGBlp2ppp1ZDj8c+9IARNW4dwf1poq5MgHreEM2KV/GuR4cFA==", "dev": true }, "portfinder": { @@ -19506,10 +19375,9 @@ "optional": true }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" }, "qs": { "version": "6.11.0", @@ -19711,11 +19579,6 @@ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -20042,7 +19905,8 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true }, "setprototypeof": { "version": "1.2.0", @@ -20074,14 +19938,6 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "showdown": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/showdown/-/showdown-1.9.1.tgz", - "integrity": "sha512-9cGuS382HcvExtf5AHk7Cb4pAeQQ+h0eTr33V1mu+crYWV4KvWAw6el92bDrqGEk5d46Ai/fhbEUwqJ/mTCNEA==", - "requires": { - "yargs": "^14.2" - } - }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -20295,6 +20151,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -20305,6 +20162,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, "requires": { "ansi-regex": "^4.1.0" } @@ -20949,11 +20807,6 @@ "isexe": "^2.0.0" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, "wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -20969,16 +20822,6 @@ "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", "dev": true }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -21037,11 +20880,6 @@ "sax": "^1.2.4" } }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -21053,33 +20891,6 @@ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true }, - "yargs": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", - "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", - "requires": { - "cliui": "^5.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^15.0.1" - } - }, - "yargs-parser": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", - "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index e7b4c52e..3f3d63ce 100644 --- a/package.json +++ b/package.json @@ -1,15 +1,15 @@ { "name": "zonemaster-gui", - "version": "4.2.0", + "version": "4.3.0", "license": "BSD-2-Clause", "scripts": { "ng": "ng", "start": "ng serve", - "build": "node scripts/faq.js && ng build --configuration production", + "build": "ng build --configuration production", "release": "npm run build && node scripts/create_release.js", "lint": "ng lint", - "e2e": "playwright test", - "e2e:update": "playwright test --update-snapshots", + "e2e": "playwright --version && playwright test", + "e2e:update": "playwright --version && playwright test --update-snapshots", "e2e:install": "playwright install chromium", "e2e:install-deps": "playwright install-deps chromium", "e2e:test-server": "ng build --configuration=tests --localize && node scripts/test_server.js", @@ -30,8 +30,8 @@ "bootstrap": "^5.2.0", "file-saver": "^2.0.2", "fork-awesome": "^1.2.0", + "punycode": "^2.3.1", "rxjs": "^6.6.0", - "showdown": "^1.9.1", "tslib": "^2.0.0", "zone.js": "~0.11.4" }, @@ -40,7 +40,7 @@ "@angular/cli": "^13.3.9", "@angular/compiler-cli": "^13.3.11", "@angular/language-service": "^13.3.11", - "@playwright/test": "^1.28.0", + "@playwright/test": "^1.44.1", "@types/file-saver": "^2.0.1", "@types/node": "^13.11.0", "archiver": "^3.1.1", diff --git a/scripts/faq.js b/scripts/faq.js deleted file mode 100644 index e615aec1..00000000 --- a/scripts/faq.js +++ /dev/null @@ -1,38 +0,0 @@ -const https = require('https'); -const fs = require('fs'); -const showdown = require('showdown'); - -const dir_base = './docs/FAQ/'; - -const markdown_to_html = (text) => { - const faqHref = { - type: 'output', - regex: new RegExp('href="#', 'g'), - replace: 'href="./faq#' - } - const converter = new showdown.Converter({ - extensions: [faqHref], - noHeaderId: true // important to add this, else regex match doesn't work - }); - - const html = converter.makeHtml(text); - return html; -}; - -const getFaq = (filename) => { - var file = fs.createWriteStream(`./src/assets/faqs/${filename.split('.')[0]}.html`); - fs.readFile(dir_base + filename, 'utf8', function (err,data) { - if (err) { - return console.log(err); - } - const html = markdown_to_html(data); - file.write(html); - file.end; - }); -}; - -fs.readdir(dir_base, (err, files) => { - files.forEach(filename => { - getFaq(filename); - }); -}); diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 4bb390d0..df1b7e96 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,7 +1,7 @@ import { NgModule, APP_INITIALIZER } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { RouterModule, Routes } from '@angular/router'; -import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http'; +import { HttpClientModule } from '@angular/common/http'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { environment } from '../environments/environment'; @@ -29,11 +29,6 @@ import { AlertService } from './services/alert.service'; import { NavigationService } from './services/navigation.service'; import { HeaderComponent } from './components/header/header.component'; -import { HttpRequestInterceptor } from './interceptors/request.interceptor'; -import { HttpMockRequestInterceptor } from './interceptors/mock.interceptor'; - -export const isMock = environment.mock; - const appRoutes: Routes = [ { path: 'run-test/:domain', component: DomainComponent }, { path: 'run-test', component: DomainComponent }, @@ -82,11 +77,6 @@ const appRoutes: Routes = [ DnsCheckService, AlertService, NavigationService, - { - provide: HTTP_INTERCEPTORS, - useClass: isMock ? HttpMockRequestInterceptor : HttpRequestInterceptor, - multi: true - }, { provide: APP_INITIALIZER, useFactory: (appService: AppService) => { @@ -94,7 +84,8 @@ const appRoutes: Routes = [ }, multi: true, deps: [AppService] - } + }, + ...environment.extraProvider, ], bootstrap: [AppComponent] }) diff --git a/src/app/components/form/form.component.css b/src/app/components/form/form.component.css index 257171b4..58b246fc 100644 --- a/src/app/components/form/form.component.css +++ b/src/app/components/form/form.component.css @@ -71,9 +71,12 @@ form.domain { border: 1px solid transparent; } -.domain button.delete:focus-visible, .domain button.delete:hover { border-color: var(--primary-color); +} + +.domain button.delete:focus-visible { + border-color: var(--primary-color); box-shadow: 0 0 0 0.25rem var(--outline-focus-color); } @@ -181,22 +184,25 @@ hr { margin: 0; } -.domain button#advanced-toggle { - background: none; - border: none; - padding: 0; +.domain summary#advanced-toggle { font-weight: bold; + list-style-type: none; } -.domain button#advanced-toggle i { - width: 1em; - margin-right: .25em; - transform: rotate(0); - transition: 0.1s transform; +.domain summary#advanced-toggle i { + margin-right: .5em; } -.domain button#advanced-toggle[aria-expanded="true"] i { - transform: rotate(90deg); +.domain details#advanced-options summary#advanced-toggle .opened-label { + display: none; +} + +.domain details#advanced-options[open] summary#advanced-toggle .opened-label { + display: initial; +} + +.domain details#advanced-options[open] summary#advanced-toggle .closed-label { + display: none; } /* Domain input */ @@ -213,10 +219,6 @@ hr { margin: 0.5em 0; } -.domain .advanced > .col { - padding: 0; -} - .domain .reset-form { position: absolute; top: calc(0.5em); @@ -224,19 +226,26 @@ hr { right: 0.5rem; } -.domain .reset-form button:not(:disabled):hover i { - opacity: 1; -} - .domain .reset-form button { - border: none; - color: inherit; + color: white; padding: 0; + border-radius: 1em; + height: 2em; + width: 2em; + border: .2em solid white; + background-color: #939393; + display: flex; + justify-content: center; + align-items: center; +} + +.domain .reset-form button:not(:disabled):hover, +.domain .reset-form button:not(:disabled):focus { + background-color: rgb(48, 48, 48); } .domain .reset-form button i { - opacity: .5; - transition: opacity 0.1s; + font-size: 1.3em; } .domain .progress-value { diff --git a/src/app/components/form/form.component.html b/src/app/components/form/form.component.html index 5a4a06c8..5362efb3 100644 --- a/src/app/components/form/form.component.html +++ b/src/app/components/form/form.component.html @@ -1,18 +1,17 @@
- +
- -
Domain name required
+
Domain name required
{{ domain.errors.serverError }} @@ -26,7 +25,7 @@ i18n-title="form button" title="Clear domain input" class="btn grey"> - +
@@ -43,22 +42,13 @@
-
- -
+
+ + + Show options + Hide options + -
-
+
Nameservers
-
+
Nameserver #{{ i + 1}}
- +
-
- {{ ns.controls.ns.errors.serverError }} +
+ {{ nameserver.controls.ns.errors.serverError }}
-
+
The name of nameserver is required
-
+
diff --git a/src/app/components/form/form.component.ts b/src/app/components/form/form.component.ts index 430187c3..f0fe930c 100644 --- a/src/app/components/form/form.component.ts +++ b/src/app/components/form/form.component.ts @@ -1,4 +1,4 @@ -import {Component, EventEmitter, OnInit, Input, Output, SimpleChanges, OnChanges, SimpleChange, OnDestroy} from '@angular/core'; +import {Component, EventEmitter, OnInit, Input, Output, OnChanges, SimpleChange, OnDestroy, ViewChild, ElementRef } from '@angular/core'; import {ViewEncapsulation} from '@angular/core'; import { FormGroup, @@ -20,14 +20,18 @@ import { AlertService } from '../../services/alert.service'; encapsulation: ViewEncapsulation.None }) export class FormComponent implements OnInit, OnChanges, OnDestroy { - @Input() isAdvancedOptionEnabled = false; + @ViewChild('domainInput') domainInputView!: ElementRef; + @ViewChild('nameserversForm') nameserversFormView!: ElementRef; + @ViewChild('dsInfoForm') dsInfoFormView!: ElementRef; + @Input() formProgression; @Input() toggleFinished; @Input() profiles; @Output() onRunTest = new EventEmitter(); @Output() onFetchDataFromParent = new EventEmitter<[string, string]>(); - @Output() onOpenOptions = new EventEmitter(); + + private groupWithSubscription = new WeakSet(); private formConfig = { 'nameservers': { @@ -63,7 +67,8 @@ export class FormComponent implements OnInit, OnChanges, OnDestroy { constructor(private activatedRoute: ActivatedRoute, private formBuilder: FormBuilder, private titleService: Title, - private alertService: AlertService) {} + private alertService: AlertService) { + } ngOnInit() { this.titleService.setTitle('Zonemaster'); @@ -88,6 +93,14 @@ export class FormComponent implements OnInit, OnChanges, OnDestroy { this.routeParamsSubscription.unsubscribe(); } + get nameserversArray() { + return this.form.get('nameservers') as FormArray; + } + + get dsInfoArray() { + return this.form.get('ds_info') as FormArray; + } + private static atLeastOneProtocolValidator(control: AbstractControl) { const ipv4_disabled = control.get('disable_ipv4'); const ipv6_disabled = control.get('disable_ipv6'); @@ -200,6 +213,8 @@ export class FormComponent implements OnInit, OnChanges, OnDestroy { } currentForm.setErrors({'serverError': error.message}) } + + this.focusFirstError(); } @Input() @@ -215,6 +230,7 @@ export class FormComponent implements OnInit, OnChanges, OnDestroy { public resetForm() { this.form.controls.domain.reset(''); + this.domainInputView.nativeElement.focus(); } public resetFullForm() { @@ -231,12 +247,7 @@ export class FormComponent implements OnInit, OnChanges, OnDestroy { const group = this.formBuilder.group(value, this.formOpts[formName]); if (!isPrefilled) { - const valueChangesSubscription = group.valueChanges.subscribe((e) => { - if (group.pristine === false) { - this.addNewRow(formName); - valueChangesSubscription.unsubscribe(); - } - }); + this.addRowIfFormChange(group, formName); } else { group.markAsDirty(); } @@ -251,18 +262,46 @@ export class FormComponent implements OnInit, OnChanges, OnDestroy { control.removeAt(i); } } else { - if (index < control.length) { + const formElement = formName === 'nameservers' ? + this.nameserversFormView.nativeElement : + this.dsInfoFormView.nativeElement; + + if (control.length === 1 || (index === control.length - 1 && !control.at(index - 1).pristine)) { + control.at(index).reset(); + } else { control.removeAt(index); - } - if (control.length === 0) { - this.addNewRow(formName); + const buttons = formElement.querySelectorAll('button.delete'); + + if (index < buttons.length - 1) { + buttons[index + 1].focus(); + } else { + buttons[index - 1].focus(); + } } + + this.addRowIfFormChange(control.at(control.length - 1), formName); } + return false; } - private fetchDataFromParent(type) { + private addRowIfFormChange(group, formName) { + if (group.pristine && !this.groupWithSubscription.has(group)) { + const valueChangesSubscription = group.valueChanges.subscribe((e) => { + if (group.pristine === false) { + this.addNewRow(formName); + valueChangesSubscription.unsubscribe(); + this.groupWithSubscription.delete(group); + } + }); + + // Avoid subscribing the event multiple times + this.groupWithSubscription.add(group); + } + } + + public fetchDataFromParent(type) { this.domain.markAsTouched(); if (this.domain.invalid) { return false; @@ -290,8 +329,14 @@ export class FormComponent implements OnInit, OnChanges, OnDestroy { } } - private submitRunTest(submitValid = true) { + private focusFirstError() { + // small hack to execute this at the next tick when DOM has been updated + window.setTimeout(() => document.querySelector('[aria-invalid="true"]').focus(), 0) + } + + private submitRunTest() { this.form.markAllAsTouched(); + this.form.controls.domain.markAsDirty(); let param = this.form.value; param.domain = this.sanitizeDomain(param.domain); @@ -322,17 +367,15 @@ export class FormComponent implements OnInit, OnChanges, OnDestroy { digest: ds.digest }}); - if (submitValid == this.form.valid) { + if (this.form.valid) { this.onRunTest.emit(param); + } else { + this.focusFirstError(); } } public submitForm() { + console.log('submited') this.submitRunTest(); } - - public toggleOptions() { - this.isAdvancedOptionEnabled = !this.isAdvancedOptionEnabled - this.onOpenOptions.emit(this.isAdvancedOptionEnabled); - } } diff --git a/src/app/components/history/history.component.html b/src/app/components/history/history.component.html index cb92bc5e..ac7bbe43 100644 --- a/src/app/components/history/history.component.html +++ b/src/app/components/history/history.component.html @@ -24,7 +24,7 @@
  • - + {{ item.local_creation_time | date:'yyyy-MM-dd HH:mm zzzz' }} Undelegated diff --git a/src/app/components/history/history.component.ts b/src/app/components/history/history.component.ts index b9e9ed06..8d7a4c64 100644 --- a/src/app/components/history/history.component.ts +++ b/src/app/components/history/history.component.ts @@ -13,6 +13,7 @@ import {AlertService} from '../../services/alert.service'; export class HistoryComponent implements OnInit { @Input() history: any[]; + @Output() onTestClicked: EventEmitter = new EventEmitter(); public page = 1; public pageSize = 10; diff --git a/src/app/components/result/result.component.css b/src/app/components/result/result.component.css index b2412653..70f39409 100644 --- a/src/app/components/result/result.component.css +++ b/src/app/components/result/result.component.css @@ -373,7 +373,7 @@ } .result section.testcase header { - flex-direction: column; + flex-wrap: wrap; } .result section.testcase header .test-case-id { diff --git a/src/app/components/result/result.component.html b/src/app/components/result/result.component.html index 14b5bb09..6cda857e 100644 --- a/src/app/components/result/result.component.html +++ b/src/app/components/result/result.component.html @@ -8,9 +8,13 @@

    Test another domain

    -

    Test result for {{ form.domain }}

    +

    + Test result for + {{ unicodeDomain }} + ({{ asciiDomain }}) +

    @@ -225,6 +229,6 @@ diff --git a/src/app/components/result/result.component.ts b/src/app/components/result/result.component.ts index f034572d..05039e0c 100644 --- a/src/app/components/result/result.component.ts +++ b/src/app/components/result/result.component.ts @@ -9,6 +9,7 @@ import { AlertService } from '../../services/alert.service'; import { NavigationService } from '../../services/navigation.service'; import { formatDate, Location } from '@angular/common'; import { Title } from '@angular/platform-browser'; +import * as punycode from 'punycode/'; @Component({ selector: 'app-result', @@ -21,9 +22,12 @@ export class ResultComponent implements OnInit, OnDestroy { @Input('testId') testId: string; @ViewChild('resultView', {static: false}) resultView: ElementRef; @ViewChild('historyModal', {static: false}) historyModal: ElementRef; + @ViewChild('resultSectionHeading', {static: false}) resultSectionHeading: ElementRef; public displayForm = false; public form = {ipv4: true, ipv6: true, profile: 'default_profile', domain: ''}; + public unicodeDomain = ''; + public asciiDomain = ''; public result = []; public modules: any; public severity_icons = { @@ -32,7 +36,26 @@ export class ResultComponent implements OnInit, OnDestroy { 'warning': 'fa-exclamation-triangle', 'error': 'fa-times-circle', 'critical': 'fa-times-circle' - } + }; + public severityLevelNames = { + 'info': $localize `Info`, + 'notice': $localize `Notice`, + 'warning': $localize `Warning`, + 'error': $localize `Error`, + 'critical': $localize `Critical`, + }; + public moduleNames = { + 'system': $localize `System`, + 'basic': $localize `Basic`, + 'address': $localize `Address`, + 'connectivity': $localize `Connectivity`, + 'consistency': $localize `Consistency`, + 'delegation': $localize `Delegation`, + 'dnssec': $localize `DNSSEC`, + 'nameserver': $localize `Nameserver`, + 'syntax': $localize `Syntax`, + 'zone': $localize `Zone`, + }; public searchQueryLength = 0; public test: any = {params: {ipv4: false, ipv6: false}}; public isCollapsed = []; @@ -105,7 +128,10 @@ export class ResultComponent implements OnInit, OnDestroy { public openModal(content) { this.modalService.open(content).result.then((result) => { - console.log(result) + console.log(result); + // NOTE: this is a hack, I don't like it. + // angular-bootstrap move the focus back to the history button, we move it to the result section at next tick + window.setTimeout(() => this.resultSectionHeading.nativeElement.focus(), 0); }, (reason) => { console.log(reason); }); @@ -136,6 +162,8 @@ export class ResultComponent implements OnInit, OnDestroy { this.historyQuery = data['params']; this.result = data['results']; this.form = data['params']; + this.unicodeDomain = punycode.toUnicode(this.form.domain); + this.asciiDomain = punycode.toASCII(this.form.domain); this.testCaseDescriptions = data['testcase_descriptions']; this.testCasesCount = this.displayResult(this.result, resetCollapsed); @@ -164,7 +192,7 @@ export class ResultComponent implements OnInit, OnDestroy { }); } - this.titleService.setTitle(`${this.form.domain} · Zonemaster`); + this.titleService.setTitle(`${this.unicodeDomain} · Zonemaster`); }, error => { this.alertService.error($localize `No data for this test.`) }); @@ -268,8 +296,17 @@ export class ResultComponent implements OnInit, OnDestroy { } } + public getModuleName(moduleName) { + const moduleKey = moduleName.toLowerCase(); + if (moduleKey in this.moduleNames) { + return this.moduleNames[moduleKey]; + } else { + return moduleName; + } + } + private exportedName(extension) { - return `zonemaster_result_${this.form.domain}_${this.test.id}.${extension}` + return `zonemaster_result_${this.asciiDomain}_${this.test.id}.${extension}` } public exportJson() { @@ -285,8 +322,8 @@ export class ResultComponent implements OnInit, OnDestroy { for (let item of this.result) { tbodyContent += ` - ${item.module} - ${item.level} + ${this.getModuleName(item.module)} + ${this.severityLevelNames[item.level.toLowerCase()]} ${item.message} `; @@ -298,7 +335,7 @@ export class ResultComponent implements OnInit, OnDestroy { - ${this.form.domain} • Zonemaster Test Result + ${this.asciiDomain} • Zonemaster Test Result