Index: lams_tool_whiteboard/.classpath =================================================================== diff -u -r90e5fd15f6474eb56d0b497d1b73e14bda75e262 -re9d22ce99dd49f9fd9495c9e78a3306ee07a74b0 --- lams_tool_whiteboard/.classpath (.../.classpath) (revision 90e5fd15f6474eb56d0b497d1b73e14bda75e262) +++ lams_tool_whiteboard/.classpath (.../.classpath) (revision e9d22ce99dd49f9fd9495c9e78a3306ee07a74b0) @@ -22,6 +22,7 @@ + Index: lams_tool_whiteboard/src/java/org/lamsfoundation/lams/tool/whiteboard/service/IWhiteboardService.java =================================================================== diff -u -r6583579862c8623515c9861dd8edec09b6d1898f -re9d22ce99dd49f9fd9495c9e78a3306ee07a74b0 --- lams_tool_whiteboard/src/java/org/lamsfoundation/lams/tool/whiteboard/service/IWhiteboardService.java (.../IWhiteboardService.java) (revision 6583579862c8623515c9861dd8edec09b6d1898f) +++ lams_tool_whiteboard/src/java/org/lamsfoundation/lams/tool/whiteboard/service/IWhiteboardService.java (.../IWhiteboardService.java) (revision e9d22ce99dd49f9fd9495c9e78a3306ee07a74b0) @@ -134,4 +134,6 @@ String getWhiteboardServerUrl() throws WhiteboardApplicationException; String getWhiteboardAccessTokenHash(String wid, String sourceWid); + + String getWhiteboardReadOnlyWid(String wid) throws WhiteboardApplicationException; } \ No newline at end of file Index: lams_tool_whiteboard/src/java/org/lamsfoundation/lams/tool/whiteboard/service/WhiteboardService.java =================================================================== diff -u -r6583579862c8623515c9861dd8edec09b6d1898f -re9d22ce99dd49f9fd9495c9e78a3306ee07a74b0 --- lams_tool_whiteboard/src/java/org/lamsfoundation/lams/tool/whiteboard/service/WhiteboardService.java (.../WhiteboardService.java) (revision 6583579862c8623515c9861dd8edec09b6d1898f) +++ lams_tool_whiteboard/src/java/org/lamsfoundation/lams/tool/whiteboard/service/WhiteboardService.java (.../WhiteboardService.java) (revision e9d22ce99dd49f9fd9495c9e78a3306ee07a74b0) @@ -24,8 +24,12 @@ package org.lamsfoundation.lams.tool.whiteboard.service; import java.io.IOException; +import java.io.InputStream; +import java.io.StringWriter; import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; import java.net.URLEncoder; +import java.nio.charset.Charset; import java.security.InvalidParameterException; import java.time.LocalDateTime; import java.util.ArrayList; @@ -36,6 +40,7 @@ import java.util.SortedMap; import java.util.stream.Collectors; +import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.lamsfoundation.lams.confidencelevel.ConfidenceLevelDTO; @@ -78,6 +83,7 @@ import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.util.FileUtil; +import org.lamsfoundation.lams.util.HttpUrlConnectionUtil; import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.util.WebUtil; @@ -480,6 +486,41 @@ return String.valueOf(plainText.hashCode()); } + @Override + public String getWhiteboardReadOnlyWid(String wid) throws WhiteboardApplicationException { + if (StringUtils.isBlank(wid)) { + return null; + } + // using Whiteboard API from https://cloud13.de/testwhiteboard/apidoc/index.html + String whiteboardServerUrl = getWhiteboardServerUrl(); + StringBuilder url = new StringBuilder().append(whiteboardServerUrl).append("/api/getReadOnlyWid?wid=").append(wid); + String whiteboardAccessToken = getWhiteboardAccessTokenHash(wid, null); + if (whiteboardAccessToken != null) { + url.append("&at=").append(whiteboardAccessToken); + } + + try { + HttpURLConnection connection = HttpUrlConnectionUtil.getConnection(url.toString()); + connection.connect(); + int code = connection.getResponseCode(); + if (code != 200) { + throw new IOException( + "When getting Whiteboard read-only ID for wid " + wid + " server responded with code " + code); + } + + InputStream responseStream = connection.getInputStream(); + if (responseStream != null) { + StringWriter writer = new StringWriter(); + IOUtils.copy(responseStream, writer, Charset.defaultCharset()); + return writer.toString(); + } + } catch (IOException e) { + throw new WhiteboardApplicationException("Could not get Whiteboard read-only ID for wid: " + wid, e); + } + + return null; + } + public static String getWhiteboardAuthorName(UserDTO user) throws UnsupportedEncodingException { if (user == null) { return null; Index: lams_tool_whiteboard/src/java/org/lamsfoundation/lams/tool/whiteboard/web/controller/LearningController.java =================================================================== diff -u -r6583579862c8623515c9861dd8edec09b6d1898f -re9d22ce99dd49f9fd9495c9e78a3306ee07a74b0 --- lams_tool_whiteboard/src/java/org/lamsfoundation/lams/tool/whiteboard/web/controller/LearningController.java (.../LearningController.java) (revision 6583579862c8623515c9861dd8edec09b6d1898f) +++ lams_tool_whiteboard/src/java/org/lamsfoundation/lams/tool/whiteboard/web/controller/LearningController.java (.../LearningController.java) (revision e9d22ce99dd49f9fd9495c9e78a3306ee07a74b0) @@ -219,7 +219,13 @@ String whiteboardAuthorName = WhiteboardService.getWhiteboardAuthorName(currentUserDto); request.setAttribute("whiteboardAuthorName", whiteboardAuthorName); + // This is just a convention used for Whiteboard canvases in lessons. + // Authored canvases are recognised by their corresponding tool content ID without session ID part. String wid = whiteboard.getContentId() + "-" + toolSessionId; + if (!hasEditRight) { + wid = whiteboardService.getWhiteboardReadOnlyWid(wid); + } + request.setAttribute("wid", wid); String whiteboardAccessTokenHash = whiteboardService.getWhiteboardAccessTokenHash(wid, null); request.setAttribute("whiteboardAccessToken", whiteboardAccessTokenHash); Index: lams_tool_whiteboard/web/pages/learning/learning.jsp =================================================================== diff -u -r6583579862c8623515c9861dd8edec09b6d1898f -re9d22ce99dd49f9fd9495c9e78a3306ee07a74b0 --- lams_tool_whiteboard/web/pages/learning/learning.jsp (.../learning.jsp) (revision 6583579862c8623515c9861dd8edec09b6d1898f) +++ lams_tool_whiteboard/web/pages/learning/learning.jsp (.../learning.jsp) (revision e9d22ce99dd49f9fd9495c9e78a3306ee07a74b0) @@ -216,7 +216,7 @@