Messages/init.php
2025-04-16 10:16:18 +02:00

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>