Status Em andamento
Categorias Aplicações web
Publicado em

O lavedonio.download é onde guardo os arquivos que meus outros projetos usam, servidos em endereços que não mudam. É um site para organizá-los e uma API REST para enviá-los e baixá-los por código, feito em Python com Django e Django REST Framework, no visual deste site (o site e a API estão em inglês).

O que ele faz

  • Uploads e links. Um item é um arquivo enviado ou um link para um arquivo que está em outro lugar. Os endereços de um link redirecionam para ele, e ele não ocupa espaço.
  • Pastas e tags. Cada usuário tem a sua pasta no armazenamento, que segue as pastas dele: renomear ou mover um arquivo ou uma pasta também o move no armazenamento.
  • Endereços para outros projetos. Todo item tem um endereço permanente (/f/<id>/), que continua valendo depois de renomeado ou movido, um que segue as pastas (/d/<usuário>/<pastas>/<nome>) e um na API. Os arquivos abrem no navegador quando isso é seguro (imagens, PDFs, textos...), e com ?download são baixados.
  • Privado, compartilhado ou público. Cada item é visto só pelo seu usuário, também pelos usuários com quem é compartilhado, ou por qualquer um com o seu endereço, sem login.
  • Limites. Por padrão, cada arquivo tem no máximo 10 MB e cada usuário guarda no máximo 5 GB.

Contas

Não há cadastro: as contas são criadas por um administrador. Os donos podem tudo, inclusive mudar os limites e a cota de cada usuário; os administradores criam usuários e gerenciam as suas contas e dados; e os usuários gerenciam os seus próprios arquivos, links e pastas.

A API

Arquivos, links, pastas, tags e contas também podem ser gerenciados pela API, com um token criado na página da conta. Por exemplo, para enviar um arquivo público:

curl -H "Authorization: Token $TOKEN" -F file=@relatorio.pdf \
  -F visibility=public https://api.lavedonio.download/v1/items/

Todos os endpoints estão na documentação interativa, gerada a partir do código (OpenAPI).

Como foi feito

  • Os arquivos ficam em buckets privados do Cloudflare R2. Todo download passa pelo Django, que confere quem pode ver o arquivo e então redireciona para um endereço assinado que expira em 5 minutos.
  • Ele roda nos mesmos servidores deste site: Django sob uWSGI em uma VPS com CloudPanel, com o PostgreSQL em outra, atrás da Cloudflare.
  • Os testes rodam em todo pull request, no SQLite e no PostgreSQL, e o GitHub Actions publica cada push nas branches de staging e de produção.
« Voltar aos projetos