Este projeto é um sistema de chat em tempo real que utiliza autenticação JWT, troca de mensagens via WebSocket, assinatura digital de mensagens e agora inclui notificações em tempo real, suporte a múltiplas salas e upload de arquivos. O backend é construído com FastAPI e o frontend com React com TypeScript + Vite.
- Cadastro e login de usuários
- Autenticação JWT (token salvo em cookie)
- Troca de mensagens em tempo real via WebSocket
- Assinatura digital das mensagens (chave RSA gerada no frontend)
- Histórico de conversas e mensagens
- Suporte a múltiplas salas de chat
- Notificações em tempo real para novas mensagens e eventos
- Upload e download de arquivos nas conversas
- Interface moderna com Material UI
backend/
app/
main.py
database.py
dependencies.py
models/
modules/
routers/
schemas/
services/
utils/
requirements.txt
cert2.pem
key2.pem
frontend/
src/
App.tsx
api/
components/
pages/
queries/
utils/
hooks/
contexts/
package.json
cert2.pem
key2.pem
- Python 3.11+
- Node.js 18+
- PostgreSQL (ou ajuste o
DATABASE_URLno backend) - Certificados SSL (já inclusos para localhost)
-
Instale as dependências:
cd backend python -m venv venv venv\Scripts\activate # No Windows pip install -r requirements.txt
-
Configure o arquivo
.env:DATABASE_URL=postgresql://usuario:senha@localhost:5432/webchat SECRET_KEY=sua_chave_secreta ALGORITHM=HS256 ACCESS_TOKEN_EXPIRE_MINUTES=60
-
Gere os certificados SSL para localhost (caso ainda não existam):
.\mkcert localhost 127.0.0.1 ::1 ren "localhost+2.pem" cert.pem ren "localhost+2-key.pem" key.pem copy cert.pem ..\frontend\cert.pem copy key.pem ..\frontend\key.pem
-
Inicie o backend:
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 --ssl-keyfile=key.pem --ssl-certfile=cert.pem
-
Instale as dependências:
cd frontend npm install -
Configure o arquivo
.env:VITE_API_BASE_URL=https://localhost:8000/api
-
Inicie o frontend:
npm run dev
-
Acesse: https://localhost:5173
- As mensagens são assinadas digitalmente no frontend usando uma chave RSA gerada por sessão.
- O backend valida a assinatura antes de aceitar e repassar a mensagem.
- O JWT é armazenado em cookie seguro (
SameSite=Lax). - Uploads de arquivos são validados e armazenados com controle de acesso.
- Backend:
app/main.py: Inicialização da API FastAPIapp/routers/: Rotas de autenticação, usuários, chat, salas e arquivosapp/modules/user_repository.py: Lógica de acesso ao bancoapp/services/notification_service.py: Notificações em tempo realapp/utils/file_handler.py: Upload e download de arquivos
- Frontend:
src/App.tsx: Configuração das rotas Reactsrc/components/ChatMain.tsx: Tela principal do chatsrc/components/RoomList.tsx: Listagem e seleção de salassrc/components/FileUpload.tsx: Upload de arquivossrc/queries/useChatSocket.ts: Hook para WebSocketsrc/hooks/useNotifications.ts: Notificações em tempo real
- O projeto utiliza certificados autoassinados para HTTPS local. Navegadores podem exibir avisos de segurança.
- Para produção, utilize certificados válidos e configure variáveis de ambiente adequadas.
- O upload de arquivos possui limite de tamanho configurável no backend.
MIT