Skip to content

Commit 52f85a5

Browse files
authored
Encode URIs using UriBuilder (#1128)
Resolves #1127
1 parent 44dbbd2 commit 52f85a5

File tree

5 files changed

+20
-14
lines changed

5 files changed

+20
-14
lines changed

components/file/src/main/java/org/trellisldp/file/FileBinaryService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import javax.inject.Inject;
3535

3636
import org.apache.commons.rdf.api.IRI;
37+
import org.apache.jena.util.URIref;
3738
import org.eclipse.microprofile.config.Config;
3839
import org.eclipse.microprofile.config.ConfigProvider;
3940
import org.slf4j.Logger;
@@ -147,7 +148,7 @@ private File getFileFromIdentifier(final IRI identifier) {
147148
final String iriString = identifier.getIRIString();
148149
if (!iriString.startsWith("file:"))
149150
throw new IllegalArgumentException("Could not create File object from IRI: " + identifier);
150-
final String schemeSpecificPart = URI.create(iriString).getSchemeSpecificPart();
151+
final String schemeSpecificPart = URI.create(URIref.encode(iriString)).getSchemeSpecificPart();
151152
return new File(basePath, trimStart(schemeSpecificPart, "/"));
152153
}
153154

components/test/src/main/java/org/trellisldp/test/AbstractApplicationAuthTests.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package org.trellisldp.test;
1717

18-
import static java.net.URI.create;
1918
import static javax.ws.rs.client.Entity.entity;
2019
import static javax.ws.rs.core.HttpHeaders.AUTHORIZATION;
2120
import static javax.ws.rs.core.HttpHeaders.LINK;
@@ -34,6 +33,7 @@
3433

3534
import javax.ws.rs.client.Client;
3635
import javax.ws.rs.core.Response;
36+
import javax.ws.rs.core.UriBuilder;
3737

3838
import org.junit.jupiter.api.DisplayName;
3939
import org.junit.jupiter.api.Test;
@@ -333,7 +333,7 @@ public void setUp() {
333333
final String publicContainerAcl = getLinks(res).stream().filter(link -> link.getRel().equals(acl))
334334
.map(link -> link.getUri().toString()).findFirst().orElse("");
335335
assertEquals(getPublicContainer() + EXT_ACL,
336-
create(getPublicContainer()).resolve(publicContainerAcl).toString(),
336+
UriBuilder.fromUri(getPublicContainer()).build().resolve(publicContainerAcl).toString(),
337337
"Check ACL location for 'public'");
338338
}
339339

@@ -367,7 +367,7 @@ public void setUp() {
367367
final String protectedContainerAcl = getLinks(res).stream().filter(link -> link.getRel().equals(acl))
368368
.map(link -> link.getUri().toString()).findFirst().orElse("");
369369
assertEquals(getProtectedContainer() + EXT_ACL,
370-
create(protectedContainer).resolve(protectedContainerAcl).toString(),
370+
UriBuilder.fromUri(protectedContainer).build().resolve(protectedContainerAcl).toString(),
371371
"Check 'protected' ACL URL");
372372
}
373373

@@ -403,7 +403,8 @@ public void setUp() {
403403
final String privateContainerAcl = getLinks(res).stream().filter(link -> link.getRel().equals(acl))
404404
.map(link -> link.getUri().toString()).findFirst().orElse("");
405405
assertEquals(getPrivateContainer() + EXT_ACL,
406-
create(privateContainer).resolve(privateContainerAcl).toString(), "Check 'private' ACL URL");
406+
UriBuilder.fromUri(privateContainer).build().resolve(privateContainerAcl).toString(),
407+
"Check 'private' ACL URL");
407408
}
408409

409410
final String privateAcl = prefixAcl
@@ -452,7 +453,8 @@ public void setUp() {
452453
final String groupContainerAcl = getLinks(res).stream().filter(link -> link.getRel().equals(acl))
453454
.map(link -> link.getUri().toString()).findFirst().orElse("");
454455
assertEquals(getGroupContainer() + EXT_ACL,
455-
create(groupContainer).resolve(groupContainerAcl).toString(), "Check 'group' ACL URL");
456+
UriBuilder.fromUri(groupContainer).build().resolve(groupContainerAcl).toString(),
457+
"Check 'group' ACL URL");
456458
}
457459

458460
final String groupAcl = prefixAcl
@@ -486,7 +488,8 @@ public void setUp() {
486488
final String defaultContainerAcl = getLinks(res).stream().filter(link -> link.getRel().equals(acl))
487489
.map(link -> link.getUri().toString()).findFirst().orElse("");
488490
assertEquals(getDefaultContainer() + EXT_ACL,
489-
create(defaultContainer).resolve(defaultContainerAcl).toString(), "Check 'default' ACL URL");
491+
UriBuilder.fromUri(defaultContainer).build().resolve(defaultContainerAcl).toString(),
492+
"Check 'default' ACL URL");
490493
}
491494

