Added 'isEmail' parameter for generated links
authorAlexander Ebert <ebert@woltlab.com>
Mon, 27 Jan 2014 12:47:45 +0000 (13:47 +0100)
committerAlexander Ebert <ebert@woltlab.com>
Mon, 27 Jan 2014 12:47:45 +0000 (13:47 +0100)
wcfsetup/install/files/lib/system/request/LinkHandler.class.php
wcfsetup/install/files/lib/system/template/plugin/LinkBlockTemplatePlugin.class.php
wcfsetup/install/lang/de.xml
wcfsetup/install/lang/en.xml

index a17efca749ab3f84e660a332a0ae1cadd89fc6c6..c942d03962699d0da2aa6b573a3f8a27c2b6c641 100644 (file)
@@ -68,6 +68,13 @@ class LinkHandler extends SingletonFactory {
                $isACP = $originIsACP = RequestHandler::getInstance()->isACPRequest();
                $encodeTitle = $forceWCF = $isRaw = false;
                $appendSession = true;
+               
+               // enforce a certain level of sanitation and protection for links embedded in emails
+               if (isset($parameters['isEmail']) && (bool)$parameters['isEmail']) {
+                       $parameters['forceFrontend'] = true;
+                       $parameters['appendSession'] = false;
+               }
+               
                if (isset($parameters['application'])) {
                        $abbreviation = $parameters['application'];
                }
index 980a9bcfb885d42a9c67fe30cac147823ddf19a0..43c82bc22bf2367e900370218029fc343086a7d4 100644 (file)
@@ -36,6 +36,10 @@ class LinkBlockTemplatePlugin implements IBlockTemplatePlugin {
                        $tagArgs['application'] = 'wcf';
                }
                
+               if (isset($tagArgs['isEmail']) && $tagArgs['isEmail']) {
+                       $tagArgs['encode'] = true;
+               }
+               
                if (isset($tagArgs['encode']) && !$tagArgs['encode']) {
                        unset($tagArgs['encode']);
                        return LinkHandler::getInstance()->getLink($tagArgs['controller'], $tagArgs, $blockContent);
index 09514b07efd89441123c4407a0091ee3b86ca032..735189190d91393ce2f78e5f01fd01814bb78335 100644 (file)
@@ -2081,7 +2081,7 @@ Fehler sind beispielsweise:
                <item name="wcf.user.lostPassword.mail"><![CDATA[Hallo {@$username},
 
 wenn Sie Ihr Kennwort vergessen haben, können Sie über folgenden Link ein neues Kennwort anfordern.
-Klicken Sie hier, um ein neues Kennwort anzufordern: {link controller='NewPassword' encode=false isACP=false}u={@$userID}&k={@$key}{/link}  
+Klicken Sie hier, um ein neues Kennwort anzufordern: {link controller='NewPassword' isEmail=true}u={@$userID}&k={@$key}{/link}  
 
 Falls Sie Ihr Kennwort nicht vergessen haben, können Sie diese E-Mail ignorieren.]]></item>
                <item name="wcf.user.lostPassword.mail.sent"><![CDATA[Sie erhalten in Kürze eine E-Mail mit weiteren Informationen.]]></item>
@@ -2096,7 +2096,7 @@ Ihr neues Kennwort für die Website "{@PAGE_TITLE|language}" lautet:
 
 
 Sie können Ihr Kennwort unter folgender Adresse jederzeit ändern:
-{link controller='AccountManagement' encode=false isACP=false}{/link} ]]></item>
+{link controller='AccountManagement' isEmail=true}{/link} ]]></item>
                <item name="wcf.user.newPassword.mail.subject"><![CDATA[Neues Kennwort auf der Website: {@PAGE_TITLE|language}]]></item>
                <item name="wcf.user.newPassword.success"><![CDATA[Sie erhalten in Kürze eine E-Mail mit Ihrem neuen Kennwort.]]></item>
                <item name="wcf.user.accountManagement"><![CDATA[Benutzerkonto-Verwaltung]]></item>
