A minimal file upload/pastebin service.
Self-host this app for $0.99/mo only!
Rustypaste is a minimal file upload/pastebin service.
$ echo "some text" > awesome.txt
$ curl -F "file=@awesome.txt" https://paste.site.com
https://paste.site.com/safe-toad.txt
$ curl https://paste.site.com/safe-toad.txt
some text
capital-mosquito.txt)yB84D2Dv.txt)?download=truecargo install rustypaste
pacman -S rustypaste
See the available binaries on releases page.
git clone https://github.com/orhun/rustypaste.git
cd rustypaste/
cargo build --release
# run unit tests
cargo test -- --test-threads 1
The standalone command line tool (rpaste) is available here.
function rpaste() {
curl -F "file=@$1" -H "Authorization: <auth_token>" "<server_address>"
}
* consider reading authorization headers from a file. (e.g. -H @rpaste_auth)
# upload a file
$ rpaste x.txt
# paste from stdin
$ rpaste -
$ curl -F "file=@x.txt" -H "expire:10min" "<server_address>"
(supported units: ns, us, ms, sec, min, hours, days, weeks, months, years)
$ curl -F "oneshot=@x.txt" "<server_address>"
$ curl -F "url=https://example.com/some/long/url" "<server_address>"
$ curl -F "remote=https://example.com/file.png" "<server_address>"
Configure delete_expired_files to set an interval for deleting the expired files automatically.
On the other hand, following script can be used as cron for cleaning up the expired files manually:
#!/bin/env sh
now=$(date +%s)
find upload/ -maxdepth 2 -type f -iname "*.[0-9]*" |
while read -r filename; do
[ "$(( ${filename##*.} / 1000 - "${now}" ))" -lt 0 ] && rm -v "${filename}"
done
To start the server:
$ rustypaste
If the configuration file is not found in the current directory, specify it via CONFIG environment variable:
$ CONFIG="$HOME/.rustypaste.toml" rustypaste
To enable basic HTTP auth, set the AUTH_TOKEN environment variable (via .env):
$ echo "AUTH_TOKEN=$(openssl rand -base64 16)" > .env
$ rustypaste
See config.toml for configuration options.
Following command can be used to run a container which is built from the Dockerfile in this repository:
$ docker run --rm -d \
-v "$(pwd)/upload/":/app/upload \
-v "$(pwd)/config.toml":/app/config.toml \
--env-file "$(pwd)/.env" \
-e "RUST_LOG=debug" \
-p 8000:8000 \
--name rustypaste \
orhunp/rustypaste
./upload (on the host machine)AUTH_TOKEN via -e or --env-file to enable authYou can build this image using docker build -t rustypaste . command.
If you want to run the image using docker compose, simply run docker-compose up -d. (see docker-compose.yml)
Example server configuration with reverse proxy:
server {
listen 80;
location / {
proxy_pass http://localhost:8000/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
add_header X-XSS-Protection "1; mode=block";
add_header X-Frame-Options "sameorigin";
add_header X-Content-Type-Options "nosniff";
}
}
If you get a 413 Request Entity Too Large error during upload, set the max body size in nginx.conf:
http {
# ...
client_max_body_size 100M;
}
Pull requests are welcome!
Consider submitting your ideas via issues first and check out the existing issues.
All code is licensed under The MIT License.
Please login to review this project.
No reviews for this project yet.
A paste bin that's actually minimalist. WTFPL/0BSD Ru
Cross-platform C# pastebin with client-side AES-256 encrypt…
Simple pastebin service with convenient api and CLI.
Comments (0)
Please login to join the discussion on this project.