Giter Site home page Giter Site logo

watzon / paste69 Goto Github PK

View Code? Open in Web Editor NEW
11.0 2.0 1.0 473 KB

Simple CURL-able pastebin

Home Page: https://0x45.st

License: MIT License

Dockerfile 0.77% Shell 0.49% Crystal 88.08% Jinja 10.07% Nix 0.59%
0x0 athena athena-framework crystal crystal-lang docker pastebin pastebin-api pastebin-service

paste69's Introduction

Paste69

This project has undergone several changes, but here's where we are now: Paste69 is a clone of the popular pastebin service 0x45.st, but written in Crystal using the Athena framework rather than in Python with Flask.

Differences from 0x0

I have tried to keep feature parody with 0x0, but there are some small differences:

  • Multiple storage providers are supported (local and s3 for now)
  • The configuration format is slightly different, as are some config items

Some features have also yet to be implemented. They will be coming in the near future. These features include:

  • NSFW detection
  • Virus scanning

Installation

Installation requires Crystal and Postgres. Other databases might be supported in the future.

Clone this repo:

git clone https://github.com/watzon/paste69

Install dependencies:

shards install

Copy and modify the config file:

cp config/config.example.yml config/config.yml
vim config/config.yml

Build the executables, migrate the database, and run the server:

shards build
./bin/cli db:migrate # this assumes the dabase exists, if not run db:create first
./bin/server

Using Docker

If you want, you can build the Docker container yourself locally:

docker build -v ./uploads:/app/uploads --tag paste69 ./docker
docker run -d -p 8080:8080 paste69

Or, you can use the hosted version available through ghcr:

docker pull ghcr.io/watzon/paste69:main
docker run -d -p 8080:8080 ghcr.io/watzon/paste69:main

All configuration items are available through environment variables, in addition to the config file. Configuration items and their environment variable names are listed below.

Configuration

I've done my best to make Paste69 as zero configuration as possible. The default values listed in src/services/config_manager.cr should be sufficient for most deployments. However, should you wish to change any of the values you can do so through a config file, or using environment variables.

Valid config file locations are:

  • /etc/paste69/config.yml
  • ~/.paste69/config.yml
  • ~/.config/paste69/config.yml

The following table contains all available configuration options, their default values, and their environment variable counterparts:

Config Item Default Value Environment Variable Description
host "0.0.0.0" HOST Host to bind to
port 8080 PORT Port to bind to
site_url "0.0.0.0:8080" SITE_URL Public URL of the site (used for generating links)
database_url "sqlite://./db/data.db" DATABASE_URL URL of the database (Postgres and SQLite supported)
templates_dir "src/templates" TEMPLATES_DIR Directory for template overrides (jinja2 format)
max_content_length 256 * 1024 * 1024 MAX_CONTENT_LENGTH Maximum size for incoming files
max_url_length 4096 MAX_URL_LENGTH Maximum size for shortened URLs
max_ext_length 9 MAX_EXT_LENGTH Maximum size for file extensions
storage.path "./uploads" STORAGE.PATH Local storage path for files
storage.type "local" STORAGE.TYPE Type of storage to use (local or s3)
storage.s3.region nil STORAGE.S3.REGION S3 region
storage.s3.bucket nil STORAGE.S3.BUCKET S3 bucket
storage.s3.access_key nil STORAGE.S3.ACCESS_KEY S3 access key
storage.s3.secret_key nil STORAGE.S3.SECRET_KEY S3 secret key
storage.secret_bytes 16 STORAGE.SECRET_BYTES Number of bytes to use for secrets
storage.ext_override too long STORAGE.EXT_OVERRIDE File extension override map (mime => ext)
storage.mime_blocklist too long STORAGE.MIME_BLOCKLIST Array containing mime types to blocklist
storage.upload_blocklist nil STORAGE.UPLOAD_BLOCKLIST Path to a file containing banned IP addresses
nsfw.detect false NSFW.DETECT Enable NSFW detection (TODO)
nsfw.threshold 0.608 NSFW.THRESHOLD NSFW detection threshold
vscan.socket nil VSCAN.SOCKET ClamAV socket for virus scanning (TODO)
vscan.quarantine_path "./quarantine" VSCAN.QUARANTINE_PATH Path for quarantined files
vscan.interval 604800 VSCAN.INTERVAL How often to scan for viruses
vscan.ignore too long VSCAN.IGNORE Mime types for which to ignore virus scanning
url_alphabet "01234567890abcdef..." URL_ALPHABET Alphabet string to use for shortened URL creation

Custom Templates

Paste69 supports custom templates, which can be used to override the default templates. To do this, simply create a directory somewhere and copy the default templates from src/templates into it. For example:

mkdir -p ~/.config/paste69/templates
cp -r ./src/templates ~/.config/paste69/templates

and then update your config file (or set the TEMPLATES_DIR environment variable) to point to the new location.

*** ~/.config/paste69/config.yml 2024-01-01 12:00:00.000000000 -0500
--- ~/.config/paste69/config.yml 2024-01-01 12:00:00.000000000 -0500
@@ -1,1 +1,1 @@
-templates_dir: "src/templates"
+templates_dir: "~/.config/paste69/templates"

this directory will be used in stead of the default templates, and not in addition to, so be sure to copy all of the templates over.

IP Blocklisting

IP blocklisting is supported. All uploads database entries should contain an IP address, telling you where it was uploaded from. If you want to block a certain IP address (or even an entire subnet), you can create a file containing a list of IP addresses to block and upadate your config file with the path to the file. The file should contain a single IP address or subnet per line. For example:

192.168.1.1
172.16.17.32/24

Development

Feel free to make pull requests!

Contributing

  1. Fork it (https://github.com/watzon/paste69/fork)
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors

paste69's People

Contributors

watzon avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

blacksmoke16

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.