@@ -2132,11 +2132,11 @@ Sie können Ihr Kennwort unter folgender Adresse jederzeit ändern:
 Sie haben Ihre E-Mail-Adresse auf der Website: {@PAGE_TITLE|language} geändert. Zum Abschließen dieser Änderung müssen Sie einmalig die Gültigkeit Ihrer neuen E-Mail-Adresse bestätigen.
 
 Bitte bestätigen Sie die Gültigkeit Ihrer neuen E-Mail-Adresse, indem Sie folgenden Link aufrufen:
-{link controller='EmailActivation' encode=false}u={@$userID}&a={@$activationCode}{/link} 
+{link controller='EmailActivation' isEmail=true}u={@$userID}&a={@$activationCode}{/link} 
 
 **** Funktioniert der Link oben nicht? ****
 Wenn der Link nicht funktioniert, sollten Sie folgende Adresse in Ihrem Browser aufrufen:
-{link controller='EmailActivation' encode=false}{/link}
+{link controller='EmailActivation' isEmail=true}{/link}
 
 Bitte achten Sie darauf, dass keine Leerzeichen in der Adresse sind.
 Wenn Sie den Link aufgerufen haben, müssen Sie auf der erscheinenden Seite Ihre Benutzernummer sowie den Aktivierungscode eingeben.
@@ -2226,7 +2226,7 @@ auf der Website {@PAGE_TITLE|language} erfolgte eine neue Benutzeranmeldung durc
 Die E-Mail-Adresse des neuen Benutzers lautet: {@$user->email} 
 
 Sie erreichen das Benutzerprofil des neuen Benutzers, indem Sie folgenden Link aufrufen:
-{link controller='User' object=$user encode=false}{/link} ]]></item>
+{link controller='User' object=$user isEmail=true}{/link} ]]></item>
                <item name="wcf.user.register.notification.mail.subject"><![CDATA[Neue Benutzeranmeldung auf der Website: {@PAGE_TITLE|language}]]></item>
                <item name="wcf.user.register.error.disabled"><![CDATA[Die Registrierung ist momentan deaktiviert.]]></item>
                <item name="wcf.user.register.success"><![CDATA[Vielen Dank für die Registrierung, {$user->username}. Ihre Registrierung ist hiermit vollständig abgeschlossen.]]></item>
@@ -2236,7 +2236,7 @@ vielen Dank für Ihre Registrierung auf der Website: {@PAGE_TITLE|language}.
 Bevor wir Ihre Registrierung aktivieren können, müssen Sie einmalig die Gültigkeit Ihrer E-Mail-Adresse bestätigen.
 
 Bitte bestätigen Sie die Gültigkeit Ihrer E-Mail-Adresse, indem Sie folgenden Link aufrufen:
-{link controller='RegisterActivation' encode=false}{/link} 
+{link controller='RegisterActivation' isEmail=true}{/link} 
 
 Wenn Sie den Link aufgerufen haben, müssen Sie auf der erscheinenden Seite Ihren Benutzernamen sowie den Aktivierungscode eingeben.
 
