GhostBin is a lightweight, high-performance pastebin built with Go and Redis. Designed with simplicity and speed in mind, GhostBin offers a fast and efficient platform for sharing text snippets effortlessly.
You can use this script to upload your pastes easily. gbin.sh
Usage: gbin.sh [-f filename] [-e expire_seconds] [-r max_reads] [-d deepurl_length] [-s secret]
-f: The filename to upload. Use '-' to pipe output of a command.
-e: Expire time in seconds (default: no expiration).
-r: Maximum number of reads (default: unlimited).
-d: Length of the URL (default: random URL length).
-s: Secret for deletion (default: none).
#!/bin/bash
# Usage: ./ghostbin.sh [-f filename] [-e expire_seconds] [-r max_reads] [-d deepurl_length] [-s secret]
# Default values
EXPIRE="18446744073709551615" # No expiration by default
READS="0" # No read limit by default
DEEPURL="0" # Default URL length
SECRET="" # No secret by default
FILENAME="-" # Default to pipe input
# Function to display usage
usage() {
echo "Usage: $0 [-f filename] [-e expire_seconds] [-r max_reads] [-d deepurl_length] [-s secret]"
echo " -f: The filename to upload. Use '-' to pipe output of a command."
echo " -e: Expire time in seconds (default: no expiration)."
echo " -r: Maximum number of reads (default: unlimited)."
echo " -d: Length of the URL (default: random URL length)."
echo " -s: Secret for deletion (default: none)."
exit 1
}
# Parse command-line arguments
while getopts "f:e:r:d:s:" opt; do
case ${opt} in
f ) FILENAME=$OPTARG ;;
e ) EXPIRE=$OPTARG ;;
r ) READS=$OPTARG ;;
d ) DEEPURL=$OPTARG ;;
s ) SECRET=$OPTARG ;;
* ) usage ;;
esac
done
# Check if filename is provided or input is piped
if [ -z "$FILENAME" ] && [ -t 0 ]; then
usage
fi
# Build the curl command
CURL_CMD="curl -F \"f=@${FILENAME}\""
[ "$EXPIRE" != "18446744073709551615" ] && CURL_CMD+=" -F \"expire=${EXPIRE}\""
[ "$READS" != "0" ] && CURL_CMD+=" -F \"read=${READS}\""
[ "$DEEPURL" != "0" ] && CURL_CMD+=" -F \"deepurl=${DEEPURL}\""
[ -n "$SECRET" ] && CURL_CMD+=" -F \"secret=${SECRET}\""
# Append the GhostBin URL
CURL_CMD+=" gbin.me"
# Execute the curl command
if [ "$FILENAME" == "-" ]; then
# Handle piped input
cat | eval $CURL_CMD
else
# Handle file input
eval $CURL_CMD
fi
# Upload a file
$ curl -F "f=@filename.ext" gbin.me
# Pipe output of a command
$ cat file | curl -F "f=@-" gbin.me
$ find /var/log/nginx -name "*.log" | curl -F "f=@-" gbin.me
# Paste will expire after 69 seconds
$ curl -F "f=@filename.ext" -F "expire=69" gbin.me
# Paste will expire after 3 reads
$ curl -F "f=@filename.ext" -F "read=3" gbin.me
# Set a custom URL length
$ curl -F "f=@filename.ext" -F "deepurl=3" gbin.me
# Set a secret for deletion
$ curl -F "f=@filename.ext" -F "secret=password" gbin.me
# Delete paste using secret
$ curl -XDELETE -F "secret=password" gbin.me/pasteid
# Create a paste with specific settings
$ curl -F "f=@filename.ext" -F "deepurl=12" -F "expire=69" -F "read=1" gbin.me
For more details and advanced usage, please refer to the documentation.
Want to run a server like this? clone it! Remember centralization is bad.
Make sure you have git, make and Docker installed.
GhostBin can be easily deployed using Docker Compose. Follow these steps to deploy GhostBin:
-
Clone Repository: Clone the GhostBin repository to your server.
-
Configuration: Duplicate the
env-example
file and rename it as.env.dev
for local development or.env.prod
for the production environment. Customize the contents of these files according to your requirements. -
Build: Build the Docker images for GhostBin using the provided Makefile command:
make build
-
Development Environment:
make up-dev
-
Production Environment:
make up-prod
-
Access Logs:
To access logs, you can use:
make logs
To tail logs in real-time:
make logs-tail
-
Additional Commands:
make down-dev
/make down-prod
: Shutdown the development/production environment.make restart-dev
/make restart-prod
: Restart the development/production environment.make exec-dev
/make exec-prod
: Access the shell of the development/production container.
I am presently working on writing the unit tests. ðŸ«
- Write test for handlers
- Write file delete daemon
Contributions to GhostBin are welcome! If you find any issues or have suggestions for improvements, please feel free to open an issue or submit a pull request on our GitHub repository.
GhostBin is licensed under the BSD 3-Clause License.
Pull requests are welcome.
For major changes, please open an issue first to discuss what you would like to change.
You can support this project via Liberapay.
The monthly hosting cost is right now 12 Dollar.
Monero wallet address: 83BDAy6tN99PVud2sUnjyoMzsUDdXJCoMjjwJ59cVwPF91RccxLWCVsfD9imMqxUaMhMG1brzuVBeAM4KREUSf9U9efbKx1