08. Feature: autenticación en Moodle
Objetivo
Crear una sesión autenticada contra Moodle usando el formulario estándar de login (CSRF token logintoken), de forma reutilizable por el scraper.
Entradas
moodle_url(string)username(string)password(string)
Salidas
requests.Sessionautenticada lista para acceder a páginas protegidas.
API de módulo
Código: scripts/auth.py
fetch_login_token(session, moodle_url) -> strsession_looks_authenticated(session, moodle_url) -> boolcreate_moodle_session(moodle_url, username, password) -> requests.Session
Flujo (contrato)
fetch_login_token:- GET
{moodle_url}/login/index.php - parsea HTML y extrae
input[name="logintoken"]. - si no existe, falla con
RuntimeError.
- GET
create_moodle_session:- crea
requests.Sessiony seteaUser-Agent: kdef-bot/1.0 (...). - POST a
/login/index.phpconusername,password,logintoken. - valida sesión llamando
session_looks_authenticated.
- crea
session_looks_authenticated:- GET
{moodle_url}/my/ - heurística: el HTML no debe contener inputs típicos del login (
username,password,login-form).
- GET
Errores esperables
- Token CSRF no encontrado →
RuntimeError. - Credenciales inválidas o sesión no válida →
RuntimeError. - Errores HTTP (403/500) →
requests.HTTPErrorporraise_for_status(). - Timeouts de red → excepciones de
requests(propagan).
Consideraciones de seguridad
- El
passwordnunca debe loguearse. - La verificación de autenticación es heurística; si Moodle cambia el HTML, puede requerir ajuste.