| Crates.io | filite |
| lib.rs | filite |
| version | 0.3.0 |
| created_at | 2019-10-25 19:53:04.855129+00 |
| updated_at | 2020-01-16 07:19:22.703273+00 |
| description | A simple, light and standalone pastebin, URL shortener and file-sharing service |
| homepage | https://github.com/raftario/filite |
| repository | https://github.com/raftario/filite |
| max_upload_size | |
| id | 175700 |
| size | 185,528 |
A simple, light and standalone pastebin, URL shortener and file-sharing service that hosts files, redirects links and stores texts.
filite init to perform the initial setup (you can do this at any time to reset the config and password)filiteThat's it!
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.
# 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"]
<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$"
}
{
"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$"
}
You can remove the prompt and always enable or disable syntax highlighting by replacing
$prompt:Highlight|false$withtrueorfalse.
{
"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$"
}
<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
server {
listen 80;
listen [::]:80;
server_name <DOMAIN>;
location / {
proxy_pass http://localhost:<PORT>;
location /f {
client_max_body_size 10M;
}
}
}
<VirtualHost *:80>
ServerName <DOMAIN>
ProxyPreserveHost 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).
It's possible to get an array of all existing entries for each type with an authenticated request.
GET /fGET /lGET /tThere 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.
PUTrequests will overwrite any existing entry.
PUT /f/{id}POST /fFiles 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.
PUT /l/{id}POST /lLinks 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"
}
}
}
PUT /t/{id}POST /tTexts 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"
}
}
}
It's possible to delete any entry with an authenticated request.
DELETE /fDELETE /lDELETE /tThe project is open to contributions! Before submitting a PR, make sure your changes work both with and without the dev feature enabled.
sqlite feature enabled.env.example to .env and set the variables to your likingdiesel database setupdev feature enabledfilite is licensed under the MIT License.