Commit graph

12 commits

Author SHA1 Message Date
17232bd5a2 Staff push notifications, and revalidate embedded assets
Notifications: staff turn them on per device from a new Notifications page,
pick each type (bans, gags, mutes and silences added or lifted, server down
and back up) and quiet hours. A watcher polls SimpleAdmin's tables, so in-game
penalties are sent too. Web Push with VAPID and RFC 8291 encryption in
internal/push, standard library only. Tables in sql/push.sql, created at
startup; the VAPID key is made on first start and kept in saw_settings.
Penalty notifications link to the public list searching for the player
(#bans?q=<steamid64>). The Android app delegates notifications (versionCode 3).

Caching: pages, scripts and styles are served with Cache-Control: no-cache
and an ETag, so a deploy shows up at once instead of after Cloudflare's
default 4-hour browser cache.
2026-10-03 13:49:40 +01:00
7900bf5b3e Android app (TWA) in android/, built with podman; serve assetlinks.json for it 2026-10-03 12:44:11 +01:00
44708d5f3c Installable as an app (PWA): manifests, offline-only service worker, icons 2026-10-03 12:22:33 +01:00
b26360e8f3 Console panel, collapsible panels, Add on the Members panel
- Server settings > Console sends a raw console command for staff with @css/rcon
  (POST /api/admin/rcon). It doesn't wait for the server; the output is only logged.
- Staff & ranks and Server settings panels fold up by clicking their heads. All but
  Ranks and Server start folded; a folded Ranks panel shows the selected rank.
- The Members panel has an Add button that opens Add staff with that rank picked.
- The public rank log shows a rank being given as Promoted and taken away as Demoted.
2026-10-03 12:09:43 +01:00
3c62874f91 Verification: clan tag setting, GroupVerify 0.3.0 wording
Root sets GroupVerify's clan_tag (the scoreboard tag CS2-Tags gives verified players without a
rank) next to the Steam group. Validated like the plugin (12 UTF-16 units, no quotes, ; or \),
saved to gv_settings and sent as css_gv_clantag when the plugin is loaded. Only changed fields
are sent.

GroupVerify 0.3.0 checks players with the Steam Web API as they join, so the group list is now
"Confirmed group members" with first/last confirmed dates.
2026-10-02 18:44:44 +01:00
9e4bc63201 GroupVerify: Verification page, overrides and public Verified tags
Shown only where GroupVerify is: staff get the Verification page once its gv_* tables are in
the database, and the public site shows "Verified" only while it's on (enabled, with a group)
and not missing from css_plugins list, which the poller reads once a minute over RCON.

- Verification page: plugin state and version, Steam group, saved member list, overrides.
- Overrides (@zio/verify, not on yourself unless Root): give, change, remove; player drawer
  shows why a player is or isn't verified.
- Root sets the group and turns it on/off: saved to gv_settings, and sent as css_gv_* when the
  plugin is loaded so it applies at once.
- gv_* times use GroupVerify's own timezone setting.
- MySQL integration test (SAW_TEST_DSN), unit tests for plugin list parsing and the show rule.
2026-10-02 17:59:26 +01:00
b2b4698776 Gate the Staff & ranks page behind @zio/webpanel
Staff without @zio/webpanel (or @css/root) no longer see the page: the API refuses it and the
panel leaves it out of the sidebar. The flag is offered in the rank editor.
2026-09-29 19:08:25 +01:00
dc7a1e42bd Offer the @zio/... flags in the rank editor
The rank editor only listed @css/... flags, so a @zio/ flag showed up only on a rank that
already held it and couldn't be added to others. List the flags admin_overrides.json uses, plus
@zio/penalties from our SimpleAdmin fork.
2026-09-29 17:58:27 +01:00
0af93d1eab Rank log: inactive ranks (Guardian) count as promotions to and from, demotion when lost; Guardian is staff 2026-09-29 17:19:53 +01:00
611b79cdba Public rank change log: sa_rank_log, written on rank changes, listed on the Staff page 2026-09-29 16:56:37 +01:00
657ead4c5a Add optional name history migration for sa_players_ips
SimpleAdmin upserts sa_players_ips on (steamid, address), so a rename on
the same IP overwrites the old name. sql/players-ips-name-history.sql adds
name to the primary key (binary collation, NOT NULL), so every name a
SteamID joins with is kept and shows on its player page and in name
search. SimpleAdmin's IP cache keeps only the newest row per IP, so its
multi-account and IP-ban checks are unchanged. The file includes a revert.
2026-09-27 15:37:37 +01:00
4f38daf0e6 simpleadmin-web 0.1.0: web panel for CS2-SimpleAdmin 2026-09-25 20:08:14 +01:00