[mirotalksfu] - add HOST_USERS env var

هذا الالتزام موجود في:
Miroslav Pejic
2025-06-03 20:19:29 +02:00
الأصل 5486e8bc5a
التزام c3bbceae7e
7 ملفات معدلة مع 77 إضافات و48 حذوفات

عرض الملف

@@ -100,20 +100,18 @@ OIDC_USERNAME_AS_NAME=false # Set username as name from OI
HOST_PROTECTED=false # Enable host protection (true|false)
HOST_USER_AUTH=false # Enable user authentication (true|false)
# Host users - Define host users in the format: username:password:displayName:allowedRooms (room1,room2...)
HOST_USERS="username:password:user:*|admin:admin:Admin:room1,room2|guest:guest:Guest:room1,room1"
# Endpoints
HOST_USERS_FROM_DB=false # Use DB for user auth (true|false)
USERS_API_SECRET=mirotalkweb_default_secret # Users API secret key
USERS_API_ENDPOINT=http://localhost:9000/api/v1/user/isAuth # User auth endpoint
USERS_ROOM_ALLOWED_ENDPOINT=http://localhost:9000/api/v1/user/isRoomAllowed # Room permission endpoint
USERS_ROOMS_ALLOWED_ENDPOINT=http://localhost:9000/api/v1/user/roomsAllowed # Allowed rooms endpoint
ROOM_EXISTS_ENDPOINT=http://localhost:9000/api/v1/room/exists # Room exists endpoint
# Users
DEFAULT_USERNAME=username # Default admin username
DEFAULT_PASSWORD=password # Default admin password
DEFAULT_DISPLAY_NAME=username display name # Default display name
DEFAULT_ALLOWED_ROOMS=* # Default allowed rooms all or room1,room2... (comma-separated)
# Presenters
PRESENTERS=Miroslav Pejic,miroslav.pejic.85@gmail.com, # Presenter usernames (comma-separated)
PRESENTER_JOIN_FIRST=true # First joiner becomes presenter (true|false)

عرض الملف

