from models import Customer, CustomerService, Location, Host, Service, ServiceType, HostType, VPNType from typing import List def load_customers() -> List[Customer]: """Load customer data. Currently returns mock data for demonstration.""" customers = [] # Customer 1: TechCorp Solutions techcorp = Customer(name="TechCorp Solutions") # TechCorp's cloud services techcorp.services = [ CustomerService("Office 365", "https://portal.office.com", "Email & Office"), CustomerService("Pascom Cloud PBX", "https://techcorp.pascom.cloud", "Phone System"), CustomerService("Salesforce CRM", "https://techcorp.salesforce.com", "CRM") ] # TechCorp's main office location main_office = Location( name="Main Office", vpn_type=VPNType.OPENVPN, connected=True, active=True, vpn_config="/etc/openvpn/techcorp-main.ovpn" ) # Proxmox hypervisor with VMs proxmox_host = Host( name="PVE-01", ip_address="192.168.1.10", host_type=HostType.PROXMOX, description="Main virtualization server", services=[ Service("Web Interface", ServiceType.WEB_GUI, 8006), Service("SSH", ServiceType.SSH, 22) ] ) # VMs running on Proxmox proxmox_host.sub_hosts = [ Host( name="DC-01", ip_address="192.168.1.20", host_type=HostType.WINDOWS_SERVER, description="Domain Controller", services=[ Service("RDP", ServiceType.RDP, 3389), Service("Admin Web", ServiceType.WEB_GUI, 8080) ] ), Host( name="FILE-01", ip_address="192.168.1.21", host_type=HostType.LINUX, description="File Server (Samba)", services=[ Service("SSH", ServiceType.SSH, 22), Service("SMB Share", ServiceType.SMB, 445), Service("Web Panel", ServiceType.WEB_GUI, 9000) ] ), Host( name="DB-01", ip_address="192.168.1.22", host_type=HostType.LINUX, description="PostgreSQL Database", services=[ Service("SSH", ServiceType.SSH, 22), Service("PostgreSQL", ServiceType.DATABASE, 5432), Service("pgAdmin", ServiceType.WEB_GUI, 5050) ] ) ] # Network infrastructure router = Host( name="FW-01", ip_address="192.168.1.1", host_type=HostType.ROUTER, description="pfSense Firewall/Router", services=[ Service("Web Interface", ServiceType.WEB_GUI, 443), Service("SSH", ServiceType.SSH, 22) ] ) switch = Host( name="SW-01", ip_address="192.168.1.2", host_type=HostType.SWITCH, description="Managed Switch", services=[ Service("Web Interface", ServiceType.WEB_GUI, 80), Service("SSH", ServiceType.SSH, 22) ] ) main_office.hosts = [proxmox_host, router, switch] # Branch office location branch_office = Location( name="Branch Office", vpn_type=VPNType.WIREGUARD, connected=False, active=False, vpn_config="/etc/wireguard/techcorp-branch.conf" ) branch_server = Host( name="BRANCH-01", ip_address="10.10.1.10", host_type=HostType.LINUX, description="Branch office server", services=[ Service("SSH", ServiceType.SSH, 22), Service("File Share", ServiceType.SMB, 445), Service("Local Web", ServiceType.WEB_GUI, 8080) ] ) branch_office.hosts = [branch_server] techcorp.locations = [main_office, branch_office] customers.append(techcorp) # Customer 2: MedPractice Group medpractice = Customer(name="MedPractice Group") # MedPractice's cloud services medpractice.services = [ CustomerService("Google Workspace", "https://workspace.google.com", "Email & Office"), CustomerService("Practice Management", "https://medpractice.emr-system.com", "EMR System"), CustomerService("VoIP Provider", "https://medpractice.voip.com", "Phone System") ] # Clinic location clinic_location = Location( name="Main Clinic", vpn_type=VPNType.WIREGUARD, connected=False, active=False, vpn_config="/etc/wireguard/medpractice.conf" ) # ESXi hypervisor esxi_host = Host( name="ESXi-01", ip_address="10.0.1.10", host_type=HostType.ESXI, description="VMware ESXi Host", services=[ Service("vSphere Web", ServiceType.WEB_GUI, 443), Service("SSH", ServiceType.SSH, 22) ] ) # VMs on ESXi esxi_host.sub_hosts = [ Host( name="WIN-SRV-01", ip_address="10.0.1.20", host_type=HostType.WINDOWS_SERVER, description="Windows Server 2022", services=[ Service("RDP", ServiceType.RDP, 3389), Service("IIS Web", ServiceType.WEB_GUI, 80) ] ), Host( name="BACKUP-01", ip_address="10.0.1.21", host_type=HostType.LINUX, description="Backup Server", services=[ Service("SSH", ServiceType.SSH, 22), Service("Backup Web UI", ServiceType.WEB_GUI, 8080) ] ) ] # Physical server physical_server = Host( name="PHYS-01", ip_address="10.0.1.50", host_type=HostType.LINUX, description="Physical Linux Server", services=[ Service("SSH", ServiceType.SSH, 22), Service("Docker Portainer", ServiceType.WEB_GUI, 9000), Service("Nginx Proxy", ServiceType.WEB_GUI, 8080) ] ) clinic_location.hosts = [esxi_host, physical_server] medpractice.locations = [clinic_location] customers.append(medpractice) # Customer 3: Manufacturing Inc manufacturing = Customer(name="Manufacturing Inc") # Manufacturing's cloud services manufacturing.services = [ CustomerService("Microsoft 365", "https://portal.office.com", "Email & Office"), CustomerService("SAP Cloud", "https://manufacturing.sap.com", "ERP System") ] # Factory location factory_location = Location( name="Factory Floor", vpn_type=VPNType.IPSEC, connected=False, active=True, vpn_config="/etc/ipsec.d/manufacturing.conf" ) # Manufacturing infrastructure - simpler setup linux_server = Host( name="PROD-01", ip_address="172.16.1.10", host_type=HostType.LINUX, description="Production Server", services=[ Service("SSH", ServiceType.SSH, 22), Service("Web Portal", ServiceType.WEB_GUI, 8443), Service("FTP", ServiceType.FTP, 21) ] ) nas_server = Host( name="NAS-01", ip_address="172.16.1.20", host_type=HostType.LINUX, description="Network Attached Storage", services=[ Service("SSH", ServiceType.SSH, 22), Service("Web Interface", ServiceType.WEB_GUI, 5000), Service("SMB Share", ServiceType.SMB, 445) ] ) factory_location.hosts = [linux_server, nas_server] # Office location office_location = Location( name="Administrative Office", vpn_type=VPNType.OPENVPN, connected=False, active=False, vpn_config="/etc/openvpn/manufacturing-office.ovpn" ) office_server = Host( name="OFFICE-01", ip_address="172.16.2.10", host_type=HostType.WINDOWS_SERVER, description="Office domain controller", services=[ Service("RDP", ServiceType.RDP, 3389), Service("File Share", ServiceType.SMB, 445) ] ) office_location.hosts = [office_server] manufacturing.locations = [factory_location, office_location] customers.append(manufacturing) return customers def save_customers(customers: List[Customer]) -> None: """Save customer data. Currently a placeholder.""" # TODO: Implement actual persistence (JSON file, database, etc.) pass