An anonymous file transfer application that enables you to access files from any device without any account
- anonymous chat room
- file transfer across any devices where a modern browswer is available
- secure:
- all user data (messages and files) will be encrypted. Since passcode is never persisted in the server side, no one except the owner can decrypt the data
- expires automatically after one day
prerequisites
- Python 3.8
- Redis
# 1. download source code
cd
git clone https://github.com/yanxurui/Snapfile
cd Snapfile
# 2. change default configuration
vim snapfile/config.file
# 3. install package
python setup.py -e .
# 4. start
snapfile
some default configuration
- PORT: The server will listen to port 8090
- LOG_FILE: Logs are output to
test.log
in the current workding directory (i.e., CWD) - UPLOAD_ROOT_DIRECTORY: Files are stored in
./upload
in CWD
Change the prefix
and user
in install.sh
and then run it using root
git pull
bash install.sh
The directory structure of prefix
(/var/www/snapfile for example)
`-- snapfile
|-- db
| `-- appendonly.aof
| `-- dump.rdb
|-- files
| `-- 324
| `-- thfaxm
| `-- 1
|-- logs
| |-- nginx_access.log
| |-- nginx_err.log
| |-- snapfile.log
| `-- snapfile.out
`-- static
|-- index.html
|-- login.html
|-- main.css
|-- main.js
`-- test.html
This is a web app based on aiohttp (built on top of asyncio) which is an asynchronous http libaray. That means, its networking operations are non-blocking and all http requests can be processed in a concurrent manner in a single thread. So far, it's the best choice in the Python world for constructing a high performance web server.
It supports websocket (long connection) which allows to implement the instant messaging or chat very easily.
- serve static files, such as html, css, etc
- handle download efficiently
- prevent from brute force attack
- sharing port 443 with other services and forwarding to the backend (python web app in our case)
keys:
#files:<folder identity>
int: the last file id in a given folderfolder:<folder identity>
str: meta data of a folder serialized in json format, like created time, quota, size, etcmessages::<folder identity>
list: messages (including file meta data) serialized in json format
manage the lifecycle of the service To restart the service, run the command below as root:
supervisorctl restart snapfile
need to install packages: websocket-client
Functional test for APIs of python backend: using the classical python unittest
cd tests
python -m unittest -v test_api.py
- use a separate port 8090
- select db 0 of Redis
- clean all data at startup
some known issues:
The error below is due to a bug in package requests: Revert PR 1440, do not modify cookie value by yanxurui · Pull Request #5459 · psf/requests
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
There might be a chance that test_api.TestExpire fails because the orphan process is cleang the data.
AssertionError: '1 folders found and 0 folders deleted' not found in 'xxx
Functional test for NGINX config in a production environment.
stress test for aiohttp.