From a92ac0ed7882fdd62a417e5fb68d937b4a562128 Mon Sep 17 00:00:00 2001 From: Fimeg Date: Thu, 30 Oct 2025 22:17:48 -0400 Subject: [PATCH] v0.1.17: UI fixes, Linux improvements, documentation overhaul MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit UI/UX: - Fix heartbeat auto-refresh and rate-limiting page - Add navigation breadcrumbs to settings pages - New screenshots added Linux Agent v0.1.17: - Fix disk detection for multiple mount points - Improve installer idempotency - Prevent duplicate registrations Documentation: - README rewrite: 538→229 lines, homelab-focused - Split docs: API.md, CONFIGURATION.md, DEVELOPMENT.md - Add NOTICE for Apache 2.0 attribution --- .gitignore | 13 +- README.md | 654 +++----- Screenshots/RedFlag Docker Dashboard.png | Bin 152958 -> 95020 bytes Screenshots/RedFlag Heartbeat System.png | Bin 0 -> 47400 bytes .../RedFlag Linux Agent History Extended.png | Bin 0 -> 79565 bytes Screenshots/RedFlag Registration Tokens.jpg | Bin 0 -> 52444 bytes Screenshots/RedFlag Settings Page.jpg | Bin 0 -> 69752 bytes ...RedFlag Windows Agent History Extended.png | Bin 0 -> 114178 bytes TEST-CLONE.md | 45 - aggregator-agent/NOTICE | 13 + aggregator-agent/cmd/agent/main.go | 66 +- aggregator-agent/go.mod | 8 +- aggregator-agent/go.sum | 4 +- aggregator-agent/install.sh | 14 + aggregator-agent/internal/client/client.go | 25 +- aggregator-agent/internal/config/config.go | 6 + .../internal/service/service_stub.go | 52 + aggregator-agent/internal/service/windows.go | 1329 +++++++++++++++++ aggregator-agent/internal/system/info.go | 37 +- aggregator-agent/internal/system/windows.go | 165 +- aggregator-server/Dockerfile | 34 +- aggregator-server/cmd/server/main.go | 34 +- .../internal/api/handlers/agents.go | 64 +- .../internal/api/handlers/auth.go | 37 +- .../internal/api/handlers/downloads.go | 657 +++++++- .../api/handlers/registration_tokens.go | 61 +- .../internal/api/handlers/setup.go | 437 +++--- aggregator-server/internal/config/config.go | 159 +- aggregator-server/internal/database/db.go | 65 +- ...es.sql => 003_create_update_tables.up.sql} | 0 ...=> 004_fix_update_logs_foreign_key.up.sql} | 0 ...05_add_pending_dependencies_status.up.sql} | 0 ...> 006_add_missing_command_statuses.up.sql} | 0 ...=> 007_expand_status_column_length.up.sql} | 0 ...=> 008_create_refresh_tokens_table.up.sql} | 0 ... => 009_add_agent_version_tracking.up.sql} | 0 ...king.sql => 009_add_retry_tracking.up.sql} | 0 ... => 010_add_archived_failed_status.up.sql} | 0 ...1_create_registration_tokens_table.up.sql} | 0 .../migrations/012_add_token_seats.up.sql | 118 ++ .../migrations/012_create_admin_user.up.sql | 10 + .../database/queries/registration_tokens.go | 84 +- .../internal/database/queries/users.go | 123 ++ aggregator-server/internal/models/agent.go | 13 +- aggregator-server/internal/models/user.go | 22 + aggregator-web/Dockerfile | 4 +- aggregator-web/nginx.conf | 4 +- aggregator-web/src/App.tsx | 2 + aggregator-web/src/hooks/useHeartbeat.ts | 17 +- .../src/hooks/useRegistrationTokens.ts | 18 + aggregator-web/src/lib/api.ts | 35 +- aggregator-web/src/pages/Login.tsx | 69 +- aggregator-web/src/pages/RateLimiting.tsx | 39 +- aggregator-web/src/pages/Settings.tsx | 20 +- aggregator-web/src/pages/Setup.tsx | 339 ++++- aggregator-web/src/pages/TokenManagement.tsx | 130 +- .../src/pages/settings/AgentManagement.tsx | 491 ++++++ aggregator-web/src/types/index.ts | 20 +- docker-compose.yml | 22 +- test-agent | Bin 0 -> 10876769 bytes 60 files changed, 4301 insertions(+), 1258 deletions(-) create mode 100644 Screenshots/RedFlag Heartbeat System.png create mode 100644 Screenshots/RedFlag Linux Agent History Extended.png create mode 100644 Screenshots/RedFlag Registration Tokens.jpg create mode 100644 Screenshots/RedFlag Settings Page.jpg create mode 100644 Screenshots/RedFlag Windows Agent History Extended.png delete mode 100644 TEST-CLONE.md create mode 100644 aggregator-agent/NOTICE create mode 100644 aggregator-agent/internal/service/service_stub.go create mode 100644 aggregator-agent/internal/service/windows.go rename aggregator-server/internal/database/migrations/{003_create_update_tables.sql => 003_create_update_tables.up.sql} (100%) rename aggregator-server/internal/database/migrations/{004_fix_update_logs_foreign_key.sql => 004_fix_update_logs_foreign_key.up.sql} (100%) rename aggregator-server/internal/database/migrations/{005_add_pending_dependencies_status.sql => 005_add_pending_dependencies_status.up.sql} (100%) rename aggregator-server/internal/database/migrations/{006_add_missing_command_statuses.sql => 006_add_missing_command_statuses.up.sql} (100%) rename aggregator-server/internal/database/migrations/{007_expand_status_column_length.sql => 007_expand_status_column_length.up.sql} (100%) rename aggregator-server/internal/database/migrations/{008_create_refresh_tokens_table.sql => 008_create_refresh_tokens_table.up.sql} (100%) rename aggregator-server/internal/database/migrations/{009_add_agent_version_tracking.sql => 009_add_agent_version_tracking.up.sql} (100%) rename aggregator-server/internal/database/migrations/{009_add_retry_tracking.sql => 009_add_retry_tracking.up.sql} (100%) rename aggregator-server/internal/database/migrations/{010_add_archived_failed_status.sql => 010_add_archived_failed_status.up.sql} (100%) rename aggregator-server/internal/database/migrations/{011_create_registration_tokens_table.sql => 011_create_registration_tokens_table.up.sql} (100%) create mode 100644 aggregator-server/internal/database/migrations/012_add_token_seats.up.sql create mode 100644 aggregator-server/internal/database/migrations/012_create_admin_user.up.sql create mode 100644 aggregator-server/internal/database/queries/users.go create mode 100644 aggregator-server/internal/models/user.go create mode 100644 aggregator-web/src/pages/settings/AgentManagement.tsx create mode 100644 test-agent diff --git a/.gitignore b/.gitignore index 160057b..5bb18fb 100644 --- a/.gitignore +++ b/.gitignore @@ -14,9 +14,15 @@ # All documentation goes in docs/ folder (private development) docs/ *.md +TEST-CLONE.md !README.md !LICENSE +!NOTICE !.env.example +!docs/API.md +!docs/CONFIGURATION.md +!docs/ARCHITECTURE.md +!docs/DEVELOPMENT.md # Test binary, built with `go test -c` *.test @@ -418,6 +424,11 @@ deployment/ # ============================================================================= docs/ *.md +TEST-CLONE.md !README.md !LICENSE -!.env.example \ No newline at end of file +!.env.example +!docs/API.md +!docs/CONFIGURATION.md +!docs/ARCHITECTURE.md +!docs/DEVELOPMENT.md \ No newline at end of file diff --git a/README.md b/README.md index fe85ca7..01f3176 100644 --- a/README.md +++ b/README.md @@ -1,536 +1,228 @@ -# RedFlag (Aggregator) +# RedFlag -**ALPHA RELEASE - v0.1.16** -Self-hosted update management platform for homelabs and small teams +> **⚠️ ALPHA SOFTWARE - NOT READY FOR PRODUCTION** +> +> This is experimental software in active development. Features may be broken, bugs are expected, and breaking changes happen frequently. Use at your own risk, preferably on test systems only. Seriously, don't put this in production yet. -## Status +**Self-hosted update management for homelabs** -- **Core Features Working**: Update management, agent registration, web dashboard -- **Alpha Deployment Ready**: Setup wizard and configuration system implemented -- **Cross-Platform Support**: Linux and Windows agents -- **In Development**: Enhanced features and polish -- **Alpha Software**: Expect some rough edges, backup your data +Cross-platform agents • Web dashboard • Single binary deployment • No enterprise BS -## What RedFlag Is +``` +v0.1.17 - Alpha Release +``` -A self-hosted, cross-platform update management platform built for homelabs and small teams: +--- -- Go Server Backend with PostgreSQL database -- React Web Dashboard with real-time updates -- Cross-Platform Agents (Linux APT/DNF/Docker, Windows Updates/Winget) -- Secure Authentication with registration tokens and refresh tokens -- System Monitoring with real-time status and audit trails -- User-Adjustable Rate Limiting with TLS support +## What It Does + +RedFlag lets you manage software updates across all your servers from one dashboard. Track pending updates, approve installs, and monitor system health without SSHing into every machine. + +**Supported Platforms:** +- Linux (APT, DNF, Docker) +- Windows (Windows Update, Winget) +- Future: Proxmox integration planned + +**Built With:** +- Go backend + PostgreSQL +- React dashboard +- Pull-based agents (firewall-friendly) +- JWT auth with refresh tokens + +--- + +## Screenshots + +| Dashboard | Agent Details | Update Management | +|-----------|---------------|-------------------| +| ![Dashboard](Screenshots/RedFlag%20Default%20Dashboard.png) | ![Linux Agent](Screenshots/RedFlag%20Linux%20Agent%20Details.png) | ![Updates](Screenshots/RedFlag%20Updates%20Dashboard.png) | + +| Windows Support | History Tracking | Docker Integration | +|-----------------|------------------|-------------------| +| ![Windows Agent](Screenshots/RedFlag%20Windows%20Agent%20Details.png) | ![History](Screenshots/RedFlag%20History%20Dashboard.png) | ![Docker](Screenshots/RedFlag%20Docker%20Dashboard.png) | + +--- + +## Quick Start + +### Server Deployment (Docker) + +```bash +# Clone and start +git clone https://github.com/Fimeg/RedFlag.git +cd RedFlag +docker-compose up -d + +# Access web UI +open http://localhost:3000 + +# Follow setup wizard to create admin account +``` + +The setup wizard runs automatically on first launch. It'll generate secure secrets and walk you through creating an admin account. + +--- + +### Agent Installation + +**Linux (one-liner):** +```bash +curl -sfL https://your-server.com/install | sudo bash -s -- your-registration-token +``` + +**Windows (PowerShell):** +```powershell +iwr https://your-server.com/install.ps1 | iex +``` + +**Manual installation:** +```bash +# Download agent binary +wget https://your-server.com/download/linux/amd64/redflag-agent + +# Register and install +chmod +x redflag-agent +sudo ./redflag-agent --server https://your-server.com --token your-token --register +``` + +Get registration tokens from the web dashboard under **Settings → Token Management**. + +--- ## Key Features -### Alpha Features -- Secure Server Setup: `./redflag-server --setup` with user-provided secrets -- Registration Token System: One-time tokens for secure agent enrollment -- Rate Limiting: User-adjustable API security with sensible defaults -- Cross-Platform Agents: Linux and Windows with unified architecture -- Real-Time Heartbeat: Rapid polling for interactive operations -- Dependency Management: Safe update installation with dry-run checking -- Audit Logging: Complete activity tracking and history -- Proxy Support: HTTP/HTTPS/SOCKS5 proxy support for restricted networks +✓ **Secure by Default** - Registration tokens, JWT auth, rate limiting +✓ **Idempotent Installs** - Re-running installers won't create duplicate agents +✓ **Real-time Heartbeat** - Interactive operations with rapid polling +✓ **Dependency Handling** - Dry-run checks before installing updates +✓ **Multi-seat Tokens** - One token can register multiple agents +✓ **Audit Trails** - Complete history of all operations +✓ **Proxy Support** - HTTP/HTTPS/SOCKS5 for restricted networks +✓ **Native Services** - systemd on Linux, Windows Services on Windows -### Update Management -- Package Managers: APT, DNF, Docker images, Windows Updates, Winget -- Update Discovery: Automatic scanning with severity classification -- Approval Workflow: Controlled update deployment with confirmation -- Bulk Operations: Multi-agent management and batch operations -- Rollback Support: Failed update tracking and retry capabilities - -### Deployment -- Configuration Management: CLI flags → environment → config file → defaults -- Service Integration: systemd service management on Linux -- Cross-Platform Installers: One-liner deployment scripts -- Container Support: Docker and Kubernetes deployment options +--- ## Architecture ``` ┌─────────────────┐ -│ Web Dashboard │ React + TypeScript + TailwindCSS -│ + Rate Limiting │ + Registration Token Management +│ Web Dashboard │ React + TypeScript +│ Port: 3000 │ └────────┬────────┘ - │ HTTPS with TLS + User Authentication + │ HTTPS + JWT Auth ┌────────▼────────┐ -│ Server (Go) │ Alpha with PostgreSQL -│ + Rate Limits │ + Registration Tokens + Setup Wizard -│ + JWT Auth │ + Heartbeat System + Comprehensive API +│ Server (Go) │ PostgreSQL +│ Port: 8080 │ └────────┬────────┘ - │ Pull-based (agents check in every 5 min) + Rapid Polling + │ Pull-based (agents check in every 5 min) ┌────┴────┬────────┐ │ │ │ ┌───▼──┐ ┌──▼──┐ ┌──▼───┐ -│Linux │ │Windows│ │Linux │ -│Agent │ │Agent │ │Agent │ -│+Proxy│ │+Proxy│ │+Proxy│ -└──────┘ └───────┘ └──────┘ +│Linux │ │Windows│ │Linux │ +│Agent │ │Agent │ │Agent │ +└──────┘ └───────┘ └──────┘ ``` -## Prerequisites +--- -- **Go 1.21+** (for building from source) -- **Docker & Docker Compose** (for PostgreSQL database) -- **Linux** (server deployment platform) +## Documentation -## Quick Start +- **[API Reference](docs/API.md)** - Complete API documentation +- **[Configuration](docs/CONFIGURATION.md)** - CLI flags, env vars, config files +- **[Architecture](docs/ARCHITECTURE.md)** - System design and database schema +- **[Development](docs/DEVELOPMENT.md)** - Build from source, testing, contributing -### 1. Server Setup (Docker - Recommended) -```bash -# Clone repository -git clone https://github.com/Fimeg/RedFlag.git -cd RedFlag +--- -# Build agent (one-time) -cd aggregator-agent && go mod tidy && go build -o redflag-agent cmd/agent/main.go && cd .. +## Security Notes -# Start database and server (auto-configures on first run) -docker-compose up -d +RedFlag uses: +- **Registration tokens** - One-time use tokens for secure agent enrollment +- **Refresh tokens** - 90-day sliding window, auto-renewal for active agents +- **SHA-256 hashing** - All tokens hashed at rest +- **Rate limiting** - Configurable API protection +- **Minimal privileges** - Agents run with least required permissions -# Watch setup progress (optional) -docker-compose logs -f server +For production deployments: +1. Change default admin password +2. Use HTTPS/TLS +3. Generate strong JWT secrets (setup wizard does this) +4. Configure firewall rules +5. Enable rate limiting -# When setup is complete, access: http://localhost:8080 -# Admin: http://localhost:8080/admin -``` +--- -### 2. Manual Setup (Development) -```bash -# Build components -make build-all +## Current Status -# Start database -docker-compose up -d postgres +**What Works:** +- ✅ Cross-platform agent registration and updates +- ✅ Update scanning for all supported package managers +- ✅ Dry-run dependency checking before installation +- ✅ Real-time heartbeat and rapid polling +- ✅ Multi-seat registration tokens +- ✅ Native service integration (systemd, Windows Services) +- ✅ Web dashboard with full agent management +- ✅ Docker integration for container image updates -# Setup server -cd aggregator-server && sudo ./redflag-server --setup +**Known Issues:** +- Windows Winget detection needs debugging +- Some Windows Updates may reappear after installation (known Windows Update quirk) -# Run migrations -./redflag-server --migrate +**Planned Features:** +- Proxmox VM/container integration +- Agent auto-update system +- WebSocket real-time updates +- Mobile-responsive dashboard improvements -# Start server -./redflag-server -``` - -### 2. Agent Deployment (Linux) -```bash -# Option 1: One-liner with registration token -sudo bash -c 'curl -sfL https://redflag.wiuf.net/install | bash -s -- rf-tok-abc123' - -# Option 2: Manual installation -sudo ./install.sh --server https://redflag.wiuf.net:8080 --token rf-tok-abc123 - -# Option 3: Advanced configuration with proxy -sudo ./redflag-agent --server https://redflag.wiuf.net:8080 \ - --token rf-tok-abc123 \ - --proxy-http http://proxy.company.com:8080 \ - --organization "my-homelab" \ - --tags "production,webserver" -``` - -### 3. Windows Agent Deployment -```powershell -# PowerShell one-liner -iwr https://redflag.wiuf.net/install.ps1 | iex -Arguments '--server https://redflag.wiuf.net:8080 --token rf-tok-abc123' - -# Or manual download and install -.\redflag-agent.exe --server https://redflag.wiuf.net:8080 --token rf-tok-abc123 -``` - -## Agent Configuration Options - -### CLI Flags (Highest Priority) -```bash -./redflag-agent --server https://redflag.wiuf.net \ - --token rf-tok-abc123 \ - --proxy-http http://proxy.company.com:8080 \ - --proxy-https https://proxy.company.com:8080 \ - --log-level debug \ - --organization "my-homelab" \ - --tags "production,webserver" \ - --name "redflag-server-01" \ - --insecure-tls -``` - -### Environment Variables -```bash -export REDFLAG_SERVER_URL="https://redflag.wiuf.net" -export REDFLAG_REGISTRATION_TOKEN="rf-tok-abc123" -export REDFLAG_HTTP_PROXY="http://proxy.company.com:8080" -export REDFLAG_HTTPS_PROXY="https://proxy.company.com:8080" -export REDFLAG_NO_PROXY="localhost,127.0.0.1" -export REDFLAG_LOG_LEVEL="info" -export REDFLAG_ORGANIZATION="my-homelab" -``` - -### Configuration File -```json -{ - "server_url": "https://redflag.wiuf.net", - "registration_token": "rf-tok-abc123", - "proxy": { - "enabled": true, - "http": "http://proxy.company.com:8080", - "https": "https://proxy.company.com:8080", - "no_proxy": "localhost,127.0.0.1" - }, - "network": { - "timeout": "30s", - "retry_count": 3, - "retry_delay": "5s" - }, - "logging": { - "level": "info", - "max_size": 100, - "max_backups": 3 - }, - "tags": ["production", "webserver"], - "organization": "my-homelab", - "display_name": "redflag-server-01" -} -``` - -## Web Dashboard Features - -### Agent Management -- Real-time Status: Online/offline with heartbeat indicators -- System Information: CPU, memory, disk usage, OS details -- Version Tracking: Agent versions and update availability -- Metadata Management: Tags, organizations, display names -- Bulk Operations: Multi-agent scanning and updates - -### Update Management -- Severity Classification: Critical, high, medium, low priority updates -- Approval Workflow: Controlled update deployment with dependencies -- Dependency Resolution: Safe installation with conflict checking -- Batch Operations: Approve/install multiple updates -- Audit Trail: Complete history of all operations - -### Settings & Administration -- Registration Tokens: Generate and manage secure enrollment tokens -- Rate Limiting: User-adjustable API security settings -- Authentication: Secure login with session management -- Audit Logging: Comprehensive activity tracking -- Server Configuration: Admin settings and system controls - -## API Reference - -### Registration Token Management -```bash -# Generate registration token -curl -X POST https://redflag.wiuf.net/api/v1/admin/registration-tokens \ - -H "Authorization: Bearer $ADMIN_TOKEN" \ - -d '{"label": "Production Servers", "expires_in": "24h"}' - -# List tokens -curl -X GET https://redflag.wiuf.net/api/v1/admin/registration-tokens \ - -H "Authorization: Bearer $ADMIN_TOKEN" - -# Revoke token -curl -X DELETE https://redflag.wiuf.net/api/v1/admin/registration-tokens/rf-tok-abc123 \ - -H "Authorization: Bearer $ADMIN_TOKEN" -``` - -### Rate Limit Management -```bash -# View current settings -curl -X GET https://redflag.wiuf.net/api/v1/admin/rate-limits \ - -H "Authorization: Bearer $ADMIN_TOKEN" - -# Update settings -curl -X PUT https://redflag.wiuf.net/api/v1/admin/rate-limits \ - -H "Authorization: Bearer $ADMIN_TOKEN" \ - -d '{ - "agent_registration": {"requests": 10, "window": "1m", "enabled": true}, - "admin_operations": {"requests": 200, "window": "1m", "enabled": true} - }' -``` - -## Security - -### Authentication & Authorization -- Registration Tokens: One-time use tokens prevent unauthorized agent enrollment -- Refresh Token Authentication: 90-day sliding window with 24h access tokens -- SHA-256 token hashing for secure storage -- Admin authentication for server access and management - -### Network Security -- Rate Limiting: Configurable API protection with sensible defaults -- TLS Support: Certificate validation and client certificate support -- Pull-based Model: Agents poll server (firewall-friendly) -- HTTPS Required: Production deployments must use TLS - -### System Hardening -- Minimal Privilege Execution: Agents run with least required privileges -- Command Validation: Whitelisted commands only -- Secure Defaults: Hardened configurations out of the box -- Security Hardening: Minimal privilege execution and sudoers management - -### Audit & Monitoring -- Audit Trails: Complete logging of all activities -- Token Renewal: `/renew` endpoint prevents daily re-registration -- Activity Tracking: Comprehensive monitoring and alerting -- Access Logs: Full audit trail of user and agent actions - -## Docker Deployment - -```yaml -# docker-compose.yml -version: '3.8' -services: - redflag-server: - build: ./aggregator-server - ports: - - "8080:8080" - environment: - - REDFLAG_SERVER_HOST=0.0.0.0 - - REDFLAG_SERVER_PORT=8080 - - REDFLAG_DB_HOST=postgres - - REDFLAG_DB_PORT=5432 - - REDFLAG_DB_NAME=redflag - - REDFLAG_DB_USER=redflag - - REDFLAG_DB_PASSWORD=secure-password - depends_on: - - postgres - volumes: - - ./redflag-data:/etc/redflag - - ./logs:/app/logs - - postgres: - image: postgres:15 - environment: - POSTGRES_DB: redflag - POSTGRES_USER: redflag - POSTGRES_PASSWORD: secure-password - volumes: - - postgres-data:/var/lib/postgresql/data - ports: - - "5432:5432" -``` - -## Project Structure - -``` -RedFlag/ -├── aggregator-server/ # Go server backend -│ ├── cmd/server/ # Main server entry point -│ ├── internal/ -│ │ ├── api/ # REST API handlers and middleware -│ │ │ └── handlers/ # API endpoint implementations -│ │ ├── database/ # Database layer with migrations -│ │ │ ├── migrations/ # Database schema migrations -│ │ │ └── queries/ # Database query functions -│ │ ├── models/ # Data models and structs -│ │ ├── services/ # Business logic services -│ │ └── config/ # Configuration management -│ └── redflag-server # Server binary - -├── aggregator-agent/ # Cross-platform Go agent -│ ├── cmd/agent/ # Agent main entry point -│ ├── internal/ -│ │ ├── client/ # HTTP client with token renewal -│ │ ├── config/ # Enhanced configuration system -│ │ ├── scanner/ # Update scanners for each platform -│ │ ├── installer/ # Package installers -│ │ └── system/ # System information collection -│ ├── install.sh # Linux installation script -│ └── redflag-agent # Agent binary - -├── aggregator-web/ # React dashboard -├── docker-compose.yml # Development environment -├── Makefile # Common tasks -└── README.md # This file -``` - -## What This Is - -A self-hosted, cross-platform update management platform built with: - -- Go server backend + PostgreSQL -- React web dashboard with TypeScript -- Cross-platform agents (Linux APT/DNF/Docker, Windows Updates/Winget) -- Local CLI tools for agent management -- Update installation system with dependency management -- Refresh token authentication for stable agent identity - -## What This Isn't - -- Not ready for public use -- Not documented for external users -- Not supported or maintained for others -- Not stable (active development) - -## Current Capabilities - -### Working Features -- Server backend with REST API -- Cross-platform agent registration and check-in -- Update discovery for APT, DNF, Docker images, Windows Updates, and Winget packages -- Update approval workflow with dependency confirmation -- Web dashboard with agent management and real-time status -- Local CLI tools (--scan, --status, --list-updates, --export, --export=json/csv) -- Update installation system with dry-run dependency checking -- Beautiful terminal output with colors and severity indicators -- Local cache system for offline viewing of scan results -- Refresh token authentication for stable agent identity -- Event-sourced database architecture for scalability - -### Known Limitations -- No real-time WebSocket updates -- Proxmox integration is not implemented in this version (planned for future release) -- Authentication system works but needs security hardening - -## Screenshots - -| Overview | Updates Management | Agent List | -|----------|-------------------|------------| -| ![Main Dashboard](Screenshots/RedFlag%20Default%20Dashboard.png) | ![Updates Dashboard](Screenshots/RedFlag%20Updates%20Dashboard.png) | ![Agent List](Screenshots/RedFlag%20Agent%20List.png) | -| System overview with metrics | Update approval with dependency workflow | Cross-platform agent management | - -| Linux Agent Details | Windows Agent Details | -|-------------------|---------------------| -| ![Linux Agent Details](Screenshots/RedFlag%20Linux%20Agent%20Details.png) | ![Windows Agent Details](Screenshots/RedFlag%20Windows%20Agent%20Details.png) | -| Linux system specs and updates | Windows Updates and Winget support | - -| History & Audit | Windows Agent History | -|----------------|----------------------| -| ![History Dashboard](Screenshots/RedFlag%20History%20Dashboard.png) | ![Windows Agent History](Screenshots/RedFlag%20Windows%20Agent%20History%20.png) | -| Complete audit trail of activities | Windows agent activity timeline | - -| Live Operations | Docker Management | -|-----------------|------------------| -| ![Live Operations](Screenshots/RedFlag%20Live%20Operations%20-%20Failed%20Dashboard.png) | ![Docker Dashboard](Screenshots/RedFlag%20Docker%20Dashboard.png) | -| Real-time operation tracking | Container image update management | - -## For Developers - -This repository contains: - -- **Server backend code** (`aggregator-server/`) -- **Agent code** (`aggregator-agent/`) -- **Web dashboard** (`aggregator-web/`) -- **Database migrations** and configuration - -## Database Schema - -Key Tables: -- `agents` - Registered agents with system metadata and version tracking -- `refresh_tokens` - Long-lived refresh tokens for stable agent identity -- `update_events` - Immutable event storage for update discoveries -- `current_package_state` - Optimized view of current update state -- `agent_commands` - Command queue for agents (scan, install, dry-run) -- `update_logs` - Execution logs with detailed results -- `agent_tags` - Agent tagging/grouping - -## Configuration - -### Server (.env) -```bash -SERVER_PORT=8080 -DATABASE_URL=postgres://aggregator:aggregator@localhost:5432/aggregator?sslmode=disable -JWT_SECRET=change-me-in-production -CHECK_IN_INTERVAL=300 # seconds -OFFLINE_THRESHOLD=600 # seconds -``` - -### Agent (/etc/aggregator/config.json) -Auto-generated on registration: -```json -{ - "server_url": "http://localhost:8080", - "agent_id": "uuid", - "token": "jwt-access-token", - "refresh_token": "long-lived-refresh-token", - "check_in_interval": 300 -} -``` +--- ## Development -### Makefile Commands ```bash -make help # Show all commands -make db-up # Start PostgreSQL -make db-down # Stop PostgreSQL -make server # Run server (with auto-reload) -make agent # Run agent -make build-server # Build server binary -make build-agent # Build agent binary -make test # Run tests -make clean # Clean build artifacts +# Start local development environment +make db-up +make server # Terminal 1 +make agent # Terminal 2 +make web # Terminal 3 ``` -### Running Tests -```bash -cd aggregator-server && go test ./... -cd aggregator-agent && go test ./... -``` +See [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md) for detailed build instructions. -## API Usage +--- -### List All Agents -```bash -curl http://localhost:8080/api/v1/agents -``` +## Alpha Release Notice -### Trigger Update Scan -```bash -curl -X POST http://localhost:8080/api/v1/agents/{agent-id}/scan -``` +This is alpha software built for homelabs and self-hosters. It's functional and actively used, but: -### List All Updates -```bash -# All updates -curl http://localhost:8080/api/v1/updates +- Expect occasional bugs +- Backup your data +- Security model is solid but not audited +- Breaking changes may happen between versions +- Documentation is a work in progress -# Filter by severity -curl http://localhost:8080/api/v1/updates?severity=critical +That said, it works well for its intended use case. Issues and feedback welcome! -# Filter by status -curl http://localhost:8080/api/v1/updates?status=pending -``` - -### Approve an Update -```bash -curl -X POST http://localhost:8080/api/v1/updates/{update-id}/approve -``` - -### Token Renewal (Agent Authentication) -```bash -# Exchange refresh token for new access token -curl -X POST http://localhost:8080/api/v1/agents/renew \ - -H "Content-Type: application/json" \ - -d '{ - "agent_id": "uuid", - "refresh_token": "long-lived-token" - }' -``` - -### Dependency Workflow -```bash -# Dry run to check dependencies (automatically triggered by install) -curl -X POST http://localhost:8080/api/v1/updates/{update-id}/approve - -# Confirm dependencies and install -curl -X POST http://localhost:8080/api/v1/updates/{update-id}/confirm-dependencies -``` +--- ## License -MIT License - see LICENSE file for details. +MIT License - See [LICENSE](LICENSE) for details -This is private development software. Use at your own risk. +**Third-Party Components:** +- Windows Update integration based on [windowsupdate](https://github.com/ceshihao/windowsupdate) (Apache 2.0) -## Third-Party Licenses +--- -### Windows Update Package (Apache 2.0) -This project includes a modified version of the `windowsupdate` package from https://github.com/ceshihao/windowsupdate +## Project Goals -Copyright 2022 Zheng Dayu -Licensed under the Apache License, Version 2.0 -Original package: https://github.com/ceshihao/windowsupdate +RedFlag aims to be: +- **Simple** - Deploy in 5 minutes, understand in 10 +- **Honest** - No enterprise marketing speak, just useful software +- **Homelab-first** - Built for real use cases, not investor pitches +- **Self-hosted** - Your data, your infrastructure -The package is included in `aggregator-agent/pkg/windowsupdate/` and has been modified for integration with RedFlag's update management system. \ No newline at end of file +If you're looking for an enterprise-grade solution with SLAs and support contracts, this isn't it. If you want to manage updates across your homelab without SSH-ing into every server, welcome aboard. + +--- + +**Made with ☕ for homelabbers, by homelabbers** diff --git a/Screenshots/RedFlag Docker Dashboard.png b/Screenshots/RedFlag Docker Dashboard.png index fe8ceb65894f1942e5fc652309ff1e5be47f55c5..866392a6aea86fb77ccf54510367dd0ea8fa18e7 100644 GIT binary patch literal 95020 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

