Compare commits

..

No commits in common. "master" and "3.5.0-stable" have entirely different histories.

32 changed files with 282 additions and 565 deletions

View file

@ -1,40 +0,0 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. ...
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Branch/Versions:**
If you are developer, on which branch is this.
If you are reporting as user, on which version or location you experienced the issue.
Version is available under the 3 dots in the topbar under about.
**Server (if available please complete the following information):**
- OS: [e.g. Debian 11]
**Client:**
- Browser [e.g. chrome, safari, firefox, edge, ...]
- Browser version [e.g. 99]
- other [e.g. mobil browser under ios]
**Additional context**
Add any other context about the problem here.

View file

@ -1,10 +0,0 @@
---
name: Custom issue template
about: Describe this issue template's purpose here.
title: ''
labels: ''
assignees: ''
---

View file

@ -1,20 +0,0 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

View file

@ -2,7 +2,7 @@ name: Debian package
on:
push:
branches: [ master ]
branches: [ develop, release-3.5.0 ]
# pull_request:
# branches: [ develop ]
@ -91,16 +91,16 @@ jobs:
chmod 775 DEBIAN/postinst
cd ../
dpkg-deb -Zgzip --build package
mv /home/runner/package.deb /home/runner/edumeet-$VERSION.deb
mv /home/runner/package.deb /home/runner/edumeet-$VERSION-beta1.deb
- name : Upload artifact
uses: actions/upload-artifact@v2
with:
name: edumeet-${{ steps.get-version.outputs.VERSION }}
name: edumeet-${{ steps.get-version.outputs.VERSION }}-beta1
path: "/home/runner/edumeet-*.deb"
- name: Add to release assets
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ steps.get-version.outputs.VERSION }}
tag_name: "v3.5.0-beta.1"
files: "/home/runner/edumeet-*.deb"

80
.github/workflows/main.yml vendored Normal file
View file

@ -0,0 +1,80 @@
name: Deployer
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [12.x]
steps:
- uses: actions/checkout@v2
with:
path: edumeet
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- run: |
sudo DEBIAN_FRONTEND=noninteractive apt-get -yq install jq npm build-essential || true
cd edumeet
cp server/config/config.example.js server/config/config.js
cp app/public/config/config.example.js app/public/config/config.js
cd app
npm install
npm run build
cd ../server
cat <<< $(jq '.bundleDependencies += .dependencies' package.json) > package.json
npm install
npm pack
VERSION=$(cat package.json | jq -r '.version')
DATE=$(date)
mkdir -p /home/runner/package
cd /home/runner/package
mkdir DEBIAN
mkdir -p usr/local/src/edumeet/server
mkdir -p etc/systemd/system/
tar -xf /home/runner/work/***/***/***/server/***-server-$VERSION.tgz package/ 1>/dev/null 2>/dev/null || true
mv package/* usr/local/src/edumeet/server/
mv /home/runner/work/***/***/***/*.service etc/systemd/system/
rm -rf package
touch DEBIAN/md5sums
touch DEBIAN/md5sums
touch DEBIAN/control
find . -type f ! -regex '.*.hg.*' ! -regex '.*?debian-binary.*' ! -regex '.*?DEBIAN.*' -printf '%P ' | xargs md5sum 1>/dev/null 2>/dev/null || true
echo """Package: edumeet
Version: $VERSION
Maintainer: Mert CELEN <mcelen94@gmail.com>
Section: admin
Date : $DATE
Architecture: amd64
Priority: important
Description: Multiparty web-meetings using mediasoup and WebRTC
Depends: nodejs (>= 12), redis
""" > DEBIAN/control
echo """#!/bin/bash
mkdir -p /etc/edumeet/
ln -s /usr/local/src/edumeet/server/config/config.js /etc/edumeet/server-config.js || true
ln -s /usr/local/src/edumeet/server/public/config/config.js /etc/edumeet/client-config.js || true
systemctl daemon-reload
systemctl enable edumeet
echo "eduMeet multiparty meeting is installed, but you need the configure the server and client with your ip adresses in configuration files under /etc/meeting/ \n"
echo "\n\nAfter the configuration, you can start service with 'sudo systemctl start edumeet' command.\n\n"
""" > DEBIAN/postinst
chmod 775 DEBIAN/postinst
cd ../
dpkg-deb -Zgzip --build package
mv /home/runner/package.deb /home/runner/edumeet.deb
- name : Release Package
uses: actions/upload-artifact@v1
with:
name: edumeet
path: "/home/runner/edumeet.deb"

View file

@ -1,12 +1,5 @@
# Changelog
## 3.5.3
Hotfix configuration issue
## 3.5.2
Security update for dependencies
## 3.5.1
* Updated Documentation
## 3.5.0
### Added

View file

@ -248,7 +248,7 @@ sudo systemctl enable edumeet
## Load balanced installation
To deploy this as a load balanced cluster, have a look at [HAproxy](/docs/HAproxy.md).
To deploy this as a load balanced cluster, have a look at [HAproxy](HAproxy.md).
## Learning management integration

View file

@ -1,6 +1,6 @@
{
"name": "edumeet",
"version": "3.5.5",
"version": "3.5.0",
"private": true,
"description": "edumeet meeting service",
"author": "Håvar Aambø Fosstveit <h@fosstveit.net>",
@ -43,7 +43,7 @@
"is-electron": "^2.2.0",
"marked": "^0.8.0",
"material-ui-popup-state": "^1.8.0",
"mediasoup-client": "^3.6.55",
"mediasoup-client": "^3.6.47",
"notistack": "^0.9.5",
"prop-types": "^15.7.2",
"random-string": "^0.2.0",
@ -70,7 +70,6 @@
"source-map-explorer": "^2.1.0",
"streamsaver": "^2.0.5",
"typescript": "^4.2.4",
"universal-cookie": "4.0.4",
"web-streams-polyfill": "^3.0.2",
"webtorrent": "^0.108.1"
},
@ -111,6 +110,6 @@
"eslint-webpack-plugin": "^2.5.3",
"foreman": "^3.0.1",
"redux-mock-store": "^1.5.3",
"ts-node": "^10.9.1"
"ts-node": "^10.5.0"
}
}

View file

