#link-shortener #pastebin #file-sharing #web-services #actix-web #web-ui #web-framework

app filite

一个简单、轻量级且独立的代码粘贴板、URL缩短器和文件共享服务

3个版本 (破坏性更新)

0.3.0 2020年1月16日
0.2.0 2019年10月28日
0.1.0 2019年10月25日

#694 in HTTP服务器

MIT 许可证

53KB
1K SLoC

filite

一个简单、轻量级且独立的代码粘贴板、URL缩短器和文件共享服务,可托管文件、重定向链接和存储文本。

GitHub Actions Crates.io

实时示例

目录

功能

是什么

  • 易于使用。安装和设置仅需不到一分钟,并提供内置的Web用户界面。
  • 独立。无需外部依赖,所需的一切都包含在二进制文件中。
  • 轻量级且快速。底层使用Rust Web框架Actix,提供出色的速度和最小的占用空间。

不是什么

  • 跟踪工具。不存储统计信息以提高速度、减少资源使用并保持简单性,如果您正在寻找这样的工具,filite不适合您。

安装

  1. 发行页面使用Cargo获取二进制文件
  2. 运行 filite init 以执行初始设置(您可以在任何时间执行此操作以重置配置和密码)
  3. 根据需要编辑您的配置文件(有关详细信息,请参阅专用部分
  4. 运行 filite

这就是全部!

使用方法

当要求登录时,请使用您想要的任何用户名和设置期间提供的密码。有关编程使用的详细信息,请参阅专用部分

计划中的功能

  • 相当全面的测试套件
  • TLS支持
  • 简单的管理页面
  • 多个登录(?)

配置

# 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"]

客户端工具

ShareX

  • <AUTHORIZATION> 是将 <USERNAME>:<PASSWORD> 编码为 base64 的结果
    • <USERNAME> 是一个任意用户名,不重要
    • <PASSWORD> 是设置过程中输入的密码
  • <ADDRESS> 是 filite 运行的根地址,例如 https://127.0.0.1:8080https://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$"
}

文本

您可以删除提示并始终通过将 $prompt:Highlight|false$ 替换为 truefalse 来启用或禁用语法高亮。

{
  "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> 是请求将来自的域名,例如 filite.raphaeltheriault.com
  • <PORT> 是 filite 监听的端口

上传限制设置为 10M 作为示例

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>

编程使用

所有需要身份验证的请求都使用 HTTP Basic Auth(不考虑用户名)。

列出现有条目

可以通过身份验证的请求获取每种类型的所有现有条目的数组。

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

创建新条目

创建新条目有两种方式,即 PUTPOST 请求。 PUT 允许您手动选择 ID,而 POST 会自动分配一个,但这是唯一的区别。两种方法都需要身份验证。

PUT 请求将覆盖任何现有条目。

文件

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

文件作为 multipart/form-data 发送。字段名称不重要,但必须包含文件名。只处理一个文件。

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

链接作为根据以下模式发送的 application/json

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

文本

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

文本作为根据以下模式发送的 application/json

{
  "$schema": "https://json-schema.fullstack.org.cn/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"
    }
  }
}

删除条目

可以通过身份验证的请求删除任何条目。

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

贡献

该项目欢迎贡献!在提交 PR 之前,请确保您的更改在启用和禁用 dev 功能的情况下都能正常工作。

要求

设置

  1. .env.example 复制到 .env 并设置变量
  2. 运行 diesel database setup
  3. 启用 dev 功能后构建或运行

许可证

filite 在 MIT 许可证 下授权。

依赖项

~70MB
~1.5M SLoC