<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> <base href="https://issues.shibboleth.net/jira" /> 
        <title>Message Title</title> 
    </head> 
    <body class="jira" style="color: #333; font-family: Arial, sans-serif; font-size: 14px; line-height: 1.429"> 
        <table id="background-table" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; background-color: #f5f5f5; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
            <!-- header here --> 
            <tr> 
                <td id="header-pattern-container" style="padding: 0px; border-collapse: collapse; padding: 10px 20px"> 
                    <table id="header-pattern" cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                        <tr> 
                            <td id="header-avatar-image-container" valign="top" style="padding: 0px; border-collapse: collapse; vertical-align: top; width: 32px; padding-right: 8px"> <img id="header-avatar-image" class="image_fix" src="cid:jira-generated-image-avatar-6882f02b-c9ab-46f1-ae49-f54bc9d371e3" height="32" width="32" border="0" style="border-radius: 3px; vertical-align: top" /> 
                            </td> 
                            <td id="header-text-container" valign="middle" style="padding: 0px; border-collapse: collapse; vertical-align: middle; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px"> <a class="user-hover" rel="rt6oq14klzc8s1yxeui4gs4fvv4=@https://aai-logon.switch.ch/idp/shibboleth" id="email_rt6oq14klzc8s1yxeui4gs4fvv4=@https://aai-logon.switch.ch/idp/shibboleth" href="https://issues.shibboleth.net/jira/secure/ViewProfile.jspa?name=rt6oq14klzc8s1yxeui4gs4fvv4%3D%40https%3A%2F%2Faai-logon.switch.ch%2Fidp%2Fshibboleth" style="color:#3b73af;; color: #3b73af; text-decoration: none">Thomas Lenggenhager</a> <strong>commented</strong> on <a href="https://issues.shibboleth.net/jira/browse/IDP-1157" style="color: #3b73af; text-decoration: none"><img src="cid:jira-generated-image-avatar-40603a9b-5898-4d8e-a6a9-fd1ce763edb6" height="16" width="16" border="0" align="absmiddle" alt="Bug" /> IDP-1157</a> 
                            </td> 
                        </tr> 
                    </table> 
                </td> 
            </tr> 
            <tr> 
                <td id="email-content-container" style="padding: 0px; border-collapse: collapse; padding: 0 20px"> 
                    <table id="email-content-table" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; border-spacing: 0; border-collapse: separate"> 
                        <tr> 
                            <!-- there needs to be content in the cell for it to render in some clients --> 
                            <td class="email-content-rounded-top mobile-expand" style="padding: 0px; border-collapse: collapse; color: #fff; padding: 0 15px 0 16px; height: 15px; background-color: #fff; border-left: 1px solid #ccc; border-top: 1px solid #ccc; border-right: 1px solid #ccc; border-bottom: 0; border-top-right-radius: 5px; border-top-left-radius: 5px; height: 10px; line-height: 10px; padding: 0 15px 0 16px; mso-line-height-rule: exactly">
                                 
                            </td> 
                        </tr> 
                        <tr> 
                            <td class="email-content-main mobile-expand " style="padding: 0px; border-collapse: collapse; border-left: 1px solid #ccc; border-right: 1px solid #ccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #fff"> 
                                <table class="page-title-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                                    <tr> 
                                        <td style="vertical-align: top;; padding: 0px; border-collapse: collapse; padding-right: 5px; font-size: 20px; line-height: 30px; mso-line-height-rule: exactly" class="page-title-pattern-header-container"> <span class="page-title-pattern-header" style="font-family: Arial, sans-serif; padding: 0; font-size: 20px; line-height: 30px; mso-text-raise: 2px; mso-line-height-rule: exactly; vertical-align: middle"> <a href="https://issues.shibboleth.net/jira/browse/IDP-1157" style="color: #3b73af; text-decoration: none">Re: ToU consent broken in combination with multiple languages</a> </span> 
                                        </td> 
                                    </tr> 
                                </table> 
                            </td> 
                        </tr> 
                        <tr> 
                            <td id="text-paragraph-pattern-top" class="email-content-main mobile-expand  comment-top-pattern" style="padding: 0px; border-collapse: collapse; border-left: 1px solid #ccc; border-right: 1px solid #ccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #fff; border-bottom: none; padding-bottom: 0"> 
                                <table class="text-paragraph-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 2px"> 
                                    <tr> 
                                        <td class="text-paragraph-pattern-container mobile-resize-text " style="padding: 0px; border-collapse: collapse; padding: 0 0 10px 0"> 
                                            <p style="margin: 10px 0 0 0">Sorry for the bd formatting. The multi-line monospaced didn't work out as expected. <img class="emoticon" src="cid:jira-generated-image-static-sad-0e3fd657-ef3d-40ce-a979-d2dd6a6e2c1f" height="16" width="16" align="absmiddle" alt="" border="0" /> I should have used the preview. I paste it here again.</p> 
                                            <p style="margin: 10px 0 0 0">Let's assume we want to configure a single ToU statement and we would like to present it in multiple languages, depending on the user's browser settings.<br /> For such a multi-lingual scenario, the current v3.3 configuration capabilities have two major limitations:<br /> a) The key for the hash is based on the .text property and that results in different hashes when multiple languages need to be supported!<br /> b) It is currently not possible to configure some other value than '.text' to be used as key<br /> in the user configuration (${idp.home}/conf).</p> 
                                            <p style="margin: 10px 0 0 0"> Although the class net.shibboleth.idp.consent.logic.impl.MessageSourceConsentFunction<br /> would allow to set a different suffix, neither the system configuration (${idp.home}/system)<br /> nor the user configuration (${idp.home}/conf) allow to set a different suffix.</p> 
                                            <p style="margin: 10px 0 0 0">We propose to fix this in the system configuration, e.g. as follows in<br /> ${idp_home}/system/flows/intercept/terms-of-use-beans.xml:</p> 
                                            <div class="code panel" style="border-width: 1px;; border: 1px solid #ccc; background: #f5f5f5; font-size: 12px; line-height: 1.333; font-family: monospace; border: 1px solid #ccc; -moz-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; margin: 9px 0">
                                                <div class="codeContent panelContent" style="padding: 9px 12px"> 
                                                    <pre class="code-java" style="margin: 10px 0 0 0; max-height: 30em; overflow: auto; white-space: pre-wrap; word-wrap: normal">
     <bean id=<span class="code-quote" style="color: #009100">"TermsOfUseConsentFunction"</span>
         class=<span class="code-quote" style="color: #009100">"net.shibboleth.idp.consent.logic.impl.MessageSourceConsentFunction"</span>
