Skip to content

Commit 688ddb2

Browse files
Removed all escaping for controlled email variables
1 parent 2bfdf62 commit 688ddb2

File tree

5 files changed

+16
-12
lines changed

5 files changed

+16
-12
lines changed

all/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@
184184
<plugin>
185185
<groupId>com.adobe.aem</groupId>
186186
<artifactId>aemanalyser-maven-plugin</artifactId>
187-
<version>1.4.20</version> <!-- Make sure to use the latest release -->
187+
<version>1.5.8</version> <!-- Make sure to use the latest release -->
188188
<executions>
189189
<execution>
190190
<id>aem-analyser</id>

core/src/main/java/com/adobe/aem/commons/assetshare/components/actions/share/ShareService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public interface ShareService {
4343
*
4444
* @param request the request that provides context of which Asset Share instance the request is coming to.
4545
* @param response the response
46-
* @param shareParameters a &lt;String, Object&gt; map or parameters; This is initially constructed from the request.getParameterMap() but can be augmented in the ShareService implementationa s needed.
46+
* @param shareParameters a &lt;String, Object&gt; map or parameters; This is initially constructed from the request.getParameterMap() but can be augmented in the ShareService implementation as needed.
4747
* @throws ShareException is thrown if an error occurs with sharing (required share params are missing) or with the sharing initiation itself.
4848
*/
4949
void share(SlingHttpServletRequest request, SlingHttpServletResponse response, ValueMap shareParameters) throws ShareException;

core/src/main/java/com/adobe/aem/commons/assetshare/components/actions/share/impl/EmailShareServiceImpl.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import com.adobe.aem.commons.assetshare.content.AssetModel;
3838
import com.adobe.aem.commons.assetshare.util.EmailService;
3939
import com.adobe.aem.commons.assetshare.util.RequireAem;
40+
import com.adobe.cq.commerce.common.ValueMapDecorator;
4041
import com.adobe.granite.security.user.UserProperties;
4142
import com.adobe.granite.security.user.UserPropertiesManager;
4243
import com.day.cq.commons.Externalizer;
@@ -66,6 +67,7 @@
6667
import org.slf4j.LoggerFactory;
6768

6869
import javax.jcr.RepositoryException;
70+
import javax.jcr.Value;
6971
import java.util.ArrayList;
7072
import java.util.Arrays;
7173
import java.util.HashMap;
@@ -116,6 +118,8 @@ public boolean accepts(final SlingHttpServletRequest request) {
116118

117119
@Override
118120
public final void share(final SlingHttpServletRequest request, final SlingHttpServletResponse response, final ValueMap shareParameters) throws ShareException {
121+
final ValueMap unprotectedShareParameters = new ValueMapDecorator(new HashMap<>());
122+
unprotectedShareParameters.putAll(shareParameters);
119123

120124
/** Work around for regression issue introduced in AEM 6.4 **/
121125
SlingBindings bindings = new SlingBindings();
@@ -127,10 +131,11 @@ public final void share(final SlingHttpServletRequest request, final SlingHttpSe
127131
final EmailShare emailShare = request.adaptTo(EmailShare.class);
128132

129133
shareParameters.putAll(xssProtectUserData(emailShare.getUserData()));
130-
//shareParameters.putAll(emailShare.getUserData());
134+
unprotectedShareParameters.putAll(emailShare.getUserData());
131135

132136
// Configured data supersedes user data
133137
shareParameters.putAll(emailShare.getConfiguredData());
138+
unprotectedShareParameters.putAll(emailShare.getConfiguredData());
134139

135140
// Except for signature which we may or may not want to use from configured data, depending on flags in configured data
136141
shareParameters.put(SIGNATURE, getSignature(emailShare, userProperties));
@@ -141,12 +146,12 @@ public final void share(final SlingHttpServletRequest request, final SlingHttpSe
141146
shareParameters.put(EmailService.REPLY_TO, replyToAddress);
142147
}
143148

144-
share(request.adaptTo(Config.class), shareParameters, StringUtils.defaultIfBlank(emailShare.getEmailTemplatePath(), cfg.emailTemplate()));
149+
share(request.adaptTo(Config.class), unprotectedShareParameters, shareParameters, StringUtils.defaultIfBlank(emailShare.getEmailTemplatePath(), cfg.emailTemplate()));
145150
}
146151

147-
private final void share(final Config config, final ValueMap shareParameters, final String emailTemplatePath) throws ShareException {
148-
final String[] emailAddresses = StringUtils.split(shareParameters.get(EMAIL_ADDRESSES, ""), ",");
149-
final String[] assetPaths = Arrays.stream(shareParameters.get(ASSET_PATHS, ArrayUtils.EMPTY_STRING_ARRAY))
152+
private final void share(final Config config, final ValueMap unprotectedShareParameters, final ValueMap shareParameters, final String emailTemplatePath) throws ShareException {
153+
final String[] emailAddresses = StringUtils.split(unprotectedShareParameters.get(EMAIL_ADDRESSES, ""), ",");
154+
final String[] assetPaths = Arrays.stream(unprotectedShareParameters.get(ASSET_PATHS, ArrayUtils.EMPTY_STRING_ARRAY))
150155
.filter(StringUtils::isNotBlank)
151156
.map(path -> config.getResourceResolver().getResource(path))
152157
.filter(Objects::nonNull)
@@ -163,7 +168,7 @@ private final void share(final Config config, final ValueMap shareParameters, fi
163168
}
164169

165170
// Convert provided params to <String, String>; anything that needs to be accessed in its native type should be accessed and manipulated via shareParameters.get(..)
166-
final Map<String, String> emailParameters = new HashMap<String, String>();
171+
final Map<String, String> emailParameters = new HashMap<>();
167172
for (final String key : shareParameters.keySet()) {
168173
emailParameters.put(key, shareParameters.get(key, String.class));
169174
}
@@ -288,7 +293,6 @@ private boolean isValidUser(SlingHttpServletRequest request) {
288293
private Map<String, Object> xssProtectUserData(Map<String, Object> dirtyUserData) {
289294
Map<String, Object> cleanUserData = new HashMap<String, Object>();
290295
for (final Map.Entry<String, Object> entry : dirtyUserData.entrySet()) {
291-
292296
if (entry.getValue() instanceof String[]) {
293297
cleanUserData.put(entry.getKey(), xssCleanData((String[]) entry.getValue()));
294298
} else if (entry.getValue() instanceof String) {

core/src/main/java/com/adobe/aem/commons/assetshare/components/actions/share/impl/ShareServlet.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ private final void share(SlingHttpServletRequest request, SlingHttpServletRespon
8282
try {
8383
shareService.share(request, response,
8484
// Make map write-able
85-
new ValueMapDecorator(new HashMap<String, Object>(request.getParameterMap())));
85+
new ValueMapDecorator(new HashMap<>(request.getParameterMap())));
8686
counter.incrementAndGet();
8787
} catch (ShareException e) {
8888
if (log.isErrorEnabled()) {
@@ -96,7 +96,7 @@ private final void share(SlingHttpServletRequest request, SlingHttpServletRespon
9696
if (counter.get() == 0) {
9797
defaultShareService.share(request, response,
9898
// Make map write-able
99-
new ValueMapDecorator(new HashMap<String, Object>(request.getParameterMap())));
99+
new ValueMapDecorator(new HashMap<>(request.getParameterMap())));
100100
}
101101
} catch (ShareException ex) {
102102
log.error("Unable to share assets from Asset Share Commons", ex);

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
<!-- the minimum AEM 6.5 version being supported -->
7373
<aem.classic.api.version>6.5.7.0003</aem.classic.api.version><!-- actually one of https://repo1.maven.org/maven2/io/wcm/maven/io.wcm.maven.aem-dependencies/ -->
7474
<!-- the minimum AEMaaCS version being supported -->
75-
<aem.sdk.api.version>2022.9.8722.20220912T101352Z-220800</aem.sdk.api.version><!-- actually one of https://repo1.maven.org/maven2/com/adobe/aem/aem-sdk-api/ -->
75+
<aem.sdk.api.version>2023.3.11382.20230315T073850Z-230200</aem.sdk.api.version><!-- actually one of https://repo1.maven.org/maven2/com/adobe/aem/aem-sdk-api/ -->
7676
<core.wcm.components.version>2.17.14</core.wcm.components.version>
7777
<frontend-maven-plugin.version>1.9.0</frontend-maven-plugin.version>
7878
<node.version>v13.7.0</node.version>

0 commit comments

Comments
 (0)