From 6e38d83545837f4f0223dab3da2e45c1d9d3e63d Mon Sep 17 00:00:00 2001 From: "Code Hugger (Matthew Jones)" Date: Thu, 21 Jan 2021 13:52:12 -0500 Subject: [PATCH] SAK-44878 - Mark the LTI Advantage JSON documents as UTF-8 (#8976) Co-authored-by: Charles Severance --- .../org/sakaiproject/lti13/LTI13Servlet.java | 21 +++++++++++-------- .../java/org/tsugi/ags2/objects/LineItem.java | 3 +++ .../java/org/tsugi/ags2/objects/Result.java | 3 +++ 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/basiclti/basiclti-blis/src/java/org/sakaiproject/lti13/LTI13Servlet.java b/basiclti/basiclti-blis/src/java/org/sakaiproject/lti13/LTI13Servlet.java index 6ecff4a9641c..6e5ed47f4a0e 100644 --- a/basiclti/basiclti-blis/src/java/org/sakaiproject/lti13/LTI13Servlet.java +++ b/basiclti/basiclti-blis/src/java/org/sakaiproject/lti13/LTI13Servlet.java @@ -693,6 +693,7 @@ protected void handleKeySet(String tool_id, HttpServletRequest request, HttpServ return; } + response.setContentType(APPLICATION_JSON); try { out = response.getWriter(); } catch (Exception e) { @@ -701,7 +702,6 @@ protected void handleKeySet(String tool_id, HttpServletRequest request, HttpServ return; } - response.setContentType(APPLICATION_JSON); try { out.println(keySetJSON); } catch (Exception e) { @@ -854,9 +854,9 @@ protected void handleTokenPost(String tool_id, HttpServletRequest request, HttpS AccessToken at = new AccessToken(); at.access_token = jws; - response.setContentType(APPLICATION_JSON); String atsp = JacksonUtil.prettyPrintLog(at); + response.setContentType(APPLICATION_JSON); try { PrintWriter out = response.getWriter(); out.println(atsp); @@ -1226,6 +1226,7 @@ protected void handleNamesAndRoles(String signed_placement, HttpServletRequest r String maintainRole = site.getMaintainRole(); + response.setContentType(APPLICATION_JSON); PrintWriter out = response.getWriter(); out.println("{"); out.println(" \"id\" : \"http://TODO.wtf.com/we_eliminated_json_ld_but_forgot_to_remove_this\","); @@ -1658,7 +1659,7 @@ private void handleLineItemsPost(String signed_placement, HttpServletRequest req item.id = getOurServerUrl() + LTI13_PATH + "lineitems/" + signed_placement + "/" + retval.getId(); log.debug("Lineitem item={}",item); - response.setContentType(SakaiLineItem.MIME_TYPE); + response.setContentType(SakaiLineItem.CONTENT_TYPE); PrintWriter out = response.getWriter(); String json_out = JacksonUtil.prettyPrint(item); @@ -1738,7 +1739,7 @@ private void handleLineItemsUpdate(String signed_placement, String lineItem, Htt item.id = getOurServerUrl() + LTI13_PATH + "lineitems/" + signed_placement + "/" + retval.getId(); log.debug("Lineitem item={}",item); - response.setContentType(LineItem.MIME_TYPE); + response.setContentType(LineItem.CONTENT_TYPE); PrintWriter out = response.getWriter(); out.print(JacksonUtil.prettyPrint(item)); @@ -1792,7 +1793,7 @@ private void handleLineItemsGet(String signed_placement, boolean all, SakaiLineI // If we are only returning a single line item if ( ! all ) { - response.setContentType(SakaiLineItem.MIME_TYPE); + response.setContentType(SakaiLineItem.CONTENT_TYPE); SakaiLineItem item = LineItemUtil.getDefaultLineItem(site, content); PrintWriter out = response.getWriter(); out.print(JacksonUtil.prettyPrint(item)); @@ -1802,8 +1803,7 @@ private void handleLineItemsGet(String signed_placement, boolean all, SakaiLineI // Find the line items created for this tool List toolItems = LineItemUtil.getLineItemsForTool(signed_placement, site, sat.tool_id, filter); - response.setContentType(SakaiLineItem.MIME_TYPE_CONTAINER); - + response.setContentType(SakaiLineItem.CONTENT_TYPE_CONTAINER); PrintWriter out = response.getWriter(); out.print("["); boolean first = true; @@ -1894,9 +1894,10 @@ private void handleLineItemsDetail(String signed_placement, String lineItem, boo if ( ! results ) { SakaiLineItem item = LineItemUtil.getLineItem(signed_placement, a); - response.setContentType(SakaiLineItem.MIME_TYPE); String json_out = JacksonUtil.prettyPrint(item); log.debug("Returning {}", json_out); + + response.setContentType(SakaiLineItem.CONTENT_TYPE); PrintWriter out = response.getWriter(); out.print(json_out); return; @@ -1921,7 +1922,7 @@ private void resultsForAssignment(String signed_placement, Site site, Assignment "comment": "This is exceptional work." }] */ - response.setContentType(Result.MIME_TYPE_CONTAINER); + response.setContentType(Result.CONTENT_TYPE_CONTAINER); // Look up the assignment so we can find the max points GradebookService g = (GradebookService) ComponentManager @@ -1958,6 +1959,8 @@ private void resultsForAssignment(String signed_placement, Site site, Assignment List users = UserDirectoryService.getUsers(userIds); boolean first = true; + + response.setContentType(APPLICATION_JSON); PrintWriter out = response.getWriter(); if ( user_id == null ) out.println("["); diff --git a/basiclti/tsugi-util/src/java/org/tsugi/ags2/objects/LineItem.java b/basiclti/tsugi-util/src/java/org/tsugi/ags2/objects/LineItem.java index 221db1943d83..d90c19c7fe2a 100644 --- a/basiclti/tsugi-util/src/java/org/tsugi/ags2/objects/LineItem.java +++ b/basiclti/tsugi-util/src/java/org/tsugi/ags2/objects/LineItem.java @@ -33,6 +33,9 @@ public class LineItem { public static final String MIME_TYPE = "application/vnd.ims.lis.v2.lineitem+json"; public static final String MIME_TYPE_CONTAINER = "application/vnd.ims.lis.v2.lineitemcontainer+json"; + public static final String CONTENT_TYPE = MIME_TYPE + "; charset=utf-8"; + public static final String CONTENT_TYPE_CONTAINER = MIME_TYPE_CONTAINER + "; charset=utf-8"; + @JsonProperty("scoreMaximum") public Double scoreMaximum; @JsonProperty("label") diff --git a/basiclti/tsugi-util/src/java/org/tsugi/ags2/objects/Result.java b/basiclti/tsugi-util/src/java/org/tsugi/ags2/objects/Result.java index 7138c40729ad..76766e3aaa07 100644 --- a/basiclti/tsugi-util/src/java/org/tsugi/ags2/objects/Result.java +++ b/basiclti/tsugi-util/src/java/org/tsugi/ags2/objects/Result.java @@ -28,6 +28,9 @@ public class Result { // This is all output-only public static final String MIME_TYPE = "application/vnd.ims.lis.v2.result+json"; public static final String MIME_TYPE_CONTAINER = "application/vnd.ims.lis.v2.resultcontainer+json"; + public static final String CONTENT_TYPE = MIME_TYPE + "; charset=utf-8"; + public static final String CONTENT_TYPE_CONTAINER = MIME_TYPE_CONTAINER + "; charset=utf-8"; + @JsonProperty("id") public String id; @JsonProperty("scoreOf")