Cuenta de externas, arreglos de seguridad, títulos arriba y despliegue

- Rol «externas» para la asamblea de externas: pide sin cupo, siempre con el
  colectivo de fuera y su contacto, y sus solicitudes salen en naranja hasta
  que la asamblea de la Enre las confirma.
- /pedir/ explica en una línea que los colectivos externos piden fecha en la
  asamblea de externas, los lunes de 19:00 a 20:00.
- Seguridad: argon2 limitado a dos cálculos a la vez y el intento se cuenta
  antes de calcular (60 accesos simultáneos llevaban el proceso a 3,8 GB);
  bloqueo por cuenta a 20 fallos para que no se pueda dejar fuera a la
  asamblea; avisos por sesión en vez de por URL; sig sin «..»; eventos de
  31 días como mucho; parámetros de argon2 acotados.
- Títulos pegados arriba en todas las páginas; la franja de la enredadera
  recupera ese alto para seguir llenando la pantalla.
- despliegue/: instalar.sh, cuenta.sh, servicio de systemd con el proceso
  encerrado, fragmento de nginx que además deja de servir .git y las notas
  internas, y configuración de ejemplo. Ninguna contraseña en el repositorio.
This commit is contained in:
SITO 2026-09-23 12:15:33 +02:00
parent ce3127baff
commit 7d5dbeec60
24 changed files with 606 additions and 96 deletions

View file

@ -25,7 +25,7 @@
{{- if .Eventos}}
<div class="cal-pills">
{{- range .Eventos}}
<div class="cal-ev cal-ev-{{.Estado}}">
<div class="cal-ev cal-ev-{{.Estado}}{{if .Externas}} cal-ev-externas{{end}}">
<span class="cal-ev-cab">{{if .Hora}}<b class="cal-ev-hora">{{.Hora}}</b>{{end}}<span class="cal-ev-estado">{{.Etiqueta}}</span></span>
<span class="cal-ev-nom">{{.Texto}}{{if .Sigue}} (sigue){{end}}</span>
<span class="cal-ev-quien">{{.Quien}}</span>

View file

@ -55,7 +55,7 @@
</section>
<section class="pantalla" aria-label="Dar de alta un colectivo">
<h2>Dar de alta un colectivo de la casa</h2>
<h2>Dar de alta un colectivo de la Enre</h2>
<form class="pedir-form" method="post" action="/pedir/cuentas" autocomplete="off">
<input type="hidden" name="csrf" value="{{.CSRF}}">
<input type="hidden" name="accion" value="crear">
@ -73,14 +73,16 @@
<label for="nuevo-rol">Rol</label>
<select id="nuevo-rol" name="rol">
<option value="interno">interno: pide fechas y amadrina</option>
<option value="externas">externas: la asamblea de externas, pide sin cupo</option>
<option value="enre">enre: además confirma y rechaza</option>
</select>
</p>
<p><button type="submit">Crear la cuenta</button></p>
</form>
<p class="pie">
Los colectivos de fuera no tienen cuenta: sus eventos los pide un colectivo de la casa
que los amadrina. Cuantas menos contraseñas haya guardadas, menos hay que perder.
Los colectivos de fuera no tienen cuenta: sus eventos los apunta la cuenta de externas
en la asamblea de externas, o un colectivo de la Enre que los amadrina. Cuantas menos
contraseñas haya guardadas, menos hay que perder.
</p>
</section>

View file

@ -1,12 +1,21 @@
{{template "arriba" .}}
<section class="pantalla" aria-label="Vuestro cupo">
{{- if .EsExternas}}
<h2>Asamblea de externas</h2>
<p class="pie">
Aquí se apuntan los eventos de colectivos de fuera que se hablan en la asamblea de
externas. No hay cupo. Quedan en naranja hasta que la asamblea de la Enre los confirme.
Se pueden pedir fechas hasta el {{.Hasta}}.
</p>
{{- else}}
<h2>Vuestro cupo</h2>
<p class="pie">
Os quedan <strong>{{.Restantes}}</strong> de {{.Reglas.CupoDias}} días dentro de los
próximos {{.Reglas.MesesVentana}} meses. Se pueden pedir fechas hasta el {{.Hasta}}.
{{- if .DiasUsados}} Ahora mismo ocupáis {{.DiasUsados}}.{{end}}
</p>
{{- end}}
<p><a class="pedir-boton" href="/pedir/nueva">Pedir una fecha</a></p>
</section>
@ -35,7 +44,7 @@
{{.Evento.Titulo}}
{{- if .Evento.Externo}}<br><span class="pista">amadrináis a {{.Evento.Amadrinado}}</span>{{end}}
</td>
<td><span class="estado estado-{{.Evento.Estado}}">{{.Etiqueta}}</span></td>
<td><span class="estado estado-{{.Evento.Estado}}{{if .Externas}} estado-externas{{end}}">{{.Etiqueta}}</span></td>
<td>{{if .Caduca}}{{.Caduca}}{{else}}—{{end}}</td>
<td>
{{- if .Liberable}}

View file

