102 lines
4.5 KiB
PHP
102 lines
4.5 KiB
PHP
<?php
|
|
|
|
/*
|
|
* smzint/Messages (c) schmamazon.com 2025
|
|
*/
|
|
|
|
if(include('ready.php')){
|
|
echo "FEHLER: Ihr Account scheint bereits inizialisiert worden zu sein.";
|
|
die();
|
|
}
|
|
|
|
|
|
if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
|
$username = filter_var($_POST["username"], FILTER_SANITIZE_STRING);
|
|
if (empty($username)) {
|
|
//Prüft ob Eingabe leer ist
|
|
$nameErr = "Benutzername is required";
|
|
} else {
|
|
// Prüft auf illegale Zeichen
|
|
if (!preg_match("/^[a-z0-9]+$/",$username)) {
|
|
$nameErr = "Nur Kleinbuchstaben und Zahlen sind zugelassen.";
|
|
}else{
|
|
//Prüft auf Mindestlänge
|
|
if(mb_strlen($username)<4){
|
|
$nameErr = "Mindestens vier (4) Zeichen.";
|
|
}else{
|
|
//Prüft, ob Nutzername frei ist
|
|
include('search.php');
|
|
if(username($username) == FALSE){
|
|
$nameErr = "Der Nutzername kann verwendet werden.";
|
|
//Prüft ob angegebenes Passwort richtig ist
|
|
$password = filter_var($_POST["password"], FILTER_SANITIZE_STRING);
|
|
if(password_verify($password, $upassword_hash)){
|
|
//Alle Schritte erfolgreich. Nun müssen die Schlüssel generiert werden. Der private key muss außerdem mit $password verschlüsselt werden. Dann müssen der $username, $publicKey und der verschlüsselte $privateKey in die Datenbank gespeichert werden.
|
|
|
|
// Hinweis: Die Erstellung mit openssl scheint missbilligt zu werden -> Investigieren
|
|
// Erstellung durch sodium ist zuvor jedoch fehlgeschlagen (Extension problems)
|
|
$privateKeyobject = openssl_pkey_new(['private_key_bits' => 2048, 'private_key_type' => OPENSSL_KEYTYPE_RSA]);
|
|
openssl_pkey_export($privateKeyobject, $privateKey);
|
|
$keyDetails = openssl_pkey_get_details($privateKeyobject);
|
|
$publicKey = $keyDetails['key'];
|
|
//$privateKey muss noch symetrisch mit $password verschlüsselt werden
|
|
|
|
|
|
|
|
//FLUSH EVERYTHING IN DATABASE NOW!!!!
|
|
|
|
global $dbservername;
|
|
global $dbusername;
|
|
global $dbpassword;
|
|
global $dbname;
|
|
|
|
$conn = new mysqli($dbservername, $dbusername, $dbpassword, $dbname);
|
|
if ($conn->connect_error) {
|
|
die("Server Error");
|
|
}
|
|
$sql = "INSERT INTO smz_messages_users (uid, username, publicKey, privateKey) VALUES ('$uid', '$username', '$publicKey', '$privateKey')";
|
|
|
|
if ($conn->query($sql) === TRUE) {
|
|
echo "<h1>ACCOUNT ERFOLGREICH EINGERICHTET\nSCHLIEẞEN SIE DIESEN TAB UMGEHEND!</h1>";
|
|
} else {
|
|
echo "Error: " . $sql . "<br>" . $conn->error;
|
|
}
|
|
|
|
$conn->close();
|
|
|
|
/*
|
|
PHP Fatal error: Uncaught Error: Call to undefined function sodium_crypto_box_keypair()
|
|
scheint irgendwie an xampp zu liegen
|
|
php.ini bereits angepasst bringt absolut nichts
|
|
ist wahrscheinlich zeitverschwendung
|
|
einfach mal auf strato testen
|
|
|
|
UPDATE: funktioniert auch auf Strato nicht
|
|
*/
|
|
|
|
|
|
}else{
|
|
$passwdErr = "Das Passwort ist falsch. Achten Sie darauf Ihr aktuelles Auth Passwort einzugeben.";
|
|
}
|
|
}else{
|
|
$nameErr = "Dieser Benutzername ist leider bereits vergeben.";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
?>
|
|
<div>
|
|
<div>Auf dieser Seite wird Ihr vorhandener Auth Account für die Nutzung mit Messages eingerichtet.<br>Dies umfasst zwei Schritte: <li>Im Ersten legen Sie Ihren Benutzernamen fest.</li><li>Im Zweiten erzeugt unser System verschiedene Kryptographische Schlüssel, um die Ende-zu-Ende Verschlüsselung zu ermöglichen. Sie müssen hierfür Ihr aktuelles Passwort eingeben.</li> Sie können danach Messages nutzen.</div><br><div><p>Nun legen Sie Ihren persönlichen Benutzernamen für Messages an. Andere Benutzer sehen Sie mit diesem Namen.</p><p><strong>Er muss einmalig sein.</strong><br>Es sind nur <strong>Kleinbuchstaben und Zahlen</strong> zugelassen und der Nutzername muss mindestens vier Zeichen lang sein.</p></div>
|
|
<form action="init.php" method="post">
|
|
<label for="username">Benutzername:</label><br>
|
|
<input type="text" id="username" name="username" required>
|
|
<span class="error">* <?php echo $nameErr;?></span><br>
|
|
<label for="username">Aktuelles Auth Passwort:</label><br>
|
|
<input type="password" id="password" name="password" required>
|
|
<span class="error">* <?php echo $passwdErr;?></span><br>
|
|
<input type="submit">
|
|
</form>
|
|
</div>
|
|
<scipt>
|