From 6c3d101effe3c283efaea5d9aa39f4847029ed3e Mon Sep 17 00:00:00 2001 From: csantosm <4a.santos@gmail.com> Date: Thu, 25 Aug 2022 11:13:28 +0200 Subject: [PATCH] openvidu-call: Catched 401 error when session initialized --- .../java/controllers/SessionController.java | 70 ++++++++++--------- 1 file changed, 37 insertions(+), 33 deletions(-) diff --git a/openvidu-call/openvidu-call-back-java/src/main/java/io/openvidu/call/java/controllers/SessionController.java b/openvidu-call/openvidu-call-back-java/src/main/java/io/openvidu/call/java/controllers/SessionController.java index daa9e8fc..5405121c 100644 --- a/openvidu-call/openvidu-call-back-java/src/main/java/io/openvidu/call/java/controllers/SessionController.java +++ b/openvidu-call/openvidu-call-back-java/src/main/java/io/openvidu/call/java/controllers/SessionController.java @@ -32,92 +32,96 @@ import io.openvidu.java.client.Session; @RestController public class SessionController { - @Value("${RECORDING}") private String RECORDING; - @Autowired private OpenViduService openviduService; - @PostMapping("/sessions") - public ResponseEntity> createConnection(@RequestBody(required = false) Map params, + public ResponseEntity> createConnection( + @RequestBody(required = false) Map params, @CookieValue(name = OpenViduService.RECORDING_TOKEN_NAME, defaultValue = "") String recordingTokenCookie, HttpServletResponse res) { - + Map response = new HashMap(); try { long date = -1; String nickname = ""; - + String sessionId = params.get("sessionId").toString(); - if(params.containsKey("nickname")) { - nickname = params.get("nickname").toString(); + if (params.containsKey("nickname")) { + nickname = params.get("nickname").toString(); } - Session sessionCreated = this.openviduService.createSession(sessionId); + Session sessionCreated = this.openviduService.createSession(sessionId); boolean IS_RECORDING_ENABLED = RECORDING.toUpperCase().equals("ENABLED"); - + boolean hasValidToken = this.openviduService.isValidToken(sessionId, recordingTokenCookie); boolean isSessionCreator = hasValidToken || sessionCreated.getActiveConnections().size() == 0; - - OpenViduRole role = isSessionCreator && IS_RECORDING_ENABLED ? OpenViduRole.MODERATOR : OpenViduRole.PUBLISHER; - + + OpenViduRole role = isSessionCreator && IS_RECORDING_ENABLED ? OpenViduRole.MODERATOR + : OpenViduRole.PUBLISHER; + response.put("recordingEnabled", IS_RECORDING_ENABLED); response.put("recordings", new ArrayList()); - - + Connection cameraConnection = this.openviduService.createConnection(sessionCreated, nickname, role); Connection screenConnection = this.openviduService.createConnection(sessionCreated, nickname, role); - + response.put("cameraToken", cameraConnection.getToken()); response.put("screenToken", screenConnection.getToken()); - + if (IS_RECORDING_ENABLED && isSessionCreator && !hasValidToken) { /** * ! *********** WARN *********** ! * - * To identify who is able to manage session recording, the code sends a cookie with a token to the session creator. - * The relation between cookies and sessions are stored in backend memory. + * To identify who is able to manage session recording, the code sends a cookie + * with a token to the session creator. The relation between cookies and + * sessions are stored in backend memory. * - * This authentication & authorization system is pretty basic and it is not for production. - * We highly recommend IMPLEMENT YOUR OWN USER MANAGEMENT with persistence for a properly and secure recording feature. + * This authentication & authorization system is pretty basic and it is not for + * production. We highly recommend IMPLEMENT YOUR OWN USER MANAGEMENT with + * persistence for a properly and secure recording feature. * * ! *********** WARN *********** ! **/ - + String uuid = UUID.randomUUID().toString(); date = System.currentTimeMillis(); - String recordingToken = cameraConnection.getToken() + "&" + OpenViduService.RECORDING_TOKEN_NAME + "=" + uuid + "&createdAt=" +date; - + String recordingToken = cameraConnection.getToken() + "&" + OpenViduService.RECORDING_TOKEN_NAME + "=" + + uuid + "&createdAt=" + date; + Cookie cookie = new Cookie(OpenViduService.RECORDING_TOKEN_NAME, recordingToken); res.addCookie(cookie); - + RecordingData recData = new RecordingData(recordingToken, ""); this.openviduService.recordingMap.put(sessionId, recData); } - - if(IS_RECORDING_ENABLED){ - if(date == -1) { + + if (IS_RECORDING_ENABLED) { + if (date == -1) { date = openviduService.getDateFromCookie(recordingTokenCookie); } List recordings = openviduService.listRecordingsBySessionIdAndDate(sessionId, date); response.put("recordings", recordings); } - + return new ResponseEntity<>(response, HttpStatus.OK); - } catch (OpenViduJavaClientException | OpenViduHttpException e) { - - if(Integer.parseInt(e.getMessage()) == 501) { + + if (Integer.parseInt(e.getMessage()) == 501) { System.err.println("OpenVidu Server recording module is disabled"); response.put("recordingEnabled", false); return new ResponseEntity<>(response, HttpStatus.OK); + } else if (Integer.parseInt(e.getMessage()) == 401) { + System.err.println("OpenVidu credentials are wrong."); + return new ResponseEntity<>(null, HttpStatus.UNAUTHORIZED); + } else { e.printStackTrace(); - System.out.println(e.getMessage()); + System.err.println(e.getMessage()); return new ResponseEntity<>(response, HttpStatus.INTERNAL_SERVER_ERROR); } }