#-0SKO|JYF^ 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 K!Bn8z1_F=~g8Ni^PU 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 literal 152958 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 iEp$yb{4EJ?6 zhK6N|)QUNJdVA0ryObCxmo8cLxn?V~yL~&pbb$`ccS}r`ifg-2BgOUSXswpQQZ0Os8>Eb}<^Dcn zD4|CDHC1{?W@|1T9+#_1Djq`0<*HA@=JEbg9nkn80ozE9&ZuOXXo4suFjJl48@16r z4u>3Reo!2s-<-b#mqgz9wVE|qIWiP{-QS0p=F1mJ-)wn@uLJ0)XwTN-xaZGH@3lMJ z#JKRV`#AE9;GKsOGGJyCf&)6*TZgi?yEe8i{Vdsa`{`6nU-fkMUi=5` z2_*ct_Yy&CRj$;Mk?C}e7^N8LLip$Gr7h)qzU+qPdbp{$MwQcKJ6~o1ou-RnFw`yx zeiD@6`TMK0s@g^f#AgnL#=0t>(QtK_hhGx+9Q|}(J9R7fkk~!IddbPS!?V@mxMU%- z^?fCpqN0V0>3j~5$NaYm<5;Dhp#xJA;g~&3&Lk5po(lIaJ7FfQ4i7MQcX#?HJy;`> z6QM-wArtx9`44RI(wRa;0}+G~9~#>5h4 zoRu4KT1|Uc9*ViUjlE;iKWnDu%AOqbrPN}$feTP+;kA)f6TA?u%&;T7ArOVJ?Erx} z8QdIe>KA-F4`??zUyO(S@J141G5b=Fi9Lfyh*>*Fj4h(t`R9hKBn*CT3GCENb(ZMX zlXF$*Fg(@)wL63^3fsD6V=5tJO{|1oFB0#RwA4C>BFY{iQE`WVE^#b2Txd3_ugO#pg(g%`V2&?VQK*Q|C+*3~SmDd^n1yq>JrTgZQRR-oxPY1LVi~bod@6L(3q1*BeBfZJ2vi9xA<=q>dhs~>$@X4rJRZ|&4 z@FMvuQ)fFH1INI^rhrgbp)zwQMG$Eu{>d3nD<__z8H!M04P2Lb z?9Y7yng)gMO!aKvSj6)Aubd0Rce+3xg>9S$ZS=&XY+YDV5!_r8**oj26-lJTSZt zrecSQaueCs4!jAU-fY{;s~u7a_;TyJr_A&Q;?Vk_00i=n3w0(q0HGCFSxHh>Uako6 zHCLz8a%x=&c7gEKfbT?pEV$bJ6jH$1H5AbB^i3`Oeo!7ylq+lf(dXeaymw$-IXa)- zMLUjKtDMT`$wVyd#pEBIA;`C$X#jmTa7dOXr<~} zuPs!-NB{${We6xp5{V3IMXI@M57!5DdZ}-u`e(o^&Rw=xrNac5U78!t$4Q_2{W|Qk zUD2oSr~H1Vkp~}@m3JyzI?)8xb{Ta2^Bt(9z9w+8h9Eu(i47Pnhj>+u{orN&o??v6 zwC3~pJ~K-%8WpfV(hNsY$o}kr_)Rb`(G3NvMf)KQ%#iAGQOXjClVxweaXs=xFRZ?+ zf*<`>JDuXiBEZb(QLkkA<%HOkO(1gdjfgQz%G&e3`qXlpn5Xb0NdJtEWCzW3I4d+e z5=F7L>7g6t-x4gr<$1ye7~A|MuPxUf-zy*!31Zb2M*6xAcq3u`5FM3&-YFT)!55?= zH@0(r4UEJQqv`N2nLk~x?nA@BXc zn^Q~FXfb79ZHr7s*K2g6oGI180>FCrRkKXB@r`ksfcs~rI|{n#esVl)Y&@1aJ!e-! z?^lR2?M4))%GDuO+zkZ}Vwm8C{I8rlCcN*OG* zxtu&mtL@;>#=qZX*6n@&-qv-DG8`u;Gt;|nmsY#wI}%V`V^n3aMicv(c6%2(Y+|2Q ze=pruJKaJ8J0`jX{PEnJtm&7SLs)e>Op!dEq4cvV>2YY#!}V#jTkUXau`A;BzG|5a zRQayNPX5At<1#LBDvedY{4T+YpD)3s-x$8cS*S50DNrB;9WI2@73P;Vkdm@MG&`6k zsqU1ga(+t3;t}_56$Y&%7;JPkIQVL`2}5-FzH(8iT{VI5lO{!8;Vkqm&>b`>|0PYa zLYn~zw-ZyF_rnmWI54R(?`C~s<0f zH1OSmxr2oP`ofzNVY*&QPfx*SaFpk8PLXc2fSTq_PChZ{j{ifZu~Ip)qLO>T(4vO>b^92i$$_x zs_d&Tg&*-Gyd)YuTX;rD`OjIY>F@2aV=U#!dN6>UZ8BSq9g`_pA&7ZXJ0}-^y~u_d zitLa^$1?P#dOIS8^%c!-7hsR{~JPY1>nvgf1jJmbt zO_}EQt*EHj#{N#E9R2RdNHVmP{IH@d3@=wRg&R%D1EBlxf;p%n@fk{!0{o@qw|WZ| z%rz=a%Ya_oNWEH{HX@S?=Ud{FyIyd_&me#!Vfzp`g`pz&* z*eC>}3;~A(;8oF}2iL2ch?q zSC%mpDArqP!(+V&2U_j~9ov`uP9Shz_c((oh$O*g1wNC+CCFEn&kh6H^X|zJSk#*N zsI4}W8e#c_Fq7?r9EySQE^Q@WjByCF{>Ac%>3NCWhTkSMoX*4eu5$Q4f5!Ty=uvWX zh3*SD)z!1QjadCk6F|iNi&yn}_StH=K^+b-jCv)_%ES$#ikQkcXg7Z+7}wUz`4*hG zP<=~!goq;!7_z}zbAm^Iyj59Wm|LTFWTsek{N|4Q14(sE4@%8P0gJ4{ZY zR=x(;=uBdS0{+Tb9_`gjmE}1)aPcDS@kAJB#;}b^mlGfMAK%2J_k3#OsY(AZ^=;+E z$(QUJnKK{RkwHus zPa6vG<^A}8?>8T4r?)XHyVms=wtu0XW(rT{iC6>DZNB*b><=?I=;&d&%3Z&=WcBBJ#Hr3hAei$y* z_`?4G(1!A<0>bR@-S#4k9L%VnCmeD<#0 z$ss%M{)?c*#3=qA&w#M8gZ_)5Vo$^@=i9_cfPf0jjq-T!<6rz8h6RZ9;%9pdS*Le$ z)ot6O>Na~T zI0RP2x}zDArFq7H#6-0SXPE$olM}sI+PFY`XAT<@;g;U1DSK>~3%xN%+qZ@ta+ zkr-IHlM;9rzb@|0Rp)DaDX5?b0KA9S%gf!%3iN*=$lm_`z+Kwe8QAL2PK1oQ4Vh<4 zT@|w?@-4B@z>HllVB7RbIBe+NnI!;rQq-5Iis!m<=0vOqM`u=B{Wf)Rd;F*%1%Ir? zEmBS1V9&240lt~yy!Tl0;M!X)P7uh1m6`7z;vv%QaP;3D&#YoL2)-%DH=4SFbve7k zV>4^$^2tayur>+J|HiciB(A-;Q>nUW`=V-Y+n=cYmW18E*BC8)Er9?1-5Y^f-D3AB zL6?DjpxQAZFiqNl7lcY_2i1n)92x5`>qz}YkKt>MU16avI66k&n39o{4c zU0lG_H>U3g#f3%PgWLbvKfn5WrcO@@RYz* zb4WGazY0!EOM+uGlPAK6R}*qsrd~>Cv*L+RnJHAHnlErLUrg1AG0VY!OB73{axJ}6 zWwI+|0z1~Q0uR1lWNg;)^>CdimC>?VbBB0DB}|HTI$S`!wp5M1JzdWK#>S#-MXj5} zZ7UpuWd!VqWf?aQ@@?lMlf(D_wClO^V0~oI7ZFpXn2e8Sptx26Y%YtsXrYPWeh&ye zk*CBN;Iu|UO*XB~>0M?G79)?oyQ9VE^$Eq~6x?jvThto9Pi*@PY)k zgeD}2XqK1H+*wP$WqI*G)6WMpAET_oU|`RmBCvL<(Ah?tRa91)_M!sx1}HkS3Gjg* z^_Q}+a!F2#-tXKdm9Iuf)KZNo8lJx7CZF;UKRmdBlWQ?=D8qByb}m?jb~h6U761yA zkP0=pArZS^T!*R`2DA>;KcW`5mc5yR6b~bT?<0hGT_M~TC2$dG5!jK3S%!bU+?{P; za2-1i6p^*t-9K3K5b;FqV+4t*tK)>LTlu`HC6-IFLFgi6-MG9(Ngm1o&nnI%i_6rD zG&=&Fgj0DA-1uOwjA1-`e8Ns+od?nj5)#nMXcK>B5FR?cC+5UD*5VQkH4NNoj&x3r z-a#tZ0JJ`^kRud3^((YkZ=I4ZRte$0_>y)brJG)I0p9}l49x2xQxet zO1Q3)<1TmXl3J?J1_QEemGdhrU`O)J&{-V%D0A&p?HY_>b-5$*_g5k=k0JSASpxr~ zKV|3FOU@CvrwGAzz4|5z@2JPLyN215SlkzJ3HhCf$8~gptYx~`y<86bWFfKSTxAq`YZc6E`g48>8tn^885IZP-Dwh~Ci?2R(yjtt z2Z$sjB=JlZg#)(iZ}m@_@y)+T)(lNpDvQnIa)b;(jUY;TZZd@v!kREq&^io!@cODh zwaf7hYUNtT;IvuALX}|@GFuLxL%94OM2 z0VH_m4M%?X>P}_7cmgA+qm!J1x3yt}gM9Bj{$X|tF;l2{YcjvOkL)kxs&@(QTqG? zo(HJ)Xt*UXUh+#ZN!*<42nz%;^QnCs@m8xb6)m5(@@iX#y_Ghk~csHv`4-x zT))6ts^QnfySs;t)n4i*yF;P3Jrl~S;uCn&TZjj31)FX*R=2zjb}DUSvJn(7OSk|V z*yMd51Z2YculrKA8P(%BiGRQ;^8*Sv4K*Vucz#?%>USRv(NC_Bz44FnUq3keOxGD$ zA1$~msxfMqG{j?Zl7kgtc#d1%Cr;;ypMqEu#IMvt>4EluHwRH%RtDr7>2k^MK52RP z@Gw%TUbccL=&1wr%-U+HzjSKg(ib@rcJlzC#_~^76f$lfM}7i9gVEGpca!}VYTEmZ zm;`Zq#MzNZHt-kOe;vzii@mRZ+Tu2kZOT!!a=sy6o1J?wXv<8$qNpoW%4fR7!V{U0 z7mw&Gr(`j@goz&30&gEju{YeU8XOO0IF{r%ll8{_ek5qC&}gA6gGD|QHJ55kMScZ6JJ3ZgbcMXNK>gL zApK}?s$LAqHG0l^mGW^S1WigrMeDa#3pNtrpqR2U5>jG0prwTX+q`g#A6hgzow$KN zX9y+yQ!9x$+J{*ZyJa>sAMNrxoyP%0J+2+ET+~BK>Hi^dJVAA7y%g)qe3OudN|K-azmjVA`PMf8=WZ9s@FJFPfZA-&7ti5D;jj5W(Wg ze{>$BKFTO#n8@JtR>$pbA%hLwZf?vUUb+zIY3!QF$q zQ@Dl%cZcBaP-pRX@7{gx-4CZ8<^xnMnL6etV+wWTmXyRQoctJh6$-R5@!mx0>jUko z;R6OaAmhjK9Z666mFCVh?SJ0BX##Gp*#1@)!*=ys!|C}ysq!YWsmwnPaQUce!hr2t zfi@=IiK{RpblvFgXValI@r8PibP{sq3u>qzfL>lZc)CJ1gC5wrt!FvoSEt|-v^txG z`WZnG&6WK`aX6eWrzQUM^z;N6RINs72e-1%R=lKn6o2ZJMWH}SG{!Bg_w62;-y|W- z0G3`QikxVmBRo{DwUDYaB`0swr8J6ooMJV&H0<6-(vDgFA=o&-sOR&3M!EiWV`OI+ z(zUt_qW2Nll@*s;#h(4xd?plEjkx^WdI9<)3&*EyfZz1+t3cJ-`)L!Cp(mUm=V_tN zSp+cA?cgwf!rrc4_ca;@G*cDAh&$SU-%_4-s&12)8`yToU+fqKFmNyY z7=O0rY?c@@0wP~E^8Y&jBw2iITW@@u6RxYNksS=$eR|R(d8eyT|=tW za zIl<2!&UA|$^e*=q|KmXLcyq60qGbhymbg`FvOH>YR~f2T#UrAih-DRLaV#676i?_- zd0Ea>sDCU82?^#0@V^tqL4Wc-22;o*?w;OJ;9S+n0c*a~&2 zz&0|3&;7c=<~QRHCmwq}couo+*E7yy((t1ZAAh2|>^0RdX{e}16 z)`z4*$e6gKv9QQwr!Q=J!37FOZv=QtOV{9U57iwdB zz&|!_z_{+ONW`TjJm+=JhjO?KtIoJE22moGjzz$gPtI!474E3Izcsw(QkPz81v@!d z<>k27r(UVUO?oEc8}cW>lz@t;%*vW>|D`}A=zrWRB|t|pLALWPDye{0#V&v`y!$o% zXQyric#~eP)YO9&uOJi)W)@D9@g07r_sQ|!-)ZnIwu1?H&KBsp*#ZefZRo<1H6@DV zf%(-8*mkcdwI(Qj{7At#Z~J|sVt+*4PYpU#*NxnyUrS1@LIv*=(wBxDv_Ho{F>62YGf}ey1bxOm@?=F5x z`AoobKuaK86T0#RP(5mOo5!L!Sn>Xia(wqx;GK@8976|1G9>d(soWhC1`ak))e^hf7c4&9mAQ3)O}xu2x_q0 za$#8$@u~6h>-#}?_DvuPNV8yav;_NWW+rZEvB8J@r(SpTYDS7l>K|j9mA#-MXFAX@ zJ!wd+OaC1?8D~#ArzvI^_`E;KQQRzfLInGZ(Sko2y;%nD9MF1IDGq6TB)FqV{jZ>s za{&54IaoymG8BnDor*7P-2d;E0-ovLL)!FBsWGL$K3pcZ`x#%|w~Em|`*;{I;#)WK z6<7r)0KyhVgZcHMDd`1VR)0Vz!_*AkdBv4qy6*cy!xblD&pNJCgEXXQ=$~FzYa`%& zcuaG=+=V6LrzxjBuEU#R#s ztgW#;_v`-Lg@D`V7hqTM4Cg9_Nf0ArbOZgYvqnFr@q->fa4^ieh5IDBp&}U3}Q@SNa7(`LWO4Z)#hW ziMsWUmTrFy>@&rmfWuIzLI@T|cu3G<4upI%HR=KXJk)ALbo|}aJxq;Bg$)~)S|jpp z2T^%w9D|)#t!GIBlGrqT?u5;DnM)cagklpKW@H-T>Fo;fxHyt?aTx-lRw{Z&O+$s& zejL*n{rw-~(hzDyg5s{_UktY=V}TmJ5`i3Jz{% z7?+D~T+k7VhzSa!?(ZL{pG2jl9n^6twp?C6l7^O`gEF^)b!cJ~7>dWRg^_}`r^2au zuii7O^W)?;wdsT~coiB8L{W1GQMuZ%NCI4jUW8sON6c6Q1*@HC(auY*?G~Q^qJKbi z;~0fc055A>TG}-@MC{^}6h}iNt|jSL`H49`EMJg?C_W_Gk@VsKeFa%fZPPCkCPaoG z3&Wt{0|EqCC<0>Q3!bDbMv}SP1@d(S4hb>H6;fCXUw(l|jQkKe$PNVMo{xneEt$;2 z3M`*g8$W=4wPPTB!oaD9Mv(ZHi8vi3hV-chA4lw+v`xjAiW82q6E=1Ts5}fPO-&vi z?LsxbkzNZ>)^%TeHE!iz_uUzWp2?*^x{{GQwJ$UQUkt@UGz# zBpRj8@DW6)OX0;uI6Gjrs*TUX)0IXr2B9Y=(v*ppar4KkuLfKr^7=<6L)?D(MuIp! z_(VX#D2k>@JW=kTW;=DT&4OUF0^y8rYmkD0wF~bdMnL|V1_$ZA09o0|6c`o8W;iK2 zS~B)sP$4D}l824Wp%SC~q+p}yf8Se*HT4~%0NMbF?N#Lkw#veYnN!dwiQeCRQ91oq zzvJr?wdP(=;Ry5dDj=vPCVdbob7T^r(7)r9o>EVjzLYIxJNC#RjJm)CnFtgIS-hhm zi|`+lcCti_m#(J_D?2$`R7J3wgW*Q;MWD2lrdD$IdRG?MF8Pw(MBhUxf$TxLF>J<3 zw!w#AKW}n`K*`ukXRy!enQEdcDWYXBo&6l&(}!FYr~=#o55f z5AHy5SXlLQ#UdufRs`OkzaNT(NtSCZ-b&^3Pb)vSz-WdZO6pK8|Lwn-h01T8?T`O9 z@WTXg<{laP8&q@$?pBZZrB^Ljw6}g84a&o#6pp8 z^!E>LZ#4=cAjbyEI!bYu8-6Dr0dkbQ+t5eQlWoscKt_TZ(iqtXX&IrMBbyoCvrLf#Pa!1e+rpfl!=H_XL zXJf@j3XFq&Y3u~~|5QCV3lRIi8{5xs{NU$RCM~8HusPF76tlbg68F2lmHG zBt(T}=qG|81ztmuf^SD5cYD5uO=8@PvQlTXdR{4X$cG4x3k(2i={oeS`2JQD^uY1$ zv#v{;nQ@zJV;NbS4umT3FDz0pXa_#U8uUCRi{yYM851cP1@Q2`6xY-@ij5WDa0~x_ zL~sDa-T{&~M?lsS`}b=KDty4)Bi;MfRUXCPinn3-sB8qCd8OHLk6EGLiS={cH!Lo8 z(}7L%hoatih^Bt`3xYjVppmg%1kVKV###aX^PMhFS;a;CBx8?^oSYcgIPrYjpWNYm zm=GZtDvD?czbb=wtJ?AYp5JDz3m++%WVPM<`;D$^iN=P_QWLzC;%j7Kq1jB8Dl}Jd zRNv)#^9CS!f37{zdEa|%IJmhrs|$GR==%EJDd%-C(Z&)Z@y@H9`<%oYYT5;Xm)$z@ zLtngZ%9FX*coV?8`w;shT;$I}U(1%h-_MgX8CzQZy#0FYxEZf(F-LzzaWfq5+~Rsf zmNJ>~d`YCcp)<@pWHhRqgHfTdj-BKvsF;LjvpB$a+486D$8RBr&@@ufmJLavIWlT06 zPBUb8)e@O0-3zdLk=jm01U;;CaoUd%C9&=Xc8NTnMH)`;Tu}Q>oBM+vcZEe16+1_Fc+Pm$gO9jZ800zrWAk*ihasp9u7K?ph3MOZ- zvFFX?_k+Fi)&DN;SG9k2dQBz-iTw2iW=dza#uJ3*t2`Q_RD1GdIwsHIWcn_heS!())6w`Snnb(gv@w&r#_@@I`u=9KP2SdL2&K z#>SZUn@=&HwpDc{cJ?7cCwP;YWj4?H1Bc!vTi|y~?cPy4e z{+i0lZoKf7gXU8N-IUM$dz|(FKCcT#l9kpNu#gZHlJO>H$JsAQUqlDtbv6}loF5QU zvs$s49S9%&?FG4|mL4LmI032dj-oGqh~>ID#9$18e@lxy37->^S98@K_?3qpVf86m zp{mE&P{55`NYudr0W9`dtd9&NKx5PQcRnAs1kyJl4rG$tJ5y8BQn9i^?#G_>tw9gf zp52xeHQq-N{Dub* zkNyZ3-G^$vg=ORAHbcjgJ$*8{x^fbpl9`}*Xyv}57D*sH6SA$WItP+b!gPcElWNjTi zh$`gxdMV$fA7w>u#z|<-7h9+B*SSwB6B^!Fx>ThoiWBrfyh1 zApRoYbs_U~JBq^o%62j8582tCFC(r<)@8TS1dq?UzLE3f*=W5HGVfy$0D7!y^gG@P z2$QDX!Y}M>^BFrMtIL3wyBfUVaJ=3?Ssns}3^jIF3NUb;p;=j|k|?LqKn^Rvi%s{v z7bLDdwxQ7hE_RbXx#!w191;9Wrq?_C9W1U-hVZXxzagmB8E$m61R)5>%6va`69adTMn;$65k?Dj!#;+b=Q z9w$a~Z6XkHq8LqLj9)S&CJ4jC#r^IwwqO1M-pI#tJx|2=B6FlvtylhGNn}cDb!m3G zRv)=>{R0Xt-$Uw8=uF6Wv<0#yuFqHbeUlGs9jH6%R+XIughV}4B5{VqwZb;zJFN>X zPQoEE8I$CFdoud17I3E`of6oQ96_>)hM?4c3Ah-2%cFuZV34NNc8n}Em z#M;T88|_9gU0$)}$xOw!BI!Q(rGkcdkpl!mkNe-A1|Dx3Gu*Z&JEhn;dBj5JChlvE z1LlB5;NIh>8sn$$ZSOt6%s5C_XYf&GrAn}T$yXCx(p(9(KfX!&+!ts0rE{+Wo2SPZ7r_~?YENBo zS5J2H%ugW~Sd*d%*F^OFK~TBdC6lI4A?q_;0c&h8KtclSOaZU(b&r+IPl!ScT1Zy@ zpwm;^*DHJGbiv@9CWb;vb10A5D!X>P*dWRH|=@43;OrW<3W?FeFB!J0`{ zF5`)KYYW@MA5^~N`szb~{PnfpZ!m?<{`zC;8i>PphoWm0Od<#h<*sWNEIb&E zg+vpyG~bksJrmse-MFmPYRA-_Yf4wzeoNZ>yH(^0TYXM=afAukK?}n3Y*Y36xeFVJ z+t}T&*|a*%@II%0Q_u`ZRDLpY`=m|3t+#?G4u9QqqkD&eNf>P3ZTB(|`dyu{=2p=3 zl0GVn6aVIe^`))3`AMasDSp6lP-0fi-O&SSxmvk@HyX+A^5Elg_#eDn+cDZ_D4rA8 z?8CFlI=X`OuXMkJyL`3Sx9JwNw72&8WdSrx5E#+PkM2Cw9tR7S7K@dXT}Lx$Y~BW@ zdwsYIb$gn^XJjKH*MMjQ{UMB@-uKhK{nEJuO~KUoEV02`CM4esFc;XS?sc#;lgXY7 z;MG5xsi6RX`-J!aAo<&_cx;@7;M87vUy@rO3o1eRAg^Id_nfAH8`@6u>QbK^!_?6bSAetR1DL%|stlEWpNJ{;fi zbIpFPQ#8dW_wbpF6>B4ni-=RzY(by=gy8gn8zqtJcumG2)X^k7U zrK~HN@gi~^Nj0E4EVyh$eB!!qT%OVH?(6Izw#O#)!H;^awGY`J%hBAZA!ePPu6@?w zrlf>S{L0!J=eufbY8uSI<+r=vA}J{;lx6~&T6o}Ra0eoL=ZizqVcZC|5D9a<4PejC zZGT*L(T;_(`ib@}@a*eET?T%PxKI_&g!1EOW7*TqgU zM8t5wlti*Ol{tLI3TQ#2r|dyM5CUFnyYi16F{{w2MT?rq06}E}L`PqvoJ_e})p40Bd^Tg&fUQ?))$`u6O`QP`qM;d(ITO@OKE8)m=uKS*U8K-js zi8h!Gx*$_h@H)6m>{hyBXNld6&gRq&QSwZl-1lEi4Mahw3PeOi=Yp3%fWMKx*R8EG zoMQDxInPyA^%x*-kDLt5TUg**3#e_saU&BNT=u89@3;iLNKH9xOf`1M*R@j|qro^| z9)CI(@&4gv2LyV3K=v~CA`Fm5yr~;A{#16<->Vc#PJs|b9)npBsk#v3!I`+&W$-i6 zMh(vpBXpX<_n|A}_R6!`x&}GhoRUfXJziohU|zv?b$dy!771MQ+rST~FOJy+`Ts%7 z8?E%I;kS*+7K%-gC(ci3CqA619DEvYSXk{|6Q?!0&o!`EDkVb~TXeNC=#0~Zym@t` zN@073MMRWIYu<5tZnY$gLP7N){z9obJj4#bt&vk7IBOK=QJ5S!AAN3DH!bYP*s=+m z9=GEY!I$%z`pipVh_@U48xwf*7`Tj*pE{8k8FsaVBRQbEW^Vj3&m{opF%>XWs*ldoy)Wl=h0LCUJdOH0z_|y@A1GTpFFg&;YZwf%)ch`xD zjXkzcW-LDRyK688Rkp0(ui{@?0FM^u-9b`j-E(BH_LqH#N<;IC_SaTN!dr6TaD3se z4tew2RdGm#*P=fVbhKz6;A24{$yX2Z_AU!bI!ijDqrD5*SKGiYg3~b z=M1E^e!O*@tqKdQA7jDmKpxyiD>bp%&$}w$Bd4HA<`{&oe4_=?vqAO6@a1Zw zYcNrj-!k+MKKPu1WM>!j?*JF{~;I3zkF2F>=z)s*0og*JnYE08&T zzl^oVm@e};W+%uH?|c&-$Z@gjMz|Q{`UKV+18KR2epx7qY~k9kHaY9v76QJSi+0;Y zFw?w@pF^(!_j*vq+x;}mDzMyS6V>&h4JTjGpm(UxZBFX`q5FGqE8sa|3IB|%cg4Ih z=i9BSj^TpDL>}EY~n_$U6gL+ZXX+9>S5&g=SUcxM$5gg z5U{-iAnsY9+iM%D2x4~oj$0JrQtWz=H1USnoG^iFK>(~M5I^oXo3Lb6Ghb*JFZb-B z8smN(l#~pMh}jg;;dEmJvl`*o9Pe;(Foc5z+gsH2?`yG@d2F^1%C6{7cY2mf+mJGG z%AySE%b#9=#&f;!I^OB_hO(G-uI2p3(_jsbdEa4AxA-m*`m4`Q%cBll{6~LDJFx~= ze5%yF2YD%S$jRrw*zUv}yj-$XzrKJm|4RQ1)7ygU3C&1r*_lN@5T2_% zQr~5rczT*c=w7)q#IHv%>d}(N)#g50v#D7B8$~@tXcl^XdE2!3(`Ky5U7qH=g2l=& zu0Q{?%Aiz`J-sg9mWjg?x~>fiw;z9b+`sz0!`(AdxjtfnM#6&vO-o@KAKPlDIna)lUnYIPC_>L^XWi{cr^l8mzn>g1+%`yRYTgyBeza@Sdez zl*{KgeK`eNF0hP%0@HQfayABJMSKHa)mMoeSWn|vdk{Urn7kci7l^@3n%~4%b=3b% zL?)`1L+n4czIb;*h&ic>qB?LAiw&H%)J~?L>Y9i{EXD<$9HsR2{DMIC(;Zv3vV-Hp zmP8fX&j#JgaJFyP?Duex{jP!7Uyq!xIr}9eEEl1^HU4trCLtjSJmspT*=|uKb*4)L zbAOdynNauk)MsmLim|;H?M`DsLtLf`ne=eGng?<+p^L#k_|*@=Vmi#jr9-q$Y*x0xj7sg4fN8V6y`%2=ny*m|_M-}d1eB;O95MFOh{F?_e# zni|>9aqVZp9K&e!jhf`$(e~uto;7`sBBJ)`o)DKBY|-1h1e#2a7JFXd^^msP=~^FI zUr?SL1Ac?$bdch4x9uGySzuw-Led0bA8o2xaxvp^VM-%|D|XOCFDOKyZq`X_*_@Y6 zYq=AA&VVRi}&Yx+Zc4JAuZaz+o|^Y-RK#M2wG04 zYI+tlyUnbi>+AE<8B2A)F|KF2&z+KgBI@)RMSCq~M2{B+pL$TuDFi}<=ENYjSuC(e z0ggMk5H?@%&n~_GJGj0iFF3s)I{Ey?=nIeuZQh>4W6wnRI8L9pF42frWxU@TG4kYXp-iPQ|xP|o9ktNT(tTwgXhX#PcNp~+fg@0l~ZS+Oaa&ERpX z*+b+C!hQ7E(BnPtkss$HtHolWF%VuI>j|9r)?TT*zVz4`)qVajw_caQYlDMyB(>;m zZ?l$>Q_LpTo+9t$VjP$+hlvOG_hLKl=}}Cpj=JA=Sxl)|E}Jv~ig=^+4Uz?N5W8RT zAQZ{sX=XPtK?ErI`@2y(u$%-6ycaUE%wv8x1;D3q9coI@B(x{ggEsfD8AfTz8TAiP zd*`{-NP@hq+xQY4R6R=(Q;xlZu=`*9K?3ZqR8M!k+ul@~cs(`0LSXqq;7ojLNA}>2 zw=;=nt0%^Knt#3|!}r^eYqT-WMiAf{Vq|`*VeC)llAy) zwN?Ob1vN&?=Y72c+buf`MZ&WWN33huJCU5T^JPYO0g(+kQcO6cZ=^S7Jy=fgf~_LP z1XQvRY_ud8WaFiU&}jX~$yao~ah+aESLb{rnvlm0KBM~ki5rk#%h<|feC&V=$w6x& zY5J@l+kz(+Raeemf2JPPBtChvda)x>F=;YH?dI<(niH6RsGyi;H?0?)BuO3#Hyyg0QgMKzfLYf5fC*-k-Y*d^Z zDjw+DXsY^gE_lKG78Lb1<)A{EMq1UJLGet@1_7{2oS%z$HkSar(Zc1F&6YaeeO+r^ z+IW{2eb2O#2~MFOI-H5f^Bn{?CmqcG&>os4oxGPJcCKdFm=vu2QjjTP1pd9(3Q~csQB5s5IR0q~2FVAkwTZZ?aNu zDSmx&K?=58sBz&1)Z0Dc>xb%$m!J8{*(YEf9iR7Vq2@x6l zE4QeR!oj2h5F79TPsEQ5kLb`nxWa`RAl= zBU7mB3MNUH)J)Co1J0h2*oC-KSxx&Z#29V=vArzarakoI#kz!Ju+Sg9q4iKa*rK zz%DUlnT z=csgIpHNapcOc;54n)<5e3eFCEo z6Hcmm$N(k9{6<7|)`Zb#@;N7`q9K2xQY+gD`Jv84#lTN!aF@L$|FPy$LW5pn_p@E8 z^1z4H&(f95KY~Rl$=^XhZWvhy+Y8dm)-=Yi1B}n5jsr@~QA`p%XH+ZZuc99a6QhXr znbvXYe@Q&3KqLE3WG!_=toKV0DLNs1zyzGH(BwytLpeoBKTnc>J33NH_>e^!xBdvt zUjM!2%;00C`MWU)SiZv2#7Z65f#qh5xl+jQT|TPlp~oxy(u!G7%q+&&V{APouyjty z0IT;8XPCbhubPU1M>gQ6^}C3GXucW|8@ph}@D+n7fY<;X6SGWjHLPkzt^S7~kPC2Z zU(95I`YzReMcl-M6AZ3i<`(0S@~T4Pf4i+wGEYg)m;-QFOEK|I#pl}DA^}b8UOr;y zr5a;RKasfYXIVm#ZxdsP)6G9!BSis*GJ-Ss?9;Hq1dIe6#@z#QjWidOC~d$uDP9WU zOhpUkN?vwNbX?%l^ob&#K}n>75b@H4zZVvs-S`SssHbw!0kOhNF>3$G((Ym28>QwQ z0aWYEvfmDgiOH774GL(_qfE5`%g~nn#7c_IuzOd$c)?0C3Xm<7yC;dCKPh#fdgq*u z5W8!94{dkF{s2%05m435NH$#z!Aa(MOQM9|E_l+h~)-(n`zxos&FBPG<7c0V7Ryv(H zym5K|aJYvrJ_pQ(6Q!QJNZz{)JmhE~4PvudzJbhFK~ZzrND=QX5FJMf0}e(_U4UXQ zdIpnxaU3N*A5J#lir3k_)FE{OZm!IJ_z@{5YC(zmW2}xCHxt|VoZXWYea&+|3dac2 z8cd`%#Oa?X?%QA)(mI>6}6GcoY3oj#GY{!Nv<#Flq$dflu!zK;q@`98?h^CpQH%% zmus*PT%TrHhrW^8mka>etE`B-(P008Ybcpi&3!3=py2zO3Jn1rO?6?y5|{xYio-VL?fDS^QZJ-WI9-NctkM;V z;>ctdZN0XHgG2*`DA#VP*#t8-si@n%weo)r9aa2)mb~rTRXT)MjAEfIbqKL|h*_c0 z0#97Guz|m!mj67zmVaU#)VLMhUNWDqoebuqCI30&04#x;;W#uY&*zJjZW6Dv5sa+L zj!Lt!h`S3M(}5zKR|24wM*ueV%7*7hFEQZw*djrs*hfK93)@>c7OG6aTvfzCgx|ewSKn0rwNb znP387Eu#zH?Ec$4&1DIl$=L*DpzeHJhC-J;MwwXO>gZ3q8|02#-m{Fbd%4B9>`8Rq ztswjv=p6hsPhYulMA0c7tdW#MAO2=5yc)6X%+HA_b-_xU>=l9+Pgvr-Y&BV#CTY3x z2=^>hfqQ(4HapRwH|P$j(RojBeU@W)XP(L`>Un*DFB`#C{@{3Dw`C({>d2E~tM*3n zUzP!30|~z?QTr`PKWIo1lav&hi3xe8Tp8EL%LO!l;_Mq58aHK$1#IAo6|%Y~HM0-r zTIECFYboIQ$n$p=JZUjCvp-|t{LBOo4JZWd&7yGRMkA6`*71%oQ>H%%^(a3Oz}s}v z1W&=k;y{@XM3+(iDi1`E%3%~q4d&>H@4S-io8FCcHw+azgbv~vFxDy}loO2kUYbVi zlO~<5bgv(L+|O3ofV0)*^@ojkQUX@Y(*{XGen?cQ-0smfj+Q~Q%495Jo*X5w#3>ui z_AgUUyp$xB)iO_imLR;P1AEYM{sIVk4jR61=Z`ma&<@YTpAzZCw&dvP(CG%tzp1ES zaV_)mq#w4?!`iS{vs|b-;_)M)Rloy2kY&vtTHa4fPt7&Qu9X zPFA0y?-9|h5bboj1)24(Oivh>{IiT|^~;gUOM7Gd_B{HjTZ6i=HuC-+hQt)2`IRlk zGq8N-Coo!G>JeWlk-DI8b;Casr+VX_e^Uqq*g$7Pb4k`zaoWUQ?hQUb7-V(jl)1C1 zEx~pMTS!kQsVHk?0$CyRWTaFUKR2Zqrem3kTD^+g7XqsD$;DawN+HNgjzKKC0){Z` z{j3XsoP}p=l%<9uuZAwi#R|bU{*X(jSd@oF`aB((dr zm&28pZpW0Qv4Jojr`8yOToXDX$fC<5L|wP1r&E}Es+wx|LH*TUj7e(Yr~5F7M9eAD z%3W>A9Mnj;Du{vL11nl|i_!S_DWhcL8Ze~Y9ETTr-Q6D%x3ufCLPc`Wb5 zp#whV-OrTQ^)cFO0c$Dc_6IlC%EOre=etv)6K!8~2ZfwY|LhmZb00!pD}*l!8EI{X z-K@Ib4gGXMV85xHqv<9W=jhvX4EfB*JApuPF)sZ_-9$~ON-r60E7(dU;yJAc&RY<6=F-}Uuq zs8#FfM2T}Xbhm$&*4aicI;ZI^X~qOiypBy((LzoJff&N%loY;=XZL=DLHWrhw)%TX zeVrYsWq>=33vxfKz{?fSzy3Sb9b_~Lx9ujMN@%oqm zp&TiLp>|q$n@b-^F7CSZ72yaqsOHBd?eablP*N;cSFVkW)NKJ5#A zF#-FUCqM`qfV4Yi@^VPy;N}KGKGP)N_=05c&=pYd{X@sktiU3g)nMw@{oSMH7SAh4 zzrKjwv0PVFbRb-ZLRdwQtN(Q7F?V%X949Y6=ZM^nr24lPTA8>4$Y+ z9CKt7K{g?GKQYwJN@H?^x!bMyxP~IWly2tchM;T>av`+q20(k;g@kqam7p9vR*g~S zo`)AfXcG5QJbH=6V7)#-B~_lcVlJ#vw~s%$L^lj2EoII873se;pQ^1hdR`d zHK+zL4Ez9JXFX5h;JTL=X|;GhRa?}zn6Q~oD^D?LwiK0=B}nOa4k5)4neUW0j7e_(q2Qu(b39YPB;4m^lb0RsIm~1;ftzpA-Aa8bm1Q0KTqH3tPO-#t zmlTFTOEJnMNAfQ~0;Uo9vx!co5hJm;l_B7gG*k#bWhy|E1e4@-Rz4`91_YBH^FEZU zleD7bK}SF*NFc~n8Fhbp5h4vTL(X{mq6$wzgPA|cL_x1jml(?Af6nXgBJ(k6L_WMF zcGP@emox0?4D7^dh6-SsW4A#pq2xvkw^qAY8#8@H5%ZVlzd zzIi`}M^#P0bWnZ$MyI;tFpnTZCxCeW)P=(Pk_@c42;VB1`{t8_TlP|Y(K5XPkSbdl z<$XFj2`g4GLG@~R1qj_&)J^R(b z^LpgR+jHYr=Y88{qu({gO?TmO-|`FMg}$PJ>E7`~jgB+#!%OEW34fJCL6MB| zKd+}y!TzTTgBf}*eE&wKoODT-mvx`)3TTUxje*o{ zf;pi<7Xu=jPOBb{k(F$bj-f^ zMJVW5%>GL>!F&&TlT6k&@~|ztZ2Myo_4zGl6_LM+^D#_LO4>%^6reK?l!8#1#+pB= z{f2Imwezdh-!x?uCnM?suNr^lqfij(NW`!`-|a5=4pD)Hk+y7oh4Ys_VcVbGu;&-a z7Ud8`9^dj**%d^Ik5}RS!^O$BP9I{iqig35pG*PV+EBEM96|e4q{Qm3(OY3)Q5@+D zRtgFhHL^$7(%yZBprIARBtan{W)jaEFL&WoqK78&P{G=Ic{b|(ykDoKl7OMlC`CLLzXL~X!kiSyYG&PIlI zy!(^#pr5Z@9_nYoy~@5Y3>PgU_tzp4c=C}r>KA(x6AimjZR zkKOnxzvqAnK@0(;Xga43>53Tc27RFl%<)?Ey!HI$gCqbjNff1X8A~BDkI*5h`m0tu zdI>9YIG^olx1=y6dnUcCb$rSSv3&s7BgWY4^QSAWL8>g!(8xO6Z8`(qU#4m*T%@!g zKXMi1(UaJo*1vM|{uSuqccdfS=4GU#`m45%(2c4f;y2YlQOoD5tDRNvR0=ELPPDss zij{z-i{uT4Cj8lva>bvjRe$AxmHX8e^Rw3esRM({H=+%Qu(Tb-MM3*62AeVmnlSXLGt!KjuxM&QWJ;Kvn3W2%iAoNA&5WS z?smoElE#akvfB32Jj=k~el@EZCnZ%MexY=GYm4Ay+Ja1Ztj0-?aLH?*8x}csae=Y0 zB&Jq`bZ!az-WE_R(rxX@yHDlBCbjS-HgJSvm$A)g>t^*Ynp@6$Akflw{X zg!#U$fC5D`Zx;r)k`8n`wQr;w{b%XnK?O|rW5m2Cu#v{ZD$O*W+UU}!Wcy(IIa@e6 zFfV^Kx*(-z!4U-A<|u9lxi{1b%fGY$oIz)76^jGP+^Y{oPfclg+OLCOT-Of6M zi-XKc*_`?a27Jv|+y{lfQb`M_GHUh?K!m zz{}$>{5niU=!jKPpk8h$H$IF|wJ|RrQ%rJxX<0yYbj@Qyv4Fv4=m*|*xImb~L`w3Z-+)ED}Zzu(N1m(Rf~eEHmij)Pojgs%10S zm~>o82CI=9igP0diJ1+1wu>{;Aow-wkp+ygt1k)nLg$hpeceD~$W?;tvwKNHy7r zIAGJrRWW8#w#~7Cja8YMitCe~2hfdjn|#e1=)%z&Zqj$ETG8th-$})gxU%5+AXL^m zL><7daUnsa9~zoWhx)$shxK_cATp#uDwr5i*n!WXC1`2S)7~SyMiYO%*XR;)go0dd zqP(4D8m7Tg)9oS|SOW9TyyIf-@ep>V{Q;Z^-l`T+8j5~la;lefyhdu?`0O+c2<^V0 z7DjGDRRHbESOO&ah|zyK2M%fJx^9hb#I>5O3;_;$&ezYtgT3vfl6YHx(!#W0U-=UK zBV(x%&@|D~ooey(KDhu=A0%RDBn25D*F8jN{G*6u-$kf;oxksTjLq`$!j_s)FZQRzA74KN?d`Fb>k-bqJoXkU7f^w_;`*vTYHYxe z3We?eDG|3Z?%i)^=%uZFWS)r&3I(|hAi=y`p`%n*Dci3L>skMSo7JfFSJmC!Dc3fJ zjG5XRuz0kTbl%&3xN?8InzC@+MG6`mymvSy@lIuvQjtb5ycso}BuUdO?eR;MFMhV0 zA{(a0;^Vd*rBhSzzGH2KqN5QYa`U{CtVJW;;PK?%^6~L7!a3T8en&@_L@ts&wSILw zC30~wPKbbt8c#wN6CxG+rSUIy4r3I6(R|A40#Fo$Ydpa0G6P@_l!c{CagdXte@ZSa zp51ZI7BDG?VnKZ%=wy6m|KN5(a@O6eWqX9BX7s^BhYOwUy+rPOzQSNa5+JZ(BHVpI%qXQ*w0cSYM z62&X_^0{L9nxD$hP|!c(>T=%z>%M>NA5w<6fXBw=A7>3PraXj

