You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2.8 KiB

Google Workspace Hub (FastAPI + SQLite)

Proyecto base en FastAPI para centralizar acciones con Google Workspace (Gmail, Classroom, Calendar/Meet, etc.) y guardar tokens/usuarios en SQLite.

Qué incluye

  • FastAPI listo para correr
  • SQLite (con SQLModel)
  • Flujo OAuth web:
    • GET /auth/google/start genera el link de autorización
    • GET /auth/google/callback recibe el code y guarda el token en SQLite
  • Ejemplos de endpoints:
    • Gmail: GET /gmail/profile, POST /gmail/send
    • Classroom: GET /classroom/courses
    • Calendar/Meet: POST /calendar/events (crea evento con Meet)

Nota: Para que funcione necesitas crear un OAuth Client (Web application) en Google Cloud Console y descargar el client_secret.json.


Requisitos

  • Python 3.11+ (recomendado)
  • Una cuenta Google (o Workspace) y un proyecto en Google Cloud con APIs habilitadas:
    • Gmail API
    • Google Classroom API
    • Google Calendar API

1) Setup rápido (Windows PowerShell)

python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
copy .env.example .env

2) Coloca tus credenciales

  1. Crea carpeta: credentials/
  2. Copia tu archivo OAuth aquí:
    • credentials/client_secret.json

No lo subas a git (ya está en .gitignore).

3) Configura el .env

Edita .env y pon:

  • GOOGLE_REDIRECT_URI (ej: http://127.0.0.1:8000/auth/google/callback)
  • GOOGLE_SCOPES (ya viene uno útil por defecto)

4) Corre el servidor

uvicorn app.main:app --reload

Abre:

5) Autoriza tu cuenta Google

  1. Ve a:
    • GET /auth/google/start
  2. Abre el auth_url que te devuelve
  3. Acepta permisos
  4. Google te redirige a GOOGLE_REDIRECT_URI
  5. Eso guarda el token en SQLite (app.db)

6) Probar endpoints

  • Gmail profile:
    • GET /gmail/profile?account_email=TU_CORREO@gmail.com
  • Enviar correo:
    • POST /gmail/send?account_email=TU_CORREO@gmail.com
  • Listar cursos:
    • GET /classroom/courses?account_email=TU_CORREO@gmail.com
  • Crear evento con Meet:
    • POST /calendar/events?account_email=TU_CORREO@gmail.com

Estructura

app/
  core/      config + DB
  google/    auth + clientes Google
  routers/   endpoints (oauth, gmail, classroom, calendar)
  models.py  tablas SQLite

Notas importantes

  • Si tu cuenta es Workspace y quieres administrar usuarios/dominio (acciones “de admin”), eso normalmente se hace con Service Account + Domain-wide delegation. Aquí te dejo el proyecto listo para OAuth (usuario) porque es lo más simple para empezar.
  • Si algo “se cae” por permisos: revisa los scopes y vuelve a autorizar (borrando el token del usuario en SQLite).

Próximos pasos sugeridos

  • Roles/usuarios internos (login propio)
  • Cola de tareas (para correos masivos): Celery/RQ/Arq
  • Logs en DB (auditoría)