5855965e24 | ||
---|---|---|
.github/workflows | ||
migrations | ||
resources | ||
src | ||
.env.example | ||
.gitignore | ||
Cargo.lock | ||
Cargo.toml | ||
LICENSE | ||
README.md | ||
build.rs | ||
diesel.toml |
README.md
filite
A simple, light and standalone pastebin, URL shortener and file-sharing service that hosts files, redirects links and stores texts.
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 and reduce resource usage, if this is what you are looking for this tool is not for you.
Installation
- Get the binary either from the releases page or using Cargo
- Run it a first time and follow the instructions
- Edit your config file, check the dedicated section for details
- Run the binary again and you're good to go, just browse to http://localhost:8080 (don't forget to replace
8080
with the port specified in your config) - Optionally, set up a reverse proxy
Usage
When asked for a login, use whatever username you want and the password you provided during setup. Usage is pretty straightforward using the web UI, but here are some tips.
- On successful submission, the URL will be copied to clipboard. If copying to clipboard fails, it will be displayed as an alert.
- Press space in the URL input to generate a random one
- If the entered URL is already in use, the input will have a yellow outline
Details for programmatic usage are provided in the dedicated section.
Planned features
- Decent test suite
- TLS support
- Simple admin page
- systemd service generation
Config
The config follows the following format. Most of the time, the defaults are reasonable.
# Port to listen on
port = 8080
# SQLite database URL
database_url = "database.db"
# Database connection pool size
pool_size = 4
# Path to the directory where files will be stored, relative or absolute
files_dir = "files"
# Highlight.js configuration
[highlight]
# Theme to use
theme = "github"
# Additional languages to import
languages = ["rust"]
Client tools
ShareX
To get the value of
AUTORIZATION
convert<USERNAME>:<PASSWORD>
to base64. Don't forget to replacehttp://example.com
with your own address.
File
{
"Version": "13.0.1",
"Name": "filite (file)",
"DestinationType": "ImageUploader, FileUploader",
"RequestMethod": "POST",
"RequestURL": "http://example.com/f",
"Headers": {
"Authorization": "Basic <AUTORIZATION>"
},
"Body": "MultipartFormData",
"FileFormName": "file",
"URL": "http://example.com/f/$response$"
}
Link
{
"Version": "13.0.1",
"Name": "filite (link)",
"DestinationType": "URLShortener",
"RequestMethod": "POST",
"RequestURL": "http://example.com/l",
"Headers": {
"Authorization": "Basic <AUTORIZATION>"
},
"Body": "JSON",
"Data": "{\"forward\":\"$input$\"}",
"URL": "http://example.com/l/$response$"
}
Text
You can remove the prompt and always enable syntax highlighting by replacing
$prompt:Highlight|false$
withtrue
orfalse
.
{
"Version": "13.0.1",
"Name": "filite (text)",
"DestinationType": "TextUploader",
"RequestMethod": "POST",
"RequestURL": "http://example.com/t",
"Headers": {
"Authorization": "Basic <AUTORIZATION>"
},
"Body": "JSON",
"Data": "{\"contents\":\"$input$\",\"highlight\":$prompt:Highlight|false$}",
"URL": "http://example.com/t/$response$"
}
Reverse proxy
NGINX
Don't forget to replace
8080
with the port specified in your config andexample.com
with your own domain.
server {
listen 80;
listen [::]:80;
server_name example.com;
location / {
proxy_pass http://localhost:8080;
location /f {
client_max_body_size 10M;
}
}
}
Programmatic usage
Posting new elements
Send a PUT request with a JSON body following the following schemes. Don't forget to set the Content-Type
header to application/json
and the Authorization
header to a valid value (username isn't important).
File
PUT /f/id
{
"base64": "Base64-encoded file",
"filename": "Filename"
}
Link
PUT /l/id
{
"forward": "URL to forward to"
}
Text
PUT /t/id
{
"contents": "Text contents"
}
Getting existing elements
The response will be a JSON array following the following schemes
Files
GET /f
[
{
"id": "ID (URL) as an integer",
"filepath": "Absolute path to the stored file",
"created": "Creation timestamp"
}
]
Links
GET /l
[
{
"id": "ID (URL) as an integer",
"forward": "URL to forward to",
"created": "Creation timestamp"
}
]
Texts
GET /t
[
{
"id": "ID (URL) as an integer",
"contents": "Text contents",
"created": "Creation timestamp"
}
]
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
- Copy
.env.example
to.env
and set the variables to your liking - Run
diesel database setup
- Build or run with the
dev
feature enabled
License
filite is licensed under the MIT License.