@@ -2384,20 +2384,20 @@ Sollten Sie sich nicht auf der Website: {@PAGE_TITLE|language} angemeldet haben,
                <item name="wcf.user.notification.mail.footer"><![CDATA[Diese E-Mail ist eine automatische Benachrichtigung. BITTE ANTWORTEN SIE NICHT AUF DIESE E-MAIL.
                
 Sie können die Einstellungen für Ihre Benachrichtigungen auf {@PAGE_TITLE|language} unter folgender URL detailliert konfigurieren:
-{link controller='NotificationSettings' encode=false}{/link} 
+{link controller='NotificationSettings' isEmail=true}{/link} 
 
 Möchten Sie diese E-Mail-Benachrichtigung in Zukunft nicht mehr erhalten, können Sie folgenden Link aufrufen, um die Benachrichtigung abzuschalten:
-{link controller='NotificationDisable' encode=false}eventID={@$notification->eventID}&userID={@$user->userID}&token={@$token}{/link}]]></item>
+{link controller='NotificationDisable' isEmail=true}eventID={@$notification->eventID}&userID={@$user->userID}&token={@$token}{/link}]]></item>
                <item name="wcf.user.notification.mail.header"><![CDATA[Hallo {@$user->username},]]></item>
                <item name="wcf.user.notification.mail.subject"><![CDATA[Neue Benachrichtigung: {@$title}]]></item>
                <item name="wcf.user.notification.mail.daily.subject"><![CDATA[{if $count == 1}Neue Benachrichtigung{else}{#$count} neue Benachrichtigungen{/if}]]></item>
                <item name="wcf.user.notification.mail.daily.footer"><![CDATA[Diese E-Mail ist eine automatische Benachrichtigung. BITTE ANTWORTEN SIE NICHT AUF DIESE E-MAIL.
                
 Sie können die Einstellungen für Ihre Benachrichtigungen auf {@PAGE_TITLE|language} unter folgender URL detailliert konfigurieren:
-{link controller='NotificationSettings' encode=false}{/link} 
+{link controller='NotificationSettings' isEmail=true}{/link} 
 
 Möchten Sie diese E-Mail-Benachrichtigung in Zukunft nicht mehr erhalten, können Sie folgenden Link aufrufen, um die Benachrichtigung abzuschalten:
-{link controller='NotificationDisable' encode=false}userID={@$user->userID}&token={@$token}{/link}]]></item>
+{link controller='NotificationDisable' isEmail=true}userID={@$user->userID}&token={@$token}{/link}]]></item>
                <item name="wcf.user.notification.mailNotificationType.none"><![CDATA[Keine E-Mail-Benachrichtigung]]></item>
                <item name="wcf.user.notification.mailNotificationType.instant"><![CDATA[Sofortige E-Mail-Benachrichtigung]]></item>
                <item name="wcf.user.notification.mailNotificationType.daily"><![CDATA[Tägliche E-Mail-Benachrichtigung]]></item>
@@ -2417,7 +2417,7 @@ Möchten Sie diese E-Mail-Benachrichtigung in Zukunft nicht mehr erhalten, könn
 ---------------------------------
 {@$comment->message} 
 ---------------------------------
-{/if}{link controller='User' object=$owner encode=false forceFrontend=true}{/link}#wall]]></item>
+{/if}{link controller='User' object=$owner isEmail=true}{/link}#wall]]></item>
                <item name="wcf.user.notification.commentResponse.title"><![CDATA[Neue Antwort (Pinnwand)]]></item>
                <item name="wcf.user.notification.commentResponse.message"><![CDATA[Hat eine Antwort zu Ihrem Kommentar an der Pinnwand von {$owner->username} verfasst.]]></item>
                <item name="wcf.user.notification.commentResponse.mail"><![CDATA[{@$author->username} hat eine Antwort zu Ihrem Kommentar an der Pinnwand von "{@$owner->username}" verfasst:
@@ -2425,7 +2425,7 @@ Möchten Sie diese E-Mail-Benachrichtigung in Zukunft nicht mehr erhalten, könn
 ---------------------------------
 {@$response->message} 
 ---------------------------------
-{/if}{link controller='User' object=$owner encode=false forceFrontend=true}{/link}#wall]]></item>
+{/if}{link controller='User' object=$owner isEmail=true}{/link}#wall]]></item>
                <item name="wcf.user.notification.commentResponseOwner.title"><![CDATA[Neue Antwort (Pinnwand)]]></item>
                <item name="wcf.user.notification.commentResponseOwner.message"><![CDATA[Hat eine Antwort zum Kommentar von {$commentAuthor->username} an Ihrer Pinnwand verfasst.]]></item>
                <item name="wcf.user.notification.commentResponseOwner.mail"><![CDATA[{@$author->username} hat eine Antwort zum Kommentar von "{@$commentAuthor->username}" an Ihrer Pinnwand verfasst:
@@ -2433,7 +2433,7 @@ Möchten Sie diese E-Mail-Benachrichtigung in Zukunft nicht mehr erhalten, könn
 ---------------------------------
 {@$response->message} 
 ---------------------------------
-{/if}{link controller='User' object=$owner encode=false forceFrontend=true}{/link}#wall]]></item>
+{/if}{link controller='User' object=$owner isEmail=true}{/link}#wall]]></item>
                <item name="wcf.user.notification.com.woltlab.wcf.user.profileComment.notification.comment"><![CDATA[Neuer Kommentar an Ihrer Pinnwand]]></item>
                <item name="wcf.user.notification.com.woltlab.wcf.user.profileComment.response.notification.commentResponse"><![CDATA[Neue Antwort auf einen Kommentar an Ihrer Pinnwand]]></item>
                <item name="wcf.user.notification.com.woltlab.wcf.user.profileComment.response.notification.commentResponseOwner"><![CDATA[Neue Antwort auf einen Kommentar von Ihnen]]></item>
index 8338123b6f50e182c32ec7397494f608aa3152df..8d9295cb2d9ff10e9bbfd06573376fcabbb332be 100644 (file)
@@ -2080,7 +2080,7 @@ Errors are:
                <item name="wcf.user.lostPassword.mail"><![CDATA[Dear {@$username},
 
 if you have lost your password you can request a new one using the link below.
-Request a new password: {link controller='NewPassword' encode=false isACP=false}u={@$userID}&k={@$key}{/link}  
+Request a new password: {link controller='NewPassword' isEmail=true}u={@$userID}&k={@$key}{/link}  
 
 If you have not lost your password, you can safely ignore this email.]]></item>
                <item name="wcf.user.lostPassword.mail.sent"><![CDATA[You should receive an email shortly.]]></item>
@@ -2095,7 +2095,7 @@ your new password for "{@PAGE_TITLE|language}" is:
 
 
 You can change your password any time at:
-{link controller='AccountManagement' encode=false isACP=false}{/link} ]]></item>
+{link controller='AccountManagement' isEmail=true}{/link} ]]></item>
                <item name="wcf.user.newPassword.mail.subject"><![CDATA[New Password for Website: {@PAGE_TITLE|language}]]></item>
                <item name="wcf.user.newPassword.success"><![CDATA[You should receive an email with your password shortly.]]></item>
                <item name="wcf.user.accountManagement"><![CDATA[Account Management]]></item>
@@ -2129,11 +2129,11 @@ You can change your password any time at:
 
 you’ve changed your email address on: {@PAGE_TITLE|language}. It is required to open the link below in order to verify this email address.
 
-{link controller='EmailActivation' encode=false}u={@$userID}&a={@$activationCode}{/link} 
+{link controller='EmailActivation' isEmail=true}u={@$userID}&a={@$activationCode}{/link} 
 
 **** Unable to click or open the link above? ****
 Please open the link below in your browser:
-{link controller='EmailActivation' encode=false}{/link}
+{link controller='EmailActivation' isEmail=true}{/link}
 
 Once prompted please provide the following details:
 
@@ -2223,7 +2223,7 @@ someone registered with your website {@PAGE_TITLE|language}: {@$user->username}
 Email address used: {@$user->email} 
 
 Open the link below to access the user profile:
-{link controller='User' object=$user encode=false}{/link} ]]></item>
+{link controller='User' object=$user isEmail=true}{/link} ]]></item>
                <item name="wcf.user.register.notification.mail.subject"><![CDATA[New Registration with Your Website: {@PAGE_TITLE|language}]]></item>
                <item name="wcf.user.register.error.disabled"><![CDATA[Registration is currently disabled.]]></item>
                <item name="wcf.user.register.success"><![CDATA[Thank you for registering, {$user->username}.<br />
@@ -2234,7 +2234,7 @@ thank you for registering on our website: {@PAGE_TITLE|language}.
 Please validate your email address to complete your registration.
 
 Open the link below:
-{link controller='RegisterActivation' encode=false}{/link} 
+{link controller='RegisterActivation' isEmail=true}{/link} 
 
 Once prompted provide the details as shown below:
 
@@ -2382,20 +2382,20 @@ You can safely ignore this email if you did not register with the website: {@PAG
                <item name="wcf.user.notification.mail.footer"><![CDATA[This is an automatic notification, PLEASE DO NOT REPLY TO THIS EMAIL!
                
 You can manage your notification settings for {@PAGE_TITLE|language} on the page below:
-{link controller='NotificationSettings' encode=false}{/link} 
+{link controller='NotificationSettings' isEmail=true}{/link} 
 
 If you do not want to receive further email notifications for this event, you can quickly disable it by opening the link below:
-{link controller='NotificationDisable' encode=false}eventID={@$notification->eventID}&userID={@$user->userID}&token={@$token}{/link}]]></item>
+{link controller='NotificationDisable' isEmail=true}eventID={@$notification->eventID}&userID={@$user->userID}&token={@$token}{/link}]]></item>
                <item name="wcf.user.notification.mail.header"><![CDATA[Dear {@$user->username},]]></item>
                <item name="wcf.user.notification.mail.subject"><![CDATA[New Notification: {@$title}]]></item>
                <item name="wcf.user.notification.mail.daily.subject"><![CDATA[{if $count == 1}New Notification{else}{#$count} New Notifications{/if}]]></item>
                <item name="wcf.user.notification.mail.daily.footer"><![CDATA[This is an automatic notification, PLEASE DO NOT REPLY TO THIS EMAIL!
                
 You can manage your notification settings for {@PAGE_TITLE|language} on the page below:
-{link controller='NotificationSettings' encode=false}{/link} 
+{link controller='NotificationSettings' isEmail=true}{/link} 
 
 If you do not want to receive further email notifications for this event, you can quickly disable it by opening the link below:
-{link controller='NotificationDisable' encode=false}userID={@$user->userID}&token={@$token}{/link}]]></item>
+{link controller='NotificationDisable' isEmail=true}userID={@$user->userID}&token={@$token}{/link}]]></item>
                <item name="wcf.user.notification.mailNotificationType.none"><![CDATA[No Email Notification]]></item>
                <item name="wcf.user.notification.mailNotificationType.instant"><![CDATA[Instant Email Notification]]></item>
                <item name="wcf.user.notification.mailNotificationType.daily"><![CDATA[Daily Email Notification]]></item>
@@ -2415,7 +2415,7 @@ If you do not want to receive further email notifications for this event, you ca
 ---------------------------------
 {@$comment->message} 
 ---------------------------------
-{/if}{link controller='User' object=$owner encode=false forceFrontend=true}#wall{/link}]]></item>
+{/if}{link controller='User' object=$owner isEmail=true}#wall{/link}]]></item>
                <item name="wcf.user.notification.commentResponse.title"><![CDATA[New Reply (Wall)]]></item>
                <item name="wcf.user.notification.commentResponse.message"><![CDATA[Wrote a reply to your comment on {$owner->username}’s wall.]]></item>
                <item name="wcf.user.notification.commentResponse.mail"><![CDATA[{@$author->username} wrote a reply to your comment on {@$owner->username}’s wall:
@@ -2423,7 +2423,7 @@ If you do not want to receive further email notifications for this event, you ca
 ---------------------------------
 {@$response->message} 
 ---------------------------------
-{/if}{link controller='User' object=$owner encode=false forceFrontend=true}{/link}#wall]]></item>
+{/if}{link controller='User' object=$owner isEmail=true}{/link}#wall]]></item>
                <item name="wcf.user.notification.commentResponseOwner.title"><![CDATA[New Reply (Wall)]]></item>
                <item name="wcf.user.notification.commentResponseOwner.message"><![CDATA[Wrote a reply to {$commentAuthor->username}’s comment on your wall.]]></item>
                <item name="wcf.user.notification.commentResponseOwner.mail"><![CDATA[{@$author->username} wrote a reply to {@$commentAuthor->username}’s comment on your wall:
@@ -2431,7 +2431,7 @@ If you do not want to receive further email notifications for this event, you ca
 ---------------------------------
 {@$response->message} 
 ---------------------------------
-{/if}{link controller='User' object=$owner encode=false forceFrontend=true}{/link}#wall]]></item>
+{/if}{link controller='User' object=$owner isEmail=true}{/link}#wall]]></item>
                <item name="wcf.user.notification.com.woltlab.wcf.user.profileComment.notification.comment"><![CDATA[New comment on your wall]]></item>
                <item name="wcf.user.notification.com.woltlab.wcf.user.profileComment.response.notification.commentResponse"><![CDATA[New reply to a comment on your wall]]></item>
                <item name="wcf.user.notification.com.woltlab.wcf.user.profileComment.response.notification.commentResponseOwner"><![CDATA[New reply to one of your comments]]></item>