runv-server

server tooling for runv.club
Log | Files | Refs | README

07-public-members-directory.md (2422B)


      1 # Directório público de membros
      2 
      3 [← Índice](README.md)
      4 
      5 ## Script: `site/build_directory.py`
      6 
      7 - **Entrada:** `--users-json` (default `/var/lib/runv/users.json`) — deve ser uma **lista** JSON de objectos.
      8 - **Saída:** `-o` / `--output` (default no repo: `site/public/data/members.json`; em produção típico: `DocumentRoot/data/members.json`).
      9 
     10 ## Schema público (campos escritos)
     11 
     12 Cada elemento do array gerado contém:
     13 
     14 | Campo | Origem / notas |
     15 |-------|------------------|
     16 | `username` | De `users.json` |
     17 | `since` | `created_at` se for string; senão `""` |
     18 | `path` | `"/~username/"` |
     19 | `homepage_mtime` | Opcional; só com `--homes-root` (ex. `/home`) |
     20 
     21 **Privacidade:** o script **não** copia email, fingerprint SSH, quotas nem outros campos internos (**evidência:** lógica em `build_directory.py`, função `main`).
     22 
     23 ## Consumo no browser
     24 
     25 - `site/public/assets/app.js`: `validMembers()` exige `username` e `path` (strings); `since` opcional para brilho visual.
     26 
     27 ## Quando regenerar
     28 
     29 1. **Hook em `create_runv_user.py`:** se `--landing-document-root` existir como directório e **não** usar `--no-refresh-landing-members`, o script invoca `site/genlanding.py --sync-public-only` — copia `site/public/` para o DocumentRoot, `chown www-data` e corre `build_directory.py` para `data/members.json` (equivalente a sincronizar landing + bolhas num único passo).
     30 2. **`genlanding.py` completo** (primeira instalação / Apache): após `copy_landing`, por omissão também regenera `members.json` (a menos de `--no-refresh-members`).
     31 3. **Cron (opcional):** adequado para alinhar `members.json` com `users.json` periodicamente, mesmo sem novos provisionamentos.
     32 4. **Manual — só `members.json` (sem recopiar `public/`):**
     33 
     34 ```bash
     35 python3 REPO/site/build_directory.py \
     36   --users-json /var/lib/runv/users.json \
     37   -o /var/www/runv.club/html/data/members.json
     38 ```
     39 
     40 5. **Manual — `public/` + `members.json` (sem reconfigurar Apache):**
     41 
     42 ```bash
     43 sudo python3 REPO/site/genlanding.py --sync-public-only \
     44   --document-root /var/www/runv.club/html \
     45   --members-users-json /var/lib/runv/users.json
     46 ```
     47 
     48 ## Cron vs hooks (sem contradição)
     49 
     50 - **Hooks** actualizam quando corres `create_runv_user` (sync-only) ou `genlanding` (completo ou sync-only).
     51 - **Cron** com `build_directory.py` é **opcional** para alinhar só o JSON sem tocar no resto do DocumentRoot.
     52 
     53 Próximo: [08-email.md](08-email.md).