From 081e45bc9e1fc7324f561fb60b67d7e04d062ca1 Mon Sep 17 00:00:00 2001 From: juancarmore Date: Fri, 20 Sep 2024 16:07:37 +0200 Subject: [PATCH] Delete uncompleted tutorials --- .../openvidu-js-screen-share/LICENSE | 201 --- .../openvidu-js-screen-share/README.md | 14 - .../docker/Dockerfile | 17 - .../docker/create_image.sh | 15 - .../docker/entrypoint.sh | 14 - .../openvidu-js-screen-share/nginx.conf | 52 - .../openvidu-js-screen-share/web/app.js | 263 ---- .../openvidu-js-screen-share/web/index.html | 75 -- .../web/resources/images/favicon.ico | Bin 5430 -> 0 bytes .../openvidu_globe_bg_transp_cropped.png | Bin 11746 -> 0 bytes .../openvidu_grey_bg_transp_cropped.png | Bin 39532 -> 0 bytes .../openvidu_vert_white_bg_trans_cropped.png | Bin 22426 -> 0 bytes .../openvidu-js-screen-share/web/style.css | 296 ----- .../openvidu-recording-java/.gitignore | 25 - .../openvidu-recording-java/.springBeans | 16 - .../openvidu-recording-java/LICENSE | 201 --- .../openvidu-recording-java/README.md | 14 - .../openvidu-recording-java/docker/Dockerfile | 26 - .../docker/create_image.sh | 8 - .../docker/entrypoint.sh | 13 - .../openvidu-recording-java/nginx.conf | 44 - .../openvidu-recording-java/pom.xml | 68 - .../java/io/openvidu/recording/java/App.java | 13 - .../recording/java/MyRestController.java | 251 ---- .../application-container.properties | 9 - .../src/main/resources/application.properties | 12 - .../main/resources/openvidu-selfsigned.jks | Bin 2268 -> 0 bytes .../src/main/resources/static/app.js | 348 ----- .../main/resources/static/images/favicon.ico | Bin 5430 -> 0 bytes .../openvidu_globe_bg_transp_cropped.png | Bin 11746 -> 0 bytes .../openvidu_grey_bg_transp_cropped.png | Bin 39532 -> 0 bytes .../openvidu_vert_white_bg_trans_cropped.png | Bin 22426 -> 0 bytes .../src/main/resources/static/index.html | 121 -- .../src/main/resources/static/style.css | 474 ------- .../openvidu-roles-java/.gitignore | 24 - advanced-features/openvidu-roles-java/LICENSE | 201 --- .../openvidu-roles-java/README.md | 14 - .../openvidu-roles-java/docker/Dockerfile | 26 - .../docker/create_image.sh | 8 - .../openvidu-roles-java/docker/entrypoint.sh | 13 - .../openvidu-roles-java/nginx.conf | 44 - advanced-features/openvidu-roles-java/pom.xml | 62 - .../main/java/io/openvidu/js/java/App.java | 13 - .../io/openvidu/js/java/LoginController.java | 76 -- .../io/openvidu/js/java/RoomController.java | 85 -- .../src/main/resources/application.properties | 11 - .../main/resources/openvidu-selfsigned.jks | Bin 2268 -> 0 bytes .../src/main/resources/static/app.js | 274 ---- .../main/resources/static/images/favicon.ico | Bin 5430 -> 0 bytes .../openvidu_globe_bg_transp_cropped.png | Bin 11746 -> 0 bytes .../openvidu_grey_bg_transp_cropped.png | Bin 39532 -> 0 bytes .../openvidu_vert_white_bg_trans_cropped.png | Bin 22426 -> 0 bytes .../static/images/subscriber-msg.jpg | Bin 82734 -> 0 bytes .../src/main/resources/static/index.html | 210 --- .../src/main/resources/static/style.css | 382 ------ .../io/openvidu/js/java/test/AppTest.java | 38 - .../openvidu-roles-node/.gitignore | 60 - advanced-features/openvidu-roles-node/LICENSE | 201 --- .../openvidu-roles-node/README.md | 14 - .../openvidu-roles-node/docker/Dockerfile | 13 - .../docker/create_image.sh | 8 - .../openvidu-roles-node/docker/entrypoint.sh | 3 - .../openvidu-roles-node/nginx.conf | 44 - .../openvidu-roles-node/openviducert.pem | 21 - .../openvidu-roles-node/openvidukey.pem | 27 - .../openvidu-roles-node/package-lock.json | 1145 ----------------- .../openvidu-roles-node/package.json | 26 - .../openvidu-roles-node/public/app.js | 274 ---- .../public/images/favicon.ico | Bin 5430 -> 0 bytes .../openvidu_globe_bg_transp_cropped.png | Bin 11746 -> 0 bytes .../openvidu_grey_bg_transp_cropped.png | Bin 39532 -> 0 bytes .../openvidu_vert_white_bg_trans_cropped.png | Bin 22426 -> 0 bytes .../public/images/subscriber-msg.jpg | Bin 82734 -> 0 bytes .../openvidu-roles-node/public/index.html | 210 --- .../openvidu-roles-node/public/style.css | 382 ------ .../openvidu-roles-node/server.js | 175 --- 76 files changed, 6674 deletions(-) delete mode 100644 advanced-features/openvidu-js-screen-share/LICENSE delete mode 100644 advanced-features/openvidu-js-screen-share/README.md delete mode 100644 advanced-features/openvidu-js-screen-share/docker/Dockerfile delete mode 100644 advanced-features/openvidu-js-screen-share/docker/create_image.sh delete mode 100644 advanced-features/openvidu-js-screen-share/docker/entrypoint.sh delete mode 100644 advanced-features/openvidu-js-screen-share/nginx.conf delete mode 100644 advanced-features/openvidu-js-screen-share/web/app.js delete mode 100644 advanced-features/openvidu-js-screen-share/web/index.html delete mode 100644 advanced-features/openvidu-js-screen-share/web/resources/images/favicon.ico delete mode 100644 advanced-features/openvidu-js-screen-share/web/resources/images/openvidu_globe_bg_transp_cropped.png delete mode 100644 advanced-features/openvidu-js-screen-share/web/resources/images/openvidu_grey_bg_transp_cropped.png delete mode 100644 advanced-features/openvidu-js-screen-share/web/resources/images/openvidu_vert_white_bg_trans_cropped.png delete mode 100644 advanced-features/openvidu-js-screen-share/web/style.css delete mode 100644 advanced-features/openvidu-recording-java/.gitignore delete mode 100644 advanced-features/openvidu-recording-java/.springBeans delete mode 100644 advanced-features/openvidu-recording-java/LICENSE delete mode 100644 advanced-features/openvidu-recording-java/README.md delete mode 100644 advanced-features/openvidu-recording-java/docker/Dockerfile delete mode 100644 advanced-features/openvidu-recording-java/docker/create_image.sh delete mode 100644 advanced-features/openvidu-recording-java/docker/entrypoint.sh delete mode 100644 advanced-features/openvidu-recording-java/nginx.conf delete mode 100644 advanced-features/openvidu-recording-java/pom.xml delete mode 100644 advanced-features/openvidu-recording-java/src/main/java/io/openvidu/recording/java/App.java delete mode 100644 advanced-features/openvidu-recording-java/src/main/java/io/openvidu/recording/java/MyRestController.java delete mode 100644 advanced-features/openvidu-recording-java/src/main/resources/application-container.properties delete mode 100644 advanced-features/openvidu-recording-java/src/main/resources/application.properties delete mode 100644 advanced-features/openvidu-recording-java/src/main/resources/openvidu-selfsigned.jks delete mode 100644 advanced-features/openvidu-recording-java/src/main/resources/static/app.js delete mode 100644 advanced-features/openvidu-recording-java/src/main/resources/static/images/favicon.ico delete mode 100644 advanced-features/openvidu-recording-java/src/main/resources/static/images/openvidu_globe_bg_transp_cropped.png delete mode 100644 advanced-features/openvidu-recording-java/src/main/resources/static/images/openvidu_grey_bg_transp_cropped.png delete mode 100644 advanced-features/openvidu-recording-java/src/main/resources/static/images/openvidu_vert_white_bg_trans_cropped.png delete mode 100644 advanced-features/openvidu-recording-java/src/main/resources/static/index.html delete mode 100644 advanced-features/openvidu-recording-java/src/main/resources/static/style.css delete mode 100644 advanced-features/openvidu-roles-java/.gitignore delete mode 100644 advanced-features/openvidu-roles-java/LICENSE delete mode 100644 advanced-features/openvidu-roles-java/README.md delete mode 100644 advanced-features/openvidu-roles-java/docker/Dockerfile delete mode 100644 advanced-features/openvidu-roles-java/docker/create_image.sh delete mode 100644 advanced-features/openvidu-roles-java/docker/entrypoint.sh delete mode 100644 advanced-features/openvidu-roles-java/nginx.conf delete mode 100644 advanced-features/openvidu-roles-java/pom.xml delete mode 100644 advanced-features/openvidu-roles-java/src/main/java/io/openvidu/js/java/App.java delete mode 100644 advanced-features/openvidu-roles-java/src/main/java/io/openvidu/js/java/LoginController.java delete mode 100644 advanced-features/openvidu-roles-java/src/main/java/io/openvidu/js/java/RoomController.java delete mode 100644 advanced-features/openvidu-roles-java/src/main/resources/application.properties delete mode 100644 advanced-features/openvidu-roles-java/src/main/resources/openvidu-selfsigned.jks delete mode 100644 advanced-features/openvidu-roles-java/src/main/resources/static/app.js delete mode 100644 advanced-features/openvidu-roles-java/src/main/resources/static/images/favicon.ico delete mode 100644 advanced-features/openvidu-roles-java/src/main/resources/static/images/openvidu_globe_bg_transp_cropped.png delete mode 100644 advanced-features/openvidu-roles-java/src/main/resources/static/images/openvidu_grey_bg_transp_cropped.png delete mode 100644 advanced-features/openvidu-roles-java/src/main/resources/static/images/openvidu_vert_white_bg_trans_cropped.png delete mode 100644 advanced-features/openvidu-roles-java/src/main/resources/static/images/subscriber-msg.jpg delete mode 100644 advanced-features/openvidu-roles-java/src/main/resources/static/index.html delete mode 100644 advanced-features/openvidu-roles-java/src/main/resources/static/style.css delete mode 100644 advanced-features/openvidu-roles-java/src/test/java/io/openvidu/js/java/test/AppTest.java delete mode 100644 advanced-features/openvidu-roles-node/.gitignore delete mode 100644 advanced-features/openvidu-roles-node/LICENSE delete mode 100644 advanced-features/openvidu-roles-node/README.md delete mode 100644 advanced-features/openvidu-roles-node/docker/Dockerfile delete mode 100644 advanced-features/openvidu-roles-node/docker/create_image.sh delete mode 100644 advanced-features/openvidu-roles-node/docker/entrypoint.sh delete mode 100644 advanced-features/openvidu-roles-node/nginx.conf delete mode 100644 advanced-features/openvidu-roles-node/openviducert.pem delete mode 100644 advanced-features/openvidu-roles-node/openvidukey.pem delete mode 100644 advanced-features/openvidu-roles-node/package-lock.json delete mode 100644 advanced-features/openvidu-roles-node/package.json delete mode 100644 advanced-features/openvidu-roles-node/public/app.js delete mode 100644 advanced-features/openvidu-roles-node/public/images/favicon.ico delete mode 100644 advanced-features/openvidu-roles-node/public/images/openvidu_globe_bg_transp_cropped.png delete mode 100644 advanced-features/openvidu-roles-node/public/images/openvidu_grey_bg_transp_cropped.png delete mode 100644 advanced-features/openvidu-roles-node/public/images/openvidu_vert_white_bg_trans_cropped.png delete mode 100644 advanced-features/openvidu-roles-node/public/images/subscriber-msg.jpg delete mode 100644 advanced-features/openvidu-roles-node/public/index.html delete mode 100644 advanced-features/openvidu-roles-node/public/style.css delete mode 100644 advanced-features/openvidu-roles-node/server.js diff --git a/advanced-features/openvidu-js-screen-share/LICENSE b/advanced-features/openvidu-js-screen-share/LICENSE deleted file mode 100644 index 8dada3ed..00000000 --- a/advanced-features/openvidu-js-screen-share/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/advanced-features/openvidu-js-screen-share/README.md b/advanced-features/openvidu-js-screen-share/README.md deleted file mode 100644 index bfc48190..00000000 --- a/advanced-features/openvidu-js-screen-share/README.md +++ /dev/null @@ -1,14 +0,0 @@ -[![License badge](https://img.shields.io/badge/license-Apache2-orange.svg)](http://www.apache.org/licenses/LICENSE-2.0) -[![OpenVidu Tests](https://github.com/OpenVidu/openvidu/actions/workflows/openvidu-ce-test.yml/badge.svg)](https://github.com/OpenVidu/openvidu/actions/workflows/openvidu-ce-test.yml) -[![Documentation Status](https://readthedocs.org/projects/openviduio-docs/badge/?version=stable)](https://docs.openvidu.io/en/stable/?badge=stable) -[![Docker badge](https://img.shields.io/docker/pulls/openvidu/openvidu-server-kms.svg)](https://hub.docker.com/r/openvidu/openvidu-server-kms) -[![Support badge](https://img.shields.io/badge/support-sof-yellowgreen.svg)](https://openvidu.discourse.group/) - -[![][OpenViduLogo]](http://openvidu.io) - -openvidu-js-screen-share -=== - -Visit [docs.openvidu.io/en/stable/tutorials/openvidu-js-screen-share/](http://docs.openvidu.io/en/stable/tutorials/openvidu-js-screen-share/) - -[OpenViduLogo]: https://secure.gravatar.com/avatar/5daba1d43042f2e4e85849733c8e5702?s=120 diff --git a/advanced-features/openvidu-js-screen-share/docker/Dockerfile b/advanced-features/openvidu-js-screen-share/docker/Dockerfile deleted file mode 100644 index 38dde55a..00000000 --- a/advanced-features/openvidu-js-screen-share/docker/Dockerfile +++ /dev/null @@ -1,17 +0,0 @@ -FROM node:16-alpine3.16 - -# Copy openvidu-basic-node -COPY ./openvidu-basic-node /opt/openvidu-basic-node - -# Install openvidu-basic-node dependencies -RUN npm --prefix /opt/openvidu-basic-node install - -# Copy static files to openvidu-basic-node -RUN mkdir -p /opt/openvidu-basic-node/public -COPY ./web /opt/openvidu-basic-node/public - -WORKDIR /opt/openvidu-basic-node - -COPY docker/entrypoint.sh . - -ENTRYPOINT [ "./entrypoint.sh" ] \ No newline at end of file diff --git a/advanced-features/openvidu-js-screen-share/docker/create_image.sh b/advanced-features/openvidu-js-screen-share/docker/create_image.sh deleted file mode 100644 index e7a4949f..00000000 --- a/advanced-features/openvidu-js-screen-share/docker/create_image.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash -if [ $# -eq 0 ]; then - echo "No version argument provided. Usage: \"./create_image.sh \"" - exit 1 -fi - -pushd ../ - -cp -r ../openvidu-basic-node . - -trap 'rm -rf ./openvidu-basic-node' ERR - -docker build --pull --no-cache --rm=true -f docker/Dockerfile -t "$1" . - -rm -rf ./openvidu-basic-node \ No newline at end of file diff --git a/advanced-features/openvidu-js-screen-share/docker/entrypoint.sh b/advanced-features/openvidu-js-screen-share/docker/entrypoint.sh deleted file mode 100644 index aba13997..00000000 --- a/advanced-features/openvidu-js-screen-share/docker/entrypoint.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -if [ -n "${OPENVIDU_APPLICATION_SERVER_URL}" ]; then - # Replace OPENVIDU_APPLICATION_SERVER_URL at frontend app - sed -i \ - "s|var APPLICATION_SERVER_URL = \"http://localhost:5000/\";|var APPLICATION_SERVER_URL = \"${OPENVIDU_APPLICATION_SERVER_URL}/\";|" \ - public/app.js -else - sed -i \ - "s|var APPLICATION_SERVER_URL = \"http://localhost:5000/\";|var APPLICATION_SERVER_URL = \"\";|" \ - public/app.js -fi - -exec node index.js "$*" \ No newline at end of file diff --git a/advanced-features/openvidu-js-screen-share/nginx.conf b/advanced-features/openvidu-js-screen-share/nginx.conf deleted file mode 100644 index b9bee005..00000000 --- a/advanced-features/openvidu-js-screen-share/nginx.conf +++ /dev/null @@ -1,52 +0,0 @@ -events { - worker_connections 512; -} -http { - upstream openvidu-deployment { - server host.docker.internal:4443; - } - upstream server-application { - server host.docker.internal:5000; - } - upstream client-application { - server host.docker.internal:8080; - } - server { - listen 443 ssl; - ssl_certificate /etc/nginx/certs/cert.pem; - ssl_certificate_key /etc/nginx/certs/key.pem; - - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Forwarded-Proto https; - proxy_headers_hash_bucket_size 512; - proxy_redirect off; - - # Websockets - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - - # OpenVidu deployment API - location /openvidu/api { - proxy_pass http://openvidu-deployment; - } - - # OpenVidu WebSocket - location ~ /openvidu$ { - proxy_pass http://openvidu-deployment; - } - - # Server application requests - location /api/ { - proxy_pass http://server-application; - } - - # Client application requests - location / { - proxy_pass http://client-application; - } - } -} \ No newline at end of file diff --git a/advanced-features/openvidu-js-screen-share/web/app.js b/advanced-features/openvidu-js-screen-share/web/app.js deleted file mode 100644 index 045aa284..00000000 --- a/advanced-features/openvidu-js-screen-share/web/app.js +++ /dev/null @@ -1,263 +0,0 @@ -var LivekitClient = window.LivekitClient; -var room; -var myUserName; -var myRoomName; -var isScreenShared = false; -var screenSharePublication; - -/* OPENVIDU METHODS */ - -function joinRoom() { - myRoomName = document.getElementById('roomName').value; - myUserName = document.getElementById('userName').value; - - // --- 1) Get a Room object --- - - room = new LivekitClient.Room(); - - // --- 2) Specify the actions when events take place in the room --- - - // On every new Track received... - room.on( - LivekitClient.RoomEvent.TrackSubscribed, - (track, publication, participant) => { - const element = track.attach(); - element.id = track.sid; - element.className = 'removable'; - document.getElementById('video-container').appendChild(element); - if (track.kind === 'video' || track.kind === 'screen') { - appendUserData(element, participant.identity); - } - } - ); - - // On every new Track destroyed... - room.on( - LivekitClient.RoomEvent.TrackUnsubscribed, - (track, publication, participant) => { - track.detach(); - document.getElementById(track.sid)?.remove(); - if (track.kind === 'video' || track.kind === 'screen') { - removeUserData(participant); - } - } - ); - - // --- 3) Connect to the room with a valid access token --- - - // Get a token from the application backend - getToken(myRoomName, myUserName).then((token) => { - const livekitUrl = getLivekitUrlFromMetadata(token); - - // First param is the LiveKit server URL. Second param is the access token - room - .connect(livekitUrl, token) - .then(() => { - // --- 4) Set page layout for active call --- - - document.getElementById('room-title').innerText = myRoomName; - document.getElementById('join').style.display = 'none'; - document.getElementById('room').style.display = 'block'; - - // --- 5) Publish your local tracks --- - - room.localParticipant.setMicrophoneEnabled(true); - room.localParticipant.setCameraEnabled(true).then((publication) => { - const element = publication.track.attach(); - document.getElementById('video-container').appendChild(element); - initMainVideo(element, myUserName); - appendUserData(element, myUserName); - element.className = 'removable'; - }); - }) - .catch((error) => { - console.log( - 'There was an error connecting to the room:', - error.code, - error.message - ); - }); - }); -} - -function leaveRoom() { - // --- 6) Leave the room by calling 'disconnect' method over the Room object --- - - room.disconnect(); - - // Removing all HTML elements with user's nicknames. - // HTML videos are automatically removed when leaving a Room - removeAllUserData(); - - // Back to 'Join room' page - document.getElementById('join').style.display = 'block'; - document.getElementById('room').style.display = 'none'; -} - -async function toggleScreenShare() { - console.log('Toggling screen share'); - const enabled = !isScreenShared; - - if (enabled) { - // Enable screen sharing - try { - screenSharePublication = - await room.localParticipant?.setScreenShareEnabled(enabled); - } catch (error) { - console.error('Error enabling screen sharing', error); - } - - if (screenSharePublication) { - console.log('Screen sharing enabled', screenSharePublication); - isScreenShared = enabled; - - // Attach the screen share track to the video container - const element = screenSharePublication.track.attach(); - element.id = screenSharePublication.trackSid; - element.className = 'removable'; - document.getElementById('video-container').appendChild(element); - - // Add user data for the screen share - appendUserData(element, `${myUserName}_SCREEN`); - - // Listen for the 'ended' event to handle screen sharing stop - screenSharePublication.addListener('ended', async () => { - console.debug('Clicked native stop button. Stopping screen sharing'); - await stopScreenSharing(); - }); - } - } else { - // Disable screen sharing - await stopScreenSharing(); - } -} - -async function stopScreenSharing() { - try { - await room.localParticipant?.setScreenShareEnabled(false); - isScreenShared = false; - const trackSid = screenSharePublication?.trackSid; - - if (trackSid) { - document.getElementById(trackSid)?.remove(); - removeUserData({ identity: `${myUserName}_SCREEN` }); - } - screenSharePublication = undefined; - } catch (error) { - console.error('Error stopping screen sharing', error); - } -} - -window.onbeforeunload = function () { - if (room) room.disconnect(); -}; - -/* APPLICATION SPECIFIC METHODS */ - -window.addEventListener('load', function () { - generateParticipantInfo(); -}); - -function generateParticipantInfo() { - document.getElementById('roomName').value = 'RoomA'; - document.getElementById('userName').value = - 'Participant' + Math.floor(Math.random() * 100); -} - -function appendUserData(videoElement, participantIdentity) { - var dataNode = document.createElement('div'); - dataNode.className = 'removable'; - dataNode.id = 'data-' + participantIdentity; - dataNode.innerHTML = '

' + participantIdentity + '

'; - videoElement.parentNode.insertBefore(dataNode, videoElement.nextSibling); - addClickListener(videoElement, participantIdentity); -} - -function removeUserData(participant) { - var dataNode = document.getElementById('data-' + participant.identity); - dataNode?.parentNode.removeChild(dataNode); -} - -function removeAllUserData() { - var elementsToRemove = document.getElementsByClassName('removable'); - while (elementsToRemove[0]) { - elementsToRemove[0].parentNode.removeChild(elementsToRemove[0]); - } -} - -function addClickListener(videoElement, userData) { - videoElement.addEventListener('click', function () { - var mainVideo = $('#main-video video').get(0); - if (mainVideo.srcObject !== videoElement.srcObject) { - $('#main-video').fadeOut('fast', () => { - $('#main-video p').html(userData); - mainVideo.srcObject = videoElement.srcObject; - $('#main-video').fadeIn('fast'); - }); - } - }); -} - -function initMainVideo(videoElement, userData) { - document.querySelector('#main-video video').srcObject = - videoElement.srcObject; - document.querySelector('#main-video p').innerHTML = userData; - document.querySelector('#main-video video')['muted'] = true; -} - -function getLivekitUrlFromMetadata(token) { - if (!token) throw new Error('Trying to get metadata from an empty token'); - try { - const base64Url = token.split('.')[1]; - const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/'); - const jsonPayload = decodeURIComponent( - window - .atob(base64) - .split('') - .map((c) => { - return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); - }) - .join('') - ); - - const payload = JSON.parse(jsonPayload); - if (!payload?.metadata) throw new Error('Token does not contain metadata'); - const metadata = JSON.parse(payload.metadata); - return metadata.livekitUrl; - } catch (error) { - throw new Error('Error decoding and parsing token: ' + error); - } -} - -/** - * -------------------------------------------- - * GETTING A TOKEN FROM YOUR APPLICATION SERVER - * -------------------------------------------- - * The methods below request the creation of a Token to - * your application server. This keeps your OpenVidu deployment secure. - * - * In this sample code, there is no user control at all. Anybody could - * access your application server endpoints! In a real production - * environment, your application server must identify the user to allow - * access to the endpoints. - * - */ - -var APPLICATION_SERVER_URL = 'http://localhost:5000/'; - -function getToken(roomName, participantName) { - return new Promise((resolve, reject) => { - $.ajax({ - type: 'POST', - url: APPLICATION_SERVER_URL + 'token', - data: JSON.stringify({ - roomName, - participantName, - permissions: {}, - }), - headers: { 'Content-Type': 'application/json' }, - success: (token) => resolve(token), - error: (error) => reject(error), - }); - }); -} diff --git a/advanced-features/openvidu-js-screen-share/web/index.html b/advanced-features/openvidu-js-screen-share/web/index.html deleted file mode 100644 index 49a75717..00000000 --- a/advanced-features/openvidu-js-screen-share/web/index.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - openvidu-js-screen-share - - - - - - - - - - - - - - - - - - - - -
-
-
-
-

Join a video room

-
-

- - -

-

- - -

-

- -

-
-
-
- - -
- -
-
-
OpenVidu © 2022
- -
-
- - - - diff --git a/advanced-features/openvidu-js-screen-share/web/resources/images/favicon.ico b/advanced-features/openvidu-js-screen-share/web/resources/images/favicon.ico deleted file mode 100644 index 0e2249ada68ec5cab2034721dc193285c27175b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5430 zcmc&&eN2^Q6o2ox;0z74F{f9TU#+!9X2#sY&6#cG+%jk7$GvdHRGeG+hii#qr9`BK zC}qeHvGgi7)2x{@AZJeQ2i$vM6vot;IU_|SM7+HB^gGY{zHsji5d!CRKhN_%yyy9y z=RD^*=iDnvI!P}LA1>iDPFi7n3LB+bNp^oNLalA8=H z`-6iYNhVd-0{wN8JM*q}0bsYHpWyM3&HpH+LU-f&>6Fv>650J0N)zjuDZSc6C3#&o z_*8vxN9x<4|6}uZ>X2_!&8_cgL&Ni8P1fJjXZ?H%g+e5UI_YNcD%N;b@b^{!L~|as zb>5(}El$d8mIy_@DizA(Ef{Umop0o%=3L z^zNk@HLHP)NK~()6z}r(9R;IG5d)tho~Gi=Phk!9{FF1`IJgHmKAUu|POBE<&`n0{ z`~Z38{s^(X>5?n*o?(vf0mpJ*5OLQf2{sP^oM*-XGXX8nWQp8_iLj5h--j)QuU!4l zcm1^+@nJ!H#Q|OZ7U$!lB*+;+9Dv+6c(yQ?ig?KRuwfJA2(}$O93#xR6=(vGv*`&y z~xQi3P znSt>+$PP%p-|K*(fL5#6->6em58#f9dwT`8?80~sWW3~-#d&2N8zSU^9Ld0NMuE9` zU0^h@05}9(1DKb=<5>W|Bh~^3^C#l|mcS33GlBq1_=8XjLYX?ZoD}Q18pHgh+Z66- ze$}R7*k=mX&IQf`8gEb?pMo3@gvTHA^LejSIn_MHHi(?nVsPI+KE`|0k$G@(@{ufk za@hw`GHPh@;V|Gi<mXv<+e z?JUxZx*lZ%pG7N>0j{Tk)4)w2h#25=kKmu+-A8Zu9~bq?9x%)HTCzBv z<}(v)1WdH7#zYzCO!UcqJ;5j8e$dXO7+miGTFj}u8oyGnCVO|&BL7&yuk%i zsKG{Z1cr3|jsG4FTb-HKRv4)`Ul+lTz4KX=g1b=NZ`i&g`KPG-4s~s=+cv*}R@5fY z^4bx!s75b1H9NxVI(!8m80m{I2Zui`V8NdClu`E>xo&(z{#z#~@8WCVA4-dTdicT8 z z^&i{7;OFL!i&WH<-o?MF$|U?hxcu7wWwjTU;e#OEk^iAfw|%th58DIf&uq~6m3`ll z+vv~sU(ws|L~J~V80GI655oUS{H_4L!-1#x4w~zmNelgx=yl(OK4W2E0;N`2gZaB-FQW#Z2Y(}YtARXVOz-?$ zhq`ST!m( zi)i-rQ~rkcXLa|*I`Mr#?Y$f-H}m%b?o0kRPC_@yT2a&0b85DL6Me7fyL#Eb=7)Yt z<+qnctna`%57RiqCFc1ItiTf3xEV5c5b-Y7nuT@a!Z~{y<30WkGz^lziwzJVMc>6e TedKQfJ#jzGxv-xC9?I}vocwV} diff --git a/advanced-features/openvidu-js-screen-share/web/resources/images/openvidu_globe_bg_transp_cropped.png b/advanced-features/openvidu-js-screen-share/web/resources/images/openvidu_globe_bg_transp_cropped.png deleted file mode 100644 index e0309e62181608cf3543664ced79b6355779533b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11746 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 KVuQR*wOeuWT3;&BESMc5c{Qzs4Eae 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
6<-acu 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 NQp-@YMBO3!e*nzNs#O30 diff --git a/advanced-features/openvidu-js-screen-share/web/style.css b/advanced-features/openvidu-js-screen-share/web/style.css deleted file mode 100644 index 23a9cc9e..00000000 --- a/advanced-features/openvidu-js-screen-share/web/style.css +++ /dev/null @@ -1,296 +0,0 @@ -html { - position: relative; - min-height: 100%; -} - -nav { - height: 50px; - width: 100%; - z-index: 1; - background-color: #4d4d4d !important; - border-color: #4d4d4d !important; - border-top-right-radius: 0 !important; - border-top-left-radius: 0 !important; -} - -.navbar-header { - width: 100%; -} - -.nav-icon { - padding: 5px 15px 5px 15px; - float: right; -} - -nav a { - color: #ccc !important; -} - -nav i.fa { - font-size: 40px; - color: #ccc; -} - -nav a:hover { - color: #a9a9a9 !important; -} - -nav i.fa:hover { - color: #a9a9a9; -} - -#main-container { - padding-bottom: 80px; -} - -/*vertical-center { - position: relative; - top: 30%; - left: 50%; - transform: translate(-50%, -50%); -}*/ - -.horizontal-center { - margin: 0 auto; -} - -.form-control { - color: #0088aa; - font-weight: bold; -} - -.form-control:focus { - border-color: #0088aa; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(0, 136, 170, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(0, 136, 170, 0.6); -} - -input.btn { - font-weight: bold; -} - -.btn { - font-weight: bold !important; -} - -.btn-success { - background-color: #06d362 !important; - border-color: #06d362; -} - -.btn-success:hover { - background-color: #1abd61 !important; - border-color: #1abd61; -} - -.footer { - position: absolute; - bottom: 0; - width: 100%; - height: 60px; - background-color: #4d4d4d; -} - -.footer .text-muted { - margin: 20px 0; - float: left; - color: #ccc; -} - -.openvidu-logo { - height: 35px; - float: right; - margin: 12px 0; - -webkit-transition: all 0.1s ease-in-out; - -moz-transition: all 0.1s ease-in-out; - -o-transition: all 0.1s ease-in-out; - transition: all 0.1s ease-in-out; -} - -.openvidu-logo:hover { - -webkit-filter: grayscale(0.5); - filter: grayscale(0.5); -} - -.demo-logo { - margin: 0; - height: 22px; - float: left; - padding-right: 8px; -} - -a:hover .demo-logo { - -webkit-filter: brightness(0.7); - filter: brightness(0.7); -} - -#join-dialog { - margin-left: auto; - margin-right: auto; - max-width: 70%; -} - -#join-dialog h1 { - color: #4d4d4d; - font-weight: bold; - text-align: center; -} - -#img-div { - text-align: center; - margin-top: 3em; - margin-bottom: 3em; - /*position: relative; - top: 20%; - left: 50%; - transform: translate(-50%, -50%);*/ -} - -#img-div img { - height: 15%; -} - -#join-dialog label { - color: #0088aa; -} - -#join-dialog input.btn { - margin-top: 15px; -} - -#room-header { - margin-bottom: 20px; -} - -#room-title { - display: inline-block; -} - -#buttonLeaveRoom { - float: right; - margin-top: 20px; -} - -#buttonScreenShare { - float: right; - margin-top: 20px; - margin-left: 15px; -} - -#container-cameras video { - position: relative; - float: left; - width: 50%; - cursor: pointer; -} - -#container-cameras div { - float: left; - width: 50%; - position: relative; - margin-left: -50%; -} - -#container-cameras p { - display: inline-block; - background: #f8f8f8; - padding-left: 5px; - padding-right: 5px; - color: #777777; - font-weight: bold; - border-bottom-right-radius: 4px; -} - -#container-screens video { - position: relative; - float: left; - width: 50%; - cursor: pointer; -} - -#container-screens div { - float: left; - width: 50%; - position: relative; - margin-left: -50%; -} - -#container-screens p { - display: inline-block; - background: #f8f8f8; - padding-left: 5px; - padding-right: 5px; - color: #777777; - font-weight: bold; - border-bottom-right-radius: 4px; -} - -video { - width: 100%; - height: auto; -} - -#main-video p { - position: absolute; - display: inline-block; - background: #f8f8f8; - padding-left: 5px; - padding-right: 5px; - font-size: 22px; - color: #777777; - font-weight: bold; - border-bottom-right-radius: 4px; -} - -#room img { - width: 100%; - height: auto; - display: inline-block; - object-fit: contain; - vertical-align: baseline; -} - -#room #container-cameras img { - position: relative; - float: left; - width: 50%; - cursor: pointer; - object-fit: cover; - height: 180px; -} - - -/* xs ans md screen resolutions*/ - -@media screen and (max-width: 991px) and (orientation: portrait) { - #join-dialog { - max-width: inherit; - } - #img-div img { - height: 10%; - } - #img-div { - margin-top: 2em; - margin-bottom: 2em; - } - .container-fluid>.navbar-collapse, .container-fluid>.navbar-header, .container>.navbar-collapse, .container>.navbar-header { - margin-right: 0; - margin-left: 0; - } - .navbar-header i.fa { - font-size: 30px; - } - .navbar-header a.nav-icon { - padding: 7px 3px 7px 3px; - } -} - -@media only screen and (max-height: 767px) and (orientation: landscape) { - #img-div { - margin-top: 1em; - margin-bottom: 1em; - } - #join-dialog { - max-width: inherit; - } -} diff --git a/advanced-features/openvidu-recording-java/.gitignore b/advanced-features/openvidu-recording-java/.gitignore deleted file mode 100644 index 6c57dbc8..00000000 --- a/advanced-features/openvidu-recording-java/.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -target/ -.vscode/* diff --git a/advanced-features/openvidu-recording-java/.springBeans b/advanced-features/openvidu-recording-java/.springBeans deleted file mode 100644 index 8b813b9a..00000000 --- a/advanced-features/openvidu-recording-java/.springBeans +++ /dev/null @@ -1,16 +0,0 @@ - - - 1 - - - - - - - java:io.openvidu.recording.java.App - - - - - - diff --git a/advanced-features/openvidu-recording-java/LICENSE b/advanced-features/openvidu-recording-java/LICENSE deleted file mode 100644 index 8dada3ed..00000000 --- a/advanced-features/openvidu-recording-java/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/advanced-features/openvidu-recording-java/README.md b/advanced-features/openvidu-recording-java/README.md deleted file mode 100644 index e1246643..00000000 --- a/advanced-features/openvidu-recording-java/README.md +++ /dev/null @@ -1,14 +0,0 @@ -[![License badge](https://img.shields.io/badge/license-Apache2-orange.svg)](http://www.apache.org/licenses/LICENSE-2.0) -[![OpenVidu Tests](https://github.com/OpenVidu/openvidu/actions/workflows/openvidu-ce-test.yml/badge.svg)](https://github.com/OpenVidu/openvidu/actions/workflows/openvidu-ce-test.yml) -[![Documentation Status](https://readthedocs.org/projects/openvidu/badge/?version=stable)](https://docs.openvidu.io/en/stable/?badge=stable) -[![Docker badge](https://img.shields.io/docker/pulls/openvidu/openvidu-server-kms.svg)](https://hub.docker.com/r/openvidu/openvidu-server-kms) -[![Support badge](https://img.shields.io/badge/support-sof-yellowgreen.svg)](https://openvidu.discourse.group/) - -[![][OpenViduLogo]](http://openvidu.io) - -openvidu-recording-java -=== - -Visit [docs.openvidu.io/en/stable/tutorials/openvidu-recording-java/](http://docs.openvidu.io/en/stable/tutorials/openvidu-recording-java/) - -[OpenViduLogo]: https://secure.gravatar.com/avatar/5daba1d43042f2e4e85849733c8e5702?s=120 diff --git a/advanced-features/openvidu-recording-java/docker/Dockerfile b/advanced-features/openvidu-recording-java/docker/Dockerfile deleted file mode 100644 index c31a97e5..00000000 --- a/advanced-features/openvidu-recording-java/docker/Dockerfile +++ /dev/null @@ -1,26 +0,0 @@ - -FROM maven:3.6.3 as build -WORKDIR /openvidu-recording-java -COPY ./pom.xml pom.xml -COPY ./src/main src/main - -RUN mvn clean install -RUN mvn -o package - -FROM alpine:3.11 - -RUN apk update && \ - apk add openjdk11-jre && \ - rm -rf /var/cache/apk/* - -# Install basic-webinar -RUN mkdir -p /opt/openvidu-recording-java -COPY --from=build /openvidu-recording-java/target/openvidu-recording-java-*.jar /opt/openvidu-recording-java/openvidu-recording-java.jar -# Entrypoint -COPY ./docker/entrypoint.sh /usr/local/bin -RUN chmod +x /usr/local/bin/entrypoint.sh - -CMD /usr/local/bin/entrypoint.sh - - - diff --git a/advanced-features/openvidu-recording-java/docker/create_image.sh b/advanced-features/openvidu-recording-java/docker/create_image.sh deleted file mode 100644 index 7555abd5..00000000 --- a/advanced-features/openvidu-recording-java/docker/create_image.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -if [ $# -eq 0 ]; then - echo "No version argument provided. Usage: \"./create_image.sh \"" - exit 1 -fi - -pushd ../ -docker build -f docker/Dockerfile -t "$1" . \ No newline at end of file diff --git a/advanced-features/openvidu-recording-java/docker/entrypoint.sh b/advanced-features/openvidu-recording-java/docker/entrypoint.sh deleted file mode 100644 index c9388d6c..00000000 --- a/advanced-features/openvidu-recording-java/docker/entrypoint.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -[ ! -z "${OPENVIDU_URL}" ] && echo "OPENVIDU_URL: ${OPENVIDU_URL}" || echo "OPENVIDU_URL: default" -[ ! -z "${OPENVIDU_SECRET}" ] && echo "OPENVIDU_SECRET: ${OPENVIDU_SECRET}" || echo "OPENVIDU_SECRET: default" -[ ! -z "${SERVER_PORT}" ] && echo "SERVER_PORT: ${SERVER_PORT}" || echo "SERVER_PORT: default" - -# Run Application -JAVA_PROPERTIES="-Djava.security.egd=file:/dev/./urandom" -[ ! -z "${OPENVIDU_URL}" ] && JAVA_PROPERTIES=" ${JAVA_PROPERTIES} -Dopenvidu.url=${OPENVIDU_URL}" -[ ! -z "${OPENVIDU_SECRET}" ] && JAVA_PROPERTIES=" ${JAVA_PROPERTIES} -Dopenvidu.secret=${OPENVIDU_SECRET}" -[ ! -z "${SERVER_PORT}" ] && JAVA_PROPERTIES=" ${JAVA_PROPERTIES} -Dserver.port=${SERVER_PORT}" - -java ${JAVA_PROPERTIES} -jar /opt/openvidu-recording-java/openvidu-recording-java.jar diff --git a/advanced-features/openvidu-recording-java/nginx.conf b/advanced-features/openvidu-recording-java/nginx.conf deleted file mode 100644 index 500c543d..00000000 --- a/advanced-features/openvidu-recording-java/nginx.conf +++ /dev/null @@ -1,44 +0,0 @@ -events { - worker_connections 512; -} -http { - upstream openvidu-deployment { - server host.docker.internal:4443; - } - upstream client-application { - server host.docker.internal:5000; - } - server { - listen 443 ssl; - ssl_certificate /etc/nginx/certs/cert.pem; - ssl_certificate_key /etc/nginx/certs/key.pem; - - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Forwarded-Proto https; - proxy_headers_hash_bucket_size 512; - proxy_redirect off; - - # Websockets - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - - # OpenVidu deployment API - location /openvidu/api { - proxy_pass http://openvidu-deployment; - } - - # OpenVidu WebSocket - location ~ /openvidu$ { - proxy_pass http://openvidu-deployment; - } - - # Client application requests - location / { - proxy_pass https://client-application; - } - } -} \ No newline at end of file diff --git a/advanced-features/openvidu-recording-java/pom.xml b/advanced-features/openvidu-recording-java/pom.xml deleted file mode 100644 index 8954aea9..00000000 --- a/advanced-features/openvidu-recording-java/pom.xml +++ /dev/null @@ -1,68 +0,0 @@ - - 4.0.0 - - io.openvidu - openvidu-recording-java - 2.27.0 - jar - - openvidu-recording-java - https://github.com/OpenVidu/openvidu-tutorials/tree/master/openvidu-recording-java - - - org.springframework.boot - spring-boot-starter-parent - 2.1.4.RELEASE - - - - UTF-8 - 11 - io.openvidu.recording.java.App - openvidu - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - - org.jetbrains.kotlin - kotlin-stdlib - 1.5.21 - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-devtools - - - io.livekit - livekit-server - 0.5.7 - - - com.squareup.okhttp3 - okhttp - 4.12.0 - - - org.json - json - 20231013 - - - diff --git a/advanced-features/openvidu-recording-java/src/main/java/io/openvidu/recording/java/App.java b/advanced-features/openvidu-recording-java/src/main/java/io/openvidu/recording/java/App.java deleted file mode 100644 index 7929909a..00000000 --- a/advanced-features/openvidu-recording-java/src/main/java/io/openvidu/recording/java/App.java +++ /dev/null @@ -1,13 +0,0 @@ -package io.openvidu.recording.java; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class App -{ - public static void main( String[] args ) - { - SpringApplication.run(App.class, args); - } -} diff --git a/advanced-features/openvidu-recording-java/src/main/java/io/openvidu/recording/java/MyRestController.java b/advanced-features/openvidu-recording-java/src/main/java/io/openvidu/recording/java/MyRestController.java deleted file mode 100644 index c5549a49..00000000 --- a/advanced-features/openvidu-recording-java/src/main/java/io/openvidu/recording/java/MyRestController.java +++ /dev/null @@ -1,251 +0,0 @@ -package io.openvidu.recording.java; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.StandardCopyOption; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; - -import javax.annotation.PostConstruct; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.util.ResourceUtils; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -import org.json.JSONObject; - -import io.livekit.server.*; -import livekit.LivekitEgress; -import livekit.LivekitEgress.EgressInfo; - -import livekit.LivekitEgress.EncodedFileOutput; -import livekit.LivekitEgress.EncodedFileType; -import livekit.LivekitEgress.EncodedFileOutput.Builder; - -@CrossOrigin(origins = "*") -@RestController -public class MyRestController { - - @Value("${LIVEKIT_URL}") - private String LIVEKIT_URL; - - @Value("${LIVEKIT_API_KEY}") - private String LIVEKIT_API_KEY; - - @Value("${LIVEKIT_API_SECRET}") - private String LIVEKIT_API_SECRET; - - @Value("${RECORDINGS_PATH}") - private String RECORDINGS_PATH; - - // OpenVidu object as entrypoint of the SDK - private EgressServiceClient egressClient; - - @PostConstruct() - public void initialize() { - - String livekitUrlHostname = LIVEKIT_URL.replaceFirst("^ws:", "http:").replaceFirst("^wss:", "https:"); - this.egressClient = EgressServiceClient.create(livekitUrlHostname, LIVEKIT_API_KEY, LIVEKIT_API_SECRET, true); - } - - /*******************/ - /*** Session API ***/ - /*******************/ - - /** - * @param params The JSON object with roomName and participantName - * @return The JWT token - */ - @PostMapping("/token") - public ResponseEntity getToken(@RequestBody(required = true) Map params) { - String roomName = params.get("roomName"); - String participantName = params.get("participantName"); - JSONObject response = new JSONObject(); - - if (roomName == null || participantName == null) { - return new ResponseEntity<>(HttpStatus.BAD_REQUEST); - } - - // 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)); - - response.put("token", token.toJwt()); - return new ResponseEntity<>(response.toMap(), HttpStatus.OK); - } - - /*******************/ - /** Recording API **/ - /*******************/ - - @RequestMapping(value = "/recordings/start", method = RequestMethod.POST) - public ResponseEntity startRecording(@RequestBody Map params) { - try { - String roomName = (String) params.get("roomName"); - String outputMode = (String) params.get("outputMode"); - Boolean videoOnly = (Boolean) params.get("videoOnly"); - Boolean audioOnly = (Boolean) params.get("audioOnly"); - String audioTrackId = (String) params.get("audioTrackId"); - String videoTrackId = (String) params.get("videoTrackId"); - - Builder outputBuilder = LivekitEgress.EncodedFileOutput.newBuilder() - .setFileType(EncodedFileType.DEFAULT_FILETYPE) - .setFilepath("/recordings/" + roomName + "-" + new Date().getTime()) - .setDisableManifest(true); - - EncodedFileOutput output = outputBuilder.build(); - - System.out.println("Starting recording " + roomName); - - LivekitEgress.EgressInfo egressInfo; - - if ("COMPOSED".equals(outputMode)) { - - System.out.println("Starting COMPOSED recording " + roomName); - egressInfo = this.egressClient - .startRoomCompositeEgress(roomName, output, "grid", null, null, audioOnly, videoOnly) - .execute().body(); - } else if ("INDIVIDUAL".equals(outputMode)) { - System.out.println("Starting INDIVIDUAL recording " + roomName); - egressInfo = this.egressClient.startTrackCompositeEgress(roomName, output, audioTrackId, videoTrackId) - .execute().body(); - } else { - return ResponseEntity.badRequest().body("outputMode is required"); - } - - return ResponseEntity.ok().body(generateEgressInfoResponse(egressInfo)); - - } catch (Exception e) { - System.out.println("Error starting recording " + e.getMessage()); - return ResponseEntity.badRequest().body("Error starting recording"); - } - } - - @RequestMapping(value = "/recordings/stop", method = RequestMethod.POST) - public ResponseEntity stopRecording(@RequestBody Map params) { - - String recordingId = (String) params.get("recordingId"); - - if (recordingId == null) { - return ResponseEntity.badRequest().body("recordingId is required"); - } - - System.out.println("Stoping recording | {recordingId}=" + recordingId); - - try { - LivekitEgress.EgressInfo egressInfo = this.egressClient.stopEgress(recordingId).execute().body(); - return ResponseEntity.ok().body(generateEgressInfoResponse(egressInfo)); - } catch (Exception e) { - System.out.println("Error stoping recording " + e.getMessage()); - return ResponseEntity.badRequest().body("Error stoping recording"); - } - } - - @RequestMapping(value = "/recordings", method = RequestMethod.DELETE) - public ResponseEntity deleteRecordings() { - - try { - File recordingsDir = ResourceUtils.getFile("classpath:static"); - deleteFiles(new File(RECORDINGS_PATH)); - deleteFiles(new File(recordingsDir.getAbsolutePath())); - JSONObject response = new JSONObject(); - response.put("message", "All recordings deleted"); - - return ResponseEntity.ok().body(response.toMap()); - } catch (IOException e) { - e.printStackTrace(); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error deleting recordings"); - } - } - - @RequestMapping(value = "/recordings/list", method = RequestMethod.GET) - public ResponseEntity listRecordings() { - - System.out.println("Listing recordings"); - - List recordings = new ArrayList<>(); - - try { - File recordingsDir = ResourceUtils.getFile("classpath:static"); - Files.walk(Path.of(RECORDINGS_PATH)).forEach(filePath -> { - JSONObject recordingsMap = new JSONObject(); - - if (Files.isRegularFile(filePath)) { - String fileName = filePath.getFileName().toString(); - String destinationPath = recordingsDir.getAbsolutePath() + File.separator + fileName; - - try { - Files.copy(filePath, Path.of(destinationPath), StandardCopyOption.REPLACE_EXISTING); - } catch (IOException e) { - e.printStackTrace(); - } - - recordingsMap.put("name", fileName); - recordingsMap.put("path", "/" + fileName); - - recordings.add(recordingsMap); - } - }); - } catch (IOException e) { - e.printStackTrace(); - return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); - } - - JSONObject response = new JSONObject(); - response.put("recordings", recordings); - return new ResponseEntity<>(response.toMap(), HttpStatus.OK); - } - - private void deleteFiles(File directory) { - if (directory.exists() && directory.isDirectory()) { - File[] files = directory.listFiles(); - if (files != null) { - for (File file : files) { - if (file.isDirectory()) { - deleteFiles(file); - } else { - if (file.delete()) { - System.out.println("Deleted file: " + file.getAbsolutePath()); - } else { - System.out.println("Failed to delete file: " + file.getAbsolutePath()); - } - } - } - } - } - } - - private Map generateEgressInfoResponse(EgressInfo egressInfo) { - JSONObject info = new JSONObject(); - JSONObject response = new JSONObject(); - - info.put("egressId", egressInfo.getEgressId()); - info.put("roomName", egressInfo.getRoomName()); - info.put("status", egressInfo.getStatus().toString()); - - response.put("info", info); - return response.toMap(); - - } - -} diff --git a/advanced-features/openvidu-recording-java/src/main/resources/application-container.properties b/advanced-features/openvidu-recording-java/src/main/resources/application-container.properties deleted file mode 100644 index 5ab5cc01..00000000 --- a/advanced-features/openvidu-recording-java/src/main/resources/application-container.properties +++ /dev/null @@ -1,9 +0,0 @@ -spring.profiles.active=container - -server.port: 3000 -server.ssl.enabled: false - - -LIVEKIT_URL: ws://localhost:7880/ -LIVEKIT_API_KEY: http://localhost:4443/ -LIVEKIT_API_SECRET: MY_SECRET \ No newline at end of file diff --git a/advanced-features/openvidu-recording-java/src/main/resources/application.properties b/advanced-features/openvidu-recording-java/src/main/resources/application.properties deleted file mode 100644 index 93773915..00000000 --- a/advanced-features/openvidu-recording-java/src/main/resources/application.properties +++ /dev/null @@ -1,12 +0,0 @@ -server.port: 5000 -server.ssl.enabled: true -server.ssl.key-store: classpath:openvidu-selfsigned.jks -server.ssl.key-store-password: openvidu -server.ssl.key-store-type: JKS -server.ssl.key-alias: openvidu-selfsigned -spring.http.converters.preferred-json-mapper=gson - -LIVEKIT_URL: ws://localhost:7880/ -LIVEKIT_API_KEY: key1 -LIVEKIT_API_SECRET: abcdefghijklmnopqrstuvwxyz123456 -RECORDINGS_PATH: ../../openvidu-lk/local-deployment/cluster/recordings \ No newline at end of file diff --git a/advanced-features/openvidu-recording-java/src/main/resources/openvidu-selfsigned.jks b/advanced-features/openvidu-recording-java/src/main/resources/openvidu-selfsigned.jks deleted file mode 100644 index 4a02ecc47be43f930bf2f9af4d4068880670f853..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2268 zcmcIlX*kr47N7r^#m-nGOPCnT=sz@)CHrd&35_I^Wt1#aSteVr#*!`jR+sE?Np>Za ztd)!{CD{_$$-w~dp5@+hgaGht<|kF8uw@OgQZuMwIs2dzsjGVwY#9wbl24A`Npol zW>0F#`UJI5@@6Oz|Hq4-3D0L3@8c^mu~B&T(@UI+>S@7m=L{NLusJ zcvvjqXC3^ck7WeesKqiV8#=Usb}IbUXj)bT&&1nIF-4d_TdPqAEN_IH(vmbgX?xp# zMN!2Sp(fD2NT2&`O~qM{@E=g55Ab5nZ;GwM&Kad zJqudKyZEGVg`ddO27;<|@_?0?zyLPGQmFFURxD$L=X~S4Qp}N`#NswmSVnUZYUiQa zN5W=SKcSdlT&cJIEu_!HGZCA95jn?PI}x*ctYwDRPW#NIz(#+`!iF;hUCQUu+6SEW5&GmxJ(dDeN^Dio1~J6 zhMD5VESU@;Ddja;Isq`QS~++yZ=5SNX8%%C3KWZ^vdE1$;)R*zXlObkSHmZE^qyGq z3p2H*#+y@gLXtv;jqq&M-jCH38sq)|c`fCkow>M+U^91Bun$kox7+6W4$Goi>gR@U zaO7}#3+&%dY{1xs378q0^dC=qWpviFCU&KS`-EP;v-LQI+)=GF9Iw+Q+;fF^CSP!a zXc&7zTk6uTIY+SPmbWiXsK>jT)lU3ejkuPUX?1_n!#N2UfA{Q_L`Y|*xevyLZjsXa zC9T9kg_g#(B3-{M@<&Ew3bE-*{Mggo%nqW12*`x|lShr;^tji`3ga^F0 z8dOk~iw?P)-#aaKe=%GY9BG?Ma$R$Bj}q$@Afb1^YryX$*NO-T38CdP;>}FU`(J+Q zGF1(!*xYs~f<_WAem(V7aE9#km~)IH#?-3#M>%SpX0!#LV~c)56YRKc-Ki8_+Ul5Q$xNZR^RX`Wr^UhY|s(iM@#CX^(8+HMz%EO;GU z$Csp2XJ2~v$H#2CNmTw<-vLaV&DKh1E@bcw*(@SuKu-l2;4;$<7cuY*Lf>5H^(Cf1~nj~FT+9NW*HOk%hy%>TIg4DDL)Bz(SyLbk7& z`PQ&3s&9ZFwDiDucp3s>xd&2N!a*w3GmixdK%s1qs@K|nOKGemkPE@45M>g@-~s>+I0UrE zae!9THaodQTxMKEHKe#LS{6oqDXOH2>lw_Q3>oeHPE zPVaAW;t{6GEhv1A<=Z~qRG>-Y*ItjuV5SEy2kq^--%A+aJttL#@}d_NhG%k=f2=L& zZbkcD!#!|CBf%?b^P< zUYJW|ilu4#uSn(uQ4DGjI3IV1{LzJ?Q864;#X9dzYXXbg_vRb~n!c14WfCR;12mti zktOcSn1wf`Zc4zvWt5BDn04HJS1Oiy$!7Bkga44fkDG%fOC+ zLSg?qfb(|%KMW4C0KmcDXMT8EhcgEt#7x~LM?{}rc3ZsS(Y%h$5bWLQWu@Y}R9rpc zk*k{(=Y;x_B9^U~=;GehZJUCwC7_)~_QDLQPB*@+_lV;0- z=R0`odur}#Hp_4;o=b}^-15H{OpPSy9z#! { - const element = track.attach(); - element.id = track.sid; - document.getElementById('video-container').appendChild(element); - if (track.kind === 'video') { - var audioTrackId; - var videoTrackId; - participant.getTracks().forEach((track) => { - if (track.kind === 'audio') { - audioTrackId = track.trackInfo.sid; - } else if (track.kind === 'video') { - videoTrackId = track.trackInfo.sid; - } - }); - addIndividualRecordingButton(element.id, videoTrackId, audioTrackId); - updateNumVideos(1); - } - } - ); - - // On every new Track destroyed... - room.on( - LivekitClient.RoomEvent.TrackUnsubscribed, - (track, publication, participant) => { - track.detach(); - document.getElementById(track.sid)?.remove(); - if (track.kind === 'video') { - // removeUserData(participant); - updateNumVideos(-1); - } - } - ); - - room.on(LivekitClient.RoomEvent.RecordingStatusChanged, (isRecording) => { - console.log('Recording status changed: ' + status); - if (!isRecording) { - listRecordings(); - } - }); - - getToken(myRoomName, myParticipantName).then(async (token) => { - const livekitUrl = getLivekitUrlFromMetadata(token); - - try { - await room.connect(livekitUrl, token); - - var participantName = $('#user').val(); - $('#room-title').text(myRoomName); - $('#join').hide(); - $('#room').show(); - - const [audioPublication, videoPublication] = await Promise.all([ - room.localParticipant.setMicrophoneEnabled(true), - room.localParticipant.setCameraEnabled(true), - ]); - localVideoPublication = videoPublication; - localAudioPublication = audioPublication; - - console.log('Connected to room ' + myRoomName); - const element = videoPublication.track.attach(); - element.id = videoPublication.track.sid; - document.getElementById('video-container').appendChild(element); - addIndividualRecordingButton( - element.id, - videoPublication.track.sid, - audioPublication.track.sid - ); - updateNumVideos(1); - } catch (error) { - console.warn( - 'There was an error connecting to the room:', - error.code, - error.message - ); - enableBtn(); - } - - return false; - }); -} - -function leaveRoom() { - room.disconnect(); - room = null; - - $('#video-container').empty(); - numVideos = 0; - - $('#join').show(); - $('#room').hide(); - - enableBtn(); -} - -/* OPENVIDU METHODS */ - -function enableBtn() { - document.getElementById('join-btn').disabled = false; - document.getElementById('join-btn').innerHTML = 'Join!'; -} - -/* APPLICATION REST METHODS */ - -function getToken(roomName, participantName) { - return new Promise((resolve, reject) => { - // Video-call chosen by the user - httpRequest( - 'POST', - 'token', - { roomName, participantName }, - 'Error generating token', - (response) => resolve(response.token) - ); - }); -} - -async function httpRequest(method, url, body, errorMsg, successCallback) { - try { - const response = await fetch(url, { - method, - headers: { - 'Content-Type': 'application/json', - }, - body: method === 'GET' ? undefined : JSON.stringify(body), - }); - - if (response.ok) { - const data = await response.json(); - successCallback(data); - } else { - console.warn(errorMsg); - console.warn('Error: ' + response.statusText); - } - } catch (error) { - console.error(error); - } -} - -function startComposedRecording() { - var hasAudio = $('#has-audio-checkbox').prop('checked'); - var hasVideo = $('#has-video-checkbox').prop('checked'); - - httpRequest( - 'POST', - 'recordings/start', - { - roomName: room.roomInfo.name, - outputMode: 'COMPOSED', - videoOnly: hasVideo && !hasAudio, - audioOnly: hasAudio && !hasVideo, - }, - 'Start recording WRONG', - (res) => { - console.log(res); - document.getElementById('forceRecordingId').value = res.id; - checkBtnsRecordings(); - $('#textarea-http').text(JSON.stringify(res, null, '\t')); - } - ); -} - -function startIndividualRecording(videoTrackId, audioTrackId) { - return new Promise((resolve, reject) => { - httpRequest( - 'POST', - 'recordings/start', - { - roomName: room.roomInfo.name, - outputMode: 'INDIVIDUAL', - audioTrackId, - videoTrackId, - }, - 'Start recording WRONG', - (res) => { - console.log(res); - $('#textarea-http').text(JSON.stringify(res.info, null, '\t')); - resolve(res); - } - ); - }); -} - -function stopRecording(id) { - var forceRecordingId = id ? id : $('#forceRecordingId').val(); - httpRequest( - 'POST', - 'recordings/stop', - { - recordingId: forceRecordingId, - }, - 'Stop recording WRONG', - (res) => { - console.log(res); - $('#forceRecordingId').val(''); - $('#textarea-http').text(JSON.stringify(res.info, null, '\t')); - } - ); -} - -function listRecordings() { - httpRequest('GET', 'recordings/list', {}, 'List recordings WRONG', (res) => { - console.log(res); - $('#recording-list').empty(); - if (res.recordings && res.recordings.length > 0) { - res.recordings.forEach((recording) => { - var li = document.createElement('li'); - var a = document.createElement('a'); - a.href = recording.path; - a.target = '_blank'; - a.appendChild(document.createTextNode(recording.name)); - li.appendChild(a); - $('#recording-list').append(li); - }); - $('#delete-recordings-btn').prop('disabled', res.recordings.length === 0); - } - }); -} - -function deleteRecordings() { - httpRequest('DELETE', 'recordings', {}, 'Delete recordings WRONG', (res) => { - console.log(res); - $('#recording-list').empty(); - $('#delete-recordings-btn').prop('disabled', true); - $('#textarea-http').text(JSON.stringify(res, null, '\t')); - }); -} - -/* APPLICATION REST METHODS */ - -/* APPLICATION BROWSER METHODS */ - -events = ''; - -window.onbeforeunload = function () { - // Gracefully leave room - if (room) { - removeUser(); - leaveRoom(); - } -}; - -function getLivekitUrlFromMetadata(token) { - if (!token) throw new Error('Trying to get metadata from an empty token'); - try { - const base64Url = token.split('.')[1]; - const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/'); - const jsonPayload = decodeURIComponent( - window - .atob(base64) - .split('') - .map((c) => { - return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); - }) - .join('') - ); - - const payload = JSON.parse(jsonPayload); - if (!payload?.metadata) throw new Error('Token does not contain metadata'); - const metadata = JSON.parse(payload.metadata); - return metadata.livekitUrl; - } catch (error) { - throw new Error('Error decoding and parsing token: ' + error); - } -} - -function updateNumVideos(i) { - numVideos += i; - $('video').removeClass(); - switch (numVideos) { - case 1: - $('video').addClass('two'); - break; - case 2: - $('video').addClass('two'); - break; - case 3: - $('video').addClass('three'); - break; - case 4: - $('video').addClass('four'); - break; - } -} - -function checkBtnsRecordings() { - if (document.getElementById('forceRecordingId').value === '') { - document.getElementById('buttonStopRecording').disabled = true; - } else { - document.getElementById('buttonStopRecording').disabled = false; - } -} - -function addIndividualRecordingButton(elementId, videoTrackId, audioTrackId) { - const div = document.createElement('div'); - - var button = document.createElement('button'); - // button.id = elementId + '-button'; - button.className = 'recording-track-button btn btn-sm'; - - button.innerHTML = 'Record Track'; - button.style = 'position: absolute; left: 0; z-index: 1000;'; - - button.onclick = async () => { - if (button.innerHTML === 'Record Track') { - button.innerHTML = 'Stop Recording'; - button.className = 'recording-track-button btn btn-sm btn-danger'; - var res = await startIndividualRecording(videoTrackId, audioTrackId); - button.id = res.info.egressId; - } else { - button.innerHTML = 'Record Track'; - button.className = 'recording-track-button btn btn-sm'; - stopRecording(button.id); - } - }; - div.appendChild(button); - var element = document.getElementById(elementId); - element.parentNode.insertBefore(div, element.nextSibling); -} - -function clearHttpTextarea() { - $('#textarea-http').text(''); -} - -/* APPLICATION BROWSER METHODS */ diff --git a/advanced-features/openvidu-recording-java/src/main/resources/static/images/favicon.ico b/advanced-features/openvidu-recording-java/src/main/resources/static/images/favicon.ico deleted file mode 100644 index 0e2249ada68ec5cab2034721dc193285c27175b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5430 zcmc&&eN2^Q6o2ox;0z74F{f9TU#+!9X2#sY&6#cG+%jk7$GvdHRGeG+hii#qr9`BK zC}qeHvGgi7)2x{@AZJeQ2i$vM6vot;IU_|SM7+HB^gGY{zHsji5d!CRKhN_%yyy9y z=RD^*=iDnvI!P}LA1>iDPFi7n3LB+bNp^oNLalA8=H z`-6iYNhVd-0{wN8JM*q}0bsYHpWyM3&HpH+LU-f&>6Fv>650J0N)zjuDZSc6C3#&o z_*8vxN9x<4|6}uZ>X2_!&8_cgL&Ni8P1fJjXZ?H%g+e5UI_YNcD%N;b@b^{!L~|as zb>5(}El$d8mIy_@DizA(Ef{Umop0o%=3L z^zNk@HLHP)NK~()6z}r(9R;IG5d)tho~Gi=Phk!9{FF1`IJgHmKAUu|POBE<&`n0{ z`~Z38{s^(X>5?n*o?(vf0mpJ*5OLQf2{sP^oM*-XGXX8nWQp8_iLj5h--j)QuU!4l zcm1^+@nJ!H#Q|OZ7U$!lB*+;+9Dv+6c(yQ?ig?KRuwfJA2(}$O93#xR6=(vGv*`&y z~xQi3P znSt>+$PP%p-|K*(fL5#6->6em58#f9dwT`8?80~sWW3~-#d&2N8zSU^9Ld0NMuE9` zU0^h@05}9(1DKb=<5>W|Bh~^3^C#l|mcS33GlBq1_=8XjLYX?ZoD}Q18pHgh+Z66- ze$}R7*k=mX&IQf`8gEb?pMo3@gvTHA^LejSIn_MHHi(?nVsPI+KE`|0k$G@(@{ufk za@hw`GHPh@;V|Gi<mXv<+e z?JUxZx*lZ%pG7N>0j{Tk)4)w2h#25=kKmu+-A8Zu9~bq?9x%)HTCzBv z<}(v)1WdH7#zYzCO!UcqJ;5j8e$dXO7+miGTFj}u8oyGnCVO|&BL7&yuk%i zsKG{Z1cr3|jsG4FTb-HKRv4)`Ul+lTz4KX=g1b=NZ`i&g`KPG-4s~s=+cv*}R@5fY z^4bx!s75b1H9NxVI(!8m80m{I2Zui`V8NdClu`E>xo&(z{#z#~@8WCVA4-dTdicT8 z z^&i{7;OFL!i&WH<-o?MF$|U?hxcu7wWwjTU;e#OEk^iAfw|%th58DIf&uq~6m3`ll z+vv~sU(ws|L~J~V80GI655oUS{H_4L!-1#x4w~zmNelgx=yl(OK4W2E0;N`2gZaB-FQW#Z2Y(}YtARXVOz-?$ zhq`ST!m( zi)i-rQ~rkcXLa|*I`Mr#?Y$f-H}m%b?o0kRPC_@yT2a&0b85DL6Me7fyL#Eb=7)Yt z<+qnctna`%57RiqCFc1ItiTf3xEV5c5b-Y7nuT@a!Z~{y<30WkGz^lziwzJVMc>6e TedKQfJ#jzGxv-xC9?I}vocwV} diff --git a/advanced-features/openvidu-recording-java/src/main/resources/static/images/openvidu_globe_bg_transp_cropped.png b/advanced-features/openvidu-recording-java/src/main/resources/static/images/openvidu_globe_bg_transp_cropped.png deleted file mode 100644 index e0309e62181608cf3543664ced79b6355779533b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11746 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 KVuQR*wOeuWT3;&BESMc5c{Qzs4Eae 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
6<-acu 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 NQp-@YMBO3!e*nzNs#O30 diff --git a/advanced-features/openvidu-recording-java/src/main/resources/static/index.html b/advanced-features/openvidu-recording-java/src/main/resources/static/index.html deleted file mode 100644 index 1ded9bdd..00000000 --- a/advanced-features/openvidu-recording-java/src/main/resources/static/index.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - openvidu-recording-node - - - - - - - - - - - - - - - - - - - - - -
-
-
- -
-
-

Join a video room

-
-

- - -

-

- -

-
-
-
-
- - -
- -
-
-
OpenVidu © 2023
- - - -
-
- - - - diff --git a/advanced-features/openvidu-recording-java/src/main/resources/static/style.css b/advanced-features/openvidu-recording-java/src/main/resources/static/style.css deleted file mode 100644 index dfea514d..00000000 --- a/advanced-features/openvidu-recording-java/src/main/resources/static/style.css +++ /dev/null @@ -1,474 +0,0 @@ -html { - position: relative; - min-height: 100%; -} - -body { - min-height: 100%; -} - -nav { - height: 50px; - width: 100%; - z-index: 1; - background-color: #4d4d4d !important; - border-color: #4d4d4d !important; - border-top-right-radius: 0 !important; - border-top-left-radius: 0 !important; -} - -.navbar-header { - width: 100%; -} - -.nav-icon { - padding: 5px 15px 5px 15px; - float: right; -} - -nav a { - color: #ccc !important; -} - -nav i.fa { - font-size: 40px; - color: #ccc; -} - -nav a:hover { - color: #a9a9a9 !important; -} - -nav i.fa:hover { - color: #a9a9a9; -} - -#main-container { - padding-bottom: 80px; - height: 100%; - margin-top: -70px; -} - -.vertical-center { - width: -webkit-fit-content; - width: fit-content; - margin: auto; -} - -.vertical-center#not-logged form { - width: -moz-fit-content; - margin: auto; -} - -.vertical-center#not-logged table { - width: -moz-fit-content; - margin: auto; -} - -.vertical-center table { - margin-top: 3em !important; -} - -.horizontal-center { - margin: 0 auto; -} - -.form-control { - color: #0088aa; - font-weight: bold; -} - -.form-control:focus { - border-color: #0088aa; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(0, 136, 170, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(0, 136, 170, 0.6); -} - -input.btn { - font-weight: bold; -} - -.btn { - font-weight: bold !important; -} - -.btn-success { - background-color: #06d362 !important; - border-color: #06d362; -} - -.btn-success:hover { - background-color: #1abd61 !important; - border-color: #1abd61; -} - -.btn-info { - background-color: #0088aa !important; - border-color: #0088aa; -} - -.btn-info:hover { - background-color: #00708c !important; - border-color: #00708c; -} - -.btn-warning { - background-color: #ffcc00 !important; - border-color: #ffcc00; - color: #4d4d4d; -} - -.btn-warning:hover { - background-color: #eabb3a !important; - border-color: #eabb3a; - color: #4d4d4d; -} - -.btn-warning:active { - color: #4d4d4d; -} - -.btn-warning:focus { - color: #4d4d4d; -} - -.btn-warning:active:focus { - color: #4d4d4d; -} - -.footer { - position: absolute; - bottom: 0; - width: 100%; - height: 60px; - background-color: #4d4d4d; -} - -.footer .text-muted { - margin: 20px 0; - float: left; - color: #ccc; -} - -.openvidu-logo { - height: 35px; - float: right; - margin: 12px 0; - -webkit-transition: all 0.1s ease-in-out; - -moz-transition: all 0.1s ease-in-out; - -o-transition: all 0.1s ease-in-out; - transition: all 0.1s ease-in-out; -} - -.openvidu-logo:hover { - -webkit-filter: grayscale(0.5); - filter: grayscale(0.5); -} - -.demo-logo { - margin: 0; - height: 22px; - float: left; - padding-right: 8px; -} - -a:hover .demo-logo { - -webkit-filter: brightness(0.7); - filter: brightness(0.7); -} - -#join { - padding-top: 40px; -} - -#not-logged { - padding-top: 40px; -} - -#join-dialog h1 { - color: #4d4d4d; - font-weight: bold; - text-align: center; -} - -#join-dialog label { - color: #0088aa; -} - -#join-dialog input.btn { - margin-top: 15px; -} - -#join-dialog hr { - background: #4d4d4d; -} - -#img-div { - text-align: center; - padding-bottom: 3em; -} - -#img-div img { - height: 15%; -} - -#logged { - width: 100%; -} - -#join { - max-width: 700px; - margin: auto; - margin-top: 100px; -} - -#room-header { - margin-bottom: 20px; - height: 8%; - margin-top: 70px; -} - -#room-header form { - display: inline-block; -} - -#room-header input.btn { - float: right; - margin-top: 20px; - margin-left: 5px; -} - -#room-title { - display: inline-block; -} - -#room-header .form-control { - width: initial; - float: right; - margin: 18px 0px 0px 5px; -} - -#video-container { - width: 100%; - max-height: 42%; - display: block; - overflow: hidden; -} - -#video-container video.two { - max-width: 50%; -} - -#video-container video.three { - max-width: 33.33%; -} - -#video-container video.four { - max-width: 25%; -} - -#video-container div { - position: absolute; - display: inline-flex; - margin-left: calc(-50% + 15px); -} - -#video-container p { - display: inline-block; - background: #f8f8f8; - padding-left: 5px; - padding-right: 5px; - color: #777777; - font-weight: bold; - border-bottom-right-radius: 4px; -} - -#video-container p.userName { - float: right; - border-bottom-left-radius: 4px; - border-bottom-right-radius: 0px; - font-weight: lighter; - font-size: 12px; - background: #777777; - color: #f8f8f8; -} - -video { - width: auto; - height: auto; - max-height: 100%; - object-fit: scale-down; -} - -#room { - height: 100%; - padding-bottom: 80px; -} - -#room img { - width: 100%; - height: auto; - display: inline-block; - object-fit: contain; - vertical-align: baseline; -} - -#room #video-container img { - position: relative; - float: left; - width: 50%; - cursor: pointer; - object-fit: cover; - height: 180px; -} - -table i { - cursor: pointer; - margin-left: 1em; -} - -#tooltip-div { - text-align: left; -} - -#tooltip-div hr { - margin: 5px 0; -} - -#login-info { - text-align: right; -} - -#login-info form { - display: inline; -} - -#login-info div { - display: inline; - margin-right: 1em; -} - -#name-user { - font-weight: bold; -} - -#recording-btns { - display: inline-block; - padding-left: 15px; - padding-top: 20px; - width: 100%; - height: 40%; -} - -#recording-btns .btns { - margin-top: 10px; -} - -#recording-btns .btns .form-control { - width: initial; - display: inline; -} - -#recording-btns .btns form { - display: inline; - margin-left: 5px; -} - -#recording-btns textarea { - height: 100%; -} - -.textarea-container { - position: relative; - display: inline-block; - height: 74%; - margin-top: 20px; - resize: none; -} - -#textarea-http-container { - width: 59%; -} - -#recordings-list-container { - width: 39%; - overflow: auto; -} - -.textarea-container button { - position: absolute; - top: 1px; - right: 1px; - z-index: 1; -} - -.textarea-container span { - position: absolute; - bottom: 1px; - right: 1px; - padding: 3px; - border-bottom-right-radius: 4px; - z-index: 1; - color: #a5a5a5; - background-color: #ededee; - font-weight: 600; -} - -.textarea-container textarea { - height: 100%; - resize: none; -} - -.vertical-separator-bottom { - width: 2px; - height: 34px; - display: inline-block; - background-color: #cbcbcb; - margin: 0 8px 0 8px; - margin-bottom: -12px; -} - -.vertical-separator-top { - width: 2px; - height: 30px; - background-color: #cbcbcb; - margin: 20px 8px 0 15px; - float: right; -} - -/* xs ans md screen resolutions*/ - -@media screen and (max-width: 991px) { - #join { - padding-top: inherit; - } - - #not-logged { - padding-top: inherit; - } - - .container .navbar-header { - margin-right: 0 !important; - margin-left: 0 !important; - } - - .nav-icon { - padding: 9px 8px 9px 8px; - } - - nav i.fa { - font-size: 32px; - } - - .vertical-center { - padding-top: 10px; - } - - #img-div { - padding-bottom: 1em; - } - - #img-div img { - height: 10%; - } -} \ No newline at end of file diff --git a/advanced-features/openvidu-roles-java/.gitignore b/advanced-features/openvidu-roles-java/.gitignore deleted file mode 100644 index 950fc085..00000000 --- a/advanced-features/openvidu-roles-java/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -target/ diff --git a/advanced-features/openvidu-roles-java/LICENSE b/advanced-features/openvidu-roles-java/LICENSE deleted file mode 100644 index 8dada3ed..00000000 --- a/advanced-features/openvidu-roles-java/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/advanced-features/openvidu-roles-java/README.md b/advanced-features/openvidu-roles-java/README.md deleted file mode 100644 index c19ecf1c..00000000 --- a/advanced-features/openvidu-roles-java/README.md +++ /dev/null @@ -1,14 +0,0 @@ -[![License badge](https://img.shields.io/badge/license-Apache2-orange.svg)](http://www.apache.org/licenses/LICENSE-2.0) -[![OpenVidu Tests](https://github.com/OpenVidu/openvidu/actions/workflows/openvidu-ce-test.yml/badge.svg)](https://github.com/OpenVidu/openvidu/actions/workflows/openvidu-ce-test.yml) -[![Documentation Status](https://readthedocs.org/projects/openvidu/badge/?version=stable)](https://docs.openvidu.io/en/stable/?badge=stable) -[![Docker badge](https://img.shields.io/docker/pulls/openvidu/openvidu-server-kms.svg)](https://hub.docker.com/r/openvidu/openvidu-server-kms) -[![Support badge](https://img.shields.io/badge/support-sof-yellowgreen.svg)](https://openvidu.discourse.group/) - -[![][OpenViduLogo]](http://openvidu.io) - -openvidu-roles-java -=== - -Visit [docs.openvidu.io/en/stable/tutorials/openvidu-roles-java/](http://docs.openvidu.io/en/stable/tutorials/openvidu-roles-java/) - -[OpenViduLogo]: https://secure.gravatar.com/avatar/5daba1d43042f2e4e85849733c8e5702?s=120 \ No newline at end of file diff --git a/advanced-features/openvidu-roles-java/docker/Dockerfile b/advanced-features/openvidu-roles-java/docker/Dockerfile deleted file mode 100644 index 27e95286..00000000 --- a/advanced-features/openvidu-roles-java/docker/Dockerfile +++ /dev/null @@ -1,26 +0,0 @@ - -FROM maven:3.6.3 as build -WORKDIR /basic-webinar -COPY ./pom.xml pom.xml -COPY ./src/main src/main - -RUN mvn clean install -RUN mvn -o package - -FROM alpine:3.11 - -RUN apk update && \ - apk add openjdk11-jre && \ - rm -rf /var/cache/apk/* - -# Install basic-webinar -RUN mkdir -p /opt/openvidu-basic-webinar -COPY --from=build /basic-webinar/target/openvidu-roles-java-*.jar /opt/openvidu-basic-webinar/openvidu-basic-webinar.jar -# Entrypoint -COPY ./docker/entrypoint.sh /usr/local/bin -RUN chmod +x /usr/local/bin/entrypoint.sh - -CMD /usr/local/bin/entrypoint.sh - - - diff --git a/advanced-features/openvidu-roles-java/docker/create_image.sh b/advanced-features/openvidu-roles-java/docker/create_image.sh deleted file mode 100644 index f36d63ce..00000000 --- a/advanced-features/openvidu-roles-java/docker/create_image.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -if [ $# -eq 0 ]; then - echo "No version argument provided. Usage: \"./create_image.sh \"" - exit 1 -fi - -pushd ../ -docker build --pull --no-cache --rm=true -f docker/Dockerfile -t "$1" . \ No newline at end of file diff --git a/advanced-features/openvidu-roles-java/docker/entrypoint.sh b/advanced-features/openvidu-roles-java/docker/entrypoint.sh deleted file mode 100644 index 9088bdd4..00000000 --- a/advanced-features/openvidu-roles-java/docker/entrypoint.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -[ ! -z "${OPENVIDU_URL}" ] && echo "OPENVIDU_URL: ${OPENVIDU_URL}" || echo "OPENVIDU_URL: default" -[ ! -z "${OPENVIDU_SECRET}" ] && echo "OPENVIDU_SECRET: ${OPENVIDU_SECRET}" || echo "OPENVIDU_SECRET: default" -[ ! -z "${SERVER_PORT}" ] && echo "SERVER_PORT: ${SERVER_PORT}" || echo "SERVER_PORT: default" - -# Run Application -JAVA_PROPERTIES="-Djava.security.egd=file:/dev/./urandom" -[ ! -z "${OPENVIDU_URL}" ] && JAVA_PROPERTIES=" ${JAVA_PROPERTIES} -Dopenvidu.url=${OPENVIDU_URL}" -[ ! -z "${OPENVIDU_SECRET}" ] && JAVA_PROPERTIES=" ${JAVA_PROPERTIES} -Dopenvidu.secret=${OPENVIDU_SECRET}" -[ ! -z "${SERVER_PORT}" ] && JAVA_PROPERTIES=" ${JAVA_PROPERTIES} -Dserver.port=${SERVER_PORT}" - -java ${JAVA_PROPERTIES} -jar /opt/openvidu-basic-webinar/openvidu-basic-webinar.jar diff --git a/advanced-features/openvidu-roles-java/nginx.conf b/advanced-features/openvidu-roles-java/nginx.conf deleted file mode 100644 index 500c543d..00000000 --- a/advanced-features/openvidu-roles-java/nginx.conf +++ /dev/null @@ -1,44 +0,0 @@ -events { - worker_connections 512; -} -http { - upstream openvidu-deployment { - server host.docker.internal:4443; - } - upstream client-application { - server host.docker.internal:5000; - } - server { - listen 443 ssl; - ssl_certificate /etc/nginx/certs/cert.pem; - ssl_certificate_key /etc/nginx/certs/key.pem; - - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Forwarded-Proto https; - proxy_headers_hash_bucket_size 512; - proxy_redirect off; - - # Websockets - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - - # OpenVidu deployment API - location /openvidu/api { - proxy_pass http://openvidu-deployment; - } - - # OpenVidu WebSocket - location ~ /openvidu$ { - proxy_pass http://openvidu-deployment; - } - - # Client application requests - location / { - proxy_pass https://client-application; - } - } -} \ No newline at end of file diff --git a/advanced-features/openvidu-roles-java/pom.xml b/advanced-features/openvidu-roles-java/pom.xml deleted file mode 100644 index 66036a26..00000000 --- a/advanced-features/openvidu-roles-java/pom.xml +++ /dev/null @@ -1,62 +0,0 @@ - - 4.0.0 - - io.openvidu - openvidu-roles-java - 2.27.0 - jar - - openvidu-roles-java - https://github.com/OpenVidu/openvidu-tutorials/tree/master/openvidu-roles-java - - - org.springframework.boot - spring-boot-starter-parent - 2.1.4.RELEASE - - - - UTF-8 - 1.8 - io.openvidu.js.java.App - openvidu - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - - junit - junit - test - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-devtools - - - org.json - json - 20231013 - - - io.livekit - livekit-server - 0.5.7 - - - - diff --git a/advanced-features/openvidu-roles-java/src/main/java/io/openvidu/js/java/App.java b/advanced-features/openvidu-roles-java/src/main/java/io/openvidu/js/java/App.java deleted file mode 100644 index eda169a2..00000000 --- a/advanced-features/openvidu-roles-java/src/main/java/io/openvidu/js/java/App.java +++ /dev/null @@ -1,13 +0,0 @@ -package io.openvidu.js.java; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class App -{ - public static void main( String[] args ) - { - SpringApplication.run(App.class, args); - } -} diff --git a/advanced-features/openvidu-roles-java/src/main/java/io/openvidu/js/java/LoginController.java b/advanced-features/openvidu-roles-java/src/main/java/io/openvidu/js/java/LoginController.java deleted file mode 100644 index 2eb45ced..00000000 --- a/advanced-features/openvidu-roles-java/src/main/java/io/openvidu/js/java/LoginController.java +++ /dev/null @@ -1,76 +0,0 @@ -package io.openvidu.js.java; - -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import javax.servlet.http.HttpSession; - -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; - -import org.springframework.web.bind.annotation.RestController; - -@CrossOrigin(origins = "*") -@RestController -public class LoginController { - - public class MyUser { - - String name; - String pass; - String role; - - public MyUser(String name, String pass, String role) { - this.name = name; - this.pass = pass; - this.role = role; - } - } - - public static Map users = new ConcurrentHashMap<>(); - - public LoginController() { - users.put("publisher1", new MyUser("publisher1", "pass", "PUBLISHER")); - users.put("publisher2", new MyUser("publisher2", "pass", "PUBLISHER")); - users.put("subscriber", new MyUser("subscriber", "pass", "SUBSCRIBER")); - } - - @PostMapping("/login") - public ResponseEntity login(@RequestBody(required = true) Map params, HttpSession httpSession) { - - String user = params.get("user"); - String pass = params.get("pass"); - Map response = new HashMap(); - - if (login(user, pass)) { - // Successful login - // Validate session and return OK - // Value stored in req.session allows us to identify the user in future requests - httpSession.setAttribute("loggedUser", user); - return new ResponseEntity<>(new HashMap(), HttpStatus.OK); - } else { - // Credentials are NOT valid - // Invalidate session and return error - httpSession.invalidate(); - response.put("message", "Invalid credentials"); - return new ResponseEntity<>(response, HttpStatus.UNAUTHORIZED); - } - } - - @PostMapping("/logout") - public ResponseEntity logout(HttpSession session) { - System.out.println("'" + session.getAttribute("loggedUser") + "' has logged out"); - session.invalidate(); - return new ResponseEntity<>(HttpStatus.OK); - } - - private boolean login(String user, String pass) { - if(user.isEmpty() || pass.isEmpty()) return false; - return (users.containsKey(user) && users.get(user).pass.equals(pass)); - } - -} diff --git a/advanced-features/openvidu-roles-java/src/main/java/io/openvidu/js/java/RoomController.java b/advanced-features/openvidu-roles-java/src/main/java/io/openvidu/js/java/RoomController.java deleted file mode 100644 index 565fe052..00000000 --- a/advanced-features/openvidu-roles-java/src/main/java/io/openvidu/js/java/RoomController.java +++ /dev/null @@ -1,85 +0,0 @@ -package io.openvidu.js.java; - -import java.util.HashMap; -import java.util.Map; - -import javax.servlet.http.HttpSession; - -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.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; - -import io.livekit.server.AccessToken; -import io.livekit.server.CanPublish; -import io.livekit.server.CanSubscribe; -import io.livekit.server.RoomJoin; -import io.livekit.server.RoomName; - -import io.openvidu.js.java.LoginController.MyUser; - -@CrossOrigin(origins = "*") -@RestController -public class RoomController { - - @Value("${LIVEKIT_URL}") - private String LIVEKIT_URL; - - @Value("${LIVEKIT_API_KEY}") - private String LIVEKIT_API_KEY; - - @Value("${LIVEKIT_API_SECRET}") - private String LIVEKIT_API_SECRET; - - /** - * @param params The JSON object with roomName and participantName - * @return The JWT token - */ - @PostMapping("/token") - public ResponseEntity> getToken(@RequestBody(required = true) Map params, HttpSession httpSession) { - - String roomName = params.get("roomName"); - String participantName = params.get("participantName"); - Map response = new HashMap(); - - if(!isUserLogged(httpSession)) { - response.put("message", "User is not logged"); - return new ResponseEntity<>(response, HttpStatus.UNAUTHORIZED); - } - - if(roomName == null || participantName == null) { - response.put("message", "roomName and participantName are required"); - return new ResponseEntity<>(response, HttpStatus.BAD_REQUEST); - } - - MyUser user = LoginController.users.get(httpSession.getAttribute("loggedUser")); - Boolean canPublish = user.role.equals("PUBLISHER"); - - // 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); - metadata.put("user", user.name); - metadata.put("role", user.role); - // 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), new CanPublish(canPublish), new CanSubscribe(true)); - - response.put("token", token.toJwt()); - return new ResponseEntity<>(response, HttpStatus.OK); - } - - - private boolean isUserLogged(HttpSession httpSession) { - return httpSession != null && httpSession.getAttribute("loggedUser") != null; - } - -} diff --git a/advanced-features/openvidu-roles-java/src/main/resources/application.properties b/advanced-features/openvidu-roles-java/src/main/resources/application.properties deleted file mode 100644 index fdd2327b..00000000 --- a/advanced-features/openvidu-roles-java/src/main/resources/application.properties +++ /dev/null @@ -1,11 +0,0 @@ -server.port: 5000 -server.ssl.enabled: true -server.ssl.key-store: classpath:openvidu-selfsigned.jks -server.ssl.key-store-password: openvidu -server.ssl.key-store-type: JKS -server.ssl.key-alias: openvidu-selfsigned - - -LIVEKIT_URL: ws://localhost:7880/ -LIVEKIT_API_KEY: devkey -LIVEKIT_API_SECRET: secret \ No newline at end of file diff --git a/advanced-features/openvidu-roles-java/src/main/resources/openvidu-selfsigned.jks b/advanced-features/openvidu-roles-java/src/main/resources/openvidu-selfsigned.jks deleted file mode 100644 index 4a02ecc47be43f930bf2f9af4d4068880670f853..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2268 zcmcIlX*kr47N7r^#m-nGOPCnT=sz@)CHrd&35_I^Wt1#aSteVr#*!`jR+sE?Np>Za ztd)!{CD{_$$-w~dp5@+hgaGht<|kF8uw@OgQZuMwIs2dzsjGVwY#9wbl24A`Npol zW>0F#`UJI5@@6Oz|Hq4-3D0L3@8c^mu~B&T(@UI+>S@7m=L{NLusJ zcvvjqXC3^ck7WeesKqiV8#=Usb}IbUXj)bT&&1nIF-4d_TdPqAEN_IH(vmbgX?xp# zMN!2Sp(fD2NT2&`O~qM{@E=g55Ab5nZ;GwM&Kad zJqudKyZEGVg`ddO27;<|@_?0?zyLPGQmFFURxD$L=X~S4Qp}N`#NswmSVnUZYUiQa zN5W=SKcSdlT&cJIEu_!HGZCA95jn?PI}x*ctYwDRPW#NIz(#+`!iF;hUCQUu+6SEW5&GmxJ(dDeN^Dio1~J6 zhMD5VESU@;Ddja;Isq`QS~++yZ=5SNX8%%C3KWZ^vdE1$;)R*zXlObkSHmZE^qyGq z3p2H*#+y@gLXtv;jqq&M-jCH38sq)|c`fCkow>M+U^91Bun$kox7+6W4$Goi>gR@U zaO7}#3+&%dY{1xs378q0^dC=qWpviFCU&KS`-EP;v-LQI+)=GF9Iw+Q+;fF^CSP!a zXc&7zTk6uTIY+SPmbWiXsK>jT)lU3ejkuPUX?1_n!#N2UfA{Q_L`Y|*xevyLZjsXa zC9T9kg_g#(B3-{M@<&Ew3bE-*{Mggo%nqW12*`x|lShr;^tji`3ga^F0 z8dOk~iw?P)-#aaKe=%GY9BG?Ma$R$Bj}q$@Afb1^YryX$*NO-T38CdP;>}FU`(J+Q zGF1(!*xYs~f<_WAem(V7aE9#km~)IH#?-3#M>%SpX0!#LV~c)56YRKc-Ki8_+Ul5Q$xNZR^RX`Wr^UhY|s(iM@#CX^(8+HMz%EO;GU z$Csp2XJ2~v$H#2CNmTw<-vLaV&DKh1E@bcw*(@SuKu-l2;4;$<7cuY*Lf>5H^(Cf1~nj~FT+9NW*HOk%hy%>TIg4DDL)Bz(SyLbk7& z`PQ&3s&9ZFwDiDucp3s>xd&2N!a*w3GmixdK%s1qs@K|nOKGemkPE@45M>g@-~s>+I0UrE zae!9THaodQTxMKEHKe#LS{6oqDXOH2>lw_Q3>oeHPE zPVaAW;t{6GEhv1A<=Z~qRG>-Y*ItjuV5SEy2kq^--%A+aJttL#@}d_NhG%k=f2=L& zZbkcD!#!|CBf%?b^P< zUYJW|ilu4#uSn(uQ4DGjI3IV1{LzJ?Q864;#X9dzYXXbg_vRb~n!c14WfCR;12mti zktOcSn1wf`Zc4zvWt5BDn04HJS1Oiy$!7Bkga44fkDG%fOC+ zLSg?qfb(|%KMW4C0KmcDXMT8EhcgEt#7x~LM?{}rc3ZsS(Y%h$5bWLQWu@Y}R9rpc zk*k{(=Y;x_B9^U~=;GehZJUCwC7_)~_QDLQPB*@+_lV;0- z=R0`odur}#Hp_4;o=b}^-15H{OpPSy9z#! { - const element = track.attach(); - element.id = track.sid; - element.className = 'removable'; - document.getElementById('video-container').appendChild(element); - if (track.kind === 'video') { - var participantNickname; - try { - participantNickname = JSON.parse(participant.metadata).nickname; - } catch (error) { - console.warn('Error parsing participant metadata: ' + error); - } - appendUserData(element, participant.identity, participantNickname); - } - } - ); - - // On every new Track destroyed... - room.on( - LivekitClient.RoomEvent.TrackUnsubscribed, - (track, publication, participant) => { - track.detach(); - document.getElementById(track.sid)?.remove(); - if (track.kind === 'video') { - removeUserData(participant); - } - } - ); - - getToken(myRoomName, myParticipantName).then((token) => { - const livekitUrl = getLivekitUrlFromMetadata(token); - - room - .connect(livekitUrl, token) - .then(async () => { - var participantName = $('#user').val(); - $('#room-title').text(myRoomName); - $('#join').hide(); - $('#room').show(); - - const canPublish = room.localParticipant.permissions.canPublish; - - if (canPublish) { - const [microphonePublication, cameraPublication] = await Promise.all([ - room.localParticipant.setMicrophoneEnabled(true), - room.localParticipant.setCameraEnabled(true), - ]); - - const element = cameraPublication.track.attach(); - element.className = 'removable'; - document.getElementById('video-container').appendChild(element); - initMainVideo(element, myParticipantName, nickname); - appendUserData(element, myParticipantName, nickname); - } else { - initMainVideoThumbnail(); - } - }) - .catch((error) => { - console.warn( - 'There was an error connecting to the room:', - error.code, - error.message - ); - enableBtn(); - }); - }); - - return false; -} - -function leaveRoom() { - room.disconnect(); - room = null; - - // Removing all HTML elements with the user's nicknames - cleanRoomView(); - - $('#join').show(); - $('#room').hide(); - - enableBtn(); -} - -/* OPENVIDU METHODS */ - -function enableBtn() { - document.getElementById('join-btn').disabled = false; - document.getElementById('join-btn').innerHTML = 'Join!'; -} - -/* APPLICATION REST METHODS */ - -function logIn() { - nickname = $('#user').val(); - var pass = $('#pass').val(); - - httpPostRequest( - 'login', - { user: nickname, pass }, - 'Login WRONG', - (response) => { - $('#name-user').text(nickname); - $('#not-logged').hide(); - $('#logged').show(); - // Random myParticipantName and room - $('#myRoomName').val('Room ' + Math.floor(Math.random() * 10)); - $('#myParticipantName').val( - 'Participant ' + Math.floor(Math.random() * 100) - ); - } - ); -} - -function logOut() { - httpPostRequest('logout', {}, 'Logout WRONG', (response) => { - $('#not-logged').show(); - $('#logged').hide(); - }); - - enableBtn(); -} - -function getToken(roomName, participantName) { - return new Promise((resolve, reject) => { - // Video-call chosen by the user - httpPostRequest( - 'token', - { roomName, participantName }, - 'Error generating token', - (response) => resolve(response.token) - ); - }); -} - -async function httpPostRequest(url, body, errorMsg, successCallback) { - try { - const response = await fetch(url, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify(body), - }); - - if (response.ok) { - const data = await response.json(); - successCallback(data); - } else { - console.warn(errorMsg); - console.warn('Error: ', response); - } - } catch (error) { - console.error(error); - } -} - -/* APPLICATION REST METHODS */ - -/* APPLICATION BROWSER METHODS */ - -window.onbeforeunload = () => { - if (room) { - leaveRoom(); - } - logOut(); -}; - -function getLivekitUrlFromMetadata(token) { - if (!token) throw new Error('Trying to get metadata from an empty token'); - try { - const base64Url = token.split('.')[1]; - const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/'); - const jsonPayload = decodeURIComponent( - window - .atob(base64) - .split('') - .map((c) => { - return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); - }) - .join('') - ); - - const payload = JSON.parse(jsonPayload); - if (!payload?.metadata) throw new Error('Token does not contain metadata'); - const metadata = JSON.parse(payload.metadata); - return metadata.livekitUrl; - } catch (error) { - throw new Error('Error decoding and parsing token: ' + error); - } -} - -function appendUserData(videoElement, participantName, nickname) { - var dataNode = document.createElement('div'); - dataNode.className = 'removable'; - dataNode.id = 'data-' + participantName; - dataNode.innerHTML = ` -

${nickname}

-

${participantName}

- `; - videoElement.parentNode.insertBefore(dataNode, videoElement.nextSibling); - addClickListener(videoElement, participantName); -} - -function removeUserData(participant) { - var dataNode = document.getElementById('data-' + participant.identity); - dataNode?.parentNode.removeChild(dataNode); -} - -function removeAllUserData() { - var elementsToRemove = document.getElementsByClassName('removable'); - while (elementsToRemove[0]) { - elementsToRemove[0].parentNode.removeChild(elementsToRemove[0]); - } -} - -function cleanMainVideo() { - $('#main-video video').get(0).srcObject = null; - $('#main-video p').each(function () { - $(this).html(''); - }); -} - -function addClickListener(videoElement, clientData, serverData) { - videoElement.addEventListener('click', function () { - var mainVideo = $('#main-video video').get(0); - if (mainVideo.srcObject !== videoElement.srcObject) { - $('#main-video').fadeOut('fast', () => { - $('#main-video p.nickname').html(clientData); - $('#main-video p.participantName').html(serverData); - mainVideo.srcObject = videoElement.srcObject; - $('#main-video').fadeIn('fast'); - }); - } - }); -} - -function initMainVideo(videoElement, participantName, nickname) { - $('#main-video video').get(0).srcObject = videoElement.srcObject; - $('#main-video p.nickname').html(nickname); - $('#main-video p.participantName').html(participantName); -} - -function initMainVideoThumbnail() { - $('#main-video video').css( - 'background', - "url('images/subscriber-msg.jpg') round" - ); -} - -function cleanRoomView() { - removeAllUserData(); - cleanMainVideo(); - $('#main-video video').css('background', ''); -} - -/* APPLICATION BROWSER METHODS */ diff --git a/advanced-features/openvidu-roles-java/src/main/resources/static/images/favicon.ico b/advanced-features/openvidu-roles-java/src/main/resources/static/images/favicon.ico deleted file mode 100644 index 0e2249ada68ec5cab2034721dc193285c27175b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5430 zcmc&&eN2^Q6o2ox;0z74F{f9TU#+!9X2#sY&6#cG+%jk7$GvdHRGeG+hii#qr9`BK zC}qeHvGgi7)2x{@AZJeQ2i$vM6vot;IU_|SM7+HB^gGY{zHsji5d!CRKhN_%yyy9y z=RD^*=iDnvI!P}LA1>iDPFi7n3LB+bNp^oNLalA8=H z`-6iYNhVd-0{wN8JM*q}0bsYHpWyM3&HpH+LU-f&>6Fv>650J0N)zjuDZSc6C3#&o z_*8vxN9x<4|6}uZ>X2_!&8_cgL&Ni8P1fJjXZ?H%g+e5UI_YNcD%N;b@b^{!L~|as zb>5(}El$d8mIy_@DizA(Ef{Umop0o%=3L z^zNk@HLHP)NK~()6z}r(9R;IG5d)tho~Gi=Phk!9{FF1`IJgHmKAUu|POBE<&`n0{ z`~Z38{s^(X>5?n*o?(vf0mpJ*5OLQf2{sP^oM*-XGXX8nWQp8_iLj5h--j)QuU!4l zcm1^+@nJ!H#Q|OZ7U$!lB*+;+9Dv+6c(yQ?ig?KRuwfJA2(}$O93#xR6=(vGv*`&y z~xQi3P znSt>+$PP%p-|K*(fL5#6->6em58#f9dwT`8?80~sWW3~-#d&2N8zSU^9Ld0NMuE9` zU0^h@05}9(1DKb=<5>W|Bh~^3^C#l|mcS33GlBq1_=8XjLYX?ZoD}Q18pHgh+Z66- ze$}R7*k=mX&IQf`8gEb?pMo3@gvTHA^LejSIn_MHHi(?nVsPI+KE`|0k$G@(@{ufk za@hw`GHPh@;V|Gi<mXv<+e z?JUxZx*lZ%pG7N>0j{Tk)4)w2h#25=kKmu+-A8Zu9~bq?9x%)HTCzBv z<}(v)1WdH7#zYzCO!UcqJ;5j8e$dXO7+miGTFj}u8oyGnCVO|&BL7&yuk%i zsKG{Z1cr3|jsG4FTb-HKRv4)`Ul+lTz4KX=g1b=NZ`i&g`KPG-4s~s=+cv*}R@5fY z^4bx!s75b1H9NxVI(!8m80m{I2Zui`V8NdClu`E>xo&(z{#z#~@8WCVA4-dTdicT8 z z^&i{7;OFL!i&WH<-o?MF$|U?hxcu7wWwjTU;e#OEk^iAfw|%th58DIf&uq~6m3`ll z+vv~sU(ws|L~J~V80GI655oUS{H_4L!-1#x4w~zmNelgx=yl(OK4W2E0;N`2gZaB-FQW#Z2Y(}YtARXVOz-?$ zhq`ST!m( zi)i-rQ~rkcXLa|*I`Mr#?Y$f-H}m%b?o0kRPC_@yT2a&0b85DL6Me7fyL#Eb=7)Yt z<+qnctna`%57RiqCFc1ItiTf3xEV5c5b-Y7nuT@a!Z~{y<30WkGz^lziwzJVMc>6e TedKQfJ#jzGxv-xC9?I}vocwV} diff --git a/advanced-features/openvidu-roles-java/src/main/resources/static/images/openvidu_globe_bg_transp_cropped.png b/advanced-features/openvidu-roles-java/src/main/resources/static/images/openvidu_globe_bg_transp_cropped.png deleted file mode 100644 index e0309e62181608cf3543664ced79b6355779533b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11746 zcma)ibyOTr@aN+0wh&yGKyVB0?he5v!C45hxclM+cL){&!NOue7Iz2|0wKTx!Gb#k zZoj|#>+ZdK@7~Px%yd_ENq@F#Uri_IYO4_7(%=FB00K2tMSTDOg#h{d7aJ4Veq>^l zM&8ih$!W;}08OcQkG2@dcSd_veJubWkR1RBj|KqlkzL_?0Dvza0B~Rf0Ep)T094?@ zPCZHF0H&RWiX!0ozoWFLIuqH016DPA4*+lx|97F7e;>d>c4GOcX(?fCVgYf1f|ztY zp#T7Py_%w&A>`-ZqJY9mBj20eKhj2vt4A;30(^XEiQ#VWts2llsoFxcBj)y^Vy4rA zV#R4hUWAFFq6kH@1~UzGmq3nE3-uU#oK!a#1qB65j*>2GrM=kdAmBLQ8Fo`!cT8rTxekMFo?=SC=Sk08;clj*4U($5u3Id7`2|X;2We zCR!Dmr7VgQOR%PSDnbC7!}x<_)0JTs?UJz`B{cP1;@(svu^LS^+{T|(HdbYyW9?!j zy!FQ~@yhRu6w!EQfO`^hEQq>Z>IY`(IMfkRXqO293-BF#%La&`AacW^$D&ufeGSG_ zDlUJKi|UhE3gR(mpx@4Il0KTVZ%1mj{o8Oo4^T{)MXr)(f)a-Ehy&*9U;43M#W+6E zw~TM!nx5a7Qk0rtwPCeE6Ya@TA9wp@k|A@>BOSv&M7+Yk--`4fh7p#01&|d|S_Cx+ zCjvCmw@z_?vp=U_L6r+AszJ5M) zGOQ0+&Jw2t8>Hh75LO-AdQEyE5(&D~4`d-y{R6}T8$Er?wJ&Qsm}BKM0eD+Yh0HmK z(+^{jVeZnKKWc-@xyBH~9T~;=!38c~zSrZyf$^ln>L@V4PNwQk#H!)4)y;Bd+|87iR|#g0VVz#Mn&9|>Gp->rof0P#0PVkkZtJ{-dD!Z7d* z1vA>xEa^3vjjn9q6Qfwl@iho(H#BT3M2{-dUkc$PhP-5Pk5DX9uq4&fs{*zOB?&O* z)pg&AeDSFcdj}j&(qn|3b0Ea1zFvPbv zG*w6GPuG(LL9aIPOX@J1(!U%jkDY2_u9Jn?dnDK%N#7|BcvTkCwA9hHKx&Z@nLZF<-y+F91yrMN_i zbiE8t2I~h*X~!`iDdqClN;$*%{1})9(KVvc)d0)n*~*&YV;Ea)eXNth{LsL()G{)) z@RZ?H7xWv4o$yQvp3p0WAH}vnv@wQZm9oiFDq_VGnnO6vF-|~qh1xz~u ztnET-Fr~K)pt4C&;k~Q;R_$MfJvlp|^1o5bEJhmjrBT1`B#!jw0ut*+5l%k*3M_${3!~8EA+)i;2|2_5wp@nt2|sXY&4_J) zn*a`conabSUgpJn)?y31s^Fv_W+#ocJ)&f%`M+B&-KJSSnm8?IDuXKj_Y$tvuF{)DuIa0AJ4M^O+&30nl@;7g7rQF*}0J!(AjfgX7R9c5ssFe?iG z91uw+!kX*Tn5+&i4RuQy_E;{-O^GDq#xvu?@@vN^DYf-OyD`Rx2j;cIx919?aU~s60ftr038b7c8`Zm>E-8hjOY)`WkJ^l5 zHV6mU#gEfyV1R&);3@Gb-UcP@vqtaryk(@CBh|~?s^V6LpItU9Tb44yWXb6xCgOUW zZ$RGe0wvGji;j^g=1fv2%7=Xr&(kNnP<0mlJ9Odr*xy2C566MNB9Z0kq9uMuk5vIQ zFp|Z_C`semaBn$O;_L7-+Ba&IJbMhSKr`Slv&kr#ln-Y}i&V=P=Zm6s^NZ|$SKxMQv zypgjsOPV)r*wO?zABA(B7Se+kM>}E=rV3QSVO7LGV{?DX&-cQ@NU`q7atBgy%_q9qA7GB z|4n;aCiBid1Qe@BN&W1@yntYR@^E4j!vJ2pZAq*^1F zUFHChG!OWdy+z%Y`*ChS^|5j0raWI?ReUea4x(ic7{com``*2^gSpOyLYIIn*;t8K zvbg!gUha=vA^(nP%Dz~5Poe?mhG~hrz0q$5Sj&UgxArT!(B&HyQj^MUb%>EG*5W{} zQ!683Sv_Y_!ywgl0M$v+wK%4UTJ8jX%0cc#o`KcSaD9QR$S?T2rKj+B_r?Zbx-5%` z$-xS?rd;JDCT!|rKa=g@f6|i=)kX1u+Iw|wmgk(I) z5{(oYF8wPV6o6ClBUGydS`$E4eh zNtrUsL^shhr$9|1^LRt41lK>e)3Y_^4o>jEaL7j9oBXkyn|lr8$!GL1QN&aht8Gvx z0S0N)oBEY6I;~2?eHA{PBGr(%c#Y#E; zVroj}<2U)5B=4=58IUcISc&E<&8`@ffW z(uKJYsEVc#l)u7QvJksk+p5nJt8k?4Av6~*aZ@dNSY`d7B{@vZPBWaF*_bu8V2~Cq zSVcP`bs;@0x*MDpwfe_!kcIyYNR{gZM4&S1JmPN6v12^B9JsXlpwdWbuu73LE(4uv zuCucJB-4NmrC`64UOR1POeFmDwX`IasmTcJEd)&^**pBE^Uo;%0|V7b0DDW4K{>?1 z_;pAY-y9!JWd9cbtNpD^9pIxb$j_PO##-=rhc{ZQWc(*EA*0po8kQy@C2)^KR9aUs)hJp&=DEB=;?uwB6F%1}1ogQ0JBe>Jn{x%myAK$#G$bY}=`_8?0Uw>6n_ zdRfPY9kt^nzdQkRT^|v1AD921fmtVY?+F%zneED`!|Q)R(}jVkQnffE;HFRSgoG2s zBoh^Gf3BZw{%FXV%Z%B%8J_*Z^-f5NkjY4=+7*$plH`@Kab_Q4N|1y!j+DGy<2)7z z>*AmxYVYQs2!(_qa+$N4j8Yl7j|z#JwBwo{ei#XwV5BYz3KfPG7|NkZBbEBb~W!{P-*H13xXUeFz{{&y)Q0 zfP@4$18hBG(0%A{ZEJMmBA$_=-b-Qcgp{PEL^;GvqSAhXcz+l=_|es)T;)NF?;skf zDEUI7l9^z`%Hw&ed8!HUIbMti!E31#hbNMK%@;GBvf<6+)p+DvoOj zF?!>w{~z9CS&1BWEq6Uno`g#*-jlVvhXBK`E6EI}I)TW13XNsHELc{zzQYPE-rQ;v z_4>X`QJFu#D~>6YBXW?66i*CFG#N_R086glsPMdbkZSnlBii#VPGnha?!)Lp=8Dfj zyj{61)YS#4|H#3)vUJxmmPOB|-`C1FAhseOR!ceVg+V(Zq>G2yqK523z9#cFKI2$h zJ(De6Hdg2Q%F4viO>`nH6Kh$}0QBeFl9cI_corRR4iCmfC!k-pNno^=}X8mlgp1V1#C4FiU zDe_b<*+Z~?ML4pU^2dCw`L9W^_mtLJ$6r14GO7J$izKi3gjoIq^d?=_UGqn~hs^(m zAHj!c4hPQubm8XdgVkRyO1;&ZX<==c@_v;MK&CD^oDiA7*2$Kg zt4Xe@#HpwQmKSXul#Wv{kBbnCZ`Ti!uz#Yg4TdCmE!;E=NcwWdl)w8Tp(_{M9Da1r zI>I-C@?I}$x6L0Rt8k0fUG^vc)e13Mx)_}7+(iduA}6j37yH(GB_}P8m|}(RIp%Y` z?Eq2w`!sHC35$9iF2$WexFWv~{zpk&oZP!tc5KhT{mo!*1$9?gi#;`D9yprzt6SvL+MO+`& zB9P0NnN~`Ia#H%{zN$FPew8Kow8OL9$rKdJVU()E^*rE8ooF0cIP*c&Yl-106GO+M zulI8=1=0TibF$M3XHv>pZs0yeyTK~##Y~RqMMuy2*yB96VWgNLiJ^S`rT-4We{gc>Z+g_#_@HgnMmVm0m}nU)+O=DS4u?DYGVQ-6Pb zx;4A8cYEpib>F}qYYtfSXlHM+apnWl?rbaZtndBc>2^!)-cVG|3dypv9)7SQPDn7b zWT(W$FtTyndFNXF%gzBpO8apwu9Vds>`3uw)+aPo`$_qNy($L5*4Ov}qBRFW#|=N|=F6R?WGbd1%j5%_R$K4jdEe)gRE>811K`QPFRi)n9&w|HZeSXq+z}^8+JI0Y}_QCMHqj zfQ_i)4}fHG$+0Ozp{)=GYNzc>2Q{*U*yv{5rVRuy;)Le+odC2+nfyNK)>p7kcq9$C z+>4y?gFf!fZneY`);l0UGA=81X83GjQ8mI%RL>gBUX+n%s&ZLsL zO2Ly7?usZ8IWKav(N~JGppC={>HP&vyN<%-a6BkFoPA_ zhcFJ`_6I!HMcK)lz-9dLATbLjzsLXqY_nM59B6^J;$W(NA?g(o1cCa~(HCoess=_J=usBY%XiENv#06x2{C)4mE1Z zu4D*cr?bF{LR{=h#%?bE7#LMs7RxbuTo1j#4yBlp{04<#j2CCO4qtX_C-yT#T7il_K!jXIP4kz zri6@Yn!F*T0A59yTBCT#jG@;&LR9(K+bG|z?N;3Pj!`Ck@q-DE`T3SM ztO0oXR)siGA-oZ#kr_&2eesYDXA#Q^TI1FRefylT=O{$oK^#BajW^pSsA@tN-;hVK z^g$>T-@cF9;Pa;omks(pz3d#GWD6Er01h=Zj?#u_cq&Se9zn*gF;45~k$tFRkeXPx z4{quN`A;=2%J{j`1;WrdMr<`qXB11BqNCb>r(wASd9EUd<=z0$20~u+laR`~vzD1tD+GvcpLBkp@+BV^BbUSvja_!{el8v3!9xl22eFhPrQweyC zSHAc)$r3*-Ax4G65UXu2+pay>n3oXdq2q&CV5E#`HN!xw!|aoC@L*ZT`Pe+bWSb70l`lVkzPm2hw589Z|r@@>B9Mo z*JJr?CZ*rDmsw{%>Y|jO^Q+?RU2FRsqWgR&f4r~VTf))hiRsl60KHxOq5MAMw@`Zq zL^T-oFDL%ySR+@&)2#ykuz)1B()oTgk7OKLBU%dUpzJQ7NT>#MH1C^G{aiiNeu~!4 zKzEsHxvp&S5bjii&^62c)hc@1uxS~ubPFPOX2Mo94__B)ZG5$D;^QAn&*se3JrV#m zYs-LK;3{b^9#X!hh0qQ)xi!Vvt|@g!ZiJJMQ7uZKE7|>P^s^EFl8-u09vz~0-N#Sh zD4>h_6I*_sfEKH}VmJInBDZ$W`quSsu)1Ws|P(B_{#ea5vObIIJ*~KD{UFKohz*g?G6(z3b-TuBT9cDGHjFab0xl^l{e55Ie#Z=ixiTffm zOq)q$3!$F#9q|dl$jCS7O44hUzdm6(v?9quw#P_kCd%foRH(8%$@=eV0txH^*N>qu z0KCdPUzK0oDLfR!chU8yR~6g&nlAlI;2AkS%^^TsIHK1(3nzb;NV{9 zhAQQHI*;aMQZbk4-Nj69g$ym9rX9(phvLpzt~j366jAISE(QOpb0SPldmPkAGh?o5Zgl zHNSoD-=F^+#+^i`XQ_-3{@~gS4={1T2Z1CxEFW_UCWtaaZaWHwFn^wsqX>*z$mypa zYd3Qc_Q^<8FHzKL!99N-DqS(nPyP|Ja5+KyHFijhAJxBns<-h8a)V=#GinKzlEBXdaSiEy#~;j|P(&?D-rAj;3arSi zw2ZjB9*6!C`Km3JWfve){K)i z7Ncjq&|#_NaE>aL27Sm#Gc}u^mHNyuEfJFAC)ru<#T$^{fl7y+3V8S~pFPYd@Di_S z=T15U?_0t2-F=w$PnKU_RC>D_-OH~ve=7;4*3DHBCKf`@u9whmS z+S0N3D@B75_F9Ytf;XHCTlkGjqvfZJH@nstPlV~{CxV?1j0U;VW~vYGy$F(o4HXLE zLuFqrHwM@ge%|dR4)Olrnp9-FAG?SM%Gp+lxdXd71n@5?4UoVh# zP}6@JTWPAQFeT@fE5C~dQ*7@wNpE|N?=1HVX4)7NwdT;N zf~IiEB8+{Jb|0c_g6xx#seYAh^zWQy$)gkl@>T_S#Jk4nt3^#yLg$sxii z5?pzRVtfV%!xX`Oh+cLv;e$H?+smGtnqhXUh5}6KC5G zgC`B+h8cl8W3s)?>@Jf~%W6c!?Oku;Par;+?)n#Dn_7M7bz0f^5kI@1&`l%G0|nNj z&Mhp=NzXenPN}>nQ+9}wEp1jLCUYNqjs>D&m?w@Uit z$ZAMU%aISLKBkgrFd&0ffvtanQoxdO!b-FNY2KzN;}|(B4jr*Q$$I+QW<2qGLDuWg zS0v^lDYv02;Yb6Wrt0I<%DjvnZ!* zbhXRH+t;wm^$ru=0MeS{@&d4Oy2X05!F6x6Bledlan{AdbcROEQYgN_ij(I4{4 z$IXwq!^kk;)s5XsAf!OT)8nP+Z|r}WL%jTx02#Ya8pdo)whKUU6~XDKoNAi0FE_ko zd)b_lgR+ZI{uJUmV>-(?WpARBYW-+^vPCZI`=~DNJB8a)u&6p@>W0WZlXr5IU}I63 zBh!mGjp*~4i{sH61<87HQnG#P?%S6msegp+Lw*eNv|P5P(JG_9|H}3JPjNVFf6j64 z5KOC9vpVO*qv6r7@E5+4tZ89ChzYj9E#cLDz}iSMtd1Lg(KfNPj7F7yMiCuq5q!Qq zhAaV5YV}hr$EBR{@bu3F>(@GFjM|o#FyZ$pn}wDzAfz<+0)<0D)bnwj%L~I?Ed7O; zvz5v5Yw{sUv0p!u{E4wh=S>^*NHh!nnaeeAQP{<5O24i^`Ob{C-_h)OWUm>Fd5WLB z*}NU;C$!p0R9+Z++80m_{gHBzxUN!zk*|Zn*^61l7n;%OmtE>hnIeJRL20`Zs3kiY zS*QhlY2k;asSi8mx&6Kz`ykJX#$FLfe`-4%W@qX#7M5$XLbbi^U*1%GUisLBLMh=Gv;}_vQ{7)|RXzCK3%wTkCYgxM-Me7#h$`SO69n(;A zC(^8YQ(-8+Bur@Yh9YN&4r-ml#xTPX9UREO{m}YNaMagCt*0co&dAFr{S5Sl*Zxob z(Ox31eUCdTC>jja#^=xlMIxEY29J6MOlk9R@ytRQ_b$q<+=F?%PV=n2KPYrdega^Dd`WMd!^<$$ut;dB$ zQ;D<@gx*T$ZOpl*K;FLd?;C|fy4TSHXUGtn!B+nOhjUv7lOiS@#|&uJ6`9Gv5b!|f zzVE7>Wyw<$r4vYkh5WQ0-D+$PL(bnvDXT@#LuISk7x}-jETfBCiU?k<9j7C;I}oyi z;7*cYxFtr6I0gtVlHVQ0boQO_TuGH#g`27|zc4)Y*S&)M(KQm^c?l&ENyULlvlP*%Zjp1M=5aARMJdcnb|(OaO$BO!jH zq5F?=JiV`)`d=IOU2YJ@7U3su8?NgGUj$s)6OEmO>@E*aQr^i%kksIF8;<#l@TBmt zvir^GAIfVjW|YJ6@At15&0i%{kdnc5NeR(i89lT69q3bYh5ZToEhTfsPV=_?17!62-RcP-IvG9_T9ZUk%EdUX4dQ#n zqg$XBVv%WX;y?z*IaP{YS0`g;DBz%SR~`habeB#rtCv?GLx8K^6XESkU0GJg{nNmn zr4cE;x)%2F!urc^efE3ca#f^dCCVj4opWr@5JQ9v2?BpDolrn*@ena$FY%{gm_J?KXTCy5Jy0qJFd}B^6333k!Wj_3u<%9y`(N? zeMBNFJGnBN_gylRJ1Pz{s@fNTF1S(gvSne}aqQL8_i#@%oQ5>7Phf5ihgvslWuk~=EMvjX$3S_||?tQyQ`jO551LEOkDioR91T@;~JS&^Ha1iSB0O7`|iY z0q1WvBZY7#`1^4PUTJgXf7M09A1X2gka`x z__B6x8Q~GhtmjNm$B`hClC6c1s zn7tl$6M4bk18N=z`DcO(=NTiGHWaS)>)vbykx9-I{CY8N22JU9wOZ^>!;;hmYNkwLQGJA`i zV)*@bto3`%okh!|cDA1u^$A`gb;r*qJnbnNb?P08+no~eLH>hF+Ito-&OlE1`VUDn z`x%^xc0T-YE{_@>u)nI){FcI*zE+CzEw^pq-*IjY>8Sa*Q}wJ7l#ymOg>${wlj2Eq zTu>1W8T}ZMa6V7rPjLGm$DWfJE)hE{mh)Ik~Thb0Jj5JUhmG=nD z&@F^zR9+DD1u^l=Sz8=>(Pu+!3q zV`!OOhz~-MsT?iQCARH)IT2_4)EIgtWUQZTf$qvY({wu5jLkGHAFRMIIxyF>i~QDS z;YW8XmNpo-giF@`E?(@b&m#qx{|nV!-50)>VaccO7<-i#H}z*a-Vr+AT%81+^MQe< z(i=TTPN0AS5`L)d`$eNKp){9}J@p7XQt|!-ESXF`RBN*5d+n@Gx=SOqYhNz?R%VU6 zQmV7Pk(=XqOe}~F>=)$G2O}IlK(St-pD5uB#auw^G&j5X{dDl*Kn0!-!VFk3+eMj& zM{U+7#k_aqZeAs6A``Df$Y__q93S-URx_+hG5)i~n8|lcgnfMfjQNv{!Lr~eZ7F>$ zaw{{NkCLg6gRPIFxV^U{@&*v#;}?C!C;Cc2$dI2;TtG-%nEw@@kT@S7PkZn8|AWEZ z)4};|!2g@U`T)xl$w2*|1Ov~vKK{1ejsSmue;#KK*Z20eU`HNL?{@{qk~BynfSQuF KVuQR*wOeuWT3;&BESMc5c{Qzs4Eae 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
6<-acu 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 NQp-@YMBO3!e*nzNs#O30 diff --git a/advanced-features/openvidu-roles-java/src/main/resources/static/images/subscriber-msg.jpg b/advanced-features/openvidu-roles-java/src/main/resources/static/images/subscriber-msg.jpg deleted file mode 100644 index 1666fb4099a9236147861e734e61869e37267767..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82734 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 pgR(+GNPdoX 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 G?f(Kus+KSS diff --git a/advanced-features/openvidu-roles-java/src/main/resources/static/index.html b/advanced-features/openvidu-roles-java/src/main/resources/static/index.html deleted file mode 100644 index b1520ef7..00000000 --- a/advanced-features/openvidu-roles-java/src/main/resources/static/index.html +++ /dev/null @@ -1,210 +0,0 @@ - - - openvidu-roles-node - - - - - - - - - - - - - - - - - - - - -
-
-
- -
-
-

- -

-

- -

-

- -

-
- - - - - - - - - - - - - - - - - - - - - -
UserPassword - Role -
publisher1passPUBLISHER
publisher2passPUBLISHER
subscriberpassSUBSCRIBER
-
- - -
- -
-
-
OpenVidu © 2023
- -
-
- - diff --git a/advanced-features/openvidu-roles-java/src/main/resources/static/style.css b/advanced-features/openvidu-roles-java/src/main/resources/static/style.css deleted file mode 100644 index df8d5c94..00000000 --- a/advanced-features/openvidu-roles-java/src/main/resources/static/style.css +++ /dev/null @@ -1,382 +0,0 @@ -html { - position: relative; - min-height: 100%; -} - -nav { - height: 50px; - width: 100%; - z-index: 1; - background-color: #4d4d4d !important; - border-color: #4d4d4d !important; - border-top-right-radius: 0 !important; - border-top-left-radius: 0 !important; -} - -.navbar { - margin-bottom: 0px !important; -} - -.navbar-header { - width: 100%; -} - -.nav-icon { - padding: 5px 15px 5px 15px; - float: right; -} - -nav a { - color: #ccc !important; -} - -nav i.fa { - font-size: 40px; - color: #ccc; -} - -nav a:hover { - color: #a9a9a9 !important; -} - -nav i.fa:hover { - color: #a9a9a9; -} - -#main-container { - padding-bottom: 80px; - display: contents; -} - -.vertical-center { - width: -webkit-fit-content; - width: fit-content; - margin: auto; -} - -.vertical-center#not-logged form { - width: -moz-fit-content; - margin: auto; -} - -.vertical-center#not-logged table { - width: -moz-fit-content; - margin: auto; -} - -.vertical-center table { - margin-top: 3em !important; -} - -.horizontal-center { - margin: 0 auto; -} - -.form-control { - color: #0088aa; - font-weight: bold; -} - -.form-control:focus { - border-color: #0088aa; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(0, 136, 170, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(0, 136, 170, 0.6); -} - -input.btn { - font-weight: bold; -} - -.btn { - font-weight: bold !important; -} - -.btn-success { - background-color: #06d362 !important; - border-color: #06d362; -} - -.btn-success:hover { - background-color: #1abd61 !important; - border-color: #1abd61; -} - -.btn-info { - background-color: #0088aa !important; - border-color: #0088aa; -} - -.btn-info:hover { - background-color: #00708c !important; - border-color: #00708c; -} - -.btn-warning { - background-color: #ffcc00 !important; - border-color: #ffcc00; - color: #4d4d4d; -} - -.btn-warning:hover { - background-color: #eabb3a !important; - border-color: #eabb3a; - color: #4d4d4d; -} - -.btn-warning:active { - color: #4d4d4d; -} - -.btn-warning:focus { - color: #4d4d4d; -} - -.btn-warning:active:focus { - color: #4d4d4d; -} - -.footer { - position: absolute; - bottom: 0; - width: 100%; - height: 60px; - background-color: #4d4d4d; -} - -.footer .text-muted { - margin: 20px 0; - float: left; - color: #ccc; -} - -.openvidu-logo { - height: 35px; - float: right; - margin: 12px 0; - -webkit-transition: all 0.1s ease-in-out; - -moz-transition: all 0.1s ease-in-out; - -o-transition: all 0.1s ease-in-out; - transition: all 0.1s ease-in-out; -} - -.openvidu-logo:hover { - -webkit-filter: grayscale(0.5); - filter: grayscale(0.5); -} - -.demo-logo { - margin: 0; - height: 22px; - float: left; - padding-right: 8px; -} - -a:hover .demo-logo { - -webkit-filter: brightness(0.7); - filter: brightness(0.7); -} - -#join { - padding-top: 40px; -} - -#not-logged { - padding-top: 40px; -} - -#join-dialog h1 { - color: #4d4d4d; - font-weight: bold; - text-align: center; -} - -#join-dialog label { - color: #0088aa; -} - -#join-dialog input.btn { - margin-top: 15px; -} - -#join-dialog hr { - background: #4d4d4d; -} - -#img-div { - text-align: center; - padding-bottom: 3em; -} - -#img-div img { - height: 15%; -} - -#logged { - width: 100%; -} - -#join { - max-width: 700px; - margin: auto; -} - -#room-header { - margin-bottom: 20px; -} - -#room-header form { - display: inline; -} - -#room-title { - display: inline-block; -} - -#buttonLeaveRoom { - float: right; - margin-top: 20px; -} - -#video-container video { - position: relative; - float: left; - width: 50%; - cursor: pointer; -} - -#video-container div { - float: left; - width: 50%; - position: relative; - margin-left: -50%; -} - -#video-container p { - display: inline-block; - background: #f8f8f8; - padding-left: 5px; - padding-right: 5px; - color: #777777; - font-weight: bold; - border-bottom-right-radius: 4px; -} - -#video-container p.nickname { - float: right; - border-bottom-left-radius: 4px; - border-bottom-right-radius: 0px; - font-weight: lighter; - font-size: 12px; - background: #777777; - color: #f8f8f8; -} - -video { - width: 100%; - height: auto; -} - -#main-video p { - position: absolute; - display: inline-block; - background: #f8f8f8; - padding-left: 5px; - padding-right: 5px; - font-size: 22px; - color: #777777; - font-weight: bold; - border-bottom-right-radius: 4px; -} - -#main-video p.nickname { - position: absolute; - right: 0; - font-size: 16px !important; - margin-right: 15px; - border-bottom-left-radius: 4px; - border-bottom-right-radius: 0px; - font-weight: lighter; - font-size: 12px; - background: #777777; - color: #f8f8f8; -} - - -#room img { - width: 100%; - height: auto; - display: inline-block; - object-fit: contain; - vertical-align: baseline; -} - -#room #video-container img { - position: relative; - float: left; - width: 50%; - cursor: pointer; - object-fit: cover; - height: 180px; -} - -table i { - cursor: pointer; - margin-left: 1em; -} - -#tooltip-div { - text-align: left; -} - -#tooltip-div hr { - margin: 5px 0; -} - -#login-info { - text-align: right; -} - -#login-info form { - display: inline; -} - -#login-info div { - display: inline; - margin-right: 1em; -} - -#name-user { - font-weight: bold; -} - - -/* xs ans md screen resolutions*/ - -@media screen and (max-width: 991px) { - #join { - padding-top: inherit; - } - - #not-logged { - padding-top: inherit; - } - .container .navbar-header { - margin-right: 0 !important; - margin-left: 0 !important; - } - .nav-icon { - padding: 9px 8px 9px 8px; - } - nav i.fa { - font-size: 32px; - } - .vertical-center { - padding-top: 10px; - } - #img-div { - padding-bottom: 1em; - } - #img-div img { - height: 10%; - } -} \ No newline at end of file diff --git a/advanced-features/openvidu-roles-java/src/test/java/io/openvidu/js/java/test/AppTest.java b/advanced-features/openvidu-roles-java/src/test/java/io/openvidu/js/java/test/AppTest.java deleted file mode 100644 index 0ba99ec8..00000000 --- a/advanced-features/openvidu-roles-java/src/test/java/io/openvidu/js/java/test/AppTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package io.openvidu.js.java.test; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; - -/** - * Unit test for simple App. - */ -public class AppTest - extends TestCase -{ - /** - * Create the test case - * - * @param testName name of the test case - */ - public AppTest( String testName ) - { - super( testName ); - } - - /** - * @return the suite of tests being tested - */ - public static Test suite() - { - return new TestSuite( AppTest.class ); - } - - /** - * Rigourous Test :-) - */ - public void testApp() - { - assertTrue( true ); - } -} diff --git a/advanced-features/openvidu-roles-node/.gitignore b/advanced-features/openvidu-roles-node/.gitignore deleted file mode 100644 index dbe3e1ad..00000000 --- a/advanced-features/openvidu-roles-node/.gitignore +++ /dev/null @@ -1,60 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Typescript v1 declaration files -typings/ - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env - -.vscode/ diff --git a/advanced-features/openvidu-roles-node/LICENSE b/advanced-features/openvidu-roles-node/LICENSE deleted file mode 100644 index 8dada3ed..00000000 --- a/advanced-features/openvidu-roles-node/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/advanced-features/openvidu-roles-node/README.md b/advanced-features/openvidu-roles-node/README.md deleted file mode 100644 index 8e57e05c..00000000 --- a/advanced-features/openvidu-roles-node/README.md +++ /dev/null @@ -1,14 +0,0 @@ -[![License badge](https://img.shields.io/badge/license-Apache2-orange.svg)](http://www.apache.org/licenses/LICENSE-2.0) -[![OpenVidu Tests](https://github.com/OpenVidu/openvidu/actions/workflows/openvidu-ce-test.yml/badge.svg)](https://github.com/OpenVidu/openvidu/actions/workflows/openvidu-ce-test.yml) -[![Documentation Status](https://readthedocs.org/projects/openvidu/badge/?version=stable)](https://docs.openvidu.io/en/stable/?badge=stable) -[![Docker badge](https://img.shields.io/docker/pulls/openvidu/openvidu-server-kms.svg)](https://hub.docker.com/r/openvidu/openvidu-server-kms) -[![Support badge](https://img.shields.io/badge/support-sof-yellowgreen.svg)](https://openvidu.discourse.group/) - -[![][OpenViduLogo]](http://openvidu.io) - -openvidu-roles-node -=== - -Visit [docs.openvidu.io/en/stable/tutorials/openvidu-roles-node/](http://docs.openvidu.io/en/stable/tutorials/openvidu-roles-node/) - -[OpenViduLogo]: https://secure.gravatar.com/avatar/5daba1d43042f2e4e85849733c8e5702?s=120 \ No newline at end of file diff --git a/advanced-features/openvidu-roles-node/docker/Dockerfile b/advanced-features/openvidu-roles-node/docker/Dockerfile deleted file mode 100644 index bed26f62..00000000 --- a/advanced-features/openvidu-roles-node/docker/Dockerfile +++ /dev/null @@ -1,13 +0,0 @@ -FROM node:16-alpine3.16 - -# Copy openvidu-roles-node -COPY . /opt/openvidu-roles-node - -# Install openvidu-roles-node dependencies -RUN npm --prefix /opt/openvidu-roles-node install - -WORKDIR /opt/openvidu-roles-node - -COPY docker/entrypoint.sh . - -ENTRYPOINT [ "./entrypoint.sh" ] \ No newline at end of file diff --git a/advanced-features/openvidu-roles-node/docker/create_image.sh b/advanced-features/openvidu-roles-node/docker/create_image.sh deleted file mode 100644 index c203bd6b..00000000 --- a/advanced-features/openvidu-roles-node/docker/create_image.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -if [ $# -eq 0 ]; then - echo "No version argument provided. Usage: \"./create_image.sh \"" - exit 1 -fi - -pushd ../ -docker build --pull --no-cache --rm=true -f docker/Dockerfile -t "$1" . diff --git a/advanced-features/openvidu-roles-node/docker/entrypoint.sh b/advanced-features/openvidu-roles-node/docker/entrypoint.sh deleted file mode 100644 index b7163954..00000000 --- a/advanced-features/openvidu-roles-node/docker/entrypoint.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -exec node server.js "$*" \ No newline at end of file diff --git a/advanced-features/openvidu-roles-node/nginx.conf b/advanced-features/openvidu-roles-node/nginx.conf deleted file mode 100644 index 500c543d..00000000 --- a/advanced-features/openvidu-roles-node/nginx.conf +++ /dev/null @@ -1,44 +0,0 @@ -events { - worker_connections 512; -} -http { - upstream openvidu-deployment { - server host.docker.internal:4443; - } - upstream client-application { - server host.docker.internal:5000; - } - server { - listen 443 ssl; - ssl_certificate /etc/nginx/certs/cert.pem; - ssl_certificate_key /etc/nginx/certs/key.pem; - - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Forwarded-Proto https; - proxy_headers_hash_bucket_size 512; - proxy_redirect off; - - # Websockets - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - - # OpenVidu deployment API - location /openvidu/api { - proxy_pass http://openvidu-deployment; - } - - # OpenVidu WebSocket - location ~ /openvidu$ { - proxy_pass http://openvidu-deployment; - } - - # Client application requests - location / { - proxy_pass https://client-application; - } - } -} \ No newline at end of file diff --git a/advanced-features/openvidu-roles-node/openviducert.pem b/advanced-features/openvidu-roles-node/openviducert.pem deleted file mode 100644 index 545ccee2..00000000 --- a/advanced-features/openvidu-roles-node/openviducert.pem +++ /dev/null @@ -1,21 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDgzCCAmugAwIBAgIJALDBPXTrlAhlMA0GCSqGSIb3DQEBCwUAMFgxCzAJBgNV -BAYTAkVTMRMwEQYDVQQIDApTb21lLVN0YXRlMREwDwYDVQQKDAhPcGVuVmlkdTEh -MB8GCSqGSIb3DQEJARYSb3BlbnZpZHVAZ21haWwuY29tMB4XDTE3MDUzMDE1MjQx -N1oXDTI3MDUyODE1MjQxN1owWDELMAkGA1UEBhMCRVMxEzARBgNVBAgMClNvbWUt -U3RhdGUxETAPBgNVBAoMCE9wZW5WaWR1MSEwHwYJKoZIhvcNAQkBFhJvcGVudmlk -dUBnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDDbK/i -LN80IBnGUbzA4AFl4KQEX6RCreythnfOSnIcQSTP+KjesZMFgsGV0LteDxeCJ+kq -4YoS+CW7ojvOEz3xjCgo4tFdevz8ZoeO0RBQIbARbPako4OXC6vWs6LHwCR0aDWo -9HfS1Uusb8g77csRPRlNA3DGR8dcRTiEBdfHS6Jh/7V7XiDlaxPXj+iIY8PyCqOf -gv4clDt17R+dendDsgYxbmZaodrppNocMQIyUaDIwI4DZOa8nQYk9uuUhkiAFAQB -O642bx6NI0qDu5KgtMmbaS6s+rMnrL8eeZOicqff6XoC6tk6GE8Fo4iYkxp2gAiT -sigaSwpNRWhupISVAgMBAAGjUDBOMB0GA1UdDgQWBBTi3sXqpf42vUNehFU6y4Pn -PTJFRDAfBgNVHSMEGDAWgBTi3sXqpf42vUNehFU6y4PnPTJFRDAMBgNVHRMEBTAD -AQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBfl0C7XAbPdJzCjCsboMTzfC2B4uwspbST -MbUGnmNkTwzeOOsrLQmlCznKGprYV9vGR0MwBzYw2swWCzg/2MLN8swW7NF9gMkK -K61AANxT0qZV/aZhdM7W//pHJoQYsBsQT7cuTrL/VB/niD81uMA/mSWyXIn8KDIy -CPY6jiZ4qiIJnQWhWm1Cazv6O7wjDisvB1cCJhDvBv42KkFwtigt5MQnBEGOI2LD -iKCkXfj33E5B6n0sEel68WgYi6rx2tsR9lzAjCRF+jgNd7FfeUi999m7ykgEACR5 -OYRqkVcIXz30r9RxQyFqZLNzyO9oaVZpex8ZbWwEzNXG2ccddnMJ ------END CERTIFICATE----- diff --git a/advanced-features/openvidu-roles-node/openvidukey.pem b/advanced-features/openvidu-roles-node/openvidukey.pem deleted file mode 100644 index 9b47696d..00000000 --- a/advanced-features/openvidu-roles-node/openvidukey.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEAw2yv4izfNCAZxlG8wOABZeCkBF+kQq3srYZ3zkpyHEEkz/io -3rGTBYLBldC7Xg8XgifpKuGKEvglu6I7zhM98YwoKOLRXXr8/GaHjtEQUCGwEWz2 -pKODlwur1rOix8AkdGg1qPR30tVLrG/IO+3LET0ZTQNwxkfHXEU4hAXXx0uiYf+1 -e14g5WsT14/oiGPD8gqjn4L+HJQ7de0fnXp3Q7IGMW5mWqHa6aTaHDECMlGgyMCO -A2TmvJ0GJPbrlIZIgBQEATuuNm8ejSNKg7uSoLTJm2kurPqzJ6y/HnmTonKn3+l6 -AurZOhhPBaOImJMadoAIk7IoGksKTUVobqSElQIDAQABAoIBAGr/2HFjFjbpGJOw -b0O/oqRQUh2e7EYiCoOcK37E3iPAO1KvmG6OFayfwjSwG9bNNpbqGU2EPeBTA/3v -PwV/HZxinB5+yhl/3IKp9LDqoR7uwwNXgNf2O3d5SXX91zO9bXhbEn5WlEDYzl00 -uxKtCVF//ZlgN+AoruxDbkVDGbkhKHGzvqOW+BWwbYHPOttQ9TQx2ss5+DekpDFV -/FuvXGOcSSV/N+WbDwsqUiM8ovkcflEgQjZYlAY4Ro2U2buf3fKEmy1jxSznNp30 -QA4WyYypyS8Hz6S/F4nsjtS3ufCurrWBv4vt2qB+8tH//07NUacjQWZdvEAtaJ+G -IyJgsOUCgYEA38b2SQiw74fwoK6so2XdpCzOObLQBOT1aeZQjt3v8XZ0MPzwWJZm -VkMBmolcEw24xA3jHhOQYafAGjRdaKxlRbJyGJqwENfAs7hO5JSLLWWXsorJQcb7 -1OVTFPt7NZopx2Kw7kGGuj9884w57cSl9lsuMptqk8W7pbTo5opOfl8CgYEA35CR -x23kaFDh8+zKUuSdIrkUJ66cazgOfF0FYKiDewd1sGEdZT+gq7Wo8Hi8cp9q+Kuq -MkGrTzu21yMi2fo7RKoSOtV4RQViu6PuoYR/KvRq4F4abHEAivAG4xhPQife84IB -NkDQXaE9EXTP7DXPwj4HV8CnC9LC2qPFU7GVeYsCgYBWPK6c5qSJKrIouif9sDwC -EOJIighwWmvZK9DPvefB/gw49MEK4qr9g0US8Oxyy07w/wkPhiqV97eoYZW9yPIe -Me6WXMaNNxgkKlr86+HW1NfpDmMQ3kYefWHPLDsHJSoElJvqtYXeMKlOkjOg1a+/ -iNP83Lftyr3N1jIK5jHpsQKBgE1+clm7qOnT547C7JrxLdrEZs0ehI/R3YuUPvHz -V6gEvPHHqAXZmVsL3CSG5WOiCNVrw9Ip2zTa0RUf08vVJkg1353PMyJRrJi4SVZp -dB8ym/1sASLHxNVkQC7l1UtsQKcN0Fe6/b8GzgFICW6qdHqzP55WZFD/3JUnIZZS -PyrjAoGBAMfuE0Nrw9Fq7f8+U/SsqiW9djJp4R34EF5n8qHkotfRoAbGktCGxLoF -QMbB9X0ibRMpxEKPHj+V0FXu9zUKFuqoriRc3alQYLNzJEdKeQQ/AN5xjG3ilM6D -/FunImbvSdJLjR9Ue6vlFdOquHevBCFDiHOJPQJ/y4qyZR5Avluw ------END RSA PRIVATE KEY----- diff --git a/advanced-features/openvidu-roles-node/package-lock.json b/advanced-features/openvidu-roles-node/package-lock.json deleted file mode 100644 index 449d94a3..00000000 --- a/advanced-features/openvidu-roles-node/package-lock.json +++ /dev/null @@ -1,1145 +0,0 @@ -{ - "name": "openvidu-roles-node", - "version": "2.27.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "openvidu-roles-node", - "version": "2.27.0", - "license": "Apache-2.0", - "dependencies": { - "body-parser": "1.20.2", - "cors": "2.8.5", - "dotenv": "^16.3.1", - "express": "4.18.2", - "express-session": "1.17.3", - "livekit-server-sdk": "1.2.7" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, - "node_modules/@types/node": { - "version": "20.8.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz", - "integrity": "sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", - "dependencies": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", - "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", - "dependencies": { - "camelcase": "^6.3.0", - "map-obj": "^4.1.0", - "quick-lru": "^5.1.1", - "type-fest": "^1.2.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", - "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express-session": { - "version": "1.17.3", - "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz", - "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==", - "dependencies": { - "cookie": "0.4.2", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-headers": "~1.0.2", - "parseurl": "~1.3.3", - "safe-buffer": "5.2.1", - "uid-safe": "~2.1.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/express-session/node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/express/node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", - "dependencies": { - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", - "dependencies": { - "get-intrinsic": "^1.2.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jsonwebtoken/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/livekit-server-sdk": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/livekit-server-sdk/-/livekit-server-sdk-1.2.7.tgz", - "integrity": "sha512-tOhRb0vz1wBzMpTkP4ixptlC9MFME24PvG8Z/R7vBbQ1VGd6EdNr56voBSr+RCalYxaQqx0E9Gg4l+57m/Nlmw==", - "dependencies": { - "axios": "^1.3.6", - "camelcase-keys": "^7.0.0", - "jsonwebtoken": "^9.0.0", - "long": "^5.0.0", - "protobufjs": "^7.2.4" - } - }, - "node_modules/livekit-server-sdk/node_modules/axios": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz", - "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" - }, - "node_modules/long": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/protobufjs": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", - "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/random-bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", - "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", - "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/uid-safe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", - "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", - "dependencies": { - "random-bytes": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } -} diff --git a/advanced-features/openvidu-roles-node/package.json b/advanced-features/openvidu-roles-node/package.json deleted file mode 100644 index 6c6e32af..00000000 --- a/advanced-features/openvidu-roles-node/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "openvidu-roles-node", - "version": "2.27.0", - "description": "", - "main": "server.js", - "scripts": { - "test": "ng test" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/OpenVidu/openvidu-tutorials.git" - }, - "license": "Apache-2.0", - "bugs": { - "url": "https://github.com/OpenVidu/openvidu-tutorials/issues" - }, - "homepage": "https://github.com/OpenVidu/openvidu-tutorials#readme", - "dependencies": { - "body-parser": "1.20.2", - "cors": "2.8.5", - "dotenv": "^16.3.1", - "express": "4.18.2", - "express-session": "1.17.3", - "livekit-server-sdk": "1.2.7" - } -} diff --git a/advanced-features/openvidu-roles-node/public/app.js b/advanced-features/openvidu-roles-node/public/app.js deleted file mode 100644 index 7bc48a6b..00000000 --- a/advanced-features/openvidu-roles-node/public/app.js +++ /dev/null @@ -1,274 +0,0 @@ -var LivekitClient = window.LivekitClient; -var room; -var myRoomName; -var token; -var nickname; - -/* OPENVIDU METHODS */ - -function joinRoom() { - document.getElementById('join-btn').disabled = true; - document.getElementById('join-btn').innerHTML = 'Joining...'; - const myParticipantName = $('#myParticipantName').val(); - const myRoomName = $('#myRoomName').val(); - - room = new LivekitClient.Room(); - - room.on( - LivekitClient.RoomEvent.TrackSubscribed, - (track, publication, participant) => { - const element = track.attach(); - element.id = track.sid; - element.className = 'removable'; - document.getElementById('video-container').appendChild(element); - if (track.kind === 'video') { - var participantNickname; - try { - participantNickname = JSON.parse(participant.metadata).nickname; - } catch (error) { - console.warn('Error parsing participant metadata: ' + error); - } - appendUserData(element, participant.identity, participantNickname); - } - } - ); - - // On every new Track destroyed... - room.on( - LivekitClient.RoomEvent.TrackUnsubscribed, - (track, publication, participant) => { - track.detach(); - document.getElementById(track.sid)?.remove(); - if (track.kind === 'video') { - removeUserData(participant); - } - } - ); - - getToken(myRoomName, myParticipantName).then((token) => { - const livekitUrl = getLivekitUrlFromMetadata(token); - - room - .connect(livekitUrl, token) - .then(async () => { - var participantName = $('#user').val(); - $('#room-title').text(myRoomName); - $('#join').hide(); - $('#room').show(); - - const canPublish = room.localParticipant.permissions.canPublish; - - if (canPublish) { - const [microphonePublication, cameraPublication] = await Promise.all([ - room.localParticipant.setMicrophoneEnabled(true), - room.localParticipant.setCameraEnabled(true), - ]); - - const element = cameraPublication.track.attach(); - element.className = 'removable'; - document.getElementById('video-container').appendChild(element); - initMainVideo(element, myParticipantName, nickname); - appendUserData(element, myParticipantName, nickname); - } else { - initMainVideoThumbnail(); - } - }) - .catch((error) => { - console.warn( - 'There was an error connecting to the room:', - error.code, - error.message - ); - enableBtn(); - }); - }); - - return false; -} - -function leaveRoom() { - room.disconnect(); - room = null; - - // Removing all HTML elements with the user's nicknames - cleanRoomView(); - - $('#join').show(); - $('#room').hide(); - - enableBtn(); -} - -/* OPENVIDU METHODS */ - -function enableBtn() { - document.getElementById('join-btn').disabled = false; - document.getElementById('join-btn').innerHTML = 'Join!'; -} - -/* APPLICATION REST METHODS */ - -function logIn() { - nickname = $('#user').val(); - var pass = $('#pass').val(); - - httpPostRequest( - 'login', - { user: nickname, pass }, - 'Login WRONG', - (response) => { - $('#name-user').text(nickname); - $('#not-logged').hide(); - $('#logged').show(); - // Random myParticipantName and room - $('#myRoomName').val('Room ' + Math.floor(Math.random() * 10)); - $('#myParticipantName').val( - 'Participant ' + Math.floor(Math.random() * 100) - ); - } - ); -} - -function logOut() { - httpPostRequest('logout', {}, 'Logout WRONG', (response) => { - $('#not-logged').show(); - $('#logged').hide(); - }); - - enableBtn(); -} - -function getToken(roomName, participantName) { - return new Promise((resolve, reject) => { - // Video-call chosen by the user - httpPostRequest( - 'token', - { roomName, participantName }, - 'Error generating token', - (response) => resolve(response.token) - ); - }); -} - -async function httpPostRequest(url, body, errorMsg, successCallback) { - try { - const response = await fetch(url, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify(body), - }); - - if (response.ok) { - const data = await response.json(); - successCallback(data); - } else { - console.warn(errorMsg); - console.warn('Error: ' + response.statusText); - } - } catch (error) { - console.error(error); - } -} - -/* APPLICATION REST METHODS */ - -/* APPLICATION BROWSER METHODS */ - -window.onbeforeunload = () => { - if (room) { - leaveRoom(); - } - logOut(); -}; - -function getLivekitUrlFromMetadata(token) { - if (!token) throw new Error('Trying to get metadata from an empty token'); - try { - const base64Url = token.split('.')[1]; - const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/'); - const jsonPayload = decodeURIComponent( - window - .atob(base64) - .split('') - .map((c) => { - return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); - }) - .join('') - ); - - const payload = JSON.parse(jsonPayload); - if (!payload?.metadata) throw new Error('Token does not contain metadata'); - const metadata = JSON.parse(payload.metadata); - return metadata.livekitUrl; - } catch (error) { - throw new Error('Error decoding and parsing token: ' + error); - } -} - -function appendUserData(videoElement, participantName, nickname) { - var dataNode = document.createElement('div'); - dataNode.className = 'removable'; - dataNode.id = 'data-' + participantName; - dataNode.innerHTML = ` -

${nickname}

-

${participantName}

- `; - videoElement.parentNode.insertBefore(dataNode, videoElement.nextSibling); - addClickListener(videoElement, participantName); -} - -function removeUserData(participant) { - var dataNode = document.getElementById('data-' + participant.identity); - dataNode?.parentNode.removeChild(dataNode); -} - -function removeAllUserData() { - var elementsToRemove = document.getElementsByClassName('removable'); - while (elementsToRemove[0]) { - elementsToRemove[0].parentNode.removeChild(elementsToRemove[0]); - } -} - -function cleanMainVideo() { - $('#main-video video').get(0).srcObject = null; - $('#main-video p').each(function () { - $(this).html(''); - }); -} - -function addClickListener(videoElement, clientData, serverData) { - videoElement.addEventListener('click', function () { - var mainVideo = $('#main-video video').get(0); - if (mainVideo.srcObject !== videoElement.srcObject) { - $('#main-video').fadeOut('fast', () => { - $('#main-video p.nickname').html(clientData); - $('#main-video p.participantName').html(serverData); - mainVideo.srcObject = videoElement.srcObject; - $('#main-video').fadeIn('fast'); - }); - } - }); -} - -function initMainVideo(videoElement, participantName, nickname) { - $('#main-video video').get(0).srcObject = videoElement.srcObject; - $('#main-video p.nickname').html(nickname); - $('#main-video p.participantName').html(participantName); -} - -function initMainVideoThumbnail() { - $('#main-video video').css( - 'background', - "url('images/subscriber-msg.jpg') round" - ); -} - -function cleanRoomView() { - removeAllUserData(); - cleanMainVideo(); - $('#main-video video').css('background', ''); -} - -/* APPLICATION BROWSER METHODS */ diff --git a/advanced-features/openvidu-roles-node/public/images/favicon.ico b/advanced-features/openvidu-roles-node/public/images/favicon.ico deleted file mode 100644 index 0e2249ada68ec5cab2034721dc193285c27175b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5430 zcmc&&eN2^Q6o2ox;0z74F{f9TU#+!9X2#sY&6#cG+%jk7$GvdHRGeG+hii#qr9`BK zC}qeHvGgi7)2x{@AZJeQ2i$vM6vot;IU_|SM7+HB^gGY{zHsji5d!CRKhN_%yyy9y z=RD^*=iDnvI!P}LA1>iDPFi7n3LB+bNp^oNLalA8=H z`-6iYNhVd-0{wN8JM*q}0bsYHpWyM3&HpH+LU-f&>6Fv>650J0N)zjuDZSc6C3#&o z_*8vxN9x<4|6}uZ>X2_!&8_cgL&Ni8P1fJjXZ?H%g+e5UI_YNcD%N;b@b^{!L~|as zb>5(}El$d8mIy_@DizA(Ef{Umop0o%=3L z^zNk@HLHP)NK~()6z}r(9R;IG5d)tho~Gi=Phk!9{FF1`IJgHmKAUu|POBE<&`n0{ z`~Z38{s^(X>5?n*o?(vf0mpJ*5OLQf2{sP^oM*-XGXX8nWQp8_iLj5h--j)QuU!4l zcm1^+@nJ!H#Q|OZ7U$!lB*+;+9Dv+6c(yQ?ig?KRuwfJA2(}$O93#xR6=(vGv*`&y z~xQi3P znSt>+$PP%p-|K*(fL5#6->6em58#f9dwT`8?80~sWW3~-#d&2N8zSU^9Ld0NMuE9` zU0^h@05}9(1DKb=<5>W|Bh~^3^C#l|mcS33GlBq1_=8XjLYX?ZoD}Q18pHgh+Z66- ze$}R7*k=mX&IQf`8gEb?pMo3@gvTHA^LejSIn_MHHi(?nVsPI+KE`|0k$G@(@{ufk za@hw`GHPh@;V|Gi<mXv<+e z?JUxZx*lZ%pG7N>0j{Tk)4)w2h#25=kKmu+-A8Zu9~bq?9x%)HTCzBv z<}(v)1WdH7#zYzCO!UcqJ;5j8e$dXO7+miGTFj}u8oyGnCVO|&BL7&yuk%i zsKG{Z1cr3|jsG4FTb-HKRv4)`Ul+lTz4KX=g1b=NZ`i&g`KPG-4s~s=+cv*}R@5fY z^4bx!s75b1H9NxVI(!8m80m{I2Zui`V8NdClu`E>xo&(z{#z#~@8WCVA4-dTdicT8 z z^&i{7;OFL!i&WH<-o?MF$|U?hxcu7wWwjTU;e#OEk^iAfw|%th58DIf&uq~6m3`ll z+vv~sU(ws|L~J~V80GI655oUS{H_4L!-1#x4w~zmNelgx=yl(OK4W2E0;N`2gZaB-FQW#Z2Y(}YtARXVOz-?$ zhq`ST!m( zi)i-rQ~rkcXLa|*I`Mr#?Y$f-H}m%b?o0kRPC_@yT2a&0b85DL6Me7fyL#Eb=7)Yt z<+qnctna`%57RiqCFc1ItiTf3xEV5c5b-Y7nuT@a!Z~{y<30WkGz^lziwzJVMc>6e TedKQfJ#jzGxv-xC9?I}vocwV} diff --git a/advanced-features/openvidu-roles-node/public/images/openvidu_globe_bg_transp_cropped.png b/advanced-features/openvidu-roles-node/public/images/openvidu_globe_bg_transp_cropped.png deleted file mode 100644 index e0309e62181608cf3543664ced79b6355779533b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11746 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 KVuQR*wOeuWT3;&BESMc5c{Qzs4Eae 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
6<-acu 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 NQp-@YMBO3!e*nzNs#O30 diff --git a/advanced-features/openvidu-roles-node/public/images/subscriber-msg.jpg b/advanced-features/openvidu-roles-node/public/images/subscriber-msg.jpg deleted file mode 100644 index 1666fb4099a9236147861e734e61869e37267767..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82734 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 pgR(+GNPdoX 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 G?f(Kus+KSS diff --git a/advanced-features/openvidu-roles-node/public/index.html b/advanced-features/openvidu-roles-node/public/index.html deleted file mode 100644 index b1520ef7..00000000 --- a/advanced-features/openvidu-roles-node/public/index.html +++ /dev/null @@ -1,210 +0,0 @@ - - - openvidu-roles-node - - - - - - - - - - - - - - - - - - - - -
-
-
- -
-
-

- -

-

- -

-

- -

-
- - - - - - - - - - - - - - - - - - - - - -
UserPassword - Role -
publisher1passPUBLISHER
publisher2passPUBLISHER
subscriberpassSUBSCRIBER
-
- - -
- -
-
-
OpenVidu © 2023
- -
-
- - diff --git a/advanced-features/openvidu-roles-node/public/style.css b/advanced-features/openvidu-roles-node/public/style.css deleted file mode 100644 index df8d5c94..00000000 --- a/advanced-features/openvidu-roles-node/public/style.css +++ /dev/null @@ -1,382 +0,0 @@ -html { - position: relative; - min-height: 100%; -} - -nav { - height: 50px; - width: 100%; - z-index: 1; - background-color: #4d4d4d !important; - border-color: #4d4d4d !important; - border-top-right-radius: 0 !important; - border-top-left-radius: 0 !important; -} - -.navbar { - margin-bottom: 0px !important; -} - -.navbar-header { - width: 100%; -} - -.nav-icon { - padding: 5px 15px 5px 15px; - float: right; -} - -nav a { - color: #ccc !important; -} - -nav i.fa { - font-size: 40px; - color: #ccc; -} - -nav a:hover { - color: #a9a9a9 !important; -} - -nav i.fa:hover { - color: #a9a9a9; -} - -#main-container { - padding-bottom: 80px; - display: contents; -} - -.vertical-center { - width: -webkit-fit-content; - width: fit-content; - margin: auto; -} - -.vertical-center#not-logged form { - width: -moz-fit-content; - margin: auto; -} - -.vertical-center#not-logged table { - width: -moz-fit-content; - margin: auto; -} - -.vertical-center table { - margin-top: 3em !important; -} - -.horizontal-center { - margin: 0 auto; -} - -.form-control { - color: #0088aa; - font-weight: bold; -} - -.form-control:focus { - border-color: #0088aa; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(0, 136, 170, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(0, 136, 170, 0.6); -} - -input.btn { - font-weight: bold; -} - -.btn { - font-weight: bold !important; -} - -.btn-success { - background-color: #06d362 !important; - border-color: #06d362; -} - -.btn-success:hover { - background-color: #1abd61 !important; - border-color: #1abd61; -} - -.btn-info { - background-color: #0088aa !important; - border-color: #0088aa; -} - -.btn-info:hover { - background-color: #00708c !important; - border-color: #00708c; -} - -.btn-warning { - background-color: #ffcc00 !important; - border-color: #ffcc00; - color: #4d4d4d; -} - -.btn-warning:hover { - background-color: #eabb3a !important; - border-color: #eabb3a; - color: #4d4d4d; -} - -.btn-warning:active { - color: #4d4d4d; -} - -.btn-warning:focus { - color: #4d4d4d; -} - -.btn-warning:active:focus { - color: #4d4d4d; -} - -.footer { - position: absolute; - bottom: 0; - width: 100%; - height: 60px; - background-color: #4d4d4d; -} - -.footer .text-muted { - margin: 20px 0; - float: left; - color: #ccc; -} - -.openvidu-logo { - height: 35px; - float: right; - margin: 12px 0; - -webkit-transition: all 0.1s ease-in-out; - -moz-transition: all 0.1s ease-in-out; - -o-transition: all 0.1s ease-in-out; - transition: all 0.1s ease-in-out; -} - -.openvidu-logo:hover { - -webkit-filter: grayscale(0.5); - filter: grayscale(0.5); -} - -.demo-logo { - margin: 0; - height: 22px; - float: left; - padding-right: 8px; -} - -a:hover .demo-logo { - -webkit-filter: brightness(0.7); - filter: brightness(0.7); -} - -#join { - padding-top: 40px; -} - -#not-logged { - padding-top: 40px; -} - -#join-dialog h1 { - color: #4d4d4d; - font-weight: bold; - text-align: center; -} - -#join-dialog label { - color: #0088aa; -} - -#join-dialog input.btn { - margin-top: 15px; -} - -#join-dialog hr { - background: #4d4d4d; -} - -#img-div { - text-align: center; - padding-bottom: 3em; -} - -#img-div img { - height: 15%; -} - -#logged { - width: 100%; -} - -#join { - max-width: 700px; - margin: auto; -} - -#room-header { - margin-bottom: 20px; -} - -#room-header form { - display: inline; -} - -#room-title { - display: inline-block; -} - -#buttonLeaveRoom { - float: right; - margin-top: 20px; -} - -#video-container video { - position: relative; - float: left; - width: 50%; - cursor: pointer; -} - -#video-container div { - float: left; - width: 50%; - position: relative; - margin-left: -50%; -} - -#video-container p { - display: inline-block; - background: #f8f8f8; - padding-left: 5px; - padding-right: 5px; - color: #777777; - font-weight: bold; - border-bottom-right-radius: 4px; -} - -#video-container p.nickname { - float: right; - border-bottom-left-radius: 4px; - border-bottom-right-radius: 0px; - font-weight: lighter; - font-size: 12px; - background: #777777; - color: #f8f8f8; -} - -video { - width: 100%; - height: auto; -} - -#main-video p { - position: absolute; - display: inline-block; - background: #f8f8f8; - padding-left: 5px; - padding-right: 5px; - font-size: 22px; - color: #777777; - font-weight: bold; - border-bottom-right-radius: 4px; -} - -#main-video p.nickname { - position: absolute; - right: 0; - font-size: 16px !important; - margin-right: 15px; - border-bottom-left-radius: 4px; - border-bottom-right-radius: 0px; - font-weight: lighter; - font-size: 12px; - background: #777777; - color: #f8f8f8; -} - - -#room img { - width: 100%; - height: auto; - display: inline-block; - object-fit: contain; - vertical-align: baseline; -} - -#room #video-container img { - position: relative; - float: left; - width: 50%; - cursor: pointer; - object-fit: cover; - height: 180px; -} - -table i { - cursor: pointer; - margin-left: 1em; -} - -#tooltip-div { - text-align: left; -} - -#tooltip-div hr { - margin: 5px 0; -} - -#login-info { - text-align: right; -} - -#login-info form { - display: inline; -} - -#login-info div { - display: inline; - margin-right: 1em; -} - -#name-user { - font-weight: bold; -} - - -/* xs ans md screen resolutions*/ - -@media screen and (max-width: 991px) { - #join { - padding-top: inherit; - } - - #not-logged { - padding-top: inherit; - } - .container .navbar-header { - margin-right: 0 !important; - margin-left: 0 !important; - } - .nav-icon { - padding: 9px 8px 9px 8px; - } - nav i.fa { - font-size: 32px; - } - .vertical-center { - padding-top: 10px; - } - #img-div { - padding-bottom: 1em; - } - #img-div img { - height: 10%; - } -} \ No newline at end of file diff --git a/advanced-features/openvidu-roles-node/server.js b/advanced-features/openvidu-roles-node/server.js deleted file mode 100644 index f1a5812d..00000000 --- a/advanced-features/openvidu-roles-node/server.js +++ /dev/null @@ -1,175 +0,0 @@ -/* CONFIGURATION */ -require('dotenv').config( - !!process.env.CONFIG ? { path: process.env.CONFIG } : {} -); -// For demo purposes we ignore self-signed certificate -process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; - -// Node imports -const express = require('express'); -const fs = require('fs'); -const session = require('express-session'); -const https = require('https'); -const bodyParser = require('body-parser'); -const AccessToken = require('livekit-server-sdk').AccessToken; -const cors = require('cors'); -const app = express(); - -// Environment variable: PORT where the node server is listening -const SERVER_PORT = process.env.SERVER_PORT || 5000; -// Environment variable: api key shared with our LiveKit deployment -const LIVEKIT_API_KEY = process.env.LIVEKIT_API_KEY || 'devkey'; -// Environment variable: api secret shared with our LiveKit deployment -const LIVEKIT_API_SECRET = process.env.LIVEKIT_API_SECRET || 'secret'; -// Environment variable: url of our LiveKit deployment -const LIVEKIT_URL = process.env.LIVEKIT_URL || 'ws://localhost:7880'; - -// Listen (start app with node server.js) -const options = { - key: fs.readFileSync('openvidukey.pem'), - cert: fs.readFileSync('openviducert.pem'), -}; - -// The users of our application -// They should be stored in a database -const users = [ - { - user: 'publisher1', - pass: 'pass', - role: 'PUBLISHER', - }, - { - user: 'publisher2', - pass: 'pass', - role: 'PUBLISHER', - }, - { - user: 'subscriber', - pass: 'pass', - role: 'SUBSCRIBER', - }, -]; - -// Enable CORS support -app.use( - cors({ - origin: '*', - }) -); - -// Server configuration -app.use( - session({ - saveUninitialized: true, - resave: false, - secret: 'MY_SECRET', - }) -); -// Set the static files location -app.use(express.static(__dirname + '/public')); -// Parse application/x-www-form-urlencoded -app.use( - bodyParser.urlencoded({ - extended: 'true', - }) -); -// Parse application/json -app.use(bodyParser.json()); - -// Parse application/vnd.api+json as json -app.use( - bodyParser.json({ - type: 'application/vnd.api+json', - }) -); - -https.createServer(options, app).listen(SERVER_PORT, () => { - console.log(`App listening on port ${SERVER_PORT}`); - console.log(`LIVEKIT API KEY: ${LIVEKIT_API_KEY}`); - console.log(`LIVEKIT API SECRET: ${LIVEKIT_API_SECRET}`); - console.log(`LIVEKIT URL: ${LIVEKIT_URL}`); - console.log(); - console.log('Access the app at https://localhost:' + SERVER_PORT); -}); - -/* CONFIGURATION */ - -/* REST API */ - -app.post('/login', (req, res) => { - // Retrieve params from body - const { user, pass } = req.body; - - if (login(user, pass)) { - // Successful login - // Validate session and return OK - // Value stored in req.session allows us to identify the user in future requests - console.log(`Successful login for user '${user}'`); - req.session.loggedUser = user; - res.status(200).json({}); - } else { - // Credentials are NOT valid - // Invalidate session and return error - console.log(`Invalid credentials for user '${user}'`); - req.session.destroy(); - res.status(401).json({ message: 'Invalid credentials' }); - } -}); - -app.post('/logout', function (req, res) { - console.log(`'${req.session.loggedUser}' has logged out`); - req.session.destroy(); - res.status(200).json({}); -}); - -app.post('/token', (req, res) => { - const {roomName, participantName} = req.body; - - if (!isLogged(req.session)) { - req.session.destroy(); - res.status(401).json({ message: 'User not logged' }); - return; - } - - console.log( - `Getting a token for room '${roomName}' and participant '${participantName}'` - ); - - if (!roomName || !participantName) { - res - .status(400) - .json({ message: 'roomName and participantName are required' }); - return; - } - - const user = users.find((u) => u.user === req.session.loggedUser); - const {role, user: nickname} = user; - const canPublish = role === 'PUBLISHER'; - const at = new AccessToken(LIVEKIT_API_KEY, LIVEKIT_API_SECRET, { - identity: participantName, - // add metadata to the token, which will be available in the participant's metadata - metadata: JSON.stringify({ livekitUrl: LIVEKIT_URL, nickname, role }), - }); - at.addGrant({ - roomJoin: true, - room: roomName, - canPublish, - canSubscribe: true, - }); - res.status(200).json({ token: at.toJwt() }); -}); - -/* REST API */ - -/* AUXILIARY METHODS */ - -function login(user, pass) { - return users.find((u) => u.user === user && u.pass === pass); -} - -function isLogged(session) { - return session.loggedUser != null; -} - - -/* AUXILIARY METHODS */