# filebridging Share files via a bridge server using TCP over SSL and end-to-end encryption. ## Requirements Python3.8+ is needed for this package. You may find it [here](https://www.python.org/downloads/). OpenSSL 1.1.1+ is required as well to handle SSL connection and end-to-end cryptography. On Windows, installing [git for Windows](https://gitforwindows.org/) will install OpenSSL as well. ## Usage If you need a virtual environment, create it. ```bash python3.8 -m venv env; alias pip="env/bin/pip"; alias python="env/bin/python"; ``` Install filebridging and read the help. ```bash pip install filebridging python -m filebridging.server --help python -m filebridging.client --help ``` ## Examples * Client-server example ```bash # 3 distinct tabs python -m filebridging.server --host localhost --port 5000 --certificate ~/.ssh/server.crt --key ~/.ssh/server.key python -m filebridging.client s --host localhost --port 5000 --certificate ~/.ssh/server.crt --token 12345678 --password supersecretpasswordhere --path ~/file_to_send python -m filebridging.client r --host localhost --port 5000 --certificate ~/.ssh/server.crt --token 12345678 --password supersecretpasswordhere --path ~/Downloads ``` * Client-client example ```bash # 2 distinct tabs python -m filebridging.client s --host localhost --port 5000 --certificate ~/.ssh/server.crt --key ~/.ssh/private.key --token 12345678 --password supersecretpasswordhere --path ~/file_to_send --standalone python -m filebridging.client r --host localhost --port 5000 --certificate ~/.ssh/server.crt --token 12345678 --password supersecretpasswordhere --path ~/Downloads ``` The receiver client may be standalone as well: just add the `--key` parameter (for SSL-secured sessions) and the `--standalone` flag. * Configuration file example ```python #!/bin/python host = "www.example.com" port = 5000 certificate = "/path/to/public.crt" key = "/path/to/private.key" action = 'r' password = 'verysecretpassword' token = 'sessiontok' file_path = '.' ``` ## Generating SSL certificates You may use `filebridging.create_certificate.py` script or use openssl from the command line. ### Via script ```bash python -m filebridging.create_certificate --name example --domain example.com --force ``` ### Via command line Store configuration in file `mycert.csr.cnf` and run the following command to generate a self-signed SSL certificate. ```bash openssl req -newkey rsa:4096 -nodes -keyout ./mycert.key \ -x509 -days 365 -out ./mycert.crt \ -config mycert.csr.cnf ``` **mycert.csr.cnf** ```text [ req ] default_bits = 4096 prompt = no default_md = sha256 distinguished_name = dn [ dn ] CN = yourdomain.com ```