Commit Graph

2229 Commits

Author SHA1 Message Date
Gustavo Trott
06b494a93a Add column deletedBy for chat messages 2024-10-02 17:33:34 -03:00
Gustavo Trott
8dd48b5fe1 rename updatedAt to editedAt, and set it in akka-apps instead of pg trigger 2024-10-02 16:22:01 -03:00
Gustavo Trott
a6fc59ba46 Allow to edit and delete chat messages through graphql
It introduces the mutations:
chatEditMessage
chatDeleteMessage

The type chat_message receive two new fields:
updatedAt
deletedAt

A new table chat_message_history was introduced to store the previous version of an edited or deleted message.

When removed the message is not deleted, but the content become null and deletedAt populated. So the idea is to show "This message was removed" in the client.
2024-10-02 15:18:21 -03:00
Gustavo Trott
91cf45106b
Merge pull request #21303 from gustavotrott/gql-user-screenshare-as-camera
gql-server: Allow all users to share screens (not only presenter) (backend portion)
2024-10-01 15:37:33 -03:00
Gustavo Trott
0e7c7828ce
Update akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/webcam/UserBroadcastCamStartMsgHdlr.scala
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2024-10-01 15:36:56 -03:00
Gustavo Trott
9e8b1ffc4e new index 2024-10-01 15:04:21 -03:00
Gustavo Trott
3fb6dd71d2 Edit graphql type UserCamera to suport either camera or screenshare
Add fields:
	contentType: to identify whether is camera or screenshare
	hasAudio: useful for screenshare
	focused: indicates if this screenshare will be shown in presentation area
