Prüfe die Tauglichkeit eines Domain-Kontakts für die spezifische Endung
Bernd Wurst

Bernd Wurst commited on 2025-12-24 16:33:25
Zeige 7 geänderte Dateien mit 41 Einfügungen und 3 Löschungen.

... ...
@@ -47,7 +47,7 @@ output('<div class="contact-list">');
47 47
 $contacts = get_contacts();
48 48
 $have_invalid = false;
49 49
 foreach ($contacts as $c) {
50
-    if (possible_domainholder($c)) {
50
+    if (possible_domainholder($c, $_SESSION['contacts_choose_domainname'])) {
51 51
         output(internal_link('', display_contact($c), "id={$c['id']}", 'class="contacts-choose"'));
52 52
     } else {
53 53
         $have_invalid = true;
... ...
@@ -60,6 +60,20 @@ function apicontact_to_contact($ac)
60 60
 }
61 61
 
62 62
 
63
+function missing_properties_for_tld($nic_id, $extension)
64
+{
65
+    $data = ["contactId" => $nic_id,
66
+            "allocation" => "owner",
67
+            "domainSuffixes" => [$extension]];
68
+    $result = api_request('contactUsableFor', $data);
69
+    if ($result['status'] == 'success') {
70
+        if (count($result['response']['missingProperties']) > 0) {
71
+            return $result['response']['missingProperties'];
72
+        }
73
+        return [];
74
+    }
75
+    return null;
76
+}
63 77
 
64 78
 function download_contact($nic_id)
65 79
 {
... ...
@@ -98,8 +98,21 @@ function possible_domainholders()
98 98
     return $ret;
99 99
 }
100 100
 
101
-function possible_domainholder($c)
101
+function possible_domainholder($c, $domainname=null)
102 102
 {
103
+    if ($domainname && $c['nic_id']) {
104
+        // Wenn NIC-ID nicht gesetzt ist, dann ignorieren wir das hier. Doof, eigentlich.
105
+        $tld = preg_replace('/^.*\./', '', $domainname);
106
+        $missing = missing_properties_for_tld($c['nic_id'], $tld);
107
+        if ($missing === null) {
108
+            logger(LOG_WARNING, "Es konnte nicht sicher geprüft werden, ob der Kontakt #{$c['id']} ({$c['name']}) für die Endung {$tld} nutzbar ist.");
109
+        } elseif ($missing === []) {
110
+            return true;
111
+        } else {
112
+            warning("Dem Kontakt #{$c['id']} ({$c['name']}) fehlen für die Endung {$tld} folgende Datenfelder: " . implode(',', $missing) . "\n Diese Datenfelder können nur über den Support gesetzt werden!");
113
+            return false;
114
+        }
115
+    }
103 116
     if ($c['name'] && $c['address'] && $c['zip'] && $c['city'] && $c['country'] && $c['phone'] && $c['email']) {
104 117
         return true;
105 118
     }
... ...
@@ -31,12 +31,14 @@ if (isset($_GET['type'])) {
31 31
         $t = 'Verwalter';
32 32
     }
33 33
     $_SESSION['contacts_choose_header'] = 'Wählen Sie einen neuen ' . $t . ' für die Domain ' . $_SESSION['domains_' . $caller . '_domainname'];
34
+    $_SESSION['contacts_choose_domainname'] = $_SESSION['domains_' . $caller . '_domainname'];
34 35
     $_SESSION['contacts_choose_key'] = 'domains_' . $caller . '_' . $function;
35 36
     $_SESSION['contacts_choose_redirect'] = '../domains/choose';
36 37
     redirect('../contacts/choose');
37 38
 } else {
38 39
     unset($_SESSION['contacts_choose_key']);
39 40
     unset($_SESSION['contacts_choose_header']);
41
+    unset($_SESSION['contacts_choose_domainname']);
40 42
     unset($_SESSION['contacts_choose_redirect']);
41 43
     $backto = $_SESSION['domains_choose_redirect'];
42 44
     unset($_SESSION['domains_choose_redirect']);
... ...
@@ -107,7 +107,7 @@ output('<p>Legen Sie hier einen neuen Inhaber für diese Domain fest.</p>');
107 107
 if ($_SESSION['domains_domainreg_owner'] === null) {
108 108
     $kundenkontakte = get_kundenkontakte();
109 109
     $customer = get_contact($kundenkontakte['kunde']);
110
-    if (possible_domainholder($customer)) {
110
+    if (possible_domainholder($customer, $dom->fqdn)) {
111 111
         $_SESSION['domains_domainreg_owner'] = $kundenkontakte['kunde'];
112 112
     } else {
113 113
         warning('Der Stammkontakt dieses Kundenkontos enthält nicht alle Daten, die als Domaininhaber ausgefüllt sein müssen. Wählen Sie daher bitte einen anderen Kontakt aus.');
... ...
@@ -79,7 +79,12 @@ $recipient = $customer['email'];
79 79
 if ($debugmode) {
80 80
     $recipient = config('adminmail');
81 81
 }
82
+if (!$debugmode) {
83
+    // Keine Mail im Debug-Mode versenden
82 84
     send_mail($customer['email'], 'Domainregistrierung ' . $dom->fqdn, $msg);
85
+} else {
86
+    warning("Im Debug-Modus wurde KEINE Bestätigungsmail versendet!");
87
+}
83 88
 
84 89
 api_register_domain($dom->fqdn, $authinfo);
85 90
 
... ...
@@ -123,6 +123,10 @@ function api_register_domain($domainname, $authinfo = null)
123 123
         upload_contact($admin_c);
124 124
         $admin_c = get_contact($dom['admin_c']);
125 125
     }
126
+    if (!possible_domainholder($owner, $domainname)) {
127
+        system_failure("Der Domain-Inhaber-Kontakt scheint nicht qualifiziert zu sein für diese Domainendung. Bitte wenden Sie sich an den Support.");
128
+    }
129
+
126 130
     $owner = $owner['nic_id'];
127 131
     $admin_c = $admin_c['nic_id'];
128 132
 
129 133