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.
Live Example (file upload disabled and rate limited)
Table of Contents
What it is not
Installation
filite init
to perform the initial setup (you can do this at any time to reset the config and password)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
Config
# Port to listen on port = 8080Client tools ShareXSQLite 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"]
<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
{ "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$
withtrue
orfalse
.
{ "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 listeningUpload limits are set to 10M as an example
NGINX
server { listen 80; listen [::]:80;Apacheserver_name <DOMAIN>;
location / { proxy_pass http://localhost:<PORT>;
location /f { client_max_body_size 10M; }
} }
<VirtualHost *:80> ServerName <DOMAIN>Programmatic usageProxyPreserveHost On ProxyPass / http://localhost:<PORT>/ ProxyPassReverse / http://localhost:<PORT>/
<Location "/f"> LimitRequestBody 10000000 </Location> </VirtualHost>
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
sqlite
feature enabledSetup
.env.example
to .env
and set the variables to your likingdiesel database setup
dev
feature enabledLicense
filite is licensed under the MIT License.
Twice a month we will interview people behind open source businesses. We will talk about how they are building a business on top of open source projects.
We'll never share your email with anyone else.