• Stars
    star
    1,720
  • Rank 27,128 (Top 0.6 %)
  • Language
    JavaScript
  • License
    GNU Affero Genera...
  • Created about 11 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Online collaborative Whiteboard that is simple, free, easy to use and to deploy

WBO

WBO is an online collaborative whiteboard that allows many users to draw simultaneously on a large virtual board. The board is updated in real time for all connected users, and its state is always persisted. It can be used for many different purposes, including art, entertainment, design, teaching.

A demonstration server is available at wbo.ophir.dev

Screenshots

The anonymous board collaborative diagram editing Screenshot of WBO's user interface: architecture
teaching math on WBO wbo teaching drawing art kawai cats on WBO

Running your own instance of WBO

If you have your own web server, and want to run a private instance of WBO on it, you can. It should be very easy to get it running on your own server.

Running the code in a container (safer)

If you use the docker containerization service, you can easily run WBO as a container. An official docker image for WBO is hosted on dockerhub as lovasoa/wbo: WBO 1M docker pulls.

You can run the following bash command to launch WBO on port 5001, while persisting the boards outside of docker:

mkdir wbo-boards # Create a directory that will contain your whiteboards
chown -R 1000:1000 wbo-boards # Make this directory accessible to WBO
docker run -it --publish 5001:80 --volume "$(pwd)/wbo-boards:/opt/app/server-data" lovasoa/wbo:latest # run wbo

You can then access WBO at http://localhost:5001.

Running the code without a container

Alternatively, you can run the code with node.js directly, without docker.

First, download the sources:

git clone https://github.com/lovasoa/whitebophir.git
cd whitebophir

Then install node.js (v10.0 or superior) if you don't have it already, then install WBO's dependencies:

npm install --production

Finally, you can start the server:

PORT=5001 npm start

This will run WBO directly on your machine, on port 5001, without any isolation from the other services. You can also use an invokation like

PORT=5001 HOST=127.0.0.1 npm start

to make whitebophir only listen on the loopback device. This is useful if you want to put whitebophir behind a reverse proxy.

Running WBO on a subfolder

By default, WBO launches its own web server and serves all of its content at the root of the server (on /). If you want to make the server accessible with a different path like https://your.domain.com/wbo/ you have to setup a reverse proxy. See instructions on our Wiki about how to setup a reverse proxy for WBO.

Translations

WBO is available in multiple languages. The translations are stored in server/translations.json. If you feel like contributing to this collaborative project, you can translate WBO into your own language.

Authentication

WBO supports authentication using Json Web Tokens. This should be passed in as a query with the key token, eg, http://myboard.com/boards/test?token={token}

The AUTH_SECRET_KEY variable in configuration.js should be filled with the secret key for the JWT.

Within the payload, you can declare the user's roles as an array. Currently the only accepted roles are moderator and editor.

  • moderator will give the user an additional tool to wipe all data from the board. To declare this role, see the example below.
  • editor will give the user the ability to edit the board. This is the default role for all users.
{
  "iat": 1516239022,
  "exp": 1516298489,
  "roles": ["moderator"]
}

Moderators have access to the Clear tool, which will wipe all content from the board.

Board name verification in the JWT

WBO supports verification of the board with a JWT.

To check for a valid board name just add the board name to the role with a ":". With this you can set a moderator for a specific board.

{
  "roles": ["moderator:<boardName1>","moderator:<boardName2>","editor:<boardName3>","editor:<boardName4>"]
}

eg, http://myboard.com/boards/mySecretBoardName?token={token}

{
  "iat": 1516239022,
  "exp": 1516298489,
  "roles": ["moderator:mySecretBoardName"]
}

You can now be sure that only users who have the correct token have access to the board with the specific name.

Configuration

When you start a WBO server, it loads its configuration from several environment variables. You can see a list of these variables in configuration.js. Some important environment variables are :

  • WBO_HISTORY_DIR : configures the directory where the boards are saved. Defaults to ./server-data/.
  • WBO_MAX_EMIT_COUNT : the maximum number of messages that a client can send per unit of time. Increase this value if you want smoother drawings, at the expense of being susceptible to denial of service attacks if your server does not have enough processing power. By default, the units of this quantity are messages per 4 seconds, and the default value is 192.
  • AUTH_SECRET_KEY : If you would like to authenticate your boards using jwt, this declares the secret key.

Troubleshooting

If you experience an issue or want to propose a new feature in WBO, please open a github issue.

Monitoring

If you are self-hosting a WBO instance, you may want to monitor its load, the number of connected users, and various other metrics.

