enhancement
major
minor
defect
critical
major
minor
major
#30223
Self-Service-E-Mails: Texte in der Servicekonfiguration bearbeitbar, Sprache der Einladung wählbar
Weiterverfolgung von #30041.
Hintergrund
In #30041 wurden die E-Mails des Self-Service lokalisiert: Die Skripte des InvitationModule (Einladungs-E-Mail, Bestätigungs-E-Mail, E-Mail zum Zurücksetzen des Passworts, E-Mail zum Zurücksetzen der MFA, tl-security-selfservice-core.conf.config.xml) beziehen Betreff und Text aus dem statischen Ressourcenbündel tl-security-selfservice-core.app-messages (Schlüssel tl.security.selfservice.mail.<mail>.subject / .body). Eine Anwendung kann einen Text nur ändern, indem sie die Schlüssel in ihrem eigenen Bundle überschreibt oder das gesamte Skript neu definiert – beides in den bereitgestellten Quelldateien; ein Administrator kann diese in der laufenden Anwendung nicht ändern.
Die E-Mails werden in der Sprache des aktuellen Benutzers verfasst oder, wenn niemand angemeldet ist, in der Standardsprache der Anwendung. Eine Einladung wird daher immer in der Sprache des einladenden Administrators versendet, und die Bestätigungs-E-Mail der Einladung sowie die E-Mails zum Zurücksetzen des Passworts und der Zwei-Faktor-Authentifizierung (die versendet werden, bevor sich jemand anmeldet) in der Standardsprache der Anwendung – unabhängig von der Sprache des Empfängers.
Verhalten
E-Mail-Texte in der Anwendungskonfiguration
- Betreff und Textkörper jeder der vier E-Mails sind Optionen des InvitationModule (invitation-text, verification-text, reset-password-text, reset-mfa-text; mehrsprachige Werte, der Textkörper als HTML), sodass sie im Service-Editor der laufenden Anwendung geändert werden können und in der Anwendungskonfiguration gespeichert werden.
- Die ausgelieferten Standardwerte sind die bisherigen deutschen und englischen Texte. Die Platzhalter ({0} Anwendungstitel, {1} Link oder Code) sind bei den Optionen beschrieben.
- Die E-Mail-Skripte erhalten die konfigurierten Texte unausgefüllt als zusätzliche Argumente und füllen sie selbst aus, sodass ein Skript einem Text weitere Informationen hinzufügen kann. Eine Anwendung, die ein Skript mit den drei vorgenannten Argumenten neu definiert, funktioniert weiterhin.
Sprache der E-Mails
- Beim Einladen einer Person (React: Administration -> Zugriffskontrolle -> Einladungen, „Einladen“; klassisch: „Nutzer einladen“) wird eine Sprachauswahl angeboten: die von der Anwendung unterstützten Sprachen, wobei die Sprache des einladenden Benutzers voreingestellt ist.
- Die Einladung speichert die ausgewählte Sprache. Die Einladungs-E-Mail, die Bestätigungs-E-Mail und eine erneut versendete E-Mail (invitationResend) werden in dieser Sprache verfasst; ebenso eine E-Mail, die über die TL-Script-Funktion sendInvitation versendet wird.
- Die Einladungslisten (React und klassisch) zeigen die Sprache an.
- Das aus einer angenommenen Einladung erstellte Konto erhält die Sprache der Einladung.
- Die E-Mails zum Zurücksetzen des Passworts und der Zwei-Faktor-Authentifizierung werden in der Sprache des Kontos verfasst, an das sie gesendet werden.
Mehrsprachige Texte im React-Konfigurationsformular
- Das React-Konfigurationsformular (Service-Editor, <config-form>) zeigte bisher keine Option an, die einen in der Konfiguration verfassten mehrsprachigen Text enthielt (<en>...</en><de>...</de>); eine Gruppe solcher Texte, wie die oben genannten E-Mail-Texte, wurde leer angezeigt. Eine solche Option wird nun angezeigt und kann mit dem sprachspezifischen Editor bearbeitet werden, genau wie ein internationalisiertes Attribut.
Technische Hinweise
- MailText (tl-mail-smtp, com.top_logic.base.mail): Wiederverwendbare Konfiguration der internationalisierten Texte einer E-Mail, Betreff (ResKey) und Textkörper (ResKey, @Html). InvitationModule.Config enthält jeweils eine pro E-Mail; das Bundle tl-security-selfservice-core.app-messages wird entfernt.
- Das Modul ruft jedes E-Mail-Skript mit seinen bisherigen Argumenten auf, gefolgt von Betreff und Text (ResKeys, nicht ausgefüllt). Es führt das Skript in der Sprache des Empfängers aus (`SubSessionContext.withLocale), sodass der Anwendungstitel und die Funktion `localize()` im Skript – auch in einem neu definierten – in dieser Sprache vorliegen: der Sprache der Einladung (invitationLanguage) oder des Kontos (accountLanguage), andernfalls in der Standardsprache der Anwendung.
- InvitationModule.sendResetPasswordMail(Person, String) / sendResetMFAMail(Person, String) versenden die E-Mails zum Zurücksetzen des Passworts; die React- und klassischen Dialogfelder zum Zurücksetzen nutzen diese.
- tl.security.selfservice:Invitation#language (tl.util:Language, Optionen: die unterstützten Sprachen, Standard: CurrentUserLanguageDefault). CurrentUserLanguageDefault (com.top_logic.model.provider) ist ein allgemeiner Standardanbieter für ein tl.util:Language-Attribut: die Sprache des aktuellen Benutzers, andernfalls die aktuelle Ländereinstellung, sofern unterstützt, andernfalls die Standardsprache der Anwendung.
- Der Entwicklerartikel „Authentifizierung/Self-Service“ beschreibt die Optionen, die Skriptargumente und die Sprachregeln.
- com.top_logic.layout.configedit: Eine ResKey -Eigenschaft ist vom Typ „COMPLEX“, und ConfigEditorControl zeigt eine „COMPLEX“-Eigenschaft nur an, wenn ihr Wert eine Textform hat; ResKey.ValueFormat schreibt keinen literalen Schlüssel als Text. Eine COMPLEX -Eigenschaft, die von einem konfigurierten Steuerelement beansprucht wird (Format-Mapping, hier I18NStringFormatProvider für ResKey$ValueFormat), wird nun unabhängig von einer Textform in ihrer typisierten Form bearbeitet: ConfigControlService.isEditedTyped / isEditedInField, verwendet von ConfigEditorControl.isSupportedKind, ConfigControlService.checkSupportedKind und isEditedAsText. Eine @Encrypted -Eigenschaft wird niemals beansprucht.
Test
- TestInvitationMails (tl-security-selfservice-core): Texte werden als viertes und fünftes Argument an die Skripte übergeben; Einladungs- und Bestätigungs-E-Mail in jeder unterstützten Sprache der Einladung, unabhängig von der aktuellen Ländereinstellung; Einladung ohne Sprachangabe in der Standardsprache; Zurücksetzungs-E-Mails in der Kontosprache; Zurücksetzung für ein Konto ohne Adresse; ein Skript mit drei Parametern; das Konto erhält die Sprache der Einladung; eine neue Einladung erhält die Sprache des aktuellen Benutzers.
- TestConfigEditorControlResKey (com.top_logic.layout.configedit): Ein literaler ResKey wird auf oberster Ebene und in einem verschachtelten Element angezeigt, kann bearbeitet werden; eine Änderung wird als literaler Schlüssel zurückgeschrieben; eine nicht beanspruchte COMPLEX-Eigenschaft ohne Textform bleibt verborgen.
- tl-demo-react und tl-demo: Sprachfeld in den Einladungsdialogen, vorausgewählt; Spalte „Sprache“ in den Einladungslisten.
- tl-demo-react: Administration -> System -> Dienste -> „Servicemodul für Einladungen“: Die vier E-Mail-Texte zeigen Betreff und Text an, können pro Sprache bearbeitet werden, werden gespeichert und nach einem Neustart des Dienstes angewendet.
Migration
- Bestehende Einladungen haben keine Sprache und werden in der Standardsprache der Anwendung versendet.
- Eine Anwendung, die die Schlüssel tl.security.selfservice.mail.* in ihrem eigenen Bundle überschreibt, verschiebt die Texte in die Optionen invitation-text, verification-text, reset-password-text, reset-mfa-text von InvitationModule (Dienst-Editor oder Anwendungskonfiguration). Das Bundle „tl-security-selfservice-core.app-messages“ existiert nicht mehr; eine Konfiguration, die darauf verweist, entfernt den Verweis.
- Eine Anwendung, die ein E-Mail-Skript neu definiert, kann die konfigurierten Texte verwenden, die als viertes und fünftes Argument (Betreff, Text) übergeben werden, ohne sie zu füllen.
- Code, der InvitationModule.getInvitationMail(), getVerificationMail(), getResetPasswordMail() oder getResetMFAMail() (die kompilierten Skripte) aufruft, verwendet stattdessen die Operationen sendInvitation, sendVerificationMail, sendResetPasswordMail oder sendResetMFAMail.
- Eine Anwendung, die die klassischen Layouts „admin/security/accounts/inviteUsers/dialog.layout.xml“ oder „existingInvitations/invitationsGrid.layout.xml“ im Layout-Editor geändert hat, fügt der gespeicherten Kopie das Feld bzw. die Spalte „language“ hinzu.