-        p:consentKeyLookupStrategy-ref=<span class="code-quote" style="color: #009100">"shibboleth.consent.terms-of-use.Key"</span> />
+        p:consentKeyLookupStrategy-ref=<span class="code-quote" style="color: #009100">"shibboleth.consent.terms-of-use.Key"</span>
+        p:consentValueMessageCodeSuffix=<span class="code-quote" style="color: #009100">".text"</span> />
%{idp.consent.terms-of-use.consentValueMessageCodeSuffix:.text}
</pre> 
                                                </div>
                                            </div> 
                                            <p style="margin: 10px 0 0 0">And additionally in ${idp_home}/conf/idp.properties:</p> 
                                            <div class="code panel" style="border-width: 1px;; border: 1px solid #ccc; background: #f5f5f5; font-size: 12px; line-height: 1.333; font-family: monospace; border: 1px solid #ccc; -moz-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; margin: 9px 0">
                                                <div class="codeContent panelContent" style="padding: 9px 12px"> 
                                                    <pre class="code-java" style="margin: 10px 0 0 0; max-height: 30em; overflow: auto; white-space: pre-wrap; word-wrap: normal">
+# Suffix of the message property to be used as key to store the consent.
+# Default is to use the text that is shown to the user.
+#idp.consent.terms-of-use.consentValueMessageCodeSuffix = .text
</pre> 
                                                </div>
                                            </div> 
                                            <p style="margin: 10px 0 0 0">As a current workaround we introduced a new .html property (see below), but it would be more straightforward to make the property configurable that gets used for the key, e.g. .version.</p> 
                                            <p style="margin: 10px 0 0 0">We adapted the following in consent-intercept-config.xml:</p> 
                                            <div class="code panel" style="border-width: 1px;; border: 1px solid #ccc; background: #f5f5f5; font-size: 12px; line-height: 1.333; font-family: monospace; border: 1px solid #ccc; -moz-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; margin: 9px 0">
                                                <div class="codeContent panelContent" style="padding: 9px 12px"> 
                                                    <pre class="code-java" style="margin: 10px 0 0 0; max-height: 30em; overflow: auto; white-space: pre-wrap; word-wrap: normal">
