Magic xpa & Armazenamento na Nuvem com SkyDrive®

Os desenvolvedores Magic xpa já sabem como é fácil gerar relatórios em formato RTF usando a tecnologia MERGE. Falamos também neste post anterior, sobre a possibilidade de se converter automaticamente arquivos RTF em formato PDF. Agora vamos abordar um próximo passo, que se pode dizer, ainda relacionado aos tópicos acima: salvar arquivos na nuvem.

Guardar documentos e relatórios dos sistemas, na nuvem, vem se tornando uma prática cada vez mais comum no ambiente corporativo. Existem vários serviços para esta finalidade, uns pagos e outros gratuitos.

Para manter a simplicidade do post, vamos focar apenas em dois serviços gratuitos: Microsoft SkyDrive e Google Drive.

O objetivo é guardarmos documentos nestes serviços de armazenamento, usando o Magic xpa. Para que o post não fique muito extenso, vamos abordar primeiramente o Microsoft SkyDrive. O acesso ao Google Drive ficará para uma próxima postagem.

 

Microsoft SkyDrive®

Antes de mais nada, precisamos ter uma conta no Microsoft Live. É bem provável que já tenhamos uma, dependendo de quais serviços Microsoft somos usuários. Mas se não houver, basta criar uma nova neste endereço.

O Microsoft SkyDrive disponibiliza uma API para que aplicações possam interagir com ele. Esta API faz parte de um conjunto maior de APIs para vários serviços em nuvem da Microsoft, chamada Live Connect.

Obviamente, uma das tarefas necessárias no uso desta API é a autenticação do usuário do serviço (logon). O Live Connect implementa a autenticação do usuário no serviço através de um protocolo standard, chamado OAuth 2.0. Este é um protocolo muito difundido para autenticação de usuários, usado por exemplo no Facebook, Twitter, LinkedIn, Google (além claro, do Live). Uma das características do OAuth 2.0 é que ele é fácil de implementar em sistemas web, mas nem tanto em sistema desktop. Isso porque o fluxo de autenticação define que a resposta do servidor de autorização deve ser redirecionada a um web Server no domínio do usuário (que está tentando se autenticar/logar), coisa que nem sempre existe numa aplicação essencialmente desktop.

Para facilitar a interface com o Magic xpa, adotaremos o fluxo de autenticação chamado de “Concessão de Código de Autorização”. Ele é definido como o mais apropriado para aplicações desktop. Este fluxo possui basicamente os seguintes passos:

  1. Acessar o servidor de autorização e obter o código de autorização (ACCESS_CODE). Este passo é interativo.
  2. Acessar o servidor de autorização e trocar o código de autorização (ACCESS_CODE) pelo token de acesso (ACCESS_TOKEN) e pelo token de renovação (REFRESH_TOKEN). Este passo é não-interativo. O ACCESS_TOKEN é uma chave que identifica a sessão que foi aberta no servidor, para o usuário que se autenticou no passo #1. Ela precisa ser informada em todos os acessos subsequentes à API, para que o serviço seja executado na conta certa J. Esta sessão tem tempo de duração limitada, normalmente de 1h (3600s).
  3. Ao detectar que a sessão expirou, e necessário acessar novamente o servidor de autorização, com o REFRESH_TOKEN obtido no passo #2, e solicitar um novo ACCESS_TOKEN, para poder continuar acessando a API do serviço, sem necessidade de nova autenticação do usuário. Este passo é não interativo.

Quando executamos o passo #1, o servidor de autorização envia o resultado do logon (sucesso ou falha) para o web Server do cliente (através de um redirecionamento de chamada). Quando executamos os passos #2 e #3 a resposta retorna diretamente na chamada HTTP, em formato JSON. Veja mais detalhes aqui.

Então, são estes os desafios do exemplo neste post:

  1. Obter o ACCESS_TOKEN para o servidor do Microsoft SkyDrive
  2. Ler/Gravar estruturas em formato JSON.
  3. Fazer upload de arquivos para o disco na nuvem

O Magic xpa possui rotina nativas para trabalhar com formatos XML, mas não para o formato JSON. Mostramos em posts anteriores (aqui e aqui), técnicas para converter um formato em outro, com o Magic xpa. Para o bem da simplicidade do nosso exemplo, usaremos uma biblioteca de terceiro (gratuita) para este trabalho: a NewtonSoft.Json.

Ok, então, vamos iniciar os trabalhos.

A API do Microsoft SkyDrive (e do Google Drive também) determina que a autorização de acesso deve ser concedida a uma “aplicação” e não a uma “pessoa” diretamente.

Por isso, o primeiro passo é termos uma aplicação associada com a nossa conta Live

1.   Acessamos o endereço do site de Gerenciamento de Aplicativos Live:

 

E fazemos logon.

2.   Em seguida, cadastramos o nosso aplicativo:

 

3.   Fazemos alguns ajustes na configuração da API:

 

Nesta etapa, devemos deixar o domínio em branco (pois somos uma aplicação desktop), e precisamos marcar nossa aplicação como “cliente móvel”, mesmo que ela não seja. Isso permite ao servidor de autorização do Live usar valores fixos (pré-determinados) como sendo o domínio de redirecionamento, já que não teremos um. Para conhecer mais sobre este assunto, consulte aqui.

Outro detalhe muito importante nesta página é que ela exibe o Id do Cliente (ClientId) e o Segredo do Cliente (ClientSecret) associados à. Estas duas informações são necessárias para podermos obter o ACCESS_TOKEN.

Ok. Já temos a conta Live, e uma aplicação associada a ela:

 

Passemos agora para a programação no Magic xpa.

O que é necessário para acessar a API do Microsoft SkyDrive é um ACCESS_TOKEN válido. Se não tivermos um ACCESS_TOKEN, é necessário acionar o servidor de autorização para fazer logon na conta, obter o ACCESS_CODE, e depois trocá-lo pelo ACCESS_TOKEN. Se o tivermos, mas ele estiver expirado, precisamos renová-lo (usando o REFRESH_TOKEN). No programa  Magic xpa que construiremos, nós não iremos implementar lógica de renovação de token (REFRESH_TOKEN). Sempre que o ACCESS_TOKEN não existir, ou estiver expirado, faremos outro logon e pediremos um novo. Na vida real, provavelmente a opção de renovação é a melhor.

NOTA: Quando instalamos o SkyDrive Desktop ou o Google Drive Desktop, é isso que estas aplicações fazem: solicitam o logon na conta 1 vez (normalmente no primeiro acesso), e depois ficam renovando periodicamente o ACCESS_TOKEN.

No projeto Magic xpa, precisamos adicionar alguns assemblies .NET que serão necessários:

 

Em nosso exemplo, teremos um “cofre” para guardar o ACCESS_TOKEN já recebido e podermos reutilizá-lo enquanto não expirar:

 

Como as respostas da API virão em formato JSON, precisaremos converter para XML:

 

Para ler mais facilmente suas informações com a função nativas de XML do Magic xpa:

JSON

{“error”:”invalid_client”,”error_description”:”The provided request must include a ‘client_id’ input parameter.”}

XML

 

Para o processo de autorização (solicitação do ACCESS_CODE), que é interativo, precisaremos de uma interface com um controle web Browser para acesso ao servidor de autorização do Live:

E monitorar o redirecionamento recebido para saber qual o resultado da solicitação:

Porque definimos nossa aplicação Live como sendo “Cliente Móvel”, podemos usar o domínio especial https://login.live.com/oauth20_desktop.srf como sendo o domínio de redirecionamento.

A troca do ACCESS_CODE recebido, pelo ACCESS_TOKEN é uma rotina batch normal (não interativa), acessando o servidor Live via HTTPCall:

Já para o upload propriamente dito, usaremos a interface REST da API do SkyDrive, cfe. descrito aqui:

Ok.

Ao executarmos nosso programa exemplo (<<< SkyDrive Upload >>>), vemos esta tela:

Precisamos informar a localização do arquivo a transferir, o seu respectivo tipo MIME, além no ClientId e ClientSecret da nossa aplicação.

Como ainda não possuímos um ACCESS_TOKEN valido, ao clicar em “Transferir” seremos direcionados à tela de autenticação do servidor SkyDrive:

Informando os dados de logon em nossa conta, o servidor nos leva a pagina de “Consentimento”:

Ao consentirmos explicitamente (clicando em “SIM”), recebemos o ACCESS_CODE e com ele solicitamos então o ACCESS_TOKEN:

E então se inicia o upload:

Pronto!

Lá está nosso arquivo (SkyDrive_POST.txt):

E você pode fazer o teste: fechar e reabrir o Magic xpa. Enquanto o ACESS_TOKEN não tiver expirado, o programa não solicitará novo logon/autenticação e novos uploads podem ser realizados diretamente. Em um ambiente de produção, você provavelmente irá optar por implementar a lógica de refresh automático, para não necessitar novo logon do usuário da conta.

Este projeto exemplo, com o Magic xpa 2.2a, está disponível para download neste endereço.

 

Manoel Frederico - Gerente de Produto e Magic Evangelista
Manoel Frederico – Gerente de Produto e Magic Evangelista

 

Deixe um comentário

O seu endereço de e-mail não será publicado.