Index: lams_tool_zoom/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -rde735f1c077e7c8ca07eddc6894b06e5beef5331 -r81abb42871bc57068ca574fa56e2f039ca04702a --- lams_tool_zoom/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision de735f1c077e7c8ca07eddc6894b06e5beef5331) +++ lams_tool_zoom/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 81abb42871bc57068ca574fa56e2f039ca04702a) @@ -38,6 +38,7 @@ label.monitoring.startConference =Start conference label.learning.conferenceNotAvailable =Zoom meeting is not available yet. Please see your instructor for further details. label.refresh =Refresh +label.meeting.password = Use the following password to enter the meeting: message.defineLaterSet =Please wait for the teacher to complete the contents of this activity message.alertContentEdit =Warning: One of more learners have accessed this activity. Changing this content will result in learners getting different information. message.no.reflection.available =Notebook not available Index: lams_tool_zoom/src/java/org/lamsfoundation/lams/tool/zoom/dbupdates/patch20200410.sql =================================================================== diff -u --- lams_tool_zoom/src/java/org/lamsfoundation/lams/tool/zoom/dbupdates/patch20200410.sql (revision 0) +++ lams_tool_zoom/src/java/org/lamsfoundation/lams/tool/zoom/dbupdates/patch20200410.sql (revision 81abb42871bc57068ca574fa56e2f039ca04702a) @@ -0,0 +1,12 @@ +SET AUTOCOMMIT = 0; +SET FOREIGN_KEY_CHECKS = 0; + + +-- LDEV-5006 Password protect Zoom meetings +ALTER TABLE tl_lazoom10_zoom ADD COLUMN meeting_password CHAR(6); + + +-- If there were no errors, commit and restore autocommit to on +COMMIT; +SET AUTOCOMMIT = 1; +SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file Index: lams_tool_zoom/src/java/org/lamsfoundation/lams/tool/zoom/model/Zoom.java =================================================================== diff -u -r1ee503e3d0e0228ea8a45025fddf15d9623c0377 -r81abb42871bc57068ca574fa56e2f039ca04702a --- lams_tool_zoom/src/java/org/lamsfoundation/lams/tool/zoom/model/Zoom.java (.../Zoom.java) (revision 1ee503e3d0e0228ea8a45025fddf15d9623c0377) +++ lams_tool_zoom/src/java/org/lamsfoundation/lams/tool/zoom/model/Zoom.java (.../Zoom.java) (revision 81abb42871bc57068ca574fa56e2f039ca04702a) @@ -97,6 +97,9 @@ @Column(name = "meeting_start_url") private String meetingStartUrl; + + @Column(name = "meeting_password") + private String meetingPassword; @OneToMany(mappedBy = "zoom") private Set zoomSessions; @@ -228,7 +231,15 @@ public void setMeetingStartUrl(String meetingStartUrl) { this.meetingStartUrl = meetingStartUrl; } + + public String getMeetingPassword() { + return meetingPassword; + } + public void setMeetingPassword(String meetingPassword) { + this.meetingPassword = meetingPassword; + } + public ZoomApi getApi() { return api; } Index: lams_tool_zoom/src/java/org/lamsfoundation/lams/tool/zoom/service/IZoomService.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r81abb42871bc57068ca574fa56e2f039ca04702a --- lams_tool_zoom/src/java/org/lamsfoundation/lams/tool/zoom/service/IZoomService.java (.../IZoomService.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_zoom/src/java/org/lamsfoundation/lams/tool/zoom/service/IZoomService.java (.../IZoomService.java) (revision 81abb42871bc57068ca574fa56e2f039ca04702a) @@ -128,10 +128,8 @@ /** * Create a new Zoom meeting using API - * - * @return start URL for browser to call and start the meeting */ - String createMeeting(Long zoomUid) throws IOException; + Zoom createMeeting(Long zoomUid) throws IOException; /** * Register user for a meeting. Use session name in last name if the activity is grouped. Index: lams_tool_zoom/src/java/org/lamsfoundation/lams/tool/zoom/service/ZoomService.java =================================================================== diff -u -rde735f1c077e7c8ca07eddc6894b06e5beef5331 -r81abb42871bc57068ca574fa56e2f039ca04702a --- lams_tool_zoom/src/java/org/lamsfoundation/lams/tool/zoom/service/ZoomService.java (.../ZoomService.java) (revision de735f1c077e7c8ca07eddc6894b06e5beef5331) +++ lams_tool_zoom/src/java/org/lamsfoundation/lams/tool/zoom/service/ZoomService.java (.../ZoomService.java) (revision 81abb42871bc57068ca574fa56e2f039ca04702a) @@ -50,6 +50,7 @@ import org.apache.log4j.Logger; import org.lamsfoundation.lams.confidencelevel.ConfidenceLevelDTO; import org.lamsfoundation.lams.contentrepository.client.IToolContentHandler; +import org.lamsfoundation.lams.integration.security.RandomPasswordGenerator; import org.lamsfoundation.lams.learning.service.ILearnerService; import org.lamsfoundation.lams.learningdesign.service.ExportToolContentException; import org.lamsfoundation.lams.learningdesign.service.IExportToolContentService; @@ -320,7 +321,7 @@ } } - @SuppressWarnings("rawtypes") + @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public Class[] getSupportedToolOutputDefinitionClasses(int definitionType) { return null; @@ -644,10 +645,10 @@ } @Override - public String createMeeting(Long zoomUid) throws IOException { + public Zoom createMeeting(Long zoomUid) throws IOException { Zoom zoom = (Zoom) zoomDAO.find(Zoom.class, zoomUid); if (zoom.getMeetingId() != null) { - return zoom.getMeetingStartUrl(); + return zoom; } if (zoom.getApi() == null) { throw new ZoomException("Can not create a meeting without API keys chosen"); @@ -672,7 +673,7 @@ if (logger.isDebugEnabled()) { logger.debug("Created meeting: " + meetingId); } - return zoom.getMeetingStartUrl(); + return zoom; } @Override @@ -809,6 +810,10 @@ if (zoom.getDuration() != null) { bodyJSON.put("duration", zoom.getDuration()); } + String password = RandomPasswordGenerator.nextPassword(6); + bodyJSON.put("password", password); + zoom.setMeetingPassword(password); + HttpURLConnection connection = ZoomService.getZoomConnection("meetings/" + zoom.getMeetingId(), "PATCH", bodyJSON.toString(), zoom.getApi()); ZoomService.getReponse(connection); Index: lams_tool_zoom/src/java/org/lamsfoundation/lams/tool/zoom/util/ZoomConstants.java =================================================================== diff -u -rcd28f26327e5afe5f9797847d801eba0abab9144 -r81abb42871bc57068ca574fa56e2f039ca04702a --- lams_tool_zoom/src/java/org/lamsfoundation/lams/tool/zoom/util/ZoomConstants.java (.../ZoomConstants.java) (revision cd28f26327e5afe5f9797847d801eba0abab9144) +++ lams_tool_zoom/src/java/org/lamsfoundation/lams/tool/zoom/util/ZoomConstants.java (.../ZoomConstants.java) (revision 81abb42871bc57068ca574fa56e2f039ca04702a) @@ -33,6 +33,7 @@ public static final String ATTR_CONTENT_FOLDER_ID = "contentFolderID"; public static final String ATTR_MEETING_OPEN = "meetingOpen"; public static final String ATTR_MEETING_URL = "meetingURL"; + public static final String ATTR_MEETING_PASSWORD = "meetingPassword"; public static final String ATTR_MESSAGE_KEY = "messageKey"; public static final String ATTR_SESSION_MAP = "sessionMap"; public static final String ATTR_TOOL_SESSION_ID = "toolSessionID"; Index: lams_tool_zoom/src/java/org/lamsfoundation/lams/tool/zoom/util/ZoomUtil.java =================================================================== diff -u -rcd28f26327e5afe5f9797847d801eba0abab9144 -r81abb42871bc57068ca574fa56e2f039ca04702a --- lams_tool_zoom/src/java/org/lamsfoundation/lams/tool/zoom/util/ZoomUtil.java (.../ZoomUtil.java) (revision cd28f26327e5afe5f9797847d801eba0abab9144) +++ lams_tool_zoom/src/java/org/lamsfoundation/lams/tool/zoom/util/ZoomUtil.java (.../ZoomUtil.java) (revision 81abb42871bc57068ca574fa56e2f039ca04702a) @@ -52,11 +52,13 @@ if (!apiOK) { errorMap.add("GLOBAL", messageService.getMessage("error.api.reuse")); } - meetingURL = zoomService.createMeeting(zoom.getUid()); + zoom = zoomService.createMeeting(zoom.getUid()); + meetingURL = zoom.getMeetingStartUrl(); } } request.setAttribute(ZoomConstants.ATTR_MEETING_URL, meetingURL); + request.setAttribute(ZoomConstants.ATTR_MEETING_PASSWORD, zoom.getMeetingPassword()); return errorMap; } } \ No newline at end of file Index: lams_tool_zoom/src/java/org/lamsfoundation/lams/tool/zoom/web/controller/LearningController.java =================================================================== diff -u -rde735f1c077e7c8ca07eddc6894b06e5beef5331 -r81abb42871bc57068ca574fa56e2f039ca04702a --- lams_tool_zoom/src/java/org/lamsfoundation/lams/tool/zoom/web/controller/LearningController.java (.../LearningController.java) (revision de735f1c077e7c8ca07eddc6894b06e5beef5331) +++ lams_tool_zoom/src/java/org/lamsfoundation/lams/tool/zoom/web/controller/LearningController.java (.../LearningController.java) (revision 81abb42871bc57068ca574fa56e2f039ca04702a) @@ -231,6 +231,7 @@ } // if start in monitor is not set, this overwrites the URL set in ZoomUtil.startMeeting() above request.setAttribute(ZoomConstants.ATTR_MEETING_URL, meetingURL); + request.setAttribute(ZoomConstants.ATTR_MEETING_PASSWORD, zoom.getMeetingPassword()); } } catch (Exception e) { Index: lams_tool_zoom/web/pages/learning/learning.jsp =================================================================== diff -u -r24ebb6c91f49a10f1e5718036b3a3c1a80c3314f -r81abb42871bc57068ca574fa56e2f039ca04702a --- lams_tool_zoom/web/pages/learning/learning.jsp (.../learning.jsp) (revision 24ebb6c91f49a10f1e5718036b3a3c1a80c3314f) +++ lams_tool_zoom/web/pages/learning/learning.jsp (.../learning.jsp) (revision 81abb42871bc57068ca574fa56e2f039ca04702a) @@ -46,6 +46,8 @@ +

 ${meetingPassword}

+