<alias alias=<span class="code-quote" style="color: #009100">"shibboleth.consent.terms-of-use.Key"</span> name=<span class="code-quote" style="color: #009100">"shibboleth.SingleTermsOfUseText"</span> />

<bean id=<span class="code-quote" style="color: #009100">"shibboleth.SingleTermsOfUseText"</span>
    class=<span class="code-quote" style="color: #009100">"com.google.common.base.Functions"</span> factory-method=<span class="code-quote" style="color: #009100">"constant"</span>>
    <constructor-arg value=<span class="code-quote" style="color: #009100">"my-terms-of-use"</span> />
</bean>
</pre> 
                                                </div>
                                            </div> 
                                            <p style="margin: 10px 0 0 0">and we originally included in messages.properties:</p> 
                                            <div class="code panel" style="border-width: 1px;; border: 1px solid #ccc; background: #f5f5f5; font-size: 12px; line-height: 1.333; font-family: monospace; border: 1px solid #ccc; -moz-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; margin: 9px 0">
                                                <div class="codeContent panelContent" style="padding: 9px 12px"> 
                                                    <pre class="code-java" style="margin: 10px 0 0 0; max-height: 30em; overflow: auto; white-space: pre-wrap; word-wrap: normal">
my-terms-of-use = my-tou
my-tou.title = Example Terms of Use
my-tou.text = <p>Example organization Terms of Use (ToU)</p> \
  <p>Lorem ipsum dolor sit amet, \
  consectetur adipiscing elit. \
  </p>
</pre> 
                                                </div>
                                            </div> 
                                            <p style="margin: 10px 0 0 0">The key is the .text property. As soon as we add the my-tou.text property in additional languages, the key for each language is different! Provided a user switches between browsers with different language settings, this user will have to accept the ToU over and over again, simply because the hash is not the same for all languages.</p> 
                                            <p style="margin: 10px 0 0 0">Our workaround for this was to introduce an additional property my-tou.text.html, see below.</p> 
                                            <p style="margin: 10px 0 0 0">So we now included in messages.properties:</p> 
                                            <div class="code panel" style="border-width: 1px;; border: 1px solid #ccc; background: #f5f5f5; font-size: 12px; line-height: 1.333; font-family: monospace; border: 1px solid #ccc; -moz-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; margin: 9px 0">
                                                <div class="codeContent panelContent" style="padding: 9px 12px"> 
                                                    <pre class="code-java" style="margin: 10px 0 0 0; max-height: 30em; overflow: auto; white-space: pre-wrap; word-wrap: normal">
my-terms-of-use = my-tou
my-tou.title = Example Terms of Use
my-tou.text = ToU version 1.0 - 20170405
my-tou.html = <p>Example organization Terms of Use (ToU)</p> \
  <p>Lorem ipsum dolor sit amet, \
  consectetur adipiscing elit. \
  </p>
</pre> 
                                                </div>
                                            </div> 
                                            <p style="margin: 10px 0 0 0">and we needed to replace in /opt/shibboleth-idp/views/intercept/terms-of-use.vm:</p> 
                                            <p style="margin: 10px 0 0 0">this line</p> 
                                            <div class="code panel" style="border-width: 1px;; border: 1px solid #ccc; background: #f5f5f5; font-size: 12px; line-height: 1.333; font-family: monospace; border: 1px solid #ccc; -moz-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; margin: 9px 0">
                                                <div class="codeContent panelContent" style="padding: 9px 12px"> 
                                                    <pre class="code-java" style="margin: 10px 0 0 0; max-height: 30em; overflow: auto; white-space: pre-wrap; word-wrap: normal">
#springMessageText(<span class="code-quote" style="color: #009100">"${termsOfUseId}.text"</span>, <span class="code-quote" style="color: #009100">"Terms of Use Text..."</span>)
</pre> 
                                                </div>
                                            </div> 
                                            <p style="margin: 10px 0 0 0">with this line</p> 
                                            <div class="code panel" style="border-width: 1px;; border: 1px solid #ccc; background: #f5f5f5; font-size: 12px; line-height: 1.333; font-family: monospace; border: 1px solid #ccc; -moz-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; margin: 9px 0">
                                                <div class="codeContent panelContent" style="padding: 9px 12px"> 
                                                    <pre class="code-java" style="margin: 10px 0 0 0; max-height: 30em; overflow: auto; white-space: pre-wrap; word-wrap: normal">
