c165f2f788
Agrega 19 issues técnicas documentando funcionalidades implementadas y pendientes. Issues completadas (movidas a dev/issues/completed/): - 001-conversor-web-markdown.md - 002-accessibility-tree.md - 003-gestion-cookies-perfil.md - 004-gestion-extensiones-chrome.md - 005-eliminar-timeouts-innecesarios.md Issues implementadas: - 006-manejo-tabs-ventanas.md - 016-manejo-iframes.md - 017-actions-api.md - 018-file-uploads.md - 019-expected-conditions-mejoradas.md Issues pendientes (media prioridad): - 007-alert-prompt-confirm-handling.md - 008-screenshot-elementos-especificos.md - 009-pdf-generation.md - 010-device-emulation-completo.md - 011-downloads-handling.md Issues pendientes (baja prioridad / avanzado): - 012-browser-contexts-multi-sesion.md - 013-video-recording.md - 014-network-mocking-avanzado.md - 015-geolocation-permissions.md Incluye también dev/NUEVAS_FUNCIONALIDADES.md con resumen completo. Directorio: dev/
192 lines
5.7 KiB
Markdown
192 lines
5.7 KiB
Markdown
# Issue #003: Administración avanzada de cookies del perfil
|
|
|
|
**Tipo**: Enhancement
|
|
**Prioridad**: Media
|
|
**Estado**: Pendiente
|
|
|
|
## Descripción
|
|
|
|
Mejorar las capacidades de gestión de cookies persistentes en perfiles de navegador, permitiendo importar/exportar y gestionar cookies antes y después del lanzamiento del navegador.
|
|
|
|
## Funcionalidad deseada
|
|
|
|
### Gestión de cookies en runtime (ya implementado parcialmente)
|
|
- ✅ `GetCookies()` - Obtener cookies de URLs específicas
|
|
- ✅ `SetCookie()` - Establecer cookies individuales
|
|
- ✅ `ClearCookies()` - Limpiar todas las cookies
|
|
|
|
### Nuevas funcionalidades necesarias
|
|
|
|
#### Importar/Exportar
|
|
- Exportar todas las cookies del perfil a archivo JSON
|
|
- Importar cookies desde archivo JSON
|
|
- Formato compatible con extensiones de Chrome (EditThisCookie, etc.)
|
|
- Soportar formato Netscape (cookies.txt)
|
|
|
|
#### Gestión offline de perfiles
|
|
- Leer cookies del perfil sin lanzar navegador
|
|
- Modificar cookies del perfil en disco
|
|
- Copiar cookies entre perfiles
|
|
- Backup/restore de cookies
|
|
|
|
#### Filtrado y búsqueda
|
|
- Listar todas las cookies del perfil actual
|
|
- Filtrar cookies por dominio
|
|
- Filtrar cookies por nombre
|
|
- Buscar cookies por patrón
|
|
|
|
#### Configuración previa al lanzamiento
|
|
- Establecer cookies iniciales antes de lanzar navegador
|
|
- Cargar cookies desde archivo al inicio
|
|
- Configurar cookies de sesión específicas
|
|
|
|
## Implementación técnica
|
|
|
|
### Archivos sugeridos
|
|
- `pkg/browser/profile_cookies.go` - Gestión avanzada
|
|
- `pkg/browser/cookie_import_export.go` - I/O de archivos
|
|
|
|
### API propuesta
|
|
|
|
```go
|
|
// === Gestión en runtime ===
|
|
|
|
// GetAllCookies obtiene todas las cookies del navegador actual
|
|
func (b *Browser) GetAllCookies(ctx context.Context) ([]*Cookie, error)
|
|
|
|
// FilterCookies obtiene cookies que coinciden con filtros
|
|
func (b *Browser) FilterCookies(ctx context.Context, filter CookieFilter) ([]*Cookie, error)
|
|
|
|
type CookieFilter struct {
|
|
Domain string // Filtrar por dominio (ej: ".example.com")
|
|
Name string // Filtrar por nombre exacto
|
|
Pattern string // Regex para nombre o valor
|
|
}
|
|
|
|
// === Import/Export ===
|
|
|
|
// ExportCookies exporta cookies a archivo JSON
|
|
func (b *Browser) ExportCookies(ctx context.Context, filepath string, format CookieFormat) error
|
|
|
|
// ImportCookies importa cookies desde archivo
|
|
func (b *Browser) ImportCookies(ctx context.Context, filepath string, format CookieFormat) error
|
|
|
|
type CookieFormat string
|
|
const (
|
|
CookieFormatJSON CookieFormat = "json" // JSON estándar
|
|
CookieFormatNetscape CookieFormat = "netscape" // cookies.txt
|
|
CookieFormatChrome CookieFormat = "chrome" // Formato EditThisCookie
|
|
)
|
|
|
|
// === Gestión offline de perfiles ===
|
|
|
|
// Profile representa un perfil de navegador
|
|
type Profile struct {
|
|
Name string
|
|
Path string
|
|
}
|
|
|
|
// ListProfiles lista todos los perfiles disponibles
|
|
func ListProfiles() ([]Profile, error)
|
|
|
|
// GetProfileCookies lee cookies de un perfil sin lanzar navegador
|
|
func GetProfileCookies(profilePath string) ([]*Cookie, error)
|
|
|
|
// SetProfileCookies escribe cookies en un perfil sin lanzar navegador
|
|
func SetProfileCookies(profilePath string, cookies []*Cookie) error
|
|
|
|
// CopyProfileCookies copia cookies entre perfiles
|
|
func CopyProfileCookies(srcProfile, dstProfile string) error
|
|
|
|
// === Configuración inicial ===
|
|
|
|
// LaunchWithCookies lanza navegador con cookies precargadas
|
|
func LaunchWithCookies(ctx context.Context, config *Config, cookiesFile string) (*Browser, error)
|
|
|
|
// Config.InitialCookies - campo para establecer cookies al inicio
|
|
type Config struct {
|
|
// ... campos existentes ...
|
|
InitialCookies []*Cookie // Cookies a establecer al lanzar
|
|
CookiesFile string // Archivo de cookies a cargar
|
|
}
|
|
```
|
|
|
|
### Formato JSON de cookies
|
|
|
|
```json
|
|
[
|
|
{
|
|
"name": "session_id",
|
|
"value": "abc123",
|
|
"domain": ".example.com",
|
|
"path": "/",
|
|
"expires": 1735689600,
|
|
"httpOnly": true,
|
|
"secure": true,
|
|
"sameSite": "Lax"
|
|
}
|
|
]
|
|
```
|
|
|
|
### Ubicación de cookies en perfil Chrome
|
|
|
|
```
|
|
~/.navegator/profiles/<nombre>/
|
|
├── Cookies # Base de datos SQLite con cookies
|
|
├── Cookies-journal # Journal de transacciones
|
|
└── ...
|
|
```
|
|
|
|
## Casos de uso
|
|
|
|
### Caso 1: Migrar sesión entre perfiles
|
|
```go
|
|
// Exportar cookies del perfil A
|
|
browserA.ExportCookies(ctx, "session.json", CookieFormatJSON)
|
|
|
|
// Importar en perfil B
|
|
browserB.ImportCookies(ctx, "session.json", CookieFormatJSON)
|
|
```
|
|
|
|
### Caso 2: Backup de sesión autenticada
|
|
```go
|
|
// Guardar estado de sesión actual
|
|
b.ExportCookies(ctx, "backup_session.json", CookieFormatJSON)
|
|
|
|
// Restaurar más tarde
|
|
b2.ImportCookies(ctx, "backup_session.json", CookieFormatJSON)
|
|
```
|
|
|
|
### Caso 3: Lanzar con sesión precargada
|
|
```go
|
|
config := browser.DefaultConfig()
|
|
config.CookiesFile = "authenticated_session.json"
|
|
b, _ := browser.Launch(ctx, config)
|
|
// Ya está autenticado al iniciar
|
|
```
|
|
|
|
### Caso 4: Sincronizar cookies entre máquinas
|
|
```go
|
|
// Máquina A - exportar
|
|
GetProfileCookies("~/.navegator/profiles/main").Export("cookies.json")
|
|
|
|
// Máquina B - importar
|
|
SetProfileCookies("~/.navegator/profiles/main", LoadCookies("cookies.json"))
|
|
```
|
|
|
|
## Consideraciones de seguridad
|
|
|
|
⚠️ **Importante**: Las cookies pueden contener tokens de sesión y datos sensibles
|
|
|
|
- Advertir al usuario sobre seguridad de archivos exportados
|
|
- Opción para encriptar archivos de cookies
|
|
- No guardar cookies de sesión por defecto
|
|
- Limpiar cookies sensibles en exports
|
|
|
|
## Referencias
|
|
|
|
- CDP Network.getCookies: https://chromedevtools.github.io/devtools-protocol/tot/Network/#method-getCookies
|
|
- CDP Storage.getCookies: https://chromedevtools.github.io/devtools-protocol/tot/Storage/#method-getCookies
|
|
- Chrome Cookies DB: SQLite format
|
|
- Netscape cookies.txt: http://fileformats.archiveteam.org/wiki/Netscape_cookies.txt
|