47 lines
1.8 KiB
PHP
47 lines
1.8 KiB
PHP
<?php
|
|
|
|
if (processForm()) {
|
|
$_POST['domain'] = formatAbsoluteDomain($_POST['domain']);
|
|
|
|
if (query('select', 'zones', ['zone' => $_POST['domain']], 'zone') !== [])
|
|
userError("Cette zone existe déjà sur ce service.");
|
|
|
|
$remoteNsRecords = array_column(dns_get_record($_POST['domain'], DNS_NS), 'target');
|
|
foreach ($remoteNsRecords as $i => $remoteNsRecord)
|
|
$remoteNsRecords[$i] = formatAbsoluteDomain($remoteNsRecord);
|
|
if (array_merge(array_diff($remoteNsRecords, CONF['ns']['servers']), array_diff(CONF['ns']['servers'], $remoteNsRecords)) !== [])
|
|
userError("Ce domaine n'a pas les bons enregistrements NS.");
|
|
|
|
$db = new PDO('sqlite:' . DB_PATH);
|
|
$stmt = $db->prepare("INSERT INTO zones(zone, username) VALUES(:zone, :username)");
|
|
|
|
$stmt->bindValue(':zone', $_POST['domain']);
|
|
$stmt->bindValue(':username', $_SESSION['username']);
|
|
|
|
$stmt->execute();
|
|
|
|
$knotZonePath = CONF['ns']['knot_zones_path'] . "/" . $_POST['domain'] . "zone";
|
|
$knotZone = $_POST['domain'] . ' 3600 SOA ' . CONF['ns']['servers'][0] . ' admin.niver.test. 1 21600 7200 3628800 3600' . "\n";
|
|
foreach (CONF['ns']['servers'] as $server)
|
|
$knotZone .= $_POST['domain'] . ' 86400 NS ' . $server . "\n";
|
|
if (is_int(file_put_contents($knotZonePath, $knotZone)) !== true)
|
|
serverError("Failed to write new zone file.");
|
|
if (chmod($knotZonePath, 0660) !== true)
|
|
serverError("Failed to chmod new zone file.");
|
|
|
|
knotcConfExec([
|
|
"set 'zone[" . $_POST['domain'] . "]'",
|
|
"set 'zone[" . $_POST['domain'] . "].template' 'niver-ns'",
|
|
]);
|
|
|
|
success("La requête a été traitée.");
|
|
}
|
|
|
|
?>
|
|
|
|
<form method="post">
|
|
<label for="domain">Domaine</label><br>
|
|
<input required="" placeholder="domain.<?= PLACEHOLDER_DOMAIN ?>." id="domain" name="domain" type="text"><br>
|
|
<input value="Ajouter" type="submit">
|
|
</form>
|