492495
final String defaultAcl = "PREFIX foaf: <http://xmlns.com/foaf/0.1/>\n"

core/http/src/main/java/org/trellisldp/http/impl/GetHandler.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
package org.trellisldp.http.impl;
1717

1818
import static java.lang.String.join;
19-
import static java.net.URI.create;
2019
import static java.util.Date.from;
2120
import static java.util.concurrent.CompletableFuture.completedFuture;
2221
import static java.util.stream.Collectors.joining;
@@ -81,6 +80,7 @@
8180
import javax.ws.rs.core.Link;
8281
import javax.ws.rs.core.Response.ResponseBuilder;
8382
import javax.ws.rs.core.StreamingOutput;
83+
import javax.ws.rs.core.UriBuilder;
8484

8585
import org.apache.commons.rdf.api.IRI;
8686
import org.apache.commons.rdf.api.Quad;
@@ -410,10 +410,12 @@ private void addLdpHeaders(final ResponseBuilder builder, final IRI model) {
410410

411411
private void handleTrailingSlashRedirection(final Resource resource) {
412412
if (getRequest().hasTrailingSlash() && !isContainer(resource.getInteractionModel())) {
413-
throw new RedirectionException(303, create(getBaseUrl() + normalizePath(getRequest().getPath())));
413+
throw new RedirectionException(303,
414+
UriBuilder.fromUri(getBaseUrl()).path(normalizePath(getRequest().getPath())).build());
414415
} else if (!getRequest().hasTrailingSlash() && !getRequest().getPath().isEmpty()
415416
&& isContainer(resource.getInteractionModel())) {
416-
throw new RedirectionException(303, create(getBaseUrl() + normalizePath(getRequest().getPath()) + "/"));
417+
throw new RedirectionException(303,
418+
UriBuilder.fromUri(getBaseUrl()).path(normalizePath(getRequest().getPath()) + "/").build());
417419
}
418420
}
419421
}

core/http/src/main/java/org/trellisldp/http/impl/PostHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package org.trellisldp.http.impl;
1717

18-
import static java.net.URI.create;
1918
import static javax.ws.rs.HttpMethod.DELETE;
2019
import static javax.ws.rs.HttpMethod.GET;
2120
import static javax.ws.rs.HttpMethod.HEAD;
@@ -50,6 +49,7 @@
5049
import javax.ws.rs.core.Link;
5150
import javax.ws.rs.core.MediaType;
5251
import javax.ws.rs.core.Response.ResponseBuilder;
52+
import javax.ws.rs.core.UriBuilder;
5353

5454
import org.apache.commons.rdf.api.Dataset;
5555
import org.apache.commons.rdf.api.IRI;
@@ -213,7 +213,7 @@ private CompletionStage<ResponseBuilder> handleResourceCreation(final Dataset mu
213213
.thenCompose(future -> emitEvent(internalId, AS.Create, ldpType))
214214
.thenApply(future -> {
215215
ldpResourceTypes(ldpType).map(IRI::getIRIString).forEach(type -> builder.link(type, Link.TYPE));
216-
return builder.location(create(getIdentifier()));
216+
return builder.location(UriBuilder.fromUri(getIdentifier()).build());
217217
});
218218
}
219219

core/http/src/main/java/org/trellisldp/http/impl/PutHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package org.trellisldp.http.impl;
1717

18-
import static java.net.URI.create;
1918
import static javax.ws.rs.core.HttpHeaders.IF_MATCH;
2019
import static javax.ws.rs.core.HttpHeaders.IF_UNMODIFIED_SINCE;
2120
import static javax.ws.rs.core.MediaType.APPLICATION_OCTET_STREAM;
@@ -49,6 +48,7 @@
4948
import javax.ws.rs.core.Link;
5049
import javax.ws.rs.core.MediaType;
5150
import javax.ws.rs.core.Response.ResponseBuilder;
51+
import javax.ws.rs.core.UriBuilder;
5252

5353
import org.apache.commons.rdf.api.Dataset;
5454
import org.apache.commons.rdf.api.IRI;
@@ -297,7 +297,7 @@ private void checkConstraints(final Dataset dataset, final IRI ldpType, final RD
297297

298298
private ResponseBuilder decorateResponse(final ResponseBuilder builder) {
299299
if (getResource() == null) {
300-
return builder.status(CREATED).contentLocation(create(getIdentifier()));
300+
return builder.status(CREATED).contentLocation(UriBuilder.fromUri(getIdentifier()).build());
301301
}
302302
return builder;
303303
}

0 commit comments

Comments
 (0)