diff --git a/config.ini b/config.ini
index 896033d..1aa21c4 100644
--- a/config.ini
+++ b/config.ini
@@ -13,8 +13,10 @@ kdig_path = "/usr/bin/kdig"
[reg]
enabled = true
-registry = "niver.test."
-registry_file = "/srv/niver/reg/niver.test.zone"
+suffixes_path = "/srv/niver/reg"
+suffixes[niver.test.] = "approved"
+suffixes[test.niver.test.] = "all"
+suffixes[old.niver.test.] = "none"
ttl = 86400
; A local address to query the registry nameserver
address = "[::1]:42053"
diff --git a/fn/dns.php b/fn/dns.php
index 3b3ef57..8a65cab 100644
--- a/fn/dns.php
+++ b/fn/dns.php
@@ -2,7 +2,7 @@
function parseZoneFile($zone_content, $types, $filter_domain = false) {
$parsed_zone_content = [];
- foreach(explode(LF, $zone_content) as $zone_line) {
+ foreach (explode(LF, $zone_content) as $zone_line) {
if ($zone_line === '' OR str_starts_with($zone_line, ';'))
continue; // Ignore empty lines and comments
$elements = preg_split('/[\t ]+/', $zone_line, 4);
diff --git a/fn/reg.php b/fn/reg.php
index 26db8e0..d8f7d39 100644
--- a/fn/reg.php
+++ b/fn/reg.php
@@ -15,11 +15,12 @@ function regCheckDomainPossession($domain) {
function regDeleteDomain($domain) {
// Delete domain from registry file
- $regFile = file_get_contents(CONF['reg']['registry_file']);
- if ($regFile === false)
- output(500, 'Failed to read current registry File.');
- $regFile = preg_replace('/^(?:[a-z0-9._-]+\.)' . preg_quote($domain, '/') . '[\t ]+.+$/Dm', '', $regFile);
- if (file_put_contents(CONF['reg']['registry_file'], $regFile) === false)
+ $path = CONF['reg']['suffixes_path'] . '/' . regParseDomain($domain)['suffix'] . 'zone';
+ $content = file_get_contents($path);
+ if ($content === false)
+ output(500, 'Failed to read current registry file.');
+ $content = preg_replace('/^(?:[a-z0-9._-]+\.)' . preg_quote($domain, '/') . '[\t ]+.+$/Dm', '', $content);
+ if (file_put_contents($path, $content) === false)
output(500, 'Failed to write new registry file.');
// Delete from Niver's database
@@ -28,3 +29,17 @@ function regDeleteDomain($domain) {
'username' => $_SESSION['id'],
]);
}
+
+function regParseDomain($domain) {
+ $parts = explode('.', $domain, 2);
+ $subdomain = $parts[0];
+ $suffix = $parts[1];
+
+ if (array_key_exists($suffix, CONF['reg']['suffixes']) !== true)
+ output(403, 'This suffix doesn\'t exist.');
+
+ return [
+ 'subdomain' => $subdomain,
+ 'suffix' => $suffix,
+ ];
+}
diff --git a/locales/fr/C/LC_MESSAGES/messages.po b/locales/fr/C/LC_MESSAGES/messages.po
index fe0f022..4f329a4 100644
--- a/locales/fr/C/LC_MESSAGES/messages.po
+++ b/locales/fr/C/LC_MESSAGES/messages.po
@@ -1,3 +1,8 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Language: fr\n"
+
#: pages.php:9
msgid "Authentication"
msgstr "Authentification"
@@ -267,11 +272,11 @@ msgstr "Supprimer un accès"
msgid "Delete an existing HTTP access from a subdirectory of the SFTP space"
msgstr "Retirer un accès HTTP existant d'un sous-dossier de l'espace SFTP"
-#: router.php:120
+#: router.php:134
msgid "You need to be logged in to do this."
msgstr "Vous devez être connecté·e à un compte pour faire cela."
-#: router.php:122
+#: router.php:136
msgid "This account doesn't exist anymore. Log out to end this ghost session."
msgstr "Ce compte n'existe plus. Déconnectez-vous pour terminer cette session fantôme."
@@ -424,7 +429,7 @@ msgstr "Accès retiré."
#: pg-act/ns/ip.php:14 pg-act/ns/loc.php:70 pg-act/ns/mx.php:18
#: pg-act/ns/ns.php:14 pg-act/ns/srv.php:26 pg-act/ns/sshfp.php:23
#: pg-act/ns/tlsa.php:27 pg-act/ns/txt.php:15 pg-act/reg/ds.php:30
-#: pg-act/reg/glue.php:16 pg-act/reg/ns.php:13
+#: pg-act/reg/glue.php:12 pg-act/reg/ns.php:12
msgid "Modification done."
msgstr "Modification effectuée."
@@ -454,7 +459,7 @@ msgstr "Cette zone existe déjà sur ce service."
msgid "Parent zone's name servers not found."
msgstr "Serveurs de nom de la zone parente introuvables."
-#: pg-act/ns/zone-add.php:16 pg-act/reg/transfer.php:13
+#: pg-act/ns/zone-add.php:16 pg-act/reg/transfer.php:16
msgid "NS authentication record not found."
msgstr "Enregistrement d'authentification NS introuvable."
@@ -466,27 +471,27 @@ msgstr "Zone créée."
msgid "Zone deleted."
msgstr "Zone supprimée."
-#: pg-act/reg/register.php:4
+#: pg-act/reg/register.php:4 pg-act/reg/transfer.php:4
msgid "This format of subdomain is not allowed."
msgstr "Ce format de sous-domaine n'est pas autorisé."
-#: pg-act/reg/register.php:9
+#: pg-act/reg/register.php:21
msgid "This domain is already registered."
msgstr "Ce domain est déjà enregistré."
-#: pg-act/reg/register.php:12
+#: pg-act/reg/register.php:24
msgid "This domain is reserved."
msgstr "Ce domain est réservé."
-#: pg-act/reg/register.php:22
+#: pg-act/reg/register.php:34
msgid "Domain registered."
msgstr "Domaine enregistré."
-#: pg-act/reg/transfer.php:9
+#: pg-act/reg/transfer.php:12
msgid "The current account already owns this domain."
msgstr "Le compte actuel possède déjà ce domaine."
-#: pg-act/reg/transfer.php:26
+#: pg-act/reg/transfer.php:29
msgid "The domain has been transferred to the current account ; the NS authentication record has been automatically deleted."
msgstr "Le domaine a été transféré vers le compte actuel ; l'enregistrement d'authentification NS a été automatiquement supprimé."
@@ -569,11 +574,11 @@ msgid "Stable Let's Encrypt certificates"
msgstr "Vrai certificat Let's Encrypt"
#: pg-view/auth/login.php:1
-msgid "Need an accout?"
+msgid "New?"
msgstr "Nouvele ?"
-#: pg-view/auth/login.php:1 pg-view/reg/register.php:10
-msgid "Register"
+#: pg-view/auth/login.php:1 pg-view/auth/register.php:14
+msgid "Create an account"
msgstr "Créer un compte"
#: pg-view/auth/login.php:4 pg-view/auth/register.php:4 pg-view/ht/index.php:94
@@ -605,10 +610,6 @@ msgstr "Déjà un compte ?"
msgid "Minimum %1$s characters, or %2$s characters if it contains lowercase, uppercase and digit."
msgstr "Minimum %1$s caractères, ou %2$s caractères si elle contient minuscule, majuscule et chiffre."
-#: pg-view/auth/register.php:14
-msgid "Create an account"
-msgstr "Se créer un nouveau compte"
-
#: pg-view/auth/unregister.php:2
msgid "This will delete every resource managed by the current account, including registered domains, hosted DNS records, websites files and cryptographic keys for Onion services and DNSSEC."
msgstr "Ceci supprimera toutes les ressources gérées par le compte actuel, y compris les domaines enregistrés, les enregistrements DNS hébergés, les fichiers des sites et les clés cryptographiques des services Onion et de DNSSEC."
@@ -641,7 +642,8 @@ msgstr "Le domaine doit avoir les enregistrements suivant pendant le traitement
#: pg-view/ht/add-dns.php:25 pg-view/ns/form.ns.php:8 pg-view/ns/print.php:32
#: pg-view/ns/zone-add.php:6 pg-view/reg/ds.php:8 pg-view/reg/glue.php:8
#: pg-view/reg/glue.php:15 pg-view/reg/ns.php:8 pg-view/reg/print.php:2
-#: pg-view/reg/print.php:16 pg-view/reg/unregister.php:6
+#: pg-view/reg/print.php:16 pg-view/reg/register.php:7
+#: pg-view/reg/unregister.php:6
msgid "Domain"
msgstr "Domaine"
@@ -656,7 +658,8 @@ msgid "Setup access"
msgstr "Créer l'accès"
#: pg-view/ht/add-subdomain.php:2 pg-view/ns/form.ns.php:10
-#: pg-view/reg/glue.php:10 pg-view/reg/register.php:6
+#: pg-view/reg/glue.php:10 pg-view/reg/register.php:9
+#: pg-view/reg/transfer.php:9
msgid "Subdomain"
msgstr "Sous-domaine"
@@ -1072,16 +1075,24 @@ msgstr "Domaines actuellement enregistrés"
msgid "Register a new domain on your account. It must consist of between 4 and 63 letters and digits."
msgstr "Enregistrer un nouveau domaine sur son compte. Il doit être composé d'entre 4 et 63 lettres et chiffres."
+#: pg-view/reg/register.php:14 pg-view/reg/transfer.php:14
+msgid "Suffix"
+msgstr "Suffixe"
+
+#: pg-view/reg/register.php:28
+msgid "Register"
+msgstr "Enregistrer"
+
#: pg-view/reg/transfer.php:2
#, php-format
msgid "To prove that you are allowed to receive the domain by its current owner, the domain must have an NS record equal to %s when the form is being processed. The NS record will be automatically deleted once validated."
msgstr "Pour prouver que vous êtes autorisé à recevoir le domaine par san possessaire actuele, ledit domaine doit posséder un enregistrement NS égal à %s lors du traitement de ce formulaire. Cet enregistrement sera automatiquement retiré une fois validé."
-#: pg-view/reg/transfer.php:6
-msgid "Subdomain that will be transferred to this account"
-msgstr "Sous-domaine à transférer vers ce compte"
+#: pg-view/reg/transfer.php:7
+msgid "Domain that will be transferred to this account"
+msgstr "Domaine à transférer vers ce compte"
-#: pg-view/reg/transfer.php:10
+#: pg-view/reg/transfer.php:26
msgid "Receive the domain"
msgstr "Recevoir le domaine"
diff --git a/locales/messages.pot b/locales/messages.pot
index 0cf299d..bff598d 100644
--- a/locales/messages.pot
+++ b/locales/messages.pot
@@ -1,3 +1,7 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+
#: pages.php:9
msgid "Authentication"
msgstr ""
@@ -267,11 +271,11 @@ msgstr ""
msgid "Delete an existing HTTP access from a subdirectory of the SFTP space"
msgstr ""
-#: router.php:120
+#: router.php:134
msgid "You need to be logged in to do this."
msgstr ""
-#: router.php:122
+#: router.php:136
msgid "This account doesn't exist anymore. Log out to end this ghost session."
msgstr ""
@@ -424,7 +428,7 @@ msgstr ""
#: pg-act/ns/ip.php:14 pg-act/ns/loc.php:70 pg-act/ns/mx.php:18
#: pg-act/ns/ns.php:14 pg-act/ns/srv.php:26 pg-act/ns/sshfp.php:23
#: pg-act/ns/tlsa.php:27 pg-act/ns/txt.php:15 pg-act/reg/ds.php:30
-#: pg-act/reg/glue.php:16 pg-act/reg/ns.php:13
+#: pg-act/reg/glue.php:12 pg-act/reg/ns.php:12
msgid "Modification done."
msgstr ""
@@ -454,7 +458,7 @@ msgstr ""
msgid "Parent zone's name servers not found."
msgstr ""
-#: pg-act/ns/zone-add.php:16 pg-act/reg/transfer.php:13
+#: pg-act/ns/zone-add.php:16 pg-act/reg/transfer.php:16
msgid "NS authentication record not found."
msgstr ""
@@ -466,27 +470,27 @@ msgstr ""
msgid "Zone deleted."
msgstr ""
-#: pg-act/reg/register.php:4
+#: pg-act/reg/register.php:4 pg-act/reg/transfer.php:4
msgid "This format of subdomain is not allowed."
msgstr ""
-#: pg-act/reg/register.php:9
+#: pg-act/reg/register.php:21
msgid "This domain is already registered."
msgstr ""
-#: pg-act/reg/register.php:12
+#: pg-act/reg/register.php:24
msgid "This domain is reserved."
msgstr ""
-#: pg-act/reg/register.php:22
+#: pg-act/reg/register.php:34
msgid "Domain registered."
msgstr ""
-#: pg-act/reg/transfer.php:9
+#: pg-act/reg/transfer.php:12
msgid "The current account already owns this domain."
msgstr ""
-#: pg-act/reg/transfer.php:26
+#: pg-act/reg/transfer.php:29
msgid "The domain has been transferred to the current account ; the NS authentication record has been automatically deleted."
msgstr ""
@@ -569,11 +573,11 @@ msgid "Stable Let's Encrypt certificates"
msgstr ""
#: pg-view/auth/login.php:1
-msgid "Need an accout?"
+msgid "New?"
msgstr ""
-#: pg-view/auth/login.php:1 pg-view/reg/register.php:10
-msgid "Register"
+#: pg-view/auth/login.php:1 pg-view/auth/register.php:14
+msgid "Create an account"
msgstr ""
#: pg-view/auth/login.php:4 pg-view/auth/register.php:4 pg-view/ht/index.php:94
@@ -605,10 +609,6 @@ msgstr ""
msgid "Minimum %1$s characters, or %2$s characters if it contains lowercase, uppercase and digit."
msgstr ""
-#: pg-view/auth/register.php:14
-msgid "Create an account"
-msgstr ""
-
#: pg-view/auth/unregister.php:2
msgid "This will delete every resource managed by the current account, including registered domains, hosted DNS records, websites files and cryptographic keys for Onion services and DNSSEC."
msgstr ""
@@ -641,7 +641,8 @@ msgstr ""
#: pg-view/ht/add-dns.php:25 pg-view/ns/form.ns.php:8 pg-view/ns/print.php:32
#: pg-view/ns/zone-add.php:6 pg-view/reg/ds.php:8 pg-view/reg/glue.php:8
#: pg-view/reg/glue.php:15 pg-view/reg/ns.php:8 pg-view/reg/print.php:2
-#: pg-view/reg/print.php:16 pg-view/reg/unregister.php:6
+#: pg-view/reg/print.php:16 pg-view/reg/register.php:7
+#: pg-view/reg/unregister.php:6
msgid "Domain"
msgstr ""
@@ -656,7 +657,8 @@ msgid "Setup access"
msgstr ""
#: pg-view/ht/add-subdomain.php:2 pg-view/ns/form.ns.php:10
-#: pg-view/reg/glue.php:10 pg-view/reg/register.php:6
+#: pg-view/reg/glue.php:10 pg-view/reg/register.php:9
+#: pg-view/reg/transfer.php:9
msgid "Subdomain"
msgstr ""
@@ -1072,16 +1074,24 @@ msgstr ""
msgid "Register a new domain on your account. It must consist of between 4 and 63 letters and digits."
msgstr ""
+#: pg-view/reg/register.php:14 pg-view/reg/transfer.php:14
+msgid "Suffix"
+msgstr ""
+
+#: pg-view/reg/register.php:28
+msgid "Register"
+msgstr ""
+
#: pg-view/reg/transfer.php:2
#, php-format
msgid "To prove that you are allowed to receive the domain by its current owner, the domain must have an NS record equal to %s when the form is being processed. The NS record will be automatically deleted once validated."
msgstr ""
-#: pg-view/reg/transfer.php:6
-msgid "Subdomain that will be transferred to this account"
+#: pg-view/reg/transfer.php:7
+msgid "Domain that will be transferred to this account"
msgstr ""
-#: pg-view/reg/transfer.php:10
+#: pg-view/reg/transfer.php:26
msgid "Receive the domain"
msgstr ""
diff --git a/pages.php b/pages.php
index c7ae861..3aa4aee 100644
--- a/pages.php
+++ b/pages.php
@@ -43,12 +43,12 @@ define('PAGES', [
],
'reg' => [
'index' => [
- 'title' => ' = _('Need an accout?') ?> = _('Register') ?> = _('New?') ?> = _('Create an account') ?>' . CONF['reg']['registry'] . '
'),
- 'description' => sprintf(_('Register and delegate a %s subdomain'), '' . CONF['reg']['registry'] . '
'),
+ 'title' => ' ' . sprintf(_('%s registry'), '' . key(CONF['reg']['suffixes']) . '
'),
+ 'description' => sprintf(_('Register and delegate a %s subdomain'), '' . key(CONF['reg']['suffixes']) . '
'),
],
'register' => [
'title' => _('Register domain'),
- 'description' => sprintf(_('Get a %s subdomain'), '' . CONF['reg']['registry'] . '
'),
+ 'description' => sprintf(_('Get a %s subdomain'), '' . key(CONF['reg']['suffixes']) . '
'),
'tokens_account_cost' => 3600,
],
'unregister' => [
@@ -61,7 +61,7 @@ define('PAGES', [
],
'ns' => [
'title' => sprintf(_('%s records'), 'NS'),
- 'description' => sprintf(_('Indicate the name servers of a %s subdomain'), '' . CONF['reg']['registry'] . '
'),
+ 'description' => sprintf(_('Indicate the name servers of a %s subdomain'), '' . key(CONF['reg']['suffixes']) . '
'),
],
'ds' => [
'title' => sprintf(_('%s records'), 'DS'),
diff --git a/pg-act/ns/edit.php b/pg-act/ns/edit.php
index 80bedfe..174666b 100644
--- a/pg-act/ns/edit.php
+++ b/pg-act/ns/edit.php
@@ -68,7 +68,7 @@ if ($zone_content === false)
output(500, 'Unable to read zone file.');
$data['zone_content'] = '';
-foreach(explode(LF, $zone_content) as $zone_line) {
+foreach (explode(LF, $zone_content) as $zone_line) {
if (empty($zone_line) OR str_starts_with($zone_line, ';'))
continue;
if (preg_match('/^(?:(?:[a-z0-9_-]{1,63}\.){1,127})?' . preg_quote($_POST['zone'], '/') . '[\t ]+[0-9]{1,8}[\t ]+(?