Add CI/CD pipeline, feedback modal, Atlas qualys_id fallback, and health endpoint
- Rewrite .gitlab-ci.yml with proper stages, blocking tests, staging environment on dev box, and SSH-based production deploy to 71.85.90.6 - Add POST /api/health endpoint for pipeline verification - Add POST /atlas/hosts/:hostId/refresh-cache for Atlas cache staleness - AtlasSlideOutPanel: auto-resolve qualys_id from Atlas vulnerabilities, prefer qualys_id over active_host_findings_id, retry on failure - Add FeedbackModal component with bug report button in header and feature request in UserMenu, creates GitLab issues via /api/feedback - Fix all frontend test failures (ESM transforms, TextDecoder polyfill, fast-check resolution, App.test.js boilerplate replacement) - Fix root package.json test script to run jest - Add deploy/ directory with staging systemd service and setup script
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import React, { useState, useRef, useEffect } from 'react';
|
||||
import { User, LogOut, ChevronDown, Shield, Clock } from 'lucide-react';
|
||||
import { User, LogOut, ChevronDown, Shield, Clock, Lightbulb } from 'lucide-react';
|
||||
import { useAuth } from '../contexts/AuthContext';
|
||||
import UserProfilePanel from './UserProfilePanel';
|
||||
|
||||
@@ -151,7 +151,7 @@ function getGroupBadgeStyle(group) {
|
||||
};
|
||||
}
|
||||
|
||||
export default function UserMenu({ onManageUsers, onAuditLog }) {
|
||||
export default function UserMenu({ onManageUsers, onAuditLog, onFeatureRequest }) {
|
||||
const { user, logout, isAdmin } = useAuth();
|
||||
const [isOpen, setIsOpen] = useState(false);
|
||||
const [buttonHovered, setButtonHovered] = useState(false);
|
||||
@@ -281,6 +281,19 @@ export default function UserMenu({ onManageUsers, onAuditLog }) {
|
||||
</>
|
||||
)}
|
||||
|
||||
<button
|
||||
onClick={() => { setIsOpen(false); if (onFeatureRequest) onFeatureRequest(); }}
|
||||
onMouseEnter={() => setHoveredItem('feature')}
|
||||
onMouseLeave={() => setHoveredItem(null)}
|
||||
style={{
|
||||
...STYLES.menuItem,
|
||||
...(hoveredItem === 'feature' ? STYLES.menuItemHover : {}),
|
||||
}}
|
||||
>
|
||||
<Lightbulb size={16} />
|
||||
Feature Request
|
||||
</button>
|
||||
|
||||
<button
|
||||
onClick={handleLogout}
|
||||
onMouseEnter={() => setHoveredItem('signout')}
|
||||
|
||||
Reference in New Issue
Block a user