Skip to content

ericperinn/chat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Chat Seguro com FastAPI, React e WebSockets

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.

Funcionalidades

  • 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

Estrutura do Projeto

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

Como rodar o projeto

Pré-requisitos

  • Python 3.11+
  • Node.js 18+
  • PostgreSQL (ou ajuste o DATABASE_URL no backend)
  • Certificados SSL (já inclusos para localhost)

Backend

  1. Instale as dependências:

    cd backend
    python -m venv venv
    venv\Scripts\activate  # No Windows
    pip install -r requirements.txt
  2. Configure o arquivo .env:

    DATABASE_URL=postgresql://usuario:senha@localhost:5432/webchat
    SECRET_KEY=sua_chave_secreta
    ALGORITHM=HS256
    ACCESS_TOKEN_EXPIRE_MINUTES=60
  3. 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
  4. Inicie o backend:

    uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 --ssl-keyfile=key.pem --ssl-certfile=cert.pem

Frontend

  1. Instale as dependências:

    cd frontend
    npm install
  2. Configure o arquivo .env:

    VITE_API_BASE_URL=https://localhost:8000/api
  3. Inicie o frontend:

    npm run dev
  4. Acesse: https://localhost:5173


Segurança

  • 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.

Principais arquivos

  • Backend:
    • app/main.py: Inicialização da API FastAPI
    • app/routers/: Rotas de autenticação, usuários, chat, salas e arquivos
    • app/modules/user_repository.py: Lógica de acesso ao banco
    • app/services/notification_service.py: Notificações em tempo real
    • app/utils/file_handler.py: Upload e download de arquivos
  • Frontend:
    • src/App.tsx: Configuração das rotas React
    • src/components/ChatMain.tsx: Tela principal do chat
    • src/components/RoomList.tsx: Listagem e seleção de salas
    • src/components/FileUpload.tsx: Upload de arquivos
    • src/queries/useChatSocket.ts: Hook para WebSocket
    • src/hooks/useNotifications.ts: Notificações em tempo real

Observações

  • 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.

Licença

MIT

About

Chat Seguro com FastAPI, React e WebSockets

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors