This commit is contained in:
vincent 2025-04-16 09:32:19 +02:00
parent 84da0c9656
commit dad99e12c5
4 changed files with 142 additions and 2 deletions

30
index.php Normal file
View file

@ -0,0 +1,30 @@
<?php
/*
* smzint/Messages (c) schmamazon.com 2025
*/
include('../Auth/index.php');
?>
<!DOCTYPE html>
<html>
<body>
<h1>smzint/Messages</h1>
<div><h2>Willkommen zu Messages <?php echo $uname; ?>!</h2><br>
<p>
Über diesen Dienst können Ende-zu-Ende verschlüsselte Nachrichten zwischen Schmamazon Nutzern ausgetauscht werden.<br>
</p>
<p>
<?php
if(!include('ready.php')){
echo "Ihr Account wurde noch nicht für Messages eingerichtet.";
}else{
echo "Ihr Account ist bereit für die Nutzung von Messages.";
}
?>
</p>
</div>
</body>
</html>

110
init.php Normal file
View file

@ -0,0 +1,110 @@
<?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 "ACCOUNT ERFOLGREICH EINGERICHTET\nSCHLIEẞEN SIE DIESEN TAB UMGEHEND!";
} 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" value="<?php echo $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>
<script>
document
.addEventListener("DOMContentLoaded",
function () {
alert('ACHTUNG:\nDiese Seite ist instabil und fehleranfällig!');
});
</script>

View file

@ -6,7 +6,7 @@
include('../Auth/index.php'); include('../Auth/index.php');
include('/smzint/Auth/db.ini.php'); include('../Auth/db.ini.php');
$conn = new mysqli($dbservername, $dbusername, $dbpassword, $dbname); $conn = new mysqli($dbservername, $dbusername, $dbpassword, $dbname);
if ($conn->connect_error) { if ($conn->connect_error) {

View file

@ -4,7 +4,7 @@
* smzint/Messages (c) schmamazon.com 2025 * smzint/Messages (c) schmamazon.com 2025
*/ */
include('/smzint/Auth/db.ini.php'); include('../Auth/db.ini.php');
function username($uname){ function username($uname){
global $dbservername; global $dbservername;