[mirotalksfu] - add HOST_USERS env var
هذا الالتزام موجود في:
@@ -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
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
المرجع في مشكلة جديدة
حظر مستخدم