@@ -64,7 +64,7 @@ dev dependencies: {
* @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon
* @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970
* @author Miroslav Pejic - miroslav.pejic.85@gmail.com
* @version 1.8.59
* @version 1.8.60
*
*/

عرض الملف

@@ -365,38 +365,47 @@ module.exports = {
* Host Protection Configuration
* ============================
* Controls access to host-level functionality and room management.
* Supports multiple authentication methods including local users and API-based validation.
*
* Core Protection Settings:
* -------------------------
* Authentication Methods:
* ----------------------
* - Local users (defined in config or via HOST_USERS env variable)
* - API/database validation (users_from_db=true)
*
* Core Settings:
* --------------
* - protected : Enable/disable host protection globally
* - user_auth : Require user authentication for host access
* - users_from_db : Fetch authorized users from database/API instead of local config (eg., MiroTalk WEB)
* - users_from_db : Fetch users from API/database instead of local config
*
* API Integration:
* ----------------
* ---------------
* - users_api_secret_key : Secret key for API authentication
* - users_api_endpoint : Endpoint to validate user credentials
* - users_api_room_allowed : Endpoint to check if user can access specific room
* - users_api_rooms_allowed : Endpoint to get list of allowed rooms for user
* - api_room_exists : Endpoint to verify if room exists
* - users_api_room_allowed : Endpoint to check if user can access a room
* - users_api_rooms_allowed : Endpoint to get allowed rooms for a user
* - api_room_exists : Endpoint to verify if a room exists
*
* Local User Configuration:
* -------------------------
* - users : Array of authorized users (used when users_from_db=false)
* ------------------------
* - users: Array of authorized users (used if users_from_db=false)
* - Define via HOST_USERS env variable:
* HOST_USERS=username:password:displayname:room1,room2|username2:password2:displayname2:*
* (Each user separated by '|', fields by ':', allowed_rooms comma-separated or '*' for all)
* - If HOST_USERS is not set, falls back to DEFAULT_USERNAME, DEFAULT_PASSWORD, etc.
* - Fields:
* - username : Login username
* - password : Login password
* - displayname : User's display name
* - allowed_rooms : List of rooms user can access ('*' for all rooms)
* - allowed_rooms : List of rooms user can access ('*' for all)
*
* Presenter Management:
* --------------------
* - list : Array of usernames who can be presenters
* - join_first : First joiner becomes presenter [true/false] default true
* - join_first : First joiner becomes presenter (default: true)
*
* Documentation:
* --------------
* - https://docs.mirotalk.com/mirotalk-sfu/host-protection/
* -------------
* https://docs.mirotalk.com/mirotalk-sfu/host-protection/
*/
host: {
protected: process.env.HOST_PROTECTED === 'true',
@@ -411,18 +420,40 @@ module.exports = {
process.env.USERS_ROOMS_ALLOWED_ENDPOINT || 'http://localhost:9000/api/v1/user/roomsAllowed', // 'https://webrtc.mirotalk.com/api/v1/user/roomsAllowed'
api_room_exists: process.env.ROOM_EXISTS_ENDPOINT || 'http://localhost:9000/api/v1/room/exists', // 'https://webrtc.mirotalk.com//api/v1/room/exists'
users: [
{
username: process.env.DEFAULT_USERNAME || 'username',
password: process.env.DEFAULT_PASSWORD || 'password',
displayname: process.env.DEFAULT_DISPLAY_NAME || 'username display name',
allowed_rooms: process.env.DEFAULT_ALLOWED_ROOMS
? process.env.DEFAULT_ALLOWED_ROOMS.split(splitChar)
users: process.env.HOST_USERS
? process.env.HOST_USERS.split('|').map((userStr) => {
const [username, password, displayname, allowedRoomsStr] = userStr.split(':');
return {
username: username || '',
password: password || '',
displayname: displayname || '',
allowed_rooms: allowedRoomsStr
? allowedRoomsStr
.split(',')
.map((room) => room.trim())
.filter((room) => room !== '')
: ['*'],
};
})
: [
{
username: 'username',
password: 'password',
displayname: 'username displayname',
allowed_rooms: ['*'],
},
// Additional users can be added here
{
username: 'username2',
password: 'password2',
displayname: 'username2 displayname',
allowed_rooms: ['room1', 'room2'],
},
{
username: 'username3',
password: 'password3',
displayname: 'username3 displayname',
},
//...
],
presenters: {

عرض الملف

@@ -1,6 +1,6 @@
{
"name": "mirotalksfu",
"version": "1.8.59",
"version": "1.8.60",
"description": "WebRTC SFU browser-based video calls",
"main": "Server.js",
"scripts": {
@@ -84,7 +84,7 @@
"mediasoup": "3.16.0",
"mediasoup-client": "3.11.0",
"nodemailer": "^7.0.3",
"openai": "^5.0.2",
"openai": "^5.1.0",
"qs": "6.14.0",
"sanitize-filename": "^1.6.3",
"socket.io": "4.8.1",

عرض الملف

@@ -64,7 +64,7 @@ let BRAND = {
},
about: {
imageUrl: '../images/mirotalk-logo.gif',
title: '<strong>WebRTC SFU v1.8.59</strong>',
title: '<strong>WebRTC SFU v1.8.60</strong>',
html: `
<button
id="support-button"

عرض الملف

@@ -11,7 +11,7 @@ if (location.href.substr(0, 5) !== 'https') location.href = 'https' + location.h
* @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon
* @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970
* @author Miroslav Pejic - miroslav.pejic.85@gmail.com
* @version 1.8.59
* @version 1.8.60
*
*/
@@ -5453,7 +5453,7 @@ function showAbout() {
position: 'center',
imageUrl: BRAND.about?.imageUrl && BRAND.about.imageUrl.trim() !== '' ? BRAND.about.imageUrl : image.about,
customClass: { image: 'img-about' },
title: BRAND.about?.title && BRAND.about.title.trim() !== '' ? BRAND.about.title : 'WebRTC SFU v1.8.59',
title: BRAND.about?.title && BRAND.about.title.trim() !== '' ? BRAND.about.title : 'WebRTC SFU v1.8.60',
html: `
<br />
<div id="about">

عرض الملف

@@ -9,7 +9,7 @@
* @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon
* @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970
* @author Miroslav Pejic - miroslav.pejic.85@gmail.com
* @version 1.8.59
* @version 1.8.60
*
*/