{"id":15091076,"url":"https://github.com/d1ogocs/projeto-final","last_synced_at":"2026-01-05T07:07:29.375Z","repository":{"id":248418625,"uuid":"828599422","full_name":"D1ogoCS/Projeto-Final","owner":"D1ogoCS","description":"Implementação de mecanismos de autenticação e segurança em aplicações críticas: Caso de estudo - Sistema de gestão bancária","archived":false,"fork":false,"pushed_at":"2024-09-09T15:19:48.000Z","size":12256,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-11-28T20:49:21.617Z","etag":null,"topics":["asp-net","banking-system","blockchain","critical-applications","cryptography","csharp","html-css","information-security","soap-web-services","sql-server","visual-studio","windows-forms"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/D1ogoCS.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-14T16:22:33.000Z","updated_at":"2024-09-09T15:19:51.000Z","dependencies_parsed_at":"2024-07-29T20:17:07.959Z","dependency_job_id":"78b278b4-8b5a-403b-8e61-6d62461111bf","html_url":"https://github.com/D1ogoCS/Projeto-Final","commit_stats":{"total_commits":138,"total_committers":1,"mean_commits":138.0,"dds":0.0,"last_synced_commit":"a2d4d5895967f4a3b500b8415d17c4a6f75d3429"},"previous_names":["d1ogocs/projeto-final"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/D1ogoCS%2FProjeto-Final","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/D1ogoCS%2FProjeto-Final/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/D1ogoCS%2FProjeto-Final/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/D1ogoCS%2FProjeto-Final/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/D1ogoCS","download_url":"https://codeload.github.com/D1ogoCS/Projeto-Final/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":235834922,"owners_count":19052506,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asp-net","banking-system","blockchain","critical-applications","cryptography","csharp","html-css","information-security","soap-web-services","sql-server","visual-studio","windows-forms"],"created_at":"2024-09-25T10:35:20.561Z","updated_at":"2026-01-05T07:07:29.368Z","avatar_url":"https://github.com/D1ogoCS.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Projeto Final\n## Implementação de mecanismos de autenticação e segurança em aplicações críticas: Caso de estudo - Sistema de gestão bancária\n\nNo meu projeto final de curso, realizei um caso de estudo/protótipo de um sistema de gestão bancária, com o objetivo de criar uma base de dados, uma aplicação de gestão e uma aplicação Web.\n\nNota final: 19 valores.\n\n*__Nota:__ Este não é o projeto completo. Como o projeto é extenso, aqui estão apenas descritos os objetivos, os temas abordados, as funcionalidades, as ferramentas utilizadas, as tecnologias utilizadas e os resultados práticos obtidos. Os resultados apresentados são o reflexo do meu trabalho no desenvolvimento deste projeto. O código e os algoritmos não estão disponíveis para visualização, porque estou apenas a exibir o essencial.*\n\n### Objetivos do projeto:\n\n- Análise, avaliação e integração de mecanismos de proteção e segurança (blockchain, criptografia, etc...)\n- Desenvolver dois protótipos funcionais que implementem e integrem vários mecanismos de segurança\n\n### Temas abordados:\n\n- Criptografia e Encriptação\n- Tecnologia blockchain\n- Chave Móvel Digital como método de autenticação\n- Segurança em aplicações criticas\n- Modelação do sistema - Casos de uso\n- Diagrama de classes\n- Modelo de dados\n- Desenvolver e integrar serviços Web (SOAP)\n- Desenvolver uma aplicação de gestão e uma aplicação Web\n\n### Algumas implementações feitas no projeto:\n\n- Relatórios em tempo real através do Report Viewer\n- Códigos QR em relatórios\n- Manipulação de ficheiros (documentos) através da aplicação de gestão\n- Autenticação de dois fatores com a utilização do Google Authenticator\n- Palavras-passe guardadas na base de dados encriptadas em código hash\n\n### Funcionalidades:\n\n- Registar novo Cliente\n- Alterar estado de um cliente \n- Alterar dados de um cliente\n- Adicionar documentos\n- Apagar documentos\n- Abrir documentos\n- Editar o nome de um documento \n- Gestão de certificados\n- Subscrever certificados\n- Gestão de empréstimos\n- Subscrever empréstimos\n- Serviços HomeBanking \n- Alterar estado do HomeBanking\n- Consultar histórico de atividades do HomeBanking\n- Adicionar titulares\n- Remover titulares\n- Alterar tipo de titularidade \n- Alterar tipo de conta\n- Visualizar movimentos bancários\n- Visualizar detalhes de uma transação\n- Efetuar transações \n- Criar contas bancárias \n- Alterar estado de uma conta\n- Gestão de cartões bancários\n- Renovar cartão bancário\n- Criar novos cartões bancários\n- Visualizar perfil pessoal\n- Visualizar histórico de atividades\n- Alterar palavra-passe\n- Visualizar o perfil de um gestor\n- Repor acesso\n- Excluir e reativar gestores\n- Adicionar um novo gestor\n- etc...\n\n### Ferramentas utilizadas:\n\n- StarUML\n- Oracle SQL Developer Data Modeler\n- Microsoft SQL Server Management Studio 19\n- Visual Studio 2022 Community Edition\n\n### Tecnologias utilizadas:\n\n- C#\n- HTML\n- CSS\n- SQL\n- Windows Forms\n- ASP .NET\n- .NET Framework\n\n### Resultados:\n\n### 1. Serviços Web\nOs serviços Web (ou Web services) são métodos que permitem a comunicação entre diferentes sistemas através da Web.\n\nOs serviços Web são API’s (Application Programming Interface) que se comunicam por meio de redes e podem ser combinados para executar operações complexas. Utilizam principalmente o protocolo HTTP (Hyper Text Transfer Protocol), protocolo de comunicação responsável pela transferência de dados entre sistemas.\n\nOs serviços Web não são aplicações Web, apenas transmitem informações entre sistemas.\n\n__SOAP (Simple Object Access Protocol):__ Utiliza XML (Extensible Markup \nLanguage) para enviar mensagens e geralmente usa o protocolo HTTP para \ntransportar dados. O SOAP define um padrão de protocolo de comunicação \npara a troca de mensagens realizadas em XML entre o cliente e o servidor.\n\nOs serviços Web possuem as seguintes vantagens:\n- __Integração de informações e sistemas:__ Os serviços Web simplificam a comunicação entre sistemas e aplicações.\n- __Reutilização de sistemas existentes:__ Permitem adicionar funcionalidades a sistemas já existentes sem criar tudo do zero.\n\nForam desenvolvidos Serviços Web com a utilização do protocolo SOAP, de modo que a aplicação de gestão possa utilizar esses métodos.\n\n![Web Service SOAP](https://github.com/D1ogoCS/Projeto-Final/blob/main/webServiceSOAP.png)\n\n*Web Service SOAP*\n\n### 2. Base de dados\n\nUma base de dados é um conjunto de informações organizadas, armazenadas e geridas de forma estruturada.\n\nFunciona como se fosse uma caixa onde podemos guardar nomes, números de telefone, endereços e outras informações. Essa caixa ajuda-nos a encontrar essas informações rapidamente quando precisamos. As bases de dados são utilizadas noscomputadores para guardar os dados de forma organizada e segura.\n\nA implementação de uma base de dados numa organização é fundamental nos dias atuais, pois permite gerir grandes quantidades de dados e facilita a organização, manutenção e pesquisa dos mesmos. Além disso, as bases de dados são vitais para as organizações, pois são a principal peça dos sistemas de informação e segurança.\n\n#### 2.1 Tabelas\n\nA base de dados do sistema, contém um total de 26 tabelas que resultam da aplicação das regras de transposição do modelo de classes para o modelo relacional, mas apenas oito são responsáveis por garantir as funcionalidades de autenticação e segurança da aplicação. As oito tabelas são as seguintes:\n\n- Tabela “Atividades”\n\n![Tabela “Atividades”](https://github.com/D1ogoCS/Projeto-Final/blob/main/tabelaAtividades.png) \n\n- Tabela \"Clientes\"\n\n![Tabela \"Clientes\"](https://github.com/D1ogoCS/Projeto-Final/blob/main/tabelaClientes.png) \n\n- Tabela \"Contas\"\n\n![Tabela \"Contas\"](https://github.com/D1ogoCS/Projeto-Final/blob/main/tabelaContas.png) \n\n- Tabela \"Credenciais\"\n\n![Tabela \"Credenciais\"](https://github.com/D1ogoCS/Projeto-Final/blob/main/tabelaCredenciais.png) \n\n- Tabela \"Gestores\"\n\n![Tabela \"Gestores\"](https://github.com/D1ogoCS/Projeto-Final/blob/main/tabelaGestores.png) \n\n- Tabela \"HistoricoAtividadesClientes\"\n  \n![Tabela \"HistoricoAtividadesClientes\"](https://github.com/D1ogoCS/Projeto-Final/blob/main/historicoAtividadesClientes.png) \n\n- Tabela \"HistoricoAtividades\"\n\n![Tabela \"HistoricoAtividades\"](https://github.com/D1ogoCS/Projeto-Final/blob/main/historicoAtividades.png) \n\n- Tabela \"Transacoes\"\n\n![Tabela \"Transacoes\"](https://github.com/D1ogoCS/Projeto-Final/blob/main/tabelaTransacoes.png) \n\n#### 2.2 Medidas de segurança\n\n- Para evitar os ataques por SQL Injection, são utilizadas consultas parametrizadas ou parâmetros preparados nas aplicações, para evitar a introdução direta de valores nos comandos SQL (Structured Query Language).\n\n- Para uma maior segurança, as palavras-passe guardadas na base de dados, estão codificadas em hash através da utilização do algoritmo SHA-256.\n\n![Palavras-passe codificadas em hash](https://github.com/D1ogoCS/Projeto-Final/blob/main/passwordHash.png) \n\n*Palavras-passe codificadas em hash através do algoritmo SHA-256*\n\n- Todas as atividades que possam ser executadas nas aplicações (incluindo a autenticação) e que seja necessário o registo do utilizador que as realizou, são executadas através de procedimentos armazenados que estão presentes na base de dados. Todos os procedimentos armazenados possuem em comum alguns parâmetros que identificam o utilizador e indicam a data em que a atividade é realizada. \nComo medida de segurança e auditoria, as atividades realizadas no sistema pelos utilizadores, são registadas nas tabelas apropriadas, nomeadamente na tabela “HistoricoAtividades” e na tabela “HistoricoAtividadesClientes”. Ambas as tabelas possuem trigger’s que não permitem registar atividades em utilizadores que não estejam ativos no sistema, nem permitem que os dados registados sejam alterados.\n\n- A base de dados possui diversos trigger´s em diversas tabelas, o que permite automatizar o sistema.\n\n### 3. Aplicação de gestão\nUma aplicação de gestão (ou aplicação standalone) é uma aplicação completamente autossuficiente. Isso significa que não depende de nenhum software auxiliar para ser executada.\n\nO protótipo da aplicação foi desenvolvido com a utilização do Windows Forms, que é projetado para ser executado em sistemas operativos Windows. \n\nOferece uma interface gráfica que permite aos utilizadores interagirem com a aplicação de forma intuitiva.\n\nA aplicação de gestão é utilizada apenas pelos gestores e administradores. \n\nO gestor realiza diversas atividades no sistema, como a manutenção das contas bancárias e dos produtos dos clientes.\nO administrador pode realizar as mesmas atividades do gestor e ainda pode fazer a administração dos gestores do sistema.\n\n![Aplicação de gestão](https://github.com/D1ogoCS/Projeto-Final/blob/main/aplicacaoGestao.png)\n\n*Aplicação de gestão*\n\n#### 3.1 Adicionar um serviço Web\nA aplicação de gestão executa alguns serviços Web. Para adicionar os serviços Web à aplicação, foi necessário executar os passos a seguir:\n\n1 - No gestor de soluções do Visual Studio, é necessário clicar com o botão direito do rato em __Connected Services__ e de seguida em __Adicionar Referência de Serviço__.\n\n![Gestor de soluções do Visual Studio](https://github.com/D1ogoCS/Projeto-Final/blob/main/gestorDeSolucoes.png)\n\n*Gestor de soluções do Visual Studio*\n\n![Adicionar Referência de Serviço](https://github.com/D1ogoCS/Projeto-Final/blob/main/adicionarReferencia.png)\n\n*Adicionar referência de serviço no Visual Studio*\n\n2 - Por fim, é necessário configurar o endereço do serviço na janela de Adicionar Referência de Serviço e clicar no botão __Ok__.\n\n![Configurar o serviço Web no Visual Studio](https://github.com/D1ogoCS/Projeto-Final/blob/main/configurarServico.png)\n\n*Configurar o serviço Web no Visual Studio*\n\n#### 3.2 Atenticação\nQuando a aplicação é executada, a janela de autenticação é exibida para que o utilizador possa introduzir as suas credenciais e entrar na aplicação.\n\n![Janela de autenticação](https://github.com/D1ogoCS/Projeto-Final/blob/main/janelaAutenticacao.png)\n\n*Janela de autenticação*\n\nPara o utilizador entrar na aplicação, necessita introduzir o seu nome de utilizador e a sua palavra-passe e depois clicar no botão __Entrar__.\n\n![Introdução das credenciais na janela de autenticação](https://github.com/D1ogoCS/Projeto-Final/blob/main/janelaAutenticacao2.png)\n\n*Introdução das credenciais na janela de autenticação*\n\nSe as informações introduzidas pelo o utilizador estiverem corretas, o que indica que as credenciais correspondem a um \nutilizador que está registado no sistema, a autenticação passa para a etapa a seguir, onde o utilizador deve introduzir o código de autenticação de dois fatores associado à sua conta.\n\n![Janela para introduzir código de autenticação de dois fatores](https://github.com/D1ogoCS/Projeto-Final/blob/main/2FA.png)\n\n*Janela para introduzir código de autenticação de dois fatores*\n\n![Introdução do código de autenticação de dois fatores](https://github.com/D1ogoCS/Projeto-Final/blob/main/introducao2FA.png)\n\n*Introdução do código de autenticação de dois fatores*\n\nQuando o utilizador introduz o código de autenticação de dois fatores e clica novamente no botão __Entrar__, o código introduzido é verificado por um algoritmo de autenticação de dois fatores da biblioteca “Google.Authenticator”, que oferece métodos para gerar códigos de verificação e verificar a autenticidade dos códigos introduzidos pelo utilizador.\n\nA biblioteca “Google.Authenticator” é gratuita e necessita de ser instalada a partir do gestor NuGet presente no Visual Studio (https://www.nuget.org/packages/GoogleAuthenticator/3.2.0). \n\nA biblioteca funciona em conjunto com a aplicação Google Authenticator para dispositivos móveis. O Google Authenticator é uma ferramenta gratuita para autenticação de dois fatores,que gera códigos temporários que são usados em combinação com a palavra-passe para adicionar uma camada extra de segurança à autenticação (https://support.google.com/accounts/answer/1066447?hl=en\u0026co=GENIE.Platform%3DAndroid).\n\n#### 3.3 Menu\nApós a autenticação do utilizador na aplicação, é apresentado o menu. Existe um menu específico para cada tipo de utilizador.\n\n![Menu dos gestores](https://github.com/D1ogoCS/Projeto-Final/blob/main/menuGestor.png)\n\n*Menu dos gestores*\n\n![Menu dos administradores](https://github.com/D1ogoCS/Projeto-Final/blob/main/menuAdmin.png)\n\n*Menu dos administradores*\n\nSe for a primeira vez que o utilizador entra na aplicação é exibida uma janela solicitando altere a palavra-passe da sua conta.\n\n![Janela para o utilizador alterar a palavra-passe quando faz login pela primeira vez](https://github.com/D1ogoCS/Projeto-Final/blob/main/alterarPassword.png)\n\n*Janela para o utilizador alterar a palavra-passe quando faz login pela primeira vez*\n\n#### 3.4 Gestão de clientes\nÉ possivel visualizar todos os clientes que estão registados no sistema. É exibida uma janela que contém uma tabela com todos os clientes registados no sistema.\n\n![Janela \"Ver Clientes\"](https://github.com/D1ogoCS/Projeto-Final/blob/main/janelaVerClientes.png)\n\n*Janela \"Ver Clientes\"*\n\nO utilizador pode pesquisar um cliente na barra de pesquisa através do NIF (Número de Identificação Fiscal).\n\nPara o utilizador conseguir visualizar os dados de um cliente em específico, necessita de clicar no botão __Ver detalhes__ da tabela de clientes. Em seguida, é exibida uma janela com todas as informações pessoais do cliente, documentos pessoais e outros dados.\n\n![Janela com as informações do cliente](https://github.com/D1ogoCS/Projeto-Final/blob/main/janelaInfoCliente.png)\n\n*Janela com as informações do cliente*\n\n![Tabela com os documentos pessoais do cliente](https://github.com/D1ogoCS/Projeto-Final/blob/main/docsCliente.png)\n\n*Tabela com os documentos pessoais do cliente*\n\n![Outros dados do cliente](https://github.com/D1ogoCS/Projeto-Final/blob/main/outrasInfoCliente.png)\n\n*Outros dados do cliente*\n\n#### 3.4 Registar novo cliente\n\n![Janela “Adicionar cliente”](https://github.com/D1ogoCS/Projeto-Final/blob/main/janelaAdicionarCliente.png)\n\n*Janela “Adicionar cliente”*\n\n![Campos obrigatórios que não foram preenchidos](https://github.com/D1ogoCS/Projeto-Final/blob/main/erroAdicionarCliente.png)\n\n*Campos obrigatórios que não foram preenchidos*\n\nSe necessário, é possivel imprimir um documento com os dados do registo do novo cliente\n\n![Janela para confirmar a impressão do documento](https://github.com/D1ogoCS/Projeto-Final/blob/main/confirmarAdicionarCliente.png)\n\n*Janela para confirmar a impressão do documento*\n\n![Impresso com os dados pessoais do client](https://github.com/D1ogoCS/Projeto-Final/blob/main/folhaDadosPessoais.png)\n\n*Impresso com os dados pessoais do cliente (dados fictícios)*\n\nOs documentos da aplicação são construídos através da biblioteca Microsoft Report Viewer, que oferece diversas ferramentas para o desenvolvimento de relatórios. É uma biblioteca gratuita e necessita de ser instalada a partir do gestor NuGet presente no Visual Studio (https://learn.microsoft.com/en-us/sql/reporting-services/application-integration/using-the-winforms-reportviewer-control?view=sql-server-ver16).\n\n#### 3.5 Adicionar documentos\nQuando um documento é adicionado, uma cópia do mesmo é guardada numa pasta do computador que guarda os documentos pessoais dos clientes. Os documentos nunca são guardados na base de dados, apenas é guardado a localização dos mesmos. \n\n![Tabela \"Documentos\"](https://github.com/D1ogoCS/Projeto-Final/blob/main/tabelaDocumentos.png)\n\n*Tabela \"Documentos\"*\n\n#### 3.6 Apagar documentos\nAntes de apagar o documento, é verificado na base de dados se existe alguma referenciação do documento que se pretende apagar do sistema. Se existir, o documento não é apagado do sistema, apenas o valor da coluna “documentoAtivo” da tabela “Documentos” é alterado para “False”, o que faz com que o documento deixe de aparecer na tabela de documentos pessoais. Se não existir referenciação, a linha que está associada ao documento na tabela “Documentos” é apagada, e consequentemente também é apagado o documento da pasta do computador onde o mesmo está guardado.\n\n#### 3.7 Gestão de certificados\n\n![Janela com os dados de um certificado](https://github.com/D1ogoCS/Projeto-Final/blob/main/gestaoCertificados.png)\n\n*Janela com os dados de um certificado*\n\n![Campo para indicar as unidades que o cliente quer resgatar](https://github.com/D1ogoCS/Projeto-Final/blob/main/resgateUnidades.png)\n\n*Campo para indicar as unidades que o cliente quer resgatar*\n\nÉ possivel alterar o número da conta bancária associada ao certificado e também resgatar unidades do certificado, imprimir os dados do certificado e visualizar os documentos associados ao mesmo.\n\nPara resgatar unidades do certificado, é necessário indicar a quantidade que o cliente pretende retirar do certificado. A quantia introduzida é adicionada à conta bancária que está associada ao certificado.\n\n#### 3.8 Subscrever certificados\n\n![Janela “Adicionar certificado”](https://github.com/D1ogoCS/Projeto-Final/blob/main/adicionarCertificado.png)\n\n*Janela “Adicionar certificado”*\n\nSe for necessário anexar algum documento pessoal do cliente à subscrição do certificado, o utilizador deve selecionar as caixas de seleção correspondentes aos documentos pretendidos.\n\n![Escolher documentos para anexar na subscrição do certificado](https://github.com/D1ogoCS/Projeto-Final/blob/main/adicionarCertificado2.png)\n\n*Escolher documentos para anexar na subscrição do certificado*\n\n![Gráfico com a projeção dos lucros do certificado](https://github.com/D1ogoCS/Projeto-Final/blob/main/projecaoCertificado.png)\n\n*Gráfico com a projeção dos lucros do certificado*\n\nÉ possivel imprimir os dados do novo certificado subscrito.\n\n![Impresso com os dados do novo certificado](https://github.com/D1ogoCS/Projeto-Final/blob/main/impressoCertificado.png)\n\n*Impresso com os dados do novo certificado (dados fictícios)*\n\n#### 3.9 Gestão de empréstimos\n\n![Janela com os dados de um empréstimo](https://github.com/D1ogoCS/Projeto-Final/blob/main/janelaEmprestimo.png)\n\n*Janela com os dados de um empréstimo*\n\n![Tabela com todas as prestações do empréstimo](https://github.com/D1ogoCS/Projeto-Final/blob/main/prestacoesEmprestimo.png)\n\n*Tabela com todas as prestações do empréstimo*\n\n![Tabela com as prestações pendentes do empréstimo](https://github.com/D1ogoCS/Projeto-Final/blob/main/pagarPrestacoes.png)\n\n*Tabela com as prestações pendentes do empréstimo*\n\n#### 3.10 Subscrever empréstimos\n\n![Janela “Adicionar empréstimo”](https://github.com/D1ogoCS/Projeto-Final/blob/main/adicionarEmprestimo.png)\n\n*Janela “Adicionar empréstimo”*\n\n![Escolher documentos para anexar na subscrição do empréstimo](https://github.com/D1ogoCS/Projeto-Final/blob/main/adicionarEmprestimo2.png)\n\n*Escolher documentos para anexar na subscrição do empréstimo*\n\nApós a subscrição, é possivel imprimir os dados do novo empréstimo.\n\n![Impresso com os dados do novo empréstimo](https://github.com/D1ogoCS/Projeto-Final/blob/main/impressoEmprestimo.png)\n\n*Impresso com os dados do novo empréstimo (dados fictícios)*\n\n#### 3.11 Serviços HomeBanking\nQuando um novo cliente é adicionado ao sistema, o mesmo ainda não possui as credenciais de acesso necessárias para utilizar os serviços online. Apenas os utilizadores que têm acesso à aplicação de gestão podem alterar o estado das credenciais dos clientes.\nQuando o cliente não possui credenciais de acesso para o HomeBanking, o campo “Estado” possui o valor de “Inativo”.\n\n![Janela “HomeBanking”](https://github.com/D1ogoCS/Projeto-Final/blob/main/servicosHomeBanking.png)\n\n*Janela “HomeBanking”*\n\n![Botões HomeBanking](https://github.com/D1ogoCS/Projeto-Final/blob/main/botoesHomeBanking.png)\n\n*Botões HomeBanking*\n\nPara atribuir credenciais de acesso ao cliente, o gestor necessita de clicar no botão __Ativar__.\n\nO botão __Cancelar HomeBanking__, serve para o gestor cancelar as credenciais de acesso do cliente à aplicação Web.\n\nQuando o cliente falha cinco vezes a autenticação na aplicação Web, as credenciais ficam bloqueadas. Para as desbloquear o gestor necessita de clicar no botão __Desbloquear Acesso__. Também é possível executar a operação inversa, ou seja, bloquear as credenciais, para isso o gestor necessita de clicar no botão __Bloquear Acesso__.\n\nO botão __Repor Acesso__, permite ao gestor gerar novas credenciais de acesso para o cliente, se o mesmo se esquecer das credenciais atuais ou se houver suspeita de alguém saber das suas informações de acesso à aplicação Web.\n\nSempre que o gestor desbloqueia, ativa, ou repõe o acesso das credenciais do cliente, necessita de imprimir um documento que contém o nome de utilizador, a palavra-passe e um código QR (código de resposta rápida) para utilizar na aplicação Google Authenticator.\n\n![Impresso com as credenciais de acesso do HomeBanking do cliente](https://github.com/D1ogoCS/Projeto-Final/blob/main/impressoHomeBanking.png)\n\n*Impresso com as credenciais de acesso do HomeBanking do cliente (dados fictícios)*\n\nNa janela “HomeBanking”, é possível consultar as atividades que o cliente executa na aplicação Web.\nPara o gestor visualizar as atividades, necessita de escolher um intervalo de tempo e se for necessário, filtrar os resultados por tipo de atividade.\n\n![Tabela do histórico de atividades do HomeBanking preenchida com algumas atividades](https://github.com/D1ogoCS/Projeto-Final/blob/main/historicoHomeBanking.png)\n\n*Tabela do histórico de atividades do HomeBanking preenchida com algumas atividades*\n\n![Tabela do histórico de atividades do HomeBanking preenchida com algumas atividades através do filtro](https://github.com/D1ogoCS/Projeto-Final/blob/main/historicoHomeBanking2.png)\n\n*Tabela do histórico de atividades do HomeBanking preenchida com algumas atividades através do filtro*\n\n#### 3.12 Gestão de contas bancárias\n\n![Janela com as informações de uma conta bancária](https://github.com/D1ogoCS/Projeto-Final/blob/main/gestaoConta.png)\n\n*Janela com as informações de uma conta bancária*\n\nÉ possivel modificar os titulares da conta, imprimir as informações, efetuar transações, associar cartões bancários, visualizar os movimentos de conta e ainda alterar o estado da conta.\n\nPara se adicionar um novo titular a uma conta bancária, é necessário introduzir o NIF do novo titular no campo “NIF do titular” (o novo titular já deve estar previamente registado no sistema) e de seguida clicar no botão __Adicionar__.\n\nQuando um cliente deixa de ser titular de uma conta, um trigger é responsável por alterar a conta que está associada aos empréstimos e certificados do cliente que foi removido e que tinham essa mesma conta associada. Assim, os certificados e empréstimos do cliente ficam associados à primeira conta bancária que está registada e que o cliente possui.\n\nQuando um cliente deixa de ser titular de uma conta, um trigger é responsável por desativar todos os cartões que estão associados ao cliente e à conta bancária.\n\nQuando uma conta bancária é excluida do sistema (a conta nunca sai do sistema, é apenas alterado o valor do seu estado na base de dados), todos os cartões bancários associados a esta conta são desativados.\n\nPara se conseguir visualizar os movimentos bancários de uma conta, é necessário na secção “Transações” selecionar a partir de que data se deseja obter os movimentos bancários (mensal, anual ou personalizado).\nO botão __Extrato mensal__ exibe todos os movimentos do mês atual do sistema, o botão __Extrato anual__ exibe todos os movimentos do ano atual do sistema e o botão __Pesquisar__ exibe todos os movimentos entre as datas selecionadas (a data inicial necessita de ser inferior à data final).\n\n![Secção “Transações”](https://github.com/D1ogoCS/Projeto-Final/blob/main/seccaoTransacao.png)\n\n*Secção “Transações”*\n\n![Tabela com os movimentos bancários (extrato mensal)](https://github.com/D1ogoCS/Projeto-Final/blob/main/transacoesConta.png)\n\n*Tabela com os movimentos bancários (extrato mensal)*\n\nOs movimentos bancários também podem ser impressos.\n\n![Excerto do impresso com os movimentos bancários](https://github.com/D1ogoCS/Projeto-Final/blob/main/impressoTransacoes.png)\n\n*Excerto do impresso com os movimentos bancários (dados fictícios)*\n\nPara visualizar as informações de uma transação, é necessário de clicar no botão __Ver detalhes__ e de seguida, é exibida uma janela com as informações da transação pretendida.\n\n![Janela com informações sobre o pagamento de uma prestação](https://github.com/D1ogoCS/Projeto-Final/blob/main/janelaTransacao.png)\n\n*Janela com informações sobre o pagamento de uma prestação*\n\n![Janela com informações sobre uma transferência bancária](https://github.com/D1ogoCS/Projeto-Final/blob/main/janelaTransacao2.png)\n\n*Janela com informações sobre uma transferência bancária*\n\n![Impresso com os detalhes de uma transferência bancária](https://github.com/D1ogoCS/Projeto-Final/blob/main/impressoDadosTransacao.png)\n\n*Impresso com os detalhes de uma transferência bancária*\n\n#### 3.13 Transação\n\n![Janela \"Transação\"](https://github.com/D1ogoCS/Projeto-Final/blob/main/janelaEfetuarTransacao.png)\n\n*Janela \"Transação\"*\n\nÉ necessário escolher qual é o tipo da transação, podendo ser um dos seguintes:\n\n→ Levantamento;\n\n→ Depósito;\n\n→ Transferência.\n\nSe a transação for um levantamento ou um depósito, só é necessário indicar a quantia a depositar ou a debitar.\n\nNo levantamento, a quantia introduzida deve ser sempre menor ou igual ao saldo disponível na conta.\n\nNo caso de ser uma transferência, é necessário indicar a quantia que o cliente quer que seja transferida, bem como o número da conta do destinatário.\n\n![Transação do tipo \"Transferência\"](https://github.com/D1ogoCS/Projeto-Final/blob/main/transferencia.png)\n\n*Transação do tipo \"Transferência\"*\n\nQuando se clica no botão __Procurar__, é obtido o nome do titular da conta do destinatário.\n\nQuando se clica no botão __Confirmar__, independentemente do tipo de transação, é executado o Serviço Web “inserirTransacao()”\n\nDepois de se clicar no botão __Confirmar__, para confirmar a transação, é possivel imprimir um documento com informações sobre a transação realizada.\n\n#### 3.14 Criar conta bancária\n\n![Janela \"Adicionar conta\"](https://github.com/D1ogoCS/Projeto-Final/blob/main/janelaAdicionarConta.png)\n\n*Janela \"Adicionar conta\"*\n\nPara indicar os clientes que serão titulares da conta, é necessário inserir o NIF de cada titular no campo “NIF do titular” e de seguida, clicar no botão __Adicionar__.\n\n![Os titulares da nova conta são exibidos na tabela](https://github.com/D1ogoCS/Projeto-Final/blob/main/titularesNovaConta.png)\n\n*Os titulares da nova conta são exibidos na tabela*\n\nPara cada titular da conta, deve ser indicado o tipo de titularidade.\nDepois de indicar os titulares da nova conta bancária, é necessário especificar qual é o tipo de conta bancária.\n\n![Impresso com os dados da nova conta bancária](https://github.com/D1ogoCS/Projeto-Final/blob/main/impressoNovaConta.png)\n\n*Impresso com os dados da nova conta bancária (dados fictícios)*\n\n#### 3.15 Alterar o estado de uma conta bancária\n\n![Botões para alterar o estado da conta](https://github.com/D1ogoCS/Projeto-Final/blob/main/botoesConta.png)\n\n*Botões para alterar o estado da conta*\n\nOs botões quando são acionados, alteram o valor que está presente na coluna “estadoConta” da tabela “Contas”.\n\nQuando se clica no botão __Bloquear Conta__, a coluna “estadoConta” fica com o valor “Bloqueada”. Nesse estado, não é possível alterar os dados da conta, criar cartões bancários para a conta, realizar transações ou receber transferências bancárias. Apenas é possível visualizar os movimentos bancários da conta. \nPara reverter esse estado, é necessário clicar no botão __Ativar Conta__, para alterar o valor da coluna “estadoConta” para “Ativa”.\n\nAtravés do botão __Apagar Conta__, é possivel fechar uma conta bancária. No entanto, a conta não é excluída do sistema, apenas o valor da coluna “estadoConta” é alterado para “Inativa”. Isso faz com que a conta nunca mais seja visível na aplicação, ou seja, é como se nunca tivesse existido. Por outro lado, as informações relacionadas à conta na base de dados permanecem visíveis.\nQuando uma conta bancária é excluida do sistema, todos os cartões bancários associados a esta conta são desativados.\n\nPara excluir uma conta, o saldo necessita de ser nulo, e não pode haver certificados ou empréstimos associados à conta, em que o estado dos mesmos seja \"Pendente\".\n\n#### 3.16 Gestão de cartões\n\n![Janela com informações de um cartão bancário](https://github.com/D1ogoCS/Projeto-Final/blob/main/janelaCartoes.png)\n\n*Janela com informações de um cartão bancário*\n\nNa janela, é possível visualizar o número do cartão, a data de validade, o estado do cartão, o número da conta bancária associada, e ainda se podem realizar as operações de bloquear e desbloquear o cartão, restaurar o PIN (Personal Identification Number) e cancelar o cartão.\n\n![Janela \"Adicionar cartão\"](https://github.com/D1ogoCS/Projeto-Final/blob/main/janelaAdicionarCartao.png)\n\n*Janela \"Adicionar cartão\"*\n\n#### 3.17 Perfil Pessoal (utilizador da aplicação de gestão)\n\n![Janela do perfil pessoal](https://github.com/D1ogoCS/Projeto-Final/blob/main/janelaPerfilPessoal.png)\n\n*Janela do perfil pessoal*\n\nO utilizador consegue visualizar as atividades e a data em que as mesmas foram realizadas no sistema. Para visualizar as atividades, o utilizador deve selecionar um intervalo de tempo e, se necessário, escolher um tipo de atividade na lista de opções para filtrar as atividades.\n\n![Lista de opções de atividades realizadas pelo utilizador](https://github.com/D1ogoCS/Projeto-Final/blob/main/listaAtividadesRealizadas.png)\n\n*Lista de opções de atividades realizadas pelo utilizador*\n\nAs atividades presentes na lista de opções, são atividades que o utilizador já realizou no sistema.\n\nDepois de o utilizador escolher o intervalo de tempo e eventualmente uma atividade para filtrar, necessita de clicar no botão __Pesquisar__ para a tabela ser preenchida com as atividades realizadas no intervalo de tempo escolhido. \n\n#### 3.18 Alterar Palavra-passe\n\n![Janela para alterar a palavra-passe](https://github.com/D1ogoCS/Projeto-Final/blob/main/alterarPassword.png)\n\n*Janela para alterar a palavra-passe*\n\nPara alterar a palavra-passe, o utilizador deve cumprir algumas regras mínimas de segurança. Estas incluem:\n\n→ Ter entre 10 e 20 caracteres;\n\n→ Ter no mínimo um caracter especial;\n\n→ Ter no mínimo um caracter maiúsculo.\n\nApós o utilizador preencher os campos para alterar a palavra-passe, se todas as regras tiverem sido cumpridas, as linhas que exibem as regras ficarão verdes\n\n![Janela de alterar a palavra-passe com as regras cumpridas](https://github.com/D1ogoCS/Projeto-Final/blob/main/janelaPasswordVerde.png)\n\n*Janela de alterar a palavra-passe com as regras cumpridas*\n\n#### 3.19 Gestão de gestores\n\nA gestão dos utilizadores da aplicação de gestão está disponível apenas para utilizadores que sejam administradores do sistema.\n\n![Janela \"Ver Gestores\"](https://github.com/D1ogoCS/Projeto-Final/blob/main/janelaVerGestores.png)\n\n*Janela \"Ver Gestores\"*\n\nPara facilitar a procura de um gestor em específico, pode-se utilizar a barra de pesquisa para filtrar os gestores por nome de utilizador.\n\n![Filtrar os gestores por nome de utilizador](https://github.com/D1ogoCS/Projeto-Final/blob/main/filtrarGestores.png)\n\n*Filtrar os gestores por nome de utilizador*\n\nPara o administrador visualizar o perfil de um gestor, necessita de clicar no botão __Ver detalhes__\n\n![Janela do perfil de um gestor](https://github.com/D1ogoCS/Projeto-Final/blob/main/janelaPerfilGestor.png)\n\n*Janela do perfil de um gestor*\n\nO administrador tem a capacidade de aceder ao histórico de atividades do gestor, repor o acesso do gestor à aplicação, alterar o nome e a função do gestor no sistema e ainda, excluir o gestor do sistema.\n\nSe um gestor ou administrador perder o acesso à aplicação, um outro administrador pode repor o acesso.\n\nApós repor o acesso, o administrador deve imprimir o comprovativo com os novos dados de acesso que o gestor vai utilizar para efetuar login na aplicação.\n\n![Impresso com os novos dados do gestor](https://github.com/D1ogoCS/Projeto-Final/blob/main/impressoDadosGestor.png)\n\n*Impresso com os novos dados do gestor*\n\nO administrador pode ainda excluir e reativar os gestores do sistema. O gestores nunca são apagados do sistema, apenas o valor da coluna “estadoGestor” da tabela “Gestores” é alterado para “Inativo”.\n\n#### 3.20 Adicionar gestor\n\n![Janela \"Adicionar Gestores\"](https://github.com/D1ogoCS/Projeto-Final/blob/main/janelaAdicionarGestor.png)\n\n*Janela \"Adicionar Gestores\"*\n\nÉ necessário indicar o nome do novo gestor e o tipo de função que vai desempenhar no sistema.\n\nApós o administrador preencher todos os campos obrigatórios, necessita de clicar no botão __Confirmar__ e por fim imprimir o documento que contém os dados de acesso à aplicação.\n\n### 4. Aplicação Web\n\nAs aplicações Web são acessíveis de qualquer lugar do mundo com conexão à internet. Isso permite que os utilizadores usem serviços e funcionalidades sem restrições geográficas. Podem ser protegidas centralmente no servidor, reduzindo riscos de segurança nos dispositivos dos utilizadores e atendendo a um grande número de utilizadores em simultâneo.\n\n#### 4.1 Autenticação\n\nPara utilizar qualquer funcionalidade da aplicação Web, é necessário estar previamente autenticado. Todas as páginas Web da aplicação possuem um algoritmo que deteta se o utilizador se encontra autenticado ou não. Se o utilizador ainda não estiver autenticado, é redirecionado para a página de autenticação.\n\nA autenticação é essencial na aplicação, para registar todas as atividades realizadas pelo utilizador autenticado no sistema. Cada ação realizada pelo utilizador é registada na tabela “HistoricoAtividadeClientes”, que armazena informações como a data, a atividade e a identificação do utilizador.\n\nA autenticação da aplicação Web, segue a mesma lógica de implementação da autenticação da aplicação standalone.\n\nNa página de autenticação, o cliente (utilizador da aplicação) deve introduzir as suas credenciais de acesso e, se estiverem corretas, inserir o código de autenticação de dois fatores.\n\n![Página de autenticação da aplicação](https://github.com/D1ogoCS/Projeto-Final/blob/main/loginWeb.png)\n\n*Página de autenticação da aplicação*\n\n![Página para introduzir o código da autenticação de dois fatores](https://github.com/D1ogoCS/Projeto-Final/blob/main/codigo2FWeb.png)\n\n*Página para introduzir o código da autenticação de dois fatores*\n\n![Código de autenticação de dois fatores introduzidos na página Web](https://github.com/D1ogoCS/Projeto-Final/blob/main/codigoIntroduzidoWeb.png)\n\n*Código de autenticação de dois fatores introduzidos na página Web*\n\nA palavra-passe que o utilizador introduz, é enviada para o servidor para depois ser encriptada em código hash.\n\nComo o valor introduzido é enviado para o servidor, sem estar previamenteencriptado em hash, qualquer pessoa com acesso ao canal de comunicação, pode visualizar as informações que estão a ser transmitidas. Assim, para melhorar a segurança da aplicação Web, são utilizados os protocolos HTTPS e SSL (Secure Sockets Layer).\n\nO SSL é um protocolo de segurança da Internet que faz a autenticação da identidade de um website e cria um canal criptografado entre o utilizador e o servidor.\n\nSe o cliente inserir uma palavra-passe incorreta, um contador presente na base de dados aumenta, até um máximo de cinco tentativas erradas. Quando o limite máximo de tentativas erradas é atingido, as credenciais de acesso do cliente à aplicação Web ficam bloqueadas e só podem ser desbloqueadas por meio da aplicação de gestão.\n\nQuando o cliente acede à aplicação Web com as credenciais temporárias pela primeira vez, após inserir as credenciais e o código de autenticação de dois fatores, é redirecionado para uma página para alterar o nome de utilizador e a palavra-passe\n\n![Página Web para alterar as credenciais de acesso à aplicação](https://github.com/D1ogoCS/Projeto-Final/blob/main/alterarCredenciaisWeb.png)\n\n*Página Web para alterar as credenciais de acesso à aplicação*\n\nPara alterar as credenciais de acesso à aplicação, o cliente tem de seguir algumas regras de segurança ao alterar o nome de utilizador e a palavra-passe. As regras aplicadas à alteração das credenciais são as seguintes:\n\n→ O nome de utilizador tem de ser único, necessita de ter no mínimo 10 caracteres e pelo menos um caracter maiúsculo;\n\n→ A palavra-passe necessita de ter no mínimo 10 caracteres e precisa de ter pelo menos um caractere especial e um caracter maiúsculo;\n\n→ O nome de utilizador não pode ser igual a palavra-passe.\n\nApós a autenticação do cliente, o menu da aplicação Web é exibido.\n\n![Menu da aplicação Web](https://github.com/D1ogoCS/Projeto-Final/blob/main/janelaPrincipalWeb.png)\n\n*Menu da aplicação Web*\n\n#### 4.2 Perfil \n\n![Perfil do cliente na aplicação Web](https://github.com/D1ogoCS/Projeto-Final/blob/main/perfilWeb.png)\n\n*Perfil do cliente na aplicação Web*\n\n#### 4.3 Alterar palavra-passe\n\n![Página Web para alterar a palavra-passe](https://github.com/D1ogoCS/Projeto-Final/blob/main/alterarPasswordWeb.png)\n\n*Página Web para alterar a palavra-passe*\n\nO cliente deve inserir a palavra-passe atual e a nova palavra-passe e, em seguida, clicar no botão __Continuar__. As regras aplicadas à alteração da palavra-passe são as mesmas descritas anteriormente.\n\nApós clicar no botão, é exibida uma página web para o cliente inserir o código de autenticação de dois fatores e confirmar a alteração da senha.\n\n![Introdução do código de autenticação dois fatores para confirmar alteração da palavra-passe](https://github.com/D1ogoCS/Projeto-Final/blob/main/alterarPasswordWeb2.png)\n\n*Introdução do código de autenticação dois fatores para confirmar alteração da palavra-passe*\n\n#### 4.4 Histórico de atividades\n\nAtravés da aplicação Web, o cliente tem acesso às atividades que realizou na aplicação.\n\n![Página Web do histórico de atividades do cliente](https://github.com/D1ogoCS/Projeto-Final/blob/main/ultimasAtividadesWeb.png)\n\n*Página Web do histórico de atividades do cliente*\n\n#### 4.5 Gestão de contas\n\nCom a aplicação, o cliente tem acesso a várias informações sobre as suas contas bancárias, incluindo as últimas transações realizadas, o saldo disponível, os titulares da conta, entre outros.\n\n![Página Web da gestão de contas](https://github.com/D1ogoCS/Projeto-Final/blob/main/contasWeb.png)\n\n*Página Web da gestão de contas*\n\n#### 4.6 Gestão de cartões\n\nA aplicação Web permite que o cliente visualize os cartões bancários das suas contas.\n\n![Página Web com informações dos cartões bancários](https://github.com/D1ogoCS/Projeto-Final/blob/main/cartoesWeb.png)\n\n*Página Web com informações dos cartões bancários*\n\n#### 4.7 Transferência bancária\n\nO cliente através da aplicação Web pode efetuar uma transferência bancária.\n\n![Página Web para realizar uma transferência bancária](https://github.com/D1ogoCS/Projeto-Final/blob/main/transferenciaWeb.png)\n\n*Página Web para realizar uma transferência bancária*\n\nO cliente, por meio da lista de opções, pode escolher a conta da qual deseja debitar o dinheiro para a transferência. Após o preenchimento de todos os campos, é apenas necessário clicar no botão __Continuar__, que vai exibir uma página Web para confirmar a transferência.\n\n![Página Web de confirmação da transferência](https://github.com/D1ogoCS/Projeto-Final/blob/main/transferenciaWeb2.png)\n\n*Página Web da confirmação da transferência*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fd1ogocs%2Fprojeto-final","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fd1ogocs%2Fprojeto-final","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fd1ogocs%2Fprojeto-final/lists"}