From 31bacaeb361b9925b03c1bacf91e9e08fe246fd4 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 16 Apr 2018 14:18:26 +0200 Subject: [PATCH] Implement multilanguage This completes the multilanguage support For this a new setting in the config got added "defaultLanguage" --- config.sample.php | 9 ++- lang/lang.de-de.php | 30 +++++++++- lang/lang.en-gb.php | 66 +++++++++++++++++++++ lang/mail.de-de.php | 124 ++++++++++++++++++++++++++++++++++++++++ lang/mail.en-gb.php | 118 ++++++++++++++++++++++++++++++++++++++ language.php | 7 ++- mail_templates.php | 113 ++++-------------------------------- public/index.php | 49 ++++++++-------- public/verify.php | 22 ++++--- public/verify_admin.php | 8 +-- 10 files changed, 400 insertions(+), 146 deletions(-) create mode 100644 lang/lang.en-gb.php create mode 100644 lang/mail.de-de.php create mode 100644 lang/mail.en-gb.php diff --git a/config.sample.php b/config.sample.php index 12152c8..43a3370 100644 --- a/config.sample.php +++ b/config.sample.php @@ -1,18 +1,25 @@ "example.com", "access_token" => "To be used for sending the registration notification", + // Which e-mail-adresse shall the bot use to send e-mails? "register_email" => 'register_bot@example.com', // Where should the bot post registration requests to? "register_room" => '$registerRoomID:example.com', + // Where is the public part of the bot located? make sure you have a / at the end "webroot" => "https://myregisterdomain.net/", + // optional: Do you have a place where howTo's are located? If not leave this value out "howToURL" => "https://my-url-for-storing-howTos.net", + // When you want to collect the password on registration set this to true "getPasswordOnRegistration" => false, + + // default language: one of [ en-gb | de-de ] + "defaultLanguage" => "en-gb", + // to define where the data should be stored: "databaseURI" => "sqlite:" . dirname(__FILE__) . "/db_file.sqlite", // credentials for sqlite not used diff --git a/lang/lang.de-de.php b/lang/lang.de-de.php index 3dd390b..ded1271 100644 --- a/lang/lang.de-de.php +++ b/lang/lang.de-de.php @@ -1,5 +1,4 @@ "Akzeptieren", + "DECLINE" => "Ablehnen", + "SUCCESS" => "Erfolgreich", + "FIRST_NAME" => "Vorname", + "LAST_NAME" => "Nachname", + "USERNAME" => "Nutzername (für den Login)", + "PASSWORD" => "Passwort", + "PASSWORD_CONFIRM" => "Passwort bestätigen", + "EMAIL_ADDRESS" => "E-Mail-Adresse", + "REGISTER" => "Registrieren", + "NOTE" => "Hinweis", "NO_CONFIGURATION" => "Es konnte keine Konfiguration gefunden werden.", + "UNKNOWN_ERROR" => "Unbekannter Fehler", "UNKNOWN_SESSION" => "Sitzungstoken nicht vorhanden oder ungültig.", "UNKNOWN_USERNAME" => "Nutzername fehlt", "UNKNOWN_TOKEN" => "Token ist unbekannt", @@ -25,18 +36,31 @@ $language = array( "USERNAME_REGISTERED" => "Dieser Nutzername wurde bereits registriert. Bitte wähle einen anderen Nutzernamen", "PASSWORD_NOT_MATCH" => "Passwörter stimmen nicht überein", "NOTE_LENGTH_EXEEDED" => "Notiz ist länger als die erlaubten 50 Zeichen", + "PLACEHOLDER_NOTE_ABOUT_YOURSELF" => "Notiz zu dir (max. 50 Zeichen)", "EMAIL_INVALID_FORMAT" => "Keine valide E-Mail-Adresse angegeben", - "FIRSTNAME_INVALID_FORMAT" => "Vorname hat ungültiges Format", - "SIRNAME_INVALID_FORMAT" => "Nachname hat ungültiges Format", + "FIRSTNAME_INVALID_FORMAT" => "Vorname muss das Format haben", + "SIRNAME_INVALID_FORMAT" => "Nachname muss das Format haben", "SEND_MAIL_FAIL" => "Senden der E-Mail fehlgeschlagen", "SEND_MATRIX_FAIL" => "Senden einer Nachricht an die Administratoren fehlgeschlagen", + "TASK_CHECK_YOUR_EMAIL_VERIFY" => "Bitte prüfe deine E-Mails um deine Adresse zu bestätigen", "REGISTRATION_REQUEST_FAILED" => "Registrierungsanfrage ist fehlgeschlagen", "REGISTRATION_FAILED" => "Registrierung ist fehlgeschlagen", + "REGISTRATION_FAILED_FOR" => "Registrierung für @user ist fehlgeschlagen", "VERIFICATION_SUCEEDED" => "Verifizierung erfolgreich", "VERIFICATION_FAILED" => "Verifizierung fehlgeschlagen", "VERIFICATION_SUCCESS_BODY" => "Vielen Dank. Die Administratoren wurden informiert", "ADMIN_VERIFY_SITE_TITLE" => "Registrierungsanfrage bearbeiten", "ADMIN_REGISTER_ACCEPTED_BODY" => "Die Registrierungsanfrage wurde akzeptiert. Der Nutzer wurde per Mail informiert.", "ADMIN_REGISTER_DECLINED_BODY" => "Die Registrierungsanfrage wurde angelehnt. Der Nutzer wurde per Mail informiert.", + "JUMP_TO_HOMEPAGE" => "Zur Startseite", + "TOPIC_PLEASE_REGISTER" => "Bitte für @homeserver registrieren2-Schritt-Registrierung", + "NOTE_FOR_REGISTRATION" => "@homeserver ist ein geschlossenes Chat-Netzwerk in dem jeder Nutzer bestätigt werden muss.
+ Du bekommst eine E-Mail wenn jemand deine Mitgliedschaft bestätigt hat. An diese wird auch dein initiales Passwort gesendet. + Hinterlasse also bitte einen Hinweis zu dir (den nur die Administratoren sehen werden).
+ Liebe Grüße vom Team von @homeserver", + "MSG_USER_WANTS_REGISTER" => "@name möchte sich registrieren und hat folgende Notiz hinterlassen: + @note \r\nZum Bearbeiten hier klicken:\r\n @adminUrl", + "MSG_USER_WANTS_REGISTER_FORMATTED" => "@name möchte sich registrieren und hat folgende Notiz hinterlassen:
+ @note
Zum Bearbeiten hier klicken", ); ?> diff --git a/lang/lang.en-gb.php b/lang/lang.en-gb.php new file mode 100644 index 0000000..281d569 --- /dev/null +++ b/lang/lang.en-gb.php @@ -0,0 +1,66 @@ + "Accept", + "DECLINE" => "Decline", + "SUCCESS" => "Success", + "FIRST_NAME" => "First name", + "LAST_NAME" => "Last name", + "USERNAME" => "username (for login)", + "PASSWORD" => "Password", + "PASSWORD_CONFIRM" => "Confirm password", + "EMAIL_ADDRESS" => "EMail Address", + "REGISTER" => "Register", + "NOTE" => "Note", + "NO_CONFIGURATION" => "No configuration found", + "UNKNOWN_ERROR" => "Unknown Error", + "UNKNOWN_SESSION" => "Session token not found of invalid.", + "UNKNOWN_USERNAME" => "username unknown", + "UNKNOWN_TOKEN" => "Token is unknown", + "USERNAME_LENGTH_INVALID" => "Username cpnsists pf more than 20 or less than 3 characters", + "USERNAME_NOT_ALNUM" => "Username is not alphanumeric", + "USERNAME_PENDING_REGISTRATION" => "This username is locked for registration. Try again later or try again with a different username", + "USERNAME_REGISTERED" => "This username is already registered. Please try again with another username", + "PASSWORD_NOT_MATCH" => "passwords do not match", + "NOTE_LENGTH_EXEEDED" => "Note consists of more than 50 characters", + "PLACEHOLDER_NOTE_ABOUT_YOURSELF" => "Note about yourself (max. 50 characters)", + "EMAIL_INVALID_FORMAT" => "no valid email address", + "FIRSTNAME_INVALID_FORMAT" => "First name with invalid formatting", + "SIRNAME_INVALID_FORMAT" => "Sirname with invalid formatting", + "SEND_MAIL_FAIL" => "Email could not be sent", + "SEND_MATRIX_FAIL" => "Sending a message to the admins failed", + "TASK_CHECK_YOUR_EMAIL_VERIFY" => "Please check your emails to verify your email address", + "REGISTRATION_REQUEST_FAILED" => "Registration request failed", + "REGISTRATION_FAILED" => "Registration failed", + "REGISTRATION_FAILED_FOR" => "Registrierung für @user ist fehlgeschlagen", + "VERIFICATION_SUCEEDED" => "Verification suceeded", + "VERIFICATION_FAILED" => "Verification failed", + "VERIFICATION_SUCCESS_BODY" => "Thank you. The admins got informed", + "ADMIN_VERIFY_SITE_TITLE" => "Handle registration request", + "ADMIN_REGISTER_ACCEPTED_BODY" => "The registration request got accepted. The user got notified per email.", + "ADMIN_REGISTER_DECLINED_BODY" => "The registration request got declined. The user got notified per email.", + "JUMP_TO_HOMEPAGE" => "To homepage", + "TOPIC_PLEASE_REGISTER" => "Please register for @homeserver2-Step-Registration", + "NOTE_FOR_REGISTRATION" => "@homeserver is a closed chat network where every user has to be confirmed.
+ You will get an email once sb. approved your registration. An initial password will be send to you afterwards. + Please leave a note about yourself (that will only be shown to the admins).
+ Greetings from the team of @homeserver", + "MSG_USER_WANTS_REGISTER" => "@name wants to register and left the following note: + @note \r\nTo handle that request:\r\n @adminUrl", + "MSG_USER_WANTS_REGISTER_FORMATTED" => "@name wants to register and left the following note:
+ @note
To handle that request click here", +); +?> diff --git a/lang/mail.de-de.php b/lang/mail.de-de.php new file mode 100644 index 0000000..1e06948 --- /dev/null +++ b/lang/mail.de-de.php @@ -0,0 +1,124 @@ + diff --git a/lang/mail.en-gb.php b/lang/mail.en-gb.php new file mode 100644 index 0000000..af94c8d --- /dev/null +++ b/lang/mail.en-gb.php @@ -0,0 +1,118 @@ + diff --git a/language.php b/language.php index b46ff67..14fe117 100644 --- a/language.php +++ b/language.php @@ -14,7 +14,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -$lang = "de-de"; +require_once("config.php"); +$lang = $config["defaultLanguage"]; + if (isset($_GET['lang'])) { $lang = filter_var($_GET['lang'], FILTER_SANITIZE_STRING); } @@ -23,6 +25,7 @@ if (!file_exists($lang_file)) { error_log("Translation for " . $lang . " not found. Fallback to 'de-de'"); $lang = "de-de"; } +$lang_file = dirname(__FILE__) . "/lang/lang." . $lang . ".php"; require_once($lang_file); unset($lang_file); -?> \ No newline at end of file +?> diff --git a/mail_templates.php b/mail_templates.php index 72e1400..b3c9c23 100644 --- a/mail_templates.php +++ b/mail_templates.php @@ -14,109 +14,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -function send_mail($receiver, $subject, $body) { - include("config.php"); - $headers = "From: " . $config["register_email"] . "\r\n" - . "Content-Type: text/plain;charset=utf-8"; - return mail($receiver, $subject, $body, $headers); +require_once("config.php"); +$lang = $config["defaultLanguage"]; +if (isset($_GET['lang'])) { + $lang = filter_var($_GET['lang'], FILTER_SANITIZE_STRING); } - -function send_mail_pending_verification($homeserver, $user, $receiver, $verify_url) { - $subject = "Bitte bestätige Registrierung auf $homeserver"; - $body = "Guten Tag " . $user . ", - -Du hast anscheinend versucht dich auf $homeserver zu registrieren. -Hier gibt es eine zweistufige Registrierung. - -Wir möchten dich bitten, dass du kurz bestätigst, dass du die Registrierung durchgeführt hast. -Gehe dafür auf folgenden Link: -$verify_url - -Erst anschließend werden die Administratoren über deine Registrierungsanfrage informiert. - -Hinweis: Du hast ca. 48 Stunden Zeit um die Bestätigung durchzuführen. -Danach ist eine Re-Registrierung mit deinem gewünschten Nutzernamen für andere wieder möglich. - -Vielen Dank für dein Verständnis. - -Das Administratoren-Team von " . $homeserver; - return send_mail($receiver, $subject, $body); +$lang_file = dirname(__FILE__) . "/lang/mail." . $lang . ".php"; +if (!file_exists($lang_file)) { + error_log("Mail templates for '" . $lang . "' not found. Fallback to 'de-de'"); + $lang = "de-de"; } - -function send_mail_pending_approval($homeserver, $user, $receiver) { - $subject = "Registrierung wartet auf Bestätigung durch Administratoren"; - $body = "Guten Tag " . $user . ", - -Deine Registrierungsanfrage wurde verifiziert und wird nun durch die Administratoren überprüft. - -Du bekommst eine weitere E-Mail, sobald deine Registrierung bestätigt oder ablehnt wurde. - -Vielen Dank für dein Verständnis. - -Das Administratoren-Team von " . $homeserver; - return send_mail($receiver, $subject, $body); -} - -function send_mail_registration_allowed_but_failed($homeserver, $user, $receiver) { - $subject = "Registrierung auf $homeserver genehmigt."; - $body = "Guten Tag " . $user . ", - -Deine Registrierungsanfrage wurde durch die Administratoren bestätigt. - -Leider ist beim Registrieren ein Fehler aufgetaucht. Der Registrierungversuch wird bald wiederholt. -Wir hoffen, das Problem ist bald behoben. -Wir melden uns, wenn die Registrierung erfolgreich war. - -Das Administratoren-Team von " . $homeserver; - return send_mail($receiver, $subject, $body); -} - -function send_mail_registration_success($homeserver, $user, $receiver, $username, $password, $howToURL) { - $subject = "Registrierung auf $homeserver erfolgreich."; - $body = "Guten Tag " . $user . ", - -Deine Registrierungsanfrage wurde durch die Administratoren bestätigt. - -Zum Anmelden kannst du folgende Zugangsdaten verwenden: -Nutzername: $username -Passwort: $password - -Hinweis: Das Passwort kannst du aktuell über die App selbst ändern. Auch wenn das Passwort nirgends -im Klartext gespeichert wird, kann jemand Zugriff auf diese Mail erlangen und so den Zugriff bekommen. -"; - /* - Wichtig: Bitte ändere das Passwort direkt nach der Anmeldung. - Es wird zwar von unserer Seite nicht gespeichert, doch fremde könnten Zugriff auf diese E-Mail - erhalten und so deinen Account kompromittieren. - */ - if (!empty($howToURL)) { - $body .= " -Zu weiteren Hilfestellungen findest du hier eine Auflistung von verschiedenen -Anleitungen zu verschiedenen Clients: -$howToURL\n"; - } - $body .= " -Viel Spaß bei der Verwendung von $homeserver. -Bei Fragen findest du nach der Anmeldung ein paar Räume in denen du sie stellen kannst. - -Das Administratoren-Team von " . $homeserver; - return send_mail($receiver, $subject, $body); -} - -function send_mail_registration_decline($homeserver, $user, $receiver, $reason) { - $subject = "Registrierung auf $homeserver abgelehnt."; - $body = "Guten Tag " . $user . ", - -Deine Registrierungsanfrage wurde durch die Administratoren abgelehnt.\n"; - - if (empty($reason)) { - $body .= "\nEs wurde kein Grund angegeben\n"; - } else { - $body .= "\nAls Grund wurde folgendes angegeben:\n$reason\n"; - } - - $body .= "\nDas Administratoren-Team von " . $homeserver; - return send_mail($receiver, $subject, $body); -} - +require_once($lang_file); +unset($lang_file); ?> diff --git a/public/index.php b/public/index.php index 269f26e..12fac63 100644 --- a/public/index.php +++ b/public/index.php @@ -74,7 +74,7 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") { if (!isset($res["verify_token"])) { error_log("sth. went wrong. registration did not throw but admin_token not set"); - throw Exception("Unknown Error"); + throw Exception("UNKNOWN_ERROR"); } $verify_token = $res["verify_token"]; @@ -86,11 +86,11 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") { $mx_db->setRegistrationStateVerify( ($success ? RegisterState::PendingEmailVerify : RegisterState::PendingEmailSend), $verify_token); - print("Erfolgreich"); + print("" . $language["SUCCESS"] . ""); print(""); - print("

Erfolgreich

"); - print("

Bitte überprüfe deine E-Mails um deine E-Mail-Adresse zu bestätigen.

"); - print("Zur Registrierungsseite"); + print("

" . $language["SUCCESS"] . "

"); + print("

" . $language["TASK_CHECK_YOUR_EMAIL_VERIFY"] . "

"); + print("" . $language["JUMP_TO_HOMEPAGE"] . ""); } catch (Exception $e) { print("" . $language["REGISTRATION_REQUEST_FAILED"] . ""); print(""); @@ -100,7 +100,7 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") { } else { print("

" . $e->getMessage() . "

"); } - print("Zur Registrierungsseite"); + print("" . $language["JUMP_TO_HOMEPAGE"] . ""); } } else { $_SESSION["token"] = bin2hex(random_bytes(16)); @@ -129,7 +129,7 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") {
-

Bitte für registrieren2-Schritt-Registrierung

+

$config["homeserver"] ]); ?>

@@ -137,53 +137,52 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") {
+ placeholder="" pattern="[A-Z][a-z]+">
+ placeholder="" pattern="[A-Z][a-z]+">
- + " required>
- + ">
+ placeholder="" pattern="[a-z1-9]{3,20}" required>
- + " required>
- + " required>
"> - + " class="btn btn-info btn-block"> -

Hinweis:
- ist ein geschlossenes Chat-Netzwerk in dem jeder Nutzer bestätigt werden muss.
- Du bekommst eine E-Mail wenn jemand deine Mitgliedschaft bestätigt hat. An diese wird auch dein initiales Passwort gesendet. - Hinterlasse also bitte einen Hinweis zu dir (der nur den entsprechenden Personen gezeigt wird).
- Liebe Grüße vom Team von -

+ " . $language["NOTE"] . ":
"; + echo strtr($language["NOTE_FOR_REGISTRATION"], [ "@homeserver" => $config["homeserver"] ]); + echo "

"; + } ?>
@@ -192,21 +191,21 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") {