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:
parent
ce3127baff
commit
7d5dbeec60
24 changed files with 606 additions and 96 deletions
|
|
@ -19,6 +19,8 @@ type Reglas struct {
|
|||
TurnoAncla Turno `json:"turno_ancla"` // que turno le toca a ese finde
|
||||
}
|
||||
|
||||
const maxDiasEvento = 31
|
||||
|
||||
func ReglasPorDefecto() Reglas {
|
||||
return Reglas{
|
||||
MesesVentana: 3,
|
||||
|
|
@ -104,6 +106,9 @@ func (rg Reglas) Validar(s Solicitud, eventos []Evento, hoy Dia) error {
|
|||
if len([]rune(s.Titulo)) > 80 {
|
||||
return fmt.Errorf("el nombre del evento no puede pasar de 80 caracteres")
|
||||
}
|
||||
if s.Rol == RolExternas && strings.TrimSpace(s.Amadrinado) == "" {
|
||||
return fmt.Errorf("falta de qué colectivo de fuera es el evento")
|
||||
}
|
||||
if s.Amadrinado != "" && strings.TrimSpace(s.Contacto) == "" {
|
||||
return fmt.Errorf("si amadrinas a un colectivo de fuera hace falta un contacto suyo")
|
||||
}
|
||||
|
|
@ -123,7 +128,12 @@ func (rg Reglas) Validar(s Solicitud, eventos []Evento, hoy Dia) error {
|
|||
}
|
||||
|
||||
dias := Rango(s.Desde, s.Hasta)
|
||||
libre := s.Rol == RolEnre // la asamblea de la casa no tiene cupo ni ventana
|
||||
// Tope para todos, también la asamblea: Rango corta en 400 días y un evento
|
||||
// más largo quedaría pintado en el calendario pero sin bloquear sus fechas.
|
||||
if len(dias) > maxDiasEvento {
|
||||
return fmt.Errorf("un evento no puede durar más de %d días", maxDiasEvento)
|
||||
}
|
||||
libre := s.Rol == RolEnre // la asamblea de la Enre no tiene cupo ni ventana
|
||||
|
||||
if !libre {
|
||||
primero, ultimo := rg.Ventana(hoy)
|
||||
|
|
@ -157,7 +167,9 @@ func (rg Reglas) Validar(s Solicitud, eventos []Evento, hoy Dia) error {
|
|||
}
|
||||
}
|
||||
|
||||
if !libre {
|
||||
// La asamblea de externas apunta eventos de muchos colectivos distintos:
|
||||
// el cupo es por colectivo y no tiene sentido sumarlos todos en su cuenta.
|
||||
if !libre && s.Rol != RolExternas {
|
||||
usados := rg.CupoUsado(s.Solicitante, eventos, hoy, s.Excluir)
|
||||
if len(usados)+len(dias) > rg.CupoDias {
|
||||
return fmt.Errorf("te pasáis del cupo: %d días por colectivo en los próximos %d meses. "+
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue