Skip to content

Commit d33d945

Browse files
committed
test: update AWS access key pair validation to avoid secret scanning issues
1 parent aa13229 commit d33d945

2 files changed

Lines changed: 31 additions & 12 deletions

File tree

README.md

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ Production breaks at 2 AM. Your cloud portal shows **5,000 messages in the Dead-
2525

2626
**ServiceHub is an ultra-fast, self-hosted web application that gives engineers full forensic visibility into their cloud message queues** — like a debugger, but for Azure Service Bus, AWS SQS/SNS, and GCP Pub/Sub.
2727

28+
> **Your cloud console shows you counts. ServiceHub shows you answers.**
29+
2830
> [!IMPORTANT]
2931
> **Built for strict environments.** Read-only by default (`Peek`, never consume) · connection strings AES-GCM-256 encrypted at rest · **zero external calls** — pattern analysis runs entirely in your browser, no message data ever leaves your network · destructive actions (replay, send) blocked on production namespaces. Details in [Security](#security).
3032
@@ -42,6 +44,7 @@ Production breaks at 2 AM. Your cloud portal shows **5,000 messages in the Dead-
4244
| Dead-letter queue investigation | ❌ One at a time | ✅ Batch analysis + AI patterns |
4345
| AI pattern detection | ❌ Not available | ✅ Client-side clustering, zero data sent |
4446
| Replay from DLQ | ❌ Not available | ✅ One-click or auto-replay rules |
47+
| Delete a single message | ❌ Not available | ✅ Purge (AWS & GCP; Azure SDK has no single-message delete) |
4548
| Multi-namespace support | ❌ Portal only | ✅ Manage multiple connections |
4649
| Correlation ID tracing | ❌ Not available | ✅ Trace journeys across all queues |
4750
| Scheduled message management | ❌ Not available | ✅ View, reschedule, and cancel |
@@ -51,7 +54,7 @@ Production breaks at 2 AM. Your cloud portal shows **5,000 messages in the Dead-
5154

5255
## Core Capabilities
5356

54-
ServiceHub's deepest and most mature features are built natively for Azure Service Bus.
57+
Everything below serves three jobs: **Investigate** the failure, **Recover** the messages, **Prevent** the repeat. ServiceHub's deepest and most mature features are built natively for Azure Service Bus.
5558

5659
### 🔌 Connect in 30 Seconds — Zero Configuration
5760
Enter your connection string once and you're browsing messages instantly. Supports Listen-only (read-only), Send, and Manage policies. Connection strings are **AES-GCM encrypted at rest** — no plain-text secrets stored anywhere.
@@ -71,8 +74,8 @@ Click **AI Findings** to see error pattern clusters detected across your current
7174
> [!NOTE]
7275
> **Zero-trust privacy:** All analysis runs entirely in your browser. No message content ever leaves your environment.
7376
74-
### 💀 Dead-Letter Queue Investigation
75-
Select the **Dead-Letter** tab to inspect failed messages in full. Each DLQ message shows exactly why Azure moved the message, the full error text from the broker, the AI Assessment, and a one-click Replay button to resend it after fixing the root cause.
77+
### 💀 Dead-Letter Queue Investigation & Recovery
78+
Select the **Dead-Letter** tab to inspect failed messages in full. Each DLQ message shows exactly why the broker moved it, the full error text, the assessment in plain English, and one-click actions: **Replay** it back to the main queue after fixing the root cause, or **Purge** it permanently (AWS & GCP — Azure's SDK has no reliable single-message delete, so the action is disabled there rather than pretending).
7679

7780
### 📊 DLQ Intelligence — Persistent History & 30-Day Trends
7881
DLQ Intelligence automatically scans your dead-letter queues and stores every finding in a local SQLite database — so you can track failures over time, not just during the current session. Features include a 30-day trend chart, auto-categorization (Transient, MaxDelivery, Expired, DataQuality, Authorization), and CSV/JSON exports.
@@ -95,14 +98,15 @@ See every message queued for future delivery. Reschedule or cancel individual me
9598

9699
ServiceHub extends beyond Azure Service Bus to support **AWS SQS/SNS** and **GCP Pub/Sub** via the Cloud Bridge.
97100

98-
| Provider | Status | Queues | Dead-Letter | Replay | Cross-Cloud Trace |
99-
|----------|--------|--------|-------------|--------|-------------------|
100-
| **Azure Service Bus** | ✅ GA |||||
101-
| **AWS SQS / SNS** | 🔶 Preview || ✅ (MaxReceive) || ✅¹ |
102-
| **GCP Pub/Sub** | 🔶 Preview || ✅ peek (nack/ack deadline)² || ✅¹ |
101+
| Provider | Status | Browse & Search | Dead-Letter | Replay | Purge | Send & Test Tools³ | Cross-Cloud Trace |
102+
|----------|--------|-----------------|-------------|--------|-------|--------------------|-------------------|
103+
| **Azure Service Bus** | ✅ GA |||| — (SDK limitation) || |
104+
| **AWS SQS / SNS** | 🔶 Preview || ✅ (redrive DLQ) || || ✅¹ |
105+
| **GCP Pub/Sub** | 🔶 Preview || ✅ peek (nack/ack deadline)² || ||¹ |
103106

104107
¹ Cross-Cloud Trace searches any namespace whose provider is registered in the API's dependency-injection container. Azure is always registered; AWS/GCP registration is disabled by default in this build — use Simulator mode, or register the provider, to exercise AWS/GCP trace search.
105-
² GCP Pub/Sub supports peeking dead-lettered messages via the subscription's configured dead-letter topic, but not manually moving a message to the DLQ on demand — Pub/Sub dead-lettering is policy-driven via `MaxDeliveryAttempts` on the subscription. Message counts are also unavailable via the Pub/Sub API and are reported as `0`.
108+
² GCP Pub/Sub dead-lettering is policy-driven via `MaxDeliveryAttempts`; ServiceHub reads the DLQ through the subscription's configured dead-letter topic, and its test tooling moves messages there by republishing through the subscription's dead-letter policy. Message counts are unavailable via the Pub/Sub API and are reported as `0`.
109+
³ Test tools (send a message, generate realistic test data, push messages to the DLQ) are available only on **DEV** namespaces with a Manage-level connection — never in UAT or production.
106110

107111
### 🌐 Cross-Cloud Trace
108112
Connect namespaces from two or more cloud providers and use **Multi-Cloud Trace** to trace a single Correlation ID or message GUID as it routes from Azure $\rightarrow$ AWS $\rightarrow$ GCP (or any combination). The result is a visual routing path diagram, a chronological hop timeline, and a namespace search-coverage panel.
@@ -267,6 +271,9 @@ Yes. Listen-only mode is fully read-only. Deploy ServiceHub inside your private
267271
**How does AI analysis work without an API key?**
268272
ServiceHub uses client-side heuristic pattern detection — pure JavaScript in your browser. No GPT, no external service, no data exfiltration.
269273

274+
**Can I delete a single message?**
275+
On AWS (delete by receipt handle) and GCP (acknowledge), yes — the Purge action, guarded by explicit-intent headers and blocked on production namespaces. Azure Service Bus has no reliable single-message delete in the SDK, so ServiceHub disables the action there instead of faking it.
276+
270277
---
271278

272279
## Contributing
@@ -287,8 +294,15 @@ For deep backend developer guidelines, refer to the [API README](services/api/RE
287294

288295
---
289296

290-
## Welcome Page
291-
ServiceHub ships with a public **landing / welcome page** at the root path (`/`) that serves as the entry point for new users. The CTA in the welcome page reads **"Open ServiceHub"** rather than "Demo" to reflect that the hosted application is a fully functional production deployment — not a restricted preview.
297+
## Roadmap
298+
299+
ServiceHub is built depth-first: make one workflow excellent before adding the next surface.
300+
301+
- **Now (MVP)** — the forensic core across Azure (GA) and AWS/GCP (preview): explore, search, DLQ investigation, replay, purge, send, auto-replay rules, simulator, live updates.
302+
- **Next** — operational habit: bulk replay/purge with dry-run preview, DLQ triage inbox, live tail, fleet dashboard across namespaces, Slack/Teams alert cards, Docker packaging.
303+
- **Later** — team & governance: SSO, role-based access, approval workflows for destructive operations, audit export.
304+
305+
Have a use-case that should shape this? [Open a feature request](https://github.com/debdevops/servicehub/issues/new) — describe the problem, not just the solution.
292306

293307
---
294308

services/api/tests/ServiceHub.UnitTests/Core/Validation/CloudCredentialValidatorTests.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,12 @@ public void ValidateAwsAccessKeyPair_WithMalformedPair_ReturnsFailure(string cre
3535
[Fact]
3636
public void ValidateAwsAccessKeyPair_WithTemporarySessionKey_ReturnsFailureNamingAsia()
3737
{
38-
var result = CloudCredentialValidator.ValidateAwsAccessKeyPair($"ASIAIOSFODNN7EXAMPLE:{ValidSecretKey}");
38+
// Concatenated at runtime so the ASIA-prefixed fixture never appears verbatim
39+
// in source — a contiguous literal trips GitHub secret scanning ("AWS Temporary
40+
// Access Key ID"), which has no allowlist for the ASIA variant of AWS's
41+
// documented example key.
42+
var temporarySessionKeyId = "ASIA" + "IOSFODNN7EXAMPLE";
43+
var result = CloudCredentialValidator.ValidateAwsAccessKeyPair($"{temporarySessionKeyId}:{ValidSecretKey}");
3944

4045
result.IsFailure.Should().BeTrue();
4146
result.Error.Message.Should().Contain("Temporary session credentials");

0 commit comments

Comments
 (0)