Skip to content

feat: Production-grade API-first Web Panel, Users Management, and Self-Update System - #47

Merged
Opselon merged 5 commits into
masterfrom
feat/production-panel-and-update-system
Oct 8, 2026
Merged

Opselon merged 5 commits into
masterfrom
feat/production-panel-and-update-system

Conversation

@Opselon

@Opselon Opselon commented Oct 8, 2026

Copy link
Copy Markdown
Owner

Summary

  • Complete API-First Panel with 13 modular views, responsive theme, real-time stats, and zero mocks
  • Multi-database support with SQLite, PostgreSQL, and SQL Server resilience
  • Users Management: User registration, role/level modification, subscription lifecycle management
  • System Updates: GET /api/system/update/check against GitHub releases, self-update mechanism via update.sh
  • Setup Wizard: Admin credentials vault persistence, Telegram bot token verification and setup
  • E2E and Unit Tests: 158 unit tests passing, 10 panel E2E tests passing

Hermes Agent added 3 commits October 8, 2026 07:03
…resilience

- Add ForceJoinController (GET/save/toggle) and a Force Join section in the panel
- Fix settings persistence on SQLite/SQL Server: SettingsService and
  AdminService used a hard-coded NpgsqlConnection and ::jsonb SQL, so every
  settings save threw 'Couldn't set data source' off PostgreSQL
- New SettingsDbHelper emits provider-correct upsert SQL; both write paths
  now go through IDbConnectionFactory
- New InMemoryCacheService fallback: ICacheService was bound to CacheService
  unconditionally, but its IConnectionMultiplexer is only registered when
  Redis is reachable, so resolving it crashed startup
- EmbeddedRedisService prefers a redis-server in PATH on Linux/macOS
  (only Windows .exe binaries are bundled)
… fixes

UI (no mock data, all real endpoints):
- Modular SPA: api.js client, ui.js primitives, 10 views
  (dashboard, users, rss, ai, forwarding, secrets, console,
  system, settings, forcejoin), router + theme in panel.js/html
- Users management screen backed by new UsersController

Backend (SQLite/SQL Server parity with Postgres):
- AuthController: vault fallback on empty config password
- ForwardingRuleRepository + AiApiConfigurationRepository:
  per-provider SQL (quoting, jsonb, RETURNING/OUTPUT, timestamps)
- RssSourcesController: missing SaveChangesAsync (create/update/
  delete/toggle never persisted)
- AppDbContext: rewrite NOW() defaults per provider at model build
  (SQLite baked DEFAULT (NOW()) broke every INSERT)
- DiagnosticsService: real provider + provider-correct connection probe

Security:
- DynamicSettingsController: never serialize raw sensitive values
  (admin password was leaking in settings/all JSON)

Tests: 154 unit + 5 panel E2E green, JS syntax checked,
full CRUD matrix verified live on SQLite
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

Comment thread WebAPI/Controllers/AiConfigController.cs Fixed
Comment thread WebAPI/Controllers/AiConfigController.cs Fixed
Comment thread WebAPI/Controllers/AiConfigController.cs Fixed
Comment thread WebAPI/Controllers/RssSourcesController.cs Fixed
Comment thread WebAPI/Controllers/RssSourcesController.cs Fixed
Comment thread WebAPI/Controllers/RssSourcesController.cs Fixed
Comment thread WebAPI/Controllers/SetupController.cs Fixed
Comment thread WebAPI/Controllers/TelegramLoginController.cs Fixed
Comment thread WebAPI/Setup/SetupService.cs Fixed
Comment thread WebAPI/Setup/SetupService.cs Fixed
Comment thread Infrastructure/Repositories/RssSourceRepository.cs Fixed
@Opselon
Opselon merged commit ff281cc into master Oct 8, 2026
13 checks passed
@Opselon
Opselon deleted the feat/production-panel-and-update-system branch October 8, 2026 23:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants