{"id":51479351,"url":"https://github.com/denisfreitas999/devsecops-lsp-test","last_synced_at":"2026-07-07T00:30:42.778Z","repository":{"id":365527150,"uuid":"1084477772","full_name":"denisfreitas999/devsecops-lsp-test","owner":"denisfreitas999","description":"PoC: servidor Node.js com violações LGPD intencionais para testes de um LSP DevSecOps","archived":false,"fork":false,"pushed_at":"2026-06-17T17:32:40.000Z","size":59,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-17T19:23:55.749Z","etag":null,"topics":["compliance","devsecops","lei-geral-de-protecao-de-dados","lgpd","lsp","nodejs","poc","privacy","security","sequelize"],"latest_commit_sha":null,"homepage":"https://ri.ufs.br/handle/riufs/24499","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/denisfreitas999.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-27T18:24:58.000Z","updated_at":"2026-06-17T17:34:55.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/denisfreitas999/devsecops-lsp-test","commit_stats":null,"previous_names":["denisfreitas999/devsecops-lsp-test"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/denisfreitas999/devsecops-lsp-test","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denisfreitas999%2Fdevsecops-lsp-test","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denisfreitas999%2Fdevsecops-lsp-test/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denisfreitas999%2Fdevsecops-lsp-test/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denisfreitas999%2Fdevsecops-lsp-test/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/denisfreitas999","download_url":"https://codeload.github.com/denisfreitas999/devsecops-lsp-test/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denisfreitas999%2Fdevsecops-lsp-test/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35210429,"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-07-06T02:00:07.184Z","response_time":106,"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":["compliance","devsecops","lei-geral-de-protecao-de-dados","lgpd","lsp","nodejs","poc","privacy","security","sequelize"],"created_at":"2026-07-07T00:30:41.259Z","updated_at":"2026-07-07T00:30:42.766Z","avatar_url":"https://github.com/denisfreitas999.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🔐 devsecops-lsp-test\n\n\u003e **Prova de Conceito (PoC)** — Servidor de teste para validação de um Language Server Protocol (LSP) com foco em conformidade LGPD/DevSecOps.\n\n---\n\n## 📋 Sobre o Projeto\n\nEste repositório contém uma API Node.js propositalmente construída com **violações de segurança e privacidade** para servir como ambiente de testes de um servidor LSP customizado. O objetivo é validar se o LSP consegue detectar, em tempo real no editor, padrões de código que violam requisitos não funcionais (RNFs) relacionados à **LGPD** e boas práticas de **DevSecOps**.\n\nA aplicação simula um sistema de gestão de pacientes de uma clínica médica — um domínio sensível que envolve dados pessoais e dados de saúde.\n\n---\n\n## 🎯 Objetivo da PoC\n\nVerificar a capacidade do servidor LSP de detectar e sinalizar as seguintes categorias de violações:\n\n| Código | Categoria | Descrição |\n|--------|-----------|-----------|\n| `RNF-07-A` | Logging de Dado Pessoal/Sensível | `console.log/warn` expondo CPF ou histórico médico |\n| `RNF-07-B` | Uso de Dado Sensível de Saúde | Acesso e manipulação direta de `historico_medico` |\n| `RNF-07-C` | Transmissão Insegura de Dados | Envio de payload completo com dados pessoais para APIs externas |\n| `RNF-07-D` | Upload de Dados Sensíveis | `FormData.append()` com campos pessoais desnecessários |\n| `RNF-07-E` | Exfiltração via E-mail/Mensageria | Corpo de e-mail contendo CPF e dados de saúde |\n| `RNF-07-F` | Armazenamento Inseguro em Arquivo | `fs.writeFileSync` gravando dados pessoais em texto plano |\n| `RNF-07-G` | Serialização Insegura | `JSON.stringify` em objetos contendo dados pessoais sem mascaramento |\n| `RNF-08` | Protocolo Inseguro (HTTP) | URLs `http://` transmitindo dados sensíveis sem criptografia |\n| `RNF-12-A` | Exclusão Insegura (Hard Delete) | `destroy()` com critério baseado em CPF sem auditoria adequada |\n| `RNF-12-B` | Eliminação de Arquivo Sensível | `fs.unlinkSync` em arquivo com nome contendo CPF |\n| `RNF-12-C` | Soft Delete Inseguro | Esquema de desativação sem campo de controle de retenção (`dataExclusao`) |\n\n---\n\n## 🏗️ Estrutura do Projeto\n\n```\n📦 devsecops-lsp-test\n ┣ 📂 .github/\n ┃ ┗ 📂 workflows/\n ┃   ┗ 📜 compliance-check.yml     # CI/CD para checagem de conformidade\n ┣ 📂 src/\n ┃ ┣ 📂 config/\n ┃ ┃ ┣ 📜 database.js              # Configuração do banco de dados (SQLite + Sequelize)\n ┃ ┃ ┣ 📜 multerConfig.js          # Configuração de upload de arquivos\n ┃ ┃ ┗ 📜 swaggerConfig.js         # Documentação da API (Swagger/OpenAPI)\n ┃ ┣ 📂 controllers/\n ┃ ┃ ┗ 📜 pacienteController.js    # Controller principal com as violações intencionais\n ┃ ┣ 📂 models/\n ┃ ┃ ┣ 📜 index.js\n ┃ ┃ ┣ 📜 Paciente.js              # Modelo de dados do paciente\n ┃ ┃ ┗ 📜 ProntuarioMedico.js      # Modelo de prontuário médico\n ┃ ┣ 📂 routes/\n ┃ ┃ ┣ 📜 index.js\n ┃ ┃ ┗ 📜 pacienteRoutes.js        # Definição das rotas da API\n ┃ ┗ 📜 server.js                  # Entry point da aplicação\n ┣ 📂 uploads/                     # Diretório de arquivos enviados\n ┣ 📜 .gitignore\n ┣ 📜 database.sqlite              # Banco de dados local\n ┣ 📜 package.json\n ┗ 📜 package-lock.json\n```\n\n---\n\n## 🚀 Como Executar\n\n### Pré-requisitos\n\n- Node.js `\u003e= 18.x`\n- npm `\u003e= 9.x`\n\n### Instalação\n\n```bash\n# Clone o repositório\ngit clone https://github.com/\u003cseu-usuario\u003e/devsecops-lsp-test.git\ncd devsecops-lsp-test\n\n# Instale as dependências\nnpm install\n\n# Inicie o servidor\nnpm start\n```\n\nO servidor estará disponível em `http://localhost:3000`.\n\nA documentação interativa (Swagger) pode ser acessada em `http://localhost:3000/api-docs`.\n\n---\n\n## 🔌 Endpoints Disponíveis\n\n| Método | Rota | Descrição | Violação |\n|--------|------|-----------|----------|\n| `POST` | `/pacientes` | Cria paciente com prontuário | `RNF-07-A` |\n| `GET` | `/pacientes/:id/prontuario` | Busca prontuário do paciente | `RNF-07-A`, `RNF-07-B` |\n| `GET` | `/pacientes/:id/convenio` | Verifica crédito do convênio | `RNF-08` |\n| `POST` | `/pacientes/:id/compartilhar` | Compartilha prontuário com parceiro | `RNF-07-C` |\n| `POST` | `/pacientes/:id/upload` | Upload de documento | `RNF-07-D` |\n| `POST` | `/pacientes/:id/email-boas-vindas` | Envia e-mail de boas-vindas | `RNF-07-E` |\n| `GET` | `/pacientes/:id/relatorio` | Gera relatório em arquivo `.txt` | `RNF-07-F` |\n| `GET` | `/pacientes/:id/auditoria` | Registra log de auditoria JSON | `RNF-07-G` |\n| `DELETE` | `/pacientes/cpf/:cpf` | Exclui paciente permanentemente | `RNF-12-A` |\n| `DELETE` | `/pacientes/arquivar/:cpf` | Remove arquivo de backup | `RNF-12-B` |\n| `PATCH` | `/pacientes/desativar/:cpf` | Desativa paciente (soft delete) | `RNF-12-C` |\n\n---\n\n## ⚠️ Aviso Importante\n\n\u003e As violações neste código são **100% intencionais** e existem exclusivamente para fins de testes do servidor LSP. **Não utilize este projeto como base para sistemas em produção.**\n\nAs violações estão marcadas no código com o comentário:\n```js\n// ❌ VIOLAÇÃO [CÓDIGO-RNF]: Descrição ❌\n```\n\nPara suprimir uma detecção pontual do LSP durante os testes, utilize a diretiva:\n```js\n// lgpd-lsp-ignore-next-line RNF-XX\n```\n\n---\n\n## 🧪 Pipeline de CI\n\nO workflow `.github/workflows/compliance-check.yml` executa automaticamente a checagem de conformidade a cada push, simulando a integração do LSP em um pipeline de DevSecOps.\n\n---\n\n## 🔖 Tags\n\n- `inpi-v1.0` — Versão registrada para fins de comprovação de autoria.\n\n---\n\n## 📄 Licença\n\nEste projeto está licenciado sob a **Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0)**.\n\n[![CC BY-NC-ND 4.0](https://licensebuttons.net/l/by-nc-nd/4.0/88x31.png)](https://creativecommons.org/licenses/by-nc-nd/4.0/)\n\nVocê é livre para:\n- **Compartilhar** — copiar e redistribuir o material em qualquer meio ou formato.\n\nSob as seguintes condições:\n- **Atribuição** — Você deve dar o crédito apropriado ao autor original.\n- **Não Comercial** — Você não pode usar o material para fins comerciais.\n- **Sem Derivações** — Se você remixar, transformar ou criar a partir do material, não poderá distribuir o material modificado.\n\n\u003e Consulte os [termos completos da licença](https://creativecommons.org/licenses/by-nc-nd/4.0/) para mais detalhes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdenisfreitas999%2Fdevsecops-lsp-test","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdenisfreitas999%2Fdevsecops-lsp-test","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdenisfreitas999%2Fdevsecops-lsp-test/lists"}