• Stars
    star
    189
  • Rank 204,649 (Top 5 %)
  • Language
    Rust
  • License
    MIT License
  • Created about 5 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A simple, light and standalone pastebin, URL shortener and file-sharing service

filite

THIS PROJECT IS CURRENTLY UNMAINTAINED AS I NO LONGER USE IT MYSELF AND DO NOT HAVE THE TIME NOR ENERGY TO COMMIT TO MAINTAINING IT. SORRY.

The master branch isn't actively maintained anymore, and the current development branch, next, will be merged into it in the near future.

A simple, light and standalone pastebin, URL shortener and file-sharing service that hosts files, redirects links and stores texts.

GitHub Actions Crates.io

Live Example (file upload disabled and rate limited)

Table of Contents

Features

What it is

  • Easy to use. Installation and set-up take less than a minute and a built-in web UI is provided.
  • Standalone. No external dependencies required, everything that is needed is packed into the binary.
  • Light and fast. The Rust web framework Actix is used under the hood, providing great speed with a minimal footprint.

What it is not

  • A tracking tool. No stats are stored to increase speed, reduce resource usage and maintain simplicity, if this is what you are looking for filite is not for you.

Installation

  1. Get the binary either from the releases page or using Cargo
  2. Run filite init to perform the initial setup (you can do this at any time to reset the config and password)
  3. Edit your config file as you see fit (check the dedicated section for details)
  4. Run filite

That's it!

Usage

When asked for a login, use whatever username you want and the password you provided during setup. Details for programmatic usage are provided in the dedicated section.

Planned features

  • Decent test suite
  • TLS support
  • Simple admin page
  • Multiple logins (?)

Config

# Port to listen on
port = 8080
# SQLite database connection url
database_url = "database.db"
# SQLite database connection pool size
pool_size = 4
# Directory where to store static files
files_dir = "files"

# Highlight.js configuration
[highlight]
# Theme to use
theme = "github"
# Additional languages to include
languages = ["rust"]

Client tools

ShareX

  • <AUTHORIZATION> is the result of encoding <USERNAME>:<PASSWORD> to base64
    • <USERNAME> is an arbitrary username, it doesn't matter
    • <PASSWORD> is the password entered during setup
  • <ADDRESS> is the root address where the filite is running, for instance http://localhost:8080 or https://filite.raphaeltheriault.com

File

{
  "Version": "13.0.1",
  "Name": "filite (file)",
  "DestinationType": "ImageUploader, FileUploader",
  "RequestMethod": "POST",
  "RequestURL": "<ADDRESS>/f",
  "Headers": {
    "Authorization": "Basic <AUTORIZATION>"
  },
  "Body": "MultipartFormData",
  "FileFormName": "file",
  "URL": "<ADDRESS>/$response$"
}

Link

{
  "Version": "13.0.1",
  "Name": "filite (link)",
  "DestinationType": "URLShortener",
  "RequestMethod": "POST",
  "RequestURL": "<ADDRESS>/l",
  "Headers": {
    "Authorization": "Basic <AUTORIZATION>"
  },
  "Body": "JSON",
  "Data": "{\"forward\":\"$input$\"}",
  "URL": "<ADDRESS>/l/$response$"
}

Text

You can remove the prompt and always enable or disable syntax highlighting by replacing $prompt:Highlight|false$ with true or false.

{
  "Version": "13.0.1",
  "Name": "filite (text)",
  "DestinationType": "TextUploader",
  "RequestMethod": "POST",
  "RequestURL": "<ADDRESS>/t",
  "Headers": {
    "Authorization": "Basic <AUTORIZATION>"
  },
  "Body": "JSON",
  "Data": "{\"contents\":\"$input$\",\"highlight\":$prompt:Highlight|false$}",
  "URL": "<ADDRESS>/t/$response$"
}

Reverse proxy

  • <DOMAIN> is the domain the requests will be coming from, for instance filite.raphaeltheriault.com
  • <PORT> is the port on which filite is listening

Upload limits are set to 10M as an example

NGINX

server {
  listen 80;
  listen [::]:80;

  server_name <DOMAIN>;

  location / {
    proxy_pass http://localhost:<PORT>;

    location /f {
      client_max_body_size 10M;
    }
  }
}

Apache

<VirtualHost *:80>
  ServerName <DOMAIN>

  ProxyPreserveHost On
  ProxyPass / http://localhost:<PORT>/
  ProxyPassReverse / http://localhost:<PORT>/

  <Location "/f">
    LimitRequestBody 10000000
  </Location>
</VirtualHost>

Programmatic usage

