Gerenciador de senhas com extensão para Chrome e backend em Node.js.
projeto-claude-code/
├── backend/ # API REST (Node.js + Express + SQLite)
│ ├── src/
│ │ ├── app.js # Entry point
│ │ ├── controllers/ # Recebem req/res e delegam para services
│ │ │ ├── authController.js
│ │ │ └── credentialController.js
│ │ ├── services/ # Lógica de negócio
│ │ │ ├── authService.js
│ │ │ ├── credentialService.js
│ │ │ └── cryptoService.js
│ │ ├── models/ # Acesso ao banco de dados
│ │ │ ├── db.js
│ │ │ ├── userModel.js
│ │ │ └── credentialModel.js
│ │ ├── routes/
│ │ │ ├── authRoutes.js
│ │ │ └── credentialRoutes.js
│ │ └── middleware/
│ │ └── authMiddleware.js
│ ├── data/ # Banco SQLite (gerado automaticamente)
│ ├── package.json
│ └── .env.example
└── extension/ # Extensão Chrome (Manifest V3)
├── popup/
│ ├── popup.html
│ ├── popup.css
│ └── popup.js
├── background/
│ └── background.js # Service worker — faz as chamadas à API
├── icons/ # Adicione icon16.png, icon48.png, icon128.png
└── manifest.json
cd backend
npm installcp .env.example .envEdite .env e defina valores seguros para JWT_SECRET e ENCRYPTION_KEY.
ENCRYPTION_KEY deve ter exatamente 32 caracteres para AES-256.
mkdir backend/data# Produção
npm start
# Desenvolvimento (hot-reload)
npm run devO servidor sobe em http://localhost:3000.
| Método | Rota | Descrição |
|---|---|---|
| POST | /api/auth/register | Criar conta |
| POST | /api/auth/login | Login / obter token |
Body (register e login):
{ "username": "alice", "masterPassword": "minha-senha-forte" }| Método | Rota | Descrição |
|---|---|---|
| GET | /api/credentials | Listar credenciais |
| GET | /api/credentials/:id | Obter uma credencial |
| POST | /api/credentials | Criar credencial |
| PUT | /api/credentials/:id | Atualizar credencial |
| DELETE | /api/credentials/:id | Excluir credencial |
| GET | /api/credentials/export | Exportar todas (JSON) |
| POST | /api/credentials/import | Importar array (JSON) |
Body (POST/PUT):
{
"title": "GitHub",
"url": "https://github.com",
"username": "alice",
"password": "senha-secreta",
"notes": "Conta pessoal"
}- Acesse
chrome://extensions - Ative Modo do desenvolvedor
- Clique em Carregar sem compactação
- Selecione a pasta
extension/
Adicione os arquivos icon16.png, icon48.png e icon128.png dentro de extension/icons/.
- Senhas são criptografadas com AES-256-CBC antes de persistir no banco
- Senha mestra é armazenada como hash bcrypt (cost factor 12)
- Autenticação via JWT com expiração configurável
- Token armazenado no
chrome.storage.localda extensão