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
|
|
@ -11,6 +11,7 @@ type FilaEvento struct {
|
|||
Texto string
|
||||
Quien string
|
||||
Estado Estado
|
||||
Externas bool // la pidió la asamblea de externas
|
||||
Etiqueta string
|
||||
Sigue bool // dia intermedio o final de un evento de varios dias
|
||||
}
|
||||
|
|
@ -41,6 +42,7 @@ type Mes struct {
|
|||
// Aqui no hay horarios semanales: esos siguen en calendario.html, que se dibuja
|
||||
// con su propio guion y no se toca.
|
||||
type Vista struct {
|
||||
roles map[string]Rol
|
||||
reglas Reglas
|
||||
exc map[Dia]Turno
|
||||
eventos []Evento
|
||||
|
|
@ -58,7 +60,11 @@ func (v Vista) eventosDe(d Dia) []FilaEvento {
|
|||
if quien == "" {
|
||||
quien = e.Solicitante
|
||||
}
|
||||
if e.Externo() {
|
||||
externas := v.roles[e.Solicitante] == RolExternas
|
||||
switch {
|
||||
case externas:
|
||||
quien = e.Amadrinado + " · asamblea de externas"
|
||||
case e.Externo():
|
||||
quien = fmt.Sprintf("%s · amadrina %s", e.Amadrinado, quien)
|
||||
}
|
||||
out = append(out, FilaEvento{
|
||||
|
|
@ -66,7 +72,8 @@ func (v Vista) eventosDe(d Dia) []FilaEvento {
|
|||
Texto: e.Titulo,
|
||||
Quien: quien,
|
||||
Estado: e.Estado,
|
||||
Etiqueta: e.Estado.Etiqueta(),
|
||||
Externas: externas,
|
||||
Etiqueta: etiquetaEstado(e.Estado, externas),
|
||||
Sigue: d != e.Desde,
|
||||
})
|
||||
}
|
||||
|
|
@ -143,6 +150,15 @@ func (v Vista) Proximas() []Evento {
|
|||
return out
|
||||
}
|
||||
|
||||
// etiquetaEstado distingue lo que ha pedido la asamblea de externas mientras
|
||||
// espera: una vez confirmado es un evento más.
|
||||
func etiquetaEstado(e Estado, externas bool) string {
|
||||
if externas && e == Solicitado {
|
||||
return "SOLICITADO EXTERNAS"
|
||||
}
|
||||
return e.Etiqueta()
|
||||
}
|
||||
|
||||
func diasDelMes(anio, mes int) int {
|
||||
return fechaMes(anio, mes).AddDate(0, 1, -1).Day()
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue