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.
98 lines
2.8 KiB
Markdown
98 lines
2.8 KiB
Markdown
|
1 day ago
|
# 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)
|
||
|
|
```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
|
||
|
|
```bash
|
||
|
|
uvicorn app.main:app --reload
|
||
|
|
```
|
||
|
|
|
||
|
|
Abre:
|
||
|
|
- http://127.0.0.1:8000/docs
|
||
|
|
|
||
|
|
## 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)
|