diff --git a/openvidu-basic-java/pom.xml b/openvidu-basic-java/pom.xml index c6afb014..0501a77e 100644 --- a/openvidu-basic-java/pom.xml +++ b/openvidu-basic-java/pom.xml @@ -31,9 +31,14 @@ spring-boot-starter-web - io.openvidu - openvidu-java-client - 2.27.0 + io.livekit + livekit-server + 0.5.7 + + + org.json + json + 20231013 org.springframework.boot diff --git a/openvidu-basic-java/src/main/java/io/openvidu/basic/java/Controller.java b/openvidu-basic-java/src/main/java/io/openvidu/basic/java/Controller.java index 2f04042a..8c03cd76 100644 --- a/openvidu-basic-java/src/main/java/io/openvidu/basic/java/Controller.java +++ b/openvidu-basic-java/src/main/java/io/openvidu/basic/java/Controller.java @@ -2,70 +2,57 @@ package io.openvidu.basic.java; import java.util.Map; -import javax.annotation.PostConstruct; - +import org.json.JSONObject; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; -import io.openvidu.java.client.Connection; -import io.openvidu.java.client.ConnectionProperties; -import io.openvidu.java.client.OpenVidu; -import io.openvidu.java.client.OpenViduHttpException; -import io.openvidu.java.client.OpenViduJavaClientException; -import io.openvidu.java.client.Session; -import io.openvidu.java.client.SessionProperties; +import io.livekit.server.*; @CrossOrigin(origins = "*") @RestController public class Controller { - @Value("${OPENVIDU_URL}") - private String OPENVIDU_URL; + @Value("${LIVEKIT_URL}") + private String LIVEKIT_URL; - @Value("${OPENVIDU_SECRET}") - private String OPENVIDU_SECRET; + @Value("${LIVEKIT_API_KEY}") + private String LIVEKIT_API_KEY; - private OpenVidu openvidu; - - @PostConstruct - public void init() { - this.openvidu = new OpenVidu(OPENVIDU_URL, OPENVIDU_SECRET); - } + @Value("${LIVEKIT_API_SECRET}") + private String LIVEKIT_API_SECRET; /** - * @param params The Session properties - * @return The Session ID + * @param params The JSON object with roomName and participantName + * @return The JWT token */ - @PostMapping("/api/sessions") - public ResponseEntity initializeSession(@RequestBody(required = false) Map params) - throws OpenViduJavaClientException, OpenViduHttpException { - SessionProperties properties = SessionProperties.fromJson(params).build(); - Session session = openvidu.createSession(properties); - return new ResponseEntity<>(session.getSessionId(), HttpStatus.OK); - } + @PostMapping("/token") + public ResponseEntity getToken(@RequestBody(required = true) Map params) { + String roomName = params.get("roomName"); + String participantName = params.get("participantName"); - /** - * @param sessionId The Session in which to create the Connection - * @param params The Connection properties - * @return The Token associated to the Connection - */ - @PostMapping("/api/sessions/{sessionId}/connections") - public ResponseEntity createConnection(@PathVariable("sessionId") String sessionId, - @RequestBody(required = false) Map params) - throws OpenViduJavaClientException, OpenViduHttpException { - Session session = openvidu.getActiveSession(sessionId); - if (session == null) { - return new ResponseEntity<>(HttpStatus.NOT_FOUND); + if(roomName == null || participantName == null) { + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); } - ConnectionProperties properties = ConnectionProperties.fromJson(params).build(); - Connection connection = session.createConnection(properties); - return new ResponseEntity<>(connection.getToken(), HttpStatus.OK); + + // By default, tokens expire 6 hours after generation. + // You may override this by using token.setTtl(long millis). + AccessToken token = new AccessToken(LIVEKIT_API_KEY, LIVEKIT_API_SECRET); + token.setName(participantName); + token.setIdentity(participantName); + + + JSONObject metadata = new JSONObject(); + metadata.put("livekitUrl", LIVEKIT_URL); + // add metadata to the token, which will be available in the participant's metadata + token.setMetadata(metadata.toString()); + token.addGrants(new RoomJoin(true), new RoomName(roomName)); + + return new ResponseEntity<>(token.toJwt(), HttpStatus.OK); } } diff --git a/openvidu-basic-java/src/main/resources/application.properties b/openvidu-basic-java/src/main/resources/application.properties index f0e091eb..b0619b41 100644 --- a/openvidu-basic-java/src/main/resources/application.properties +++ b/openvidu-basic-java/src/main/resources/application.properties @@ -1,5 +1,6 @@ server.port: 5000 server.ssl.enabled: false -OPENVIDU_URL: http://localhost:4443/ -OPENVIDU_SECRET: MY_SECRET \ No newline at end of file +LIVEKIT_URL: ws://localhost:7880/ +LIVEKIT_API_KEY: http://localhost:4443/ +LIVEKIT_API_SECRET: MY_SECRET \ No newline at end of file