You can start WBO with the STATSD_URL environment variable to send it to a statsd-compatible metrics collection agent.

Example: docker run -e STATSD_URL=udp://127.0.0.1:8125 lovasoa/wbo.

  • If you use prometheus, you can collect the metrics with statsd-exporter.
  • If you use datadog, you can collect the metrics with dogstatsd.

More Repositories

1

react-contenteditable

React component for a div with editable contents
TypeScript
1,612
star
2

dezoomify

Dezoomify is a web application to download zoomable images from museum websites, image galleries, and map viewers. Many different zoomable image technologies are supported.
JavaScript
581
star
3

marshmallow_dataclass

Automatic generation of marshmallow schemas from dataclasses.
Python
452
star
4

dezoomify-rs

Zoomable image downloader for Google Arts & Culture, Zoomify, IIIF, and others
Rust
437
star
5

bad_json_parsers

Exposing problems in json parsers of several programming languages.
Python
363
star
6

sanipasse

Vérificateur de passe sanitaire open-source
Svelte
176
star
7

json_in_type

Fast json encoder in rust, that encodes the structure of JSON values in their types
Rust
82
star
8

custom_error

Define custom errors without boilerplate using the custom_error! macro.
Rust
70
star
9

ophirofox

Une extension pour navigateur qui permet de lire les articles de presse en ligne sur le compte de bibliothèques ayant souscrit à europresse
JavaScript
59
star
10

pagelabels-py

Python library to manipulate PDF page labels
Python
55
star
11

highs-js

Javascript linear programming library
JavaScript
45
star
12

salesman.js

Solves the traveling salesman problem using simulated annealing.
JavaScript
43
star
13

linear-solve

Small javascript library to solve a system of linear equations, invert a matrix, and nothing more.
JavaScript
38
star
14

bloomfilter

Simplistic (but fast) java implementation of a bloom filter.
Java
37
star
15

mandelbrot

A mandelbrot fractal viewer in javascript using svelte
JavaScript
34
star
16

bin2png

Embed binary data inside an HTML file in an efficient way.
JavaScript
34
star
17

dezoomify-extension

A browser extension to detect zoomable images in web pages and downloading them with dezoomify
JavaScript
33
star
18

TPCH-sqlite

SQLite TPCH database
Shell
32
star
19

Sensitive-Topic-History-Quiz

This is the only place where me, the human is talking. All of the files in this repo were generated by ChatGPT. They required hours of interactions with the language model to make it fix its own bugs, and create coherent components, but I am very proud of the result.
JavaScript
31
star
20

fast_array_intersect

The fastest javascript array intersection function
JavaScript
18
star
21

eml2csv

Convert a collection of eml files to CSV
Python
17
star
22

SQLpage

SQL-only webapp builder, empowering data analysts to build websites and applications quickly
Rust
17
star
23

dia2code

Dia2Code is a small utility used to generate code from a Dia diagram.
C
14
star
24

historique-velib-opendata

Historique des données d'occupation de stations vélib' (publiées en opendata)
Python
13
star
25

musreact

Mustache template to react component compiler
JavaScript
12
star
26

graham-fast

Graham scan implementation in javascript
JavaScript
10
star
27

html2unicode

Node module for transforming HTML into unicode
JavaScript
10
star
28

wordsearch

Search words by regex
Svelte
9
star
29

seamcarving

Seam carving implemented in rust
Rust
9
star
30

ZIF

zif file format documantation and tools
JavaScript
9
star
31

samsung-email-password-decrypt

Decrypt encrypted passwords in EmailProvider.db on samsung phones.
Java
9
star
32

dezoom.sh

Download and assemble tiled images. Dezoomify for bash. Depends on imagemagick
Shell
8
star
33

github-sloc

Firefox extension that prints the number of lines of code of a project on project pages on github.
JavaScript
8
star
34

wikipedia-externallinks-fast-extraction

Fast extraction of all external links from wikipedia
Rust
8
star
35

lagrange-cpp

Lagrange interpolation polynomials in C++11
C++
7
star
36

gnome-keyboard-backlight-menu

Set the keyboard backlight brightness with a slider in gnome shell's system menu.
JavaScript
7
star
37

docurun

JavaScript
6
star
38

rectangle-overlap

Fastly compute the intersection of two rectangles.
TypeScript
6
star
39

pyformat-challenge

Python format string vulnerability exploitation challenge
Python
6
star
40

memoization

Straightforward implementation of memoization in javascript
JavaScript
6
star
41

reg

rÊg is a simple grid game
JavaScript
5
star
42

dezoomify-py

Fork of https://sourceforge.net/projects/dezoomify/
Python
5
star
43