2024-10-01 14:39:48 -03:00
Gustavo Trott
900bc9e476 Add replyToMessageId and messageSequence to chat_message
replyToMessageId will be useful for the feature that enables to reply a message of the chat
messageSequence will be useful to identify the page of that message and scroll the user to the correct page when they click to see the original message
2024-10-01 11:32:58 -03:00
Gustavo Trott
a6ffe1350f
Merge pull request #21102 from gustavotrott/clone-user-session
feat (bbb-web): Implements session duplication with `getJoinUrl` endpoint
2024-09-27 11:33:47 -03:00
Ramón Souza
b8a84b6276
fix: poll results always on first page (#21268) 2024-09-26 16:59:24 -03:00
Gustavo Trott
e70f18be6b
Merge branch 'v3.0.x-release' into clone-user-session 2024-09-26 13:32:22 -03:00
Gustavo Trott
0721bfac75
Merge pull request #21259 from antobinary/move-html5
build: move bbb-html5 files from /var/bigbluebutton
2024-09-25 16:58:29 -03:00
Gustavo Trott
cce7ef8ec2
Merge pull request #21256 from gustavotrott/fix-akka-apps-failing
fix (akka-apps): Improve user joining flow and others
2024-09-25 13:51:56 -03:00
Anton Georgiev
488d78742d build: move bbb-html5 files from /var/bigbluebutton
Closes https://github.com/bigbluebutton/bigbluebutton/issues/21161
As suggested by @danimo the client files for bbb-html5
are not variable/dynamic content and are a better fit for /usr/share
than for /var/bigbluebutton (where they'd also be in the way of
recording files)
2024-09-25 12:39:04 -04:00
Anton Georgiev
6f5482dae3
Merge pull request #21139 from danielpetri1/show-poll-result-in-bbb-playback
refactor(bbb-html5): Remove custom poll shape
2024-09-25 10:39:56 -04:00
Gustavo Trott
df1cb7d7a0 Improve presentation insertion to prevent duplicates.
Previously, we checked if a presentation existed before inserting it into the database. However, concurrent checks sometimes led to race conditions where the same presentation was inserted twice, causing errors and blocking subsequent page additions. This update removes the existence check and directly attempts to insert the presentation using an "IF NOT EXISTS" clause. This streamlines the process, enhances performance, and prevents ID duplication errors.
2024-09-25 10:10:50 -03:00
Gustavo Trott
eda341aab5 Increase Pekko message timeout for the /userInfo endpoint to prevent timeouts when fetching user information. During high load or cold starts, establishing connections between actors can exceed 2 seconds. This change avoids such issues by extending the timeout.
Also added more details to middleware logs to clarify reasons for user authorization failures, making debugging easier.
2024-09-25 10:05:29 -03:00
Gustavo Trott
e5fcdce396 Refactor user join handler (in akka-apps) to refresh Hasura role before setting joined=true in the database.
Ensure that the GraphQL reconnection—and thus the user's Hasura role update from `bbb_client_not_in_meeting` to `bbb_client`—occurs before the client is informed they've joined (`joined=true`). This prevents a race condition where the client might send GraphQL queries before having the necessary permissions, as only `bbb_client` can perform most queries. By updating the role first, we guarantee the client can successfully execute queries after joining.
2024-09-25 09:56:37 -03:00
danielpetri1
82b02e7fd2 Remove slide size probing from bbb-export-annotations 2024-09-24 13:59:01 +00:00
Gustavo Trott
394f01bf9f resolve conflicts 2024-09-24 10:07:46 -03:00
Gustavo Trott
02bdd3c703 Renames the param Revoke to Replace, once it will better explain the reason the previous session is being invalidated
Starts supporting the param enforceLayout, a subsequent PR will finish and document it
Starts supporting user-session-metadata, a subsequent PR will finish and document it
2024-09-24 09:40:00 -03:00
Anton Georgiev
919ae4cb00
Merge branch 'v3.0.x-release' into show-poll-result-in-bbb-playback 2024-09-23 16:06:42 -04:00
danielpetri1
6fa4595b2d Merge branch 'v3.0.x-release' into show-poll-result-in-bbb-playback 2024-09-20 21:26:41 +00:00
danielpetri1
5aeacf115e Position poll in the bottom-right corner 2024-09-20 13:39:31 +00:00
germanocaumo
f7468b6fc2 fix(tldraw): only send diffs updates to server
When a shape is changed, the full shape objcect was being transmitted to the server again.
Do a diff to only send what changed (similarly  as it was in tldraw v1) to save upload bw.

TODO:
Draw segments diffs (array) is still not working, so all the segments are still being sent every time.
2024-09-19 12:38:57 -03:00
Gustavo Trott
e92293993a Merge remote-tracking branch 'upstream/v3.0.x-release' into clone-user-session 2024-09-18 10:05:04 -03:00
Gustavo Trott
69ebbf782f
Merge pull request #21142 from gustavotrott/bkroom-joined-flag-fix
fix (akka-apps): graphql flag `breakoutRoom.hasJoined` is not accurate
2024-09-11 09:17:04 -03:00
danielpetri1
346e96c04e Refactor poll values 2024-09-10 15:28:04 +00:00
danielpetri1
7110652176 Publish the poll to the whiteboard 2024-09-10 14:28:03 +00:00
Gustavo Trott
b141ab40b0 fix: graphql flag breakoutRoom.hasJoined is not accurate 2024-09-10 09:44:58 -03:00
Ramón Souza
0a6dac83b5 adjusts backend so chat lock is ignored for moderators 2024-09-09 13:46:08 -03:00
Gustavo Trott
96f9325ef2 Add userLockSettings to allow disablePublicChat for individual users
This commit introduces `userLockSettings`, which includes an option to set `disablePublicChat` for specific users, rather than only for all locked viewers as before. This implementation covers the backend and GraphQL portions; the frontend changes will be addressed in a separate PR.

This is a port of #20585, originally implemented for version 2.7 using the old architecture with MongoDB.
2024-09-05 18:04:25 -03:00
Gustavo Trott
4ea48b3333 This update allows duplicating a user session via the getJoinUrl endpoint. The generated link will create a new sessionToken while retaining the same userId. This setup enables two devices be represented as a single user on the user list, making it particularly useful for scenarios like transferring a session from a computer to a mobile device.
Additionally, the mobile app can use this feature to render the whiteboard inside an iframe with the same `userId`.

By setting the parameter `revokePreviousSession=true`, a new `sessionToken` will be generated, and the previous session will be revoked when the new device connects. This is useful for transferring a session to another device and automatically closing the previous session.
2024-09-04 21:22:49 -03:00
danielpetri1
fbe99626ff Add new poll shape attributes 2024-09-03 16:19:56 +00:00
Anton Georgiev
dda1682c37
Merge pull request #21016 from prlanzarin/u30/feat/dial-in-guest-config
feat: make guest policy configurable for dial-in endpoints
2024-08-28 16:42:27 -04:00
Anton Georgiev
6e3b83bd60
Merge pull request #20917 from prlanzarin/u30/feat/fs-rec-splitter
feat: add option to split audio recording in multiple files by duration
2024-08-28 16:41:10 -04:00
Gustavo Trott
1cc67a82c8
Merge pull request #21042 from gustavotrott/refactor-isOnline
refactor (gql-server): Introduce flag `currentlyInMeeting` (replacing `isOnline`)
2024-08-28 14:33:52 -03:00
Gustavo Trott
af06562e02 Introduce flag currentlyInMeeting (replacing isOnline) 2024-08-28 11:08:30 -03:00
Gustavo Trott
c56955c842
Merge pull request #21025 from gustavotrott/learning-dashboard-reactions
Refactor Learning Dashboard to use Reactions instead of EmojiStatus
2024-08-27 21:40:57 -03:00
Gustavo Trott
c2b70eb006 validate current away status before setting it (again) 2024-08-26 16:26:03 -03:00
Gustavo Trott
736c9a130f refactor learning dashboard to use Reactions instead of Emojis 2024-08-26 13:40:17 -03:00
danielpetri1
f5443d37a8 Pass poll shapes to tldraw.json 2024-08-24 17:34:45 +00:00
prlanzarin
dd1cf00dd2 feat: make guest policy optional for dial-in in akka-apps
Dial-in endpoints currently follow the same guest approval process as regular
users. While this is correct for default installations, it complicates the join
procedure in setups where approval is managed externally, such as with pre-
configured conference PIN codes. Another relevant scenario is when call
origination is done from BBB, rather than as an inbound call.

This commit makes the enforcement of the guest policy for dial-in/external
endpoints optional in akka-apps. The default behavior remains unchanged
(enforce). This provides more flexibility for the dial-in mechanism, allowing
for smoother handling of the scenarios mentioned above.
2024-08-23 14:54:31 +00:00
João Victor Nunes
fe67566334
[3.0] feat: Accept custom webcamBackgroundURL (#20920)
* [3.0] feat: Accept custom webcamBackgroundURL

* docs: webcamBackgroundURL

* test: Update virtual background thumbnail image

* fix: tweak error logs for the webcamBackgroundURL fetching procedure

* test: Update virtual background thumbnail image

* fix(logging): do not specify null extraInfo object

Co-authored-by: Paulo Lanzarin <4529051+prlanzarin@users.noreply.github.com>

* fix(logging): extract fields from error object for building extraInfo object

Co-authored-by: Paulo Lanzarin <4529051+prlanzarin@users.noreply.github.com>

---------

Co-authored-by: Paulo Lanzarin <4529051+prlanzarin@users.noreply.github.com>
2024-08-23 09:04:56 -03:00
Átila
c48e93e00c
feat(darklogo): port customDarkLogo (#20922) 2024-08-21 14:58:32 -03:00
prlanzarin
4f6e16f8e3 feat(audio): dynamic muteOnStart based on audio user count
The current default setting of muteOnStart=false can lead to performance
issues in larger rooms, especially with the "transparent listen only
mode" and LiveKit, as proven by load testing. In contrast,
muteOnStart=true helps mitigate these issues but complicates the entry
process for smaller meetings, such as 1-on-1 sessions or small classes.
Additionally, the ability to override muteOnStart via the API can create
scalability issues if not managed properly.

Add a new akka-apps flag `voiceConf.muteOnStartThreshold` which acts as
a trigger that forces muteOnStart=true when the number of audio
participants reaches the configured threshold. 0 means no threshold
(disabled).

This trigger overrides any API parameter or static configurations
related to muteOnStart, as well as the client's meeting mute actions.
Pending:
  - Remove MeetingStatus.meetingMute state side effects from the client's
    "Mute all" and "Mute all except presenter" actions. They should no
    longer alter the meeting mute state once this becomes default (just
    mute users instead).
2024-08-15 00:43:36 +00:00
prlanzarin
583eb2014e fix(audio): change unmute/unhold flow to work around FS unmute stutter
FS has an intermittent issue where unmuting a HELD channel sometimes
takes significantly (seconds) longer than usual.
conference <XYZ> unmute <WVU> simply gets stuck with no FS_API response,
which delays the unmute action whenever transparent listen only is
active.

Apparently, unholding the channel PRIOR TO unmuting works around the
issue - at least it could not be reproduced with the scenario at hand.
The unmute API already triggered an unhold in FS internally, which is
the reason why this was not done beforehand. The aforementioned issue is
way worse than an extra "redudant" API call, though.

Always unhold audio channels manually _before_ unmuting.
2024-08-15 00:43:35 +00:00
prlanzarin
196a12cff4 fix(audio): stuck unmute due to borked callerId(Num)
FreeSWITCH incorrectly generates callerNum headers in its ESL events
when specific, special characters are in place. e.g.:
w_etc_0-bbbID-User;Semi (notice the semicolon) will be generated by
FS as w_etc_0-bbbID-User (everything after the semicolon is ignored).
This breaks callerId comparision for session matching in a few places -
one of the is the unmute/unhold toggle control.

Compare callerNum as prefixes instead of exact strings to match those
scenarios.
This is a temporary fix; we should review callerNum generation in the
future (use Caller-Id-Name in FSESL), as well as stop relying on it
for session matching (use UUIDs and/or client session numbers instead).
Both of these are more involved changes, though.
2024-08-15 00:43:33 +00:00
prlanzarin
c10c0a7258 fix(audio): users unable to join audio when mic lock setting is active
Whenever both microphone lock settings and transparent listen are
active, users fail to join audio due to an oversight in the audio join
permission procedure. It's denying users from *joining* audio if they're
locked, even though they should only be prevented from *unmuting*
themselves.

Change the permission checks for audio join to allow users even when
they're locked. Use the lock setting to force the muteOnStart flag for
locked users instead.
2024-08-15 00:43:32 +00:00
prlanzarin
ceff20ff21 fix(audio): always send unhold
Alway send the unhold command since it doesn't change flip the state
(contrary to the uuid_hold toggle command).

It's not idempotent, though - so always update the internal hold state
to prevent state mismatches preventing channels from being unheld.
2024-08-15 00:43:32 +00:00