Commit ad5c05f
committed
26.2.4
v26.2.4: Major platform update — security hardening, TLS everywhere, 12 new services, 78 new tests
Infrastructure:
- PostgreSQL TLS enabled by default (ECDSA P-256 self-signed, sslmode=require)
- Redis TLS enabled by default (rediss://, auto-generated certs)
- HTTP-to-HTTPS redirect with health endpoint exceptions
- Trivy scanner pinned to v0.69.1 for reproducible builds
- Docker CLI upgraded to 29.2.0 (API 1.53)
Security hardening:
- JWT tokens rejected from query parameters (header + cookie only)
- CORS restricted to same-origin by default (was allow-all)
- CSRF constant-time comparison + auto-regeneration
- Return URL validation against open redirects
- Bearer prefix enforcement per RFC 6750
- WebSocket origin validation on all upgrade requests
- WebSocket rate limiting (20 concurrent per IP)
- TOTP replay attack protection via Redis
- Admin self-role-change prevention
- 10 MB max request body on all authenticated routes
- Webhook tokens hashed with SHA-256 before storage
- Per-route CSP (strict global, relaxed for Monaco)
- getRealIP uses rightmost non-private X-Forwarded-For
New services (12):
- Calendar (events, tasks, checklists, notes)
- Change events feed (immutable audit trail with full-text search)
- Cost/resource optimization (usage tracking, recommendations)
- Custom dashboards (per-user widget layouts)
- Drift detection (config snapshots, env/port/volume/image diff)
- Session recording & replay (asciicast v2, gzip, retention policies)
- Registry browsing (Docker Hub, GHCR, Harbor, OCI v2)
- Compliance evaluator (CIS Docker Benchmark scoring)
- Compliance PDF report generator (pure Go, no dependencies)
- Proxy backend abstraction layer (SyncBackend interface)
- About page (version, runtime, DB version, health)
New scheduler workers:
- Auto-deploy (GitOps image tag detection)
- Runbook execution (multi-step with approval gates)
- SLA breach detection (vulnerability deadline monitoring)
- Webhook dispatch (HMAC-SHA256 signed, with retry)
New developer tools (15 browser-based):
- Base64/URL/hex encoders, JSON/YAML formatters, UUID/password generators
- Hash calculator, CIDR calculator, regex tester, JWT decoder
- Text diff viewer, crypto key generator, TOTP generator
App catalog expanded (6 → 20 apps, 7 categories):
- Nextcloud, Traefik v3, WireGuard Easy, Mattermost
- Passbolt, Vaultwarden, Authentik, Uptime Kuma
- Grafana + Prometheus, Woodpecker CI, PostgreSQL + pgAdmin
New database migrations (036–044):
- Agent events, git sync full-name, CVE remediation tracking
- Change events, drift detection, resource optimization
- Session recording, runbook approvals, calendar
Application bootstrap:
- Monolithic app.go (2554 lines) split into 8 init files
- API errors standardized (machine-readable codes, consistent JSON)
- Auth provider adapter layer (decoupled LDAP/OAuth types)
Config changes:
- JWT secret and encryption key auto-generated on first run
- Default admin password now random (printed to stderr)
- cookie_secure defaults to true
- Configurable rate limits, paths, storage dirs
Frontend:
- 23 new template page directories
- Self-hosted vendor libs: asciinema-player, bcrypt.js, js-yaml, marked
Testing:
- 78 new test files (54 → 132 total)
- Shared testutil package with fixtures and helpers
- Coverage across agent, services, repositories, handlers, middleware
CI/CD:
- GitHub Actions pipeline (lint, test, security scan, build)
- GoReleaser config (multi-arch linux/darwin amd64/arm64)
- Pre-commit hooks (govulncheck, migration verify, go mod tidy)
Bug fixes:
- Containers not appearing after restart (host stuck offline)
- Host never recovering from offline status
- Shortcuts form multiple submission (disabled inactive inputs)
- Ansible inventory routes were commented out (404)
- Node metrics "No Data Available" (type constant mismatch)
- NATS "Disconnected" on About page (readiness check)
- Stack deploy log not streaming (buffered output)
- Server readiness race (poll loop replaces sleep)
- Forward reference compile error in app.go
- NATS client Connect() never called
- Audit service nil in standalone mode
- Orphan contexts in goroutines (Trivy, scheduler)
- Proxy host ID resolution (hashUUIDToInt)1 parent 6f6f89f commit ad5c05f
587 files changed
Lines changed: 103973 additions & 7751 deletions
File tree
- cmd
- usulnet-agent
- usulnet
- deploy
- grafana
- prometheus
- internal
- agent
- connection
- executor
- inventory
- api
- errors
- handlers
- middleware
- app
- cmd/usulnet-agent
- docker
- gateway
- protocol
- integrations
- gitea
- git
- npm
- license
- models
- nats
- pkg/crypto
- repository
- postgres
- migrations
- redis
- scheduler
- workers
- services
- audit
- auth
- ldap
- oauth
- backup
- storage
- calendar
- capture
- changes
- compliance
- config
- container
- costopt
- dashboard
- database
- deploy
- drift
- ephemeral
- gitsync
- git
- host
- imagesign
- image
- ldapbrowser
- manifest
- metrics
- monitoring
- network
- notification
- channels
- opa
- password_reset
- proxy
- caddy
- nginx
- rdp
- recording
- registry
- runtime
- security
- shortcuts
- ssh
- stack
- storage
- swarm
- team
- update
- user
- volume
- templates/catalog
- embedded
- testutil
- web
- templates
- components
- layouts
- pages
- admin
- backups
- calendar
- changes
- connections
- containers
- costopt
- drift
- editor
- enterprise
- gitea
- hosts
- images
- jobs
- logs
- monitoring
- registries
- runbooks
- stacks
- swarm
- tools
- updates
- volumes
- vulnmgmt
- webhooks
- partials
- scripts
- tests
- benchmarks
- e2e
- web/static
- css
- src
- vendor
- asciinema-player
- bcryptjs
- js-yaml
- marked
- toml
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
93 | 93 | | |
94 | 94 | | |
95 | 95 | | |
96 | | - | |
97 | | - | |
| 96 | + | |
98 | 97 | | |
99 | 98 | | |
100 | 99 | | |
101 | 100 | | |
102 | 101 | | |
103 | | - | |
104 | | - | |
105 | | - | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
106 | 107 | | |
107 | 108 | | |
108 | 109 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| |||
76 | 76 | | |
77 | 77 | | |
78 | 78 | | |
79 | | - | |
| 79 | + | |
80 | 80 | | |
81 | 81 | | |
82 | 82 | | |
| |||
92 | 92 | | |
93 | 93 | | |
94 | 94 | | |
95 | | - | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
96 | 106 | | |
97 | 107 | | |
98 | 108 | | |
99 | | - | |
| 109 | + | |
100 | 110 | | |
101 | 111 | | |
102 | 112 | | |
| |||
163 | 173 | | |
164 | 174 | | |
165 | 175 | | |
166 | | - | |
| 176 | + | |
167 | 177 | | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
0 commit comments