@ -4,9 +4,14 @@
<h2>Pedir una fecha</h2>
<ul class="pedir-reglas">
<li>Entre el <strong>{{.Primero.Legible}}</strong> y el <strong>{{.Ultimo.Legible}}</strong>.</li>
{{- if .EsExternas}}
<li>Cada evento es de un colectivo de fuera: poned cuál y un contacto suyo.</li>
<li>La asamblea de externas no tiene cupo. La fecha queda en naranja hasta que la asamblea de la Enre la confirme.</li>
{{- else}}
<li>Como mucho <strong>{{.Reglas.CupoDias}} días por colectivo</strong> en esos {{.Reglas.MesesVentana}} meses. Os quedan {{.Restantes}}.</li>
<li>Las fechas se piden para el finde: viernes, sábado o domingo.</li>
<li>Si el evento es de un colectivo de fuera, decid cuál: vuestro colectivo lo amadrina y responde por él.</li>
{{- end}}
<li>Las fechas se piden para el finde: viernes, sábado o domingo.</li>
</ul>
<form class="pedir-form" method="post" action="/pedir/nueva">
@ -31,9 +36,14 @@
<input id="hora" name="hora" type="time" value="{{.Sol.Hora}}">
</p>
<p>
{{- if .EsExternas}}
<label for="amadrinado">Colectivo de fuera</label>
<input id="amadrinado" name="amadrinado" type="text" required maxlength="80" value="{{.Sol.Amadrinado}}">
{{- else}}
<label for="amadrinado">Colectivo de fuera al que amadrináis</label>
<input id="amadrinado" name="amadrinado" type="text" maxlength="80" value="{{.Sol.Amadrinado}}">
<span class="pista">Vacío si el evento es vuestro.</span>
{{- end}}
</p>
<p>
<label for="contacto">Contacto de ese colectivo</label>

View file

@ -1,11 +1,16 @@
{{template "arriba" .}}
{{- if not .Dentro}}
<p class="pedir-externas">Colectivos externos: las fechas se piden en persona en la <strong>asamblea de externas, lunes de 19:00 a 20:00</strong>.</p>
{{- end}}
<section class="pantalla" aria-label="Fechas pedidas y confirmadas">
<h2>Qué findes están cogidos</h2>
<p class="pie">
Pincha en un día libre del finde para pedirlo.
Los colectivos de la Enre pinchan en un día libre del finde para pedirlo.
En <strong>negro</strong>, fechas que un colectivo ha pedido y esperan a que la
asamblea las confirme. En <strong>verde chillón</strong>, fechas ya confirmadas. Los findes se
asamblea las confirme; en <strong>naranja</strong>, las que ha apuntado la asamblea de
externas. En <strong>verde chillón</strong>, fechas ya confirmadas. Los findes se
turnan entre tranquilos y con ruido. Hoy se pueden pedir fechas hasta el
{{.Hasta}}, con un máximo de {{.Reglas.CupoDias}} días por colectivo.
Los horarios fijos de cada semana están en <a href="/calendario.html">Calendario</a>.
@ -13,6 +18,7 @@
<div class="leyenda-pedir">
<span class="cal-ev cal-ev-solicitado leyenda-muestra">Solicitado</span>
<span class="cal-ev cal-ev-solicitado cal-ev-externas leyenda-muestra">Solicitado externas</span>
<span class="cal-ev cal-ev-confirmado leyenda-muestra">Confirmado</span>
<span class="leyenda-finde cal-tranqui">Finde tranqui</span>
<span class="leyenda-finde cal-ruido">Finde con ruido</span>
@ -28,16 +34,11 @@
{{- if not .Dentro}}
<section class="pantalla" id="entrar" aria-label="Cómo se pide un evento">
<h2>Cómo se pide</h2>
<h2>Entrar</h2>
<p class="pie">
Si tu colectivo <strong>no es de la casa</strong>, la fecha se pide en persona: ven a
la <strong>asamblea de externas, los lunes a las 19:00</strong>, en la Enredadera,
calle de la Coruña nº 5. Allí se habla del evento y un colectivo de la casa lo
amadrina y se hace responsable.
</p>
<p class="pie">
Si tu colectivo <strong>ya tiene credenciales</strong>, entra aquí y pide la fecha.
Desde aquí se piden también las de los colectivos de fuera a los que amadrinéis.
Solo para los <strong>colectivos de la Enre</strong>, que tienen credenciales, y para
la asamblea de externas. Si sois de fuera, no hay cuenta que pedir: la fecha se
pide en la <strong>asamblea de externas, los lunes de 19:00 a 20:00</strong>.
</p>
<form class="pedir-form" method="post" action="/pedir/entrar" autocomplete="off">

View file

@ -23,7 +23,7 @@
<td>
{{.Evento.Titulo}}<br><span class="pista">{{.Quien}}</span>
</td>
<td><span class="estado estado-{{.Evento.Estado}}">{{.Etiqueta}}</span></td>
<td><span class="estado estado-{{.Evento.Estado}}{{if .Externas}} estado-externas{{end}}">{{.Etiqueta}}</span></td>
<td>
<div class="acciones">
<a class="pedir-boton-flojo" href="/pedir/editar?id={{.Evento.ID}}">Modificar</a>