#springMessageText(<span class="code-quote" style="color: #009100">"${termsOfUseId}.html"</span>, <span class="code-quote" style="color: #009100">"Terms of Use Text..."</span>)
</pre> 
                                                </div>
                                            </div> 
                                            <p style="margin: 10px 0 0 0">For the translations we only add the properties my-tou.title and my-tou.html into the language dependent .properties file. That way, we have a single my-tou.text property as key for the hash!</p> 
                                            <p style="margin: 10px 0 0 0">That way you can even correct a typo or a minor change that does not require a new approval in any of the languages. From now on, you only change the version information in the my-tou.text property when the legal counsel asks you to replace the current ToU version with a new one that requires approval. That has to happen in sync for all the languages.</p> 
                                        </td> 
                                    </tr> 
                                </table> 
                            </td> 
                        </tr> 
                        <tr> 
                            <td class="email-content-main mobile-expand " style="padding: 0px; border-collapse: collapse; border-left: 1px solid #ccc; border-right: 1px solid #ccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #fff"> 
                                <table id="actions-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px"> 
                                    <tr> 
                                        <td id="actions-pattern-container" valign="middle" style="padding: 0px; border-collapse: collapse; padding: 10px 0 10px 24px; vertical-align: middle; padding-left: 0"> 
                                            <table align="left" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                                                <tr> 
                                                    <td class="actions-pattern-action-icon-container" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 0px; vertical-align: middle"> <a href="https://issues.shibboleth.net/jira/browse/IDP-1157#add-comment" target="_blank" title="Add Comment" style="color: #3b73af; text-decoration: none"> <img class="actions-pattern-action-icon-image" src="cid:jira-generated-image-static-comment-icon-8a6fb65f-1301-4e8d-8619-73d48753b782" alt="Add Comment" title="Add Comment" height="16" width="16" border="0" style="vertical-align: middle" /> </a> 
                                                    </td> 
                                                    <td class="actions-pattern-action-text-container" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 4px; padding-left: 5px"> <a href="https://issues.shibboleth.net/jira/browse/IDP-1157#add-comment" target="_blank" title="Add Comment" style="color: #3b73af; text-decoration: none">Add Comment</a> 
                                                    </td> 
                                                </tr> 
                                            </table> 
                                        </td> 
                                    </tr> 
                                </table> 
                            </td> 
                        </tr> 
                        <!-- there needs to be content in the cell for it to render in some clients --> 
                        <tr> 
                            <td class="email-content-rounded-bottom mobile-expand" style="padding: 0px; border-collapse: collapse; color: #fff; padding: 0 15px 0 16px; height: 5px; line-height: 5px; background-color: #fff; border-top: 0; border-left: 1px solid #ccc; border-bottom: 1px solid #ccc; border-right: 1px solid #ccc; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; mso-line-height-rule: exactly">
                                 
                            </td> 
                        </tr> 
                    </table> 
                </td> 
            </tr> 
            <tr> 
                <td id="footer-pattern" style="padding: 0px; border-collapse: collapse; padding: 12px 20px"> 
                    <table id="footer-pattern-container" cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                        <tr> 
                            <td id="footer-pattern-text" class="mobile-resize-text" width="100%" style="padding: 0px; border-collapse: collapse; color: #999; font-size: 12px; line-height: 18px; font-family: Arial, sans-serif; mso-line-height-rule: exactly; mso-text-raise: 2px">
                                 This message was sent by Atlassian JIRA <span id="footer-build-information">(v7.0.10#70120-<span title="37e3d7a6fc4d580639533e7f7c232c925e554a6a" data-commit-id="37e3d7a6fc4d580639533e7f7c232c925e554a6a}">sha1:37e3d7a</span>)</span> 
                            </td> 
                            <td id="footer-pattern-logo-desktop-container" valign="top" style="padding: 0px; border-collapse: collapse; padding-left: 20px; vertical-align: top"> 
                                <table style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                                    <tr> 
                                        <td id="footer-pattern-logo-desktop-padding" style="padding: 0px; border-collapse: collapse; padding-top: 3px"> <img id="footer-pattern-logo-desktop" src="cid:jira-generated-image-static-footer-desktop-logo-15d1d7ca-e996-416e-a925-f11d9f84de49" alt="Atlassian logo" title="Atlassian logo" width="169" height="36" class="image_fix" /> 
                                        </td> 
                                    </tr> 
                                </table> 
                            </td> 
                        </tr> 
                    </table> 
                </td> 
            </tr> 
        </table>   
    </body>
</html>