EAuthenticator - Clone do Google Authenticator para Linux
Este artigo apresenta o EAuthenticator, um clone do Google Authenticator para desktop. No título consta como clone para Linux, mas na verdade trata-se de um aplicativo multiplataforma, escrito em Electron script.
Introdução
Este artigo é uma continuidade de minha dica anterior, onde abordei como gerar tokens TOTP a partir de chaves na base 32 com o oathtool, simulando o comportamento do cliente Google Authenticator.
Nesta dica veremos outra alternativa, que é o EAuthenticator, cujo nome vem de Electron Authenticator, ou seja, um clone do Google Authenticator escrito em Electron.
Para quem não conhece, Electron é, a grosso modo, um conjunto de bibliotecas JavaScript derivada do React que nos permite criar aplicativos multiplataforma para desktop.
O projeto é distribuído sob licença GPL e seu repositório no GitHub é:
git clone https://github.com/Nikolasel/EAuthenticator.git
Entre na pasta criada:
cd EAuthenticator
Instale as dependências:
npm install
Gere o arquivo de licenças licenses.json:
npm run license
Se chegou até aqui, tudo pronto! Para executar o aplicativo digite:
npm start Clique no botão "+" para adicionar uma conta:
Estando no diretório raiz do projeto, digite:
npm run package-linux
Será gerado um binário dentro do diretório "release-builds", no meu caso:
ls release-builds
EAuthenticator-linux-x64
E dentro do subdiretório EAuthenticator-linux-x64 haverá um arquivo executável "EAuthenticator".
Agora basta executá-lo:
./release-builds/EAuthenticator-linux-x64/EAuthenticator
O problema é que o arquivo precisa de algumas bibliotecas que estão contidas no diretório no qual ele pertence, então não é possível mover o binário sozinho para outro diretório (você poderá no máximo criar um link simbólico em um diretório do PATH apontando para ele):
ls release-builds/EAuthenticator-linux-x64
chrome_100_percent.pak
chrome_200_percent.pak
EAuthenticator
icudtl.dat
libEGL.so
libffmpeg.so
libGLESv2.so
libVkICD_mock_icd.so
LICENSE
LICENSES.chromium.html
locales
natives_blob.bin
resources
resources.pak
snapshot_blob.bin
swiftshader
v8_context_snapshot.bin
version
Como resolver? Bom, a melhor solução será empacotar o aplicativo.
npm run create-installer-deb
Será gerado um arquivo .deb dentro de release-builds:
ls release-builds/*deb
eauthenticator_0.2.0~dev_amd64.deb
Instale o pacote com:
sudo dpkg -i release-builds/eauthenticator_0.2.0~dev_amd64.deb
Verificando:
dpkg -l eauthenticator
ii eauthenticator 0.2.0~dev-1 amd64 An Electron Desktop app compatible with Google Authenticator
Executando:
eauthenticator
sudo dnf install rpm-build
Em seguida, no diretório raiz do projeto, execute:
npm run create-installer-rpm
Será gerado um arquivo .rpm dentro de release-builds:
ls release-builds/*rpm
Também é possível gerar um executável para Windows, mas este procedimento foge ao escopo do artigo.
Um bom ponto de partida no aprendizado da Electron é estudar o código do EAuthenticator.
Fonte: https://github.com/Nikolasel/EAuthenticator
Nesta dica veremos outra alternativa, que é o EAuthenticator, cujo nome vem de Electron Authenticator, ou seja, um clone do Google Authenticator escrito em Electron.
Para quem não conhece, Electron é, a grosso modo, um conjunto de bibliotecas JavaScript derivada do React que nos permite criar aplicativos multiplataforma para desktop.
O projeto é distribuído sob licença GPL e seu repositório no GitHub é:
Pré-requisito
É necessário que você possua o Node.js instalado no sistema. Se estiver usando Debian, Ubuntu e derivados, confira minha dica: Como instalar última versão Node.js via repositório no Ubuntu, Debian e derivados [Dica]Instalação
Primeiro vamos clonar o projeto:git clone https://github.com/Nikolasel/EAuthenticator.git
Entre na pasta criada:
cd EAuthenticator
Instale as dependências:
npm install
Gere o arquivo de licenças licenses.json:
npm run license
Se chegou até aqui, tudo pronto! Para executar o aplicativo digite:
npm start Clique no botão "+" para adicionar uma conta:
Gerando um arquivo binário
Ninguém vai querer ficar entrando no diretório raiz do projeto e executar "npm start" toda vez que quiser abrir o aplicativo, não é mesmo? Pois bem, vamos gerar um arquivo binário para o teu sistema operacional!Estando no diretório raiz do projeto, digite:
npm run package-linux
Será gerado um binário dentro do diretório "release-builds", no meu caso:
ls release-builds
EAuthenticator-linux-x64
E dentro do subdiretório EAuthenticator-linux-x64 haverá um arquivo executável "EAuthenticator".
Agora basta executá-lo:
./release-builds/EAuthenticator-linux-x64/EAuthenticator
O problema é que o arquivo precisa de algumas bibliotecas que estão contidas no diretório no qual ele pertence, então não é possível mover o binário sozinho para outro diretório (você poderá no máximo criar um link simbólico em um diretório do PATH apontando para ele):
ls release-builds/EAuthenticator-linux-x64
chrome_100_percent.pak
chrome_200_percent.pak
EAuthenticator
icudtl.dat
libEGL.so
libffmpeg.so
libGLESv2.so
libVkICD_mock_icd.so
LICENSE
LICENSES.chromium.html
locales
natives_blob.bin
resources
resources.pak
snapshot_blob.bin
swiftshader
v8_context_snapshot.bin
version
Como resolver? Bom, a melhor solução será empacotar o aplicativo.
Criando um pacote .DEB
Para criar um pacote .DEB, estando no diretório raiz do projeto digite:npm run create-installer-deb
Será gerado um arquivo .deb dentro de release-builds:
ls release-builds/*deb
eauthenticator_0.2.0~dev_amd64.deb
Instale o pacote com:
sudo dpkg -i release-builds/eauthenticator_0.2.0~dev_amd64.deb
Verificando:
dpkg -l eauthenticator
ii eauthenticator 0.2.0~dev-1 amd64 An Electron Desktop app compatible with Google Authenticator
Executando:
eauthenticator
Bônus: criando um pacote .RPM
Para criar um pacote RPM, primeiro instale o rpm-build:sudo dnf install rpm-build
Em seguida, no diretório raiz do projeto, execute:
npm run create-installer-rpm
Será gerado um arquivo .rpm dentro de release-builds:
ls release-builds/*rpm
Também é possível gerar um executável para Windows, mas este procedimento foge ao escopo do artigo.
Conclusão
EAuthenticator é mais uma mostra do poder do software livre. Tive pouco contato com a linguagem Electron, mas ela está se mostrando bem promissora para o desenvolvimento de aplicativos desktop multiplataforma. A quem se interessar, fica a dica de estudo durante essa quarentena, que pelo visto ainda irá render. Vale lembrar que Electron basicamente é JavaScript, então seu aprendizado é muito recomendável! Na pior das hipóteses você estará treinando seus conhecimentos em JavaScript, que hoje é a linguagem de programação mais utilizada no mundo.Um bom ponto de partida no aprendizado da Electron é estudar o código do EAuthenticator.
Fonte: https://github.com/Nikolasel/EAuthenticator
Fabio, só uma correção nessa parte:
"Para quem não conhece, Electron é, a grosso modo, um conjunto de bibliotecas JavaScript derivada do React que nos permite criar aplicativos multiplataforma para desktop. "
Na verdade, Electron é baseado na engine de renderização do chromium e funciona combinado com node.js. O React é uma lib para construção de front-end SPA (Single Page Application), ou seja, não tem ligação com o Electron. Entretanto, vc pode unir React com Electron para construir interfaces mais inteligentes, assim como vc pode usar também o Vue ao invés de React, com o Electron.
Basicamente, podemos dizer que o Electron é um chromium capado que fornece uma janela com componentes web e com uma API própria para construir aplicações desktops multiplataforma.