{"id":50509728,"url":"https://github.com/fellipef/siga","last_synced_at":"2026-06-02T19:01:17.981Z","repository":{"id":245142426,"uuid":"817389447","full_name":"FellipeF/siga","owner":"FellipeF","description":"O SiGA (Sistema de Gerenciamento de Artigos) é uma solução blockchain construída em Node.js para upload e recuperação de arquivos PDF em um sistema de revisão por pares duplo-cego.","archived":false,"fork":false,"pushed_at":"2024-06-27T21:25:45.000Z","size":19717,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-06-28T00:00:44.525Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FellipeF.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-06-19T15:46:36.000Z","updated_at":"2024-06-27T21:25:48.000Z","dependencies_parsed_at":"2024-06-20T03:17:26.463Z","dependency_job_id":"1a28be7b-ea36-4ac0-ad43-ef4bc6b227e1","html_url":"https://github.com/FellipeF/siga","commit_stats":null,"previous_names":["fellipef/siga"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/FellipeF/siga","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FellipeF%2Fsiga","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FellipeF%2Fsiga/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FellipeF%2Fsiga/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FellipeF%2Fsiga/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FellipeF","download_url":"https://codeload.github.com/FellipeF/siga/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FellipeF%2Fsiga/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33833277,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-02T02:00:07.132Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2026-06-02T19:01:15.902Z","updated_at":"2026-06-02T19:01:17.971Z","avatar_url":"https://github.com/FellipeF.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Sistema de Gerenciamento de Artigos\n\n## Pré-Requisitos\n\n### 1) Criação de Certificados Digitais X.509 v3\n\nO acesso à aplicação é feito mediante certificados digitais X.509 v3 no formato .pem. O campo estendido com OID 1.2.3.4.5.6.7.1 é utilizado para controlar o acesso dos três tipos de usuário:\n\n| Usuário | Função |\n|---------|--------|\n|Administrador | Atribui revisores e aprova/rejeita artigos baseado no feedback deles|\n|Revisor | Revisa o artigo que foi atribuído a ele |\n|Autor | Faz o upload de um artigo para ser revisado |\n\n\n#### Observação:\n\n* É necessário que três revisores façam comentários sobre o artigo antes do mesmo aparecer na tela de administrador para aprovação/rejeição.\n* Para realização de testes, estão disponibilizados alguns certificados digitais na pasta testes-certificados, criptografados com curvas elípticas. Eles podem ser conferidos através do seguinte comando:\n\n```\nopenssl x509 -noout -text -in seuCertificado.cert.pem\n```\n\n### 2) Inicialização do RethinkDB\n\nO projeto utiliza o RethinkDB para armazenar os arquivos que são enviados pelo usuário. Cada usuário também possui uma ID única que será sua representação na blockchain a fim de preservar a identidade dos autores como dita o sistema de revisão por pares duplo-cego. Na implementação atual, já está sendo feito o necessário para criar o banco e as tabelas em uma primeira execução, mas ainda há a necessidade da inicialização do RethinkDB por parte do usuário.\n\n## Sobre o Servidor HTTPS\n\nO servidor HTTPS de testes já contém uma chave privada e certificado digital associado, localizado na pasta\n\n```\n/webserver/certificados\n```\n\nComo é apenas um servidor criado para motivos de teste e instanciado em localhost, a chave privada associada está sendo divulgada livremente.\n\n## Tecnologia de Livro-Razão Distribuído\n\nPara preservar a integridade dos artigos, o sistema é construído como uma solução blockchain utilizando o algoritmo de consenso pBFT. A quantidade de nós utilizados e o limite de transações colocadas em uma pool antes do início da rodada de consenso são definidos no arquivo localizado em:\n\n```\nresources/blockchain/config.js\n```\n\nÉ possível conferir a pool de transações e os blocos adicionados à blockchain nos respectivos endpoints.\n\n```\nhttps://localhost:8443/blocks\nhttps://localhost:8443/transactions\n\n```\n\n* A implementação do algoritmo é crédito de: [Kashish Khullar](https://medium.com/coinmonks/implementing-pbft-in-blockchain-12368c6c9548)\n\n## Rede P2P\nPara que os nós se comuniquem entre si via WebSocket para transmitir as mensagens conforme o funcionamento do pBFT, primeiro é necessária a inicialização dos mesmos. Atualmente, é passada uma semente (SECRET) que gera um par de chaves para que as mensagens enviadas sejam assinadas e conferidas seguindo o padrão de criptografia assimétrica.\n\n\n* Inicialização do primeiro nó:\n\n```\nSECRET=\"NODE0\" P2P_PORT=5000 HTTPS_PORT=8443 nodemon index.js\n```\n\n* Inicialização do segundo nó: \n\n```\nSECRET=\"NODE1\" P2P_PORT=5001 HTTPS_PORT=8444 PEERS=ws://localhost:5000 nodemon index.js\n```\n\nO restante dos nós deverão seguir a mesma condição. A variável PEERS são os nós previamente conectados, então para inicializar o terceiro nó, por exemplo, basta separar por vírgula os pares:\n\n```\nSECRET=\"NODE2\" P2P_PORT=5002 HTTPS_PORT=8445 PEERS=ws://localhost:5001,ws://localhost:5000 nodemon index.js\n```\n\n## TODO\n\nAinda há algumas melhorias a serem feitas no projeto, como por exemplo:\n\n* Implementar a recuperação dos dados imutáveis da blockchain ao invés do banco de dados;\n* Utilizar máquinas virtuais ou reais para validar a comunicação entre os WebSockets dos diferentes participantes em diferentes redes;\n* Utilizar o par de chaves do próprio usuário ao invés de utilizar a passagem de parâmetro via terminal para criação de um. Feito isso, também é necessário garantir que a chave pública seja distribuída de forma correta entre os participantes;\n* Tornar a blockchain não-efêmera para caso haja problemas de disponibilidade com os nós participantes;\n* Criar uma lista de certificados revogados e autorizados para controlar acesso;\n* Melhorar a navegação e layout dentro da aplicação construída.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffellipef%2Fsiga","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffellipef%2Fsiga","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffellipef%2Fsiga/lists"}