Aspects * Saving policy * manual saving for now * optional: display a timer to show when it was last saved * note: likely not desirable that there is an automatic saving mode on clients triggering server side saves as this could lead to n client all triggering n update. Especially a risk if one client is partially offline for a bit. * Presencing * Potential issue with users remaining visible * optional: have this cleared out / on a heartbeat so users go away after a time if no activity * Access * Create new privilege, WHITEBOARD_RT_USAGE, which is only allocated to beta testers * Client to check for this privilege when: * Choice to create a callout to people with that privilege * Showing the callout content i.e. to not show the whiteboard contents inside a callout * Authorize if the person is allowed to access the whiteboard (web socket room, not a matrix room), on connection * Routing * Support for the routes to be added to all environments * Multi-server mode * Investigate if we can use rabbitmq to send the whiteboard events between the servers * Fan out i.e. broadcast * Temporary way of doing it without dealing with state Staging: * Working on develop environment * - [x] Server database relations fixed * - [x] Routing * - [x] Preview of image is saved when the whiteboard is saved * Security / access - [X] server privilege + usage of beta tester credential - [x] client to check for the privilege - [x] server to also check for the privilege on the room * Functionality to develop branch, with caveat re code quality * * Working on acceptance * Multi-server mode: Investigate doing the event fan-out to allow working on acceptance * Later * Images uploaded within the whiteboard are propagated * Showing a time since last save * User presencing is removing people ## **Routing example**: server 1 with client 1 + client 2 server 2 with client 3 + client 4 event on server 1 is to update client 3 + 4 via server 2. Server 1 will need to tell server 2 what to do. ## Pros'+ cons with moving quickly to develop Pros * Able to test out the functionality ourselves in a real setup next week at offsite * Surface up other issues / considerations quickly * Cons * Risk to production setup * Deployment: making a new release * Functionality: Mitigated by having separate logic paths for both server + client, and protect via a privilege * Performance: mitigated by having save done manually; to be still further checked * Pause moving other functionality to develop * some PRs will be delayed ## Roadmap Items to be addressed * Automatic saving of the whiteboard * Conflict resolution via y.js protocol * Preview image of whiteboard: do we still want this? * Usability: notification to users when they are not allowed to access a whiteboard * Access v2: who can do what on the whiteboard rt? * Using the read / update privileges directly on the entity, and controlling with flags ## Original requirements This solution will be using the [excalidraw-room](https://github.com/excalidraw/excalidraw-room) and [excalidraw-app](https://github.com/excalidraw/excalidraw/tree/master/src/excalidraw-app) both by Excalidraw. ## Requirements and setup - running on the cloud - sandbox - single instanced - users are authenticated - whiteboard is authorizable - whiteboard does not have a lifecycle - users are able to see each others mouse movements and actions - the connection is not encrypted - the whiteboard is saved - the whiteboard is loaded - the user is forced into collaboration mode from the start to the end - the client is requesting a room with the ID of the whiteboard ### Notes - no hard requirement on how many people can handle - we have to see how it behaves ## Knowns - the client is doing the merge - the client is loading the whiteboard - the client is saving the whiteboard - the logic for encryption needs to be removed - all the UI elements like dialogs and popups need to be removed ## Stories - [ ] strip elements and encryption; pass whiteboard id into the connection request - [ ] API extention for creating a whiteboard without a lifecycle; and the logic related to lifecycles bypassed - [ ] save and load on the client - [x] excalidraw-room integration into alkemio-server - [x] authorizable connection - [ ] authorizable whiteboard on connection