Oliver Kieselbach
cdba7f2cb4
mcp user mgmt, vul report re-scan logging
2026-03-29 12:57:36 +02:00
Oliver Kieselbach
dd2ee928b0
mcp tool extented and meta, mcp usage data UI, better logging for backend
2026-03-29 12:41:09 +02:00
Claude
53afa30068
Fix rescan not persisting results when no vulnerabilities found
...
When CorrelateAsync returned null (zero findings after correct version
filtering), the rescan code path fell through to returning the OLD
stored report instead of persisting the new result. Now properly
handles the null case by deleting the stale report and returning
a clean response.
Added DeleteVulnerabilityReportAsync to the repository interface
and implementations.
https://claude.ai/code/session_01Kv2aAEVqbeFSsyPv7gU7pF
2026-03-28 22:55:09 +00:00
Claude
e3a99e519a
Fix CVE version filtering to exclude already-fixed vulnerabilities
...
The FilterByVersion wildcard logic was treating CVEs with specific
versions in their CPE URI as affecting ALL versions. Now extracts the
version from the CPE 2.3 URI and compares it against the installed
version, so only truly relevant CVEs are shown.
Also adds missing CPE seed mappings for common Intune/Autopilot
managed software: Intune Management Extension, Company Portal,
ODBC/OLE DB drivers, Remote Desktop, Azure CLI.
https://claude.ai/code/session_01Kv2aAEVqbeFSsyPv7gU7pF
2026-03-28 18:03:29 +00:00
Oliver Kieselbach
9db2678315
vul report fix 2
2026-03-28 16:51:42 +01:00
Oliver Kieselbach
825e062d92
fixed auth function
2026-03-28 10:56:50 +01:00
Oliver Kieselbach
fbea8b5ca4
final CORS fix by using different route
2026-03-28 09:42:28 +01:00
Oliver Kieselbach
30ecdac684
moved CORS to env vars
2026-03-28 09:33:29 +01:00
Oliver Kieselbach
49a14c0a00
added CORS middleware
2026-03-28 09:26:44 +01:00
Oliver Kieselbach
cefdc5e8fb
CORS fix
2026-03-28 09:16:27 +01:00
Oliver Kieselbach
b7d040d33d
CORS fix
2026-03-28 08:54:39 +01:00
Oliver Kieselbach
8a4a7cf255
Remote MCP server: Streamable HTTP transport, Container App deployment, MCP user access control
...
- MCP server: stdio → Streamable HTTP (Express) with /health endpoint
- Auth: device code flow → token pass-through (JWT from Claude Code client)
- Dockerfile (multi-stage, node:22-slim) + .dockerignore
- Bicep template: ACR + Container App Environment + Container App (scale-to-zero)
- GitHub Actions: deploy-mcp.yml workflow, all backend workflows migrated to SP auth
- Removed unused dev/main deploy workflows
- Backend: McpAccessPolicy enum (Disabled/WhitelistOnly/AllMembers)
- Backend: McpUsers table + McpUserService (5min cache) + McpUserFunction (CRUD + access check)
- Backend: 6 endpoints registered in EndpointAccessPolicyCatalog
- Web UI: MCP Users management section at /settings/access/mcp-users
- Web UI: user list, add/remove/enable/disable, policy info banner
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-28 08:09:58 +01:00
Oliver Kieselbach
219f5c686a
oauth for mcp server
2026-03-28 06:15:12 +01:00
Oliver Kieselbach
be5a37e7bb
oauth for mcp server
2026-03-28 06:15:08 +01:00
Oliver Kieselbach
cb14e3afbe
switch to managed identity
2026-03-28 04:32:34 +01:00
Oliver Kieselbach
a6f552a877
added MCP capabilities
2026-03-28 04:20:50 +01:00
Oliver Kieselbach
4eec3767a7
fixed SEO meta and search route conflicts
2026-03-27 22:23:55 +01:00
Oliver Kieselbach
e63929cb30
changed route for quick search
2026-03-27 22:16:30 +01:00
Oliver Kieselbach
99eac1369f
layout fixes and fuzzy search
2026-03-27 21:50:46 +01:00
Oliver Kieselbach
22af37e994
added global quick search
2026-03-27 21:37:03 +01:00
Oliver Kieselbach
12880a8e1d
renamings
2026-03-27 20:59:05 +01:00
Oliver Kieselbach
c4dabeeef4
fix CVE data sync and signalr join
2026-03-27 20:48:35 +01:00
Oliver Kieselbach
769beaa14a
Refactorings for many reusables, API URL builder, CollectorBaseClass, CorrelationID Middleware, added Polly for external APIs
2026-03-27 11:14:38 +01:00
Oliver Kieselbach
738f524083
fix nullables
2026-03-27 09:35:14 +01:00
Oliver Kieselbach
905e42064b
fixed usings
2026-03-27 09:17:17 +01:00
Claude
f5ec4247e9
Migrate FeedbackFunction + TenantOffboardFunction to repositories
...
- FeedbackFunction → IConfigRepository (feedback CRUD)
- TenantOffboardFunction → IMaintenanceRepository.DeleteAllTenantDataAsync()
Zero functions/services now create their own TableServiceClient.
All table access goes through repository interfaces.
https://claude.ai/code/session_01NHWJfPaa8TQHuPzMD7gG63
2026-03-27 07:38:19 +00:00
Claude
c8f308c60b
Add Feedback + TenantOffboard repository methods (implementations ready)
...
- IConfigRepository: Add GetFeedbackEntryAsync, SaveFeedbackEntryAsync, GetAllFeedbackEntriesAsync
- IMaintenanceRepository: Add DeleteAllTenantDataAsync
- TableConfigRepository: Implement feedback CRUD against PreviewConfig table
- TableMaintenanceRepository: Implement bulk tenant data deletion with batch deletes
Function migrations (FeedbackFunction, TenantOffboardFunction) in progress.
https://claude.ai/code/session_01NHWJfPaa8TQHuPzMD7gG63
2026-03-27 07:36:27 +00:00
Claude
878b762ca5
Consolidate all repositories to share single TableServiceClient
...
All 10 repository implementations now get their TableClient instances from
the central TableStorageService singleton instead of creating their own
TableServiceClient connections.
Before: 8 parallel TableServiceClient instances to same Storage Account
After: 1 shared TableServiceClient (+ 2 domain-specific functions)
https://claude.ai/code/session_01NHWJfPaa8TQHuPzMD7gG63
2026-03-27 07:29:56 +00:00
Claude
d9abf724a3
Migrate VulnerabilityCorrelationService to IVulnerabilityRepository — Phase 4 complete
...
- VulnerabilityCorrelationService: TableStorageService → IVulnerabilityRepository + ISessionRepository
- IAdminRepository: Add SetTenantMemberEnabledAsync
- TableAdminRepository, TenantAdminsService: Implement enable/disable via new method
- DataAccessServiceExtensions: Add IDeviceSecurityRepository registration
All 12 bypass services now use repository interfaces. Zero services create
their own TableServiceClient. Only repository implementations + TableStorageService
+ 2 domain-specific functions (Feedback, TenantOffboard) have direct table access.
https://claude.ai/code/session_01NHWJfPaa8TQHuPzMD7gG63
2026-03-27 07:21:37 +00:00
Claude
f6157ec8d0
TableAdminRepository refinement from background agent
...
https://claude.ai/code/session_01NHWJfPaa8TQHuPzMD7gG63
2026-03-27 07:18:27 +00:00
Claude
5cfed4e660
Phase 4 refinements: BootstrapSession, GlobalAdmin, Notification, SessionReport
...
Additional cleanup from background agents completing their migrations.
https://claude.ai/code/session_01NHWJfPaa8TQHuPzMD7gG63
2026-03-27 07:17:47 +00:00
Claude
5405a40a5a
Phase 4: Extract table storage from all bypass services into repositories
...
New repository implementations:
- TableConfigRepository: TenantConfig, AdminConfig, PreviewWhitelist, PreviewConfig
- TableBootstrapRepository: BootstrapSessions with dual-partition scheme
- TableNotificationRepository: GlobalNotifications + SessionReports
- TableDeviceSecurityRepository: BlockedDevices + BlockedVersions
Services migrated to use repository interfaces (keep caching + business logic):
- TenantConfigurationService → IConfigRepository
- AdminConfigurationService → IConfigRepository
- PreviewWhitelistService → IConfigRepository
- TelegramNotificationService → IConfigRepository
- GlobalAdminService → IAdminRepository
- TenantAdminsService → IAdminRepository
- BootstrapSessionService → IBootstrapRepository
- GlobalNotificationService → INotificationRepository
- SessionReportService → INotificationRepository
- BlockedDeviceService → IDeviceSecurityRepository
- BlockedVersionService → IDeviceSecurityRepository
TableAdminRepository rewritten with direct table CRUD (removed circular service deps).
IVulnerabilityRepository: Added GetCveCacheEntryAsync for VulnerabilityCorrelationService.
https://claude.ai/code/session_01NHWJfPaa8TQHuPzMD7gG63
2026-03-27 07:16:23 +00:00
Claude
36b8594ff0
Migrate all Vulnerability functions, ApiKey, bypass services to DAL (Phase 3)
...
Vulnerability Functions (8 files):
- GetCpeMappings, SaveCustomCpeMapping, DeleteCustomCpeMapping → IVulnerabilityRepository
- GetUnmatchedSoftware, GetSoftwareInventory → IVulnerabilityRepository
- GetVulnerabilityReport → IVulnerabilityRepository + ISessionRepository
- TriggerVulnerabilityDataSync, VulnerabilityDataSync → IVulnerabilityRepository
Admin:
- ReseedFromGitHubFunction → IVulnerabilityRepository + IRuleRepository
- ApiKeyManagementFunction → IAdminRepository
- ApiKeyMiddleware → IAdminRepository
Bypass Services (removed TableStorageService dependency):
- BlockedDeviceService → own TableClient from IConfiguration
- BlockedVersionService → own TableClient from IConfiguration
- SessionReportService → own TableClient from IConfiguration
New: TableAdminRepository implementation for IAdminRepository
https://claude.ai/code/session_01NHWJfPaa8TQHuPzMD7gG63
2026-03-27 06:54:35 +00:00
Claude
782f81f1a6
Expand IVulnerabilityRepository, IAdminRepository, INotificationRepository for Phase 3
...
- IVulnerabilityRepository: Add CPE mapping CRUD, CVE cache, cross-tenant inventory
- IAdminRepository: Add GetAllApiKeysAsync, GetApiKeyAsync, IncrementApiKeyRequestCountAsync
- INotificationRepository: Add UpdateSessionReportAdminNoteAsync
- TableVulnerabilityRepository: Implement all new methods with direct table access
https://claude.ai/code/session_01NHWJfPaa8TQHuPzMD7gG63
2026-03-27 06:48:47 +00:00
Claude
799ec0a39b
Migrate GetPlatformStatsFunction to IMetricsRepository
...
Completes non-Vulnerability function migrations. Remaining 14 files still
using TableStorageService are: 8 Vulnerability functions (use GetTableClient),
ReseedFromGitHub, ApiKeyManagement, BlockedDevice/VersionService,
SessionReportService, ApiKeyMiddleware — these need interface additions first.
https://claude.ai/code/session_01NHWJfPaa8TQHuPzMD7gG63
2026-03-27 06:42:39 +00:00
Claude
b3187d9ef3
Migrate AuditLogs, RuleResults, Progress, Feedback, Auth functions to DAL
...
- GetAuditLogsFunction, GetGlobalAuditLogsFunction → IMaintenanceRepository
- GetRuleResultsFunction → IRuleRepository + IMaintenanceRepository + ISessionRepository
- ProgressPortalFunction, FeedbackFunction → ISessionRepository
- AuthFunction → IMetricsRepository
https://claude.ai/code/session_01NHWJfPaa8TQHuPzMD7gG63
2026-03-27 06:42:06 +00:00
Claude
6582faad17
Migrate GetGlobalGeographicMetricsFunction to DAL
...
https://claude.ai/code/session_01NHWJfPaa8TQHuPzMD7gG63
2026-03-27 06:38:20 +00:00
Claude
85cd9ae688
Migrate GetGeographicMetricsFunction to DAL
...
https://claude.ai/code/session_01NHWJfPaa8TQHuPzMD7gG63
2026-03-27 06:37:58 +00:00
Claude
ff6e43cecc
Migrate Geographic Location Sessions functions to DAL
...
https://claude.ai/code/session_01NHWJfPaa8TQHuPzMD7gG63
2026-03-27 06:37:41 +00:00
Claude
cae99b445f
Migrate GetAppMetrics, GetGlobalAppMetrics, TenantOffboard refinements
...
https://claude.ai/code/session_01NHWJfPaa8TQHuPzMD7gG63
2026-03-27 06:37:11 +00:00
Claude
d89e2a2ad1
Migrate TenantAdminManagement, TenantOffboard functions to DAL
...
https://claude.ai/code/session_01NHWJfPaa8TQHuPzMD7gG63
2026-03-27 06:36:38 +00:00
Claude
b2246fa7a4
Migrate VersionBlockFunction, MaintenanceService.Aggregation refinements
...
https://claude.ai/code/session_01NHWJfPaa8TQHuPzMD7gG63
2026-03-27 06:35:41 +00:00
Claude
6468a87bc3
Migrate DeviceBlock, Bootstrap, Config, MaintenanceService.Aggregation to DAL
...
- DeviceBlockFunction → IMaintenanceRepository
- CreateBootstrapSessionFunction → IMaintenanceRepository
- RevokeBootstrapSessionFunction → IMaintenanceRepository
- UpdateTenantConfigurationFunction → IMaintenanceRepository
- MaintenanceService.Aggregation → repository interfaces
- IngestEventsFunction.Processing refinements
https://claude.ai/code/session_01NHWJfPaa8TQHuPzMD7gG63
2026-03-27 06:35:24 +00:00
Claude
107fb51a14
Continue DAL migration: Config functions, IngestEvents processing, MaintenanceService
...
Incremental progress from background agents migrating remaining functions
and services to repository interfaces.
https://claude.ai/code/session_01NHWJfPaa8TQHuPzMD7gG63
2026-03-27 06:33:10 +00:00
Claude
bd41ea05c7
Migrate MaintenanceService, IngestEvents processing, UpdateAdminConfig to DAL
...
- MaintenanceService → IMaintenanceRepository + ISessionRepository + IMetricsRepository
- IngestEventsFunction.Processing → updated repository references
- UpdateAdminConfigurationFunction → IMaintenanceRepository
https://claude.ai/code/session_01NHWJfPaa8TQHuPzMD7gG63
2026-03-27 06:32:37 +00:00
Claude
7bf139ecbe
Migrate IngestEvents, RegisterSession, DeleteSession, services to DAL
...
- IngestEventsFunction → ISessionRepository + IMetricsRepository + IMaintenanceRepository
- RegisterSessionFunction → ISessionRepository + IMetricsRepository
- DeleteSessionFunction → ISessionRepository + IMaintenanceRepository
- SubmitSessionReportFunction → IMaintenanceRepository
- RuleEngine → IRuleRepository
- UsageMetricsService → IMetricsRepository + IMaintenanceRepository + ISessionRepository
- PlatformMetricsService → IMetricsRepository + IMaintenanceRepository
- Add StoreEventsBatchAsync to ISessionRepository + TableSessionRepository
https://claude.ai/code/session_01NHWJfPaa8TQHuPzMD7gG63
2026-03-27 06:32:10 +00:00
Claude
2c83bca248
Migrate MarkSession Functions, SearchByCve, AnalyzeRule/GatherRule services to DAL
...
- MarkSessionFailedFunction, MarkSessionSucceededFunction → ISessionRepository + IMaintenanceRepository
- SearchSessionsByCveFunction → ISessionRepository
- AnalyzeRuleService, GatherRuleService → IRuleRepository
- ImeLogPatternService → IRuleRepository
https://claude.ai/code/session_01NHWJfPaa8TQHuPzMD7gG63
2026-03-27 06:30:14 +00:00
Claude
5b4e4238f3
Migrate Session and Metrics Functions to DAL repository interfaces
...
Replace direct TableStorageService injection with ISessionRepository,
IMetricsRepository, and IMaintenanceRepository in 10 Function files.
Add GetSessionEventsAsync to ISessionRepository interface.
Migration in progress — more functions and services to follow.
https://claude.ai/code/session_01NHWJfPaa8TQHuPzMD7gG63
2026-03-27 06:29:17 +00:00
Claude
36554c5ca4
Add Data Access Layer with repository interfaces and Table Storage implementations
...
Introduces a clean abstraction layer to decouple domain services from Azure Table Storage,
enabling future migration to Cosmos DB and Event Streaming without touching business logic.
Architecture:
- 10 repository interfaces in Shared/DataAccess/ (ISessionRepository, IRuleRepository, etc.)
- IDataEventPublisher interface with NullDataEventPublisher for future event streaming
- IStorageInitializer for provider-agnostic initialization
- 5 Table Storage implementations that delegate to existing TableStorageService
- DI extension method AddTableStorageDataAccess() with AddEventStreaming<T>() hook
- Migration plan in tasks/todo.md for incremental adoption
https://claude.ai/code/session_01NHWJfPaa8TQHuPzMD7gG63
2026-03-27 06:03:55 +00:00
Oliver Kieselbach
f6ed4660d1
agent: secureboot certs incl. analyze rule, timezone auto set, NTP offset check
2026-03-26 09:23:12 +01:00