haskell-exercises

Exercices pour apprendre le haskell
Haskell
4
star
44

GoodChat

Simple chat application with ES6 + Vue.js + CouchDB
JavaScript
4
star
45

kdsearch

Search k-dimensional datasets efficiently using KDTrees
Python
4
star
46

secured-file-transfer

Secured file transfer implemented in nodeJS.
JavaScript
4
star
47

expectation-maximization

Multivariate gaussian fit with expectation–maximization (EM) algorithm in javascript.
JavaScript
4
star
48

maya_numerals_converter

Online decimal to maya numeral converter.
HTML
4
star
49

BarcodeDetector-api-demo

A quick demo for the Barcode Detection API
HTML
4
star
50

pff-extract

pff (zoomify single-file image format) to jpeg converter
C
3
star
51

choices

Represent a choice between multiple values, using radio buttons, checkboxes, or HTML's <select> element
Elm
3
star
52

elm-rolling-list

A circular buffer implementation in Elm.
Elm
3
star
53

robots

Multi-agents system where robots go fetch materials.
HTML
2
star
54

RLE

Run-length encoding and decoding in haskell.
Haskell
2
star
55

multivariate-gaussian

Multivariate normal distribution density function implemented in javascript
JavaScript
2
star
56

emotions

Detect emotions from webcam images.
CSS
2
star
57

download-book-of-kells

Shell
2
star
58

parse_wiki_text

Parse wiki text from Mediawiki into a tree of elements
Rust
2
star
59

SuperLogger

Log system information using logstash, store the information on ElasticSearch, and visualize it using Kibana.
Java
2
star
60

elm-jsonpseudolist

Elm Json.Decoder for javascript Array-like objects
Elm
2
star
61

SearchHitIterator

Java iterator for elasticsearch scrolls
Java
2
star
62

setup-emscripten

emscripten github action
JavaScript
2
star
63

sha_hashes

Collection of sha hashes of common passwords
2
star
64

sql2json

Convert sql database dumps to JSON
Rust
2
star
65

2048.lua

lua implementation of the popular game "2048". The aim is to merge tiles until you get a 2048 tile. Original game by @gabrielecirulli on http://gabrielecirulli.github.io/2048/ .
Lua
2
star
66

csv-fill-docx

Fill docx templates with data from a csv file
JavaScript
1
star
67

c-osi

C interface to Open Solver Interface solvers for easy integration with external solvers
C++
1
star
68

lovasoa.github.io

Github pages root
HTML
1
star
69

cemantriche

Cémantriche, pour tricher à cémantix
Jupyter Notebook
1
star
70

resume

Ophir LOJKINE's resume, in the jsonresume format.
1
star
71

lsystems

Haskell implementation of l systems
Haskell
1
star
72

libepeg.js

epeg compiled to javascript. Fast jpeg thumbnailing.
C
1
star
73

doublons-js

Find duplicates files in a folder (search files with similar names). GUI application with node-webkit.
JavaScript
1
star
74

ruzzleplayer

Javascript implementation of an algorithm that plays the mobile game "ruzzle"
JavaScript
1
star
75

ophir_odt_import

Drupal module to import odt (OpenDocument) files into drupal nodes.
PHP
1
star
76

kaigit

Svelte
1
star
77

srtmove-hs

Delay .srt subtitles
Haskell
1
star
78

find-candidate-keys

Finds the candidate keys from a list of functionnal dependencies
JavaScript
1
star
79

comptes

Expenses management for friends
JavaScript
1
star
80

poker

poker probabilities map
JavaScript
1
star
81

omodbus

OModbus is a GUI to interact with modbus devices
HTML
1
star
82

elm-fileinput

<input type="file" /> for Elm
Elm
1
star
83

elm-base-repo

Base repository containing an empty elm module, ready tobe forked.
Elm
1
star
84

dezoomify-browser

This is a small browser that automatically launches dezoomify when it meets a zoomified image. Uses node-webkit.
JavaScript
1
star
85

anylang

Type text in any alphabet. Anylang is a javascript library that converts a phonetic transcription of a text in a language to a text written in the alphabet of the target language. Currently works with hebrew (with vowels) and russian.
JavaScript
1
star
86

qrcode-dataset

A large dataset of partially damaged and distorted QR code images to be used for benchmarking scanning libraries and training new models
Python
1
star
87

srtmove-js

Short javascript program with an HTML interface to move subtitles (add or remove time) to an existing srt file.
JavaScript
1
star
88

dataiku-exercise

US census visualization web application. Given as an exercise by dataiku after a job interview. I didn't get the job.
Elm
1
star