Skip to content

Commit

Permalink
CSCEXAM-1283 Fix encoding of query params in collab exam search
Browse files Browse the repository at this point in the history
  • Loading branch information
lupari committed Jun 10, 2024
1 parent ac055bf commit 87b6814
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 31 deletions.
33 changes: 15 additions & 18 deletions app/controllers/iop/collaboration/impl/CollaborationController.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Map;
import java.util.Optional;
Expand All @@ -35,6 +33,7 @@
import org.slf4j.LoggerFactory;
import play.libs.Json;
import play.libs.ws.WSClient;
import play.libs.ws.WSRequest;
import play.libs.ws.WSResponse;
import play.mvc.Result;
import util.config.ConfigReader;
Expand Down Expand Up @@ -68,22 +67,20 @@ Optional<URL> parseUrl() {
}
}

Optional<URL> parseUrlWithSearchParam(String filter, boolean anonymous) {
try {
if (filter == null) {
return Optional.empty();
}
String paramStr = String.format(
"filter=%s&anonymous=%s",
URLEncoder.encode(filter, StandardCharsets.UTF_8),
anonymous
);
URI uri = URI.create(String.format("%s/api/exams/search?%s", configReader.getIopHost(), paramStr));
return Optional.of(uri.toURL());
} catch (MalformedURLException e) {
logger.error("Malformed URL", e);
return Optional.empty();
}
WSRequest getSearchRequest(Optional<String> filter) {
String host = configReader.getIopHost();
return filter
.map(s -> {
URI uri = URI.create(String.format("%s/api/exams/search", host));
return wsClient
.url(uri.toString())
.addQueryParameter("filter", s)
.addQueryParameter("anonymous", "false");
})
.orElseGet(() -> {
URI uri = URI.create(String.format("%s/api/exams", host));
return wsClient.url(uri.toString());
});
}

protected CompletionStage<Optional<Exam>> downloadExam(CollaborativeExam ce) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import io.ebean.Transaction;
import io.ebean.text.PathProperties;
import io.vavr.control.Either;
import java.net.URL;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
Expand Down Expand Up @@ -68,12 +67,7 @@ private Either<Result, Exam> checkExam(Exam exam, User user) {

@Restrict({ @Group("STUDENT") })
public CompletionStage<Result> searchExams(Optional<String> filter) {
Optional<URL> url = filter.orElse("").isEmpty() ? parseUrl() : parseUrlWithSearchParam(filter.get(), false);
if (url.isEmpty()) {
return wrapAsPromise(internalServerError("i18n_internal_error"));
}

WSRequest request = wsClient.url(url.get().toString());
WSRequest request = getSearchRequest(filter);
String homeOrg = configReader.getHomeOrganisationRef();
Function<WSResponse, Result> onSuccess = response ->
findExamsToProcess(response)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,13 +101,8 @@ private Exam prepareDraft(User user) {
@Authenticated
@Restrict({ @Group("ADMIN"), @Group("TEACHER") })
public CompletionStage<Result> searchExams(Http.Request request, final Optional<String> filter) {
Optional<URL> url = filter.orElse("").isEmpty() ? parseUrl() : parseUrlWithSearchParam(filter.get(), false);
if (url.isEmpty()) {
return wrapAsPromise(internalServerError("i18n_internal_error"));
}

WSRequest wsRequest = getSearchRequest(filter);
User user = request.attrs().get(Attrs.AUTHENTICATED_USER);
WSRequest wsRequest = wsClient.url(url.get().toString());
String homeOrg = configReader.getHomeOrganisationRef();

Function<WSResponse, Result> onSuccess = response ->
Expand Down

0 comments on commit 87b6814

Please sign in to comment.