Files
defiQUG 9daf1fd378 Apply Composer changes: comprehensive API updates, migrations, middleware, and infrastructure improvements
- Add comprehensive database migrations (001-024) for schema evolution
- Enhance API schema with expanded type definitions and resolvers
- Add new middleware: audit logging, rate limiting, MFA enforcement, security, tenant auth
- Implement new services: AI optimization, billing, blockchain, compliance, marketplace
- Add adapter layer for cloud integrations (Cloudflare, Kubernetes, Proxmox, storage)
- Update Crossplane provider with enhanced VM management capabilities
- Add comprehensive test suite for API endpoints and services
- Update frontend components with improved GraphQL subscriptions and real-time updates
- Enhance security configurations and headers (CSP, CORS, etc.)
- Update documentation and configuration files
- Add new CI/CD workflows and validation scripts
- Implement design system improvements and UI enhancements
2025-12-12 18:01:35 -08:00

152 lines
4.2 KiB
Go

package discovery
import (
"context"
"fmt"
"github.com/pkg/errors"
"github.com/sankofa/crossplane-provider-proxmox/pkg/cloudflare"
)
// CloudflareDiscoveryAgent discovers Cloudflare resources
type CloudflareDiscoveryAgent struct {
client *cloudflare.Client
site string
region string
}
// NewCloudflareDiscoveryAgent creates a new Cloudflare discovery agent
func NewCloudflareDiscoveryAgent(client *cloudflare.Client, site, region string) *CloudflareDiscoveryAgent {
return &CloudflareDiscoveryAgent{
client: client,
site: site,
region: region,
}
}
// DiscoverTunnels discovers all Cloudflare Tunnels
func (a *CloudflareDiscoveryAgent) DiscoverTunnels(ctx context.Context) ([]DiscoveredResource, error) {
tunnels, err := a.client.ListTunnels(ctx)
if err != nil {
return nil, errors.Wrap(err, "failed to list tunnels")
}
var resources []DiscoveredResource
for _, tunnel := range tunnels {
resources = append(resources, DiscoveredResource{
ResourceType: "TUNNEL",
Provider: "CLOUDFLARE",
ProviderID: fmt.Sprintf("tunnel:%s", tunnel.ID),
Name: tunnel.Name,
Region: a.region,
SiteID: a.site,
Metadata: map[string]interface{}{
"id": tunnel.ID,
"status": tunnel.Status,
"connections": tunnel.Connections,
"createdAt": tunnel.CreatedAt,
},
Tags: []string{"cloudflare", "tunnel"},
})
}
return resources, nil
}
// DiscoverDNSRecords discovers all DNS records
func (a *CloudflareDiscoveryAgent) DiscoverDNSRecords(ctx context.Context) ([]DiscoveredResource, error) {
zones, err := a.client.ListZones(ctx)
if err != nil {
return nil, errors.Wrap(err, "failed to list zones")
}
var resources []DiscoveredResource
for _, zoneID := range zones {
records, err := a.client.ListDNSRecords(ctx, zoneID)
if err != nil {
continue // Skip zones we can't access
}
for _, record := range records {
resources = append(resources, DiscoveredResource{
ResourceType: "DNS_RECORD",
Provider: "CLOUDFLARE",
ProviderID: fmt.Sprintf("dns:%s:%s", zoneID, record.ID),
Name: record.Name,
Region: a.region,
SiteID: a.site,
Metadata: map[string]interface{}{
"id": record.ID,
"type": record.Type,
"content": record.Content,
"ttl": record.TTL,
"zoneID": record.ZoneID,
"zoneName": record.ZoneName,
},
Tags: []string{"cloudflare", "dns"},
})
}
}
return resources, nil
}
// DiscoverZeroTrustPolicies discovers Zero Trust access policies
func (a *CloudflareDiscoveryAgent) DiscoverZeroTrustPolicies(ctx context.Context) ([]DiscoveredResource, error) {
policies, err := a.client.ListZeroTrustPolicies(ctx)
if err != nil {
return nil, errors.Wrap(err, "failed to list Zero Trust policies")
}
var resources []DiscoveredResource
for _, policy := range policies {
resources = append(resources, DiscoveredResource{
ResourceType: "ZERO_TRUST_POLICY",
Provider: "CLOUDFLARE",
ProviderID: fmt.Sprintf("zerotrust:%s", policy.ID),
Name: policy.Name,
Region: a.region,
SiteID: a.site,
Metadata: map[string]interface{}{
"id": policy.ID,
"decision": policy.Decision,
"include": policy.Include,
"exclude": policy.Exclude,
"require": policy.Require,
},
Tags: []string{"cloudflare", "zerotrust", "security"},
})
}
return resources, nil
}
// DiscoverAll discovers all Cloudflare resources
func (a *CloudflareDiscoveryAgent) DiscoverAll(ctx context.Context) ([]DiscoveredResource, error) {
var allResources []DiscoveredResource
// Discover tunnels
tunnels, err := a.DiscoverTunnels(ctx)
if err != nil {
return nil, errors.Wrap(err, "failed to discover tunnels")
}
allResources = append(allResources, tunnels...)
// Discover DNS records
dnsRecords, err := a.DiscoverDNSRecords(ctx)
if err != nil {
return nil, errors.Wrap(err, "failed to discover DNS records")
}
allResources = append(allResources, dnsRecords...)
// Discover Zero Trust policies
policies, err := a.DiscoverZeroTrustPolicies(ctx)
if err != nil {
return nil, errors.Wrap(err, "failed to discover Zero Trust policies")
}
allResources = append(allResources, policies...)
return allResources, nil
}