ππ
√≠××××≈π ███╗ ███╗███████╗████████╗ ██████╗ ██████╗ █████╗ ██████╗ ███████╗
√≠≠÷×××××≠∞≈≠≠≈∞ ████╗ ████║██╔════╝╚══██╔══╝██╔═══██╗██╔══██╗██╔══██╗██╔════╝ ██╔════╝
π ∞××÷≈√≠≠∞ π≠≠∞ ██╔████╔██║███████╗ ██║ ██║ ██║██████╔╝███████║██║ ███╗█████╗
≈π √≠≠√ π≈≠√ ≠≠∞ ██║╚██╔╝██║╚════██║ ██║ ██║ ██║██╔══██╗██╔══██║██║ ██║██╔══╝
ππ √≠≠√ π≈≠√ ≠≠∞ ██║ ╚═╝ ██║███████║ ██║ ╚██████╔╝██║ ██║██║ ██║╚██████╔╝███████╗
√≈≈√ π≈≈√ ≈≈∞ ╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝
O Moodle Storage é uma ferramenta de linha de comando (CLI) e interface de terminal (TUI) de alta performance escrita em C++23. Ele permite gerenciar a sua área de arquivos privados do Moodle diretamente do terminal, com suporte a uploads recursivos, exclusões em lote e downloads compactados nativamente no servidor.
- 🖥️ TUI e CLI: Uma interface gráfica completa no terminal (TUI) para navegação interativa, e uma CLI robusta para scripts e automação.
- 🔐 SSO Automatizado & Keyring: Suporte a login automático em Provedores de Identidade (como o Shibboleth da UFPel) sem abrir o navegador, salvando credenciais e tokens em segurança no Gnome Keyring (via
libsecret). - 🚀 Arquitetura Híbrida (REST + AJAX): Combina a velocidade e estabilidade da API REST Oficial do Moodle (Tokens) com o poder cirúrgico da API AJAX legada para operações exclusivas de diretórios.
- 📂 Gerenciamento Hierárquico: Criação de pastas (
mkdir -p), upload recursivo automático de diretórios, deleção limpa de árvores de diretórios e download em lote (com ou sem compactação ZIP via servidor). - 📊 Observabilidade: Acompanhamento de cota (Usage) e banco de dados SQLite local com histórico completo de uploads.
O Moodle Storage é distribuído como um binário pré-compilado para Linux x86_64.
Acesse a página de Releases e baixe a versão mais recente (.tar.gz).
Extraia o binário e mova-o para o seu PATH:
tar -xzvf moodle-storage-linux-amd64.tar.gz
sudo mv mstorage /usr/local/bin/O binário é quase totalmente estático. A única dependência obrigatória do sistema é a libsecret (para o Keyring).
Ubuntu / Debian:
sudo apt update && sudo apt install libsecret-1-0Arch Linux:
sudo pacman -S libsecretO moodle-storage não salva suas senhas em arquivos de texto. Ele integra-se nativamente ao sistema de cofres do Linux (Secret Service API).
Se você usa GNOME, KDE Plasma ou Cinnamon, o chaveiro (gnome-keyring ou kwallet) provavelmente já está rodando.
Para ambientes Window Manager (i3, bspwm, sway) ou Headless: Certifique-se de que o daemon do keyring está ativo:
# Ubuntu/Debian
sudo apt install gnome-keyring dbus-x11 seahorse
# Arch Linux
sudo pacman -S gnome-keyring seahorseDica: O aplicativo seahorse (Senhas e Chaves) fornece uma interface gráfica amigável para visualizar e gerenciar os tokens salvos pela nossa aplicação.
A CLI do mstorage foi desenhada para facilitar a integração em scripts de shell.
mstorage login --url https://e-aula.ufpel.edu.brO CLI pedirá seu CPF e senha de forma mascarada. O processo navega pelos redirecionamentos SSO (Shibboleth), extrai o Token Móvel Permanente do Moodle, e pergunta se você deseja salvá-lo no Keyring.
Para sair e limpar completamente seus dados do cofre criptografado:
mstorage logoutmstorage listExibe uma árvore hierárquica formatada (UTF-8/Emoji aware) de todos os seus arquivos privados e pastas.
mstorage mkdir MinhaNovaPastaVocê pode enviar arquivos individuais ou pastas inteiras de forma automática e recursiva.
# Upload de arquivos únicos para a raiz
mstorage upload documento.pdf foto.png
# Upload para uma subpasta específica
mstorage upload documento.pdf --path /MinhaNovaPasta/
# Upload de um diretório local (recursivo por padrão)
mstorage upload /home/user/meus_arquivos --path /Backup/A ferramenta permite o download recursivo individual de arquivos ou delega a compressão ZIP para o servidor Moodle (comportamento padrão, use --no-zip se preferir baixar os arquivos individualmente mantendo a estrutura).
# Baixa um arquivo
mstorage download documento.pdf
# Baixa uma pasta inteira (com compactação ZIP no servidor)
mstorage download MinhaNovaPasta
# Baixa uma pasta inteira individualmente, arquivo por arquivo (sem ZIP)
mstorage download MinhaNovaPasta --no-zipApaga arquivos ou diretórios de forma automática (detecta automaticamente pastas e as exclui recursivamente).
mstorage delete documento.pdf
mstorage delete MinhaNovaPastaA deleção de diretórios aciona um fallback automático para a API AJAX caso a API REST se recuse a apagar o registro físico da pasta.
mstorage usage # Exibe a barra de uso da sua cota (ex: 50MB / 100MB)
mstorage history # Mostra o histórico local (SQLite) das suas submissões
mstorage history -c # Limpa o banco de dados de histórico localSe você executar o programa sem nenhum argumento (ou apenas mstorage), o modo TUI Interativo será iniciado.
Setas (Cima/Baixo): Navegar na lista de arquivos.Setas (Esquerda/Direita): Expandir ou colapsar pastas.Espaço: Selecionar múltiplos itens (Multi-select) para download ou exclusão em lote.m: Abrir o Menu Principal.s: Abrir o Menu de Configurações (Troca de Temas).u / d / Delete / n: Atalhos rápidos para Upload, Download, Excluir e Nova Pasta (Mkdir).q: Sair do aplicativo.
Todo o estado local do usuário é salvo no diretório padrão: ~/.config/mstorage/.
session.json: Guarda a URL do Moodle e ousername(As senhas/tokens ficam no Gnome Keyring).uploads.db: Banco de dados SQLite contendo o audit trail das suas operações de upload.
O TUI do Moodle Storage suporta temas dinâmicos. Os temas são lidos de arquivos de configuração em:
/home/user/.config/mstorage/themes/
O tema ativo fica salvo em default.conf dentro desse diretório.
Como criar um tema novo:
- Crie um arquivo chamado
meu_tema_cyberpunk.themena pastathemes/. - Configure ele seguindo como base os outros temas e salve.
- Abra a TUI, aperte
spara acessar as configurações, e selecione o seu novo tema!
O cliente implementa uma ponte híbrida única:
- A Abordagem REST: Consome o endpoint oficial
webservice/rest/server.php. Garante que operações pesadas (Upload/Download) jamais sofram timeouts por expiração de sessão web. - O Fallback AJAX: Consome o endpoint antigo
repository/draftfiles_ajax.phpusando o "Sequestro de Sessão" via Shibboleth. É invocado cirurgicamente para contornar falhas de arquitetura da API do Moodle (como a incapacidade do REST de excluir diretórios vazios ou usar compressão ZIP server-side).
Para um aprofundamento rigoroso na engenharia reversa do sistema de arquivos do Moodle, leia A Bíblia da Moodle API.
Distribuído sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.