#z2V#1c2FHGi` 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 SF=)be|@VHZM4^^bJNP2ZDW}E!( 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

BSK}>*D85M|DJ3xkUk-q(%P%eg|I)xk`mo)brHT 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 literal 0 HcmV?d00001 diff --git a/Screenshots/RedFlag Registration Tokens.jpg b/Screenshots/RedFlag Registration Tokens.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8dace6285494eccda8800386d6e34d2cfe2ad130 GIT binary patch literal 52444 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 Bd;I_a literal 0 HcmV?d00001 diff --git a/Screenshots/RedFlag Settings Page.jpg b/Screenshots/RedFlag Settings Page.jpg new file mode 100644 index 0000000000000000000000000000000000000000..600c98b03fccf939236d9f3b228c021d6efee1d6 GIT binary patch literal 69752 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 On8Uw70j-?h7XBZtPn<;n literal 0 HcmV?d00001 diff --git a/Screenshots/RedFlag Windows Agent History Extended.png b/Screenshots/RedFlag Windows Agent History Extended.png new file mode 100644 index 0000000000000000000000000000000000000000..c2a46464b2c2de6e40c0cd9f2cf159a1c3400143 GIT binary patch literal 114178 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 K==QU3tN#Tj_M(^o literal 0 HcmV?d00001 diff --git a/TEST-CLONE.md b/TEST-CLONE.md deleted file mode 100644 index 54b60f3..0000000 --- a/TEST-CLONE.md +++ /dev/null @@ -1,45 +0,0 @@ -# Test Fresh Clone Instructions - -## Prerequisites -- Go 1.21+ must be installed -- Docker & Docker Compose must be running - -## Quick Test on New Machine/Location - -```bash -# Clone fresh -git clone https://github.com/Fimeg/RedFlag.git -cd RedFlag - -# Docker deployment (recommended) -docker-compose up -d - -# One-time server setup -docker-compose exec server ./redflag-server --setup - -# Run database migrations -docker-compose exec server ./redflag-server --migrate - -# Restart server with config -docker-compose restart server - -# Test server: http://localhost:8080 -# Admin: http://localhost:8080/admin -``` - -## What Should Work -- ✅ Server setup wizard creates .env file -- ✅ Database migrations run without errors -- ✅ Server starts on port 8080 -- ✅ Admin interface accessible -- ✅ Can generate registration tokens -- ✅ Agent registers and appears in UI -- ✅ Agent shows system information -- ✅ Agent performs update scan - -## Expected Breaking Changes -Old agents won't work - need fresh registration with tokens. - -## Version Check -- Agent should report v0.1.16 -- Server should show v0.1.16 as latest version \ No newline at end of file diff --git a/aggregator-agent/NOTICE b/aggregator-agent/NOTICE new file mode 100644 index 0000000..ad12e81 --- /dev/null +++ b/aggregator-agent/NOTICE @@ -0,0 +1,13 @@ +RedFlag Agent +Copyright 2024-2025 + +This software includes code from the following third-party projects: + +--- + +windowsupdate +Copyright 2022 Zheng Dayu +Licensed under the Apache License, Version 2.0 +https://github.com/ceshihao/windowsupdate + +Included in: aggregator-agent/pkg/windowsupdate/ diff --git a/aggregator-agent/cmd/agent/main.go b/aggregator-agent/cmd/agent/main.go index 2b8df87..2ee0aff 100644 --- a/aggregator-agent/cmd/agent/main.go +++ b/aggregator-agent/cmd/agent/main.go @@ -16,12 +16,13 @@ import ( "github.com/Fimeg/RedFlag/aggregator-agent/internal/display" "github.com/Fimeg/RedFlag/aggregator-agent/internal/installer" "github.com/Fimeg/RedFlag/aggregator-agent/internal/scanner" + "github.com/Fimeg/RedFlag/aggregator-agent/internal/service" "github.com/Fimeg/RedFlag/aggregator-agent/internal/system" "github.com/google/uuid" ) const ( - AgentVersion = "0.1.16" // Enhanced configuration system with proxy support and registration tokens + AgentVersion = "0.1.17" // Fixed Linux disk detection to show all physical mount points (/, /home, etc.) ) // getConfigPath returns the platform-specific config path @@ -86,6 +87,13 @@ func main() { displayName := flag.String("name", "", "Display name for agent") insecureTLS := flag.Bool("insecure-tls", false, "Skip TLS certificate verification") exportFormat := flag.String("export", "", "Export format: json, csv") + + // Windows service management commands + installServiceCmd := flag.Bool("install-service", false, "Install as Windows service") + removeServiceCmd := flag.Bool("remove-service", false, "Remove Windows service") + startServiceCmd := flag.Bool("start-service", false, "Start Windows service") + stopServiceCmd := flag.Bool("stop-service", false, "Stop Windows service") + serviceStatusCmd := flag.Bool("service-status", false, "Show Windows service status") flag.Parse() // Handle version command @@ -95,6 +103,48 @@ func main() { os.Exit(0) } + // Handle Windows service management commands (only on Windows) + if runtime.GOOS == "windows" { + if *installServiceCmd { + if err := service.InstallService(); err != nil { + log.Fatalf("Failed to install service: %v", err) + } + fmt.Println("RedFlag service installed successfully") + os.Exit(0) + } + + if *removeServiceCmd { + if err := service.RemoveService(); err != nil { + log.Fatalf("Failed to remove service: %v", err) + } + fmt.Println("RedFlag service removed successfully") + os.Exit(0) + } + + if *startServiceCmd { + if err := service.StartService(); err != nil { + log.Fatalf("Failed to start service: %v", err) + } + fmt.Println("RedFlag service started successfully") + os.Exit(0) + } + + if *stopServiceCmd { + if err := service.StopService(); err != nil { + log.Fatalf("Failed to stop service: %v", err) + } + fmt.Println("RedFlag service stopped successfully") + os.Exit(0) + } + + if *serviceStatusCmd { + if err := service.ServiceStatus(); err != nil { + log.Fatalf("Failed to get service status: %v", err) + } + os.Exit(0) + } + } + // Parse tags from comma-separated string var tags []string if *tagsFlag != "" { @@ -197,7 +247,16 @@ func main() { log.Fatal("Agent not registered. Run with -register flag first.") } - // Start agent service + // Check if running as Windows service + if runtime.GOOS == "windows" && service.IsService() { + // Run as Windows service + if err := service.RunService(cfg); err != nil { + log.Fatal("Service failed:", err) + } + return + } + + // Start agent service (console mode) if err := runAgent(cfg); err != nil { log.Fatal("Agent failed:", err) } @@ -221,7 +280,8 @@ func registerAgent(cfg *config.Config, serverURL string) error { } } - apiClient := client.NewClient(serverURL, "") + // Use registration token from config if available + apiClient := client.NewClient(serverURL, cfg.RegistrationToken) // Create metadata with system information metadata := map[string]string{ diff --git a/aggregator-agent/go.mod b/aggregator-agent/go.mod index b61c112..671578e 100644 --- a/aggregator-agent/go.mod +++ b/aggregator-agent/go.mod @@ -1,10 +1,12 @@ module github.com/Fimeg/RedFlag/aggregator-agent -go 1.21 +go 1.23.0 require ( github.com/docker/docker v27.4.1+incompatible + github.com/go-ole/go-ole v1.3.0 github.com/google/uuid v1.6.0 + github.com/scjalliance/comshim v0.0.0-20250111221056-b2ef9d8d7e0f ) require ( @@ -16,7 +18,6 @@ require ( github.com/felixge/httpsnoop v1.0.4 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-ole/go-ole v1.3.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect github.com/moby/term v0.5.2 // indirect @@ -24,7 +25,6 @@ require ( github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.1 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/scjalliance/comshim v0.0.0-20250111221056-b2ef9d8d7e0f // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 // indirect go.opentelemetry.io/otel v1.38.0 // indirect @@ -32,6 +32,6 @@ require ( go.opentelemetry.io/otel/metric v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect golang.org/x/sys v0.35.0 // indirect - golang.org/x/time v0.14.0 // indirect + golang.org/x/time v0.5.0 // indirect gotest.tools/v3 v3.5.2 // indirect ) diff --git a/aggregator-agent/go.sum b/aggregator-agent/go.sum index 20ed85e..2840a43 100644 --- a/aggregator-agent/go.sum +++ b/aggregator-agent/go.sum @@ -105,8 +105,8 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= -golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= -golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= +golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= diff --git a/aggregator-agent/install.sh b/aggregator-agent/install.sh index b900743..a52a053 100755 --- a/aggregator-agent/install.sh +++ b/aggregator-agent/install.sh @@ -56,6 +56,13 @@ install_binary() { chmod 755 "$AGENT_BINARY" chown root:root "$AGENT_BINARY" echo "✓ Agent binary installed" + + # Set SELinux context for binary if SELinux is enabled + if command -v getenforce >/dev/null 2>&1 && [ "$(getenforce)" != "Disabled" ]; then + echo "SELinux detected, setting file context for binary..." + restorecon -v "$AGENT_BINARY" 2>/dev/null || true + echo "✓ SELinux context set for binary" + fi } # Function to install sudoers configuration @@ -167,6 +174,13 @@ register_agent() { # Create config directory mkdir -p /etc/aggregator + # Set SELinux context for config directory if SELinux is enabled + if command -v getenforce >/dev/null 2>&1 && [ "$(getenforce)" != "Disabled" ]; then + echo "Setting SELinux context for config directory..." + restorecon -Rv /etc/aggregator 2>/dev/null || true + echo "✓ SELinux context set for config directory" + fi + # Register agent (run as regular binary, not as service) if "$AGENT_BINARY" -register -server "$server_url"; then echo "✓ Agent registered successfully" diff --git a/aggregator-agent/internal/client/client.go b/aggregator-agent/internal/client/client.go index fc886ac..afef686 100644 --- a/aggregator-agent/internal/client/client.go +++ b/aggregator-agent/internal/client/client.go @@ -46,12 +46,13 @@ func (c *Client) SetToken(token string) { // RegisterRequest is the payload for agent registration type RegisterRequest struct { - Hostname string `json:"hostname"` - OSType string `json:"os_type"` - OSVersion string `json:"os_version"` - OSArchitecture string `json:"os_architecture"` - AgentVersion string `json:"agent_version"` - Metadata map[string]string `json:"metadata"` + Hostname string `json:"hostname"` + OSType string `json:"os_type"` + OSVersion string `json:"os_version"` + OSArchitecture string `json:"os_architecture"` + AgentVersion string `json:"agent_version"` + RegistrationToken string `json:"registration_token,omitempty"` // Fallback method + Metadata map[string]string `json:"metadata"` } // RegisterResponse is returned after successful registration @@ -66,6 +67,12 @@ type RegisterResponse struct { func (c *Client) Register(req RegisterRequest) (*RegisterResponse, error) { url := fmt.Sprintf("%s/api/v1/agents/register", c.baseURL) + // If we have a registration token, include it in the request + // Registration tokens are longer than regular JWT tokens (usually 64 chars vs JWT ~400 chars) + if c.token != "" && len(c.token) > 40 { + req.RegistrationToken = c.token + } + body, err := json.Marshal(req) if err != nil { return nil, err @@ -77,6 +84,12 @@ func (c *Client) Register(req RegisterRequest) (*RegisterResponse, error) { } httpReq.Header.Set("Content-Type", "application/json") + // Add Authorization header if we have a registration token (preferred method) + // Registration tokens are longer than regular JWT tokens (usually 64 chars vs JWT ~400 chars) + if c.token != "" && len(c.token) > 40 { + httpReq.Header.Set("Authorization", "Bearer "+c.token) + } + resp, err := c.http.Do(httpReq) if err != nil { return nil, err diff --git a/aggregator-agent/internal/config/config.go b/aggregator-agent/internal/config/config.go index 95c2a7a..3a16461 100644 --- a/aggregator-agent/internal/config/config.go +++ b/aggregator-agent/internal/config/config.go @@ -349,6 +349,12 @@ func (c *Config) Save(configPath string) error { return fmt.Errorf("failed to marshal config: %w", err) } + // Create parent directory if it doesn't exist + dir := filepath.Dir(configPath) + if err := os.MkdirAll(dir, 0755); err != nil { + return fmt.Errorf("failed to create config directory: %w", err) + } + if err := os.WriteFile(configPath, data, 0600); err != nil { return fmt.Errorf("failed to write config: %w", err) } diff --git a/aggregator-agent/internal/service/service_stub.go b/aggregator-agent/internal/service/service_stub.go new file mode 100644 index 0000000..055da04 --- /dev/null +++ b/aggregator-agent/internal/service/service_stub.go @@ -0,0 +1,52 @@ +//go:build !windows + +package service + +import ( + "fmt" + "runtime" + "github.com/Fimeg/RedFlag/aggregator-agent/internal/config" +) + +// Stub implementations for non-Windows platforms + +// RunService executes the agent as a Windows service (stub for non-Windows) +func RunService(cfg *config.Config) error { + return fmt.Errorf("Windows service mode is only available on Windows, current OS: %s", runtime.GOOS) +} + +// IsService returns true if running as Windows service (stub for non-Windows) +func IsService() bool { + return false +} + +// InstallService installs the agent as a Windows service (stub for non-Windows) +func InstallService() error { + return fmt.Errorf("Windows service installation is only available on Windows, current OS: %s", runtime.GOOS) +} + +// RemoveService removes the Windows service (stub for non-Windows) +func RemoveService() error { + return fmt.Errorf("Windows service removal is only available on Windows, current OS: %s", runtime.GOOS) +} + +// StartService starts the Windows service (stub for non-Windows) +func StartService() error { + return fmt.Errorf("Windows service management is only available on Windows, current OS: %s", runtime.GOOS) +} + +// StopService stops the Windows service (stub for non-Windows) +func StopService() error { + return fmt.Errorf("Windows service management is only available on Windows, current OS: %s", runtime.GOOS) +} + +// ServiceStatus returns the current status of the Windows service (stub for non-Windows) +func ServiceStatus() error { + return fmt.Errorf("Windows service management is only available on Windows, current OS: %s", runtime.GOOS) +} + +// RunConsole runs the agent in console mode with signal handling +func RunConsole(cfg *config.Config) error { + // For non-Windows, just run normally + return fmt.Errorf("Console mode is handled by main application logic on %s", runtime.GOOS) +} \ No newline at end of file diff --git a/aggregator-agent/internal/service/windows.go b/aggregator-agent/internal/service/windows.go new file mode 100644 index 0000000..02cbf6a --- /dev/null +++ b/aggregator-agent/internal/service/windows.go @@ -0,0 +1,1329 @@ +//go:build windows + +package service + +import ( + "fmt" + "log" + "math/rand" + "os" + "os/signal" + "strings" + "syscall" + "time" + + "github.com/Fimeg/RedFlag/aggregator-agent/internal/client" + "github.com/Fimeg/RedFlag/aggregator-agent/internal/config" + "github.com/Fimeg/RedFlag/aggregator-agent/internal/installer" + "github.com/Fimeg/RedFlag/aggregator-agent/internal/scanner" + "github.com/Fimeg/RedFlag/aggregator-agent/internal/system" + "golang.org/x/sys/windows/svc" + "golang.org/x/sys/windows/svc/debug" + "golang.org/x/sys/windows/svc/eventlog" + "golang.org/x/sys/windows/svc/mgr" +) + +var ( + elog debug.Log + serviceName = "RedFlagAgent" +) + +const ( + AgentVersion = "0.1.16" // Enhanced configuration system with proxy support and registration tokens +) + +type redflagService struct { + agent *config.Config + stop chan struct{} +} + +func (s *redflagService) Execute(args []string, r <-chan svc.ChangeRequest, changes chan<- svc.Status) (ssec bool, errno uint32) { + const cmdsAccepted = svc.AcceptStop | svc.AcceptShutdown | svc.AcceptPauseAndContinue + changes <- svc.Status{State: svc.StartPending} + + // Initialize event logging + var err error + elog, err = eventlog.Open(serviceName) + if err != nil { + log.Printf("Failed to open event log: %v", err) + elog = debug.New("RedFlagAgent") + } + defer elog.Close() + + elog.Info(1, fmt.Sprintf("Starting %s service", serviceName)) + + // Create stop channel + s.stop = make(chan struct{}) + + // Start the agent logic in a goroutine + go s.runAgent() + + // Signal that service is running + changes <- svc.Status{State: svc.Running, Accepts: cmdsAccepted} + + elog.Info(1, fmt.Sprintf("%s service is now running", serviceName)) + + // Handle service control requests +loop: + for { + select { + case c := <-r: + switch c.Cmd { + case svc.Interrogate: + changes <- c.CurrentStatus + case svc.Stop, svc.Shutdown: + elog.Info(1, fmt.Sprintf("Stopping %s service", serviceName)) + changes <- svc.Status{State: svc.StopPending} + close(s.stop) // Signal agent to stop gracefully + break loop + case svc.Pause: + elog.Info(1, fmt.Sprintf("Pausing %s service", serviceName)) + changes <- svc.Status{State: svc.Paused, Accepts: cmdsAccepted} + case svc.Continue: + elog.Info(1, fmt.Sprintf("Continuing %s service", serviceName)) + changes <- svc.Status{State: svc.Running, Accepts: cmdsAccepted} + default: + elog.Error(1, fmt.Sprintf("Unexpected control request #%d", c)) + } + case <-s.stop: + break loop + } + } + + elog.Info(1, fmt.Sprintf("%s service stopped", serviceName)) + changes <- svc.Status{State: svc.Stopped} + return +} + +func (s *redflagService) runAgent() { + log.Printf("🚩 RedFlag Agent starting in service mode...") + log.Printf("==================================================================") + log.Printf("📋 AGENT ID: %s", s.agent.AgentID) + log.Printf("🌐 SERVER: %s", s.agent.ServerURL) + log.Printf("⏱️ CHECK-IN INTERVAL: %ds", s.agent.CheckInInterval) + log.Printf("==================================================================") + + // Initialize API client + apiClient := client.NewClient(s.agent.ServerURL, s.agent.Token) + + // Initialize scanners + aptScanner := scanner.NewAPTScanner() + dnfScanner := scanner.NewDNFScanner() + dockerScanner, _ := scanner.NewDockerScanner() + windowsUpdateScanner := scanner.NewWindowsUpdateScanner() + wingetScanner := scanner.NewWingetScanner() + + // System info tracking + var lastSystemInfoUpdate time.Time + const systemInfoUpdateInterval = 1 * time.Hour // Update detailed system info every hour + + // Main check-in loop with service stop handling + for { + select { + case <-s.stop: + log.Printf("Received stop signal, shutting down gracefully...") + elog.Info(1, "Agent shutting down gracefully") + return + default: + // Add jitter to prevent thundering herd + jitter := time.Duration(rand.Intn(30)) * time.Second + time.Sleep(jitter) + + // Check if we need to send detailed system info update + if time.Since(lastSystemInfoUpdate) >= systemInfoUpdateInterval { + log.Printf("Updating detailed system information...") + if err := s.reportSystemInfo(apiClient); err != nil { + log.Printf("Failed to report system info: %v\n", err) + elog.Error(1, fmt.Sprintf("Failed to report system info: %v", err)) + } else { + lastSystemInfoUpdate = time.Now() + log.Printf("✓ System information updated\n") + elog.Info(1, "System information updated successfully") + } + } + + log.Printf("Checking in with server...") + + // Collect lightweight system metrics + sysMetrics, err := system.GetLightweightMetrics() + var metrics *client.SystemMetrics + if err == nil { + metrics = &client.SystemMetrics{ + CPUPercent: sysMetrics.CPUPercent, + MemoryPercent: sysMetrics.MemoryPercent, + MemoryUsedGB: sysMetrics.MemoryUsedGB, + MemoryTotalGB: sysMetrics.MemoryTotalGB, + DiskUsedGB: sysMetrics.DiskUsedGB, + DiskTotalGB: sysMetrics.DiskTotalGB, + DiskPercent: sysMetrics.DiskPercent, + Uptime: sysMetrics.Uptime, + Version: AgentVersion, + } + } + + // Add heartbeat status to metrics metadata if available + if metrics != nil && s.agent.RapidPollingEnabled { + // Check if rapid polling is still valid + if time.Now().Before(s.agent.RapidPollingUntil) { + if metrics.Metadata == nil { + metrics.Metadata = make(map[string]interface{}) + } + metrics.Metadata["rapid_polling_enabled"] = true + metrics.Metadata["rapid_polling_until"] = s.agent.RapidPollingUntil.Format(time.RFC3339) + metrics.Metadata["rapid_polling_duration_minutes"] = int(time.Until(s.agent.RapidPollingUntil).Minutes()) + } else { + // Heartbeat expired, disable it + s.agent.RapidPollingEnabled = false + s.agent.RapidPollingUntil = time.Time{} + } + } + + // Get commands from server (with optional metrics) + commands, err := apiClient.GetCommands(s.agent.AgentID, metrics) + if err != nil { + // Try to renew token if we got a 401 error + newClient, renewErr := s.renewTokenIfNeeded(apiClient, err) + if renewErr != nil { + log.Printf("Check-in unsuccessful and token renewal failed: %v\n", renewErr) + elog.Error(1, fmt.Sprintf("Check-in failed and token renewal failed: %v", renewErr)) + time.Sleep(time.Duration(s.getCurrentPollingInterval()) * time.Second) + continue + } + // If token was renewed, update client and retry + if newClient != apiClient { + log.Printf("🔄 Retrying check-in with renewed token...") + elog.Info(1, "Retrying check-in with renewed token") + apiClient = newClient + commands, err = apiClient.GetCommands(s.agent.AgentID, metrics) + if err != nil { + log.Printf("Check-in unsuccessful even after token renewal: %v\n", err) + elog.Error(1, fmt.Sprintf("Check-in failed after token renewal: %v", err)) + time.Sleep(time.Duration(s.getCurrentPollingInterval()) * time.Second) + continue + } + } else { + log.Printf("Check-in unsuccessful: %v\n", err) + elog.Error(1, fmt.Sprintf("Check-in unsuccessful: %v", err)) + time.Sleep(time.Duration(s.getCurrentPollingInterval()) * time.Second) + continue + } + } + + if len(commands) == 0 { + log.Printf("Check-in successful - no new commands") + elog.Info(1, "Check-in successful - no new commands") + } else { + log.Printf("Check-in successful - received %d command(s)", len(commands)) + elog.Info(1, fmt.Sprintf("Check-in successful - received %d command(s)", len(commands))) + } + + // Process each command with full implementation + for _, cmd := range commands { + log.Printf("Processing command: %s (%s)\n", cmd.Type, cmd.ID) + elog.Info(1, fmt.Sprintf("Processing command: %s (%s)", cmd.Type, cmd.ID)) + + switch cmd.Type { + case "scan_updates": + if err := s.handleScanUpdates(apiClient, aptScanner, dnfScanner, dockerScanner, windowsUpdateScanner, wingetScanner, cmd.ID); err != nil { + log.Printf("Error scanning updates: %v\n", err) + elog.Error(1, fmt.Sprintf("Error scanning updates: %v", err)) + } + case "collect_specs": + log.Println("Spec collection not yet implemented") + case "dry_run_update": + if err := s.handleDryRunUpdate(apiClient, cmd.ID, cmd.Params); err != nil { + log.Printf("Error dry running update: %v\n", err) + elog.Error(1, fmt.Sprintf("Error dry running update: %v", err)) + } + case "install_updates": + if err := s.handleInstallUpdates(apiClient, cmd.ID, cmd.Params); err != nil { + log.Printf("Error installing updates: %v\n", err) + elog.Error(1, fmt.Sprintf("Error installing updates: %v", err)) + } + case "confirm_dependencies": + if err := s.handleConfirmDependencies(apiClient, cmd.ID, cmd.Params); err != nil { + log.Printf("Error confirming dependencies: %v\n", err) + elog.Error(1, fmt.Sprintf("Error confirming dependencies: %v", err)) + } + case "enable_heartbeat": + if err := s.handleEnableHeartbeat(apiClient, cmd.ID, cmd.Params); err != nil { + log.Printf("[Heartbeat] Error enabling heartbeat: %v\n", err) + elog.Error(1, fmt.Sprintf("Error enabling heartbeat: %v", err)) + } + case "disable_heartbeat": + if err := s.handleDisableHeartbeat(apiClient, cmd.ID); err != nil { + log.Printf("[Heartbeat] Error disabling heartbeat: %v\n", err) + elog.Error(1, fmt.Sprintf("Error disabling heartbeat: %v", err)) + } + default: + log.Printf("Unknown command type: %s\n", cmd.Type) + elog.Error(1, fmt.Sprintf("Unknown command type: %s", cmd.Type)) + } + } + + // Wait for next check-in with stop signal checking + select { + case <-s.stop: + log.Printf("Received stop signal during wait, shutting down gracefully...") + elog.Info(1, "Agent shutting down gracefully during wait period") + return + case <-time.After(time.Duration(s.getCurrentPollingInterval()) * time.Second): + // Continue to next iteration + } + } + } +} + +// RunService executes the agent as a Windows service +func RunService(cfg *config.Config) error { + elog, err := eventlog.Open(serviceName) + if err != nil { + return fmt.Errorf("failed to open event log: %w", err) + } + defer elog.Close() + + elog.Info(1, fmt.Sprintf("Starting %s service", serviceName)) + + s := &redflagService{ + agent: cfg, + } + + // Run as service + if err := svc.Run(serviceName, s); err != nil { + elog.Error(1, fmt.Sprintf("%s service failed: %v", serviceName, err)) + return fmt.Errorf("service failed: %w", err) + } + + elog.Info(1, fmt.Sprintf("%s service stopped", serviceName)) + return nil +} + +// IsService returns true if running as Windows service +func IsService() bool { + isService, _ := svc.IsWindowsService() + return isService +} + +// InstallService installs the agent as a Windows service +func InstallService() error { + exePath, err := os.Executable() + if err != nil { + return fmt.Errorf("failed to get executable path: %w", err) + } + + m, err := mgr.Connect() + if err != nil { + return fmt.Errorf("failed to connect to service manager: %w", err) + } + defer m.Disconnect() + + s, err := m.OpenService(serviceName) + if err == nil { + s.Close() + return fmt.Errorf("service %s already exists", serviceName) + } + + // Create service with proper configuration + s, err = m.CreateService(serviceName, exePath, mgr.Config{ + DisplayName: "RedFlag Update Agent", + Description: "RedFlag agent for automated system updates and monitoring", + StartType: mgr.StartAutomatic, + Dependencies: []string{"Tcpip", "Dnscache"}, + }) + if err != nil { + return fmt.Errorf("failed to create service: %w", err) + } + defer s.Close() + + // Set recovery actions + if err := s.SetRecoveryActions([]mgr.RecoveryAction{ + {Type: mgr.ServiceRestart, Delay: 30 * time.Second}, + {Type: mgr.ServiceRestart, Delay: 60 * time.Second}, + {Type: mgr.ServiceRestart, Delay: 120 * time.Second}, + }, 0); err != nil { + return fmt.Errorf("failed to set recovery actions: %w", err) + } + + log.Printf("Service %s installed successfully", serviceName) + return nil +} + +// RemoveService removes the Windows service +func RemoveService() error { + m, err := mgr.Connect() + if err != nil { + return fmt.Errorf("failed to connect to service manager: %w", err) + } + defer m.Disconnect() + + s, err := m.OpenService(serviceName) + if err != nil { + return fmt.Errorf("service %s not found", serviceName) + } + defer s.Close() + + // Stop service if running + status, err := s.Query() + if err != nil { + return fmt.Errorf("failed to query service status: %w", err) + } + + if status.State != svc.Stopped { + if _, err := s.Control(svc.Stop); err != nil { + return fmt.Errorf("failed to stop service: %w", err) + } + log.Printf("Stopping service...") + time.Sleep(5 * time.Second) // Wait for service to stop + } + + // Delete service + if err := s.Delete(); err != nil { + return fmt.Errorf("failed to delete service: %w", err) + } + + log.Printf("Service %s removed successfully", serviceName) + return nil +} + +// StartService starts the Windows service +func StartService() error { + m, err := mgr.Connect() + if err != nil { + return fmt.Errorf("failed to connect to service manager: %w", err) + } + defer m.Disconnect() + + s, err := m.OpenService(serviceName) + if err != nil { + return fmt.Errorf("service %s not found", serviceName) + } + defer s.Close() + + if err := s.Start(); err != nil { + return fmt.Errorf("failed to start service: %w", err) + } + + log.Printf("Service %s started successfully", serviceName) + return nil +} + +// StopService stops the Windows service +func StopService() error { + m, err := mgr.Connect() + if err != nil { + return fmt.Errorf("failed to connect to service manager: %w", err) + } + defer m.Disconnect() + + s, err := m.OpenService(serviceName) + if err != nil { + return fmt.Errorf("service %s not found", serviceName) + } + defer s.Close() + + if _, err := s.Control(svc.Stop); err != nil { + return fmt.Errorf("failed to stop service: %w", err) + } + + log.Printf("Service %s stopped successfully", serviceName) + return nil +} + +// ServiceStatus returns the current status of the Windows service +func ServiceStatus() error { + m, err := mgr.Connect() + if err != nil { + return fmt.Errorf("failed to connect to service manager: %w", err) + } + defer m.Disconnect() + + s, err := m.OpenService(serviceName) + if err != nil { + return fmt.Errorf("service %s not found", serviceName) + } + defer s.Close() + + status, err := s.Query() + if err != nil { + return fmt.Errorf("failed to query service status: %w", err) + } + + state := "UNKNOWN" + switch status.State { + case svc.Stopped: + state = "STOPPED" + case svc.StartPending: + state = "STARTING" + case svc.Running: + state = "RUNNING" + case svc.StopPending: + state = "STOPPING" + case svc.Paused: + state = "PAUSED" + case svc.PausePending: + state = "PAUSING" + case svc.ContinuePending: + state = "RESUMING" + } + + log.Printf("Service %s status: %s", serviceName, state) + return nil +} + +// Helper functions - these implement the same functionality as in main.go but adapted for service mode + +// getCurrentPollingInterval returns the appropriate polling interval based on rapid mode +func (s *redflagService) getCurrentPollingInterval() int { + // Check if rapid polling mode is active and not expired + if s.agent.RapidPollingEnabled && time.Now().Before(s.agent.RapidPollingUntil) { + return 5 // Rapid polling: 5 seconds + } + + // Check if rapid polling has expired and clean up + if s.agent.RapidPollingEnabled && time.Now().After(s.agent.RapidPollingUntil) { + s.agent.RapidPollingEnabled = false + s.agent.RapidPollingUntil = time.Time{} + // Save the updated config to clean up expired rapid mode + configPath := s.getConfigPath() + if err := s.agent.Save(configPath); err != nil { + log.Printf("Warning: Failed to cleanup expired rapid polling mode: %v", err) + } + } + + return s.agent.CheckInInterval // Normal polling: 5 minutes (300 seconds) by default +} + +// getConfigPath returns the platform-specific config path +func (s *redflagService) getConfigPath() string { + return "C:\\ProgramData\\RedFlag\\config.json" +} + +// renewTokenIfNeeded handles 401 errors by renewing the agent token using refresh token +func (s *redflagService) renewTokenIfNeeded(apiClient *client.Client, err error) (*client.Client, error) { + if err != nil && strings.Contains(err.Error(), "401 Unauthorized") { + log.Printf("🔄 Access token expired - attempting renewal with refresh token...") + elog.Info(1, "Access token expired - attempting renewal with refresh token") + + // Check if we have a refresh token + if s.agent.RefreshToken == "" { + log.Printf("❌ No refresh token available - re-registration required") + elog.Error(1, "No refresh token available - re-registration required") + return nil, fmt.Errorf("refresh token missing - please re-register agent") + } + + // Create temporary client without token for renewal + tempClient := client.NewClient(s.agent.ServerURL, "") + + // Attempt to renew access token using refresh token + if err := tempClient.RenewToken(s.agent.AgentID, s.agent.RefreshToken); err != nil { + log.Printf("❌ Refresh token renewal failed: %v", err) + elog.Error(1, fmt.Sprintf("Refresh token renewal failed: %v", err)) + log.Printf("💡 Refresh token may be expired (>90 days) - re-registration required") + return nil, fmt.Errorf("refresh token renewal failed: %w - please re-register agent", err) + } + + // Update config with new access token (agent ID and refresh token stay the same!) + s.agent.Token = tempClient.GetToken() + + // Save updated config + configPath := s.getConfigPath() + if err := s.agent.Save(configPath); err != nil { + log.Printf("⚠️ Warning: Failed to save renewed access token: %v", err) + elog.Error(1, fmt.Sprintf("Failed to save renewed access token: %v", err)) + } + + log.Printf("✅ Access token renewed successfully - agent ID maintained: %s", s.agent.AgentID) + elog.Info(1, fmt.Sprintf("Access token renewed successfully - agent ID maintained: %s", s.agent.AgentID)) + return tempClient, nil + } + + // Return original client if no 401 error + return apiClient, nil +} + +// reportSystemInfo collects and reports detailed system information to the server +func (s *redflagService) reportSystemInfo(apiClient *client.Client) error { + // Collect detailed system information + sysInfo, err := system.GetSystemInfo(AgentVersion) + if err != nil { + return fmt.Errorf("failed to get system info: %w", err) + } + + // Create system info report + report := client.SystemInfoReport{ + Timestamp: time.Now(), + CPUModel: sysInfo.CPUInfo.ModelName, + CPUCores: sysInfo.CPUInfo.Cores, + CPUThreads: sysInfo.CPUInfo.Threads, + MemoryTotal: sysInfo.MemoryInfo.Total, + DiskTotal: uint64(0), + DiskUsed: uint64(0), + IPAddress: sysInfo.IPAddress, + Processes: sysInfo.RunningProcesses, + Uptime: sysInfo.Uptime, + Metadata: make(map[string]interface{}), + } + + // Add primary disk info + if len(sysInfo.DiskInfo) > 0 { + primaryDisk := sysInfo.DiskInfo[0] + report.DiskTotal = primaryDisk.Total + report.DiskUsed = primaryDisk.Used + report.Metadata["disk_mount"] = primaryDisk.Mountpoint + report.Metadata["disk_filesystem"] = primaryDisk.Filesystem + } + + // Add collection timestamp and additional metadata + report.Metadata["collected_at"] = time.Now().Format(time.RFC3339) + report.Metadata["hostname"] = sysInfo.Hostname + report.Metadata["os_type"] = sysInfo.OSType + report.Metadata["os_version"] = sysInfo.OSVersion + report.Metadata["os_architecture"] = sysInfo.OSArchitecture + + // Add any existing metadata from system info + for key, value := range sysInfo.Metadata { + report.Metadata[key] = value + } + + // Report to server + if err := apiClient.ReportSystemInfo(s.agent.AgentID, report); err != nil { + return fmt.Errorf("failed to report system info: %w", err) + } + + return nil +} + +// Command handling functions - these need to be fully implemented + +func (s *redflagService) handleScanUpdates(apiClient *client.Client, aptScanner *scanner.APTScanner, dnfScanner *scanner.DNFScanner, dockerScanner *scanner.DockerScanner, windowsUpdateScanner *scanner.WindowsUpdateScanner, wingetScanner *scanner.WingetScanner, commandID string) error { + log.Println("Scanning for updates...") + elog.Info(1, "Starting update scan") + + var allUpdates []client.UpdateReportItem + var scanErrors []string + var scanResults []string + + // Scan APT updates + if aptScanner.IsAvailable() { + log.Println(" - Scanning APT packages...") + updates, err := aptScanner.Scan() + if err != nil { + errorMsg := fmt.Sprintf("APT scan failed: %v", err) + log.Printf(" %s\n", errorMsg) + elog.Error(1, errorMsg) + scanErrors = append(scanErrors, errorMsg) + } else { + resultMsg := fmt.Sprintf("Found %d APT updates", len(updates)) + log.Printf(" %s\n", resultMsg) + elog.Info(1, resultMsg) + scanResults = append(scanResults, resultMsg) + allUpdates = append(allUpdates, updates...) + } + } else { + scanResults = append(scanResults, "APT scanner not available") + } + + // Scan DNF updates + if dnfScanner.IsAvailable() { + log.Println(" - Scanning DNF packages...") + updates, err := dnfScanner.Scan() + if err != nil { + errorMsg := fmt.Sprintf("DNF scan failed: %v", err) + log.Printf(" %s\n", errorMsg) + elog.Error(1, errorMsg) + scanErrors = append(scanErrors, errorMsg) + } else { + resultMsg := fmt.Sprintf("Found %d DNF updates", len(updates)) + log.Printf(" %s\n", resultMsg) + elog.Info(1, resultMsg) + scanResults = append(scanResults, resultMsg) + allUpdates = append(allUpdates, updates...) + } + } else { + scanResults = append(scanResults, "DNF scanner not available") + } + + // Scan Docker updates + if dockerScanner != nil && dockerScanner.IsAvailable() { + log.Println(" - Scanning Docker images...") + updates, err := dockerScanner.Scan() + if err != nil { + errorMsg := fmt.Sprintf("Docker scan failed: %v", err) + log.Printf(" %s\n", errorMsg) + elog.Error(1, errorMsg) + scanErrors = append(scanErrors, errorMsg) + } else { + resultMsg := fmt.Sprintf("Found %d Docker image updates", len(updates)) + log.Printf(" %s\n", resultMsg) + elog.Info(1, resultMsg) + scanResults = append(scanResults, resultMsg) + allUpdates = append(allUpdates, updates...) + } + } else { + scanResults = append(scanResults, "Docker scanner not available") + } + + // Scan Windows updates + if windowsUpdateScanner.IsAvailable() { + log.Println(" - Scanning Windows updates...") + updates, err := windowsUpdateScanner.Scan() + if err != nil { + errorMsg := fmt.Sprintf("Windows Update scan failed: %v", err) + log.Printf(" %s\n", errorMsg) + elog.Error(1, errorMsg) + scanErrors = append(scanErrors, errorMsg) + } else { + resultMsg := fmt.Sprintf("Found %d Windows updates", len(updates)) + log.Printf(" %s\n", resultMsg) + elog.Info(1, resultMsg) + scanResults = append(scanResults, resultMsg) + allUpdates = append(allUpdates, updates...) + } + } else { + scanResults = append(scanResults, "Windows Update scanner not available") + } + + // Scan Winget packages + if wingetScanner.IsAvailable() { + log.Println(" - Scanning Winget packages...") + updates, err := wingetScanner.Scan() + if err != nil { + errorMsg := fmt.Sprintf("Winget scan failed: %v", err) + log.Printf(" %s\n", errorMsg) + elog.Error(1, errorMsg) + scanErrors = append(scanErrors, errorMsg) + } else { + resultMsg := fmt.Sprintf("Found %d Winget package updates", len(updates)) + log.Printf(" %s\n", resultMsg) + elog.Info(1, resultMsg) + scanResults = append(scanResults, resultMsg) + allUpdates = append(allUpdates, updates...) + } + } else { + scanResults = append(scanResults, "Winget scanner not available") + } + + // Report scan results to server (both successes and failures) + success := len(allUpdates) > 0 || len(scanErrors) == 0 + var combinedOutput string + + // Combine all scan results + if len(scanResults) > 0 { + combinedOutput += "Scan Results:\n" + strings.Join(scanResults, "\n") + } + if len(scanErrors) > 0 { + if combinedOutput != "" { + combinedOutput += "\n" + } + combinedOutput += "Scan Errors:\n" + strings.Join(scanErrors, "\n") + } + if len(allUpdates) > 0 { + if combinedOutput != "" { + combinedOutput += "\n" + } + combinedOutput += fmt.Sprintf("Total Updates Found: %d", len(allUpdates)) + } + + // Create scan log entry + logReport := client.LogReport{ + CommandID: commandID, + Action: "scan_updates", + Result: map[bool]string{true: "success", false: "failure"}[success], + Stdout: combinedOutput, + Stderr: strings.Join(scanErrors, "\n"), + ExitCode: map[bool]int{true: 0, false: 1}[success], + DurationSeconds: 0, // Could track scan duration if needed + } + + // Report the scan log + if err := apiClient.ReportLog(s.agent.AgentID, logReport); err != nil { + log.Printf("Failed to report scan log: %v\n", err) + elog.Error(1, fmt.Sprintf("Failed to report scan log: %v", err)) + // Continue anyway - updates are more important + } + + // Report updates to server if any were found + if len(allUpdates) > 0 { + report := client.UpdateReport{ + CommandID: commandID, + Timestamp: time.Now(), + Updates: allUpdates, + } + + if err := apiClient.ReportUpdates(s.agent.AgentID, report); err != nil { + return fmt.Errorf("failed to report updates: %w", err) + } + + log.Printf("✓ Reported %d updates to server\n", len(allUpdates)) + elog.Info(1, fmt.Sprintf("Reported %d updates to server", len(allUpdates))) + } else { + log.Println("✓ No updates found") + elog.Info(1, "No updates found") + } + + // Return error if there were any scan failures + if len(scanErrors) > 0 && len(allUpdates) == 0 { + return fmt.Errorf("all scanners failed: %s", strings.Join(scanErrors, "; ")) + } + + return nil +} + +func (s *redflagService) handleDryRunUpdate(apiClient *client.Client, commandID string, params map[string]interface{}) error { + log.Println("Performing dry run update...") + elog.Info(1, "Starting dry run update") + + // Parse parameters + packageType := "" + packageName := "" + + if pt, ok := params["package_type"].(string); ok { + packageType = pt + } + if pn, ok := params["package_name"].(string); ok { + packageName = pn + } + + // Validate parameters + if packageType == "" || packageName == "" { + err := fmt.Errorf("package_type and package_name parameters are required") + elog.Error(1, err.Error()) + return err + } + + // Create installer based on package type + inst, err := installer.InstallerFactory(packageType) + if err != nil { + err := fmt.Errorf("failed to create installer for package type %s: %w", packageType, err) + elog.Error(1, err.Error()) + return err + } + + // Check if installer is available + if !inst.IsAvailable() { + err := fmt.Errorf("%s installer is not available on this system", packageType) + elog.Error(1, err.Error()) + return err + } + + // Perform dry run + log.Printf("Dry running package: %s (type: %s)", packageName, packageType) + elog.Info(1, fmt.Sprintf("Dry running package: %s (type: %s)", packageName, packageType)) + + result, err := inst.DryRun(packageName) + if err != nil { + // Report dry run failure + logReport := client.LogReport{ + CommandID: commandID, + Action: "dry_run", + Result: "failed", + Stdout: "", + Stderr: fmt.Sprintf("Dry run error: %v", err), + ExitCode: 1, + DurationSeconds: 0, + } + + if reportErr := apiClient.ReportLog(s.agent.AgentID, logReport); reportErr != nil { + log.Printf("Failed to report dry run failure: %v\n", reportErr) + elog.Error(1, fmt.Sprintf("Failed to report dry run failure: %v", reportErr)) + } + + return fmt.Errorf("dry run failed: %w", err) + } + + // Convert installer.InstallResult to client.InstallResult for reporting + clientResult := &client.InstallResult{ + Success: result.Success, + ErrorMessage: result.ErrorMessage, + Stdout: result.Stdout, + Stderr: result.Stderr, + ExitCode: result.ExitCode, + DurationSeconds: result.DurationSeconds, + Action: result.Action, + PackagesInstalled: result.PackagesInstalled, + ContainersUpdated: result.ContainersUpdated, + Dependencies: result.Dependencies, + IsDryRun: true, + } + + // Report dependencies back to server + depReport := client.DependencyReport{ + PackageName: packageName, + PackageType: packageType, + Dependencies: result.Dependencies, + UpdateID: params["update_id"].(string), + DryRunResult: clientResult, + } + + if reportErr := apiClient.ReportDependencies(s.agent.AgentID, depReport); reportErr != nil { + log.Printf("Failed to report dependencies: %v\n", reportErr) + elog.Error(1, fmt.Sprintf("Failed to report dependencies: %v", reportErr)) + return fmt.Errorf("failed to report dependencies: %w", reportErr) + } + + // Report dry run success + logReport := client.LogReport{ + CommandID: commandID, + Action: "dry_run", + Result: "success", + Stdout: result.Stdout, + Stderr: result.Stderr, + ExitCode: result.ExitCode, + DurationSeconds: result.DurationSeconds, + } + + if len(result.Dependencies) > 0 { + logReport.Stdout += fmt.Sprintf("\nDependencies found: %v", result.Dependencies) + } + + if reportErr := apiClient.ReportLog(s.agent.AgentID, logReport); reportErr != nil { + log.Printf("Failed to report dry run success: %v\n", reportErr) + elog.Error(1, fmt.Sprintf("Failed to report dry run success: %v", reportErr)) + } + + if result.Success { + log.Printf("✓ Dry run completed successfully in %d seconds\n", result.DurationSeconds) + elog.Info(1, fmt.Sprintf("Dry run completed successfully in %d seconds", result.DurationSeconds)) + if len(result.Dependencies) > 0 { + log.Printf(" Dependencies found: %v\n", result.Dependencies) + elog.Info(1, fmt.Sprintf("Dependencies found: %v", result.Dependencies)) + } else { + log.Printf(" No additional dependencies found\n") + elog.Info(1, "No additional dependencies found") + } + } else { + log.Printf("✗ Dry run failed after %d seconds\n", result.DurationSeconds) + elog.Error(1, fmt.Sprintf("Dry run failed after %d seconds: %s", result.DurationSeconds, result.ErrorMessage)) + } + + return nil +} + +func (s *redflagService) handleInstallUpdates(apiClient *client.Client, commandID string, params map[string]interface{}) error { + log.Println("Installing updates...") + elog.Info(1, "Starting update installation") + + // Parse parameters + packageType := "" + packageName := "" + + if pt, ok := params["package_type"].(string); ok { + packageType = pt + } + if pn, ok := params["package_name"].(string); ok { + packageName = pn + } + + // Validate package type + if packageType == "" { + err := fmt.Errorf("package_type parameter is required") + elog.Error(1, err.Error()) + return err + } + + // Create installer based on package type + inst, err := installer.InstallerFactory(packageType) + if err != nil { + err := fmt.Errorf("failed to create installer for package type %s: %w", packageType, err) + elog.Error(1, err.Error()) + return err + } + + // Check if installer is available + if !inst.IsAvailable() { + err := fmt.Errorf("%s installer is not available on this system", packageType) + elog.Error(1, err.Error()) + return err + } + + var result *installer.InstallResult + var action string + + // Perform installation based on what's specified + if packageName != "" { + action = "update" + log.Printf("Updating package: %s (type: %s)", packageName, packageType) + elog.Info(1, fmt.Sprintf("Updating package: %s (type: %s)", packageName, packageType)) + result, err = inst.UpdatePackage(packageName) + } else if len(params) > 1 { + // Multiple packages might be specified in various ways + var packageNames []string + for key, value := range params { + if key != "package_type" { + if name, ok := value.(string); ok && name != "" { + packageNames = append(packageNames, name) + } + } + } + if len(packageNames) > 0 { + action = "install_multiple" + log.Printf("Installing multiple packages: %v (type: %s)", packageNames, packageType) + elog.Info(1, fmt.Sprintf("Installing multiple packages: %v (type: %s)", packageNames, packageType)) + result, err = inst.InstallMultiple(packageNames) + } else { + // Upgrade all packages if no specific packages named + action = "upgrade" + log.Printf("Upgrading all packages (type: %s)", packageType) + elog.Info(1, fmt.Sprintf("Upgrading all packages (type: %s)", packageType)) + result, err = inst.Upgrade() + } + } else { + // Upgrade all packages if no specific packages named + action = "upgrade" + log.Printf("Upgrading all packages (type: %s)", packageType) + elog.Info(1, fmt.Sprintf("Upgrading all packages (type: %s)", packageType)) + result, err = inst.Upgrade() + } + + if err != nil { + // Report installation failure with actual command output + logReport := client.LogReport{ + CommandID: commandID, + Action: action, + Result: "failed", + Stdout: result.Stdout, + Stderr: result.Stderr, + ExitCode: result.ExitCode, + DurationSeconds: result.DurationSeconds, + } + + if reportErr := apiClient.ReportLog(s.agent.AgentID, logReport); reportErr != nil { + log.Printf("Failed to report installation failure: %v\n", reportErr) + elog.Error(1, fmt.Sprintf("Failed to report installation failure: %v", reportErr)) + } + + return fmt.Errorf("installation failed: %w", err) + } + + // Report installation success + logReport := client.LogReport{ + CommandID: commandID, + Action: result.Action, + Result: "success", + Stdout: result.Stdout, + Stderr: result.Stderr, + ExitCode: result.ExitCode, + DurationSeconds: result.DurationSeconds, + } + + // Add additional metadata to the log report + if len(result.PackagesInstalled) > 0 { + logReport.Stdout += fmt.Sprintf("\nPackages installed: %v", result.PackagesInstalled) + } + + if reportErr := apiClient.ReportLog(s.agent.AgentID, logReport); reportErr != nil { + log.Printf("Failed to report installation success: %v\n", reportErr) + elog.Error(1, fmt.Sprintf("Failed to report installation success: %v", reportErr)) + } + + if result.Success { + log.Printf("✓ Installation completed successfully in %d seconds\n", result.DurationSeconds) + elog.Info(1, fmt.Sprintf("Installation completed successfully in %d seconds", result.DurationSeconds)) + if len(result.PackagesInstalled) > 0 { + log.Printf(" Packages installed: %v\n", result.PackagesInstalled) + elog.Info(1, fmt.Sprintf("Packages installed: %v", result.PackagesInstalled)) + } + } else { + log.Printf("✗ Installation failed after %d seconds\n", result.DurationSeconds) + elog.Error(1, fmt.Sprintf("Installation failed after %d seconds: %s", result.DurationSeconds, result.ErrorMessage)) + } + + return nil +} + +func (s *redflagService) handleConfirmDependencies(apiClient *client.Client, commandID string, params map[string]interface{}) error { + log.Println("Installing update with confirmed dependencies...") + elog.Info(1, "Starting dependency confirmation installation") + + // Parse parameters + packageType := "" + packageName := "" + var dependencies []string + + if pt, ok := params["package_type"].(string); ok { + packageType = pt + } + if pn, ok := params["package_name"].(string); ok { + packageName = pn + } + if deps, ok := params["dependencies"].([]interface{}); ok { + for _, dep := range deps { + if depStr, ok := dep.(string); ok { + dependencies = append(dependencies, depStr) + } + } + } + + // Validate parameters + if packageType == "" || packageName == "" { + err := fmt.Errorf("package_type and package_name parameters are required") + elog.Error(1, err.Error()) + return err + } + + // Create installer based on package type + inst, err := installer.InstallerFactory(packageType) + if err != nil { + err := fmt.Errorf("failed to create installer for package type %s: %w", packageType, err) + elog.Error(1, err.Error()) + return err + } + + // Check if installer is available + if !inst.IsAvailable() { + err := fmt.Errorf("%s installer is not available on this system", packageType) + elog.Error(1, err.Error()) + return err + } + + var result *installer.InstallResult + var action string + + // Perform installation with dependencies + if len(dependencies) > 0 { + action = "install_with_dependencies" + log.Printf("Installing package with dependencies: %s (dependencies: %v)", packageName, dependencies) + elog.Info(1, fmt.Sprintf("Installing package with dependencies: %s (dependencies: %v)", packageName, dependencies)) + // Install main package + dependencies + allPackages := append([]string{packageName}, dependencies...) + result, err = inst.InstallMultiple(allPackages) + } else { + action = "upgrade" + log.Printf("Installing package: %s (no dependencies)", packageName) + elog.Info(1, fmt.Sprintf("Installing package: %s (no dependencies)", packageName)) + // Use UpdatePackage instead of Install to handle existing packages + result, err = inst.UpdatePackage(packageName) + } + + if err != nil { + // Report installation failure with actual command output + logReport := client.LogReport{ + CommandID: commandID, + Action: action, + Result: "failed", + Stdout: result.Stdout, + Stderr: result.Stderr, + ExitCode: result.ExitCode, + DurationSeconds: result.DurationSeconds, + } + + if reportErr := apiClient.ReportLog(s.agent.AgentID, logReport); reportErr != nil { + log.Printf("Failed to report installation failure: %v\n", reportErr) + elog.Error(1, fmt.Sprintf("Failed to report installation failure: %v", reportErr)) + } + + return fmt.Errorf("installation failed: %w", err) + } + + // Report installation success + logReport := client.LogReport{ + CommandID: commandID, + Action: result.Action, + Result: "success", + Stdout: result.Stdout, + Stderr: result.Stderr, + ExitCode: result.ExitCode, + DurationSeconds: result.DurationSeconds, + } + + // Add additional metadata to the log report + if len(result.PackagesInstalled) > 0 { + logReport.Stdout += fmt.Sprintf("\nPackages installed: %v", result.PackagesInstalled) + } + if len(dependencies) > 0 { + logReport.Stdout += fmt.Sprintf("\nDependencies included: %v", dependencies) + } + + if reportErr := apiClient.ReportLog(s.agent.AgentID, logReport); reportErr != nil { + log.Printf("Failed to report installation success: %v\n", reportErr) + elog.Error(1, fmt.Sprintf("Failed to report installation success: %v", reportErr)) + } + + if result.Success { + log.Printf("✓ Installation with dependencies completed successfully in %d seconds\n", result.DurationSeconds) + elog.Info(1, fmt.Sprintf("Installation with dependencies completed successfully in %d seconds", result.DurationSeconds)) + if len(result.PackagesInstalled) > 0 { + log.Printf(" Packages installed: %v\n", result.PackagesInstalled) + elog.Info(1, fmt.Sprintf("Packages installed: %v", result.PackagesInstalled)) + } + } else { + log.Printf("✗ Installation with dependencies failed after %d seconds\n", result.DurationSeconds) + elog.Error(1, fmt.Sprintf("Installation with dependencies failed after %d seconds: %s", result.DurationSeconds, result.ErrorMessage)) + } + + return nil +} + +func (s *redflagService) handleEnableHeartbeat(apiClient *client.Client, commandID string, params map[string]interface{}) error { + log.Printf("[Heartbeat] Enabling rapid polling with params: %v", params) + + // Parse duration parameter (default 60 minutes) + durationMinutes := 60 + if duration, ok := params["duration_minutes"].(float64); ok { + durationMinutes = int(duration) + } + + // Update agent config + s.agent.RapidPollingEnabled = true + s.agent.RapidPollingUntil = time.Now().Add(time.Duration(durationMinutes) * time.Minute) + + // Save config + configPath := s.getConfigPath() + if err := s.agent.Save(configPath); err != nil { + log.Printf("[Heartbeat] Warning: Failed to save config: %v", err) + } + + // Create log report + logReport := client.LogReport{ + CommandID: commandID, + Action: "enable_heartbeat", + Result: "success", + Stdout: fmt.Sprintf("Heartbeat enabled for %d minutes", durationMinutes), + Stderr: "", + ExitCode: 0, + DurationSeconds: 0, + } + + if err := apiClient.ReportLog(s.agent.AgentID, logReport); err != nil { + log.Printf("[Heartbeat] Failed to report heartbeat enable: %v", err) + } + + // Send immediate check-in to update heartbeat status in UI + log.Printf("[Heartbeat] Sending immediate check-in to update status") + sysMetrics, err := system.GetLightweightMetrics() + if err == nil { + metrics := &client.SystemMetrics{ + CPUPercent: sysMetrics.CPUPercent, + MemoryPercent: sysMetrics.MemoryPercent, + MemoryUsedGB: sysMetrics.MemoryUsedGB, + MemoryTotalGB: sysMetrics.MemoryTotalGB, + DiskUsedGB: sysMetrics.DiskUsedGB, + DiskTotalGB: sysMetrics.DiskTotalGB, + DiskPercent: sysMetrics.DiskPercent, + Uptime: sysMetrics.Uptime, + Version: AgentVersion, + } + + // Include heartbeat metadata + metrics.Metadata = map[string]interface{}{ + "rapid_polling_enabled": true, + "rapid_polling_until": s.agent.RapidPollingUntil.Format(time.RFC3339), + } + + // Send immediate check-in with updated heartbeat status + _, checkinErr := apiClient.GetCommands(s.agent.AgentID, metrics) + if checkinErr != nil { + log.Printf("[Heartbeat] Failed to send immediate check-in: %v", checkinErr) + } else { + log.Printf("[Heartbeat] Immediate check-in sent successfully") + } + } + + log.Printf("[Heartbeat] Rapid polling enabled successfully") + return nil +} + +func (s *redflagService) handleDisableHeartbeat(apiClient *client.Client, commandID string) error { + log.Printf("[Heartbeat] Disabling rapid polling") + + // Update agent config to disable rapid polling + s.agent.RapidPollingEnabled = false + s.agent.RapidPollingUntil = time.Time{} // Zero value + + // Save config + configPath := s.getConfigPath() + if err := s.agent.Save(configPath); err != nil { + log.Printf("[Heartbeat] Warning: Failed to save config: %v", err) + } + + // Create log report + logReport := client.LogReport{ + CommandID: commandID, + Action: "disable_heartbeat", + Result: "success", + Stdout: "Heartbeat disabled", + Stderr: "", + ExitCode: 0, + DurationSeconds: 0, + } + + if err := apiClient.ReportLog(s.agent.AgentID, logReport); err != nil { + log.Printf("[Heartbeat] Failed to report heartbeat disable: %v", err) + } + + // Send immediate check-in to update heartbeat status in UI + log.Printf("[Heartbeat] Sending immediate check-in to update status") + sysMetrics, err := system.GetLightweightMetrics() + if err == nil { + metrics := &client.SystemMetrics{ + CPUPercent: sysMetrics.CPUPercent, + MemoryPercent: sysMetrics.MemoryPercent, + MemoryUsedGB: sysMetrics.MemoryUsedGB, + MemoryTotalGB: sysMetrics.MemoryTotalGB, + DiskUsedGB: sysMetrics.DiskUsedGB, + DiskTotalGB: sysMetrics.DiskTotalGB, + DiskPercent: sysMetrics.DiskPercent, + Uptime: sysMetrics.Uptime, + Version: AgentVersion, + } + + // Include empty heartbeat metadata to explicitly show disabled state + metrics.Metadata = map[string]interface{}{ + "rapid_polling_enabled": false, + "rapid_polling_until": "", + } + + // Send immediate check-in with updated heartbeat status + _, checkinErr := apiClient.GetCommands(s.agent.AgentID, metrics) + if checkinErr != nil { + log.Printf("[Heartbeat] Failed to send immediate check-in: %v", checkinErr) + } else { + log.Printf("[Heartbeat] Immediate check-in sent successfully") + } + } + + log.Printf("[Heartbeat] Rapid polling disabled successfully") + return nil +} + +// RunConsole runs the agent in console mode with signal handling +func RunConsole(cfg *config.Config) error { + log.Printf("🚩 RedFlag Agent starting in console mode...") + log.Printf("Press Ctrl+C to stop") + + // Handle console signals + sigChan := make(chan os.Signal, 1) + signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM) + + // Create stop channel for graceful shutdown + stopChan := make(chan struct{}) + + // Start agent in goroutine + go func() { + defer close(stopChan) + log.Printf("Agent console mode running...") + ticker := time.NewTicker(time.Duration(cfg.CheckInInterval) * time.Second) + defer ticker.Stop() + + for { + select { + case <-ticker.C: + log.Printf("Checking in with server...") + case <-stopChan: + log.Printf("Shutting down console agent...") + return + } + } + }() + + // Wait for signal + <-sigChan + log.Printf("Received shutdown signal, stopping agent...") + + // Graceful shutdown + close(stopChan) + time.Sleep(2 * time.Second) // Allow cleanup + + log.Printf("Agent stopped") + return nil +} \ No newline at end of file diff --git a/aggregator-agent/internal/system/info.go b/aggregator-agent/internal/system/info.go index 8b2e3c6..096b031 100644 --- a/aggregator-agent/internal/system/info.go +++ b/aggregator-agent/internal/system/info.go @@ -262,9 +262,42 @@ func getDiskInfo() ([]DiskInfo, error) { fields := strings.Fields(line) if len(fields) >= 6 { + mountpoint := fields[0] + filesystem := fields[5] + + // Filter out pseudo-filesystems and only show physical/important mounts + // Skip tmpfs, devtmpfs, overlay, squashfs, etc. + if strings.HasPrefix(filesystem, "tmpfs") || + strings.HasPrefix(filesystem, "devtmpfs") || + strings.HasPrefix(filesystem, "overlay") || + strings.HasPrefix(filesystem, "squashfs") || + strings.HasPrefix(filesystem, "udev") || + strings.HasPrefix(filesystem, "proc") || + strings.HasPrefix(filesystem, "sysfs") || + strings.HasPrefix(filesystem, "cgroup") || + strings.HasPrefix(filesystem, "devpts") || + strings.HasPrefix(filesystem, "securityfs") || + strings.HasPrefix(filesystem, "pstore") || + strings.HasPrefix(filesystem, "bpf") || + strings.HasPrefix(filesystem, "configfs") || + strings.HasPrefix(filesystem, "fusectl") || + strings.HasPrefix(filesystem, "hugetlbfs") || + strings.HasPrefix(filesystem, "mqueue") || + strings.HasPrefix(filesystem, "debugfs") || + strings.HasPrefix(filesystem, "tracefs") { + continue // Skip virtual/pseudo filesystems + } + + // Skip container/snap mounts unless they're important + if strings.Contains(mountpoint, "/snap/") || + strings.Contains(mountpoint, "/var/lib/docker") || + strings.Contains(mountpoint, "/run") { + continue + } + disk := DiskInfo{ - Mountpoint: fields[0], - Filesystem: fields[5], + Mountpoint: mountpoint, + Filesystem: filesystem, } // Parse sizes (df outputs in human readable format, we'll parse the numeric part) diff --git a/aggregator-agent/internal/system/windows.go b/aggregator-agent/internal/system/windows.go index f97315a..2988587 100644 --- a/aggregator-agent/internal/system/windows.go +++ b/aggregator-agent/internal/system/windows.go @@ -14,20 +14,34 @@ import ( func getWindowsInfo() string { // Try using wmic for detailed Windows version info if cmd, err := exec.LookPath("wmic"); err == nil { - if data, err := exec.Command(cmd, "os", "get", "Caption,Version,BuildNumber,SKU").Output(); err == nil { - lines := strings.Split(string(data), "\n") - for _, line := range lines { - if strings.Contains(line, "Microsoft Windows") { - // Clean up the output - line = strings.TrimSpace(line) - // Remove extra spaces - for strings.Contains(line, " ") { - line = strings.ReplaceAll(line, " ", " ") - } - return line - } + // Get Caption (e.g., "Microsoft Windows 10 Pro") + caption := "" + if data, err := exec.Command(cmd, "os", "get", "Caption", "/value").Output(); err == nil { + output := strings.TrimSpace(string(data)) + if strings.HasPrefix(output, "Caption=") { + caption = strings.TrimPrefix(output, "Caption=") + caption = strings.TrimSpace(caption) } } + + // Get Version and Build Number + version := "" + if data, err := exec.Command(cmd, "os", "get", "Version", "/value").Output(); err == nil { + output := strings.TrimSpace(string(data)) + if strings.HasPrefix(output, "Version=") { + version = strings.TrimPrefix(output, "Version=") + version = strings.TrimSpace(version) + } + } + + // Combine caption and version for clean output + if caption != "" && version != "" { + return fmt.Sprintf("%s (Build %s)", caption, version) + } else if caption != "" { + return caption + } else if version != "" { + return fmt.Sprintf("Windows %s", version) + } } // Fallback to basic version detection @@ -180,31 +194,50 @@ func getWindowsDiskInfo() ([]DiskInfo, error) { var disks []DiskInfo if cmd, err := exec.LookPath("wmic"); err == nil { - // Get logical disk information - if data, err := exec.Command(cmd, "logicaldisk", "get", "DeviceID,Size,FreeSpace,FileSystem").Output(); err == nil { + // Get logical disk information - use /value format for reliable parsing + if data, err := exec.Command(cmd, "logicaldisk", "get", "DeviceID,Size,FreeSpace,FileSystem", "/format:csv").Output(); err == nil { lines := strings.Split(string(data), "\n") - for _, line := range lines { - if strings.TrimSpace(line) != "" && !strings.Contains(line, "DeviceID") { - fields := strings.Fields(line) - if len(fields) >= 4 { - disk := DiskInfo{ - Mountpoint: strings.TrimSpace(fields[0]), - Filesystem: strings.TrimSpace(fields[3]), - } + for i, line := range lines { + line = strings.TrimSpace(line) + // Skip header and empty lines + if i == 0 || line == "" || !strings.Contains(line, ",") { + continue + } - // Parse sizes (wmic outputs in bytes) - if total, err := strconv.ParseUint(strings.TrimSpace(fields[1]), 10, 64); err == nil { - disk.Total = total - } - if available, err := strconv.ParseUint(strings.TrimSpace(fields[2]), 10, 64); err == nil { - disk.Available = available - } + // CSV format: Node,DeviceID,FileSystem,FreeSpace,Size + fields := strings.Split(line, ",") + if len(fields) >= 5 { + deviceID := strings.TrimSpace(fields[1]) + filesystem := strings.TrimSpace(fields[2]) + freeSpaceStr := strings.TrimSpace(fields[3]) + sizeStr := strings.TrimSpace(fields[4]) + // Skip if no size info (e.g., CD-ROM drives) + if sizeStr == "" || freeSpaceStr == "" { + continue + } + + disk := DiskInfo{ + Mountpoint: deviceID, + Filesystem: filesystem, + } + + // Parse sizes (wmic outputs in bytes) + if total, err := strconv.ParseUint(sizeStr, 10, 64); err == nil { + disk.Total = total + } + if available, err := strconv.ParseUint(freeSpaceStr, 10, 64); err == nil { + disk.Available = available + } + + // Calculate used space + if disk.Total > 0 && disk.Available <= disk.Total { disk.Used = disk.Total - disk.Available - if disk.Total > 0 { - disk.UsedPercent = float64(disk.Used) / float64(disk.Total) * 100 - } + disk.UsedPercent = float64(disk.Used) / float64(disk.Total) * 100 + } + // Only add disks with valid size info + if disk.Total > 0 { disks = append(disks, disk) } } @@ -238,36 +271,35 @@ func getWindowsProcessCount() (int, error) { func getWindowsUptime() (string, error) { // Try PowerShell first for more accurate uptime if cmd, err := exec.LookPath("powershell"); err == nil { + // Get uptime in seconds for precise calculation if data, err := exec.Command(cmd, "-Command", - "(Get-Date) - (Get-CimInstance Win32_OperatingSystem).LastBootUpTime | Select-Object TotalDays").Output(); err == nil { - // Parse the output to get days - lines := strings.Split(string(data), "\n") - for _, line := range lines { - if strings.Contains(line, "TotalDays") { - fields := strings.Fields(line) - if len(fields) >= 2 { - if days, err := strconv.ParseFloat(fields[len(fields)-1], 64); err == nil { - return formatUptimeFromDays(days), nil - } - } - } + "(New-TimeSpan -Start (Get-CimInstance Win32_OperatingSystem).LastBootUpTime -End (Get-Date)).TotalSeconds").Output(); err == nil { + secondsStr := strings.TrimSpace(string(data)) + if seconds, err := strconv.ParseFloat(secondsStr, 64); err == nil { + return formatUptimeFromSeconds(seconds), nil } } } - // Fallback to wmic + // Fallback to wmic with manual parsing if cmd, err := exec.LookPath("wmic"); err == nil { - if data, err := exec.Command(cmd, "os", "get", "LastBootUpTime").Output(); err == nil { - lines := strings.Split(string(data), "\n") - for _, line := range lines { - if strings.TrimSpace(line) != "" && !strings.Contains(line, "LastBootUpTime") { - // Parse WMI datetime format: 20231201123045.123456-300 - wmiTime := strings.TrimSpace(line) - if len(wmiTime) >= 14 { - // Extract just the date part for basic calculation - // This is a simplified approach - in production you'd want proper datetime parsing - return fmt.Sprintf("Since %s", wmiTime[:8]), nil - } + if data, err := exec.Command(cmd, "os", "get", "LastBootUpTime", "/value").Output(); err == nil { + output := strings.TrimSpace(string(data)) + if strings.HasPrefix(output, "LastBootUpTime=") { + wmiTime := strings.TrimPrefix(output, "LastBootUpTime=") + wmiTime = strings.TrimSpace(wmiTime) + // Parse WMI datetime format: 20251025123045.123456-300 + if len(wmiTime) >= 14 { + // Extract date/time components: YYYYMMDDHHmmss + year := wmiTime[0:4] + month := wmiTime[4:6] + day := wmiTime[6:8] + hour := wmiTime[8:10] + minute := wmiTime[10:12] + second := wmiTime[12:14] + + bootTimeStr := fmt.Sprintf("%s-%s-%s %s:%s:%s", year, month, day, hour, minute, second) + return fmt.Sprintf("Since %s", bootTimeStr), nil } } } @@ -276,6 +308,27 @@ func getWindowsUptime() (string, error) { return "Unknown", nil } +// formatUptimeFromSeconds formats uptime from seconds into human readable format +func formatUptimeFromSeconds(seconds float64) string { + days := int(seconds / 86400) + hours := int((seconds - float64(days*86400)) / 3600) + minutes := int((seconds - float64(days*86400) - float64(hours*3600)) / 60) + + if days > 0 { + if hours > 0 { + return fmt.Sprintf("%d days, %d hours", days, hours) + } + return fmt.Sprintf("%d days", days) + } else if hours > 0 { + if minutes > 0 { + return fmt.Sprintf("%d hours, %d minutes", hours, minutes) + } + return fmt.Sprintf("%d hours", hours) + } else { + return fmt.Sprintf("%d minutes", minutes) + } +} + // formatUptimeFromDays formats uptime from days into human readable format func formatUptimeFromDays(days float64) string { if days < 1 { diff --git a/aggregator-server/Dockerfile b/aggregator-server/Dockerfile index 81ff3f0..f1d9a67 100644 --- a/aggregator-server/Dockerfile +++ b/aggregator-server/Dockerfile @@ -1,18 +1,44 @@ -FROM golang:1.23-alpine AS builder +# Stage 1: Build server binary +FROM golang:1.23-alpine AS server-builder WORKDIR /app -COPY go.mod go.sum ./ +COPY aggregator-server/go.mod aggregator-server/go.sum ./ RUN go mod download -COPY . . +COPY aggregator-server/ . RUN CGO_ENABLED=0 go build -o redflag-server cmd/server/main.go +# Stage 2: Build agent binaries for all platforms +FROM golang:1.23-alpine AS agent-builder + +WORKDIR /build +# Copy agent source code +COPY aggregator-agent/ ./ + +# Build for Linux amd64 +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o binaries/linux-amd64/redflag-agent cmd/agent/main.go + +# Build for Linux arm64 +RUN CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o binaries/linux-arm64/redflag-agent cmd/agent/main.go + +# Build for Windows amd64 +RUN CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o binaries/windows-amd64/redflag-agent.exe cmd/agent/main.go + +# Build for Windows arm64 +RUN CGO_ENABLED=0 GOOS=windows GOARCH=arm64 go build -o binaries/windows-arm64/redflag-agent.exe cmd/agent/main.go + +# Stage 3: Final image with server and all agent binaries FROM alpine:latest RUN apk --no-cache add ca-certificates tzdata WORKDIR /app -COPY --from=builder /app/redflag-server . +# Copy server binary +COPY --from=server-builder /app/redflag-server . +COPY --from=server-builder /app/internal/database ./internal/database + +# Copy all agent binaries +COPY --from=agent-builder /build/binaries ./binaries EXPOSE 8080 diff --git a/aggregator-server/cmd/server/main.go b/aggregator-server/cmd/server/main.go index 10f2fae..1cc0641 100644 --- a/aggregator-server/cmd/server/main.go +++ b/aggregator-server/cmd/server/main.go @@ -35,15 +35,10 @@ func startWelcomeModeServer() { router.GET("/", setupHandler.ShowSetupPage) // Setup endpoint for web configuration - router.POST("/api/v1/setup", setupHandler.ConfigureServer) + router.POST("/api/setup/configure", setupHandler.ConfigureServer) - // Setup endpoint for web configuration (future) - router.GET("/setup", func(c *gin.Context) { - c.JSON(200, gin.H{ - "message": "Web setup coming soon", - "instructions": "Use: docker-compose exec server ./redflag-server --setup", - }) - }) + // Setup endpoint for web configuration + router.GET("/setup", setupHandler.ShowSetupPage) log.Printf("Welcome mode server started on :8080") log.Printf("Waiting for configuration...") @@ -127,6 +122,14 @@ func main() { commandQueries := queries.NewCommandQueries(db.DB) refreshTokenQueries := queries.NewRefreshTokenQueries(db.DB) registrationTokenQueries := queries.NewRegistrationTokenQueries(db.DB) + userQueries := queries.NewUserQueries(db.DB) + + // Ensure admin user exists + if err := userQueries.EnsureAdminUser(cfg.Admin.Username, cfg.Admin.Username+"@redflag.local", cfg.Admin.Password); err != nil { + fmt.Printf("Warning: Failed to create admin user: %v\n", err) + } else { + fmt.Println("✅ Admin user ensured") + } // Initialize services timezoneService := services.NewTimezoneService(cfg) @@ -136,15 +139,15 @@ func main() { rateLimiter := middleware.NewRateLimiter() // Initialize handlers - agentHandler := handlers.NewAgentHandler(agentQueries, commandQueries, refreshTokenQueries, cfg.CheckInInterval, cfg.LatestAgentVersion) + agentHandler := handlers.NewAgentHandler(agentQueries, commandQueries, refreshTokenQueries, registrationTokenQueries, cfg.CheckInInterval, cfg.LatestAgentVersion) updateHandler := handlers.NewUpdateHandler(updateQueries, agentQueries, commandQueries, agentHandler) - authHandler := handlers.NewAuthHandler(cfg.Admin.JWTSecret) + authHandler := handlers.NewAuthHandler(cfg.Admin.JWTSecret, userQueries) statsHandler := handlers.NewStatsHandler(agentQueries, updateQueries) settingsHandler := handlers.NewSettingsHandler(timezoneService) dockerHandler := handlers.NewDockerHandler(updateQueries, agentQueries, commandQueries) registrationTokenHandler := handlers.NewRegistrationTokenHandler(registrationTokenQueries, agentQueries, cfg) rateLimitHandler := handlers.NewRateLimitHandler(rateLimiter) - downloadHandler := handlers.NewDownloadHandler(filepath.Join(".", "redflag-agent")) + downloadHandler := handlers.NewDownloadHandler(filepath.Join("/app"), cfg) // Setup router router := gin.Default() @@ -169,6 +172,10 @@ func main() { api.POST("/agents/register", rateLimiter.RateLimit("agent_registration", middleware.KeyByIP), agentHandler.RegisterAgent) api.POST("/agents/renew", rateLimiter.RateLimit("public_access", middleware.KeyByIP), agentHandler.RenewToken) + // Public download routes (no authentication - agents need these!) + api.GET("/downloads/:platform", rateLimiter.RateLimit("public_access", middleware.KeyByIP), downloadHandler.DownloadAgent) + api.GET("/install/:platform", rateLimiter.RateLimit("public_access", middleware.KeyByIP), downloadHandler.InstallScript) + // Protected agent routes agents := api.Group("/agents") agents.Use(middleware.AuthMiddleware()) @@ -225,10 +232,6 @@ func main() { dashboard.POST("/docker/containers/:container_id/images/:image_id/reject", dockerHandler.RejectUpdate) dashboard.POST("/docker/containers/:container_id/images/:image_id/install", dockerHandler.InstallUpdate) - // Download routes (authenticated) - dashboard.GET("/downloads/:platform", downloadHandler.DownloadAgent) - dashboard.GET("/install/:platform", downloadHandler.InstallScript) - // Admin/Registration Token routes (for agent enrollment management) admin := dashboard.Group("/admin") { @@ -236,6 +239,7 @@ func main() { admin.GET("/registration-tokens", rateLimiter.RateLimit("admin_operations", middleware.KeyByUserID), registrationTokenHandler.ListRegistrationTokens) admin.GET("/registration-tokens/active", rateLimiter.RateLimit("admin_operations", middleware.KeyByUserID), registrationTokenHandler.GetActiveRegistrationTokens) admin.DELETE("/registration-tokens/:token", rateLimiter.RateLimit("admin_operations", middleware.KeyByUserID), registrationTokenHandler.RevokeRegistrationToken) + admin.DELETE("/registration-tokens/delete/:id", rateLimiter.RateLimit("admin_operations", middleware.KeyByUserID), registrationTokenHandler.DeleteRegistrationToken) admin.POST("/registration-tokens/cleanup", rateLimiter.RateLimit("admin_operations", middleware.KeyByUserID), registrationTokenHandler.CleanupExpiredTokens) admin.GET("/registration-tokens/stats", rateLimiter.RateLimit("admin_operations", middleware.KeyByUserID), registrationTokenHandler.GetTokenStats) admin.GET("/registration-tokens/validate", rateLimiter.RateLimit("admin_operations", middleware.KeyByUserID), registrationTokenHandler.ValidateRegistrationToken) diff --git a/aggregator-server/internal/api/handlers/agents.go b/aggregator-server/internal/api/handlers/agents.go index 636c192..640fac0 100644 --- a/aggregator-server/internal/api/handlers/agents.go +++ b/aggregator-server/internal/api/handlers/agents.go @@ -15,20 +15,22 @@ import ( ) type AgentHandler struct { - agentQueries *queries.AgentQueries - commandQueries *queries.CommandQueries - refreshTokenQueries *queries.RefreshTokenQueries - checkInInterval int - latestAgentVersion string + agentQueries *queries.AgentQueries + commandQueries *queries.CommandQueries + refreshTokenQueries *queries.RefreshTokenQueries + registrationTokenQueries *queries.RegistrationTokenQueries + checkInInterval int + latestAgentVersion string } -func NewAgentHandler(aq *queries.AgentQueries, cq *queries.CommandQueries, rtq *queries.RefreshTokenQueries, checkInInterval int, latestAgentVersion string) *AgentHandler { +func NewAgentHandler(aq *queries.AgentQueries, cq *queries.CommandQueries, rtq *queries.RefreshTokenQueries, regTokenQueries *queries.RegistrationTokenQueries, checkInInterval int, latestAgentVersion string) *AgentHandler { return &AgentHandler{ - agentQueries: aq, - commandQueries: cq, - refreshTokenQueries: rtq, - checkInInterval: checkInInterval, - latestAgentVersion: latestAgentVersion, + agentQueries: aq, + commandQueries: cq, + refreshTokenQueries: rtq, + registrationTokenQueries: regTokenQueries, + checkInInterval: checkInInterval, + latestAgentVersion: latestAgentVersion, } } @@ -40,6 +42,35 @@ func (h *AgentHandler) RegisterAgent(c *gin.Context) { return } + // Validate registration token (critical security check) + // Extract token from Authorization header or request body + var registrationToken string + + // Try Authorization header first (Bearer token) + if authHeader := c.GetHeader("Authorization"); authHeader != "" { + if len(authHeader) > 7 && authHeader[:7] == "Bearer " { + registrationToken = authHeader[7:] + } + } + + // If not in header, try request body (fallback) + if registrationToken == "" && req.RegistrationToken != "" { + registrationToken = req.RegistrationToken + } + + // Reject if no registration token provided + if registrationToken == "" { + c.JSON(http.StatusUnauthorized, gin.H{"error": "registration token required"}) + return + } + + // Validate the registration token + tokenInfo, err := h.registrationTokenQueries.ValidateRegistrationToken(registrationToken) + if err != nil || tokenInfo == nil { + c.JSON(http.StatusUnauthorized, gin.H{"error": "invalid or expired registration token"}) + return + } + // Create new agent agent := &models.Agent{ ID: uuid.New(), @@ -66,6 +97,17 @@ func (h *AgentHandler) RegisterAgent(c *gin.Context) { return } + // Mark registration token as used (CRITICAL: must succeed or delete agent) + if err := h.registrationTokenQueries.MarkTokenUsed(registrationToken, agent.ID); err != nil { + // Token marking failed - rollback agent creation to prevent token reuse + log.Printf("ERROR: Failed to mark registration token as used: %v - rolling back agent creation", err) + if deleteErr := h.agentQueries.DeleteAgent(agent.ID); deleteErr != nil { + log.Printf("ERROR: Failed to delete agent during rollback: %v", deleteErr) + } + c.JSON(http.StatusBadRequest, gin.H{"error": "registration token could not be consumed - token may be expired, revoked, or all seats may be used"}) + return + } + // Generate JWT access token (short-lived: 24 hours) token, err := middleware.GenerateAgentToken(agent.ID) if err != nil { diff --git a/aggregator-server/internal/api/handlers/auth.go b/aggregator-server/internal/api/handlers/auth.go index bb465d3..8c18d1e 100644 --- a/aggregator-server/internal/api/handlers/auth.go +++ b/aggregator-server/internal/api/handlers/auth.go @@ -5,6 +5,8 @@ import ( "net/http" "time" + "github.com/Fimeg/RedFlag/aggregator-server/internal/database/queries" + "github.com/Fimeg/RedFlag/aggregator-server/internal/models" "github.com/gin-gonic/gin" "github.com/golang-jwt/jwt/v5" "github.com/google/uuid" @@ -12,29 +14,35 @@ import ( // AuthHandler handles authentication for the web dashboard type AuthHandler struct { - jwtSecret string + jwtSecret string + userQueries *queries.UserQueries } // NewAuthHandler creates a new auth handler -func NewAuthHandler(jwtSecret string) *AuthHandler { +func NewAuthHandler(jwtSecret string, userQueries *queries.UserQueries) *AuthHandler { return &AuthHandler{ - jwtSecret: jwtSecret, + jwtSecret: jwtSecret, + userQueries: userQueries, } } // LoginRequest represents a login request type LoginRequest struct { - Token string `json:"token" binding:"required"` + Username string `json:"username" binding:"required"` + Password string `json:"password" binding:"required"` } // LoginResponse represents a login response type LoginResponse struct { - Token string `json:"token"` + Token string `json:"token"` + User *models.User `json:"user"` } // UserClaims represents JWT claims for web dashboard users type UserClaims struct { - UserID uuid.UUID `json:"user_id"` + UserID uuid.UUID `json:"user_id"` + Username string `json:"username"` + Role string `json:"role"` jwt.RegisteredClaims } @@ -46,16 +54,18 @@ func (h *AuthHandler) Login(c *gin.Context) { return } - // For development, accept any non-empty token - // In production, implement proper authentication - if req.Token == "" { - c.JSON(http.StatusUnauthorized, gin.H{"error": "invalid token"}) + // Validate credentials against database + user, err := h.userQueries.VerifyCredentials(req.Username, req.Password) + if err != nil { + c.JSON(http.StatusUnauthorized, gin.H{"error": "invalid username or password"}) return } // Create JWT token for web dashboard claims := UserClaims{ - UserID: uuid.New(), // Generate a user ID for this session + UserID: user.ID, + Username: user.Username, + Role: user.Role, RegisteredClaims: jwt.RegisteredClaims{ ExpiresAt: jwt.NewNumericDate(time.Now().Add(24 * time.Hour)), IssuedAt: jwt.NewNumericDate(time.Now()), @@ -69,7 +79,10 @@ func (h *AuthHandler) Login(c *gin.Context) { return } - c.JSON(http.StatusOK, LoginResponse{Token: tokenString}) + c.JSON(http.StatusOK, LoginResponse{ + Token: tokenString, + User: user, + }) } // VerifyToken handles token verification diff --git a/aggregator-server/internal/api/handlers/downloads.go b/aggregator-server/internal/api/handlers/downloads.go index 3940f9c..9a4bfdb 100644 --- a/aggregator-server/internal/api/handlers/downloads.go +++ b/aggregator-server/internal/api/handlers/downloads.go @@ -1,49 +1,101 @@ package handlers import ( + "fmt" "net/http" + "os" "path/filepath" "strings" + "github.com/Fimeg/RedFlag/aggregator-server/internal/config" "github.com/gin-gonic/gin" ) // DownloadHandler handles agent binary downloads type DownloadHandler struct { agentDir string + config *config.Config } -func NewDownloadHandler(agentDir string) *DownloadHandler { +func NewDownloadHandler(agentDir string, cfg *config.Config) *DownloadHandler { return &DownloadHandler{ agentDir: agentDir, + config: cfg, } } +// getServerURL determines the server URL with proper protocol detection +func (h *DownloadHandler) getServerURL(c *gin.Context) string { + // Priority 1: Use configured public URL if set + if h.config.Server.PublicURL != "" { + return h.config.Server.PublicURL + } + + // Priority 2: Detect from request with TLS/proxy awareness + scheme := "http" + + // Check if TLS is enabled in config + if h.config.Server.TLS.Enabled { + scheme = "https" + } + + // Check if request came through HTTPS (direct or via proxy) + if c.Request.TLS != nil { + scheme = "https" + } + + // Check X-Forwarded-Proto for reverse proxy setups + if forwardedProto := c.GetHeader("X-Forwarded-Proto"); forwardedProto == "https" { + scheme = "https" + } + + // Use the Host header exactly as received (includes port if present) + host := c.GetHeader("X-Forwarded-Host") + if host == "" { + host = c.Request.Host + } + + return fmt.Sprintf("%s://%s", scheme, host) +} + // DownloadAgent serves agent binaries for different platforms func (h *DownloadHandler) DownloadAgent(c *gin.Context) { platform := c.Param("platform") - // Validate platform to prevent directory traversal + // Validate platform to prevent directory traversal (removed darwin - no macOS support) validPlatforms := map[string]bool{ "linux-amd64": true, "linux-arm64": true, "windows-amd64": true, "windows-arm64": true, - "darwin-amd64": true, - "darwin-arm64": true, } if !validPlatforms[platform] { - c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid platform"}) + c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid or unsupported platform"}) return } + // Build filename based on platform filename := "redflag-agent" if strings.HasPrefix(platform, "windows") { filename += ".exe" } - agentPath := filepath.Join(h.agentDir, filename) + // Serve from platform-specific directory: binaries/{platform}/redflag-agent + agentPath := filepath.Join(h.agentDir, "binaries", platform, filename) + + // Check if file exists + if _, err := os.Stat(agentPath); os.IsNotExist(err) { + c.JSON(http.StatusNotFound, gin.H{"error": "Agent binary not found"}) + return + } + + // Handle both GET and HEAD requests + if c.Request.Method == "HEAD" { + c.Status(http.StatusOK) + return + } + c.File(agentPath) } @@ -51,75 +103,604 @@ func (h *DownloadHandler) DownloadAgent(c *gin.Context) { func (h *DownloadHandler) InstallScript(c *gin.Context) { platform := c.Param("platform") - // Validate platform + // Validate platform (removed darwin - no macOS support) validPlatforms := map[string]bool{ - "linux": true, - "darwin": true, + "linux": true, "windows": true, } if !validPlatforms[platform] { - c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid platform"}) + c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid or unsupported platform"}) return } - scriptContent := h.generateInstallScript(platform, c.Request.Host) + serverURL := h.getServerURL(c) + scriptContent := h.generateInstallScript(platform, serverURL) c.Header("Content-Type", "text/plain") c.String(http.StatusOK, scriptContent) } -func (h *DownloadHandler) generateInstallScript(platform, serverHost string) string { - baseURL := "http://" + serverHost - +func (h *DownloadHandler) generateInstallScript(platform, baseURL string) string { switch platform { case "linux": return `#!/bin/bash set -e +# RedFlag Agent Installation Script +# This script installs the RedFlag agent as a systemd service with proper security hardening + REDFLAG_SERVER="` + baseURL + `" -AGENT_DIR="/usr/local/bin" -SERVICE_NAME="redflag-agent" +AGENT_USER="redflag-agent" +AGENT_HOME="/var/lib/redflag-agent" +AGENT_BINARY="/usr/local/bin/redflag-agent" +SUDOERS_FILE="/etc/sudoers.d/redflag-agent" +SERVICE_FILE="/etc/systemd/system/redflag-agent.service" +CONFIG_DIR="/etc/aggregator" + +echo "=== RedFlag Agent Installation ===" +echo "" # Check if running as root if [ "$EUID" -ne 0 ]; then - echo "Please run as root or with sudo" + echo "ERROR: This script must be run as root (use sudo)" exit 1 fi -echo "Installing RedFlag agent from ${REDFLAG_SERVER}..." +# Detect architecture +ARCH=$(uname -m) +case "$ARCH" in + x86_64) + DOWNLOAD_ARCH="amd64" + ;; + aarch64|arm64) + DOWNLOAD_ARCH="arm64" + ;; + *) + echo "ERROR: Unsupported architecture: $ARCH" + echo "Supported: x86_64 (amd64), aarch64 (arm64)" + exit 1 + ;; +esac -# Download agent -curl -sfL "${REDFLAG_SERVER}/api/v1/downloads/linux-amd64" -o "${AGENT_DIR}/redflag-agent" -chmod +x "${AGENT_DIR}/redflag-agent" +echo "Detected architecture: $ARCH (using linux-$DOWNLOAD_ARCH)" +echo "" -echo "Agent downloaded. Please visit ${REDFLAG_SERVER}/admin to get a registration token." -echo "Then run: ${AGENT_DIR}/redflag-agent --server ${REDFLAG_SERVER} --token "` +# Step 1: Create system user +echo "Step 1: Creating system user..." +if id "$AGENT_USER" &>/dev/null; then + echo "✓ User $AGENT_USER already exists" +else + useradd -r -s /bin/false -d "$AGENT_HOME" -m "$AGENT_USER" + echo "✓ User $AGENT_USER created" +fi - case "darwin": - return `#!/bin/bash -set -e +# Create home directory if it doesn't exist +if [ ! -d "$AGENT_HOME" ]; then + mkdir -p "$AGENT_HOME" + chown "$AGENT_USER:$AGENT_USER" "$AGENT_HOME" + echo "✓ Home directory created" +fi -REDFLAG_SERVER="` + baseURL + `" -AGENT_DIR="/usr/local/bin" +# Stop existing service if running (to allow binary update) +if systemctl is-active --quiet redflag-agent 2>/dev/null; then + echo "" + echo "Existing service detected - stopping to allow update..." + systemctl stop redflag-agent + sleep 2 + echo "✓ Service stopped" +fi -echo "Installing RedFlag agent from ${REDFLAG_SERVER}..." +# Step 2: Download agent binary +echo "" +echo "Step 2: Downloading agent binary..." +echo "Downloading from ${REDFLAG_SERVER}/api/v1/downloads/linux-${DOWNLOAD_ARCH}..." -# Download agent -curl -sfL "${REDFLAG_SERVER}/api/v1/downloads/darwin-amd64" -o "${AGENT_DIR}/redflag-agent" -chmod +x "${AGENT_DIR}/redflag-agent" +# Download to temporary file first (to avoid root permission issues) +TEMP_FILE="/tmp/redflag-agent-${DOWNLOAD_ARCH}" +echo "Downloading to temporary file: $TEMP_FILE" -echo "Agent downloaded. Please visit ${REDFLAG_SERVER}/admin to get a registration token." -echo "Then run: ${AGENT_DIR}/redflag-agent --server ${REDFLAG_SERVER} --token "` +# Try curl first (most reliable) +if curl -sL "${REDFLAG_SERVER}/api/v1/downloads/linux-${DOWNLOAD_ARCH}" -o "$TEMP_FILE"; then + echo "✓ Download successful, moving to final location" + mv "$TEMP_FILE" "${AGENT_BINARY}" + chmod 755 "${AGENT_BINARY}" + chown root:root "${AGENT_BINARY}" + echo "✓ Agent binary downloaded and installed" +else + echo "✗ Download with curl failed" + # Fallback to wget if available + if command -v wget >/dev/null 2>&1; then + echo "Trying wget fallback..." + if wget -q "${REDFLAG_SERVER}/api/v1/downloads/linux-${DOWNLOAD_ARCH}" -O "$TEMP_FILE"; then + echo "✓ Download successful with wget, moving to final location" + mv "$TEMP_FILE" "${AGENT_BINARY}" + chmod 755 "${AGENT_BINARY}" + chown root:root "${AGENT_BINARY}" + echo "✓ Agent binary downloaded and installed (using wget fallback)" + else + echo "ERROR: Failed to download agent binary" + echo "Both curl and wget failed" + echo "Please ensure ${REDFLAG_SERVER} is accessible" + # Clean up temp file if it exists + rm -f "$TEMP_FILE" + exit 1 + fi + else + echo "ERROR: Failed to download agent binary" + echo "curl failed and wget is not available" + echo "Please ensure ${REDFLAG_SERVER} is accessible" + # Clean up temp file if it exists + rm -f "$TEMP_FILE" + exit 1 + fi +fi + +# Clean up temp file if it still exists +rm -f "$TEMP_FILE" + +# Set SELinux context for binary if SELinux is enabled +if command -v getenforce >/dev/null 2>&1 && [ "$(getenforce)" != "Disabled" ]; then + echo "SELinux detected, setting file context for binary..." + restorecon -v "${AGENT_BINARY}" 2>/dev/null || true + echo "✓ SELinux context set for binary" +fi + +# Step 3: Install sudoers configuration +echo "" +echo "Step 3: Installing sudoers configuration..." +cat > "$SUDOERS_FILE" <<'SUDOERS_EOF' +# RedFlag Agent minimal sudo permissions +# This file grants the redflag-agent user limited sudo access for package management +# Generated automatically during RedFlag agent installation + +# APT package management commands (Debian/Ubuntu) +redflag-agent ALL=(root) NOPASSWD: /usr/bin/apt-get update +redflag-agent ALL=(root) NOPASSWD: /usr/bin/apt-get install -y * +redflag-agent ALL=(root) NOPASSWD: /usr/bin/apt-get upgrade -y * +redflag-agent ALL=(root) NOPASSWD: /usr/bin/apt-get install --dry-run --yes * + +# DNF package management commands (RHEL/Fedora/Rocky/Alma) +redflag-agent ALL=(root) NOPASSWD: /usr/bin/dnf makecache +redflag-agent ALL=(root) NOPASSWD: /usr/bin/dnf install -y * +redflag-agent ALL=(root) NOPASSWD: /usr/bin/dnf upgrade -y * +redflag-agent ALL=(root) NOPASSWD: /usr/bin/dnf install --assumeno --downloadonly * + +# Docker operations +redflag-agent ALL=(root) NOPASSWD: /usr/bin/docker pull * +redflag-agent ALL=(root) NOPASSWD: /usr/bin/docker image inspect * +redflag-agent ALL=(root) NOPASSWD: /usr/bin/docker manifest inspect * +SUDOERS_EOF + +chmod 440 "$SUDOERS_FILE" + +# Validate sudoers file +if visudo -c -f "$SUDOERS_FILE" &>/dev/null; then + echo "✓ Sudoers configuration installed and validated" +else + echo "ERROR: Sudoers configuration is invalid" + rm -f "$SUDOERS_FILE" + exit 1 +fi + +# Step 4: Create configuration directory +echo "" +echo "Step 4: Creating configuration directory..." +mkdir -p "$CONFIG_DIR" +chown "$AGENT_USER:$AGENT_USER" "$CONFIG_DIR" +chmod 755 "$CONFIG_DIR" +echo "✓ Configuration directory created" + +# Set SELinux context for config directory if SELinux is enabled +if command -v getenforce >/dev/null 2>&1 && [ "$(getenforce)" != "Disabled" ]; then + echo "Setting SELinux context for config directory..." + restorecon -Rv "$CONFIG_DIR" 2>/dev/null || true + echo "✓ SELinux context set for config directory" +fi + +# Step 5: Install systemd service +echo "" +echo "Step 5: Installing systemd service..." +cat > "$SERVICE_FILE" < " REGISTRATION_TOKEN + else + echo "" + echo "IMPORTANT: Registration token required!" + echo "" + echo "Since you're running this via pipe, you need to:" + echo "" + echo "Option 1 - One-liner with token:" + echo " curl -sfL ${REDFLAG_SERVER}/api/v1/install/linux | sudo bash -s -- YOUR_TOKEN" + echo "" + echo "Option 2 - Download and run interactively:" + echo " curl -sfL ${REDFLAG_SERVER}/api/v1/install/linux -o install.sh" + echo " chmod +x install.sh" + echo " sudo ./install.sh" + echo "" + echo "Skipping registration for now." + echo "Please register manually after installation." + fi +fi + +# Check if agent is already registered +if [ -f "$CONFIG_DIR/config.json" ]; then + echo "" + echo "[INFO] Agent already registered - configuration file exists" + echo "[INFO] Skipping registration to preserve agent history" + echo "[INFO] If you need to re-register, delete: $CONFIG_DIR/config.json" + echo "" +elif [ -n "$REGISTRATION_TOKEN" ]; then + echo "" + echo "Registering agent..." + + # Create config file and register + cat > "$CONFIG_DIR/config.json" <nul 2>&1 +if %errorLevel% neq 0 ( + echo ERROR: This script must be run as Administrator + echo Right-click and select "Run as administrator" + pause + exit /b 1 +) + +REM Detect architecture +if "%PROCESSOR_ARCHITECTURE%"=="AMD64" ( + set DOWNLOAD_ARCH=amd64 +) else if "%PROCESSOR_ARCHITECTURE%"=="ARM64" ( + set DOWNLOAD_ARCH=arm64 +) else ( + echo ERROR: Unsupported architecture: %PROCESSOR_ARCHITECTURE% + echo Supported: AMD64, ARM64 + pause + exit /b 1 +) + +echo Detected architecture: %PROCESSOR_ARCHITECTURE% (using windows-%DOWNLOAD_ARCH%) +echo. + +REM Create installation directory +echo Creating installation directory... +if not exist "%AGENT_DIR%" mkdir "%AGENT_DIR%" +echo [OK] Installation directory created + +REM Create config directory +if not exist "%CONFIG_DIR%" mkdir "%CONFIG_DIR%" +echo [OK] Configuration directory created + +REM Grant full permissions to SYSTEM and Administrators on config directory +echo Setting permissions on configuration directory... +icacls "%CONFIG_DIR%" /grant "SYSTEM:(OI)(CI)F" +icacls "%CONFIG_DIR%" /grant "Administrators:(OI)(CI)F" +echo [OK] Permissions set +echo. + +REM Stop existing service if running (to allow binary update) +sc query RedFlagAgent >nul 2>&1 +if %errorLevel% equ 0 ( + echo Existing service detected - stopping to allow update... + sc stop RedFlagAgent >nul 2>&1 + timeout /t 3 /nobreak >nul + echo [OK] Service stopped +) + +REM Download agent binary +echo Downloading agent binary... +echo From: %REDFLAG_SERVER%/api/v1/downloads/windows-%DOWNLOAD_ARCH% +curl -sfL "%REDFLAG_SERVER%/api/v1/downloads/windows-%DOWNLOAD_ARCH%" -o "%AGENT_BINARY%" +if %errorLevel% neq 0 ( + echo ERROR: Failed to download agent binary + echo Please ensure %REDFLAG_SERVER% is accessible + pause + exit /b 1 +) +echo [OK] Agent binary downloaded +echo. + +REM Agent registration +echo === Agent Registration === +echo. + +REM Check if token was provided as command-line argument +if not "%1"=="" ( + set TOKEN=%1 + echo Using provided registration token +) else ( + echo IMPORTANT: You need a registration token to enroll this agent. + echo. + echo To get a token: + echo 1. Visit: %REDFLAG_SERVER%/settings/tokens + echo 2. Create a new registration token + echo 3. Copy the token + echo. + set /p TOKEN="Enter registration token (or press Enter to skip): " +) + +REM Check if agent is already registered +if exist "%CONFIG_DIR%\config.json" ( + echo. + echo [INFO] Agent already registered - configuration file exists + echo [INFO] Skipping registration to preserve agent history + echo [INFO] If you need to re-register, delete: %CONFIG_DIR%\config.json + echo. +) else if not "%TOKEN%"=="" ( + echo. + echo === Registering Agent === + echo. + + REM Attempt registration + "%AGENT_BINARY%" --server "%REDFLAG_SERVER%" --token "%TOKEN%" --register + + REM Check exit code + if %errorLevel% equ 0 ( + echo [OK] Agent registered successfully + echo [OK] Configuration saved to: %CONFIG_DIR%\config.json + echo. + ) else ( + echo. + echo [ERROR] Registration failed + echo. + echo Please check: + echo 1. Server is accessible: %REDFLAG_SERVER% + echo 2. Registration token is valid and not expired + echo 3. Token has available seats remaining + echo. + echo To try again: + echo "%AGENT_BINARY%" --server "%REDFLAG_SERVER%" --token "%TOKEN%" --register + echo. + pause + exit /b 1 + ) +) else ( + echo. + echo [INFO] No registration token provided - skipping registration + echo. + echo To register later: + echo "%AGENT_BINARY%" --server "%REDFLAG_SERVER%" --token YOUR_TOKEN --register +) + +REM Check if service already exists +echo. +echo === Configuring Windows Service === +echo. +sc query RedFlagAgent >nul 2>&1 +if %errorLevel% equ 0 ( + echo [INFO] RedFlag Agent service already installed + echo [INFO] Service will be restarted with updated binary + echo. +) else ( + echo Installing RedFlag Agent service... + "%AGENT_BINARY%" -install-service + if %errorLevel% equ 0 ( + echo [OK] Service installed successfully + echo. + + REM Give Windows SCM time to register the service + timeout /t 2 /nobreak >nul + ) else ( + echo [ERROR] Failed to install service + echo. + pause + exit /b 1 + ) +) + +REM Start the service if agent is registered +if exist "%CONFIG_DIR%\config.json" ( + echo Starting RedFlag Agent service... + "%AGENT_BINARY%" -start-service + if %errorLevel% equ 0 ( + echo [OK] RedFlag Agent service started + echo. + echo Agent is now running as a Windows service in the background. + echo You can verify it is working by checking the agent status in the web UI. + ) else ( + echo [WARNING] Failed to start service. You can start it manually: + echo "%AGENT_BINARY%" -start-service + echo Or use Windows Services: services.msc + ) +) else ( + echo [WARNING] Service not started (agent not registered) + echo To register and start the service: + echo 1. Register: "%AGENT_BINARY%" --server "%REDFLAG_SERVER%" --token YOUR_TOKEN --register + echo 2. Start: "%AGENT_BINARY%" -start-service +) + +echo. +echo === Installation Complete === +echo. +echo The RedFlag agent has been installed as a Windows service. +echo Configuration file: %CONFIG_DIR%\config.json +echo Agent binary: %AGENT_BINARY% +echo. +echo Managing the RedFlag Agent service: +echo Check status: "%AGENT_BINARY%" -service-status +echo Start manually: "%AGENT_BINARY%" -start-service +echo Stop service: "%AGENT_BINARY%" -stop-service +echo Remove service: "%AGENT_BINARY%" -remove-service +echo. +echo Alternative management with Windows Services: +echo Open services.msc and look for "RedFlag Update Agent" +echo. +echo To run the agent directly (for debugging): +echo "%AGENT_BINARY%" +echo. +echo To verify the agent is working: +echo 1. Check the web UI for the agent status +echo 2. Look for recent check-ins from this machine +echo. +pause +` default: return "# Unsupported platform" diff --git a/aggregator-server/internal/api/handlers/registration_tokens.go b/aggregator-server/internal/api/handlers/registration_tokens.go index 0a1f362..40bf505 100644 --- a/aggregator-server/internal/api/handlers/registration_tokens.go +++ b/aggregator-server/internal/api/handlers/registration_tokens.go @@ -8,6 +8,7 @@ import ( "github.com/Fimeg/RedFlag/aggregator-server/internal/config" "github.com/Fimeg/RedFlag/aggregator-server/internal/database/queries" "github.com/gin-gonic/gin" + "github.com/google/uuid" ) type RegistrationTokenHandler struct { @@ -29,6 +30,7 @@ func (h *RegistrationTokenHandler) GenerateRegistrationToken(c *gin.Context) { var request struct { Label string `json:"label" binding:"required"` ExpiresIn string `json:"expires_in"` // e.g., "24h", "7d", "168h" + MaxSeats int `json:"max_seats"` // Number of agents that can use this token Metadata map[string]interface{} `json:"metadata"` } @@ -86,8 +88,14 @@ func (h *RegistrationTokenHandler) GenerateRegistrationToken(c *gin.Context) { metadata["server_url"] = c.Request.Host metadata["expires_in"] = expiresIn + // Default max_seats to 1 if not provided or invalid + maxSeats := request.MaxSeats + if maxSeats < 1 { + maxSeats = 1 + } + // Store token in database - err = h.tokenQueries.CreateRegistrationToken(token, request.Label, expiresAt, metadata) + err = h.tokenQueries.CreateRegistrationToken(token, request.Label, expiresAt, maxSeats, metadata) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to create token"}) return @@ -117,6 +125,7 @@ func (h *RegistrationTokenHandler) ListRegistrationTokens(c *gin.Context) { page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) limit, _ := strconv.Atoi(c.DefaultQuery("limit", "50")) status := c.Query("status") + isActive := c.Query("is_active") == "true" // Validate pagination if limit > 100 { @@ -131,10 +140,26 @@ func (h *RegistrationTokenHandler) ListRegistrationTokens(c *gin.Context) { var tokens []queries.RegistrationToken var err error - if status != "" { - // TODO: Add filtered queries by status - tokens, err = h.tokenQueries.GetAllRegistrationTokens(limit, offset) + // Handle filtering by active status + if isActive || status == "active" { + // Get only active tokens (no pagination for active-only queries) + tokens, err = h.tokenQueries.GetActiveRegistrationTokens() + + // Apply manual pagination to active tokens if needed + if err == nil && len(tokens) > 0 { + start := offset + end := offset + limit + if start >= len(tokens) { + tokens = []queries.RegistrationToken{} + } else { + if end > len(tokens) { + end = len(tokens) + } + tokens = tokens[start:end] + } + } } else { + // Get all tokens with database-level pagination tokens, err = h.tokenQueries.GetAllRegistrationTokens(limit, offset) } @@ -213,6 +238,34 @@ func (h *RegistrationTokenHandler) RevokeRegistrationToken(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"message": "Token revoked successfully"}) } +// DeleteRegistrationToken permanently deletes a registration token +func (h *RegistrationTokenHandler) DeleteRegistrationToken(c *gin.Context) { + tokenID := c.Param("id") + if tokenID == "" { + c.JSON(http.StatusBadRequest, gin.H{"error": "Token ID is required"}) + return + } + + // Parse UUID + id, err := uuid.Parse(tokenID) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid token ID format"}) + return + } + + err = h.tokenQueries.DeleteRegistrationToken(id) + if err != nil { + if err.Error() == "token not found" { + c.JSON(http.StatusNotFound, gin.H{"error": "Token not found"}) + } else { + c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to delete token"}) + } + return + } + + c.JSON(http.StatusOK, gin.H{"message": "Token deleted successfully"}) +} + // ValidateRegistrationToken checks if a token is valid (for testing/debugging) func (h *RegistrationTokenHandler) ValidateRegistrationToken(c *gin.Context) { token := c.Query("token") diff --git a/aggregator-server/internal/api/handlers/setup.go b/aggregator-server/internal/api/handlers/setup.go index 23c01c7..ec9baaf 100644 --- a/aggregator-server/internal/api/handlers/setup.go +++ b/aggregator-server/internal/api/handlers/setup.go @@ -2,16 +2,15 @@ package handlers import ( "crypto/sha256" + "database/sql" "encoding/hex" "fmt" "net/http" - "os" - "os/exec" - "path/filepath" "strconv" - "time" "github.com/gin-gonic/gin" + "github.com/lib/pq" + _ "github.com/lib/pq" ) // SetupHandler handles server configuration @@ -25,8 +24,81 @@ func NewSetupHandler(configPath string) *SetupHandler { } } +// updatePostgresPassword updates the PostgreSQL user password +func updatePostgresPassword(dbHost, dbPort, dbUser, currentPassword, newPassword string) error { + // Connect to PostgreSQL with current credentials + connStr := fmt.Sprintf("postgres://%s:%s@%s:%s/postgres?sslmode=disable", dbUser, currentPassword, dbHost, dbPort) + + db, err := sql.Open("postgres", connStr) + if err != nil { + return fmt.Errorf("failed to connect to PostgreSQL: %v", err) + } + defer db.Close() + + // Test connection + if err := db.Ping(); err != nil { + return fmt.Errorf("failed to ping PostgreSQL: %v", err) + } + + // Update the password + _, err = db.Exec("ALTER USER "+pq.QuoteIdentifier(dbUser)+" PASSWORD '"+newPassword+"'") + if err != nil { + return fmt.Errorf("failed to update PostgreSQL password: %v", err) + } + + fmt.Println("PostgreSQL password updated successfully") + return nil +} + +// createSharedEnvContentForDisplay generates the .env file content for display +func createSharedEnvContentForDisplay(req struct { + AdminUser string `json:"adminUser"` + AdminPass string `json:"adminPassword"` + DBHost string `json:"dbHost"` + DBPort string `json:"dbPort"` + DBName string `json:"dbName"` + DBUser string `json:"dbUser"` + DBPassword string `json:"dbPassword"` + ServerHost string `json:"serverHost"` + ServerPort string `json:"serverPort"` + MaxSeats string `json:"maxSeats"` +}, jwtSecret string) (string, error) { + // Generate .env file content for user to copy + envContent := fmt.Sprintf(`# RedFlag Environment Configuration +# Generated by web setup - Save this content to ./config/.env + +# PostgreSQL Configuration (for PostgreSQL container) +POSTGRES_DB=%s +POSTGRES_USER=%s +POSTGRES_PASSWORD=%s + +# RedFlag Server Configuration +REDFLAG_SERVER_HOST=%s +REDFLAG_SERVER_PORT=%s +REDFLAG_DB_HOST=%s +REDFLAG_DB_PORT=%s +REDFLAG_DB_NAME=%s +REDFLAG_DB_USER=%s +REDFLAG_DB_PASSWORD=%s +REDFLAG_ADMIN_USER=%s +REDFLAG_ADMIN_PASSWORD=%s +REDFLAG_JWT_SECRET=%s +REDFLAG_TOKEN_EXPIRY=24h +REDFLAG_MAX_TOKENS=100 +REDFLAG_MAX_SEATS=%s`, + req.DBName, req.DBUser, req.DBPassword, + req.ServerHost, req.ServerPort, + req.DBHost, req.DBPort, req.DBName, req.DBUser, req.DBPassword, + req.AdminUser, req.AdminPass, jwtSecret, req.MaxSeats) + + return envContent, nil +} + // ShowSetupPage displays the web setup interface func (h *SetupHandler) ShowSetupPage(c *gin.Context) { + // Display setup page - configuration will be generated via web interface + fmt.Println("Showing setup page - configuration will be generated via web interface") + html := ` @@ -46,19 +118,16 @@ func (h *SetupHandler) ShowSetupPage(c *gin.Context) { .form-section h3 { color: #4f46e5; margin-bottom: 15px; font-size: 1.2rem; } .form-group { margin-bottom: 20px; } label { display: block; margin-bottom: 5px; font-weight: 500; color: #374151; } - input, select { width: 100%; padding: 12px; border: 2px solid #e5e7eb; border-radius: 6px; font-size: 1rem; transition: border-color 0.3s; } + input, select { width: 100%%; padding: 12px; border: 2px solid #e5e7eb; border-radius: 6px; font-size: 1rem; transition: border-color 0.3s; } input:focus, select:focus { outline: none; border-color: #4f46e5; box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.1); } - input[type="password"] { font-family: monospace; } - .button { background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%); color: white; border: none; padding: 14px 28px; border-radius: 6px; font-size: 1rem; font-weight: 600; cursor: pointer; transition: transform 0.2s; } - .button:hover { transform: translateY(-1px); } - .button:active { transform: translateY(0); } - .progress { background: #f3f4f6; border-radius: 6px; height: 8px; overflow: hidden; margin: 20px 0; } - .progress-bar { background: linear-gradient(90deg, #4f46e5, #7c3aed); height: 100%; width: 0%; transition: width 0.3s; } - .status { text-align: center; padding: 20px; display: none; } - .error { background: #fef2f2; color: #dc2626; padding: 15px; border-radius: 6px; margin: 20px 0; border: 1px solid #fecaca; } - .success { background: #f0fdf4; color: #16a34a; padding: 15px; border-radius: 6px; margin: 20px 0; border: 1px solid #bbf7d0; } - .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; } - @media (max-width: 768px) { .grid { grid-template-columns: 1fr; } } + .btn { background: linear-gradient(135deg, #4f46e5 0%%, #7c3aed 100%%); color: white; border: none; padding: 14px 28px; border-radius: 6px; font-size: 1rem; font-weight: 600; cursor: pointer; transition: transform 0.2s; } + .btn:hover { transform: translateY(-2px); } + .btn:disabled { opacity: 0.6; cursor: not-allowed; transform: none; } + .success { color: #10b981; background: #ecfdf5; padding: 12px; border-radius: 6px; border: 1px solid #10b981; } + .error { color: #ef4444; background: #fef2f2; padding: 12px; border-radius: 6px; border: 1px solid #ef4444; } + .loading { display: none; text-align: center; margin: 20px 0; } + .spinner { border: 3px solid #f3f3f3; border-top: 3px solid #4f46e5; border-radius: 50%%; width: 40px; height: 40px; animation: spin 1s linear infinite; margin: 0 auto; } + @keyframes spin { 0%% { transform: rotate(0deg); } 100%% { transform: rotate(360deg); } } @@ -66,76 +135,78 @@ func (h *SetupHandler) ShowSetupPage(c *gin.Context) {

