Skip to content

Repository files navigation

OpenPtl

OpenPtl é um cliente nativo multiplataforma para conexões SSH e operações SFTP, construído integralmente em Rust com Slint. A aplicação não depende de runtime web, HTML ou WebView: a interface, a orquestração de tarefas e os serviços de domínio são compilados no mesmo binário.

Recursos principais

O cliente oferece um vault local criptografado para perfis e credenciais, proteção por senha mestre com Argon2id e XChaCha20-Poly1305, gerenciamento de conexões SSH/SFTP, shell local, terminal integrado, validação explícita de hosts desconhecidos e armazenamento seguro de known_hosts.

A interface principal é formada por uma sidebar organizada, dashboard de visão geral, cards de conexões, modais dinâmicas, formulários por seção, keychain, workspace de sessões, configurações e informações do produto. As operações de rede permanecem isoladas do código de apresentação e usam Tokio para executar tarefas assíncronas do protocolo SSH.

Arquitetura

Camada Responsabilidade Localização
Entrada Inicialização da janela e inclusão dos componentes Slint src/main.rs
Aplicação Estado de navegação, formulários e casos de uso src/app.rs
Ponte Callbacks Slint e sincronização dos modelos visuais src/ui/bridge.rs
Interface Componentes, páginas, sidebar e modais ui/app-window.slint
Backend Coordenação de vault, SSH, SFTP e runtime assíncrono src/backend.rs
Domínio Modelos, vault criptografado e tarefas de transferência src/libs/
Protocolos Sessões SSH e adaptadores SFTP src/protocols/

O arquivo build.rs compila os arquivos declarativos Slint e slint::include_modules!() disponibiliza os componentes exportados para o Rust. O backend não conhece detalhes de layout; a ponte transforma ações da UI em chamadas da fachada Backend.

Plataformas

A interface foi estruturada para uma base visual compartilhada entre Windows, macOS, Linux e Android. O build desktop usa a janela nativa do Slint. O suporte Android requer o fluxo de compilação com Android SDK, NDK e o backend android-activity; a configuração de distribuição móvel deve ser adicionada ao pipeline específico do aplicativo.

Requisitos

É necessário ter o toolchain Rust estável, um compilador C compatível e as bibliotecas gráficas nativas da plataforma. Em distribuições Debian/Ubuntu, o ambiente básico pode ser preparado com build-essential, pkg-config, libx11-dev, libxkbcommon-dev, libwayland-dev e libudev-dev.

Para compilar a interface Slint, o projeto também usa slint-build como dependência de build. O Android requer adicionalmente o Android SDK, NDK e as ferramentas de empacotamento correspondentes.

Desenvolvimento

cargo run

Para uma compilação otimizada:

cargo build --release

Para executar os testes:

cargo test

Para validar estilo e problemas comuns:

cargo fmt --all -- --check
cargo clippy --all-targets --all-features -- -D warnings

Segurança operacional

A primeira execução solicita uma senha mestre com pelo menos seis caracteres. A senha é usada localmente para derivar a chave do vault e não é persistida em texto puro. Ao conectar a um servidor cuja chave ainda não é conhecida, a aplicação exibe a impressão digital e exige uma confirmação explícita antes de gravá-la.

As credenciais devem ser cadastradas no vault e nunca em arquivos de configuração do projeto. O arquivo known_hosts de trabalho é materializado a partir de uma cópia protegida dentro do vault e é recapturado após alterações da sessão.

Licença

Este projeto é distribuído sob a licença MIT. Consulte LICENSE para o texto completo.

Direção visual

A interface utiliza um sistema visual próprio para aplicações operacionais modernas. A base segue uma escala de espaçamento em múltiplos de quatro, superfícies escuras em camadas, bordas discretas, hierarquia tipográfica, estados semânticos e alvos de interação confortáveis. A sidebar separa navegação global de conteúdo; cada página tem título, subtítulo e uma região de trabalho previsível; modais ficam reservadas para decisões de segurança, detalhes e confirmações destrutivas.

A aplicação evita usar cor como único indicador. Estados de sucesso, atenção e risco também aparecem por texto, ícones e ações explícitas. Campos sensíveis continuam mascarados e os formulários usam labels persistentes, agrupamento semântico e rolagem nos painéis de listas. A especificação detalhada das decisões está em design-research.md.

A direção foi comparada com os princípios de layout e espaçamento do Fluent 2, a organização de padrões e componentes do GNOME HIG, os fundamentos multiplataforma da Apple Human Interface Guidelines e a estrutura de tokens do Material Design 3. A implementação permanece nativa em Slint e não utiliza HTML, Tauri ou WebView.

About

TermOpen é um projeto com o objetivo de ser um painel

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages