Bernd Wurst commited on 2018-02-20 11:35:38
Zeige 8 geänderte Dateien mit 295 Einfügungen und 2 Löschungen.
... | ... |
@@ -0,0 +1,17 @@ |
1 |
+ |
|
2 |
+ |
|
3 |
+ |
|
4 |
+ |
|
5 |
+$(document).ready(function(){ |
|
6 |
+ $('div#buttons').show(); |
|
7 |
+ $('div#transfer').hide(); |
|
8 |
+ $('div#external').hide(); |
|
9 |
+ |
|
10 |
+ $('button#domain-external').click( function() { |
|
11 |
+ $('div#transfer').hide(); |
|
12 |
+ $('div#buttons').hide(); |
|
13 |
+ $('div#external').show(); |
|
14 |
+ }); |
|
15 |
+ $(".buttonset").buttonset(); |
|
16 |
+ |
|
17 |
+}); |
... | ... |
@@ -0,0 +1,131 @@ |
1 |
+<?php |
|
2 |
+/* |
|
3 |
+This file belongs to the Webinterface of schokokeks.org Hosting |
|
4 |
+ |
|
5 |
+Written 2008-2018 by schokokeks.org Hosting, namely |
|
6 |
+ Bernd Wurst <bernd@schokokeks.org> |
|
7 |
+ Hanno Böck <hanno@schokokeks.org> |
|
8 |
+ |
|
9 |
+To the extent possible under law, the author(s) have dedicated all copyright and related and neighboring rights to this software to the public domain worldwide. This software is distributed without any warranty. |
|
10 |
+ |
|
11 |
+You should have received a copy of the CC0 Public Domain Dedication along with this software. If not, see |
|
12 |
+http://creativecommons.org/publicdomain/zero/1.0/ |
|
13 |
+ |
|
14 |
+Nevertheless, in case you use a significant part of this code, we ask (but not require, see the license) that you keep the authors' names in place and return your changes to the public. We would be especially happy if you tell us what you're going to do with this code. |
|
15 |
+*/ |
|
16 |
+ |
|
17 |
+require_once('inc/security.php'); |
|
18 |
+require_once('inc/icons.php'); |
|
19 |
+require_once('inc/jquery.php'); |
|
20 |
+javascript(); |
|
21 |
+ |
|
22 |
+require_once('domainapi.php'); |
|
23 |
+require_once('domains.php'); |
|
24 |
+ |
|
25 |
+require_role(ROLE_CUSTOMER); |
|
26 |
+ |
|
27 |
+title("Domain hinzufügen"); |
|
28 |
+$section='domains_domains'; |
|
29 |
+ |
|
30 |
+output('<p>Mit dieser Funktion können Sie eine neue Domain bestellen oder eine bestehende, extern registrierte Domain verfügbar machen.</p>'); |
|
31 |
+ |
|
32 |
+$form = '<p>Domainname: <input type="text" name="domain" size="50" /> <input type="submit" value="Verfügbarkeit prüfen" />'; |
|
33 |
+ |
|
34 |
+output(html_form('adddomain_search', '', '', $form)); |
|
35 |
+ |
|
36 |
+if (isset($_REQUEST['domain'])) { |
|
37 |
+ if (strpos($_REQUEST['domain'], ' ') !== false) { |
|
38 |
+ warning('Leerzeichen sind in Domainnamen nicht erlaubt.'); |
|
39 |
+ redirect(''); |
|
40 |
+ } |
|
41 |
+ $avail = api_domain_available($_REQUEST['domain']); |
|
42 |
+ if ($avail == 'available') { |
|
43 |
+ output('<p class="domain-available">Die Domain '.filter_input_general($_REQUEST['domain']).' ist verfügbar!</p>'); |
|
44 |
+ # Neue Domain eintragen |
|
45 |
+ $data = get_domain_offer($_REQUEST['domain']); |
|
46 |
+ if (!$data) { |
|
47 |
+ redirect(''); |
|
48 |
+ } |
|
49 |
+ $form = '<p>Folgende Konditionen gelten bei Registrierung der Domain im nächsten Schritt:</p> |
|
50 |
+ <table> |
|
51 |
+ <tr><td>Domainname:</td><td><strong>'.$data['domainname'].'</strong></td></tr> |
|
52 |
+ <tr><td>Jahresgebühr:</td><td style="text-align: right;">'.$data['gebuehr'].' €</td></tr> |
|
53 |
+ <tr><td>Setup-Gebühr (einmalig):</td><td style="text-align: right;">'.$data['setup'].' €</td></tr>'; |
|
54 |
+ $users = list_useraccounts(); |
|
55 |
+ if (count($users) > 1) { |
|
56 |
+ $userselect = array(); |
|
57 |
+ foreach ($users as $u) { |
|
58 |
+ $userselect[$u['uid']] = $u['username'].' / '.$u['name']; |
|
59 |
+ } |
|
60 |
+ |
|
61 |
+ |
|
62 |
+ $form .= '<tr><td>Benutzeraccount:</td><td>'.html_select('uid', $userselect).'</td></tr>'; |
|
63 |
+ } |
|
64 |
+ $form .='</table>'; |
|
65 |
+ |
|
66 |
+ |
|
67 |
+ $form .= '<p><input type="hidden" name="domain" value="'.filter_input_general($_REQUEST['domain']).'"> |
|
68 |
+ <input type="submit" name="submit" value="Ich möchte diese Domain registrieren"></p>'; |
|
69 |
+ output(html_form('domains_register', 'domainreg', '', $form)); |
|
70 |
+ output('<p>'.internal_link('domains', 'Zurück').'</p>'); |
|
71 |
+ } elseif ($avail == 'registered' || $avail == 'alreadyRegistered') { |
|
72 |
+ output('<p class="domain-unavailable">Die Domain '.filter_input_general($_REQUEST['domain']).' ist bereits vergeben.</p>'); |
|
73 |
+ |
|
74 |
+ output('<h3>Domain zu '.config('company_name').' umziehen</h3>'); |
|
75 |
+ $data = get_domain_offer($_REQUEST['domain']); |
|
76 |
+ |
|
77 |
+ if (! $data) { |
|
78 |
+ // Die Include-Datei setzt eine passende Warning-Nachricht |
|
79 |
+ output('<p>Eine Registrierung ist nicht automatisiert möglich. Bitte wenden Sie sich an den Support.'); |
|
80 |
+ } else { |
|
81 |
+ |
|
82 |
+ $form = '<p>Folgende Konditionen gelten beim Transfer der Domain im nächsten Schritt:</p> |
|
83 |
+ <table> |
|
84 |
+ <tr><td>Domainname:</td><td><strong>'.$data['domainname'].'</strong></td></tr> |
|
85 |
+ <tr><td>Jahresgebühr:</td><td style="text-align: right;">'.$data['gebuehr'].' €</td></tr> |
|
86 |
+ <tr><td>Setup-Gebühr (einmalig):</td><td style="text-align: right;">'.$data['setup'].' €</td></tr>'; |
|
87 |
+ $form .='</table>'; |
|
88 |
+ |
|
89 |
+ |
|
90 |
+ $form .= '<p><input type="hidden" name="domain" value="'.filter_input_general($_REQUEST['domain']).'"> |
|
91 |
+ <input type="submit" name="submit" value="Ich möchte diese Domain zu '.config('company_name').' umziehen"></p>'; |
|
92 |
+ |
|
93 |
+ output(html_form('domains_transferin', 'domainreg', '', $form)); |
|
94 |
+ |
|
95 |
+ } |
|
96 |
+ output('<h3>Diese Domain als externe Domain nutzen</h3>'); |
|
97 |
+ output('<p>Sie können diese Domain für Konfigurationen bei uns nutzen ohne einen Transfer vorzunehmen.</p> |
|
98 |
+ <p><strong>Beachten Sie:</strong> Um diese Domain nutzen zu können, benötigen Sie bei Ihrem bisherigen Domainregistrar die Möglichkeit, DNS-Records anzulegen oder die zuständigen DNS-Server zu ändern. Sie können dann entweder unsere DNS-Server nutzen oder einzelne DNS-Records auf unsere Server einrichten.</p>'); |
|
99 |
+ |
|
100 |
+ output('<p>Mit Betätigen des unten stehenden Knopfes bestätigen Sie, dass Sie entweder der Domaininhaber sind oder mit expliziter Zustimmung des Domaininhabers handeln.</p>'); |
|
101 |
+ $form = '<p class="buttonset" id="buttonset-external"> |
|
102 |
+ <input type="radio" name="dns" id="option-dns-enable" value="enable" /> |
|
103 |
+ <label for="option-dns-enable">Lokalen DNS-Server aktivieren</label> |
|
104 |
+ <input type="radio" name="dns" id="option-dns-disable" value="disable" checked="checked" /> |
|
105 |
+ <label for="option-dns-disable">Weiterhin externen DNS verwenden</label> |
|
106 |
+ </p>'; |
|
107 |
+ |
|
108 |
+ $form .= '<p><input type="hidden" name="domain" value="'.filter_input_general($_REQUEST['domain']).'"> |
|
109 |
+ <input type="submit" name="submit" value="Diese Domain bei '.config('company_name').' verwenden"></p>'; |
|
110 |
+ |
|
111 |
+ output(html_form('domains_external', 'useexternal', '', $form)); |
|
112 |
+ output('</div>'); |
|
113 |
+ |
|
114 |
+ } else { |
|
115 |
+ output('<p class="domain-unavailable">Die Domain '.filter_input_general($_REQUEST['domain']).' kann nicht registriert werden.</p>'); |
|
116 |
+ |
|
117 |
+ switch ($avail) { |
|
118 |
+ case 'nameContainsForbiddenCharacter': |
|
119 |
+ output('<p>Der Domainname enthält unerlaubte Zeichen.</p>'); |
|
120 |
+ break; |
|
121 |
+ case 'suffixDoesNotExist': |
|
122 |
+ case 'suffixCannotBeRegistered': |
|
123 |
+ output('<p>Diese Endung ist nicht verfügbar.</p>'); |
|
124 |
+ break; |
|
125 |
+ default: |
|
126 |
+ output('<p>Ein Fehler ist aufgetreten beim Prüfen der Verfügbarkeit. Eventuell geht es später wieder.</p>'); |
|
127 |
+ |
|
128 |
+ } |
|
129 |
+ } |
|
130 |
+ |
|
131 |
+} |
... | ... |
@@ -98,3 +98,22 @@ function api_upload_domain($fqdn) |
98 | 98 |
} |
99 | 99 |
|
100 | 100 |
|
101 |
+function api_domain_available($domainname) |
|
102 |
+{ |
|
103 |
+ $args = array("domainNames" => array($domainname)); |
|
104 |
+ $result = api_request('domainStatus', $args); |
|
105 |
+ $resp = $result["responses"][0]; |
|
106 |
+ return $resp["status"]; |
|
107 |
+ /* |
|
108 |
+ alreadyRegistered You (or a sub account) already registered the domain |
|
109 |
+ registered Somebody else registered domain |
|
110 |
+ nameContainsForbiddenCharacter Domain name contains invalid characters |
|
111 |
+ available Domain is available for registration |
|
112 |
+ suffixDoesNotExist Domain suffix does not exist |
|
113 |
+ suffixCannotBeRegistered You are not allowed to register a domain with this suffix |
|
114 |
+ canNotCheck System is currently unable to check availability |
|
115 |
+ unknown Other problems or difficulties occured |
|
116 |
+ */ |
|
117 |
+} |
|
118 |
+ |
|
119 |
+ |
... | ... |
@@ -185,4 +185,75 @@ function get_txt_record($hostname, $domainname, $tld) { |
185 | 185 |
} |
186 | 186 |
|
187 | 187 |
|
188 |
+function list_useraccounts() |
|
189 |
+{ |
|
190 |
+ $customerno = (int) $_SESSION['customerinfo']['customerno']; |
|
191 |
+ $result = db_query("SELECT uid,username,name FROM system.useraccounts WHERE kunde=?", array($customerno)); |
|
192 |
+ $ret = array(); |
|
193 |
+ while ($item = $result->fetch()) |
|
194 |
+ { |
|
195 |
+ $ret[] = $item; |
|
196 |
+ } |
|
197 |
+ DEBUG($ret); |
|
198 |
+ return $ret; |
|
199 |
+} |
|
200 |
+ |
|
201 |
+ |
|
202 |
+function get_domain_offer($domainname) |
|
203 |
+{ |
|
204 |
+ $domainname = filter_input_hostname($domainname); |
|
205 |
+ $domainname = preg_replace('/^www\./', '', $domainname); |
|
206 |
+ |
|
207 |
+ $basename = preg_replace('/([^\.]+)\..*$/', '\1', $domainname); |
|
208 |
+ DEBUG('Found Basename: '.$basename); |
|
209 |
+ $tld = preg_replace('/^[^\.]*\./', '', $domainname); |
|
210 |
+ DEBUG('Found TLD: '.$tld); |
|
211 |
+ |
|
212 |
+ $cid = (int) $_SESSION['customerinfo']['customerno']; |
|
213 |
+ |
|
214 |
+ $result = db_query("SELECT id FROM kundendaten.domains WHERE domainname=:domainname AND tld=:tld", array("domainname" => $basename, "tld" => $tld)); |
|
215 |
+ if ($result->rowCount() != 0) { |
|
216 |
+ warning('Diese Domain ist in unserem System bereits vorhanden und kann daher nicht noch einmal eingetragen werden.'); |
|
217 |
+ return; |
|
218 |
+ } |
|
219 |
+ |
|
220 |
+ $data = array("domainname" => $domainname, "basename" => $basename, "tld" => $tld); |
|
221 |
+ |
|
222 |
+ $result = db_query("SELECT tld, gebuehr, setup FROM misc.domainpreise_kunde WHERE kunde=:cid AND tld=:tld AND ruecksprache='N'", array(":cid" => $cid, ":tld" => $tld)); |
|
223 |
+ if ($result->rowCount() != 1) { |
|
224 |
+ $result = db_query("SELECT tld, gebuehr, setup FROM misc.domainpreise WHERE tld=:tld AND ruecksprache='N'", array(":tld" => $tld)); |
|
225 |
+ } |
|
226 |
+ if ($result->rowCount() != 1) { |
|
227 |
+ warning('Die Endung »'.$tld.'« steht zur automatischen Eintragung nicht zur Verfügung.'); |
|
228 |
+ return; |
|
229 |
+ } |
|
230 |
+ $temp = $result->fetch(); |
|
231 |
+ $data["gebuehr"] = $temp["gebuehr"]; |
|
232 |
+ $data["setup"] = ($temp["setup"] ? $temp["setup"] : 0.0); |
|
233 |
+ |
|
234 |
+ return $data; |
|
235 |
+} |
|
236 |
+ |
|
237 |
+ |
|
238 |
+function insert_domain_external($domain, $dns) |
|
239 |
+{ |
|
240 |
+ $cid = (int) $_SESSION['customerinfo']['customerno']; |
|
241 |
+ if (strpos($domain, ' ') !== false) { |
|
242 |
+ system_failure("Ungültige Zeichen im Domainname"); |
|
243 |
+ } |
|
244 |
+ $parts = explode('.', $domain); |
|
245 |
+ if (count($parts) !== 2) { |
|
246 |
+ system_failure("Ungültiger Domainname"); |
|
247 |
+ } |
|
248 |
+ $domainname = $parts[0]; |
|
249 |
+ $tld = $parts[1]; |
|
250 |
+ db_query("INSERT INTO kundendaten.domains (kunde, domainname, tld, billing, provider, dns, mailserver_lock) VALUES |
|
251 |
+ (?, ?, ?, 'external', 'other', 0, 1)", array($cid, $domainname, $tld)); |
|
252 |
+ $id = db_insert_id(); |
|
253 |
+ if ($dns) { |
|
254 |
+ db_query("UPDATE kundendaten.domains SET dns=1 WHERE id=?", array($id)); |
|
255 |
+ } |
|
256 |
+ return $id; |
|
257 |
+} |
|
258 |
+ |
|
188 | 259 |
|
... | ... |
@@ -0,0 +1,21 @@ |
1 |
+ |
|
2 |
+p.domain-unavailable { |
|
3 |
+ padding: 1em; |
|
4 |
+ background: #faa; |
|
5 |
+ border: 2px solid #f00; |
|
6 |
+ font-weight: bold; |
|
7 |
+ font-size: 200%; |
|
8 |
+} |
|
9 |
+p.domain-available { |
|
10 |
+ padding: 1em; |
|
11 |
+ background: #afa; |
|
12 |
+ border: 2px solid #0f0; |
|
13 |
+ font-weight: bold; |
|
14 |
+ font-size: 200%; |
|
15 |
+} |
|
16 |
+ |
|
17 |
+div#buttons { |
|
18 |
+ display: none; |
|
19 |
+} |
|
20 |
+ |
|
21 |
+ |
... | ... |
@@ -0,0 +1,34 @@ |
1 |
+<?php |
|
2 |
+/* |
|
3 |
+This file belongs to the Webinterface of schokokeks.org Hosting |
|
4 |
+ |
|
5 |
+Written 2008-2018 by schokokeks.org Hosting, namely |
|
6 |
+ Bernd Wurst <bernd@schokokeks.org> |
|
7 |
+ Hanno Böck <hanno@schokokeks.org> |
|
8 |
+ |
|
9 |
+To the extent possible under law, the author(s) have dedicated all copyright and related and neighboring rights to this software to the public domain worldwide. This software is distributed without any warranty. |
|
10 |
+ |
|
11 |
+You should have received a copy of the CC0 Public Domain Dedication along with this software. If not, see |
|
12 |
+http://creativecommons.org/publicdomain/zero/1.0/ |
|
13 |
+ |
|
14 |
+Nevertheless, in case you use a significant part of this code, we ask (but not require, see the license) that you keep the authors' names in place and return your changes to the public. We would be especially happy if you tell us what you're going to do with this code. |
|
15 |
+*/ |
|
16 |
+ |
|
17 |
+require_once('inc/security.php'); |
|
18 |
+require_once('inc/icons.php'); |
|
19 |
+ |
|
20 |
+require_once('domains.php'); |
|
21 |
+require_role(ROLE_CUSTOMER); |
|
22 |
+ |
|
23 |
+title("Externe Domain hinzufügen"); |
|
24 |
+$section='domains_domains'; |
|
25 |
+ |
|
26 |
+if (!isset($_REQUEST['domain'])) { |
|
27 |
+ system_failure('Kein Domainname übergeben'); |
|
28 |
+} |
|
29 |
+ |
|
30 |
+$id = insert_domain_external($_REQUEST['domain'], ($_REQUEST['dns'] === 'enable')); |
|
31 |
+ |
|
32 |
+redirect('verify?id='.$id); |
|
33 |
+ |
|
34 |
+ |
... | ... |
@@ -56,7 +56,7 @@ $section = 'domains_domains'; |
56 | 56 |
output('<p>Bitte wenden Sie eine der unten genannten Methoden an um die Domain-Inhaberschaft zu bestätigen. Erst nach diesem Schritt können Sie diese Domain bei uns als Mail-Domain nutzen.</p>'); |
57 | 57 |
output('<p>Die Zeichenkette zur Bestätigung lautet <strong>'.$dom->secret.'</strong>.</p>'); |
58 | 58 |
output('<p>Richten Sie bitte auf dem zuständigen DNS-Server einen DNS-Record vom Typ TXT unter dem Hostname <strong>_schokokeks.'.$dom->fqdn.'</strong> ein und hinterlegen Sie dort diese Zeichenkette als Inhalt:</p> |
59 |
-<p><code>_schokokeks.'.$dom->fqdn.' IN TXT "'.$dom->secret.'"</code></p> |
|
59 |
+<p><code>_schokokeks.'.$dom->fqdn.'. IN TXT "'.$dom->secret.'"</code></p> |
|
60 | 60 |
<p>Beachten Sie, dass Aktualisierungen am DNS-Server i.d.R. mit einigen Minuten verzögerung abgerufen werden können.</p>'); |
61 | 61 |
#output('<p>Sie können diese entweder als DNS-Record vom Typ TXT unter dem Hostname <strong>_schokokeks.'.$dom->fqdn.'</strong> einrichten oder auf dem zuständigen Webserver eine Datei hinterlegen mit dem Code als Inhalt und der Abruf-URL <strong>http://'.$dom->fqdn.'/'.$dom->secret.'.txt</strong></p>'); |
62 | 62 |
output('<p>'.internal_link('', other_icon('refresh.png').' Diese Seite neu laden um den DNS-Record zu prüfen', "id={$dom->id}&ts=".time()).'</p>'); |
63 | 63 |