print.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <form method="post">
  2. <input type="radio" name="print" id="table" value="table" checked="">
  3. <label for="table">Tableau de mes enregistrements</label>
  4. <br>
  5. <input type="radio" name="print" id="ds" value="ds">
  6. <label for="ds">Enregistrement DS</label>
  7. <br>
  8. <input type="radio" name="print" id="raw" value="raw">
  9. <label for="raw">Fichier de zone brut</label>
  10. <br>
  11. <label for="zone">Zone</label>
  12. <select required="" name="zone" id="zone">
  13. <option value="" disabled="" selected="">-</option>
  14. <?php
  15. if (isset($_SESSION['username']))
  16. foreach (nsListUserZones($_SESSION['username']) as $zone)
  17. echo ' <option value="' . $zone . '">' . $zone . '</option>' . LF;
  18. ?>
  19. </select>
  20. <br>
  21. <input value="Afficher" type="submit">
  22. </form>
  23. <?php
  24. if (processForm()) {
  25. nsCheckZonePossession($_POST['zone']);
  26. $zoneContent = file_get_contents(CONF['ns']['knot_zones_path'] . '/' . $_POST['zone'] . 'zone');
  27. if ($zoneContent === false)
  28. output(500, 'Unable to read zone file.');
  29. if ($_POST['print'] === 'raw') {
  30. echo '<pre>' . htmlspecialchars($zoneContent) . '</pre>';
  31. output(200);
  32. }
  33. if ($_POST['print'] === 'table') { ?>
  34. <table>
  35. <tr>
  36. <th>Domaine</th>
  37. <th>TTL</th>
  38. <th>Type</th>
  39. <th>Contenu</th>
  40. </tr>
  41. <?php
  42. foreach(explode(LF, $zoneContent) as $zoneLine) {
  43. if (str_starts_with($zoneLine, ';')) continue; // Ignore comments
  44. if (empty($zoneLine)) continue;
  45. $elements = preg_split('/[\t ]+/', $zoneLine, 4);
  46. if (!in_array($elements[2], ALLOWED_TYPES, true)) continue; // Ignore records generated by Knot
  47. echo ' <tr>';
  48. foreach ($elements as $element)
  49. echo ' <td><code>' . htmlspecialchars($element) . '</code></td>';
  50. echo ' </tr>';
  51. }
  52. echo '</table>';
  53. }
  54. if ($_POST['print'] === 'ds') {
  55. $found = preg_match('/^' . preg_quote($_POST['zone']) . '[\t ]+0[\t ]+CDS[\t ]+(?<tag>[0-9]{1,5})[\t ]+(?<algo>[0-9]{1,2})[\t ]+(?<digest_type>[0-9])[\t ]+(?<digest>[0-9A-F]{64})$/m', $zoneContent, $matches);
  56. if ($found !== 1)
  57. output(500, 'Unable to get public key record from zone file.');
  58. ?>
  59. <dl>
  60. <dt>Zone</dt>
  61. <dd>
  62. <code><?= $_POST['zone'] ?></code>
  63. </dd>
  64. <dt>Tag</dt>
  65. <dd>
  66. <code><?= $matches['tag'] ?></code>
  67. </dd>
  68. <dt>Algorithme</dt>
  69. <dd>
  70. <code><?= $matches['algo'] ?></code><?php if ($matches['algo'] === '15') echo ' (Ed25519)'; ?>
  71. </dd>
  72. <dt>Type de condensat</dt>
  73. <dd>
  74. <code><?= $matches['digest_type'] ?></code><?php if ($matches['digest_type'] === '2') echo ' (SHA-256)'; ?>
  75. </dd>
  76. <dt>Condensat</dt>
  77. <dd>
  78. <code><?= $matches['digest'] ?></code>
  79. </dd>
  80. </dl>
  81. <?php
  82. output(200);
  83. }
  84. }