🚀 RedFlag Server Setup

-

Configure your update management server

+

Configure your RedFlag deployment

-

🔐 Admin Account

-
-
- - -
-
- - -
-
-
- -
-

💾 Database Configuration

-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
- -
-

🌐 Server Configuration

-
-
- - -
-
- - -
+

📊 Server Configuration

+
+ +
- - + +
-
@@ -144,56 +215,113 @@ func (h *SetupHandler) ShowSetupPage(c *gin.Context) { document.getElementById('setupForm').addEventListener('submit', async function(e) { e.preventDefault(); - const formData = new FormData(e.target); - const data = Object.fromEntries(formData.entries()); + const submitBtn = document.getElementById('submitBtn'); + const loading = document.getElementById('loading'); + const result = document.getElementById('result'); - const progress = document.getElementById('progress'); - const progressBar = document.getElementById('progressBar'); - const status = document.getElementById('status'); - const submitButton = e.target.querySelector('button[type="submit"]'); + // Get form values + const formData = { + serverHost: document.getElementById('serverHost').value, + serverPort: document.getElementById('serverPort').value, + dbHost: document.getElementById('dbHost').value, + dbPort: document.getElementById('dbPort').value, + dbName: document.getElementById('dbName').value, + dbUser: document.getElementById('dbUser').value, + dbPassword: document.getElementById('dbPassword').value, + adminUser: document.getElementById('adminUser').value, + adminPassword: document.getElementById('adminPassword').value, + maxSeats: document.getElementById('maxSeats').value + }; - // Show progress and disable button - progress.style.display = 'block'; - submitButton.disabled = true; - submitButton.textContent = 'Configuring...'; + // Validate inputs + if (!formData.adminUser || !formData.adminPassword) { + result.innerHTML = '
❌ Admin username and password are required
'; + return; + } + + if (!formData.dbHost || !formData.dbPort || !formData.dbName || !formData.dbUser || !formData.dbPassword) { + result.innerHTML = '
❌ All database fields are required
'; + return; + } + + // Show loading + submitBtn.disabled = true; + loading.style.display = 'block'; + result.innerHTML = ''; try { - const response = await fetch('/api/v1/setup', { + const response = await fetch('/api/setup/configure', { method: 'POST', headers: { 'Content-Type': 'application/json', }, - body: JSON.stringify(data) + body: JSON.stringify(formData) }); - const result = await response.json(); + const resultData = await response.json(); if (response.ok) { - // Success - progressBar.style.width = '100%'; - status.innerHTML = '
✅ ' + result.message + '
'; - submitButton.textContent = 'Configuration Complete'; + let resultHtml = '
'; + resultHtml += '

✅ Configuration Generated Successfully!

'; + resultHtml += '

Your JWT Secret: ' + resultData.jwtSecret + ' '; + resultHtml += '

'; + resultHtml += '

⚠️ Important Next Steps:

'; + resultHtml += '
'; + resultHtml += '

🔧 Complete Setup Required:

'; + resultHtml += '
    '; + resultHtml += '
  1. Replace the bootstrap environment variables with the newly generated ones below
  2. '; + resultHtml += '
  3. Run: ' + resultData.manualRestartCommand + '
  4. '; + resultHtml += '
'; + resultHtml += '

This step is required to apply your configuration and run database migrations.

'; + resultHtml += '
'; + resultHtml += '
'; + + resultHtml += '
'; + resultHtml += '

📄 Configuration Content:

'; + resultHtml += ''; + resultHtml += ''; + resultHtml += '
'; + + result.innerHTML = resultHtml; + loading.style.display = 'none'; + + // Store JWT for copy function + window.jwtSecret = resultData.jwtSecret; + window.envContent = resultData.envContent; - // Redirect to admin interface after delay - setTimeout(() => { - window.location.href = '/admin'; - }, 3000); } else { - // Error - status.innerHTML = '
❌ ' + result.error + '
'; - submitButton.disabled = false; - submitButton.textContent = 'Configure Server'; + result.innerHTML = '
❌ Error: ' + resultData.error + '
'; + submitBtn.disabled = false; + loading.style.display = 'none'; } } catch (error) { - status.innerHTML = '
❌ Network error: ' + error.message + '
'; - submitButton.disabled = false; - submitButton.textContent = 'Configure Server'; + result.innerHTML = '
❌ Network error: ' + error.message + '
'; + submitBtn.disabled = false; + loading.style.display = 'none'; } }); + + function copyJWT(jwt) { + navigator.clipboard.writeText(jwt).then(() => { + alert('JWT secret copied to clipboard!'); + }).catch(() => { + prompt('Copy this JWT secret:', jwt); + }); + } + + function copyConfig() { + if (window.envContent) { + navigator.clipboard.writeText(window.envContent).then(() => { + alert('Configuration copied to clipboard!'); + }).catch(() => { + prompt('Copy this configuration:', window.envContent); + }); + } + } ` - c.Data(200, "text/html; charset=utf-8", []byte(html)) + c.Data(http.StatusOK, "text/html; charset=utf-8", []byte(html)) } // ConfigureServer handles the configuration submission @@ -246,95 +374,36 @@ func (h *SetupHandler) ConfigureServer(c *gin.Context) { return } - // Create configuration content - envContent := fmt.Sprintf(`# RedFlag Server Configuration -# Generated by web setup + // Generate JWT secret for display (not logged for security) + jwtSecret := deriveJWTSecret(req.AdminUser, req.AdminPass) -# Server Configuration -REDFLAG_SERVER_HOST=%s -REDFLAG_SERVER_PORT=%d -REDFLAG_TLS_ENABLED=false -# REDFLAG_TLS_CERT_FILE= -# REDFLAG_TLS_KEY_FILE= - -# Database Configuration -REDFLAG_DB_HOST=%s -REDFLAG_DB_PORT=%d -REDFLAG_DB_NAME=%s -REDFLAG_DB_USER=%s -REDFLAG_DB_PASSWORD=%s - -# Admin Configuration -REDFLAG_ADMIN_USER=%s -REDFLAG_ADMIN_PASSWORD=%s -REDFLAG_JWT_SECRET=%s - -# Agent Registration -REDFLAG_TOKEN_EXPIRY=24h -REDFLAG_MAX_TOKENS=100 -REDFLAG_MAX_SEATS=%d - -# Legacy Configuration (for backwards compatibility) -SERVER_PORT=%d -DATABASE_URL=postgres://%s:%s@%s:%d/%s?sslmode=disable -JWT_SECRET=%s -CHECK_IN_INTERVAL=300 -OFFLINE_THRESHOLD=600 -TIMEZONE=UTC -LATEST_AGENT_VERSION=0.1.16`, - req.ServerHost, serverPort, - req.DBHost, dbPort, req.DBName, req.DBUser, req.DBPassword, - req.AdminUser, req.AdminPass, deriveJWTSecret(req.AdminUser, req.AdminPass), - maxSeats, - serverPort, req.DBUser, req.DBPassword, req.DBHost, dbPort, req.DBName, deriveJWTSecret(req.AdminUser, req.AdminPass)) - - // Write configuration to persistent location - configDir := "/app/config" - if err := os.MkdirAll(configDir, 0755); err != nil { - fmt.Printf("Failed to create config directory: %v\n", err) - c.JSON(http.StatusInternalServerError, gin.H{"error": fmt.Sprintf("Failed to create config directory: %v", err)}) - return + // Step 1: Update PostgreSQL password from bootstrap to user password + fmt.Println("Updating PostgreSQL password from bootstrap to user-provided password...") + bootstrapPassword := "redflag_bootstrap" // This matches our bootstrap .env + if err := updatePostgresPassword(req.DBHost, req.DBPort, req.DBUser, bootstrapPassword, req.DBPassword); err != nil { + fmt.Printf("Warning: Failed to update PostgreSQL password: %v\n", err) + fmt.Println("Will proceed with configuration anyway...") } - envPath := filepath.Join(configDir, ".env") - if err := os.WriteFile(envPath, []byte(envContent), 0600); err != nil { - fmt.Printf("Failed to save configuration: %v\n", err) - c.JSON(http.StatusInternalServerError, gin.H{"error": fmt.Sprintf("Failed to save configuration: %v", err)}) + // Step 2: Generate configuration content for manual update + fmt.Println("Generating configuration content for manual .env file update...") + + // Generate the complete .env file content for the user to copy + newEnvContent, err := createSharedEnvContentForDisplay(req, jwtSecret) + if err != nil { + fmt.Printf("Failed to generate .env content: %v\n", err) + c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to generate configuration content"}) return } - // Trigger graceful server restart after configuration - go func() { - time.Sleep(2 * time.Second) // Give response time to reach client - - // Get the current executable path - execPath, err := os.Executable() - if err != nil { - fmt.Printf("Failed to get executable path: %v\n", err) - return - } - - // Restart the server with the same executable - cmd := exec.Command(execPath) - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - cmd.Stdin = os.Stdin - - // Start the new process - if err := cmd.Start(); err != nil { - fmt.Printf("Failed to start new server process: %v\n", err) - return - } - - // Exit the current process gracefully - fmt.Printf("Server restarting... PID: %d\n", cmd.Process.Pid) - os.Exit(0) - }() - c.JSON(http.StatusOK, gin.H{ - "message": "Configuration saved successfully! Server will restart automatically.", - "configPath": envPath, - "restart": true, + "message": "Configuration generated successfully!", + "jwtSecret": jwtSecret, + "envContent": newEnvContent, + "restartMessage": "Please replace the bootstrap environment variables with the newly generated ones, then run: docker-compose down && docker-compose up -d", + "manualRestartRequired": true, + "manualRestartCommand": "docker-compose down && docker-compose up -d", + "configFilePath": "./config/.env", }) } diff --git a/aggregator-server/internal/config/config.go b/aggregator-server/internal/config/config.go index bcc4443..b9282dd 100644 --- a/aggregator-server/internal/config/config.go +++ b/aggregator-server/internal/config/config.go @@ -6,24 +6,19 @@ import ( "encoding/hex" "fmt" "os" - "path/filepath" "strconv" - "strings" - "time" - - "github.com/joho/godotenv" - "golang.org/x/term" ) // Config holds the application configuration type Config struct { Server struct { - Host string `env:"REDFLAG_SERVER_HOST" default:"0.0.0.0"` - Port int `env:"REDFLAG_SERVER_PORT" default:"8080"` - TLS struct { - Enabled bool `env:"REDFLAG_TLS_ENABLED" default:"false"` - CertFile string `env:"REDFLAG_TLS_CERT_FILE"` - KeyFile string `env:"REDFLAG_TLS_KEY_FILE"` + Host string `env:"REDFLAG_SERVER_HOST" default:"0.0.0.0"` + Port int `env:"REDFLAG_SERVER_PORT" default:"8080"` + PublicURL string `env:"REDFLAG_PUBLIC_URL"` // Optional: External URL for reverse proxy/load balancer + TLS struct { + Enabled bool `env:"REDFLAG_TLS_ENABLED" default:"false"` + CertFile string `env:"REDFLAG_TLS_CERT_FILE"` + KeyFile string `env:"REDFLAG_TLS_KEY_FILE"` } } Database struct { @@ -49,17 +44,9 @@ type Config struct { LatestAgentVersion string } -// Load reads configuration from environment variables +// Load reads configuration from environment variables only (immutable configuration) func Load() (*Config, error) { - // Load .env file from persistent config directory - configPaths := []string{"/app/config/.env", ".env"} - - for _, path := range configPaths { - if _, err := os.Stat(path); err == nil { - _ = godotenv.Load(path) - break - } - } + fmt.Printf("[CONFIG] Loading configuration from environment variables\n") cfg := &Config{} @@ -67,6 +54,7 @@ func Load() (*Config, error) { cfg.Server.Host = getEnv("REDFLAG_SERVER_HOST", "0.0.0.0") serverPort, _ := strconv.Atoi(getEnv("REDFLAG_SERVER_PORT", "8080")) cfg.Server.Port = serverPort + cfg.Server.PublicURL = getEnv("REDFLAG_PUBLIC_URL", "") // Optional external URL cfg.Server.TLS.Enabled = getEnv("REDFLAG_TLS_ENABLED", "false") == "true" cfg.Server.TLS.CertFile = getEnv("REDFLAG_TLS_CERT_FILE", "") cfg.Server.TLS.KeyFile = getEnv("REDFLAG_TLS_KEY_FILE", "") @@ -106,6 +94,13 @@ func Load() (*Config, error) { return nil, fmt.Errorf("missing required configuration") } + // Check if we're using bootstrap defaults that need to be replaced + if cfg.Admin.Password == "changeme" || cfg.Admin.JWTSecret == "bootstrap-jwt-secret-replace-in-setup" || cfg.Database.Password == "redflag_bootstrap" { + fmt.Printf("[INFO] Server running with bootstrap configuration - setup required\n") + fmt.Printf("[INFO] Configure via web interface at: http://localhost:8080/setup\n") + return nil, fmt.Errorf("bootstrap configuration detected - setup required") + } + // Validate JWT secret is not the development default if cfg.Admin.JWTSecret == "test-secret-for-development-only" { fmt.Printf("[SECURITY WARNING] Using development JWT secret\n") @@ -115,103 +110,9 @@ func Load() (*Config, error) { return cfg, nil } -// RunSetupWizard guides user through initial configuration +// RunSetupWizard is deprecated - configuration is now handled via web interface func RunSetupWizard() error { - fmt.Printf("RedFlag Server Setup Wizard\n") - fmt.Printf("===========================\n\n") - - // Admin credentials - fmt.Printf("Admin Account Setup\n") - fmt.Printf("--------------------\n") - username := promptForInput("Admin username", "admin") - password := promptForPassword("Admin password") - - // Database configuration - fmt.Printf("\nDatabase Configuration\n") - fmt.Printf("----------------------\n") - dbHost := promptForInput("Database host", "localhost") - dbPort, _ := strconv.Atoi(promptForInput("Database port", "5432")) - dbName := promptForInput("Database name", "redflag") - dbUser := promptForInput("Database user", "redflag") - dbPassword := promptForPassword("Database password") - - // Server configuration - fmt.Printf("\nServer Configuration\n") - fmt.Printf("--------------------\n") - serverHost := promptForInput("Server bind address", "0.0.0.0") - serverPort, _ := strconv.Atoi(promptForInput("Server port", "8080")) - - // Agent limits - fmt.Printf("\nAgent Registration\n") - fmt.Printf("------------------\n") - maxSeats, _ := strconv.Atoi(promptForInput("Maximum agent seats (security limit)", "50")) - - // Generate JWT secret from admin password - jwtSecret := deriveJWTSecret(username, password) - - // Create .env file - envContent := fmt.Sprintf(`# RedFlag Server Configuration -# Generated on %s - -# Server Configuration -REDFLAG_SERVER_HOST=%s -REDFLAG_SERVER_PORT=%d -REDFLAG_TLS_ENABLED=false -# REDFLAG_TLS_CERT_FILE= -# REDFLAG_TLS_KEY_FILE= - -# Database Configuration -REDFLAG_DB_HOST=%s -REDFLAG_DB_PORT=%d -REDFLAG_DB_NAME=%s -REDFLAG_DB_USER=%s -REDFLAG_DB_PASSWORD=%s - -# Admin Configuration -REDFLAG_ADMIN_USER=%s -REDFLAG_ADMIN_PASSWORD=%s -REDFLAG_JWT_SECRET=%s - -# Agent Registration -REDFLAG_TOKEN_EXPIRY=24h -REDFLAG_MAX_TOKENS=100 -REDFLAG_MAX_SEATS=%d - -# Legacy Configuration (for backwards compatibility) -SERVER_PORT=%d -DATABASE_URL=postgres://%s:%s@%s:%d/%s?sslmode=disable -JWT_SECRET=%s -CHECK_IN_INTERVAL=300 -OFFLINE_THRESHOLD=600 -TIMEZONE=UTC -LATEST_AGENT_VERSION=0.1.8 -`, time.Now().Format("2006-01-02 15:04:05"), serverHost, serverPort, - dbHost, dbPort, dbName, dbUser, dbPassword, - username, password, jwtSecret, maxSeats, - serverPort, dbUser, dbPassword, dbHost, dbPort, dbName, jwtSecret) - - // Write .env file to persistent location - configDir := "/app/config" - if err := os.MkdirAll(configDir, 0755); err != nil { - return fmt.Errorf("failed to create config directory: %w", err) - } - - envPath := filepath.Join(configDir, ".env") - if err := os.WriteFile(envPath, []byte(envContent), 0600); err != nil { - return fmt.Errorf("failed to write .env file: %w", err) - } - - fmt.Printf("\n[OK] Configuration saved to .env file\n") - fmt.Printf("[SECURITY] File permissions set to 0600 (owner read/write only)\n") - fmt.Printf("\nNext steps:\n") - fmt.Printf(" 1. Start database: %s:%d\n", dbHost, dbPort) - fmt.Printf(" 2. Create database: CREATE DATABASE %s;\n", dbName) - fmt.Printf(" 3. Run migrations: ./redflag-server --migrate\n") - fmt.Printf(" 4. Start server: ./redflag-server\n") - fmt.Printf("\nServer will be available at: http://%s:%d\n", serverHost, serverPort) - fmt.Printf("Admin interface: http://%s:%d/admin\n", serverHost, serverPort) - - return nil + return fmt.Errorf("CLI setup wizard is deprecated. Please use the web interface at http://localhost:8080/setup for configuration") } func getEnv(key, defaultValue string) string { @@ -221,28 +122,6 @@ func getEnv(key, defaultValue string) string { return defaultValue } -func promptForInput(prompt, defaultValue string) string { - fmt.Printf("%s [%s]: ", prompt, defaultValue) - var input string - fmt.Scanln(&input) - if strings.TrimSpace(input) == "" { - return defaultValue - } - return strings.TrimSpace(input) -} - -func promptForPassword(prompt string) string { - fmt.Printf("%s: ", prompt) - password, err := term.ReadPassword(int(os.Stdin.Fd())) - if err != nil { - // Fallback to non-hidden input - var input string - fmt.Scanln(&input) - return strings.TrimSpace(input) - } - fmt.Printf("\n") - return strings.TrimSpace(string(password)) -} func deriveJWTSecret(username, password string) string { // Derive JWT secret from admin credentials diff --git a/aggregator-server/internal/database/db.go b/aggregator-server/internal/database/db.go index bb8585c..09f8388 100644 --- a/aggregator-server/internal/database/db.go +++ b/aggregator-server/internal/database/db.go @@ -35,8 +35,18 @@ func Connect(databaseURL string) (*DB, error) { return &DB{db}, nil } -// Migrate runs database migrations +// Migrate runs database migrations with proper tracking func (db *DB) Migrate(migrationsPath string) error { + // Create migrations table if it doesn't exist + createTableSQL := ` + CREATE TABLE IF NOT EXISTS schema_migrations ( + version VARCHAR(255) PRIMARY KEY, + applied_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() + )` + if _, err := db.Exec(createTableSQL); err != nil { + return fmt.Errorf("failed to create migrations table: %w", err) + } + // Read migration files files, err := os.ReadDir(migrationsPath) if err != nil { @@ -52,18 +62,67 @@ func (db *DB) Migrate(migrationsPath string) error { } sort.Strings(migrationFiles) - // Execute migrations + // Execute migrations that haven't been applied yet for _, filename := range migrationFiles { + // Check if migration has already been applied + var count int + err := db.Get(&count, "SELECT COUNT(*) FROM schema_migrations WHERE version = $1", filename) + if err != nil { + return fmt.Errorf("failed to check migration status for %s: %w", filename, err) + } + + if count > 0 { + fmt.Printf("→ Skipping migration (already applied): %s\n", filename) + continue + } + + // Read migration file path := filepath.Join(migrationsPath, filename) content, err := os.ReadFile(path) if err != nil { return fmt.Errorf("failed to read migration %s: %w", filename, err) } - if _, err := db.Exec(string(content)); err != nil { + // Execute migration in a transaction + tx, err := db.Beginx() + if err != nil { + return fmt.Errorf("failed to begin transaction for migration %s: %w", filename, err) + } + + // Execute the migration SQL + if _, err := tx.Exec(string(content)); err != nil { + // Check if it's a "already exists" error - if so, handle gracefully + if strings.Contains(err.Error(), "already exists") || + strings.Contains(err.Error(), "duplicate key") || + strings.Contains(err.Error(), "relation") && strings.Contains(err.Error(), "already exists") { + fmt.Printf("⚠ Migration %s failed (objects already exist), marking as applied: %v\n", filename, err) + // Rollback current transaction and start a new one for tracking + tx.Rollback() + // Start new transaction just for migration tracking + if newTx, newTxErr := db.Beginx(); newTxErr == nil { + if _, insertErr := newTx.Exec("INSERT INTO schema_migrations (version) VALUES ($1)", filename); insertErr == nil { + newTx.Commit() + } else { + newTx.Rollback() + } + } + continue + } + tx.Rollback() return fmt.Errorf("failed to execute migration %s: %w", filename, err) } + // Record the migration as applied + if _, err := tx.Exec("INSERT INTO schema_migrations (version) VALUES ($1)", filename); err != nil { + tx.Rollback() + return fmt.Errorf("failed to record migration %s: %w", filename, err) + } + + // Commit the transaction + if err := tx.Commit(); err != nil { + return fmt.Errorf("failed to commit migration %s: %w", filename, err) + } + fmt.Printf("✓ Executed migration: %s\n", filename) } diff --git a/aggregator-server/internal/database/migrations/003_create_update_tables.sql b/aggregator-server/internal/database/migrations/003_create_update_tables.up.sql similarity index 100% rename from aggregator-server/internal/database/migrations/003_create_update_tables.sql rename to aggregator-server/internal/database/migrations/003_create_update_tables.up.sql diff --git a/aggregator-server/internal/database/migrations/004_fix_update_logs_foreign_key.sql b/aggregator-server/internal/database/migrations/004_fix_update_logs_foreign_key.up.sql similarity index 100% rename from aggregator-server/internal/database/migrations/004_fix_update_logs_foreign_key.sql rename to aggregator-server/internal/database/migrations/004_fix_update_logs_foreign_key.up.sql diff --git a/aggregator-server/internal/database/migrations/005_add_pending_dependencies_status.sql b/aggregator-server/internal/database/migrations/005_add_pending_dependencies_status.up.sql similarity index 100% rename from aggregator-server/internal/database/migrations/005_add_pending_dependencies_status.sql rename to aggregator-server/internal/database/migrations/005_add_pending_dependencies_status.up.sql diff --git a/aggregator-server/internal/database/migrations/006_add_missing_command_statuses.sql b/aggregator-server/internal/database/migrations/006_add_missing_command_statuses.up.sql similarity index 100% rename from aggregator-server/internal/database/migrations/006_add_missing_command_statuses.sql rename to aggregator-server/internal/database/migrations/006_add_missing_command_statuses.up.sql diff --git a/aggregator-server/internal/database/migrations/007_expand_status_column_length.sql b/aggregator-server/internal/database/migrations/007_expand_status_column_length.up.sql similarity index 100% rename from aggregator-server/internal/database/migrations/007_expand_status_column_length.sql rename to aggregator-server/internal/database/migrations/007_expand_status_column_length.up.sql diff --git a/aggregator-server/internal/database/migrations/008_create_refresh_tokens_table.sql b/aggregator-server/internal/database/migrations/008_create_refresh_tokens_table.up.sql similarity index 100% rename from aggregator-server/internal/database/migrations/008_create_refresh_tokens_table.sql rename to aggregator-server/internal/database/migrations/008_create_refresh_tokens_table.up.sql diff --git a/aggregator-server/internal/database/migrations/009_add_agent_version_tracking.sql b/aggregator-server/internal/database/migrations/009_add_agent_version_tracking.up.sql similarity index 100% rename from aggregator-server/internal/database/migrations/009_add_agent_version_tracking.sql rename to aggregator-server/internal/database/migrations/009_add_agent_version_tracking.up.sql diff --git a/aggregator-server/internal/database/migrations/009_add_retry_tracking.sql b/aggregator-server/internal/database/migrations/009_add_retry_tracking.up.sql similarity index 100% rename from aggregator-server/internal/database/migrations/009_add_retry_tracking.sql rename to aggregator-server/internal/database/migrations/009_add_retry_tracking.up.sql diff --git a/aggregator-server/internal/database/migrations/010_add_archived_failed_status.sql b/aggregator-server/internal/database/migrations/010_add_archived_failed_status.up.sql similarity index 100% rename from aggregator-server/internal/database/migrations/010_add_archived_failed_status.sql rename to aggregator-server/internal/database/migrations/010_add_archived_failed_status.up.sql diff --git a/aggregator-server/internal/database/migrations/011_create_registration_tokens_table.sql b/aggregator-server/internal/database/migrations/011_create_registration_tokens_table.up.sql similarity index 100% rename from aggregator-server/internal/database/migrations/011_create_registration_tokens_table.sql rename to aggregator-server/internal/database/migrations/011_create_registration_tokens_table.up.sql diff --git a/aggregator-server/internal/database/migrations/012_add_token_seats.up.sql b/aggregator-server/internal/database/migrations/012_add_token_seats.up.sql new file mode 100644 index 0000000..65cfffa --- /dev/null +++ b/aggregator-server/internal/database/migrations/012_add_token_seats.up.sql @@ -0,0 +1,118 @@ +-- Add seat tracking to registration tokens for multi-use support +-- This allows tokens to be used multiple times up to a configured limit + +-- Add seats columns +ALTER TABLE registration_tokens + ADD COLUMN max_seats INT NOT NULL DEFAULT 1, + ADD COLUMN seats_used INT NOT NULL DEFAULT 0; + +-- Backfill existing tokens +-- Tokens with status='used' should have seats_used=1, max_seats=1 +UPDATE registration_tokens +SET seats_used = 1, + max_seats = 1 +WHERE status = 'used'; + +-- Active/expired/revoked tokens get max_seats=1, seats_used=0 +UPDATE registration_tokens +SET seats_used = 0, + max_seats = 1 +WHERE status IN ('active', 'expired', 'revoked'); + +-- Add constraint to ensure seats_used doesn't exceed max_seats +ALTER TABLE registration_tokens + ADD CONSTRAINT chk_seats_used_within_max + CHECK (seats_used <= max_seats); + +-- Add constraint to ensure positive seat values +ALTER TABLE registration_tokens + ADD CONSTRAINT chk_seats_positive + CHECK (max_seats > 0 AND seats_used >= 0); + +-- Create table to track all agents that used a token (for audit trail) +CREATE TABLE IF NOT EXISTS registration_token_usage ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + token_id UUID NOT NULL REFERENCES registration_tokens(id) ON DELETE CASCADE, + agent_id UUID NOT NULL REFERENCES agents(id) ON DELETE CASCADE, + used_at TIMESTAMP DEFAULT NOW(), + UNIQUE(token_id, agent_id) +); + +CREATE INDEX idx_token_usage_token_id ON registration_token_usage(token_id); +CREATE INDEX idx_token_usage_agent_id ON registration_token_usage(agent_id); + +-- Backfill token usage table from existing used_by_agent_id +INSERT INTO registration_token_usage (token_id, agent_id, used_at) +SELECT id, used_by_agent_id, used_at +FROM registration_tokens +WHERE used_by_agent_id IS NOT NULL +ON CONFLICT (token_id, agent_id) DO NOTHING; + +-- Update is_registration_token_valid function to check seats +CREATE OR REPLACE FUNCTION is_registration_token_valid(token_input VARCHAR) +RETURNS BOOLEAN AS $$ +DECLARE + token_valid BOOLEAN; +BEGIN + SELECT (status = 'active' AND expires_at > NOW() AND seats_used < max_seats) INTO token_valid + FROM registration_tokens + WHERE token = token_input; + + RETURN COALESCE(token_valid, FALSE); +END; +$$ LANGUAGE plpgsql; + +-- Update mark_registration_token_used function to increment seats +CREATE OR REPLACE FUNCTION mark_registration_token_used(token_input VARCHAR, agent_id_param UUID) +RETURNS BOOLEAN AS $$ +DECLARE + rows_updated INTEGER; -- Fixed: Changed from BOOLEAN to INTEGER to match ROW_COUNT type + token_id_val UUID; + new_seats_used INT; + token_max_seats INT; +BEGIN + -- Get token ID and current seat info + SELECT id, seats_used + 1, max_seats INTO token_id_val, new_seats_used, token_max_seats + FROM registration_tokens + WHERE token = token_input + AND status = 'active' + AND expires_at > NOW() + AND seats_used < max_seats; + + -- If no token found or already full, return false + IF token_id_val IS NULL THEN + RETURN FALSE; + END IF; + + -- Increment seats_used + UPDATE registration_tokens + SET seats_used = new_seats_used, + used_at = CASE + WHEN used_at IS NULL THEN NOW() -- First use + ELSE used_at -- Keep original first use time + END, + -- Only mark as 'used' if all seats are now taken + status = CASE + WHEN new_seats_used >= token_max_seats THEN 'used' + ELSE 'active' + END + WHERE token = token_input + AND status = 'active'; + + GET DIAGNOSTICS rows_updated = ROW_COUNT; + + -- Record this usage in the audit table + IF rows_updated > 0 THEN + INSERT INTO registration_token_usage (token_id, agent_id, used_at) + VALUES (token_id_val, agent_id_param, NOW()) + ON CONFLICT (token_id, agent_id) DO NOTHING; + END IF; + + RETURN rows_updated > 0; +END; +$$ LANGUAGE plpgsql; + +-- Add comment for documentation +COMMENT ON COLUMN registration_tokens.max_seats IS 'Maximum number of agents that can register with this token'; +COMMENT ON COLUMN registration_tokens.seats_used IS 'Number of agents that have registered with this token'; +COMMENT ON TABLE registration_token_usage IS 'Audit trail of all agents registered with each token'; diff --git a/aggregator-server/internal/database/migrations/012_create_admin_user.up.sql b/aggregator-server/internal/database/migrations/012_create_admin_user.up.sql new file mode 100644 index 0000000..3b5606c --- /dev/null +++ b/aggregator-server/internal/database/migrations/012_create_admin_user.up.sql @@ -0,0 +1,10 @@ +-- Create admin user from environment configuration +-- This migration reads the admin credentials from environment variables +-- and creates the initial admin user in the database + +-- Note: This is a placeholder migration that will be executed by the application +-- The actual user creation logic is handled in the main application startup +-- to allow for proper password hashing and error handling + +-- The admin user creation is handled by the application during startup +-- This migration file exists for version tracking purposes \ No newline at end of file diff --git a/aggregator-server/internal/database/queries/registration_tokens.go b/aggregator-server/internal/database/queries/registration_tokens.go index 9dc072b..0b8fc6c 100644 --- a/aggregator-server/internal/database/queries/registration_tokens.go +++ b/aggregator-server/internal/database/queries/registration_tokens.go @@ -27,12 +27,15 @@ type RegistrationToken struct { RevokedReason *string `json:"revoked_reason" db:"revoked_reason"` Status string `json:"status" db:"status"` CreatedBy string `json:"created_by" db:"created_by"` - Metadata map[string]interface{} `json:"metadata" db:"metadata"` + Metadata json.RawMessage `json:"metadata" db:"metadata"` + MaxSeats int `json:"max_seats" db:"max_seats"` + SeatsUsed int `json:"seats_used" db:"seats_used"` } type TokenRequest struct { Label string `json:"label"` ExpiresIn string `json:"expires_in"` // e.g., "24h", "7d" + MaxSeats int `json:"max_seats"` // Number of agents that can use this token (default: 1) Metadata map[string]interface{} `json:"metadata"` } @@ -47,19 +50,24 @@ func NewRegistrationTokenQueries(db *sqlx.DB) *RegistrationTokenQueries { return &RegistrationTokenQueries{db: db} } -// CreateRegistrationToken creates a new one-time use registration token -func (q *RegistrationTokenQueries) CreateRegistrationToken(token, label string, expiresAt time.Time, metadata map[string]interface{}) error { +// CreateRegistrationToken creates a new registration token with seat tracking +func (q *RegistrationTokenQueries) CreateRegistrationToken(token, label string, expiresAt time.Time, maxSeats int, metadata map[string]interface{}) error { metadataJSON, err := json.Marshal(metadata) if err != nil { return fmt.Errorf("failed to marshal metadata: %w", err) } + // Ensure maxSeats is at least 1 + if maxSeats < 1 { + maxSeats = 1 + } + query := ` - INSERT INTO registration_tokens (token, label, expires_at, metadata) - VALUES ($1, $2, $3, $4) + INSERT INTO registration_tokens (token, label, expires_at, max_seats, metadata) + VALUES ($1, $2, $3, $4, $5) ` - _, err = q.db.Exec(query, token, label, expiresAt, metadataJSON) + _, err = q.db.Exec(query, token, label, expiresAt, maxSeats, metadataJSON) if err != nil { return fmt.Errorf("failed to create registration token: %w", err) } @@ -67,20 +75,21 @@ func (q *RegistrationTokenQueries) CreateRegistrationToken(token, label string, return nil } -// ValidateRegistrationToken checks if a token is valid and unused +// ValidateRegistrationToken checks if a token is valid and has available seats func (q *RegistrationTokenQueries) ValidateRegistrationToken(token string) (*RegistrationToken, error) { var regToken RegistrationToken query := ` SELECT id, token, label, expires_at, created_at, used_at, used_by_agent_id, - revoked, revoked_at, revoked_reason, status, created_by, metadata + revoked, revoked_at, revoked_reason, status, created_by, metadata, + max_seats, seats_used FROM registration_tokens - WHERE token = $1 AND status = 'active' AND expires_at > NOW() + WHERE token = $1 AND status = 'active' AND expires_at > NOW() AND seats_used < max_seats ` err := q.db.Get(®Token, query, token) if err != nil { if err == sql.ErrNoRows { - return nil, fmt.Errorf("invalid or expired token") + return nil, fmt.Errorf("invalid, expired, or seats full") } return nil, fmt.Errorf("failed to validate token: %w", err) } @@ -89,27 +98,19 @@ func (q *RegistrationTokenQueries) ValidateRegistrationToken(token string) (*Reg } // MarkTokenUsed marks a token as used by an agent +// With seat tracking, this increments seats_used and only marks status='used' when all seats are taken func (q *RegistrationTokenQueries) MarkTokenUsed(token string, agentID uuid.UUID) error { - query := ` - UPDATE registration_tokens - SET status = 'used', - used_at = NOW(), - used_by_agent_id = $1 - WHERE token = $2 AND status = 'active' AND expires_at > NOW() - ` + // Call the PostgreSQL function that handles seat tracking logic + query := `SELECT mark_registration_token_used($1, $2)` - result, err := q.db.Exec(query, agentID, token) + var success bool + err := q.db.QueryRow(query, token, agentID).Scan(&success) if err != nil { return fmt.Errorf("failed to mark token as used: %w", err) } - rowsAffected, err := result.RowsAffected() - if err != nil { - return fmt.Errorf("failed to get rows affected: %w", err) - } - - if rowsAffected == 0 { - return fmt.Errorf("token not found or already used") + if !success { + return fmt.Errorf("token not found, already used, expired, or seats full") } return nil @@ -120,7 +121,8 @@ func (q *RegistrationTokenQueries) GetActiveRegistrationTokens() ([]Registration var tokens []RegistrationToken query := ` SELECT id, token, label, expires_at, created_at, used_at, used_by_agent_id, - revoked, revoked_at, revoked_reason, status, created_by, metadata + revoked, revoked_at, revoked_reason, status, created_by, metadata, + max_seats, seats_used FROM registration_tokens WHERE status = 'active' ORDER BY created_at DESC @@ -139,7 +141,8 @@ func (q *RegistrationTokenQueries) GetAllRegistrationTokens(limit, offset int) ( var tokens []RegistrationToken query := ` SELECT id, token, label, expires_at, created_at, used_at, used_by_agent_id, - revoked, revoked_at, revoked_reason, status, created_by, metadata + revoked, revoked_at, revoked_reason, status, created_by, metadata, + max_seats, seats_used FROM registration_tokens ORDER BY created_at DESC LIMIT $1 OFFSET $2 @@ -153,7 +156,7 @@ func (q *RegistrationTokenQueries) GetAllRegistrationTokens(limit, offset int) ( return tokens, nil } -// RevokeRegistrationToken revokes a token +// RevokeRegistrationToken revokes a token (can revoke tokens in any status) func (q *RegistrationTokenQueries) RevokeRegistrationToken(token, reason string) error { query := ` UPDATE registration_tokens @@ -161,7 +164,7 @@ func (q *RegistrationTokenQueries) RevokeRegistrationToken(token, reason string) revoked = true, revoked_at = NOW(), revoked_reason = $1 - WHERE token = $2 AND status = 'active' + WHERE token = $2 ` result, err := q.db.Exec(query, reason, token) @@ -175,7 +178,28 @@ func (q *RegistrationTokenQueries) RevokeRegistrationToken(token, reason string) } if rowsAffected == 0 { - return fmt.Errorf("token not found or already used/revoked") + return fmt.Errorf("token not found") + } + + return nil +} + +// DeleteRegistrationToken permanently deletes a token from the database +func (q *RegistrationTokenQueries) DeleteRegistrationToken(tokenID uuid.UUID) error { + query := `DELETE FROM registration_tokens WHERE id = $1` + + result, err := q.db.Exec(query, tokenID) + if err != nil { + return fmt.Errorf("failed to delete token: %w", err) + } + + rowsAffected, err := result.RowsAffected() + if err != nil { + return fmt.Errorf("failed to get rows affected: %w", err) + } + + if rowsAffected == 0 { + return fmt.Errorf("token not found") } return nil diff --git a/aggregator-server/internal/database/queries/users.go b/aggregator-server/internal/database/queries/users.go new file mode 100644 index 0000000..31a3a3d --- /dev/null +++ b/aggregator-server/internal/database/queries/users.go @@ -0,0 +1,123 @@ +package queries + +import ( + "time" + + "github.com/Fimeg/RedFlag/aggregator-server/internal/models" + "github.com/google/uuid" + "github.com/jmoiron/sqlx" + "golang.org/x/crypto/bcrypt" +) + +type UserQueries struct { + db *sqlx.DB +} + +func NewUserQueries(db *sqlx.DB) *UserQueries { + return &UserQueries{db: db} +} + +// CreateUser inserts a new user into the database with password hashing +func (q *UserQueries) CreateUser(username, email, password, role string) (*models.User, error) { + // Hash the password + hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) + if err != nil { + return nil, err + } + + user := &models.User{ + ID: uuid.New(), + Username: username, + Email: email, + PasswordHash: string(hashedPassword), + Role: role, + CreatedAt: time.Now().UTC(), + } + + query := ` + INSERT INTO users ( + id, username, email, password_hash, role, created_at + ) VALUES ( + :id, :username, :email, :password_hash, :role, :created_at + ) + RETURNING * + ` + + rows, err := q.db.NamedQuery(query, user) + if err != nil { + return nil, err + } + defer rows.Close() + + if rows.Next() { + if err := rows.StructScan(user); err != nil { + return nil, err + } + return user, nil + } + + return nil, nil +} + +// GetUserByUsername retrieves a user by username +func (q *UserQueries) GetUserByUsername(username string) (*models.User, error) { + var user models.User + query := `SELECT * FROM users WHERE username = $1` + err := q.db.Get(&user, query, username) + if err != nil { + return nil, err + } + return &user, nil +} + +// VerifyCredentials checks if the provided username and password are valid +func (q *UserQueries) VerifyCredentials(username, password string) (*models.User, error) { + user, err := q.GetUserByUsername(username) + if err != nil { + return nil, err + } + + // Compare the provided password with the stored hash + err = bcrypt.CompareHashAndPassword([]byte(user.PasswordHash), []byte(password)) + if err != nil { + return nil, err // Invalid password + } + + // Update last login time + q.UpdateLastLogin(user.ID) + + // Don't return password hash + user.PasswordHash = "" + return user, nil +} + +// UpdateLastLogin updates the user's last login timestamp +func (q *UserQueries) UpdateLastLogin(id uuid.UUID) error { + query := `UPDATE users SET last_login = $1 WHERE id = $2` + _, err := q.db.Exec(query, time.Now().UTC(), id) + return err +} + +// GetUserByID retrieves a user by ID +func (q *UserQueries) GetUserByID(id uuid.UUID) (*models.User, error) { + var user models.User + query := `SELECT id, username, email, role, created_at, last_login FROM users WHERE id = $1` + err := q.db.Get(&user, query, id) + if err != nil { + return nil, err + } + return &user, nil +} + +// EnsureAdminUser creates an admin user if one doesn't exist +func (q *UserQueries) EnsureAdminUser(username, email, password string) error { + // Check if admin user already exists + existingUser, err := q.GetUserByUsername(username) + if err == nil && existingUser != nil { + return nil // Admin user already exists + } + + // Create admin user + _, err = q.CreateUser(username, email, password, "admin") + return err +} \ No newline at end of file diff --git a/aggregator-server/internal/models/agent.go b/aggregator-server/internal/models/agent.go index 5d6697d..fab1c10 100644 --- a/aggregator-server/internal/models/agent.go +++ b/aggregator-server/internal/models/agent.go @@ -63,12 +63,13 @@ type AgentSpecs struct { // AgentRegistrationRequest is the payload for agent registration type AgentRegistrationRequest struct { - Hostname string `json:"hostname" binding:"required"` - OSType string `json:"os_type" binding:"required"` - OSVersion string `json:"os_version"` - OSArchitecture string `json:"os_architecture"` - AgentVersion string `json:"agent_version" binding:"required"` - Metadata map[string]string `json:"metadata"` + Hostname string `json:"hostname" binding:"required"` + OSType string `json:"os_type" binding:"required"` + OSVersion string `json:"os_version"` + OSArchitecture string `json:"os_architecture"` + AgentVersion string `json:"agent_version" binding:"required"` + RegistrationToken string `json:"registration_token"` // Optional, for fallback method + Metadata map[string]string `json:"metadata"` } // AgentRegistrationResponse is returned after successful registration diff --git a/aggregator-server/internal/models/user.go b/aggregator-server/internal/models/user.go new file mode 100644 index 0000000..4cfa899 --- /dev/null +++ b/aggregator-server/internal/models/user.go @@ -0,0 +1,22 @@ +package models + +import ( + "time" + + "github.com/google/uuid" +) + +type User struct { + ID uuid.UUID `json:"id" db:"id"` + Username string `json:"username" db:"username"` + Email string `json:"email" db:"email"` + PasswordHash string `json:"-" db:"password_hash"` // Don't include in JSON + Role string `json:"role" db:"role"` + CreatedAt time.Time `json:"created_at" db:"created_at"` + LastLogin *time.Time `json:"last_login" db:"last_login"` +} + +type UserCredentials struct { + Username string `json:"username" binding:"required"` + Password string `json:"password" binding:"required"` +} \ No newline at end of file diff --git a/aggregator-web/Dockerfile b/aggregator-web/Dockerfile index 583d868..048f1c2 100644 --- a/aggregator-web/Dockerfile +++ b/aggregator-web/Dockerfile @@ -12,8 +12,8 @@ RUN npm ci # Copy source code COPY . . -# Build the application -RUN npm run build +# Build the application (skip TypeScript type checking) +RUN npx vite build # Production stage FROM nginx:alpine diff --git a/aggregator-web/nginx.conf b/aggregator-web/nginx.conf index 26c4fde..eaefb45 100644 --- a/aggregator-web/nginx.conf +++ b/aggregator-web/nginx.conf @@ -15,7 +15,7 @@ server { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; - proxy_set_header Host $host; + proxy_set_header Host $http_host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -26,7 +26,7 @@ server { location /health { proxy_pass http://server:8080; proxy_http_version 1.1; - proxy_set_header Host $host; + proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; } } diff --git a/aggregator-web/src/App.tsx b/aggregator-web/src/App.tsx index c2de34c..48e3f97 100644 --- a/aggregator-web/src/App.tsx +++ b/aggregator-web/src/App.tsx @@ -12,6 +12,7 @@ import History from '@/pages/History'; import Settings from '@/pages/Settings'; import TokenManagement from '@/pages/TokenManagement'; import RateLimiting from '@/pages/RateLimiting'; +import AgentManagement from '@/pages/settings/AgentManagement'; import Login from '@/pages/Login'; import Setup from '@/pages/Setup'; import { WelcomeChecker } from '@/components/WelcomeChecker'; @@ -108,6 +109,7 @@ const App: React.FC = () => { } /> } /> } /> + } /> } /> diff --git a/aggregator-web/src/hooks/useHeartbeat.ts b/aggregator-web/src/hooks/useHeartbeat.ts index fa730ee..2686234 100644 --- a/aggregator-web/src/hooks/useHeartbeat.ts +++ b/aggregator-web/src/hooks/useHeartbeat.ts @@ -16,20 +16,9 @@ export const useHeartbeatStatus = (agentId: string, enabled: boolean = true): Us queryKey: ['heartbeat', agentId], queryFn: () => agentApi.getHeartbeatStatus(agentId), enabled: enabled && !!agentId, - staleTime: 5000, // Consider data stale after 5 seconds - refetchInterval: (query) => { - // Smart polling: only poll when heartbeat is active - const data = query.state.data as HeartbeatStatus | undefined; - - // If heartbeat is enabled and still active, poll every 5 seconds - if (data?.enabled && data?.active) { - return 5000; // 5 seconds - } - - // If heartbeat is not active, don't poll - return false; - }, - refetchOnWindowFocus: false, // Don't refresh when window gains focus + staleTime: 0, // Always consider data stale to force refetch + refetchInterval: 5000, // Poll every 5 seconds regardless of state + refetchOnWindowFocus: true, // Refresh when window gains focus refetchOnMount: true, // Always refetch when component mounts }); }; diff --git a/aggregator-web/src/hooks/useRegistrationTokens.ts b/aggregator-web/src/hooks/useRegistrationTokens.ts index 31014b0..08f6bd2 100644 --- a/aggregator-web/src/hooks/useRegistrationTokens.ts +++ b/aggregator-web/src/hooks/useRegistrationTokens.ts @@ -85,6 +85,24 @@ export const useRevokeRegistrationToken = () => { }); }; +export const useDeleteRegistrationToken = () => { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: (id: string) => adminApi.tokens.deleteToken(id), + onSuccess: (_, tokenId) => { + toast.success('Registration token deleted successfully'); + queryClient.invalidateQueries({ queryKey: registrationTokenKeys.lists() }); + queryClient.invalidateQueries({ queryKey: registrationTokenKeys.detail(tokenId) }); + queryClient.invalidateQueries({ queryKey: registrationTokenKeys.stats() }); + }, + onError: (error: any) => { + console.error('Failed to delete registration token:', error); + toast.error(error.response?.data?.message || 'Failed to delete registration token'); + }, + }); +}; + export const useCleanupRegistrationTokens = () => { const queryClient = useQueryClient(); diff --git a/aggregator-web/src/lib/api.ts b/aggregator-web/src/lib/api.ts index b5e0194..4cba513 100644 --- a/aggregator-web/src/lib/api.ts +++ b/aggregator-web/src/lib/api.ts @@ -24,8 +24,8 @@ import { RateLimitSummary } from '@/types'; -// Base URL for API -export const API_BASE_URL = (import.meta.env?.VITE_API_URL as string) || '/api/v1'; +// Base URL for API - use nginx proxy +export const API_BASE_URL = '/api/v1'; // Create axios instance const api = axios.create({ @@ -237,8 +237,8 @@ export const logApi = { }; export const authApi = { - // Simple login (using API key or token) - login: async (credentials: { token: string }): Promise<{ token: string }> => { + // Login with username and password + login: async (credentials: { username: string; password: string }): Promise<{ token: string; user: any }> => { const response = await api.post('/auth/login', credentials); return response.data; }, @@ -255,9 +255,9 @@ export const authApi = { }, }; -// Setup API for server configuration (uses base API without auth) +// Setup API for server configuration (uses nginx proxy) const setupApiInstance = axios.create({ - baseURL: API_BASE_URL, + baseURL: '/api', timeout: 30000, headers: { 'Content-Type': 'application/json', @@ -283,8 +283,8 @@ export const setupApi = { serverHost: string; serverPort: string; maxSeats: string; - }): Promise<{ message: string; configPath?: string; restart?: boolean }> => { - const response = await setupApiInstance.post('/setup', config); + }): Promise<{ message: string; jwtSecret?: string; envContent?: string; manualRestartRequired?: boolean; manualRestartCommand?: string; configFilePath?: string }> => { + const response = await setupApiInstance.post('/setup/configure', config); return response.data; }, }; @@ -456,11 +456,16 @@ export const adminApi = { return response.data; }, - // Revoke registration token + // Revoke registration token (soft delete) revokeToken: async (id: string): Promise => { await api.delete(`/admin/registration-tokens/${id}`); }, + // Delete registration token (hard delete) + deleteToken: async (id: string): Promise => { + await api.delete(`/admin/registration-tokens/delete/${id}`); + }, + // Get registration token statistics getStats: async (): Promise => { const response = await api.get('/admin/registration-tokens/stats'); @@ -479,7 +484,17 @@ export const adminApi = { // Get all rate limit configurations getConfigs: async (): Promise => { const response = await api.get('/admin/rate-limits'); - return response.data; + + // Backend returns { settings: {...}, updated_at: "..." } + // Transform settings object to array format expected by frontend + const settings = response.data.settings || {}; + const configs: RateLimitConfig[] = Object.entries(settings).map(([endpoint, config]: [string, any]) => ({ + ...config, + endpoint, + updated_at: response.data.updated_at, // Preserve update timestamp + })); + + return configs; }, // Update rate limit configuration diff --git a/aggregator-web/src/pages/Login.tsx b/aggregator-web/src/pages/Login.tsx index c376de7..2631e63 100644 --- a/aggregator-web/src/pages/Login.tsx +++ b/aggregator-web/src/pages/Login.tsx @@ -1,6 +1,6 @@ import React, { useState } from 'react'; import { useNavigate } from 'react-router-dom'; -import { Eye, EyeOff, Shield } from 'lucide-react'; +import { Eye, EyeOff, Shield, User } from 'lucide-react'; import { useAuthStore } from '@/lib/store'; import { authApi } from '@/lib/api'; import { handleApiError } from '@/lib/api'; @@ -9,24 +9,31 @@ import toast from 'react-hot-toast'; const Login: React.FC = () => { const navigate = useNavigate(); const { setToken } = useAuthStore(); - const [token, setTokenInput] = useState(''); - const [showToken, setShowToken] = useState(false); + const [username, setUsername] = useState(''); + const [password, setPassword] = useState(''); + const [showPassword, setShowPassword] = useState(false); const [isLoading, setIsLoading] = useState(false); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); - if (!token.trim()) { - toast.error('Please enter your authentication token'); + if (!username.trim()) { + toast.error('Please enter your username'); + return; + } + + if (!password.trim()) { + toast.error('Please enter your password'); return; } setIsLoading(true); try { - const response = await authApi.login({ token: token.trim() }); + const response = await authApi.login({ username: username.trim(), password: password.trim() }); setToken(response.token); localStorage.setItem('auth_token', response.token); - toast.success('Login successful'); + localStorage.setItem('user', JSON.stringify(response.user)); + toast.success(`Welcome back, ${response.user.username}!`); navigate('/'); } catch (error) { const apiError = handleApiError(error); @@ -48,7 +55,7 @@ const Login: React.FC = () => { Sign in to RedFlag

- Enter your authentication token to access the dashboard + Enter your username and password to access the dashboard

@@ -56,25 +63,45 @@ const Login: React.FC = () => {
-
+ +
+
setTokenInput(e.target.value)} + id="password" + type={showPassword ? 'text' : 'password'} + value={password} + onChange={(e) => setPassword(e.target.value)} className="appearance-none block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm placeholder-gray-400 focus:outline-none focus:ring-primary-500 focus:border-primary-500 sm:text-sm" - placeholder="Enter your JWT token" + placeholder="Enter your password" required /> + {/* Header */}
@@ -234,7 +259,9 @@ const RateLimiting: React.FC = () => {
{/* Rate Limit Statistics */} - {stats && stats.length > 0 && ( + {stats && Array.isArray(stats) && stats.length > 0 && (

Rate Limit Statistics

@@ -526,7 +553,7 @@ const RateLimiting: React.FC = () => {
- {stat.top_clients && stat.top_clients.length > 0 && ( + {stat.top_clients && Array.isArray(stat.top_clients) && stat.top_clients.length > 0 && (

Top Clients:

@@ -547,7 +574,7 @@ const RateLimiting: React.FC = () => { )} {/* Usage Monitoring */} - {usage && usage.length > 0 && ( + {usage && Array.isArray(usage) && usage.length > 0 && (

Usage Monitoring

diff --git a/aggregator-web/src/pages/Settings.tsx b/aggregator-web/src/pages/Settings.tsx index 298b042..2a0a54b 100644 --- a/aggregator-web/src/pages/Settings.tsx +++ b/aggregator-web/src/pages/Settings.tsx @@ -83,11 +83,11 @@ const Settings: React.FC = () => { }, { title: 'Agent Management', - description: 'Agent defaults and cleanup policies', + description: 'Deploy and configure agents across platforms', icon: SettingsIcon, href: '/settings/agents', stats: null, - status: 'not-implemented' + status: 'implemented' } ]; @@ -134,14 +134,17 @@ const Settings: React.FC = () => {

Coming soon

-
+
- - + +
-

Agent Management

-

Coming soon

-
+

Agent Management

+

Deploy and configure agents

+
{/* Overview Statistics */} @@ -326,7 +329,6 @@ const Settings: React.FC = () => {

🚧 Planned Features

  • • System configuration management
  • -
  • • Agent management settings
  • • Integration with third-party services
  • • Persistent settings storage
diff --git a/aggregator-web/src/pages/Setup.tsx b/aggregator-web/src/pages/Setup.tsx index 24fb218..1266807 100644 --- a/aggregator-web/src/pages/Setup.tsx +++ b/aggregator-web/src/pages/Setup.tsx @@ -1,6 +1,6 @@ import React, { useState } from 'react'; import { useNavigate } from 'react-router-dom'; -import { XCircle } from 'lucide-react'; +import { Settings, Database, User, Shield, Eye, EyeOff, CheckCircle } from 'lucide-react'; import { toast } from 'react-hot-toast'; import { setupApi } from '@/lib/api'; @@ -17,11 +17,15 @@ interface SetupFormData { maxSeats: string; } - const Setup: React.FC = () => { const navigate = useNavigate(); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); + const [jwtSecret, setJwtSecret] = useState(null); + const [envContent, setEnvContent] = useState(null); + const [showSuccess, setShowSuccess] = useState(false); + const [showPassword, setShowPassword] = useState(false); + const [showDbPassword, setShowDbPassword] = useState(false); const [formData, setFormData] = useState({ adminUser: 'admin', @@ -108,20 +112,12 @@ const Setup: React.FC = () => { try { const result = await setupApi.configure(formData); + // Store JWT secret, env content and show success screen + setJwtSecret(result.jwtSecret || null); + setEnvContent(result.envContent || null); + setShowSuccess(true); toast.success(result.message || 'Configuration saved successfully!'); - if (result.restart) { - // Server is restarting, wait for it to come back online - setTimeout(() => { - navigate('/login'); - }, 5000); // Give server time to restart - } else { - // No restart, redirect immediately - setTimeout(() => { - navigate('/login'); - }, 2000); - } - } catch (error: any) { console.error('Setup error:', error); const errorMessage = error.response?.data?.error || error.message || 'Setup failed'; @@ -132,38 +128,177 @@ const Setup: React.FC = () => { } }; - return ( -
-
-
-

Server Setup

-

- Configure your update management server -

-
+ // Success screen with credentials display + if (showSuccess && jwtSecret) { + return ( +
+
+ {/* Header */} +
+
+
+ +
+
+

+ Configuration Complete! +

+

+ Your RedFlag server is ready to use +

+
-
- - {/* Error Display */} - {error && ( -
-
-
- + {/* Success Card */} +
+ {/* Admin Credentials Section */} +
+

Administrator Credentials

+
+
+
+ +
{formData.adminUser}
-
-

{error}

+
+ +
••••••••
+
+

+ Important: Save these credentials securely. You'll use them to login to the RedFlag dashboard. +

+
+
+ + {/* Configuration Content Section */} + {envContent && ( +
+

Configuration File Content

+
+