From 4ef5216c89e18e7feaa826919fdaa011756d0984 Mon Sep 17 00:00:00 2001 From: Fimeg Date: Fri, 17 Oct 2025 16:26:21 -0400 Subject: [PATCH] Windows agent improvements and dependency workflow fixes - Added system info reporting to agent main loop - Updated README with current project status and screenshots - Fixed a few workflow quirks --- README.md | 120 ++++++++----- Screenshots/RedFlag Agent Details - old.png | Bin 100192 -> 0 bytes Screenshots/RedFlag Agent List.png | Bin 0 -> 57973 bytes ...ls.png => RedFlag Linux Agent Details.png} | Bin aggregator-agent/cmd/agent/main.go | 164 ++++++++++++++++-- aggregator-agent/internal/client/client.go | 46 +++++ aggregator-agent/internal/scanner/winget.go | 145 +++++++++++++++- aggregator-agent/internal/system/windows.go | 69 ++++++-- .../internal/api/handlers/updates.go | 51 +++++- .../internal/database/queries/updates.go | 8 +- 10 files changed, 537 insertions(+), 66 deletions(-) delete mode 100644 Screenshots/RedFlag Agent Details - old.png create mode 100644 Screenshots/RedFlag Agent List.png rename Screenshots/{RedFlag Agent Details.png => RedFlag Linux Agent Details.png} (100%) diff --git a/README.md b/README.md index 28bd2ba..612824e 100644 --- a/README.md +++ b/README.md @@ -52,33 +52,20 @@ A self-hosted, cross-platform update management platform built with: ## Screenshots -### Main Dashboard -![Main Dashboard](Screenshots/RedFlag%20Default%20Dashboard.png) -Overview showing agent status, system metrics, and update statistics +| 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 | -### Updates Management -![Updates Dashboard](Screenshots/RedFlag%20Updates%20Dashboard.png) -Comprehensive update listing with filtering, approval, and dependency confirmation +| Linux Agent Details | Windows Agent Details | History & Audit | +|-------------------|---------------------|----------------| +| ![Linux Agent Details](Screenshots/RedFlag%20Linux%20Agent%20Details.png) | ![Windows Agent Details](Screenshots/RedFlag%20Windows%20Agent%20Details.png) | ![History Dashboard](Screenshots/RedFlag%20History%20Dashboard.png) | +| Linux system specs and updates | Windows Updates and Winget support | Complete audit trail of activities | -### Agent Details -![Agent Details](Screenshots/RedFlag%20Agent%20Details.png) -Detailed agent information including system specs, last check-in, and individual update management - -### Windows Agent Support -![Windows Agent](Screenshots/RedFlag%20Windows%20Agent%20Details.png) -Cross-platform support for Windows Updates and Winget package management - -### History & Audit Trail -![History Dashboard](Screenshots/RedFlag%20History%20Dashboard.png) -Complete audit trail of all update activities and command execution - -### Live Operations -![Live Operations](Screenshots/RedFlag%20Live%20Operations%20-%20Failed%20Dashboard.png) -Real-time view of update operations with success/failure tracking - -### Docker Container Management -![Docker Dashboard](Screenshots/RedFlag%20Docker%20Dashboard.png) -Docker-specific interface for container image updates and management +| 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 @@ -104,9 +91,9 @@ This repository contains: ┌────┴────┬────────┐ │ │ │ ┌───▼──┐ ┌──▼──┐ ┌──▼───┐ -│Linux │ │Linux│ │Linux │ -│Agent │ │Agent│ │Agent │ -└──────┘ └─────┘ └──────┘ +│Linux │ │Windows│ │Linux │ +│Agent │ │Agent │ │Agent │ +└──────┘ └───────┘ └──────┘ ``` ## Project Structure @@ -117,19 +104,45 @@ RedFlag/ │ ├── cmd/server/ # Main entry point │ ├── internal/ │ │ ├── api/ # HTTP handlers & middleware +│ │ │ └── handlers/ # API endpoint handlers │ │ ├── database/ # Database layer & migrations -│ │ ├── models/ # Data models -│ │ └── config/ # Configuration +│ │ │ ├── migrations/ # Database schema migrations +│ │ │ └── queries/ # Database query functions +│ │ ├── models/ # Data models and structs +│ │ ├── services/ # Business logic services +│ │ ├── utils/ # Utility functions +│ │ └── config/ # Configuration management │ └── go.mod -├── aggregator-agent/ # Go agent +├── aggregator-agent/ # Go agent (cross-platform) │ ├── cmd/agent/ # Main entry point │ ├── internal/ -│ │ ├── client/ # API client -│ │ ├── installer/ # Update installers (APT, DNF, Docker) -│ │ ├── scanner/ # Update scanners (APT, Docker, DNF/RPM) +│ │ ├── cache/ # Local cache system for offline viewing +│ │ ├── client/ # API client with token renewal +│ │ ├── config/ # Configuration management +│ │ ├── display/ # Terminal output formatting +│ │ ├── installer/ # Update installers +│ │ │ ├── apt.go # APT package installer +│ │ │ ├── dnf.go # DNF package installer +│ │ │ ├── docker.go # Docker image installer +│ │ │ ├── windows.go # Windows installer base +│ │ │ ├── winget.go # Winget package installer +│ │ │ ├── security.go # Security utilities +│ │ │ └── sudoers.go # Sudo management +│ │ ├── scanner/ # Update scanners +│ │ │ ├── apt.go # APT package scanner +│ │ │ ├── dnf.go # DNF package scanner +│ │ │ ├── docker.go # Docker image scanner +│ │ │ ├── registry.go # Docker registry client +│ │ │ ├── windows.go # Windows Update scanner +│ │ │ ├── winget.go # Winget package scanner +│ │ │ └── windows_*.go # Windows Update API components │ │ ├── system/ # System information collection -│ │ └── config/ # Configuration +│ │ │ ├── info.go # System metrics +│ │ │ └── windows.go # Windows system info +│ │ └── executor/ # Command execution +│ ├── install.sh # Linux installation script +│ ├── uninstall.sh # Linux uninstallation script │ └── go.mod ├── aggregator-web/ # React dashboard @@ -141,10 +154,12 @@ RedFlag/ ## Database Schema Key Tables: -- `agents` - Registered agents with system metadata -- `update_packages` - Discovered updates -- `agent_commands` - Command queue for agents -- `update_logs` - Execution logs +- `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 @@ -164,7 +179,8 @@ Auto-generated on registration: { "server_url": "http://localhost:8080", "agent_id": "uuid", - "token": "jwt-token", + "token": "jwt-access-token", + "refresh_token": "long-lived-refresh-token", "check_in_interval": 300 } ``` @@ -219,12 +235,34 @@ curl http://localhost:8080/api/v1/updates?status=pending 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 +``` + ## Security -- Agent Authentication: JWT tokens with 24h expiry +- Agent Authentication: Refresh token system with 90-day sliding window + 24h access tokens +- SHA-256 token hashing for secure storage - Pull-based Model: Agents poll server (firewall-friendly) - Command Validation: Whitelisted commands only - TLS Required: Production deployments must use HTTPS +- Token Renewal: `/renew` endpoint prevents daily re-registration ## License diff --git a/Screenshots/RedFlag Agent Details - old.png b/Screenshots/RedFlag Agent Details - old.png deleted file mode 100644 index f9acc997501f564652acf9bf5ce35348326ce816..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100192 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 diff --git a/Screenshots/RedFlag Agent List.png b/Screenshots/RedFlag Agent List.png new file mode 100644 index 0000000000000000000000000000000000000000..6dfad099836ffca4cd7f211a11b38ad431c71cda GIT binary patch literal 57973 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 literal 0 HcmV?d00001 diff --git a/Screenshots/RedFlag Agent Details.png b/Screenshots/RedFlag Linux Agent Details.png similarity index 100% rename from Screenshots/RedFlag Agent Details.png rename to Screenshots/RedFlag Linux Agent Details.png diff --git a/aggregator-agent/cmd/agent/main.go b/aggregator-agent/cmd/agent/main.go index 4fc12a0..7c021ff 100644 --- a/aggregator-agent/cmd/agent/main.go +++ b/aggregator-agent/cmd/agent/main.go @@ -273,12 +273,27 @@ func runAgent(cfg *config.Config) error { 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 for { // 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 := reportSystemInfo(apiClient, cfg); err != nil { + log.Printf("Failed to report system info: %v\n", err) + } else { + lastSystemInfoUpdate = time.Now() + log.Printf("✓ System information updated\n") + } + } + log.Printf("Checking in with server... (Agent v%s)", AgentVersion) // Collect lightweight system metrics @@ -374,17 +389,25 @@ func handleScanUpdates(apiClient *client.Client, cfg *config.Config, aptScanner log.Println("Scanning for updates...") 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 { - log.Printf(" APT scan failed: %v\n", err) + errorMsg := fmt.Sprintf("APT scan failed: %v", err) + log.Printf(" %s\n", errorMsg) + scanErrors = append(scanErrors, errorMsg) } else { - log.Printf(" Found %d APT updates\n", len(updates)) + resultMsg := fmt.Sprintf("Found %d APT updates", len(updates)) + log.Printf(" %s\n", resultMsg) + scanResults = append(scanResults, resultMsg) allUpdates = append(allUpdates, updates...) } + } else { + scanResults = append(scanResults, "APT scanner not available") } // Scan DNF updates @@ -392,11 +415,17 @@ func handleScanUpdates(apiClient *client.Client, cfg *config.Config, aptScanner log.Println(" - Scanning DNF packages...") updates, err := dnfScanner.Scan() if err != nil { - log.Printf(" DNF scan failed: %v\n", err) + errorMsg := fmt.Sprintf("DNF scan failed: %v", err) + log.Printf(" %s\n", errorMsg) + scanErrors = append(scanErrors, errorMsg) } else { - log.Printf(" Found %d DNF updates\n", len(updates)) + resultMsg := fmt.Sprintf("Found %d DNF updates", len(updates)) + log.Printf(" %s\n", resultMsg) + scanResults = append(scanResults, resultMsg) allUpdates = append(allUpdates, updates...) } + } else { + scanResults = append(scanResults, "DNF scanner not available") } // Scan Docker updates @@ -404,11 +433,17 @@ func handleScanUpdates(apiClient *client.Client, cfg *config.Config, aptScanner log.Println(" - Scanning Docker images...") updates, err := dockerScanner.Scan() if err != nil { - log.Printf(" Docker scan failed: %v\n", err) + errorMsg := fmt.Sprintf("Docker scan failed: %v", err) + log.Printf(" %s\n", errorMsg) + scanErrors = append(scanErrors, errorMsg) } else { - log.Printf(" Found %d Docker image updates\n", len(updates)) + resultMsg := fmt.Sprintf("Found %d Docker image updates", len(updates)) + log.Printf(" %s\n", resultMsg) + scanResults = append(scanResults, resultMsg) allUpdates = append(allUpdates, updates...) } + } else { + scanResults = append(scanResults, "Docker scanner not available") } // Scan Windows updates @@ -416,11 +451,17 @@ func handleScanUpdates(apiClient *client.Client, cfg *config.Config, aptScanner log.Println(" - Scanning Windows updates...") updates, err := windowsUpdateScanner.Scan() if err != nil { - log.Printf(" Windows Update scan failed: %v\n", err) + errorMsg := fmt.Sprintf("Windows Update scan failed: %v", err) + log.Printf(" %s\n", errorMsg) + scanErrors = append(scanErrors, errorMsg) } else { - log.Printf(" Found %d Windows updates\n", len(updates)) + resultMsg := fmt.Sprintf("Found %d Windows updates", len(updates)) + log.Printf(" %s\n", resultMsg) + scanResults = append(scanResults, resultMsg) allUpdates = append(allUpdates, updates...) } + } else { + scanResults = append(scanResults, "Windows Update scanner not available") } // Scan Winget packages @@ -428,14 +469,58 @@ func handleScanUpdates(apiClient *client.Client, cfg *config.Config, aptScanner log.Println(" - Scanning Winget packages...") updates, err := wingetScanner.Scan() if err != nil { - log.Printf(" Winget scan failed: %v\n", err) + errorMsg := fmt.Sprintf("Winget scan failed: %v", err) + log.Printf(" %s\n", errorMsg) + scanErrors = append(scanErrors, errorMsg) } else { - log.Printf(" Found %d Winget package updates\n", len(updates)) + resultMsg := fmt.Sprintf("Found %d Winget package updates", len(updates)) + log.Printf(" %s\n", resultMsg) + scanResults = append(scanResults, resultMsg) allUpdates = append(allUpdates, updates...) } + } else { + scanResults = append(scanResults, "Winget scanner not available") } - // Report to server + // 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(cfg.AgentID, logReport); err != nil { + log.Printf("Failed to report scan log: %v\n", err) + // Continue anyway - updates are more important + } + + // Report updates to server if any were found if len(allUpdates) > 0 { report := client.UpdateReport{ CommandID: commandID, @@ -452,6 +537,11 @@ func handleScanUpdates(apiClient *client.Client, cfg *config.Config, aptScanner log.Println("✓ 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 } @@ -961,6 +1051,58 @@ func handleConfirmDependencies(apiClient *client.Client, cfg *config.Config, com return nil } +// reportSystemInfo collects and reports detailed system information to the server +func reportSystemInfo(apiClient *client.Client, cfg *config.Config) 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(cfg.AgentID, report); err != nil { + return fmt.Errorf("failed to report system info: %w", err) + } + + return nil +} + // formatTimeSince formats a duration as "X time ago" func formatTimeSince(t time.Time) string { duration := time.Since(t) diff --git a/aggregator-agent/internal/client/client.go b/aggregator-agent/internal/client/client.go index 3860e6e..ec0332b 100644 --- a/aggregator-agent/internal/client/client.go +++ b/aggregator-agent/internal/client/client.go @@ -369,6 +369,52 @@ func (c *Client) ReportDependencies(agentID uuid.UUID, report DependencyReport) return nil } +// SystemInfoReport represents system information updates +type SystemInfoReport struct { + Timestamp time.Time `json:"timestamp"` + CPUModel string `json:"cpu_model,omitempty"` + CPUCores int `json:"cpu_cores,omitempty"` + CPUThreads int `json:"cpu_threads,omitempty"` + MemoryTotal uint64 `json:"memory_total,omitempty"` + DiskTotal uint64 `json:"disk_total,omitempty"` + DiskUsed uint64 `json:"disk_used,omitempty"` + IPAddress string `json:"ip_address,omitempty"` + Processes int `json:"processes,omitempty"` + Uptime string `json:"uptime,omitempty"` + Metadata map[string]interface{} `json:"metadata,omitempty"` +} + +// ReportSystemInfo sends updated system information to the server +func (c *Client) ReportSystemInfo(agentID uuid.UUID, report SystemInfoReport) error { + url := fmt.Sprintf("%s/api/v1/agents/%s/system-info", c.baseURL, agentID) + + body, err := json.Marshal(report) + if err != nil { + return err + } + + req, err := http.NewRequest("POST", url, bytes.NewBuffer(body)) + if err != nil { + return err + } + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", "Bearer "+c.token) + + resp, err := c.http.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + + // Accept 200 OK or 404 Not Found (if endpoint doesn't exist yet) + if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusNotFound { + bodyBytes, _ := io.ReadAll(resp.Body) + return fmt.Errorf("failed to report system info: %s - %s", resp.Status, string(bodyBytes)) + } + + return nil +} + // DetectSystem returns basic system information (deprecated, use system.GetSystemInfo instead) func DetectSystem() (osType, osVersion, osArch string) { osType = runtime.GOOS diff --git a/aggregator-agent/internal/scanner/winget.go b/aggregator-agent/internal/scanner/winget.go index 76ae36d..a7a06a3 100644 --- a/aggregator-agent/internal/scanner/winget.go +++ b/aggregator-agent/internal/scanner/winget.go @@ -6,6 +6,7 @@ import ( "os/exec" "runtime" "strings" + "time" "github.com/aggregator-project/aggregator-agent/internal/client" ) @@ -66,9 +67,17 @@ func (s *WingetScanner) Scan() ([]client.UpdateReportItem, error) { fmt.Printf("Winget basic scan failed: %v\n", err) } - // Method 3: Check if this is a known Winget issue and provide helpful error + // Method 3: Attempt automatic recovery for known issues if isKnownWingetError(lastErr) { - return nil, fmt.Errorf("winget encountered a known issue (exit code %s). This may be due to Windows Update service or system configuration. Try running 'winget upgrade' manually to resolve", getExitCode(lastErr)) + fmt.Printf("Attempting automatic winget recovery...\n") + if updates, err := s.attemptWingetRecovery(); err == nil { + fmt.Printf("Winget recovery successful, found %d updates\n", len(updates)) + return updates, nil + } else { + fmt.Printf("Winget recovery failed: %v\n", err) + } + + return nil, fmt.Errorf("winget encountered a known issue (exit code %s). This may be due to Windows Update service or system configuration. Automatic recovery was attempted but failed", getExitCode(lastErr)) } return nil, lastErr @@ -518,4 +527,136 @@ func (s *WingetScanner) GetInstalledPackages() ([]WingetPackage, error) { } return packages, nil +} + +// attemptWingetRecovery tries to fix common winget issues automatically +func (s *WingetScanner) attemptWingetRecovery() ([]client.UpdateReportItem, error) { + fmt.Printf("Starting winget recovery process...\n") + + // Recovery Method 1: Reset winget sources (common fix) + fmt.Printf("Attempting to reset winget sources...\n") + if err := s.resetWingetSources(); err == nil { + if updates, scanErr := s.scanWithJSON(); scanErr == nil { + fmt.Printf("Recovery successful after source reset\n") + return updates, nil + } + } + + // Recovery Method 2: Update winget itself (silent) + fmt.Printf("Attempting to update winget itself...\n") + if err := s.updateWingetSilent(); err == nil { + // Wait a moment for winget to stabilize + time.Sleep(2 * time.Second) + if updates, scanErr := s.scanWithJSON(); scanErr == nil { + fmt.Printf("Recovery successful after winget update\n") + return updates, nil + } + } + + // Recovery Method 3: Repair Windows App Installer (winget backend) + fmt.Printf("Attempting to repair Windows App Installer...\n") + if err := s.repairWindowsAppInstaller(); err == nil { + // Wait longer for system repairs + time.Sleep(5 * time.Second) + if updates, scanErr := s.scanWithJSON(); scanErr == nil { + fmt.Printf("Recovery successful after Windows App Installer repair\n") + return updates, nil + } + } + + // Recovery Method 4: Force refresh with admin privileges + fmt.Printf("Attempting admin refresh...\n") + if updates, err := s.scanWithAdminPrivileges(); err == nil { + fmt.Printf("Recovery successful with admin privileges\n") + return updates, nil + } + + // If all recovery attempts failed, return the original error + return nil, fmt.Errorf("all winget recovery attempts failed") +} + +// resetWingetSources resets winget package sources +func (s *WingetScanner) resetWingetSources() error { + // Reset winget sources silently + cmd := exec.Command("winget", "source", "reset", "--force") + _, err := cmd.CombinedOutput() + if err != nil { + fmt.Printf("Failed to reset winget sources: %v\n", err) + return err + } + + // Add default sources back + cmd = exec.Command("winget", "source", "add", "winget", "--accept-package-agreements", "--accept-source-agreements") + _, err = cmd.CombinedOutput() + if err != nil { + fmt.Printf("Failed to add winget source: %v\n", err) + return err + } + + return nil +} + +// updateWingetSilent updates winget itself silently +func (s *WingetScanner) updateWingetSilent() error { + // Update winget silently with no interaction + cmd := exec.Command("winget", "upgrade", "--id", "Microsoft.AppInstaller", "--silent", "--accept-package-agreements", "--accept-source-agreements") + _, err := cmd.CombinedOutput() + if err != nil { + fmt.Printf("Failed to update winget: %v\n", err) + return err + } + return nil +} + +// repairWindowsAppInstaller attempts to repair the Windows App Installer +func (s *WingetScanner) repairWindowsAppInstaller() error { + // Try to repair using PowerShell + psCmd := `Get-AppxPackage -Name "Microsoft.DesktopAppInstaller" | Repair-AppxPackage -ForceUpdateFromAnyVersion` + cmd := exec.Command("powershell", "-ExecutionPolicy", "Bypass", "-Command", psCmd) + _, err := cmd.CombinedOutput() + if err != nil { + fmt.Printf("Failed to repair Windows App Installer: %v\n", err) + return err + } + return nil +} + +// scanWithAdminPrivileges attempts to scan with elevated privileges if available +func (s *WingetScanner) scanWithAdminPrivileges() ([]client.UpdateReportItem, error) { + // Try running with elevated privileges using PowerShell + psCmd := `Start-Process winget -ArgumentList "list","--outdated","--accept-source-agreements" -Verb RunAs -Wait` + cmd := exec.Command("powershell", "-ExecutionPolicy", "Bypass", "-Command", psCmd) + + // This will likely fail without actual admin privileges, but we try anyway + _, err := cmd.CombinedOutput() + if err != nil { + // Fallback to regular scan with different flags + return s.scanWithDifferentFlags() + } + + // If admin scan succeeded, try to get the results + return s.scanWithBasicOutput() +} + +// scanWithDifferentFlags tries alternative winget flags +func (s *WingetScanner) scanWithDifferentFlags() ([]client.UpdateReportItem, error) { + // Try different combination of flags + flagVariations := [][]string{ + {"list", "--outdated", "--accept-source-agreements"}, + {"list", "--outdated", "--include-unknown"}, + {"list", "--outdated"}, + } + + for _, flags := range flagVariations { + cmd := exec.Command("winget", flags...) + output, err := cmd.CombinedOutput() + if err == nil { + // Try to parse the output + if updates, parseErr := s.parseWingetTextOutput(string(output)); parseErr == nil { + return updates, nil + } + } + } + + return nil, fmt.Errorf("all flag variations failed") } \ No newline at end of file diff --git a/aggregator-agent/internal/system/windows.go b/aggregator-agent/internal/system/windows.go index 679963a..f97315a 100644 --- a/aggregator-agent/internal/system/windows.go +++ b/aggregator-agent/internal/system/windows.go @@ -40,47 +40,96 @@ func getWindowsCPUInfo() (*CPUInfo, error) { // Try using wmic for CPU information if cmd, err := exec.LookPath("wmic"); err == nil { - // Get CPU name + // Get CPU name with better error handling if data, err := exec.Command(cmd, "cpu", "get", "Name").Output(); err == nil { - lines := strings.Split(string(data), "\n") + output := string(data) + fmt.Printf("WMIC CPU Name output: '%s'\n", output) // Debug logging + lines := strings.Split(output, "\n") for _, line := range lines { - if strings.TrimSpace(line) != "" && !strings.Contains(line, "Name") { - cpu.ModelName = strings.TrimSpace(line) + line = strings.TrimSpace(line) + if line != "" && !strings.Contains(line, "Name") { + cpu.ModelName = line + fmt.Printf("Found CPU model: '%s'\n", line) // Debug logging break } } + } else { + fmt.Printf("Failed to get CPU name via wmic: %v\n", err) } // Get number of cores if data, err := exec.Command(cmd, "cpu", "get", "NumberOfCores").Output(); err == nil { - lines := strings.Split(string(data), "\n") + output := string(data) + fmt.Printf("WMIC CPU Cores output: '%s'\n", output) // Debug logging + lines := strings.Split(output, "\n") for _, line := range lines { - if strings.TrimSpace(line) != "" && !strings.Contains(line, "NumberOfCores") { - if cores, err := strconv.Atoi(strings.TrimSpace(line)); err == nil { + line = strings.TrimSpace(line) + if line != "" && !strings.Contains(line, "NumberOfCores") { + if cores, err := strconv.Atoi(line); err == nil { cpu.Cores = cores + fmt.Printf("Found CPU cores: %d\n", cores) // Debug logging } break } } + } else { + fmt.Printf("Failed to get CPU cores via wmic: %v\n", err) } // Get number of logical processors (threads) if data, err := exec.Command(cmd, "cpu", "get", "NumberOfLogicalProcessors").Output(); err == nil { - lines := strings.Split(string(data), "\n") + output := string(data) + fmt.Printf("WMIC CPU Threads output: '%s'\n", output) // Debug logging + lines := strings.Split(output, "\n") for _, line := range lines { - if strings.TrimSpace(line) != "" && !strings.Contains(line, "NumberOfLogicalProcessors") { - if threads, err := strconv.Atoi(strings.TrimSpace(line)); err == nil { + line = strings.TrimSpace(line) + if line != "" && !strings.Contains(line, "NumberOfLogicalProcessors") { + if threads, err := strconv.Atoi(line); err == nil { cpu.Threads = threads + fmt.Printf("Found CPU threads: %d\n", threads) // Debug logging } break } } + } else { + fmt.Printf("Failed to get CPU threads via wmic: %v\n", err) } // If we couldn't get threads, assume it's equal to cores if cpu.Threads == 0 { cpu.Threads = cpu.Cores } + } else { + fmt.Printf("WMIC command not found, unable to get CPU info\n") + } + + // Fallback to PowerShell if wmic failed + if cpu.ModelName == "" { + fmt.Printf("Attempting PowerShell fallback for CPU info...\n") + if psCmd, err := exec.LookPath("powershell"); err == nil { + // Get CPU info via PowerShell + if data, err := exec.Command(psCmd, "-Command", "Get-CimInstance -ClassName Win32_Processor | Select-Object -First 1 Name,NumberOfCores,NumberOfLogicalProcessors | ConvertTo-Json").Output(); err == nil { + fmt.Printf("PowerShell CPU output: '%s'\n", string(data)) + // Try to parse JSON output (simplified) + output := string(data) + if strings.Contains(output, "Name") { + // Simple string extraction as fallback + lines := strings.Split(output, "\n") + for _, line := range lines { + if strings.Contains(line, "Name") && strings.Contains(line, ":") { + parts := strings.Split(line, ":") + if len(parts) >= 2 { + cpu.ModelName = strings.TrimSpace(strings.Trim(parts[1], " ,\"")) + fmt.Printf("Found CPU via PowerShell: '%s'\n", cpu.ModelName) + break + } + } + } + } + } else { + fmt.Printf("PowerShell CPU info failed: %v\n", err) + } + } } return cpu, nil diff --git a/aggregator-server/internal/api/handlers/updates.go b/aggregator-server/internal/api/handlers/updates.go index 389dad1..6af13c1 100644 --- a/aggregator-server/internal/api/handlers/updates.go +++ b/aggregator-server/internal/api/handlers/updates.go @@ -453,7 +453,56 @@ func (h *UpdateHandler) ReportDependencies(c *gin.Context) { return } - // Update the package status to pending_dependencies + // If there are NO dependencies, auto-approve and proceed directly to installation + // This prevents updates with zero dependencies from getting stuck in "pending_dependencies" + if len(req.Dependencies) == 0 { + // Get the update by package to retrieve its ID + update, err := h.updateQueries.GetUpdateByPackage(agentID, req.PackageType, req.PackageName) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "failed to get update details"}) + return + } + + // Record that dependencies were checked (empty array) in metadata + if err := h.updateQueries.SetPendingDependencies(agentID, req.PackageType, req.PackageName, req.Dependencies); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "failed to update package metadata"}) + return + } + + // Automatically create installation command since no dependencies need approval + command := &models.AgentCommand{ + ID: uuid.New(), + AgentID: agentID, + CommandType: models.CommandTypeConfirmDependencies, + Params: map[string]interface{}{ + "update_id": update.ID.String(), + "package_name": req.PackageName, + "package_type": req.PackageType, + "dependencies": []string{}, // Empty dependencies array + }, + Status: models.CommandStatusPending, + CreatedAt: time.Now(), + } + + if err := h.commandQueries.CreateCommand(command); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "failed to create installation command"}) + return + } + + // Update status to installing since no approval needed + if err := h.updateQueries.InstallUpdate(update.ID); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "failed to update package status to installing"}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "message": "no dependencies found - installation command created automatically", + "command_id": command.ID.String(), + }) + return + } + + // If dependencies EXIST, require manual approval by setting status to pending_dependencies if err := h.updateQueries.SetPendingDependencies(agentID, req.PackageType, req.PackageName, req.Dependencies); err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "failed to update package status"}) return diff --git a/aggregator-server/internal/database/queries/updates.go b/aggregator-server/internal/database/queries/updates.go index d70d1bf..b2bb302 100644 --- a/aggregator-server/internal/database/queries/updates.go +++ b/aggregator-server/internal/database/queries/updates.go @@ -222,7 +222,10 @@ func (q *UpdateQueries) SetCheckingDependencies(id uuid.UUID) error { return err } -// SetPendingDependencies marks an update as having dependencies that need approval +// SetPendingDependencies stores dependency information and sets status based on whether dependencies exist +// If dependencies array is empty, this function only updates metadata without changing status +// (the handler should auto-approve and proceed to installation in this case) +// If dependencies array has items, status is set to 'pending_dependencies' requiring manual approval func (q *UpdateQueries) SetPendingDependencies(agentID uuid.UUID, packageType, packageName string, dependencies []string) error { // Marshal dependencies to JSON for database storage depsJSON, err := json.Marshal(dependencies) @@ -230,6 +233,9 @@ func (q *UpdateQueries) SetPendingDependencies(agentID uuid.UUID, packageType, p return fmt.Errorf("failed to marshal dependencies: %w", err) } + // Note: When dependencies array is empty, the handler should bypass this status change + // and proceed directly to installation. This function still records the empty array + // in metadata for audit purposes before the handler transitions to 'installing'. query := ` UPDATE current_package_state SET status = 'pending_dependencies',