#文件共享 #Web应用 #上传 #Web服务器 #网络

app duplo

用于在私有网络中轻松部署文件共享门户的Web应用程序

3个版本

0.1.2 2023年10月15日
0.1.1 2023年2月20日
0.1.0 2023年2月19日

#640HTTP服务器

MIT/Apache

465KB
3.5K SLoC

JavaScript 3K SLoC // 0.1% comments Rust 576 SLoC // 0.0% comments

包含 (WOFF字体, 24KB) glyphicons-halflings-regular.woff

Duplo

匿名文件共享的Web应用程序。Mikhalevich/filesharing的替代后端。

screenshot

特性

  • 从浏览器上传文件到服务器,包括拖放。
  • 轻松发布文本片段(类似pastebin)。
  • 上传的HTML页面立即在浏览器中可查看。在目录中搜索 index.html。猜测MIME类型。
  • 自动清理两个目录中的一个中的旧文件。
  • 配额以防止文件数量过多或总字节数过大。
  • 易于部署:可执行文件嵌入静态资产,无需单独的Web服务器即可使用。
  • 支持HTTP/2。
  • 记录包括上传、删除和清理。

限制

  • 没有认证(与原始“filesharing”项目不同)。
  • 没有过载保护(除磁盘配额外) - 可能会对部署Duplo的主机进行DoS攻击。
  • 网络安全性不确定。上传的HTML文件作为 text/html 提供,这会影响Duplo部署处的原始Web安全性。
  • 配置不够灵活。与原始“filesharing”不同,总是有两个共享。您可能需要覆盖“Content-Security-Policy”头以提供更宽松或更严格的规则。
  • 未在非Linux上测试
  • 不支持创建、列出或删除目录。

不建议部署全局可访问的Duplo实例。

部署

  1. Github发布下载预构建的Duplo版本或使用 cargo install --path . 从源代码构建。
  2. 选择两个目录:临时(每天清理旧文件)和永久(不清理)。
  3. 选择用于服务传入请求的端口号。
  4. 启动应用程序:duplo 0.0.0.0:80 -t /path/to/directory_where_old_files_disappear -p /path/to/permanent_directory
  5. 导航到 http://127.0.0.1:80/ - 重定向将带您到临时文件共享。永久文件共享在任何地方都没有链接 - 您需要通过显式URL访问它: http://127.0.0.1:80/permanent/。测试一下上传或文本共享是否工作。

将其作为SystemD服务或Docker容器部署应该不难。

默认配额为10GB和1000个文件。默认情况下,清理工作在GMT+0的00:00进行,并删除24小时前的文件。

没有选项可以放弃两个文件共享中的任何一个 - 您可以通过指定没有写访问权限的空目录来解决这个问题。

使用说明

`duplo --help` 输出
Usage: duplo <listen_socket> -t <transiet-directory> -p <permanent-directory> [--max-files <max-files>] [--max-bytes <max-bytes>] [--cleanup-time-utc <cleanup-time-utc>] [--cleanup-maxhours <cleanup-maxhours>] [--transient-title <transient-title>] [--permanent-title <permanent-title>] [--content-security-policy <content-security-policy>]

simple insecure HTTP server with anonymous file upload (including html/js upload and publication)

Positional Arguments:
  listen_socket     socket address to bind TCP socket and listen for including
                    HTTP requests

Options:
  -t, --transiet-directory
                    serve (and upload) files from this directory at /transient/
  -p, --permanent-directory
                    serve (and upload) files from this directory at /permanent/
  --max-files       maximum number of files allowed to reside in transient and
                    permanent directories. Default is 1000
  --max-bytes       maximum number of bytes allowed to reside in transient and
                    permanent directories. Default is 10GB
  --cleanup-time-utc
                    time of day (UTC+0 timezone) to trigger the cleanup event
                    on. Default is `00:00:00`
  --cleanup-maxhours
                    clean up files older than this number of hours from the
                    transient directory. Default is 24.
  --transient-title page title for transient directory's filelist
  --permanent-title page title for permanent directory's filelist
  --content-security-policy
                    set this Content-Security-Policy header for served files
  --help            display usage information

许可协议

src/ 目录中的代码是原创的,并使用MIT或Apache-2.0许可。
res/ 目录中的代码(例如jquery、dropzone.js、bootstrap)来自多个来源,通常具有类似MIT的许可。这些文件在构建时嵌入到可执行文件中。
templates/ 中的代码基于 filesharing-web-service,该服务没有指定许可。

依赖项

约15-26MB
约444K SLoC