Skip to main content

Olá,

 

Procuro cliente para a Meo Cloud para UNIX *BSD e Gnu LINUX.

Encontrei este um pouco desactualizado e não o consigo compilar: meocloud-upload

 

Existe o rclone.org mas não sei como o usar na Meo.

Obrigado,

Nuno Teixeira

Humm é mau sinal ao fim de três anos não haver resposta… 🤔

Ok, experimentei hoje mesmo o meocloud-update, e funciona lindamente. A compilação foi perfeita em Linux (Ubuntu 22.04, gcc 11.4.0), sem quaisquer alterações. Em macOS (Big Sur, um pouco antigo...) as coisas não correram tão bem, foi preciso alterar uma linha em Util.h — mais ou menos por volta da linha 6, onde está #ifdef __unix__, passar a #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))

É um «combóio» um pouco mais comprido, mas pelo menos funciona para macOS compilado com o LLVM/clang (v17 — via Homebrew), e variantes; as restantes versões de Unix (derivados de BSD, SysV...) devem funcionar também. Se não for o caso… é uma questão de acrescentar mais uns quantos #defined  nessa linha, para a variante que usas 😉

O código do J. F. Henriques só faz uploads (como o nome indica) e deve ser considerado essencialmente um proof of concept — permitirá fazer facilmente cópias de segurança regulares, por exemplo, mas não é a solução, por exemplo, para montar um disco remoto.

Para isso, realmente, o ideal seria mesmo o rclone. Ora eu sou grande fã do dito cujo, mas, infelizmente, apesar da afirmação em contrário, a API da MEO não é bem compatível a 100% com a da Dropbox. Mesmo assim não parece ser muito diferente, e, no meu caso, quase que consigo a autenticação a funcionar.

Após criar uma nova configuração remota, via rclone config, escolhendo-se a opção de uma configuração tipo Dropbox, e entrando na configuração avançada, é depois possível colocar os dados que se obteve da página da API da MEO. De notar que o callback URL — aquilo que depois vai abrir o browser para que este se autentique na MEO Cloud — deve ser o que é apresentado pelo rclone, e que, em princípio, será qualquer coisa como http://localhost:53682/

Isto em teoria 😅

Na prática, infelizmente, está a faltar-me um elemento essencial qualquer no rclone, pois o melhor que consigo é receber um 

Error: Auth Error

Description: No code returned by remote server

que corresponde a um erro de invalid_scope enviado pelo servidor de autenticação da MEO.

Só mesmo olhando para o código do rclone (coisa que tenciono fazer!), pois estive a experimentar, em paralelo, usar a API directamente com chamadas HTTP (bem, usei o Postman para isso), e funcionou, tal como o código do J. F. Henriques. Não foi logo à primeira 😄 mas lá consegui...

Agora é apenas dar uma olhadela ao módulo que faz a autenticação via rclone e ver o que seria preciso mudar/adaptar para que funcione tudo. Pessoalmente, eu acho que a única questão para o tal erro está nas opções extra da MEO Cloud, nomeadamente, a diferenciaçã entre meocloud e sandbox, que, segundo o que me apercebi, não existe a nivel da API «pura» da Dropbox, pelo que possivelmente será necessário ver o impacto que isso tem (opcionalmente «forçando» um dos modos por omissão.

Portanto, para já, a solução via rclone tem de ser analisada em mais detalher...


Okay, já percebi porque é que apenas a autenticação via rclone funcionava, mas o resto não!

A autenticação é feita por OAuth2, o que é absolutamente standard e funciona lindamente, e, após autenticação, surge no painel Configurações > Aplicações e Autorizações uma nova entrada, que corresponde à ligação com o rclone. Até aqui tudo bem.

Mas o problema é que a MEO implementou apenas a versão um da API da Dropbox!...

Ora mais ninguém usa isso, pelo que o rclone na verdade está a tentar usar a versão dois para comunicar com a MEO, o que irá inevitavelmente falhar. A título de exemplo também testei o software nativo do meu Synology NAS (que corre sobre um kernel Linux), que não tem problemas alguns a sincronizar com várias contas na Dropbox em simultâneo, mas que se recusa a comunicar com a MEO — agora já percebo porquê. É tudo uma questão de versões da API.

Claro que a «culpa» não é da Dropbox (a nova versão da API na realidade faz muito mais sentido do que a primeira versão). Naturalmente, todas as aplicações que queiram comunicar com a Dropbox «verdadeira» irão usar a API 2.0 (pois a primeira versão já foi descontinuada pela Dropbox há muitos anos). Se alguma vez esse código existiu no rclone, já foi removido há milénios, pelo que, por esta via, a solução passa mesmo pelo desenvolvimento de um novo módulo para o rclone, especificamente programado para usar a API que a MEO usa.

Ora isso não é trivial de fazer, mas vou continuar a cuscar e a tentar compreender o grau de dificuldade que existe nisto...