@ -52,9 +52,6 @@
| lockLastN | If true, the users can not change the number of visible speakers. | `"boolean"` | ``false`` |
| logo | If not null, it shows the logo loaded from the specified URL, otherwise it shows the title. | `"url"` | ``"images/logo.edumeet.svg"`` |
| title | The title to show if the logo is not specified. | `"string"` | ``"edumeet"`` |
| infoTooltipText | Informative text on the join page. If empty hidden. | `"string"` | ``""`` |
| infoTooltipLink | Informative text link site on the join page. If empty hidden. | `"string"` | ``""`` |
| infoTooltipDesc | Informative text description on the join page. If empty hidden. | `"string"` | ``""`` |
| supportUrl | The service & Support URL; if `null`, it will be not displayed on the about dialogs. | `"url"` | ``"https://support.example.com"`` |
| privacyUrl | The privacy and data protection external URL or local HTML path. | `"string"` | ``"privacy/privacy.html"`` |
| theme | UI theme elements colors. | `"object"` | ``{ "palette": { "primary": { "main": "#313131" } }, "overrides": { "MuiAppBar": { "colorPrimary": { "backgroundColor": "#313131" } }, "MuiButton": { "containedPrimary": { "backgroundColor": "#5F9B2D", "&:hover": { "backgroundColor": "#5F9B2D" } }, "containedSecondary": { "backgroundColor": "#f50057", "&:hover": { "backgroundColor": "#f50057" } } }, "MuiFab": { "primary": { "backgroundColor": "#518029", "&:hover": { "backgroundColor": "#518029" }, "&:disabled": { "color": "#999898", "backgroundColor": "#323131" } }, "secondary": { "backgroundColor": "#f50057", "&:hover": { "backgroundColor": "#f50057" }, "&:disabled": { "color": "#999898", "backgroundColor": "#323131" } } }, "MuiBadge": { "colorPrimary": { "backgroundColor": "#5F9B2D", "&:hover": { "backgroundColor": "#518029" } } } }, "typography": { "useNextVariants": true }}`` |

View file

@ -304,15 +304,6 @@ var config = {
// The title to show if the logo is not specified.
title : 'edumeet',
// Informative text on the join page. If empty hidden.
infoTooltipText : '',
// Informative text link site on the join page. If empty hidden.
infoTooltipLink : '',
// Informative text description on the join page. If empty hidden.
infoTooltipDesc : '',
// The service & Support URL; if `null`, it will be not displayed on the about dialogs.
supportUrl : 'https://support.example.com',

View file

@ -7,7 +7,6 @@
content='width=device-width, initial-scale=1, shrink-to-fit=no'
/>
<meta name='description' content='edumeet - Simple web meetings'>
<meta name="keywords" content="edumeet,letsmeet,multiparty,videoconference,meet,WebRTC,room,rooms,geant,video conferencing, video conference, online meetings, web meeting, video meeting, cloud meeting, cloud video, group video call, group video chat, screen share, application share, mobility, mobile collaboration, desktop share, video collaboration">
<meta name='theme-color' content='#000000' />
<link rel='preconnect' href='https://fonts.googleapis.com/css?family=Roboto' rel='stylesheet'>

View file

@ -4283,7 +4283,7 @@ export default class RoomClient
try
{
const device = this._webcams[videoDeviceId];
const { resolution, aspectRatio, frameRate } = store.getState().settings;
const { resolution, aspectRatio } = store.getState().settings;
if (!device)
throw new Error('no webcam devices');
@ -4293,8 +4293,7 @@ export default class RoomClient
video :
{
deviceId : { ideal: videoDeviceId },
...getVideoConstrains(resolution, aspectRatio),
frameRate
...getVideoConstrains(resolution, aspectRatio)
}
});

View file

@ -349,32 +349,21 @@ const Peer = (props) =>
{
const handler = setTimeout(() =>
{
const consumers = [];
const consumer = webcamConsumer || screenConsumer;
if (webcamConsumer)
consumers.push(webcamConsumer);
if (!consumer)
return;
if (screenConsumer)
consumers.push(screenConsumer);
extraVideoConsumers.map((consumer) =>
if (windowConsumer === consumer.id)
{
consumers.push(consumer);
});
consumers.forEach((consumer) =>
// if playing in external window, set the maximum quality levels
roomClient.setConsumerPreferredLayersMax(consumer);
}
else if (enableLayersSwitch && consumer?.type !== 'simple'
&& fullScreenConsumer !== consumer.id)
{
if (windowConsumer === consumer.id)
{
// if playing in external window, set the maximum quality levels
roomClient.setConsumerPreferredLayersMax(consumer);
}
else if (enableLayersSwitch && consumer?.type !== 'simple'
&& fullScreenConsumer !== consumer.id)
{
roomClient.adaptConsumerPreferredLayers(consumer, width, height);
}
});
roomClient.adaptConsumerPreferredLayers(consumer, width, height);
}
}, 1000);
return () => { clearTimeout(handler); };
@ -382,7 +371,6 @@ const Peer = (props) =>
enableLayersSwitch,
webcamConsumer,
screenConsumer,
extraVideoConsumers,
windowConsumer,
fullScreenConsumer,
roomClient, width, height

View file

@ -39,7 +39,6 @@ import { useHistory, useLocation } from 'react-router-dom';
import IconButton from '@material-ui/core/IconButton';
import Tooltip from '@material-ui/core/Tooltip';
import { config } from '../config';
import InfoIcon from '@material-ui/icons/Info';
const styles = (theme) =>
({
@ -187,6 +186,7 @@ const JoinDialog = ({
}) =>
{
const location = useLocation();
const history = useHistory();
@ -671,51 +671,6 @@ const JoinDialog = ({
</Button>
</Grid>
{ config.infoTooltipText!=='' &&
<div className={classes.infoToolTip}
style={{
'padding-top' : '20px',
'overflowX' : 'auto',
'width' : '100%',
'display' : 'flex',
'align-items' : 'center'
}}
>
<InfoIcon />
{ config.infoTooltipLink!=='' &&
<a
style={{
'text-decoration' : 'none',
'padding-left' : '5px'
}}
href={config.infoTooltipLink}
>{config.infoTooltipText}</a>
}
{ config.infoTooltipLink==='' &&
<p style={{
'text-decoration' : 'none',
'padding-left' : '5px'
}}
>{config.infoTooltipText}</p>
}
</div>
}
{ config.infoTooltipDesc!=='' &&
<div
className={classes.infoToolTip}
style={{
'padding-top' : '15px',
'overflowX' : 'auto',
'width' : '100%',
'display' : 'flex',
'align-items' : 'center'
}}
>
{config.infoTooltipDesc}
</div>
}
{/*
{authType === 'auth' && !loggedIn &&
<Grid item>

View file

@ -437,7 +437,6 @@ class VideoView extends React.PureComponent
localRecordingState==='resume'
)&&
(
recordingConsents!==undefined &&
!recordingConsents.includes(peer.id)
)
) ? '':displayName
@ -460,7 +459,6 @@ class VideoView extends React.PureComponent
localRecordingState==='resume'
)&&
(
recordingConsents!==undefined &&
!recordingConsents.includes(peer.id)
)
)

View file

@ -498,24 +498,6 @@ Setting 'play' to null disables the sound notification.
format : 'String',
default : 'edumeet'
},
infoTooltipText :
{
doc : 'Informative text on the join page. If empty hidden.',
format : 'String',
default : ''
},
infoTooltipLink :
{
doc : 'Informative text link site on the join page. If empty hidden.',
format : 'String',
default : ''
},
infoTooltipDesc :
{
doc : 'Informative text description on the join page. If empty hidden.',
format : 'String',
default : ''
},
supportUrl :
{
doc : 'The service & Support URL; if `null`, it will be not displayed on the about dialogs.',

View file

@ -6,7 +6,7 @@ import isElectron from 'is-electron';
import { createIntl } from 'react-intl';
import { IntlProvider } from 'react-intl-redux';
import Cookies from 'universal-cookie';
import { Route, HashRouter, BrowserRouter, Switch } from 'react-router-dom';
import randomString from 'random-string';
import Logger from './Logger';
@ -15,7 +15,6 @@ import RoomClient from './RoomClient';
import RoomContext from './RoomContext';
import deviceInfo from './deviceInfo';
import * as meActions from './store/actions/meActions';
import * as roomActions from './store/actions/roomActions';
import UnsupportedBrowser from './components/UnsupportedBrowser';
import ConfigDocumentation from './components/ConfigDocumentation';
import ConfigError from './components/ConfigError';
@ -98,25 +97,6 @@ function run()
const displayName = parameters.get('displayName');
const muted = parameters.get('muted') === 'true';
const headless = parameters.get('headless');
const hideNoVideoParticipants = parameters.get('hideNoVideoParticipants');
const filmstripmode = parameters.get('filmstrip'); // filmstrip mode by default
const acceptCookie = parameters.get('acceptCookie'); // auto accept cookie popup
const hideSelfView = parameters.get('hideSelfView');
if (filmstripmode === 'true')
{
store.dispatch(
roomActions.setDisplayMode('filmstrip')
);
}
if (acceptCookie === 'true')
{
const cookies = new Cookies();
cookies.set('CookieConsent', 'true', { path: '/' });
}
const showConfigDocumentationPath = parameters.get('config') === 'true';
const { pathname } = window.location;
@ -238,16 +218,6 @@ function run()
basePath
});
if (hideNoVideoParticipants === 'true')
{
roomClient.setHideNoVideoParticipants(true);
}
if (hideSelfView === 'true')
{
store.dispatch(roomActions.setHideSelfView(hideSelfView));
}
global.CLIENT = roomClient;
render(

View file

@ -1,12 +1,12 @@
{
"configDocumentation.title": "Edumeet 配置",
"configError.bodyText": "Edumeet 配置存在如下错误:",
"configError.link": "查看配置文档",
"configError.title": "配置错误",
"configDocumentation.title": null,
"configError.bodyText": null,
"configError.link": null,
"configError.title": null,
"device.activateAudio": "激活音频",
"device.audioUnsupported": "音频不受支持",
"device.muteAudio": "静音",
"device.options": "设置",
"device.options": null,
"device.screenSharingUnsupported": "不支持屏幕共享",
"device.startScreenSharing": "开始屏幕共享",
"device.startVideo": "开始视频",
@ -16,12 +16,12 @@
"device.videoUnsupported": "视频不受支持",
"devices.cameraDisconnected": "相机已断开连接",
"devices.cameraError": "访问相机时发生错误",
"devices.chooseMedia": "选择媒体",
"devices.chooseMedia": null,
"devices.devicesChanged": "您的设备已更改,请在设置对话框中配置设备",
"devices.disableBothMicrophoneAndCamera": "关闭麦克风和摄像头",
"devices.enableBothMicrophoneAndCamera": "打开麦克风和摄像头",
"devices.enableOnlyCamera": "仅打开摄像头",
"devices.enableOnlyMicrophone": "仅打开麦克风",
"devices.disableBothMicrophoneAndCamera": null,
"devices.enableBothMicrophoneAndCamera": null,
"devices.enableOnlyCamera": null,
"devices.enableOnlyMicrophone": null,
"devices.microphoneDisconnected": "麦克风已断开",
"devices.microphoneEnable": "启用了麦克风",
"devices.microphoneError": "麦克风发生错误",
@ -33,7 +33,7 @@
"devices.screenSharingError": "访问屏幕时发生错误",
"filesharing.download": "下载共享文件",
"filesharing.error": "文件共享发生错误",
"filesharing.missingSeeds": "如果此过程需要很长时间,则可能没有人进行做种。请尝试使上传者重新上传您想要的文件。",
"filesharing.missingSeeds": "如果此过程需要很长时间,则可能没有人播下该种子。请尝试让某人重新上传您想要的文件。",
"filesharing.save": "保存共享文件",
"filesharing.saveFileError": "无法保存文件",
"filesharing.startingFileShare": "正在尝试共享文件",
@ -50,14 +50,14 @@
"label.chatNewMessages": null,
"label.chatNoMessages": null,
"label.close": "关闭",
"label.democratic": "持人视图",
"label.democratic": "主视图",
"label.fileSharingUnsupported": "不支持文件共享",
"label.filmstrip": "幻灯片视图",
"label.fullscreen": "全屏",
"label.guest": "访客",
"label.guest": null,
"label.high": "高 (HD)",
"label.italic": null,
"label.join": "入会",
"label.join": null,
"label.leave": "离开",
"label.leaveWithSavingChat": null,
"label.login": null,
@ -252,4 +252,4 @@
"unsupportedBrowser.bodyText": null,
"unsupportedBrowser.titleUnsupportedBrowser": null,
"unsupportedBrowser.titlewebrtcUnavailable": null
}
}

View file

@ -1209,12 +1209,17 @@
exec-sh "^0.3.2"
minimist "^1.2.0"
"@cspotcode/source-map-support@^0.8.0":
version "0.8.1"
resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1"
integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==
"@cspotcode/source-map-consumer@0.8.0":
version "0.8.0"
resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b"
integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==
"@cspotcode/source-map-support@0.7.0":
version "0.7.0"
resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5"
integrity sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==
dependencies:
"@jridgewell/trace-mapping" "0.3.9"
"@cspotcode/source-map-consumer" "0.8.0"
"@csstools/convert-colors@^1.4.0":
version "1.4.0"
@ -1514,24 +1519,6 @@
"@types/yargs" "^15.0.0"
chalk "^4.0.0"
"@jridgewell/resolve-uri@^3.0.3":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
"@jridgewell/sourcemap-codec@^1.4.10":
version "1.4.14"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
"@jridgewell/trace-mapping@0.3.9":
version "0.3.9"
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9"
integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==
dependencies:
"@jridgewell/resolve-uri" "^3.0.3"
"@jridgewell/sourcemap-codec" "^1.4.10"
"@material-ui/core@^4.11.3":
version "4.11.4"
resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.11.4.tgz#4fb9fe5dec5dcf780b687e3a40cff78b2b9640a4"
@ -1944,11 +1931,6 @@
dependencies:
"@types/node" "*"
"@types/cookie@^0.3.3":
version "0.3.3"
resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.3.3.tgz#85bc74ba782fb7aa3a514d11767832b0e3bc6803"
integrity sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow==
"@types/debug@^4.1.7":
version "4.1.7"
resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82"
@ -1974,6 +1956,11 @@
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
"@types/events@^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7"
integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==
"@types/glob@^7.1.1":
version "7.1.3"
resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183"
@ -2844,10 +2831,10 @@ autoprefixer@^9.6.1:
postcss "^7.0.32"
postcss-value-parser "^4.1.0"
awaitqueue@^2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/awaitqueue/-/awaitqueue-2.4.0.tgz#beb9a2b563b4817921f21c09cca2cdbb0d5989d4"
integrity sha512-9nTnPxVuxiuKFTHslm9ltnekUECJidOQ5kE6JpZUH77KrKqStQuWUW7JPB2GJZ7rOwWLcbToHiIXle/nJe1VpQ==
awaitqueue@^2.3.3:
version "2.3.3"
resolved "https://registry.yarnpkg.com/awaitqueue/-/awaitqueue-2.3.3.tgz#35e6568970fcac3de1644a2c28abc1074045b570"
integrity sha512-RbzQg6VtPUtyErm55iuQLTrBJ2uihy5BKBOEkyBwv67xm5Fn2o/j+Bz+a5BmfSoe2oZ5dcz9Z3fExS8pL+LLhw==
axe-core@^4.0.2:
version "4.2.1"
@ -4098,11 +4085,6 @@ cookie@0.4.0:
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
cookie@^0.4.0:
version "0.4.2"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
copy-concurrently@^1.0.0:
version "1.0.5"
resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
@ -4576,10 +4558,10 @@ debug@^3.1.1, debug@^3.2.6, debug@^3.2.7:
dependencies:
ms "^2.1.1"
debug@^4.3.4:
version "4.3.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
debug@^4.3.3:
version "4.3.3"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664"
integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
dependencies:
ms "2.1.2"
@ -5923,9 +5905,9 @@ flush-write-stream@^1.0.0:
readable-stream "^2.3.6"
follow-redirects@^1.0.0:
version "1.14.9"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7"
integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==
version "1.14.1"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43"
integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==
for-in@^1.0.2:
version "1.0.2"
@ -8419,21 +8401,21 @@ media-typer@0.3.0:
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
mediasoup-client@^3.6.55:
version "3.6.66"
resolved "https://registry.yarnpkg.com/mediasoup-client/-/mediasoup-client-3.6.66.tgz#80e5dc2746b795d44c55901b0b8f5a796b196d87"
integrity sha512-xTT8v42ykXeAgGHH4MsTirtkMZ46hbPkKfbO663l0/vGu9uD1bSR5dFSe+scp6go1LKF+iDLnPyO0mvWLhlAKg==
mediasoup-client@^3.6.47:
version "3.6.50"
resolved "https://registry.yarnpkg.com/mediasoup-client/-/mediasoup-client-3.6.50.tgz#16ca4fe7e2920c1d0e74c7e9b66bd13a4ebdf44b"
integrity sha512-YSd5GHD3gTyZXUBWDtpCeng1i+pE5dbRQeY11fQWKcFGEao2XaNW/+4FCzLBRNbEJZ2nFVJmxwNSFB4R4Jt/PQ==
dependencies:
"@types/debug" "^4.1.7"
awaitqueue "^2.4.0"
"@types/events" "^3.0.0"
awaitqueue "^2.3.3"
bowser "^2.11.0"
debug "^4.3.4"
debug "^4.3.3"
events "^3.3.0"
fake-mediastreamtrack "^1.1.6"
h264-profile-level-id "^1.0.1"
sdp-transform "^2.14.1"
supports-color "^9.2.3"
uuid "^3.4.0"
supports-color "^9.2.1"
mediasource@^2.2.2, mediasource@^2.3.0:
version "2.4.0"
@ -8631,9 +8613,9 @@ minipass-pipeline@^1.2.2:
minipass "^3.0.0"
minipass@^3.0.0, minipass@^3.1.1:
version "3.1.6"
resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee"
integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==
version "3.1.3"
resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd"
integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==
dependencies:
yallist "^4.0.0"
@ -11636,9 +11618,9 @@ simple-concat@^1.0.0:
integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==
simple-get@^3.0.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.1.tgz#cc7ba77cfbe761036fbfce3d021af25fc5584d55"
integrity sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==
version "3.1.0"
resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3"
integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==
dependencies:
decompress-response "^4.2.0"
once "^1.3.1"
@ -12241,10 +12223,10 @@ supports-color@^7.0.0, supports-color@^7.1.0:
dependencies:
has-flag "^4.0.0"
supports-color@^9.2.3:
version "9.3.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.3.0.tgz#cce566c5ad562eece4dfe5a4502a58efc54986a9"
integrity sha512-hJ6RYjNbcBFkpHi+ykjar+7GgHs+65Kxyw940nBLOSjaWZ13acq4A5f+gWiV5w+xfsg5MbnjDxTigLcUuljerw==
supports-color@^9.2.1:
version "9.2.1"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.2.1.tgz#599dc9d45acf74c6176e0d880bab1d7d718fe891"
integrity sha512-Obv7ycoCTG51N7y175StI9BlAXrmgZrFhZOb0/PyjHBher/NmsdBgbbQ1Inhq+gIhz6+7Gb+jWF2Vqi7Mf1xnQ==
supports-hyperlinks@^2.0.0:
version "2.2.0"
@ -12306,9 +12288,9 @@ tapable@^1.0.0, tapable@^1.1.3:
integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
tar@^6.0.2:
version "6.1.11"
resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621"
integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==
version "6.1.0"
resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83"
integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==
dependencies:
chownr "^2.0.0"
fs-minipass "^2.0.0"
@ -12558,12 +12540,12 @@ tryer@^1.0.1:
resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8"
integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==
ts-node@^10.9.1:
version "10.9.1"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b"
integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==
ts-node@^10.5.0:
version "10.5.0"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.5.0.tgz#618bef5854c1fbbedf5e31465cbb224a1d524ef9"
integrity sha512-6kEJKwVxAJ35W4akuiysfKwKmjkbYxwQMTBaAxo9KKAx/Yd26mPUyhGz3ji+EsJoAgrLqVsYHNuuYwQe22lbtw==
dependencies:
"@cspotcode/source-map-support" "^0.8.0"
"@cspotcode/source-map-support" "0.7.0"
"@tsconfig/node10" "^1.0.7"
"@tsconfig/node12" "^1.0.7"
"@tsconfig/node14" "^1.0.0"
@ -12574,7 +12556,7 @@ ts-node@^10.9.1:
create-require "^1.1.0"
diff "^4.0.1"
make-error "^1.1.1"
v8-compile-cache-lib "^3.0.1"
v8-compile-cache-lib "^3.0.0"
yn "3.1.1"
ts-pnp@1.2.0, ts-pnp@^1.1.6:
@ -12789,14 +12771,6 @@ unique-string@^1.0.0:
dependencies:
crypto-random-string "^1.0.0"
universal-cookie@4.0.4:
version "4.0.4"
resolved "https://registry.yarnpkg.com/universal-cookie/-/universal-cookie-4.0.4.tgz#06e8b3625bf9af049569ef97109b4bb226ad798d"
integrity sha512-lbRVHoOMtItjWbM7TwDLdl8wug7izB0tq3/YVKhT/ahB4VDvWMyvnADfnJI8y6fSvsjh51Ix7lTGC6Tn4rMPhw==
dependencies:
"@types/cookie" "^0.3.3"
cookie "^0.4.0"
universalify@^0.1.0, universalify@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
@ -12864,9 +12838,9 @@ url-parse-lax@^3.0.0:
prepend-http "^2.0.0"
url-parse@^1.4.3, url-parse@^1.5.1:
version "1.5.10"
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1"
integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==
version "1.5.1"
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b"
integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==
dependencies:
querystringify "^2.1.1"
requires-port "^1.0.0"
@ -12967,10 +12941,10 @@ uuid@^8.1.0, uuid@^8.3.0:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
v8-compile-cache-lib@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"
integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
v8-compile-cache-lib@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz#0582bcb1c74f3a2ee46487ceecf372e46bce53e8"
integrity sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==
v8-compile-cache@^2.0.3:
version "2.3.0"

View file

@ -1,6 +1,6 @@
FROM node:14-buster-slim
RUN apt-get update && \
apt-get install -y git build-essential python pkg-config libssl-dev python3-pip && \
apt-get install -y git build-essential python pkg-config libssl-dev && \
apt-get clean
WORKDIR /edumeet
ENV DEBUG=edumeet*,mediasoup*

View file

@ -64,17 +64,13 @@ OR
### Server config
config.yaml
``` yaml
turnAPIKey : "<key>"
turnAPIURI : "<turn url>"
listeningPort : 80
httpOnly : true
trustProxy : "192.0.2.5"
redisOptions:
host: "192.0.2.4"
port: "6379"
password: "passwd"
mm/configs/server/config.js
``` js
redisOptions : { host: '192.0.2.4'},
listeningPort: 80,
httpOnly: true,
trustProxy : ['192.0.2.5'],
```
## Deploy HA proxy
@ -82,121 +78,24 @@ redisOptions:
* Configure certificate / letsencrypt for `meet.example.com`
* In this example we put a complete chain and private key in /root/certificate.pem.
* Install and setup haproxy
```bash
apt install haproxy
```
* Install haproxy 2.2 (recommended)
``` bash
sudo apt-get install gnupg2 curl -y
curl https://haproxy.debian.net/bernat.debian.org.gpg | sudo apt-key add -
echo deb http://haproxy.debian.net buster-backports-2.2 main | sudo tee /etc/apt/sources.list.d/haproxy.list
sudo apt-get update
apt-get install haproxy=2.2.\*
sudo systemctl start haproxy
sudo systemctl enable haproxy
```
`apt install haproxy`
* Add to /etc/haproxy/haproxy.cfg config
``` plaintext
backend edumeet
balance url_param roomId
hash-type consistent
global
# mult thread setup
nbproc 1
nbthread 4
cpu-map auto:1/1-4 0-3
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats socket /run/haproxy.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL). This list is from:
# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
# An alternative list with additional directives can be obtained from
# https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
ssl-default-bind-options no-sslv3
tune.ssl.default-dh-param 2048
maxconn 20000
defaults
log global
mode http
option httplog
#option logasap
#option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
maxconn 8192
backend letsmeet-room-backend
fullconn 4000
balance url_param roomId
hash-type consistent
stick-table type string len 1024 size 100k expire 8h
stick store-request url_param(roomId)
stick match url_param(roomId)
stick match url_param(state),url_dec,b64dec,field(8,'\"')
server edumeet1 192.0.2.1:80 check maxconn 2000 verify none
server edumeet2 192.0.2.2:80 check maxconn 1000 verify none
server edumeet3 192.0.2.3:80 check maxconn 1000 verify none
backend letsmeet-backend
fullconn 4000
balance leastconn
stick-table type ip size 200k expire 30m
stick on src
hash-type consistent
server edumeet1 192.0.2.1:80 check maxconn 2000 verify none
server edumeet2 192.0.2.2:80 check maxconn 1000 verify none
server edumeet3 192.0.2.3:80 check maxconn 1000 verify none
frontend letsmeet
bind *:80
bind*:443 ssl crt /etc/ssl/edumeet.example.com/edumeet.example.com.pem alpn h2,http/1.1
http-request redirect scheme https if !{ ssl_fc }
http-request add-header X-Forwarded-Proto https
stats enable
stats uri /static/stats
#stats hide-version
stats refresh 10s
stats admin if TRUE
#stats admin if LOCALHOST
stats realm Haproxy\ Statistics
stats auth admin:password
maxconn 6000
acl roomId-acl url_param(roomId) -m found
acl callback-acl path_beg /auth/callback
use_backend letsmeet-room-backend if roomId-acl || callback-acl
default_backend letsmeet-backend
server mm1 192.0.2.1:80 check maxconn 2000 verify none
server mm2 192.0.2.2:80 check maxconn 2000 verify none
server mm3 192.0.2.3:80 check maxconn 2000 verify none
frontend meet.example.com
bind 192.0.2.5:80
bind 192.0.2.5:443 ssl crt /root/certificate.pem
http-request redirect scheme https unless { ssl_fc }
reqadd X-Forwarded-Proto:\ https
default_backend edumeet
```
* Creating cert with letsencrypt :
``` bash
sudo cat /etc/letsencrypt/live/edumeet.example.com/fullchain.pem /etc/letsencrypt/live/edumeet.example.com/privkey.pem | sudo tee /etc/ssl/edumeet.example.com/edumeet.example.com.pem
```

View file

@ -1,32 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIFhTCCA22gAwIBAgIUKWAvYO7nVQFx8sxCwR4K8hlj/GEwDQYJKoZIhvcNAQEL
BQAwUjELMAkGA1UEBhMCRVUxEDAOBgNVBAgMB2VkdW1lZXQxDTALBgNVBAcMBGRl
bW8xEDAOBgNVBAoMB2VkdW1lZXQxEDAOBgNVBAMMB2VkdW1lZXQwHhcNMjIwMjI2
MjIxNzQ0WhcNMjMwMjI2MjIxNzQ0WjBSMQswCQYDVQQGEwJFVTEQMA4GA1UECAwH
ZWR1bWVldDENMAsGA1UEBwwEZGVtbzEQMA4GA1UECgwHZWR1bWVldDEQMA4GA1UE
AwwHZWR1bWVldDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALNo8HRJ
LVKW2ngMjAoFT6Dh1gP0eivscqHKEdc4LHWtoYjMpUNPbXH2E3+sc5NHTmYUm+e9
/D+xJ3vF9EOB4W7IY2EROPeLF3mxSGizJMst3/p7rbOG+1qErODd1o21oy1fsJHS
1HB1udeYKRyTpsGrlc8faMGBnwkqaJm9SwuUU75sreTSdDwZEVGs49OSGZPKo42S
J2gcYbEDUw/cUZRcueck/fN5Wx/05TWsMUKZ/kbsFgWrdfrZvMTfyrs0XgBTRUc0
P9IdQAHRkOtFQZ18xAgsbJ/9KFgz429lb4BZrEZEjVOrhQ1Vq1H55rNb5+urFzFP
xFBqJGA1I4I3D6pcP+RIphWEbDGWelBQ4L/PaLRIJw6ShdpEfTPZYjZro7kbMxJC
JEoqrJChu0JO+l+N8qtLkpnghgrI8I5FfZKxDEuGHk6YnQWIeusY9PZ91gyFpy1S
Y2Kq8e4mpuF/jO/857UXo2JQhGsRPItHvj9AeqmjjZr2dm1mIqWGTmPyNpLm5sWA
bsFtLgBTKfpgErugh6KvK15jWVhl3i0Ls9C5feU2wU7dk61qH1RiOU8gBeZiYW+6
kD8WSddd8PEiYHMZ0peMMJoFfbl+02uCLi4LACWzwl2Gm9JkUgL7vX0SOA96F2f+
+QyLLvIB+nhhMaitw0QvT+Hugab4yXBJBFvZAgMBAAGjUzBRMB0GA1UdDgQWBBQy
a2ibEZ7zhfBF/KZNUrBO0wIIODAfBgNVHSMEGDAWgBQya2ibEZ7zhfBF/KZNUrBO
0wIIODAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4ICAQAKbNSY1dnm
gj36y4+XJ2CC7o3JtY17sjCRpQxgj/vIoX72OyV5HYbkwGq9k4jJ00fIEuzojuGa
i4ZuxYgVfdZG2W2/tI8H8G/JfNkolm2sOX8SUmAEbUsgCiT32Er/y9Asm0UY/sWA
t6TPV0dxrcH58yHOU0Wgu2MPcaidBxc3MAE12MHoIOk4ioCrgvJQyCszJRBSTSd1
UO6L1pMBzV6/ElxalU64lEO9/v25KBDAeI96g5jEYIEz9Wo1xLeflU3Ug6/XyytM
4egYwKZpHNKzUOTr1eq1tBbaRY4nBGNVR0MIwSskgahzCR1ieYPvSXGceme9a4Ig
bXkFuOo+xEVFXCgdImK+TuDEhOlH/ioP8v9zUqwXHGWzO95gtY2lnPufFJjSvXL3
BicYHBQ2G37rcv7cDLF3JuJRzn7PrWtBB2OOFvixQHP9H7ynOMf00myFUG8q4isC
q1/ZP79/uEB3Aq+1cMUTaoDt7uFIqSTowQiOi6aInW6eqeToJETR0wVIGkOgieMC
+qgS1lKQGqKNOgsuz4BQub/lr9jhOrmDMNGI82ZNNmRlLJgN8zxf5ZCnO7OF+WCr
+9vzJ8MJa4gO9EAWWeJQi9hyrmLIY9mA1pOhPCcROXhc5eyz/Q9q2AWSZlmDeN3e
UWbGZK1XT8BAIEcpJZczbYt/XJKnQ8K2HA==
-----END CERTIFICATE-----

View file

@ -1,52 +0,0 @@
-----BEGIN PRIVATE KEY-----
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
3FD+CVuiwTatCHF5ABS4cF2dhQrzIuQY
-----END PRIVATE KEY-----

View file

@ -0,0 +1,20 @@
-----BEGIN CERTIFICATE-----
MIIDTTCCAjWgAwIBAgIEWPyBpzANBgkqhkiG9w0BAQUFADBQMSEwHwYDVQQDDBht
ZWRpYXNvdXAtZGVtby5sb2NhbGhvc3QxFzAVBgNVBAoMDm1lZGlhc291cC1kZW1v
MRIwEAYDVQQLDAltZWRpYXNvdXAwHhcNMTcwNDIyMTAyNzU1WhcNMzcwNDE4MTAy
NzU1WjBQMSEwHwYDVQQDDBhtZWRpYXNvdXAtZGVtby5sb2NhbGhvc3QxFzAVBgNV
BAoMDm1lZGlhc291cC1kZW1vMRIwEAYDVQQLDAltZWRpYXNvdXAwggEiMA0GCSqG
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCynyO1szmonG3dk+SSQflM5DqzBNTI8ufA
9Za8ltCmq211y6N9cjhKexHS/Eiu8x907QFNgzcagVgrPAA7XJJdckoupKsf4Qrk
wWrpW7s/nJV2H04oIShAdWWbVckRhMLzdz+VWV0rM4AtjBxYu89B3OH9C1p4uYGH
3i4/E147gmk+NaYdddUhYbKYTBhjtjrC2IN/lHT+VfGX8yJ0q0J9Pv6B+17pYJ1P
QAyGhgzmvvi500t1Ke42EI7QOYAGzOw7S/zNl7lBVmXdQGmpGipD7sMVg56txNmt
7RRETaaQ5uNpCxkBcJdIX/DzGV9xNKFoMLm1GUEdTY1RnM7jN0HNAgMBAAGjLzAt
MAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFDazfBdo/7PNIfarcfMY6txrxQgoMA0G
CSqGSIb3DQEBBQUAA4IBAQCtqv4Wsnp658HxYyDBxX6CnFpnNfMDqeE8scFeihmX
X3AtJwWMWZJpOX26eOlVqee1h3QyTmvnITau+1Sphttt6EYoHBBHC5It4sCV/kwm
6iiKKah0uxlXUyoj0ylRMwBA16b922OXm8ozDzo3FQWASLstYaUQf1kJtLQimGrH
a4YYiQtRkCO7NvGjaHS8zwmkUdOy8mE1sXol8CiiwCJPGF5vUQMQzj1zqOhQEPLM
44XCmM1CawTfFLhwmgZpPPzYCDMfEz1tF5M/ODOtSTytGoa0H2q4YpXVCiftAQV5
fpSOlyqYaVk7oBkrHS6I6n58MATfuKcPn5YMJ8S/64u1
-----END CERTIFICATE-----

View file

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAsp8jtbM5qJxt3ZPkkkH5TOQ6swTUyPLnwPWWvJbQpqttdcuj
fXI4SnsR0vxIrvMfdO0BTYM3GoFYKzwAO1ySXXJKLqSrH+EK5MFq6Vu7P5yVdh9O
KCEoQHVlm1XJEYTC83c/lVldKzOALYwcWLvPQdzh/QtaeLmBh94uPxNeO4JpPjWm
HXXVIWGymEwYY7Y6wtiDf5R0/lXxl/MidKtCfT7+gfte6WCdT0AMhoYM5r74udNL
dSnuNhCO0DmABszsO0v8zZe5QVZl3UBpqRoqQ+7DFYOercTZre0URE2mkObjaQsZ
AXCXSF/w8xlfcTShaDC5tRlBHU2NUZzO4zdBzQIDAQABAoIBABLK2WfxbjyGEK0C
NUcJ99+WF3LkLDrkC2vqqqw2tccDPCXrgczd6nwzjIGFF2SIoaOcl8l+55o7R3ps
+p1ENQXt004q9vIIrCu7CbN5ei7MG5Fs470nF+QINeNs2BWmwRf6UM82sq2r4m1o
U0cmozyLr57+xcrzwWP5BSaPtBdQiPjzML7E4PIg9WHbUhYjtgc90a0ruHhp9rlR
QbFsxX9KMcTeJN+pQA+dJWlJrP4EuQurIyupl2zx+XLBzb9j4pL9wlklu3IFI6v+
k+FVTVKXqjndanCbeOvPTli01ILng5UNUEsleWbuvFLuiXlSkduhDVBWECmNxJIR
VCP46EECgYEA6HYNBSyb1NtxXx0Pv2Itg4TbRSP1vQOoQjJzBjrE6FYQJf6lOgMn
sQJFGmZMXiKcyG729Ntw3gvFjnk25V4DNsK1mbLy9cBO8ETMpm2NfAt9QnH40rmp
nd9cgu6v3AFvlBwNJAGsGRFDgshExeQlY28aQy5FevsHE/wc3UpDfRECgYEAxLVw
ocJX/PfvhwW8S0neGtJ4n8h3MLczOxAbHulG44aTwijSIBRxS1E0h+w0jG8Lwr/O
518RpevKhcoGQtf0XuRu1TP2UAtF/rSflCg8a/zHUBen5N2loOWc7Pd9S71klDoi
en7d1NIUZq4Cljb1D1UYW9Ek6wQ9tQFe5EtaKP0CgYAB+N5raNF5oNL5Z5m2mfKg
5wOlNoTjMaC/zwXCy8TX48MHT32/XD999PL5Il0Lf2etG6Pkt+fhOmBWsRiSIZYN
ZOF9iFMfWp5Q04SY9Nz6bG6HncfqocCaokZ6pePADhMQQpyp7Ym0PL1B4skSlLjs
ewjSARZ90JtixATKq9KewQKBgB1T294SJqItqQWdgkxLUBT5qkhQUAzwU3AL369F
Im+Lwf3hripgQd/z1HwraE5DxCIeDNAMKYpuVDyMOVC/98wqDKg23hNjCuWFsoEZ
WqDTCDhVvo9tyGLruPDPmVuweg1reXZ/8bzoMWh5qyMQQIsvqbkOvo1XjYeuE6K/
5UpVAoGBAIvYtZi1a2UFhJmKNaa0dnOWhLAtWjsOh7+k/nM36Zgl1/W7veWD3yiA
HTbyFYK0Rq696OAlVemEVNVEm4bgS2reEJHWYwrQBc07iYVww+qWkocKUVfNmuvd
BUx/QnIKZAhFpDFYLoLUddnxOsLJd4CiuXeVEaLsLZ+eZcIlzWPc
-----END RSA PRIVATE KEY-----

View file

@ -16,8 +16,8 @@
| redisOptions.password | Redis server password. | `"string"` | ``""`` |
| cookieSecret | Session cookie secret. | `"string"` | ``"T0P-S3cR3t_cook!e"`` |
| cookieName | Session cookie name. | `"string"` | ``"edumeet.sid"`` |
| tls.cert | SSL certificate path. | `"string"` | ``"./certs/edumeet-demo-cert.pem"`` |
| tls.key | SSL key path. | `"string"` | ``"./certs/edumeet-demo-key.pem"`` |
| tls.cert | SSL certificate path. | `"string"` | ``"./certs/mediasoup-demo.localhost.cert.pem"`` |
| tls.key | SSL key path. | `"string"` | ``"./certs/mediasoup-demo.localhost.key.pem"`` |
| listeningHost | The listening Host or IP address. | `"string"` | ``"0.0.0.0"`` |
| listeningPort | The HTTPS listening port. | `"port"` | ``443`` |
| listeningRedirectPort | The HTTP server listening port used for redirecting any HTTP request to HTTPS. If 0, the redirect server is disabled. | `"port"` | ``8080`` |

View file

@ -5,8 +5,8 @@
"fileTracker" : "wss://tracker.openwebtorrent.com",
"tls" : {
"cert" : "./certs/edumeet-demo-cert.pem",
"key" : "./certs/edumeet-demo-key.pem"
"cert" : "/opt/edumeet/server/certs/cert.pem",
"key" : "/opt/edumeet/server/certs/privkey.pem"
},
"turnAPIKey" : "Your API key",

View file

@ -5,8 +5,8 @@ turnAPIKey = "Your API key"
turnAPIURI = "https://host.domain.tld/turn"
[tls]
cert = "./certs/edumeet-demo-cert.pem"
key = "./certs/edumeet-demo-key.pem"
cert = "/opt/edumeet/server/certs/cert.pem"
key = "/opt/edumeet/server/certs/privkey.pem"
[backupTurnServers]
urls = [ "turn:host.domain.tld:443?transport=tcp" ]

View file

@ -1,11 +1,11 @@
listeningPort: 443
listeningHost: host.domain.tld
fileTracker: "wss://tracker.openwebtorrent.com"
fileTracker" : "wss://tracker.openwebtorrent.com"
tls:
cert: ./certs/edumeet-demo-cert.pem
key: ./certs/edumeet-demo-key.pem
key: /opt/edumeet/server/certs/privkey.pem
cert: /opt/edumeet/server/certs/cert.pem
turnAPIURI: "https://host.domain.tld/turn"
turnAPIKey: "Your API key"
@ -32,3 +32,4 @@ mediasoup:
listenIps:
- ip: "PUBLIC_IP_ADDRESS"
announcedIp: ""

View file

@ -32,7 +32,7 @@ import {
const logger = new Logger('config');
// add network interfaces list
const ifaceWhiteListRegex = '^(eth.*)|(enp.*)|(ens.*)|(br.*)|(wl.*)|(ww.*)';
const ifaceWhiteListRegex = '^(eth.*)|(ens.*)|(br.*)|(wl.*)|(ww.*)';
// add parsers
convict.addParser([
@ -184,12 +184,12 @@ const configSchema = convict({
cert : {
doc : 'SSL certificate path.',
format : String,
default : './certs/edumeet-demo-cert.pem'
default : './certs/mediasoup-demo.localhost.cert.pem'
},
key : {
doc : 'SSL key path.',
format : String,
default : './certs/edumeet-demo-key.pem'
default : './certs/mediasoup-demo.localhost.key.pem'
}
},
listeningHost : {

View file

@ -1,6 +1,6 @@
{
"name": "edumeet-server",
"version": "3.5.5",
"version": "3.5.0",
"private": true,
"description": "edumeet server",
"author": "Håvar Aambø Fosstveit <h@fosstveit.net>",
@ -15,7 +15,7 @@
"main": "lib/index.js",
"scripts": {
"start": "node dist/server.js",
"build": "mkdir -p dist && touch dist/tmp && find dist/* -maxdepth 0 ! -name public -exec rm -rf {} \\; && tsc && ln -s ../certs dist/certs && chmod 755 dist/server.js && ( for fileExt in yaml json toml ; do [ -f config/config.$fileExt ] && cp config/config.$fileExt dist/config/; done ) | true && touch 'dist/ __AUTO_GENERATED_CONTENT_REFRESHED_AFTER_REBUILDING!__ '",
"build": "mkdir -p dist && find dist/* -maxdepth 0 ! -name public -exec rm -rf {} \\; && tsc && ln -s ../certs dist/certs && chmod 755 dist/server.js && ( [ -f config/config.yaml ] && cp config/config.yaml dist/config/ ) | true && touch 'dist/ __AUTO_GENERATED_CONTENT_REFRESHED_AFTER_REBUILDING!__ '",
"dev": "nodemon --exec ts-node --ignore dist/ -e js,ts server.js",
"connect": "ts-node connect.js",
"lint": "eslint ./ --ext .js,.ts; exit 0",
@ -43,7 +43,7 @@
"ims-lti": "^3.0.2",
"json5": "^2.2.0",
"jsonwebtoken": "^8.5.1",
"mediasoup": "3.10.5",
"mediasoup": "3.9.6",
"openid-client": "^3.7.3",
"passport": "^0.4.0",
"passport-local": "^1.0.0",

View file

@ -909,7 +909,7 @@ debug@2.6.9, debug@^2.6.9, debug@~2.6.0:
dependencies:
ms "2.0.0"
debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2:
debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3:
version "4.3.3"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664"
integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
@ -923,13 +923,6 @@ debug@^3.2.7:
dependencies:
ms "^2.1.1"
debug@^4.3.4:
version "4.3.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
dependencies:
ms "2.1.2"
debug@~3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
@ -1488,9 +1481,9 @@ flatted@^2.0.0:
integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
follow-redirects@^1.14.0:
version "1.14.9"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7"
integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==
version "1.14.7"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.7.tgz#2004c02eb9436eee9a21446a6477debf17e81685"
integrity sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==
form-data@^2.5.0:
version "2.5.1"
@ -2196,15 +2189,16 @@ media-typer@0.3.0:
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
mediasoup@3.10.5:
version "3.10.5"
resolved "https://registry.yarnpkg.com/mediasoup/-/mediasoup-3.10.5.tgz#bbc0da60286b4c9e44331308249d123a0e996738"
integrity sha512-qYxJvCPcHndEP5vuIUgk+b/YjFq2vlVxX7BnYLxhTC/qYZF6103o/6J7HgwxAfLpkLLEyBq+g3nSBXxretPo/Q==
mediasoup@3.9.6:
version "3.9.6"
resolved "https://registry.yarnpkg.com/mediasoup/-/mediasoup-3.9.6.tgz#406d6e5eea9096fa55df2b890ab1c42df2547b15"
integrity sha512-eRWdsyO5m9IN3EHJ1cST4Muv+ddhZbBcvDLUGHVoRm34l5xiB/2F9H0iL7aASVSis0yWN9O/ogqEAb4J6xDDlA==
dependencies:
"@types/node" "^16.11.10"
debug "^4.3.4"
debug "^4.3.3"
h264-profile-level-id "^1.0.1"
supports-color "^9.2.2"
random-number "^0.0.9"
supports-color "^9.2.1"
uuid "^8.3.2"
merge-descriptors@1.0.1:
@ -2704,6 +2698,11 @@ random-bytes@~1.0.0:
resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b"
integrity sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=
random-number@^0.0.9:
version "0.0.9"
resolved "https://registry.yarnpkg.com/random-number/-/random-number-0.0.9.tgz#5907b96f05041807c52aed601c869524d86fbbd5"
integrity sha512-ipG3kRCREi/YQpi2A5QGcvDz1KemohovWmH6qGfboVyyGdR2t/7zQz0vFxrfxpbHQgPPdtVlUDaks3aikD1Ljw==
range-parser@~1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
@ -3155,10 +3154,10 @@ supports-color@^7.1.0:
dependencies:
has-flag "^4.0.0"
supports-color@^9.2.2:
version "9.3.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.3.0.tgz#cce566c5ad562eece4dfe5a4502a58efc54986a9"
integrity sha512-hJ6RYjNbcBFkpHi+ykjar+7GgHs+65Kxyw940nBLOSjaWZ13acq4A5f+gWiV5w+xfsg5MbnjDxTigLcUuljerw==
supports-color@^9.2.1:
version "9.2.1"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.2.1.tgz#599dc9d45acf74c6176e0d880bab1d7d718fe891"
integrity sha512-Obv7ycoCTG51N7y175StI9BlAXrmgZrFhZOb0/PyjHBher/NmsdBgbbQ1Inhq+gIhz6+7Gb+jWF2Vqi7Mf1xnQ==
supports-preserve-symlinks-flag@^1.0.0:
version "1.0.0"