All requests that require authentication use HTTP Basic Auth (without taking the username into account).

Listing existing entries

It's possible to get an array of all existing entries for each type with an authenticated request.

  • GET /f
  • GET /l
  • GET /t

You can view the created entries in a more organized manner with the third-party filite-list script.

Creating new entries

There are two ways to create new entries, PUT or POST requests. PUT lets you choose the ID manually and POST assigns a free one automatically, but that's the only difference. Both methods require authentication.

PUT requests will overwrite any existing entry.

Files

  • PUT /f/{id}
  • POST /f

Files are sent as multipart/form-data. The field name isn't important but the file name needs to be included. Only one file is treated.

Links

  • PUT /l/{id}
  • POST /l

Links are sent as application/json according to the following schema.

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Link",
  "type": "object",
  "properties": {
    "forward": {
      "description": "URL this link forwards to",
      "type": "string"
    }
  }
}

Texts

  • PUT /t/{id}
  • POST /t

Texts are sent as application/json according to the following schema.

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Text",
  "type": "object",
  "properties": {
    "contents": {
      "description": "Text contents",
      "type": "string"
    },
    "highlight": {
      "description": "Whether to enable code highlighting or not for that text",
      "type": "boolean"
    }
  }
}

Deleting entries

It's possible to delete any entry with an authenticated request.

  • DELETE /f
  • DELETE /l
  • DELETE /t

Contributing

The project is open to contributions! Before submitting a PR, make sure your changes work both with and without the dev feature enabled.

Requirements

  • The Rust toolchain
  • diesel_cli with the sqlite feature enabled

Setup

  1. Copy .env.example to .env and set the variables to your liking
  2. Run diesel database setup
  3. Build or run with the dev feature enabled

License

filite is licensed under the MIT License.

More Repositories

1

licensor

write licenses to stdout
Rust
185
star
2

serde-partial

Serde partial serialization made easy
Rust
39
star
3

unprotect-office

Easily remove write protection from Microsoft Office files
C#
30
star
4

async-into-future

Rust
11
star
5

wae

An async executor based on the Win32 thread pool API
Rust
10
star
6

Hydra

A simple streaming webserver that runs anywhere .NET 6 runs
C#
9
star
7

bmbf-mod-template

Mod template for Beat Saber Oculus Quest mods using BMBF
C++
8
star
8

lilac

The greatest audio codec of all
Rust
5
star
9

bm2

CLI for the Beat Saber mod repository BeatMods2
Rust
5
star
10

BLAKE3.NET

C# port of the reference implementation of BLAKE3
C#
4
star
11

paranoid-android

Integration layer between tracing and Android logs
Rust
4
star
12

pxx

Proxy connections while executing commands
Rust
3
star
13

setup-rust-action

Set up your GitHub Actions workflow with a specific version of Rust
TypeScript
3
star
14

stack-bad

stack bad is a brainfuck inspired, Turing complete language whose syntax can be boiled down to "stack bad"
Rust
3
star
15

bsqmu

Beat Saber Quest Modding Utility
C++
2
star
16

lib-cemu

Lightweight Node.js library for Cemu utils
JavaScript
2
star
17

zwc

Rust library for encoding binary data using zero-width characters
Rust
2
star
18

quest-mathfuck

who needs math
Rust
1
star
19

chene

a good web framework
TypeScript
1
star
20

quest-hook-template

A template for writing mods for Quest il2cpp games in Rust using quest-hook
Rust
1
star
21

progress.h

A dead simple C progress bar
C
1
star
22

blisters

Rust (and WebAssembly) implementation of the Blister Beat Saber playlist format
Rust
1
star
23

random.hpp

Single header C++20 convenience wrapper around C++11 random engines
C++
1
star
24

bs-quest-index

Rust
1
star
25

synthriders_rs

Synth Riders BeatMap parser and JSON schemas
Rust
1
star
26

session-0sw

Rust
1
star
27

libraryan

Self-hosted web ebook library
Rust
1
star
28

qrtdb

Quest Runtime Debugger
Rust
1
star
29

pasrel

A typed, composable and functional web server framework
TypeScript
1
star
30

BeatMods2-Client

Official web client for BeatMods2
Vue
1
star
31

ipp

Rust
1
star
32

songe-converter-web

Convert Beat Saber Custom Songs to the NEW format, on the web
JavaScript
1
star
33

GitHubProxy

C#
1
star
34

ObamaS

The Obama System, or ObamaS, an entreprise grade x86_64 operating system
Rust
1
star
35

BinaryBlister

C#
1
star
36

blist

Rust
1
star