A SaltyRTC compliant signalling server.
Project description
This is a SaltyRTC server implementation for Python 3.5+ using asyncio.
Note
On machines where Python 3 is not the default Python runtime, you should use pip3 instead of pip.
Prerequisites
sudo apt-get install python3 python3-pip
We recommend using venv to create an isolated Python environment:
pyvenv venv
You can switch into the created virtual environment venv by running this command:
source venv/bin/activate
While the virtual environment is active, all packages installed using pip will be installed into this environment.
To deactivate the virtual environment, just run:
deactivate
If you want easier handling of your virtualenvs, you might also want to take a look at virtualenvwrapper.
Installation
If you are using a virtual environment, activate it first.
Install the module by running:
pip install saltyrtc.server
The dependency libnacl will be installed automatically. However, you may need to install libsodium for libnacl to work.
Command Line Usage
The script saltyrtc-server will be automatically installed and provides a command line interface for the server.
Run the following command to see detailed usage information:
saltyrtc-server --help
All command line options are also available as environment variables by prefixing them with SALTYRTC_SERVER_ and the upper case command name, followed by the option name in upper case. For example: SALTYRTC_SERVER_SERVE_PORT=8765.
Quick Start
Generate a new private permanent key:
saltyrtc-server generate /path/to/permanent-key
Run the following command to start the server on any address with port 8765:
saltyrtc-server serve \
-p 8765 \
-tc /path/to/x509-certificate \
-tk /path/to/key \
-k /path/to/permanent-key
Alternatively, provide the options via environment variables:
export SALTYRTC_SERVER_SERVE_PORT=8765 \
SALTYRTC_SERVER_SERVE_TLSCERT=/path/to/x509-certificate \
SALTYRTC_SERVER_SERVE_TLSKEY=/path/to/key \
SALTYRTC_SERVER_SERVE_KEY=/path/to/permanent-key
saltyrtc-server serve
Docker
You can also use our official Docker images to run the server:
docker run \
-v /path/to/cert-and-keys:/var/saltyrtc \
-p 8765:8765
-it saltyrtc/saltyrtc-server-python:<tag> serve \
-p 8765 \
-tc /var/saltyrtc/x509-certificate \
-tk /var/saltyrtc/key \
-k /var/saltyrtc/permanent-key
The above command maps port 8765 of the server within the container to port 8765 on the host machine.
Of course it is also possible to use environment variables to provide the options, as explained in the previous section.
Contributing
If you want to contribute to this project, you should install the optional dev requirements of the project in an editable environment:
git clone https://github.com/saltyrtc/saltyrtc-server-python.git
cd saltyrtc-server-python
pip install -e .[dev]
Before creating a pull request, it is recommended to run the following commands to check for code style violations (flake8), optimise imports (isort), do a static type analysis and run the project’s tests:
flake8 .
isort -rc .
MYPYPATH=${PWD}/stubs mypy saltyrtc examples
py.test
Reporting Security Issues
Please report security issues directly to one or both of the following contacts:
Danilo Bargen
Email: mail@dbrgn.ch
Threema: EBEP4UCA
Lennart Grahl
Email: lennart.grahl@gmail.com
Threema: MSFVEW6C
Changelog
5.0.0 (2019-08-29)
Bump the Python version requirement to 3.6.1
Upgrade dependencies
Fix a race condition that leads to path duplication
4.2.0 (2019-04-25)
Internal refactoring of task and job handling
4.1.1 (2019-04-09)
Fix accidental cancellation of the task loop
4.1.0 (2019-04-04)
- Allow the use of environment variables as CLI parameter substitution
Instead of saltyrtc-server serve --tlskey=foo you can now write SALTYRTC_SERVER_TLSKEY=foo saltyrtc-server serve
Fix import order in pyi files
4.0.1 (2019-01-24)
Bump the Python version requirement to 3.5.3
Remove workarounds for Python 3.5.2
4.0.0 (2018-01-24)
Important: Make sure you’re using Python >= 3.5.3 before upgrading.
Drop Python 3.4 support (major)
Deprecate the CLI options -sc, –sslcert and -sk, –sslkey. Use -tc, –tlscert and -tk, –tlskey instead.
Add type hints
Fix discard string messages
Fix validate received client ID types correctly
Fix validate received sub-protocols correctly
Fix a race condition during the handshake when one client drops another
Cleanup of the code base
3.1.2 (2019-01-08)
Fix imports for earlier Python 3.5 versions
3.1.1 (2019-01-08)
Disable deprecation warning in py.test for now (see #90)
3.1.0 (2019-01-07)
Event callback arguments now always need to provide a data argument
3.0.1 (2019-01-02)
Fix forward the timeout close code as an int to event callbacks
3.0.0 (2018-12-18)
Use the timeout close code (3008) when a client does not respond to a ping message (major)
Add support for Python 3.7
Various task queue improvements resulting in more robust client handling
Fix to not send a ‘disconnected’ message when a responder has been dropped via ‘drop-responder’
Fix to prevent the initiator from relaying messages to a responder client which is in the process of being dropped
Fix to not accept new incoming connections when closing the server
2.0.1 (2018-08-20)
Fix to prevent creating two path instances with the same path string
Various improvements to logging messages
2.0.0 (2018-07-16)
Important: Make sure you’re using Python >= 3.4.4 and that your clients support the disconnected message before upgrading.
Add support for the disconnected message (major)
Fix potential invalid order of messages when dispatching a send-error
Fix the id field’s value in the send-error message
Fix a few potential race conditions
1.0.2 (2017-11-15)
Fix do not accept unencrypted ‘client-auth’ messages from the initiator
1.0.1 (2017-07-25)
Fix to handle new libnacl exceptions
1.0.0 (2017-03-24)
Add server implementation of the SaltyRTC 1.0 Protocol
Initial publication on PyPI
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file saltyrtc.server-5.0.0.tar.gz
.
File metadata
- Download URL: saltyrtc.server-5.0.0.tar.gz
- Upload date:
- Size: 68.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e3923c62d4cb54fad32afe809f3204067348481c1415a59273ce43f7441c0c70 |
|
MD5 | d300c1b546ce10bec6587fc40e3e7cd7 |
|
BLAKE2b-256 | 80378a6f686f3c28bf7508052ecf13d28292b9d2a547b20f1c67121e4638aea4 |
File details
Details for the file saltyrtc.server-5.0.0-py36.py37-none-any.whl
.
File metadata
- Download URL: saltyrtc.server-5.0.0-py36.py37-none-any.whl
- Upload date:
- Size: 45.1 kB
- Tags: Python 3.6, Python 3.7
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 56b9ae8cfb7b568b858e50a3292ac2ac58e4d995473df13393ee342106b1439b |
|
MD5 | 31a78623702e91a31c809a1a8958d35d |
|
BLAKE2b-256 | b4a0afac763589f212562abbaf6cda75fe8b710ff078543790567b1d78970a95 |