Foi necessário alterar o endereço ip da api para o funcionamento correto no emulador no caso do WINDOWS. O serviço agora é executado no endereço: http://192.168.1.7:5000
Este teste avalia suas habilidades na construção de um aplicativo Flutter que se integra a uma API para autenticação TOTP (Time-based One-Time Password). O aplicativo deve seguir o design fornecido no Figma e incluir três páginas principais:
- Página de Login: O usuário insere o nome de usuário e senha.
- Página de Recuperação de Secret: O usuário insere um código de recuperação (
000010
) para obter o secret TOTP. - Página Home: Após o login bem-sucedido, o usuário é redirecionado para a página Home.
- Na Página de Login, o usuário insere o nome de usuário (
admin
) e a senha (password123
) e clica no botão de login. - Se o secret TOTP não estiver presente, o usuário é redirecionado automaticamente para a Página de Recuperação de Secret.
- Na Página de Recuperação de Secret, o usuário insere o código de recuperação (
000010
) para obter o secret. - Após recuperar o secret, o usuário é redirecionado de volta para a Página de Login.
- Com o secret agora disponível, o usuário tenta fazer login novamente.
- Um login bem-sucedido redireciona o usuário para a Página Home.
O projeto base já contém a estrutura inicial e as dependências necessárias para começar. O foco principal será implementar o gerenciamento de estado e a integração com a API.
Figma: Autenticação TOTP
-
Login Page:
- Inputs para nome de usuário e senha.
- Botão de login.
- Se o secret não estiver presente, redirecionar para a página de recuperação de secret após clicar no login.
-
Recovery Secret Page:
- Input para o código de recuperação (somente
000010
é válido na API). - Botão para recuperar o secret.
- Após a recuperação, redirecionar de volta para a página de login.
- Input para o código de recuperação (somente
-
Home Page:
- Exibir um texto "Home" centralizado na tela com uma bottom navigation bar.
A organização do código será um dos pontos de avaliação. Recomendamos uma estrutura clara e modular para facilitar a manutenção e a expansão futura do aplicativo.
O backend é necessário para testar a funcionalidade do aplicativo. Para configurar e executar a API, siga as instruções no
arquivo api/README.md
localizado no repositório base.
- Acesse o diretório
api
no repositório base. - Siga as instruções no
README.md
para instalar as dependências e iniciar o servidor. - O servidor deve estar disponível em
http://192.168.1.7:5000
.
-
POST
/auth/login
:- Verifica as credenciais do usuário e um código TOTP gerado.
- Corpo da requisição:
{ "username": "admin", "password": "password123", "totp_code": "<generated_totp_code>" }
-
POST
/auth/recovery-secret
:- Retorna o secret TOTP quando fornecido o código de recuperação correto (
000010
). - Corpo da requisição:
{ "username": "admin", "password": "password123", "code": "000010" }
- Retorna o secret TOTP quando fornecido o código de recuperação correto (
- Gerenciamento de Estado: Use
flutter_bloc
para gerenciar o estado do aplicativo. - Geração de TOTP: O código TOTP deve ser gerado automaticamente após o usuário fornecer o usuário e senha corretos.
- Navegação: Implemente a navegação entre as três páginas de acordo com o fluxo descrito.
- Tratamento de Erros: Exiba mensagens de erro apropriadas para o usuário em caso de falha na recuperação do secret ou na autenticação.
O otp
já está incluído no pubspec.yaml
do projeto base. Use a função abaixo para gerar o código TOTP com base no secret
recuperado:
import 'package:otp/otp.dart';
String generateTOTP(String secret) {
return OTP.generateTOTPCodeString(
secret,
DateTime.now().millisecondsSinceEpoch,
interval: 30,
algorithm: Algorithm.SHA1,
isGoogle: true,
);
}
- Se o secret não estiver presente, redirecione automaticamente para a Recovery Secret Page.
- Gere o código TOTP usando o secret recuperado e envie junto com a solicitação de login.
- Redirecione para a Home Page em caso de sucesso.
- A API aceita apenas o código
000010
para recuperar o secret. - Exiba uma mensagem de erro se o código estiver incorreto.
- Redirecione para a Login Page após a recuperação bem-sucedida do secret.
- Implementação de UI: A interface deve corresponder ao design fornecido no Figma.
- Gerenciamento de Estado: Utilize o
flutter_bloc
corretamente para gerenciar as transições de estado. - Navegação: Navegue corretamente entre as páginas de login, recuperação de secret e home.
- Tratamento de Erros: Exiba mensagens de erro apropriadas para o usuário em caso de falhas.
- Qualidade do Código: O código deve ser limpo, modular e fácil de manter, com uma boa organização.
Após finalizar o teste, compacte o projeto em um arquivo .zip
ou faça o push para um repositório pessoal e envie o link.
Boa sorte, e entre em contato se tiver alguma dúvida!