Skip to content

franco-ruggeri/write-together

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Write TOgether

Write TOgether is a real-time collaborative text editor made in PoliTO (Politecnico di Torino) as project of the course System Programming (Programmazione di Sistema). It is inspired by Conclave and Overleaf.

Install dependencies

On Ubuntu

cd scripts/
./install_dependencies.sh

Run the server

On Linux

Server:

  1. [Optional] If you want to use the server not only on localhost:
    1. Change the password in the SQL script and in the code.
    2. Replace certificate and private key for the server. Read the instructions.
  2. Start MySQL and create the database using the SQL script.
  3. Run the server (on port 5000 and with saving period 5 seconds):
    cd scripts/
    ./run.sh server 5000 5000

Run the client

On Linux

  1. Run these commands:
    cd scripts/
    ./install.sh
  2. Launch the application (connect to localhost on port 5000).

Functionalities

Requirements

  • Client-server architecture
  • Each user has a profile (username, name, surname, email, icon)
  • Authentication with username and password
  • Client can sign up and log in
  • Client can edit their profile
  • Client can create or open documents
  • Clients can collaboratively edit documents (coherence guaranteed)
  • Server automatically saves the documents
  • Client shows number and identity of users editing a document
  • Client shows the cursors of the other users
  • Client can highlight the text with colors according to the author

Extensions

  • Export document to PDF
  • Format of characters (bold, italic, underline)
  • Undo, Redo, Cut, Copy, Paste (with menu entries, toolbar and shortcuts)
  • Invite to collaboration (by means of URI)
  • Multiple sessions of same user (e.g. a user can log in from different devices)
  • Multiple open documents (i.e. a user can open more documents at the same time)
  • Remote cursor update also for position changed (not just insert/erase as in Conclave)
  • Encrypted connection with TLS
  • List of both online and offline users with access to the document (possibility of text coloring also for offline users)
  • View full profile of other users
  • Filters for document list
  • Word and char count

Design choices:

  • Both client and server are portable and multi-platform, being written with the powerful Qt framework. They have been tested on Ubuntu 18.04, Ubuntu 20.04 and Windows 10.
  • The application protocol is designed ad hoc and is built on top of TCP. Currently it is textual and uses JSON. Have a look at the documentation here.
  • The client uses 1 thread.
  • The server uses an ideal number of threads based on the number of cores. The sockets are distributed uniformly among the threads.
  • The server uses MySQL to save periodically the open documents. All the queries are prepared as prepared statements to guarantee protection against SQL injection.
  • The server does not store password as plain-text, it stores hashes computed using Crypto++.
  • Both client and server use UTF-16 encoding.
  • Document naming with author and document name (two-level directory)

About

Real-time collaborative text editor

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages