From 83b3d932e5a9664264b4b5ac40d601925654e4b1 Mon Sep 17 00:00:00 2001 From: Anso Date: Sat, 18 Jul 2026 16:32:58 -0400 Subject: [PATCH] feat: add Apprise as a fourth notification channel (#1644) * feat: add Apprise as a fourth notification channel Support keyed and stateless Apprise endpoints with secret-safe public DTOs, fail-closed malformed config, and mode-specific Settings UI. Docs and screenshots updated for four-channel Channels and routing. * fix: harden Apprise secrets at rest and preserve-on-write saves Encrypt Apprise endpoint and config with CryptoService so a downgrade cannot leak via SELECT *. Align channel and routing saves so blank destination fields omit config on same-mode URL edits, enforce keyed notify IDs, and keep secrets_redacted truthful. * fix: harden Apprise route type changes and mixed-version config UI Require a raw channel_url when switching notification-route types so ciphertext cannot strand under Discord/Slack/webhook. Default missing remote apprise status, replace Channels state on node switch, and exercise the production config-column migrator. * fix: tolerate stub fleet configuration payloads without agents Normalize remote Apprise agent status only when notifications.agents is present so successful Pilot/stub fetches stay online instead of throwing into the offline catch path. * fix: correct TypeScript in configuration normalize tests * fix: ignore stale Channels agent bodies after node switch Compare the active node after response JSON parsing so a slow body cannot overwrite the newly selected node's channel state. * fix: isolate corrupt Apprise crypto and keep keyed Tags visible Decrypt failures on one Apprise row no longer 500 agent/route lists or suppress sibling channel dispatch. Treat public /notify/ as keyed so Tags remain editable after reload. --- backend/src/__tests__/agents-routes.test.ts | 119 ++++++ backend/src/__tests__/alerts-api.test.ts | 75 +++- .../__tests__/apprise-secret-at-rest.test.ts | 207 ++++++++++ .../configuration-status-normalize.test.ts | 50 +++ .../src/__tests__/dashboard-routes.test.ts | 7 +- .../src/__tests__/json-parser-bypass.test.ts | 25 ++ .../__tests__/notification-apprise.test.ts | 197 +++++++++ ...ification-channel-config-migration.test.ts | 108 +++++ .../__tests__/notification-channels.test.ts | 183 ++++++++- .../__tests__/notification-routes-api.test.ts | 280 ++++++++++++- backend/src/helpers/configurationStatus.ts | 47 +++ backend/src/helpers/notificationChannels.ts | 306 +++++++++++++- backend/src/routes/agents.ts | 36 +- backend/src/routes/dashboard.ts | 5 +- backend/src/routes/fleet.ts | 4 +- backend/src/routes/notifications.ts | 71 +++- backend/src/services/DatabaseService.ts | 124 +++++- backend/src/services/NotificationService.ts | 71 +++- docs/features/alerts-notifications.mdx | 32 +- docs/features/dashboard.mdx | 2 +- docs/features/licensing.mdx | 4 +- docs/features/multi-node.mdx | 2 +- docs/features/overview.mdx | 2 +- docs/features/scheduled-operations.mdx | 2 +- .../notifications-settings.png | Bin 114905 -> 105779 bytes .../alerts-notifications/routing-modal.png | Bin 104857 -> 52318 bytes docs/operations/troubleshooting.mdx | 2 +- docs/reference/settings.mdx | 7 +- frontend/src/components/StackAlertSheet.tsx | 3 +- .../dashboard/ConfigurationStatus.tsx | 4 +- .../__tests__/ConfigurationStatus.test.tsx | 32 ++ .../dashboard/useConfigurationStatus.ts | 34 +- .../components/fleet/FleetConfiguration.tsx | 9 +- .../settings/NotificationRoutingSection.tsx | 113 +++++- .../settings/NotificationsSection.tsx | 186 +++++++-- .../NotificationRoutingSection.test.tsx | 229 +++++++++++ .../__tests__/NotificationsSection.test.tsx | 379 ++++++++++++++++++ frontend/src/components/settings/registry.ts | 4 +- frontend/src/components/settings/types.ts | 3 +- .../src/lib/__tests__/appriseEndpoint.test.ts | 20 + frontend/src/lib/appriseEndpoint.ts | 37 ++ frontend/src/lib/configurationStatus.ts | 31 ++ 42 files changed, 2916 insertions(+), 136 deletions(-) create mode 100644 backend/src/__tests__/apprise-secret-at-rest.test.ts create mode 100644 backend/src/__tests__/configuration-status-normalize.test.ts create mode 100644 backend/src/__tests__/notification-apprise.test.ts create mode 100644 backend/src/__tests__/notification-channel-config-migration.test.ts create mode 100644 backend/src/helpers/configurationStatus.ts create mode 100644 frontend/src/components/settings/__tests__/NotificationRoutingSection.test.tsx create mode 100644 frontend/src/components/settings/__tests__/NotificationsSection.test.tsx create mode 100644 frontend/src/lib/__tests__/appriseEndpoint.test.ts create mode 100644 frontend/src/lib/appriseEndpoint.ts create mode 100644 frontend/src/lib/configurationStatus.ts diff --git a/backend/src/__tests__/agents-routes.test.ts b/backend/src/__tests__/agents-routes.test.ts index da9c4546..51df399c 100644 --- a/backend/src/__tests__/agents-routes.test.ts +++ b/backend/src/__tests__/agents-routes.test.ts @@ -124,3 +124,122 @@ describe('POST /api/agents', () => { expect(Boolean(agents[0].enabled)).toBe(true); }); }); + +describe('Apprise agents - redaction and preserve-on-write', () => { + const keyedUrl = 'http://apprise.local/notify/key-secret-value'; + const serviceUrl = 'discord://webhook-id/webhook-token?token=query-secret'; + + it('GET redacts keyed endpoint and never returns destination secrets', async () => { + DatabaseService.getInstance().upsertAgent(1, { + type: 'apprise', + url: keyedUrl, + enabled: true, + config: JSON.stringify({ tags: 'ops' }), + }); + + const res = await request(app).get('/api/agents').set('Cookie', adminCookie); + expect(res.status).toBe(200); + expect(res.body[0].url).toBe('http://apprise.local/notify/'); + expect(res.body[0].config).toMatchObject({ mode: 'keyed', tags: 'ops', has_urls: false }); + expect(res.body[0].secrets_redacted).toBe(true); + expect(JSON.stringify(res.body)).not.toContain('key-secret-value'); + }); + + it('GET for stateless mode exposes providers and url_count only', async () => { + DatabaseService.getInstance().upsertAgent(1, { + type: 'apprise', + url: 'http://apprise.local/notify', + enabled: true, + config: JSON.stringify({ urls: serviceUrl }), + }); + + const res = await request(app).get('/api/agents').set('Cookie', adminCookie); + expect(res.status).toBe(200); + expect(res.body[0].url).toBe('http://apprise.local/notify'); + expect(res.body[0].config).toMatchObject({ + mode: 'stateless', + has_urls: true, + providers: ['discord'], + url_count: 1, + }); + expect(JSON.stringify(res.body)).not.toContain('webhook-token'); + expect(JSON.stringify(res.body)).not.toContain('query-secret'); + }); + + it('rejects posting a redacted endpoint URL', async () => { + DatabaseService.getInstance().upsertAgent(1, { + type: 'apprise', + url: keyedUrl, + enabled: true, + config: JSON.stringify({ tags: 'ops' }), + }); + + const res = await request(app).post('/api/agents').set('Cookie', adminCookie).send({ + type: 'apprise', + url: 'http://apprise.local/notify/', + enabled: true, + config: { tags: 'ops' }, + }); + expect(res.status).toBe(400); + }); + + it('rejects public DTO config shapes on write', async () => { + const res = await request(app).post('/api/agents').set('Cookie', adminCookie).send({ + type: 'apprise', + url: 'http://apprise.local/notify', + enabled: true, + config: { mode: 'stateless', has_urls: true, providers: ['discord'], url_count: 1 }, + }); + expect(res.status).toBe(400); + }); + + it('preserves stored secrets when url and config are omitted', async () => { + const db = DatabaseService.getInstance(); + db.upsertAgent(1, { + type: 'apprise', + url: keyedUrl, + enabled: true, + config: JSON.stringify({ tags: 'ops' }), + }); + + const res = await request(app).post('/api/agents').set('Cookie', adminCookie).send({ + type: 'apprise', + enabled: false, + }); + expect(res.status).toBe(200); + + const agents = db.getAgents(1); + expect(agents[0].url).toBe(keyedUrl); + expect(agents[0].config).toBe(JSON.stringify({ tags: 'ops' })); + expect(Boolean(agents[0].enabled)).toBe(false); + }); + + it('creates a keyed agent with no config and persists {}', async () => { + const res = await request(app).post('/api/agents').set('Cookie', adminCookie).send({ + type: 'apprise', + url: 'http://apprise.local/notify/new-key', + enabled: true, + }); + expect(res.status).toBe(200); + const agent = DatabaseService.getInstance().getAgents(1).find(a => a.type === 'apprise'); + expect(agent?.url).toBe('http://apprise.local/notify/new-key'); + expect(agent?.config).toBe('{}'); + }); + + it('rejects preserve-on-write when stored Apprise config is malformed', async () => { + DatabaseService.getInstance().upsertAgent(1, { + type: 'apprise', + url: keyedUrl, + enabled: true, + config: '{not-json', + }); + + const res = await request(app).post('/api/agents').set('Cookie', adminCookie).send({ + type: 'apprise', + enabled: false, + }); + expect(res.status).toBe(400); + expect(res.body.error).toMatch(/invalid/i); + expect(JSON.stringify(res.body)).not.toContain('key-secret-value'); + }); +}); diff --git a/backend/src/__tests__/alerts-api.test.ts b/backend/src/__tests__/alerts-api.test.ts index 6d1c3e80..53a3a600 100644 --- a/backend/src/__tests__/alerts-api.test.ts +++ b/backend/src/__tests__/alerts-api.test.ts @@ -242,7 +242,7 @@ describe('POST /api/notifications/test', () => { .set('Cookie', authCookie) .send({ type: 'telegram', url: 'https://example.com' }); expect(res.status).toBe(400); - expect(res.body.error).toContain('discord, slack, webhook'); + expect(res.body.error).toContain('discord, slack, webhook, apprise'); }); it('rejects missing type with 400', async () => { @@ -277,4 +277,77 @@ describe('POST /api/notifications/test', () => { .send({ type: 'discord', url: 'https://' }); expect(res.status).toBe(400); }); + + it('dispatches keyed Apprise test with exact payload', async () => { + const fetchMock = vi.fn().mockResolvedValue({ ok: true, status: 200 }); + vi.stubGlobal('fetch', fetchMock); + try { + const res = await request(app) + .post('/api/notifications/test') + .set('Cookie', authCookie) + .send({ type: 'apprise', url: 'http://apprise.local/notify/test-key', config: { tags: 'ops' } }); + expect(res.status).toBe(200); + expect(fetchMock).toHaveBeenCalledWith( + 'http://apprise.local/notify/test-key', + expect.objectContaining({ + method: 'POST', + body: JSON.stringify({ + title: 'Sencho Alert [INFO]', + body: '🔌 Test Notification from Sencho!', + type: 'info', + tag: 'ops', + }), + }), + ); + } finally { + vi.unstubAllGlobals(); + } + }); + + it('dispatches stateless Apprise test with urls and rejects scheme-less tokens', async () => { + const fetchMock = vi.fn().mockResolvedValue({ ok: true, status: 200 }); + vi.stubGlobal('fetch', fetchMock); + try { + const bad = await request(app) + .post('/api/notifications/test') + .set('Cookie', authCookie) + .send({ type: 'apprise', url: 'http://apprise.local/notify', config: { urls: 'no-scheme' } }); + expect(bad.status).toBe(400); + expect(fetchMock).not.toHaveBeenCalled(); + + const ok = await request(app) + .post('/api/notifications/test') + .set('Cookie', authCookie) + .send({ type: 'apprise', url: 'http://apprise.local/notify', config: { urls: 'discord://token' } }); + expect(ok.status).toBe(200); + expect(fetchMock).toHaveBeenCalledWith( + 'http://apprise.local/notify', + expect.objectContaining({ + body: JSON.stringify({ + title: 'Sencho Alert [INFO]', + body: '🔌 Test Notification from Sencho!', + type: 'info', + urls: 'discord://token', + }), + }), + ); + } finally { + vi.unstubAllGlobals(); + } + }); + + it('returns sanitized details on Apprise 204 without leaking secrets', async () => { + vi.stubGlobal('fetch', vi.fn().mockResolvedValue({ ok: true, status: 204 })); + try { + const res = await request(app) + .post('/api/notifications/test') + .set('Cookie', authCookie) + .send({ type: 'apprise', url: 'http://apprise.local/notify/secret-key', config: {} }); + expect(res.status).toBe(500); + expect(JSON.stringify(res.body)).toContain('HTTP 204'); + expect(JSON.stringify(res.body)).not.toContain('secret-key'); + } finally { + vi.unstubAllGlobals(); + } + }); }); diff --git a/backend/src/__tests__/apprise-secret-at-rest.test.ts b/backend/src/__tests__/apprise-secret-at-rest.test.ts new file mode 100644 index 00000000..a93437ba --- /dev/null +++ b/backend/src/__tests__/apprise-secret-at-rest.test.ts @@ -0,0 +1,207 @@ +/** + * Downgrade-safety: Apprise url/config must be encrypted at rest so a + * pre-Apprise binary's SELECT * + unsanitized GET cannot return raw secrets. + */ +import { describe, it, expect, beforeAll, afterAll, beforeEach } from 'vitest'; +import { setupTestDb, cleanupTestDb } from './helpers/setupTestDb'; +import { serializePublicAgent, serializePublicNotificationRoute } from '../helpers/notificationChannels'; + +let tmpDir: string; +let DatabaseService: typeof import('../services/DatabaseService').DatabaseService; + +beforeAll(async () => { + tmpDir = await setupTestDb(); + ({ DatabaseService } = await import('../services/DatabaseService')); +}); + +afterAll(() => cleanupTestDb(tmpDir)); + +beforeEach(() => { + const db = DatabaseService.getInstance().getDb(); + db.prepare('DELETE FROM agents').run(); + db.prepare('DELETE FROM notification_routes').run(); +}); + +describe('Apprise secrets at rest (downgrade-safe)', () => { + it('stores keyed agent secrets as ciphertext; SELECT * does not leak the notify key', () => { + const db = DatabaseService.getInstance(); + const keySecret = 'SuperSecretKey99'; + + db.upsertAgent(1, { + type: 'apprise', + url: `http://apprise.local/notify/${keySecret}`, + enabled: true, + config: '{}', + }); + + const raw = db.getDb().prepare('SELECT * FROM agents WHERE type = ?').get('apprise') as { + url: string; + config: string | null; + }; + expect(raw.url).toMatch(/^enc:/); + expect(raw.url).not.toContain(keySecret); + expect(raw.url).not.toContain('apprise.local'); + expect(raw.config).toMatch(/^enc:/); + + const apprise = db.getAgents(1).find(a => a.type === 'apprise')!; + expect(apprise.url).toBe(`http://apprise.local/notify/${keySecret}`); + const pub = serializePublicAgent(apprise); + expect(pub.secrets_redacted).toBe(true); + expect(pub.url).toContain(''); + expect(JSON.stringify(pub)).not.toContain(keySecret); + }); + + it('stores stateless destination URLs as ciphertext; SELECT * does not leak credentials', () => { + const db = DatabaseService.getInstance(); + const destSecret = 'mailto://user:smtp-password@example.com'; + + db.upsertAgent(1, { + type: 'apprise', + url: 'http://apprise.local/notify', + enabled: true, + config: JSON.stringify({ urls: destSecret }), + }); + + const raw = db.getDb().prepare('SELECT * FROM agents WHERE type = ?').get('apprise') as { + url: string; + config: string | null; + }; + expect(raw.url).toMatch(/^enc:/); + expect(raw.config).toMatch(/^enc:/); + expect(raw.config).not.toContain(destSecret); + expect(raw.config).not.toContain('smtp-password'); + + const apprise = db.getAgents(1).find(a => a.type === 'apprise')!; + expect(apprise.url).toBe('http://apprise.local/notify'); + expect(apprise.config).toBe(JSON.stringify({ urls: destSecret })); + const pub = serializePublicAgent(apprise); + expect(pub.secrets_redacted).toBe(true); + expect(JSON.stringify(pub)).not.toContain(destSecret); + }); + + it('encrypts Apprise route channel_url and config the same way', () => { + const db = DatabaseService.getInstance(); + const keySecret = 'RouteKey_01'; + const now = Date.now(); + const route = db.createNotificationRoute({ + name: 'apprise-route', + node_id: null, + stack_patterns: [], + label_ids: null, + categories: null, + channel_type: 'apprise', + channel_url: `http://apprise.local/notify/${keySecret}`, + config: '{}', + priority: 0, + enabled: true, + created_at: now, + updated_at: now, + }); + + const raw = db.getDb().prepare('SELECT * FROM notification_routes WHERE id = ?').get(route.id) as { + channel_url: string; + config: string | null; + }; + expect(raw.channel_url).toMatch(/^enc:/); + expect(raw.channel_url).not.toContain(keySecret); + expect(raw.config).toMatch(/^enc:/); + + const loaded = db.getNotificationRoute(route.id)!; + expect(loaded.channel_url).toBe(`http://apprise.local/notify/${keySecret}`); + const pub = serializePublicNotificationRoute(loaded); + expect(pub.secrets_redacted).toBe(true); + expect(pub.channel_url).toContain(''); + expect(JSON.stringify(pub)).not.toContain(keySecret); + }); + + it('does not encrypt Discord agent URLs (unchanged channel behavior)', () => { + const db = DatabaseService.getInstance(); + const url = 'https://discord.com/api/webhooks/123/plaintext-token'; + db.upsertAgent(1, { type: 'discord', url, enabled: true }); + const raw = db.getDb().prepare('SELECT * FROM agents WHERE type = ?').get('discord') as { url: string }; + expect(raw.url).toBe(url); + expect(raw.url.startsWith('enc:')).toBe(false); + const pub = serializePublicAgent(db.getAgents(1).find(a => a.type === 'discord')!); + expect(pub.secrets_redacted).toBe(false); + expect(pub.url).toBe(url); + }); + + it('isolates corrupt Apprise ciphertext so sibling channels still load and Apprise can be repaired', () => { + const db = DatabaseService.getInstance(); + const discordUrl = 'https://discord.com/api/webhooks/123/plaintext-token'; + db.upsertAgent(1, { type: 'discord', url: discordUrl, enabled: true }); + db.upsertAgent(1, { + type: 'apprise', + url: 'http://apprise.local/notify/good-key', + enabled: true, + config: '{}', + }); + + // Simulate backup-restore / key-rotation damage: enc: prefix with invalid payload. + db.getDb().prepare('UPDATE agents SET url = ?, config = ? WHERE type = ?').run( + 'enc:000000000000000000000000:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:bbbb', + 'enc:000000000000000000000000:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:bbbb', + 'apprise', + ); + + const agents = db.getAgents(1); + expect(agents.find(a => a.type === 'discord')!.url).toBe(discordUrl); + const broken = agents.find(a => a.type === 'apprise')!; + expect(broken.url).toBe(''); + expect(broken.config).toBeNull(); + + const enabled = db.getEnabledAgents(1); + expect(enabled.some(a => a.type === 'discord')).toBe(true); + + db.upsertAgent(1, { + type: 'apprise', + url: 'http://apprise.local/notify/repaired-key', + enabled: true, + config: '{}', + }); + expect(db.getAgents(1).find(a => a.type === 'apprise')!.url).toBe( + 'http://apprise.local/notify/repaired-key', + ); + }); + + it('isolates corrupt Apprise route ciphertext from the routes list', () => { + const db = DatabaseService.getInstance(); + const now = Date.now(); + db.createNotificationRoute({ + name: 'discord-ok', + node_id: null, + stack_patterns: [], + label_ids: null, + categories: null, + channel_type: 'discord', + channel_url: 'https://discord.com/api/webhooks/1/token', + config: null, + priority: 0, + enabled: true, + created_at: now, + updated_at: now, + }); + const apprise = db.createNotificationRoute({ + name: 'apprise-broken', + node_id: null, + stack_patterns: [], + label_ids: null, + categories: null, + channel_type: 'apprise', + channel_url: 'http://apprise.local/notify/route-key', + config: '{}', + priority: 1, + enabled: true, + created_at: now, + updated_at: now, + }); + db.getDb().prepare('UPDATE notification_routes SET channel_url = ? WHERE id = ?').run( + 'enc:000000000000000000000000:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:bbbb', + apprise.id, + ); + + const routes = db.getNotificationRoutes(); + expect(routes.find(r => r.name === 'discord-ok')!.channel_url).toContain('discord.com'); + expect(routes.find(r => r.name === 'apprise-broken')!.channel_url).toBe(''); + }); +}); diff --git a/backend/src/__tests__/configuration-status-normalize.test.ts b/backend/src/__tests__/configuration-status-normalize.test.ts new file mode 100644 index 00000000..96e95af0 --- /dev/null +++ b/backend/src/__tests__/configuration-status-normalize.test.ts @@ -0,0 +1,50 @@ +import { describe, it, expect } from 'vitest'; +import { normalizeConfigurationAgents, normalizeRemoteConfigurationStatus } from '../helpers/configurationStatus'; + +describe('normalizeConfigurationAgents', () => { + it('defaults missing apprise to disabled/unconfigured', () => { + const normalized = normalizeConfigurationAgents({ + discord: { configured: true, enabled: true }, + slack: { configured: false, enabled: false }, + webhook: { configured: true, enabled: false }, + }); + expect(normalized.apprise).toEqual({ configured: false, enabled: false }); + expect(normalized.discord.enabled).toBe(true); + }); + + it('preserves an explicit apprise slot', () => { + const normalized = normalizeConfigurationAgents({ + discord: { configured: false, enabled: false }, + slack: { configured: false, enabled: false }, + webhook: { configured: false, enabled: false }, + apprise: { configured: true, enabled: true }, + }); + expect(normalized.apprise).toEqual({ configured: true, enabled: true }); + }); +}); + +describe('normalizeRemoteConfigurationStatus', () => { + it('passes through stub payloads without notifications.agents', () => { + const stub = { ssoConfigured: false, alertsConfigured: true }; + expect(normalizeRemoteConfigurationStatus(stub)).toEqual(stub); + }); + + it('fills missing apprise when an agents block is present', () => { + const raw = { + notifications: { + agents: { + discord: { configured: true, enabled: true }, + slack: { configured: false, enabled: false }, + webhook: { configured: false, enabled: false }, + }, + }, + }; + const normalized = normalizeRemoteConfigurationStatus(raw); + expect(normalized.notifications.agents).toEqual({ + discord: { configured: true, enabled: true }, + slack: { configured: false, enabled: false }, + webhook: { configured: false, enabled: false }, + apprise: { configured: false, enabled: false }, + }); + }); +}); diff --git a/backend/src/__tests__/dashboard-routes.test.ts b/backend/src/__tests__/dashboard-routes.test.ts index c14891f4..ba4d0758 100644 --- a/backend/src/__tests__/dashboard-routes.test.ts +++ b/backend/src/__tests__/dashboard-routes.test.ts @@ -54,7 +54,12 @@ describe('GET /api/dashboard/configuration', () => { expect(res.body).toMatchObject({ tier: expect.any(String), notifications: { - agents: { discord: { configured: expect.any(Boolean) }, slack: { configured: expect.any(Boolean) }, webhook: { configured: expect.any(Boolean) } }, + agents: { + discord: { configured: expect.any(Boolean) }, + slack: { configured: expect.any(Boolean) }, + webhook: { configured: expect.any(Boolean) }, + apprise: { configured: expect.any(Boolean) }, + }, alertRules: expect.any(Number), routingRules: { count: expect.any(Number), enabledCount: expect.any(Number), locked: expect.any(Boolean) }, }, diff --git a/backend/src/__tests__/json-parser-bypass.test.ts b/backend/src/__tests__/json-parser-bypass.test.ts index bfaebb7e..65e7f59e 100644 --- a/backend/src/__tests__/json-parser-bypass.test.ts +++ b/backend/src/__tests__/json-parser-bypass.test.ts @@ -108,4 +108,29 @@ describe('conditionalJsonParser remote-proxy bypass', () => { expect(lastUpstreamAuth).toBeNull(); expect([200, 404]).toContain(res.status); }); + + it('forwards Apprise agent config bodies intact to the remote', async () => { + lastUpstreamBody = null; + lastUpstreamAuth = null; + + const payload = { + type: 'apprise', + url: 'http://apprise.local/notify', + enabled: true, + config: { urls: 'discord://webhook-id/webhook-token?token=query-secret' }, + }; + + const res = await request(app) + .post('/api/agents') + .set('Authorization', authHeader) + .set('x-node-id', String(remoteNodeId)) + .set('Content-Type', 'application/json') + .send(payload); + + expect(res.status).toBe(200); + expect(lastUpstreamBody).not.toBeNull(); + expect(JSON.parse(lastUpstreamBody!.toString('utf-8'))).toEqual(payload); + expect(lastUpstreamAuth).toBe('Bearer bypass-test-token'); + expect(JSON.stringify(res.body)).not.toContain('query-secret'); + }); }); diff --git a/backend/src/__tests__/notification-apprise.test.ts b/backend/src/__tests__/notification-apprise.test.ts new file mode 100644 index 00000000..5669e2cb --- /dev/null +++ b/backend/src/__tests__/notification-apprise.test.ts @@ -0,0 +1,197 @@ +/** + * Apprise delivery through NotificationService: payloads, status classes, + * fail-closed malformed config, and dispatch_error recording. + */ +import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; + +const { + mockGetEnabledNotificationRoutes, + mockGetEnabledNotificationSuppressionRules, + mockGetEnabledAgents, + mockGetStackLabelIds, + mockAddNotificationHistory, + mockUpdateNotificationDispatchError, +} = vi.hoisted(() => ({ + mockGetEnabledNotificationRoutes: vi.fn().mockReturnValue([]), + mockGetEnabledNotificationSuppressionRules: vi.fn().mockReturnValue([]), + mockGetEnabledAgents: vi.fn().mockReturnValue([]), + mockGetStackLabelIds: vi.fn().mockReturnValue([]), + mockAddNotificationHistory: vi.fn().mockReturnValue({ + id: 99, + level: 'info', + message: 'test', + timestamp: Date.now(), + is_read: 0, + }), + mockUpdateNotificationDispatchError: vi.fn(), +})); + +vi.mock('../services/DatabaseService', () => ({ + DatabaseService: { + getInstance: () => ({ + getEnabledNotificationRoutes: mockGetEnabledNotificationRoutes, + getEnabledNotificationSuppressionRules: mockGetEnabledNotificationSuppressionRules, + getEnabledAgents: mockGetEnabledAgents, + getStackLabelIds: mockGetStackLabelIds, + addNotificationHistory: mockAddNotificationHistory, + updateNotificationDispatchError: mockUpdateNotificationDispatchError, + }), + }, +})); + +vi.mock('../services/NodeRegistry', () => ({ + NodeRegistry: { + getInstance: () => ({ + getDefaultNodeId: () => 1, + getComposeDir: () => '/app/compose', + }), + }, +})); + +vi.mock('../services/StackActivityMetricsService', () => ({ + StackActivityMetricsService: { + getInstance: () => ({ + record: vi.fn(), + }), + }, +})); + +import { NotificationService, NotificationDeliveryError } from '../services/NotificationService'; + +const KEYED = 'http://apprise.local/notify/key-secret'; +const STATELESS = 'http://apprise.local/notify'; + +function makeAppriseRoute(overrides: Record = {}) { + return { + id: 1, + name: 'Apprise route', + node_id: null, + stack_patterns: ['my-app'], + label_ids: null, + categories: null, + channel_type: 'apprise' as const, + channel_url: KEYED, + config: '{}', + priority: 0, + enabled: true, + created_at: 1, + updated_at: 1, + ...overrides, + }; +} + +describe('NotificationService - Apprise delivery', () => { + let svc: NotificationService; + let mockFetch: ReturnType; + + beforeEach(() => { + (NotificationService as unknown as { instance?: NotificationService }).instance = undefined; + svc = NotificationService.getInstance(); + mockFetch = vi.fn().mockResolvedValue({ ok: true, status: 200 }); + vi.stubGlobal('fetch', mockFetch); + mockGetEnabledNotificationRoutes.mockReturnValue([]); + mockGetEnabledNotificationSuppressionRules.mockReturnValue([]); + mockGetEnabledAgents.mockReturnValue([]); + mockUpdateNotificationDispatchError.mockClear(); + mockAddNotificationHistory.mockClear(); + }); + + afterEach(() => { + vi.unstubAllGlobals(); + vi.clearAllMocks(); + }); + + it('sends keyed payload without tag when tags are empty', async () => { + mockGetEnabledNotificationRoutes.mockReturnValue([makeAppriseRoute({ config: '{}' })]); + await svc.dispatchAlert('warning', 'deploy_failure', 'boom', { stackName: 'my-app' }); + expect(mockFetch).toHaveBeenCalledWith(KEYED, expect.objectContaining({ + method: 'POST', + body: JSON.stringify({ + title: 'Sencho Alert [WARNING]', + body: 'boom', + type: 'warning', + }), + })); + }); + + it('sends keyed tag and maps error to failure', async () => { + mockGetEnabledNotificationRoutes.mockReturnValue([ + makeAppriseRoute({ config: JSON.stringify({ tags: 'ops' }) }), + ]); + await svc.dispatchAlert('error', 'deploy_failure', 'boom', { stackName: 'my-app' }); + expect(mockFetch).toHaveBeenCalledWith(KEYED, expect.objectContaining({ + body: JSON.stringify({ + title: 'Sencho Alert [ERROR]', + body: 'boom', + type: 'failure', + tag: 'ops', + }), + })); + }); + + it('sends stateless urls from stored config via agent fallback', async () => { + mockGetEnabledAgents.mockReturnValue([{ + type: 'apprise', + url: STATELESS, + enabled: true, + config: JSON.stringify({ urls: 'discord://token mailto://a@b.com' }), + }]); + await svc.dispatchAlert('info', 'deploy_success', 'ok'); + expect(mockFetch).toHaveBeenCalledWith(STATELESS, expect.objectContaining({ + body: JSON.stringify({ + title: 'Sencho Alert [INFO]', + body: 'ok', + type: 'info', + urls: 'discord://token mailto://a@b.com', + }), + })); + }); + + it('treats HTTP 204 as non-retryable failure and records dispatch_error', async () => { + mockFetch.mockResolvedValue({ ok: true, status: 204 }); + mockGetEnabledNotificationRoutes.mockReturnValue([makeAppriseRoute()]); + await svc.dispatchAlert('info', 'deploy_success', 'ok', { stackName: 'my-app' }); + expect(mockUpdateNotificationDispatchError).toHaveBeenCalledWith( + 99, + expect.stringContaining('HTTP 204'), + ); + const errText = String(mockUpdateNotificationDispatchError.mock.calls[0][1]); + expect(errText).not.toContain('key-secret'); + }); + + it('classifies 4xx as non-retryable and 5xx as retryable via testDispatch', async () => { + mockFetch.mockResolvedValueOnce({ ok: false, status: 400 }); + await expect(svc.testDispatch('apprise', KEYED, {})).rejects.toMatchObject({ + message: expect.stringContaining('HTTP 400'), + retryable: false, + } satisfies Partial); + + mockFetch.mockResolvedValueOnce({ ok: false, status: 503 }); + await expect(svc.testDispatch('apprise', KEYED, {})).rejects.toMatchObject({ + message: expect.stringContaining('HTTP 503'), + retryable: true, + }); + }); + + it('wraps network failures as retryable sanitized errors', async () => { + mockFetch.mockRejectedValueOnce(new TypeError('fetch failed')); + await expect(svc.testDispatch('apprise', KEYED, {})).rejects.toMatchObject({ + message: 'Apprise request failed', + retryable: true, + status: null, + }); + }); + + it('does not fetch when stored config is malformed and records a sanitized error', async () => { + mockGetEnabledNotificationRoutes.mockReturnValue([ + makeAppriseRoute({ config: '{broken', channel_url: KEYED }), + ]); + await svc.dispatchAlert('info', 'deploy_success', 'ok', { stackName: 'my-app' }); + expect(mockFetch).not.toHaveBeenCalled(); + expect(mockUpdateNotificationDispatchError).toHaveBeenCalledWith( + 99, + expect.stringContaining('Apprise configuration is missing or invalid'), + ); + expect(String(mockUpdateNotificationDispatchError.mock.calls[0][1])).not.toContain('key-secret'); + }); +}); diff --git a/backend/src/__tests__/notification-channel-config-migration.test.ts b/backend/src/__tests__/notification-channel-config-migration.test.ts new file mode 100644 index 00000000..73c7004e --- /dev/null +++ b/backend/src/__tests__/notification-channel-config-migration.test.ts @@ -0,0 +1,108 @@ +/** + * Additive `config` columns on agents and notification_routes. + * Exercises production DatabaseService startup against a pre-config schema. + */ +import { describe, it, expect, afterEach } from 'vitest'; +import fs from 'fs'; +import os from 'os'; +import path from 'path'; +import Database from 'better-sqlite3'; +import { DatabaseService } from '../services/DatabaseService'; + +function resetDatabaseSingleton(): void { + const holder = DatabaseService as unknown as { instance?: DatabaseService }; + const existing = holder.instance; + if (existing) { + try { + existing.getDb().close(); + } catch { + // already closed + } + holder.instance = undefined; + } +} + +describe('notification channel config column migration', () => { + let scratchDir: string | null = null; + + afterEach(() => { + resetDatabaseSingleton(); + if (scratchDir) { + try { + fs.rmSync(scratchDir, { recursive: true, force: true }); + } catch { + // best-effort + } + scratchDir = null; + } + }); + + it('adds config columns via DatabaseService startup and preserves legacy row values', () => { + scratchDir = fs.mkdtempSync(path.join(os.tmpdir(), 'sencho-apprise-mig-')); + const dbPath = path.join(scratchDir, 'sencho.db'); + const seed = new Database(dbPath); + try { + seed.exec(` + CREATE TABLE agents ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + node_id INTEGER NOT NULL DEFAULT 0, + type TEXT NOT NULL, + url TEXT NOT NULL, + enabled INTEGER DEFAULT 0 + ); + INSERT INTO agents (node_id, type, url, enabled) + VALUES (1, 'discord', 'https://discord.example/webhook/legacy', 1); + + CREATE TABLE notification_routes ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + channel_type TEXT NOT NULL, + channel_url TEXT NOT NULL, + stack_patterns TEXT NOT NULL DEFAULT '[]', + priority INTEGER NOT NULL DEFAULT 0, + enabled INTEGER NOT NULL DEFAULT 1, + created_at INTEGER NOT NULL, + updated_at INTEGER NOT NULL + ); + INSERT INTO notification_routes + (name, channel_type, channel_url, stack_patterns, priority, enabled, created_at, updated_at) + VALUES ('Legacy', 'slack', 'https://hooks.slack.com/services/legacy', '[]', 0, 1, 1, 1); + `); + } finally { + seed.close(); + } + + process.env.DATA_DIR = scratchDir; + resetDatabaseSingleton(); + const db = DatabaseService.getInstance(); + + const agentCols = db.getDb().prepare('PRAGMA table_info(agents)').all() as Array<{ name: string }>; + const routeCols = db.getDb().prepare('PRAGMA table_info(notification_routes)').all() as Array<{ name: string }>; + expect(agentCols.filter(c => c.name === 'config')).toHaveLength(1); + expect(routeCols.filter(c => c.name === 'config')).toHaveLength(1); + + const agent = db.getDb().prepare('SELECT type, url, config FROM agents WHERE type = ?').get('discord') as { + type: string; url: string; config: string | null; + }; + expect(agent.url).toBe('https://discord.example/webhook/legacy'); + expect(agent.config).toBeNull(); + + const route = db.getDb().prepare('SELECT name, channel_url, config FROM notification_routes WHERE name = ?').get('Legacy') as { + name: string; channel_url: string; config: string | null; + }; + expect(route.channel_url).toBe('https://hooks.slack.com/services/legacy'); + expect(route.config).toBeNull(); + + // Idempotent reopen: columns stay singular and values stay intact. + resetDatabaseSingleton(); + process.env.DATA_DIR = scratchDir; + const db2 = DatabaseService.getInstance(); + const agentCols2 = db2.getDb().prepare('PRAGMA table_info(agents)').all() as Array<{ name: string }>; + expect(agentCols2.filter(c => c.name === 'config')).toHaveLength(1); + const agent2 = db2.getDb().prepare('SELECT url, config FROM agents WHERE type = ?').get('discord') as { + url: string; config: string | null; + }; + expect(agent2.url).toBe('https://discord.example/webhook/legacy'); + expect(agent2.config).toBeNull(); + }); +}); diff --git a/backend/src/__tests__/notification-channels.test.ts b/backend/src/__tests__/notification-channels.test.ts index 52854ba4..773d0487 100644 --- a/backend/src/__tests__/notification-channels.test.ts +++ b/backend/src/__tests__/notification-channels.test.ts @@ -1,9 +1,17 @@ /** - * Unit tests for notification channel helpers. Focused on maskWebhookUrl, - * which must never let a channel's embedded auth token reach a log line. + * Unit tests for notification channel helpers: masking, Apprise validation, + * fail-closed stored parsing, and public DTO redaction. */ import { describe, it, expect } from 'vitest'; -import { maskWebhookUrl } from '../helpers/notificationChannels'; +import { + classifyAppriseConfig, + maskWebhookUrl, + normalizeAppriseStoredJson, + parseStoredAppriseConfig, + serializePublicAgent, + serializePublicNotificationRoute, + validateNotificationChannel, +} from '../helpers/notificationChannels'; describe('maskWebhookUrl', () => { it('redacts the token-bearing path of a Discord webhook URL', () => { @@ -47,3 +55,172 @@ describe('maskWebhookUrl', () => { expect(maskWebhookUrl('not a url')).toBe(''); }); }); + +describe('Apprise channel helpers', () => { + it('accepts empty keyed configuration (missing, null, or {})', () => { + const endpoint = 'http://apprise.local/notify/key'; + expect(validateNotificationChannel('apprise', endpoint)).toBeNull(); + expect(validateNotificationChannel('apprise', endpoint, null)).toBeNull(); + expect(validateNotificationChannel('apprise', endpoint, {})).toBeNull(); + expect(classifyAppriseConfig(endpoint, null)).toEqual({ mode: 'keyed' }); + expect(normalizeAppriseStoredJson(endpoint, null)).toBe('{}'); + expect(normalizeAppriseStoredJson(endpoint, { tags: '' })).toBe('{}'); + expect(normalizeAppriseStoredJson(endpoint, { tags: 'ops' })).toBe(JSON.stringify({ tags: 'ops' })); + }); + + it('validates and classifies keyed and stateless configurations', () => { + expect(validateNotificationChannel('apprise', 'http://apprise.local/notify/key', { tags: 'ops' })).toBeNull(); + expect(classifyAppriseConfig('http://apprise.local/notify', { urls: 'discord://token slack://token' })).toEqual({ + mode: 'stateless', + urls: ['discord://token', 'slack://token'], + }); + expect(validateNotificationChannel('apprise', 'https://apprise.local/notify/key', { urls: 'discord://token' })) + .toMatch(/urls|unknown/); + }); + + it('rejects unknown config keys and scheme-less destination tokens', () => { + expect(validateNotificationChannel('apprise', 'http://apprise.local/notify/key', { tags: 'ops', extra: 1 })) + .toMatch(/unknown Apprise config field/); + expect(validateNotificationChannel('apprise', 'http://apprise.local/notify', { urls: 'discord://ok', mode: 'stateless' })) + .toMatch(/public summary|unknown/); + expect(validateNotificationChannel('apprise', 'http://apprise.local/notify', { urls: 'not-a-scheme-token' })) + .toMatch(/URI scheme/); + expect(validateNotificationChannel('apprise', 'http://apprise.local/notify', { urls: 'discord://ok', tags: 'x' })) + .toMatch(/tags/); + }); + + it('redacts Apprise endpoint keys and service URLs from public agents', () => { + const secret = 'discord://webhook-id/webhook-token?secret=query'; + const agent = serializePublicAgent({ + id: 1, + type: 'apprise', + url: 'https://apprise.local/notify/key-secret', + enabled: true, + config: JSON.stringify({ tags: 'ops' }), + }); + + expect(agent).toMatchObject({ + type: 'apprise', + url: 'https://apprise.local/notify/', + config: { mode: 'keyed', tags: 'ops', has_urls: false }, + secrets_redacted: true, + }); + expect(JSON.stringify(agent)).not.toContain(secret); + }); + + it('never leaks Apprise secrets from userinfo, host, path, or query in public DTOs', () => { + const secrets = [ + 'userinfo-secret', + 'host-token.example', + 'path-secret', + 'query-secret', + ]; + const urls = [ + 'discord://userinfo-secret@host/path-secret?token=query-secret', + 'feishu://host-token.example/path-secret', + 'jira://APIKey:userinfo-secret@host/path-secret?token=query-secret', + ].join(' '); + + const agent = serializePublicAgent({ + type: 'apprise', + url: 'http://apprise.local/notify', + enabled: true, + config: JSON.stringify({ urls }), + }); + const route = serializePublicNotificationRoute({ + id: 1, + name: 'r', + node_id: null, + stack_patterns: [], + label_ids: null, + categories: null, + channel_type: 'apprise', + channel_url: 'http://apprise.local/notify/path-secret', + config: JSON.stringify({ tags: 'ops' }), + priority: 0, + enabled: true, + created_at: 1, + updated_at: 1, + }); + + const blob = JSON.stringify({ agent, route }); + for (const secret of secrets) { + expect(blob).not.toContain(secret); + } + expect(agent.config).toMatchObject({ + mode: 'stateless', + has_urls: true, + providers: expect.arrayContaining(['discord', 'feishu', 'jira']), + url_count: 3, + }); + expect(route.channel_url).toBe('http://apprise.local/notify/'); + }); + + it('rejects public DTO config shapes on validate', () => { + expect(validateNotificationChannel('apprise', 'http://apprise.local/notify', { + mode: 'stateless', + has_urls: true, + providers: ['discord'], + url_count: 1, + })).toMatch(/raw Apprise config/); + }); + + it('fail-closes malformed stored JSON and never exposes raw tokens as providers', () => { + const keyed = parseStoredAppriseConfig('http://apprise.local/notify/key', '{not-json'); + expect(keyed).toEqual({ ok: false, reason: 'Apprise configuration is missing or invalid' }); + + const badToken = parseStoredAppriseConfig( + 'http://apprise.local/notify', + JSON.stringify({ urls: 'super-secret-token' }), + ); + expect(badToken.ok).toBe(false); + + const agent = serializePublicAgent({ + type: 'apprise', + url: 'http://apprise.local/notify', + enabled: true, + config: JSON.stringify({ urls: 'super-secret-token' }), + }); + expect(agent.config).toBeNull(); + expect(JSON.stringify(agent)).not.toContain('super-secret-token'); + }); + + it('rejects Apprise notify keys outside the official alphanumeric/underscore/dash charset', () => { + expect(validateNotificationChannel('apprise', 'http://apprise.local/notify/bad.key')).toMatch(/notify key/); + expect(validateNotificationChannel('apprise', 'http://apprise.local/notify/has%20space')).toMatch(/notify key|valid configuration/); + expect(validateNotificationChannel('apprise', 'http://apprise.local/notify/bad!key')).toMatch(/notify key/); + expect(validateNotificationChannel('apprise', `http://apprise.local/notify/${'a'.repeat(129)}`)).toMatch(/notify key/); + expect(validateNotificationChannel('apprise', 'http://apprise.local/notify/a')).toBeNull(); + expect(validateNotificationChannel('apprise', `http://apprise.local/notify/${'A1_-'}${'b'.repeat(124)}`)).toBeNull(); + }); + + it('sets secrets_redacted only for Apprise public DTOs', () => { + expect(serializePublicAgent({ + type: 'discord', + url: 'https://discord.com/api/webhooks/1/token', + enabled: true, + }).secrets_redacted).toBe(false); + expect(serializePublicAgent({ + type: 'slack', + url: 'https://hooks.slack.com/services/a/b/c', + enabled: true, + }).secrets_redacted).toBe(false); + expect(serializePublicAgent({ + type: 'webhook', + url: 'https://example.com/hook', + enabled: true, + }).secrets_redacted).toBe(false); + expect(serializePublicAgent({ + type: 'apprise', + url: 'http://apprise.local/notify/k', + enabled: true, + config: '{}', + }).secrets_redacted).toBe(true); + }); + + it('treats null/empty stored config as valid empty keyed', () => { + expect(parseStoredAppriseConfig('http://apprise.local/notify/key', null)).toEqual({ ok: true, mode: 'keyed' }); + expect(parseStoredAppriseConfig('http://apprise.local/notify/key', '{}')).toEqual({ ok: true, mode: 'keyed' }); + expect(parseStoredAppriseConfig('http://apprise.local/notify', null).ok).toBe(false); + }); +}); diff --git a/backend/src/__tests__/notification-routes-api.test.ts b/backend/src/__tests__/notification-routes-api.test.ts index c478c937..87c8be1b 100644 --- a/backend/src/__tests__/notification-routes-api.test.ts +++ b/backend/src/__tests__/notification-routes-api.test.ts @@ -170,7 +170,7 @@ describe('POST /api/agents - validation', () => { .set('Cookie', authCookie) .send({ type: 'telegram', url: 'https://example.com/hook', enabled: true }); expect(res.status).toBe(400); - expect(res.body.error).toContain('discord, slack, webhook'); + expect(res.body.error).toContain('discord, slack, webhook, apprise'); }); it('rejects non-HTTPS url', async () => { @@ -346,7 +346,7 @@ describe('POST /api/notification-routes - validation', () => { .set('Cookie', authCookie) .send({ name: 'test', stack_patterns: ['app'], channel_type: 'telegram', channel_url: 'https://example.com' }); expect(res.status).toBe(400); - expect(res.body.error).toContain('discord, slack, webhook'); + expect(res.body.error).toContain('discord, slack, webhook, apprise'); }); it('rejects non-HTTPS channel_url', async () => { @@ -464,6 +464,282 @@ describe('POST /api/notification-routes/:id/test', () => { }); }); +describe('Apprise notification routes - redaction and preserve-on-write', () => { + const keyedUrl = 'http://apprise.local/notify/route-key-secret'; + const serviceUrl = 'mailto://user:pass@smtp.example.com?to=ops@example.com'; + let routeId: number; + + beforeAll(async () => { + const res = await request(app) + .post('/api/notification-routes') + .set('Cookie', authCookie) + .send({ + name: 'Apprise route', + stack_patterns: ['app'], + channel_type: 'apprise', + channel_url: keyedUrl, + config: { tags: 'ops' }, + enabled: true, + }); + expect(res.status).toBe(201); + routeId = res.body.id; + }); + + it('POST 201 and GET redact the keyed endpoint path', async () => { + const created = await request(app) + .post('/api/notification-routes') + .set('Cookie', authCookie) + .send({ + name: 'Apprise create redact', + stack_patterns: [], + channel_type: 'apprise', + channel_url: keyedUrl, + config: { tags: 'night' }, + }); + expect(created.status).toBe(201); + expect(created.body.channel_url).toBe('http://apprise.local/notify/'); + expect(created.body.config).toMatchObject({ mode: 'keyed', tags: 'night', has_urls: false }); + expect(JSON.stringify(created.body)).not.toContain('route-key-secret'); + + const listed = await request(app).get('/api/notification-routes').set('Cookie', authCookie); + const row = listed.body.find((r: { id: number }) => r.id === created.body.id); + expect(row.channel_url).toBe('http://apprise.local/notify/'); + expect(JSON.stringify(row)).not.toContain('route-key-secret'); + + await request(app).delete(`/api/notification-routes/${created.body.id}`).set('Cookie', authCookie); + }); + + it('POST 201 for stateless mode returns providers and url_count only', async () => { + const res = await request(app) + .post('/api/notification-routes') + .set('Cookie', authCookie) + .send({ + name: 'Apprise stateless', + stack_patterns: [], + channel_type: 'apprise', + channel_url: 'http://apprise.local/notify', + config: { urls: serviceUrl }, + }); + expect(res.status).toBe(201); + expect(res.body.channel_url).toBe('http://apprise.local/notify'); + expect(res.body.config).toMatchObject({ + mode: 'stateless', + has_urls: true, + providers: ['mailto'], + url_count: 1, + }); + expect(JSON.stringify(res.body)).not.toContain('pass@'); + expect(JSON.stringify(res.body)).not.toContain('ops@example.com'); + + const stored = DatabaseService.getInstance().getNotificationRoute(res.body.id); + expect(stored?.channel_url).toBe('http://apprise.local/notify'); + expect(stored?.config).toContain(serviceUrl); + + await request(app).delete(`/api/notification-routes/${res.body.id}`).set('Cookie', authCookie); + }); + + it('PUT preserves secrets when channel_url and config are omitted', async () => { + const res = await request(app) + .put(`/api/notification-routes/${routeId}`) + .set('Cookie', authCookie) + .send({ name: 'Apprise route renamed', enabled: false }); + expect(res.status).toBe(200); + expect(res.body.name).toBe('Apprise route renamed'); + expect(res.body.channel_url).toBe('http://apprise.local/notify/'); + expect(JSON.stringify(res.body)).not.toContain('route-key-secret'); + + const stored = DatabaseService.getInstance().getNotificationRoute(routeId); + expect(stored?.channel_url).toBe(keyedUrl); + expect(stored?.config).toBe(JSON.stringify({ tags: 'ops' })); + }); + + it('PUT rejects channel_type change without a new channel_url and leaves the row unchanged', async () => { + const before = DatabaseService.getInstance().getDb() + .prepare('SELECT channel_type, channel_url, config FROM notification_routes WHERE id = ?') + .get(routeId) as { channel_type: string; channel_url: string; config: string | null }; + expect(before.channel_type).toBe('apprise'); + expect(before.channel_url.startsWith('enc:')).toBe(true); + + const res = await request(app) + .put(`/api/notification-routes/${routeId}`) + .set('Cookie', authCookie) + .send({ channel_type: 'discord' }); + expect(res.status).toBe(400); + expect(res.body.error).toMatch(/channel_url is required when changing channel_type/i); + + const after = DatabaseService.getInstance().getDb() + .prepare('SELECT channel_type, channel_url, config FROM notification_routes WHERE id = ?') + .get(routeId) as { channel_type: string; channel_url: string; config: string | null }; + expect(after).toEqual(before); + }); + + it('PUT Apprise-to-Discord with a raw URL stores plaintext Discord credentials', async () => { + const created = await request(app) + .post('/api/notification-routes') + .set('Cookie', authCookie) + .send({ + name: 'Apprise leave', + stack_patterns: [], + channel_type: 'apprise', + channel_url: 'http://apprise.local/notify/leave-key', + config: { tags: 'ops' }, + }); + expect(created.status).toBe(201); + const id = created.body.id as number; + + const discordUrl = 'https://discord.com/api/webhooks/1/token-secret'; + const res = await request(app) + .put(`/api/notification-routes/${id}`) + .set('Cookie', authCookie) + .send({ channel_type: 'discord', channel_url: discordUrl }); + expect(res.status).toBe(200); + expect(res.body.channel_type).toBe('discord'); + + const raw = DatabaseService.getInstance().getDb() + .prepare('SELECT channel_type, channel_url, config FROM notification_routes WHERE id = ?') + .get(id) as { channel_type: string; channel_url: string; config: string | null }; + expect(raw.channel_type).toBe('discord'); + expect(raw.channel_url).toBe(discordUrl); + expect(raw.channel_url.startsWith('enc:')).toBe(false); + expect(raw.config).toBeNull(); + + await request(app).delete(`/api/notification-routes/${id}`).set('Cookie', authCookie); + }); + + it('PUT webhook-to-Apprise seals both channel_url and config as enc: ciphertext', async () => { + const notifyUrl = 'https://apprise.example/notify/promote-key'; + const created = await request(app) + .post('/api/notification-routes') + .set('Cookie', authCookie) + .send({ + name: 'Webhook promote', + stack_patterns: [], + channel_type: 'webhook', + channel_url: notifyUrl, + }); + expect(created.status).toBe(201); + const id = created.body.id as number; + + const before = DatabaseService.getInstance().getDb() + .prepare('SELECT channel_url FROM notification_routes WHERE id = ?') + .get(id) as { channel_url: string }; + expect(before.channel_url).toBe(notifyUrl); + + const res = await request(app) + .put(`/api/notification-routes/${id}`) + .set('Cookie', authCookie) + .send({ + channel_type: 'apprise', + channel_url: notifyUrl, + config: { tags: 'fleet' }, + }); + expect(res.status).toBe(200); + expect(res.body.channel_type).toBe('apprise'); + expect(res.body.channel_url).toBe('https://apprise.example/notify/'); + + const raw = DatabaseService.getInstance().getDb() + .prepare('SELECT channel_type, channel_url, config FROM notification_routes WHERE id = ?') + .get(id) as { channel_type: string; channel_url: string; config: string | null }; + expect(raw.channel_type).toBe('apprise'); + expect(raw.channel_url.startsWith('enc:')).toBe(true); + expect(raw.channel_url).not.toContain('promote-key'); + expect(raw.config?.startsWith('enc:')).toBe(true); + expect(raw.config).not.toContain('fleet'); + + const stored = DatabaseService.getInstance().getNotificationRoute(id); + expect(stored?.channel_url).toBe(notifyUrl); + expect(stored?.config).toBe(JSON.stringify({ tags: 'fleet' })); + + await request(app).delete(`/api/notification-routes/${id}`).set('Cookie', authCookie); + }); + + it('PUT rejects a redacted channel_url', async () => { + const res = await request(app) + .put(`/api/notification-routes/${routeId}`) + .set('Cookie', authCookie) + .send({ channel_url: 'http://apprise.local/notify/' }); + expect(res.status).toBe(400); + }); + + it('PUT rejects public DTO config shapes', async () => { + const res = await request(app) + .put(`/api/notification-routes/${routeId}`) + .set('Cookie', authCookie) + .send({ + channel_url: keyedUrl, + config: { mode: 'keyed', has_urls: false, providers: [] }, + }); + expect(res.status).toBe(400); + }); + + it('stored-route test uses raw config and returns sanitized 204 errors', async () => { + const fetchMock = vi.fn().mockResolvedValue({ ok: true, status: 200 }); + vi.stubGlobal('fetch', fetchMock); + try { + const ok = await request(app) + .post(`/api/notification-routes/${routeId}/test`) + .set('Cookie', authCookie); + expect(ok.status).toBe(200); + expect(fetchMock).toHaveBeenCalledWith( + keyedUrl, + expect.objectContaining({ + body: JSON.stringify({ + title: 'Sencho Alert [INFO]', + body: '🔌 Test Notification from Sencho!', + type: 'info', + tag: 'ops', + }), + }), + ); + } finally { + vi.unstubAllGlobals(); + } + + vi.stubGlobal('fetch', vi.fn().mockResolvedValue({ ok: true, status: 204 })); + try { + const fail = await request(app) + .post(`/api/notification-routes/${routeId}/test`) + .set('Cookie', authCookie); + expect(fail.status).toBe(500); + expect(JSON.stringify(fail.body)).toContain('HTTP 204'); + expect(JSON.stringify(fail.body)).not.toContain('route-key-secret'); + } finally { + vi.unstubAllGlobals(); + } + }); + + it('stored-route test fails closed on malformed config without fetch', async () => { + const broken = await request(app) + .post('/api/notification-routes') + .set('Cookie', authCookie) + .send({ + name: 'Broken Apprise', + stack_patterns: [], + channel_type: 'apprise', + channel_url: 'http://apprise.local/notify/broken-key', + config: { tags: 'x' }, + }); + expect(broken.status).toBe(201); + const id = broken.body.id as number; + DatabaseService.getInstance().updateNotificationRoute(id, { config: '{not-json' }); + + const fetchMock = vi.fn(); + vi.stubGlobal('fetch', fetchMock); + try { + const res = await request(app) + .post(`/api/notification-routes/${id}/test`) + .set('Cookie', authCookie); + expect(res.status).toBe(400); + expect(res.body.error).toMatch(/invalid/i); + expect(fetchMock).not.toHaveBeenCalled(); + expect(JSON.stringify(res.body)).not.toContain('broken-key'); + } finally { + vi.unstubAllGlobals(); + await request(app).delete(`/api/notification-routes/${id}`).set('Cookie', authCookie); + } + }); +}); + // --- DELETE /api/notifications/:id NaN guard --- describe('DELETE /api/notifications/:id - validation', () => { diff --git a/backend/src/helpers/configurationStatus.ts b/backend/src/helpers/configurationStatus.ts new file mode 100644 index 00000000..afb11abb --- /dev/null +++ b/backend/src/helpers/configurationStatus.ts @@ -0,0 +1,47 @@ +/** Agent slot on dashboard/fleet configuration responses. */ +export interface AgentStatus { + configured: boolean; + enabled: boolean; +} + +export type ConfigurationAgents = { + discord: AgentStatus; + slack: AgentStatus; + webhook: AgentStatus; + apprise: AgentStatus; +}; + +/** + * Older remotes omit `apprise`. Default the slot so mixed-version hubs do not + * treat the response as malformed or crash UI consumers. + */ +export function normalizeConfigurationAgents(agents: { + discord: AgentStatus; + slack: AgentStatus; + webhook: AgentStatus; + apprise?: AgentStatus; +}): ConfigurationAgents { + return { + discord: agents.discord, + slack: agents.slack, + webhook: agents.webhook, + apprise: agents.apprise ?? { configured: false, enabled: false }, + }; +} + +/** + * Normalize a remote `/dashboard/configuration` body when it carries an agents + * block. Stub or partial JSON without `notifications.agents` is returned as-is + * so a successful fetch still marks the node online. + */ +export function normalizeRemoteConfigurationStatus(raw: T): T { + const notifications = (raw as { notifications?: { agents?: Parameters[0] } }).notifications; + if (!notifications?.agents) return raw; + return { + ...raw, + notifications: { + ...notifications, + agents: normalizeConfigurationAgents(notifications.agents), + }, + }; +} diff --git a/backend/src/helpers/notificationChannels.ts b/backend/src/helpers/notificationChannels.ts index a0be58a3..80afa2ac 100644 --- a/backend/src/helpers/notificationChannels.ts +++ b/backend/src/helpers/notificationChannels.ts @@ -1,6 +1,54 @@ -export const NOTIFICATION_CHANNEL_TYPES = ['discord', 'slack', 'webhook'] as const; +import type { Agent, NotificationRoute } from '../services/DatabaseService'; + +export const NOTIFICATION_CHANNEL_TYPES = ['discord', 'slack', 'webhook', 'apprise'] as const; export type NotificationChannelType = typeof NOTIFICATION_CHANNEL_TYPES[number]; +/** Write payload for Apprise agents/routes (never public DTO fields). */ +export type AppriseWriteConfig = { tags?: string } | { urls: string }; + +/** Persisted JSON shape after normalize (keyed empty is `{}`). */ +export type AppriseStoredConfig = { tags?: string } | { urls: string }; + +export type PublicAppriseConfig = { + mode: 'keyed' | 'stateless'; + tags?: string; + has_urls: boolean; + providers?: string[]; + url_count?: number; +}; + +export type PublicAgent = Omit & { + type: NotificationChannelType; + config: PublicAppriseConfig | null; + /** True only when Apprise masking was applied; Discord/Slack/webhook still return raw URLs. */ + secrets_redacted: boolean; +}; + +export type PublicNotificationRoute = Omit & { + channel_type: NotificationChannelType; + config: PublicAppriseConfig | null; + secrets_redacted: boolean; +}; + +/** Apprise notify key: 1–128 alphanumeric, underscore, or dash (official API notes). */ +export const APPRISE_NOTIFY_KEY = /^[A-Za-z0-9_-]{1,128}$/; + +export type ParsedAppriseConfig = + | { ok: true; mode: 'keyed'; tags?: string } + | { ok: true; mode: 'stateless'; urls: string[]; urlsJoined: string } + | { ok: false; reason: string }; + +const APPRISE_SCHEME = /^[a-z][a-z0-9+.-]*:/i; +const KEYED_KEYS = new Set(['tags']); +const STATELESS_KEYS = new Set(['urls']); +const INVALID_STORED = 'Apprise configuration is missing or invalid'; + +/** Path segment after `/notify/` when the path is `/notify/{key}` (key not yet validated). */ +function notifyKeyFromPath(path: string): string | null { + const match = path.match(/^\/notify\/([^/]+)$/); + return match ? match[1] : null; +} + export const cleanStackPatterns = (patterns: string[]): string[] => [...new Set(patterns.map(p => p.trim()).filter(Boolean))]; @@ -10,6 +58,260 @@ export function validateHttpsUrl(value: unknown): string | null { return null; } +export function classifyAppriseEndpoint(endpoint: string): 'keyed' | 'stateless' | null { + try { + const path = new URL(endpoint).pathname.replace(/\/$/, ''); + const key = notifyKeyFromPath(path); + if (key !== null) return APPRISE_NOTIFY_KEY.test(key) ? 'keyed' : null; + if (path === '/notify') return 'stateless'; + return null; + } catch { + return null; + } +} + +/** Thin classifier for tests; write validation uses validateNotificationChannel. */ +export function classifyAppriseConfig(endpoint: string, config: unknown): { mode: 'keyed' | 'stateless'; urls?: string[] } | null { + const mode = classifyAppriseEndpoint(endpoint); + if (!mode) return null; + if (mode === 'keyed') { + if (config !== undefined && config !== null && (typeof config !== 'object' || Array.isArray(config))) return null; + return { mode: 'keyed' }; + } + if (!config || typeof config !== 'object' || Array.isArray(config)) return null; + const urls = typeof (config as { urls?: unknown }).urls === 'string' + ? splitServiceUrls((config as { urls: string }).urls) + : []; + return urls.length > 0 ? { mode: 'stateless', urls } : null; +} + +export function isPublicAppriseConfigShape(config: unknown): boolean { + if (!config || typeof config !== 'object' || Array.isArray(config)) return false; + const record = config as Record; + return 'has_urls' in record || 'providers' in record || 'url_count' in record || 'mode' in record || 'secrets_redacted' in record; +} + +function unknownKeyError(record: Record, allowed: Set): string | null { + for (const key of Object.keys(record)) { + if (!allowed.has(key)) return `unknown Apprise config field: ${key}`; + } + return null; +} + +function splitServiceUrls(urls: string): string[] { + return urls.split(/[\s,]+/).map(url => url.trim()).filter(Boolean); +} + +function validateServiceUrlToken(token: string): string | null { + if (token.length > 2000) return 'Apprise service URLs must be 2000 characters or fewer'; + if (!APPRISE_SCHEME.test(token)) return 'each Apprise service URL must include a URI scheme'; + return null; +} + +function asRecord(config: unknown): Record | null { + if (config === undefined || config === null) return {}; + if (typeof config !== 'object' || Array.isArray(config)) return null; + return config as Record; +} + +export function validateNotificationChannel(type: unknown, url: unknown, config?: unknown): string | null { + if (typeof type !== 'string' || !(NOTIFICATION_CHANNEL_TYPES as readonly string[]).includes(type)) { + return `type must be ${NOTIFICATION_CHANNEL_TYPES.join(', ')}`; + } + if (type !== 'apprise') return validateHttpsUrl(url); + if (typeof url !== 'string') return 'must be a valid Apprise URL'; + let parsed: URL; + try { parsed = new URL(url); } catch { return 'is not a valid URL'; } + if (!['http:', 'https:'].includes(parsed.protocol) || !parsed.host || parsed.username || parsed.password || parsed.hash) { + return 'must be an HTTP or HTTPS Apprise URL without credentials or a fragment'; + } + if (isPublicAppriseConfigShape(config)) { + return 'must use raw Apprise config ({ urls } or { tags }), not a public summary'; + } + const path = parsed.pathname.replace(/\/$/, ''); + const notifyKey = notifyKeyFromPath(path); + if (notifyKey !== null && !APPRISE_NOTIFY_KEY.test(notifyKey)) { + return 'Apprise notify key must be 1–128 characters of letters, digits, underscore, or dash'; + } + const mode = classifyAppriseEndpoint(url); + if (!mode) return 'must use /notify or /notify/{key} with valid configuration'; + const record = asRecord(config); + if (!record) return 'must use /notify or /notify/{key} with valid configuration'; + + if (mode === 'keyed') { + const keyErr = unknownKeyError(record, KEYED_KEYS); + if (keyErr) return keyErr; + if (record.urls !== undefined) return 'keyed Apprise endpoints cannot include urls'; + if (record.tags !== undefined && typeof record.tags !== 'string') return 'Apprise tags must be a string'; + return null; + } + + const keyErr = unknownKeyError(record, STATELESS_KEYS); + if (keyErr) return keyErr; + if (record.tags !== undefined) return 'stateless Apprise endpoints cannot include tags'; + if (typeof record.urls !== 'string' || !record.urls.trim()) { + return 'stateless Apprise endpoints require a nonempty urls string'; + } + const urls = splitServiceUrls(record.urls); + if (urls.length === 0) return 'stateless Apprise endpoints require a nonempty urls string'; + for (const token of urls) { + const tokenErr = validateServiceUrlToken(token); + if (tokenErr) return tokenErr; + } + return null; +} + +/** Persist shape: keyed empty → `{}`; omit empty tags; stateless → `{ urls }`. */ +export function normalizeAppriseStoredJson(endpoint: string, config: unknown): string { + const mode = classifyAppriseEndpoint(endpoint); + if (mode === 'keyed') { + const record = asRecord(config) ?? {}; + const tags = typeof record.tags === 'string' ? record.tags.trim() : ''; + return tags ? JSON.stringify({ tags }) : '{}'; + } + const record = asRecord(config) ?? {}; + const urls = typeof record.urls === 'string' ? record.urls.trim() : ''; + return JSON.stringify({ urls }); +} + +export function parseStoredAppriseConfig(endpoint: string, configJson: string | null | undefined): ParsedAppriseConfig { + const mode = classifyAppriseEndpoint(endpoint); + if (!mode) return { ok: false, reason: INVALID_STORED }; + + if (configJson == null || configJson === '') { + if (mode === 'keyed') return { ok: true, mode: 'keyed' }; + return { ok: false, reason: INVALID_STORED }; + } + + let parsed: unknown; + try { + parsed = JSON.parse(configJson); + } catch { + return { ok: false, reason: INVALID_STORED }; + } + + const err = validateNotificationChannel('apprise', endpoint, parsed); + if (err) return { ok: false, reason: INVALID_STORED }; + + // validateNotificationChannel already confirmed parsed is a plain object + // whose only fields match the mode (tags for keyed, urls for stateless), + // so no further shape narrowing is needed here. + if (mode === 'keyed') { + const tags = typeof (parsed as { tags?: string }).tags === 'string' ? (parsed as { tags: string }).tags.trim() : ''; + return tags ? { ok: true, mode: 'keyed', tags } : { ok: true, mode: 'keyed' }; + } + + const urlsJoined = (parsed as { urls: string }).urls.trim(); + const urls = splitServiceUrls(urlsJoined); + return { ok: true, mode: 'stateless', urls, urlsJoined }; +} + +export function storedAppriseToWriteConfig(parsed: Extract): AppriseWriteConfig { + if (parsed.mode === 'keyed') { + return parsed.tags ? { tags: parsed.tags } : {}; + } + return { urls: parsed.urlsJoined }; +} + +/** Reconstruct the write config to preserve on an agent/route write that omits `config`. */ +export function resolvePreservedAppriseConfig( + endpoint: string, + existingConfigJson: string | null | undefined, +): { ok: true; config: AppriseWriteConfig } | { ok: false; error: string } { + const stored = parseStoredAppriseConfig(endpoint, existingConfigJson); + if (!stored.ok) { + return { + ok: false, + error: 'Stored Apprise configuration is invalid for this endpoint; provide a complete replacement', + }; + } + return { ok: true, config: storedAppriseToWriteConfig(stored) }; +} + +/** + * Shared preserve-on-write guard for agent/route Apprise writes: blocks a + * write that echoes a redacted public URL, config, or DTO shape back as raw + * input. Identical across `agents.ts` POST and `notification-routes` PUT. + */ +export function redactedChannelWriteError( + type: string, + effectiveUrl: unknown, + effectiveConfig: unknown, + rawConfig: unknown, +): string | null { + const configText = effectiveConfig === undefined ? '' : JSON.stringify(effectiveConfig) ?? ''; + if ( + (typeof effectiveUrl === 'string' && effectiveUrl.includes('')) + || configText.includes('') + || (type === 'apprise' && rawConfig !== undefined && isPublicAppriseConfigShape(rawConfig)) + ) { + return 'Provide raw channel credentials to replace redacted values'; + } + return null; +} + +function providerSchemes(urls: string[]): string[] { + const schemes: string[] = []; + for (const value of urls) { + if (!APPRISE_SCHEME.test(value)) continue; + const scheme = value.split(':', 1)[0].toLowerCase(); + if (scheme && !schemes.includes(scheme)) schemes.push(scheme); + } + return schemes; +} + +function publicAppriseConfig(url: string, config: string | null): PublicAppriseConfig | null { + const parsed = parseStoredAppriseConfig(url, config); + if (!parsed.ok) { + console.warn(`[apprise] stored config unreadable for public DTO (${parsed.reason})`); + return null; + } + if (parsed.mode === 'keyed') { + return { mode: 'keyed', tags: parsed.tags, has_urls: false }; + } + const providers = providerSchemes(parsed.urls); + return { + mode: 'stateless', + has_urls: parsed.urls.length > 0, + ...(providers.length > 0 ? { providers } : {}), + url_count: parsed.urls.length, + }; +} + +export function maskAppriseEndpoint(value: string): string { + try { + const parsed = new URL(value); + const path = parsed.pathname.replace(/\/$/, ''); + const key = notifyKeyFromPath(path); + if (key !== null && APPRISE_NOTIFY_KEY.test(key)) return `${parsed.origin}/notify/`; + return `${parsed.origin}/notify`; + } catch { + return ''; + } +} + +export function serializePublicAgent(agent: Agent): PublicAgent { + const isApprise = agent.type === 'apprise'; + return { + ...agent, + type: agent.type, + url: isApprise ? maskAppriseEndpoint(agent.url) : agent.url, + config: isApprise ? publicAppriseConfig(agent.url, agent.config ?? null) : null, + secrets_redacted: isApprise, + }; +} + +export function serializePublicNotificationRoute(route: NotificationRoute): PublicNotificationRoute { + const isApprise = route.channel_type === 'apprise'; + return { + ...route, + channel_type: route.channel_type, + channel_url: isApprise ? maskAppriseEndpoint(route.channel_url) : route.channel_url, + config: isApprise ? publicAppriseConfig(route.channel_url, route.config ?? null) : null, + secrets_redacted: isApprise, + }; +} + /** * Mask a channel webhook URL for logging. Discord/Slack/custom webhook URLs * embed their auth token in the path (and sometimes the query), so only the @@ -20,8 +322,6 @@ export function maskWebhookUrl(value: unknown): string { if (typeof value !== 'string' || value.length === 0) return ''; try { const { origin, pathname, search } = new URL(value); - // pathname is normalized to '/' for an origin-only URL, so anything else - // (or any query string) is a token-bearing segment we must not log. const hasSecret = pathname !== '/' || search !== ''; return hasSecret ? `${origin}/` : origin; } catch { diff --git a/backend/src/routes/agents.ts b/backend/src/routes/agents.ts index 873024e1..527ca960 100644 --- a/backend/src/routes/agents.ts +++ b/backend/src/routes/agents.ts @@ -4,7 +4,14 @@ import { authMiddleware } from '../middleware/auth'; import { requireAdmin } from '../middleware/tierGates'; import { isDebugEnabled } from '../utils/debug'; import { sanitizeForLog } from '../utils/safeLog'; -import { NOTIFICATION_CHANNEL_TYPES, validateHttpsUrl } from '../helpers/notificationChannels'; +import { + NOTIFICATION_CHANNEL_TYPES, + normalizeAppriseStoredJson, + redactedChannelWriteError, + resolvePreservedAppriseConfig, + serializePublicAgent, + validateNotificationChannel, +} from '../helpers/notificationChannels'; export const agentsRouter = Router(); @@ -12,7 +19,7 @@ agentsRouter.get('/', authMiddleware, async (req: Request, res: Response): Promi try { const nodeId = req.nodeId ?? 0; const agents = DatabaseService.getInstance().getAgents(nodeId); - res.json(agents); + res.json(agents.map(serializePublicAgent)); } catch (error) { console.error('Failed to fetch agents:', error); res.status(500).json({ error: 'Failed to fetch agents' }); @@ -22,19 +29,36 @@ agentsRouter.get('/', authMiddleware, async (req: Request, res: Response): Promi agentsRouter.post('/', authMiddleware, async (req: Request, res: Response): Promise => { if (!requireAdmin(req, res)) return; try { - const { type, url, enabled } = req.body; + const { type, url, enabled, config } = req.body; if (!type || !(NOTIFICATION_CHANNEL_TYPES as readonly string[]).includes(type)) { res.status(400).json({ error: `type must be ${NOTIFICATION_CHANNEL_TYPES.join(', ')}` }); return; } - const urlErr = validateHttpsUrl(url); - if (urlErr) { res.status(400).json({ error: `url ${urlErr}` }); return; } if (typeof enabled !== 'boolean') { res.status(400).json({ error: 'enabled must be a boolean' }); return; } const nodeId = req.nodeId ?? 0; - DatabaseService.getInstance().upsertAgent(nodeId, { type, url, enabled }); + const existing = DatabaseService.getInstance().getAgents(nodeId).find(agent => agent.type === type); + const effectiveUrl = url === undefined ? existing?.url : url; + + let effectiveConfig: unknown = config ?? null; + if (type === 'apprise' && config === undefined && existing) { + const resolved = resolvePreservedAppriseConfig(typeof effectiveUrl === 'string' ? effectiveUrl : existing.url, existing.config); + if (!resolved.ok) { res.status(400).json({ error: resolved.error }); return; } + effectiveConfig = resolved.config; + } + + const redactedErr = redactedChannelWriteError(type, effectiveUrl, effectiveConfig, config); + if (redactedErr) { res.status(400).json({ error: redactedErr }); return; } + const channelErr = validateNotificationChannel(type, effectiveUrl, effectiveConfig); + if (channelErr) { res.status(400).json({ error: `url ${channelErr}` }); return; } + DatabaseService.getInstance().upsertAgent(nodeId, { + type, + url: effectiveUrl.trim(), + enabled, + config: type === 'apprise' ? normalizeAppriseStoredJson(effectiveUrl.trim(), effectiveConfig) : null, + }); console.log('[Agents] Agent %s updated', sanitizeForLog(type)); if (isDebugEnabled()) console.log('[Agents:diag] Agent %s upsert: enabled=%s', sanitizeForLog(type), sanitizeForLog(enabled)); res.json({ success: true }); diff --git a/backend/src/routes/dashboard.ts b/backend/src/routes/dashboard.ts index 12c192af..b99797df 100644 --- a/backend/src/routes/dashboard.ts +++ b/backend/src/routes/dashboard.ts @@ -16,7 +16,7 @@ interface AgentStatus { export interface ConfigurationStatus { tier: LicenseTier; notifications: { - agents: { discord: AgentStatus; slack: AgentStatus; webhook: AgentStatus }; + agents: { discord: AgentStatus; slack: AgentStatus; webhook: AgentStatus; apprise: AgentStatus }; alertRules: number; routingRules: { count: number; enabledCount: number; locked: boolean }; suppressionRules: { total: number; enabledCount: number }; @@ -57,7 +57,7 @@ export function buildLocalConfigurationStatus( const db = DatabaseService.getInstance(); const agents = db.getAgents(nodeId); - const agentByType = (type: 'discord' | 'slack' | 'webhook'): AgentStatus => { + const agentByType = (type: 'discord' | 'slack' | 'webhook' | 'apprise'): AgentStatus => { const a = agents.find(ag => ag.type === type); return { configured: !!a?.url, enabled: a?.enabled ?? false }; }; @@ -96,6 +96,7 @@ export function buildLocalConfigurationStatus( discord: agentByType('discord'), slack: agentByType('slack'), webhook: agentByType('webhook'), + apprise: agentByType('apprise'), }, alertRules, // Notification routing is available on every tier. diff --git a/backend/src/routes/fleet.ts b/backend/src/routes/fleet.ts index abc739ff..794c3cd4 100644 --- a/backend/src/routes/fleet.ts +++ b/backend/src/routes/fleet.ts @@ -50,6 +50,7 @@ import { collectFleetLabelSummaries } from '../helpers/fleetLabelSummary'; import { runLocalLabelAssign, validateLabelTemplate, validateRemoteAssignResults, failAllAssign, type AssignNodeResult } from '../helpers/fleetLabelAssign'; import { MAX_ASSIGNMENTS } from '../helpers/constants'; import { buildLocalConfigurationStatus, type ConfigurationStatus } from './dashboard'; +import { normalizeRemoteConfigurationStatus } from '../helpers/configurationStatus'; import { buildLocalGraph, mergeFleetGraph, isLocalDependencyGraph, type FleetNodeGraphResult } from '../services/DependencyGraphService'; import { buildNodeLabelInventory, VALID_LABEL_SOURCES, type NodeLabelInventory } from '../services/LabelInventoryService'; import { labelInventoryOptionsFromRequest, requireRevealAdmin } from '../helpers/labelInventoryRequest'; @@ -687,7 +688,8 @@ fleetRouter.get('/configuration', authMiddleware, async (req: Request, res: Resp signal: AbortSignal.timeout(10000), }, ); - const configuration = resp.ok ? (await resp.json() as ConfigurationStatus) : null; + const raw = resp.ok ? (await resp.json() as ConfigurationStatus) : null; + const configuration = raw ? normalizeRemoteConfigurationStatus(raw) : null; return { id: node.id, name: node.name, diff --git a/backend/src/routes/notifications.ts b/backend/src/routes/notifications.ts index 398b59e1..e83fda05 100644 --- a/backend/src/routes/notifications.ts +++ b/backend/src/routes/notifications.ts @@ -7,9 +7,15 @@ import { authMiddleware } from '../middleware/auth'; import { requireAdmin, requireNodeProxy } from '../middleware/tierGates'; import { NOTIFICATION_CHANNEL_TYPES, - validateHttpsUrl, + serializePublicNotificationRoute, + validateNotificationChannel, cleanStackPatterns, maskWebhookUrl, + normalizeAppriseStoredJson, + parseStoredAppriseConfig, + redactedChannelWriteError, + resolvePreservedAppriseConfig, + storedAppriseToWriteConfig, } from '../helpers/notificationChannels'; import { deleteSuppressionRuleFromFleet, @@ -246,14 +252,14 @@ notificationsRouter.delete('/', authMiddleware, async (req: Request, res: Respon notificationsRouter.post('/test', authMiddleware, async (req: Request, res: Response): Promise => { if (!requireAdmin(req, res)) return; try { - const { type, url } = req.body; + const { type, url, config } = req.body; if (!type || !(NOTIFICATION_CHANNEL_TYPES as readonly string[]).includes(type)) { res.status(400).json({ error: `type must be ${NOTIFICATION_CHANNEL_TYPES.join(', ')}` }); return; } - const urlErr = validateHttpsUrl(url); - if (urlErr) { res.status(400).json({ error: `url ${urlErr}` }); return; } - await NotificationService.getInstance().testDispatch(type, url); + const channelErr = validateNotificationChannel(type, url, config); + if (channelErr) { res.status(400).json({ error: `url ${channelErr}` }); return; } + await NotificationService.getInstance().testDispatch(type, url, config); res.json({ success: true }); } catch (error) { res.status(500).json({ error: 'Test failed', details: getErrorMessage(error, String(error)) }); @@ -266,7 +272,7 @@ notificationRoutesRouter.get('/', authMiddleware, (req: Request, res: Response): if (!requireAdmin(req, res)) return; try { const routes = DatabaseService.getInstance().getNotificationRoutes(); - res.json(routes); + res.json(routes.map(serializePublicNotificationRoute)); } catch (error) { console.error('Failed to fetch notification routes:', error); res.status(500).json({ error: 'Failed to fetch notification routes' }); @@ -276,7 +282,7 @@ notificationRoutesRouter.get('/', authMiddleware, (req: Request, res: Response): notificationRoutesRouter.post('/', authMiddleware, async (req: Request, res: Response): Promise => { if (!requireAdmin(req, res)) return; try { - const { name, node_id: rawNodeId, stack_patterns, label_ids, categories, channel_type, channel_url, priority, enabled } = req.body; + const { name, node_id: rawNodeId, stack_patterns, label_ids, categories, channel_type, channel_url, config, priority, enabled } = req.body; if (!name || typeof name !== 'string' || !name.trim()) { res.status(400).json({ error: 'Name is required' }); @@ -299,7 +305,7 @@ notificationRoutesRouter.post('/', authMiddleware, async (req: Request, res: Res res.status(400).json({ error: `channel_type must be ${NOTIFICATION_CHANNEL_TYPES.join(', ')}` }); return; } - const channelUrlErr = validateHttpsUrl(channel_url); + const channelUrlErr = validateNotificationChannel(channel_type, channel_url, config); if (channelUrlErr) { res.status(400).json({ error: `channel_url ${channelUrlErr}` }); return; } if (priority !== undefined && (typeof priority !== 'number' || !Number.isFinite(priority))) { res.status(400).json({ error: 'priority must be a finite number' }); @@ -315,6 +321,7 @@ notificationRoutesRouter.post('/', authMiddleware, async (req: Request, res: Res categories: Array.isArray(categories) && categories.length > 0 ? (categories as NotificationCategory[]) : null, channel_type, channel_url: channel_url.trim(), + config: channel_type === 'apprise' ? normalizeAppriseStoredJson(channel_url.trim(), config) : null, priority: typeof priority === 'number' ? priority : 0, enabled: enabled !== false, created_at: now, @@ -322,7 +329,7 @@ notificationRoutesRouter.post('/', authMiddleware, async (req: Request, res: Res }); console.log(`[Routes] Route "${sanitizeForLog(route.name)}" created (id=${route.id})`); if (isDebugEnabled()) console.log(`[Routes:diag] Route "${sanitizeForLog(route.name)}" created with patterns=[${sanitizeForLog(cleanedPatterns.join(', '))}], channel=${channel_type}`); - res.status(201).json(route); + res.status(201).json(serializePublicNotificationRoute(route)); } catch (error) { console.error('Failed to create notification route:', error); res.status(500).json({ error: 'Failed to create notification route' }); @@ -338,7 +345,7 @@ notificationRoutesRouter.put('/:id', authMiddleware, async (req: Request, res: R const existing = DatabaseService.getInstance().getNotificationRoute(id); if (!existing) { res.status(404).json({ error: 'Route not found' }); return; } - const { name, node_id: rawNodeId, stack_patterns, label_ids, categories, channel_type, channel_url, priority, enabled } = req.body; + const { name, node_id: rawNodeId, stack_patterns, label_ids, categories, channel_type, channel_url, config, priority, enabled } = req.body; if (name !== undefined && (typeof name !== 'string' || !name.trim())) { res.status(400).json({ error: 'Name must be a non-empty string' }); @@ -368,10 +375,29 @@ notificationRoutesRouter.put('/:id', authMiddleware, async (req: Request, res: R res.status(400).json({ error: `channel_type must be ${NOTIFICATION_CHANNEL_TYPES.join(', ')}` }); return; } - if (channel_url !== undefined) { - const urlErr = validateHttpsUrl(channel_url); - if (urlErr) { res.status(400).json({ error: `channel_url ${urlErr}` }); return; } + const typeChanged = channel_type !== undefined && channel_type !== existing.channel_type; + // Type changes replace credentials; never reuse a prior channel's URL/config (ciphertext or plaintext). + if (typeChanged && (typeof channel_url !== 'string' || !channel_url.trim())) { + res.status(400).json({ error: 'channel_url is required when changing channel_type' }); + return; } + const effectiveType = channel_type ?? existing.channel_type; + const effectiveUrl = channel_url !== undefined ? String(channel_url).trim() : existing.channel_url; + let effectiveConfig: unknown = config ?? null; + if (effectiveType === 'apprise' && config === undefined) { + if (typeChanged) { + // Fresh Apprise credentials: empty keyed (or stateless urls required via validate). + effectiveConfig = null; + } else { + const resolved = resolvePreservedAppriseConfig(effectiveUrl, existing.config); + if (!resolved.ok) { res.status(400).json({ error: resolved.error }); return; } + effectiveConfig = resolved.config; + } + } + const redactedErr = redactedChannelWriteError(effectiveType, effectiveUrl, effectiveConfig, config); + if (redactedErr) { res.status(400).json({ error: redactedErr }); return; } + const urlErr = validateNotificationChannel(effectiveType, effectiveUrl, effectiveConfig); + if (urlErr) { res.status(400).json({ error: `channel_url ${urlErr}` }); return; } if (priority !== undefined && (typeof priority !== 'number' || !Number.isFinite(priority))) { res.status(400).json({ error: 'priority must be a finite number' }); return; @@ -388,7 +414,9 @@ notificationRoutesRouter.put('/:id', authMiddleware, async (req: Request, res: R if ('label_ids' in req.body) updates.label_ids = Array.isArray(label_ids) && label_ids.length > 0 ? label_ids : null; if ('categories' in req.body) updates.categories = Array.isArray(categories) && categories.length > 0 ? categories : null; if (channel_type !== undefined) updates.channel_type = channel_type; - if (channel_url !== undefined) updates.channel_url = channel_url.trim(); + if (channel_url !== undefined || typeChanged) updates.channel_url = effectiveUrl; + if (effectiveType === 'apprise') updates.config = normalizeAppriseStoredJson(effectiveUrl, effectiveConfig); + else if (typeChanged || channel_type !== undefined) updates.config = null; if (priority !== undefined) updates.priority = priority; if (enabled !== undefined) updates.enabled = enabled; @@ -397,7 +425,7 @@ notificationRoutesRouter.put('/:id', authMiddleware, async (req: Request, res: R const updated = db.getNotificationRoute(id); console.log(`[Routes] Route ${id} updated`); if (isDebugEnabled()) console.log(`[Routes:diag] Route ${id} update fields: ${Object.keys(updates).filter(k => k !== 'updated_at')}`); - res.json(updated); + res.json(serializePublicNotificationRoute(updated!)); } catch (error) { console.error('Failed to update notification route:', error); res.status(500).json({ error: 'Failed to update notification route' }); @@ -430,7 +458,18 @@ notificationRoutesRouter.post('/:id/test', authMiddleware, async (req: Request, if (!route) { res.status(404).json({ error: 'Route not found' }); return; } if (isDebugEnabled()) console.log(`[Routes:diag] Test dispatch for route ${id} (${route.channel_type} -> ${maskWebhookUrl(route.channel_url)})`); - await NotificationService.getInstance().testDispatch(route.channel_type, route.channel_url); + let testConfig: unknown; + if (route.channel_type === 'apprise') { + const stored = parseStoredAppriseConfig(route.channel_url, route.config); + if (!stored.ok) { + res.status(400).json({ error: stored.reason }); + return; + } + testConfig = storedAppriseToWriteConfig(stored); + } else { + testConfig = route.config ? JSON.parse(route.config) : undefined; + } + await NotificationService.getInstance().testDispatch(route.channel_type, route.channel_url, testConfig); res.json({ success: true }); } catch (error) { res.status(500).json({ error: 'Test failed', details: getErrorMessage(error, String(error)) }); diff --git a/backend/src/services/DatabaseService.ts b/backend/src/services/DatabaseService.ts index 4f2568a0..997b81f0 100644 --- a/backend/src/services/DatabaseService.ts +++ b/backend/src/services/DatabaseService.ts @@ -16,9 +16,10 @@ function isPilotMode(): boolean { export interface Agent { id?: number; - type: 'discord' | 'slack' | 'webhook'; + type: 'discord' | 'slack' | 'webhook' | 'apprise'; url: string; enabled: boolean; + config?: string | null; } export interface GlobalSetting { @@ -613,8 +614,9 @@ export interface NotificationRoute { stack_patterns: string[]; label_ids: number[] | null; categories: string[] | null; - channel_type: 'discord' | 'slack' | 'webhook'; + channel_type: 'discord' | 'slack' | 'webhook' | 'apprise'; channel_url: string; + config?: string | null; priority: number; enabled: boolean; created_at: number; @@ -909,6 +911,7 @@ export class DatabaseService { this.migrateNotificationRoutes(); this.migrateNotificationRoutesNodeId(); this.migrateNotificationRoutesMatchers(); + this.migrateNotificationChannelConfig(); this.migrateNotificationSuppressionRules(); this.migrateNotificationHistoryContext(); this.migrateScanPolicyFleetColumns(); @@ -1907,6 +1910,11 @@ export class DatabaseService { this.tryAddColumn('notification_routes', 'categories', 'TEXT NULL'); } + private migrateNotificationChannelConfig(): void { + this.tryAddColumn('agents', 'config', 'TEXT NULL'); + this.tryAddColumn('notification_routes', 'config', 'TEXT NULL'); + } + private migrateNotificationSuppressionRules(): void { this.db.exec(` CREATE TABLE IF NOT EXISTS notification_suppression_rules ( @@ -2295,36 +2303,101 @@ export class DatabaseService { // --- Agents --- + /** Encrypt Apprise secrets at rest so a downgraded binary's SELECT * cannot return raw keys/URLs. */ + private sealAppriseSecret(value: string | null | undefined): string | null { + if (value == null) return null; + if (value === '') return value; + const crypto = CryptoService.getInstance(); + return crypto.isEncrypted(value) ? value : crypto.encrypt(value); + } + + private openAppriseSecret(value: string | null | undefined): string | null { + if (value == null) return null; + return CryptoService.getInstance().decrypt(value); + } + + /** Seal or pass through url/config depending on whether the channel is Apprise. */ + private storeAppriseFields( + isApprise: boolean, + url: string, + config: string | null | undefined, + ): { url: string; config: string | null } { + if (!isApprise) return { url, config: config ?? null }; + return { + url: this.sealAppriseSecret(url) ?? '', + config: this.sealAppriseSecret(config ?? null), + }; + } + + /** + * Decrypt Apprise fields for one row. Corrupt ciphertext or a key mismatch + * must not throw out of list/dispatch paths: one bad Apprise row would + * otherwise 500 GET /agents and silently drop every notification channel. + * Empty url/config forces the operator to re-enter credentials to repair. + */ + private loadAppriseFields( + isApprise: boolean, + url: string, + config: string | null | undefined, + ): { url: string; config: string | null } { + if (!isApprise) return { url, config: config ?? null }; + try { + return { + url: this.openAppriseSecret(url) ?? '', + config: this.openAppriseSecret(config ?? null), + }; + } catch (e) { + console.error( + '[DatabaseService] Failed to decrypt Apprise credentials; isolating row:', + (e as Error).message, + ); + return { url: '', config: null }; + } + } + + private mapAgentRow(row: any): Agent { + const type = row.type as Agent['type']; + const fields = this.loadAppriseFields(type === 'apprise', row.url as string, row.config as string | null); + return { + ...row, + type, + enabled: row.enabled === 1, + url: fields.url, + config: fields.config, + }; + } + public getAgents(nodeId: number): Agent[] { const stmt = this.db.prepare('SELECT * FROM agents WHERE node_id = ?'); - return stmt.all(nodeId).map((row: any) => ({ - ...row, - enabled: row.enabled === 1 - })); + return stmt.all(nodeId).map((row: any) => this.mapAgentRow(row)); } public getEnabledAgents(nodeId: number): Agent[] { const stmt = this.db.prepare('SELECT * FROM agents WHERE node_id = ? AND enabled = 1'); - return stmt.all(nodeId).map((row: any) => ({ - ...row, - enabled: row.enabled === 1 - })); + return stmt.all(nodeId).map((row: any) => this.mapAgentRow(row)); } public upsertAgent(nodeId: number, agent: Agent): void { + const stored = this.storeAppriseFields(agent.type === 'apprise', agent.url, agent.config); const existing = this.db.prepare('SELECT id FROM agents WHERE node_id = ? AND type = ?').get(nodeId, agent.type) as any; if (existing) { - const stmt = this.db.prepare('UPDATE agents SET url = ?, enabled = ? WHERE node_id = ? AND type = ?'); - stmt.run(agent.url, agent.enabled ? 1 : 0, nodeId, agent.type); + const stmt = this.db.prepare('UPDATE agents SET url = ?, enabled = ?, config = ? WHERE node_id = ? AND type = ?'); + stmt.run(stored.url, agent.enabled ? 1 : 0, stored.config, nodeId, agent.type); } else { - const stmt = this.db.prepare('INSERT INTO agents (node_id, type, url, enabled) VALUES (?, ?, ?, ?)'); - stmt.run(nodeId, agent.type, agent.url, agent.enabled ? 1 : 0); + const stmt = this.db.prepare('INSERT INTO agents (node_id, type, url, enabled, config) VALUES (?, ?, ?, ?, ?)'); + stmt.run(nodeId, agent.type, stored.url, agent.enabled ? 1 : 0, stored.config); } } // --- Notification Routes --- private parseNotificationRoute(row: Record): NotificationRoute { + const channel_type = row.channel_type as 'discord' | 'slack' | 'webhook' | 'apprise'; + const fields = this.loadAppriseFields( + channel_type === 'apprise', + row.channel_url as string, + row.config as string | null, + ); return { id: row.id as number, name: row.name as string, @@ -2332,8 +2405,9 @@ export class DatabaseService { stack_patterns: JSON.parse(row.stack_patterns as string) as string[], label_ids: row.label_ids ? JSON.parse(row.label_ids as string) as number[] : null, categories: row.categories ? JSON.parse(row.categories as string) as string[] : null, - channel_type: row.channel_type as 'discord' | 'slack' | 'webhook', - channel_url: row.channel_url as string, + channel_type, + channel_url: fields.url, + config: fields.config, priority: row.priority as number, enabled: row.enabled === 1, created_at: row.created_at as number, @@ -2366,8 +2440,9 @@ export class DatabaseService { } public createNotificationRoute(route: Omit): NotificationRoute { + const stored = this.storeAppriseFields(route.channel_type === 'apprise', route.channel_url, route.config); const result = this.db.prepare( - 'INSERT INTO notification_routes (name, node_id, stack_patterns, label_ids, categories, channel_type, channel_url, priority, enabled, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' + 'INSERT INTO notification_routes (name, node_id, stack_patterns, label_ids, categories, channel_type, channel_url, config, priority, enabled, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' ).run( route.name, route.node_id ?? null, @@ -2375,7 +2450,8 @@ export class DatabaseService { route.label_ids ? JSON.stringify(route.label_ids) : null, route.categories ? JSON.stringify(route.categories) : null, route.channel_type, - route.channel_url, + stored.url, + stored.config, route.priority, route.enabled ? 1 : 0, route.created_at, @@ -2387,6 +2463,9 @@ export class DatabaseService { public updateNotificationRoute(id: number, updates: Partial>): void { const fields: string[] = []; const values: unknown[] = []; + const existing = this.getNotificationRoute(id); + const effectiveType = updates.channel_type ?? existing?.channel_type; + const sealApprise = effectiveType === 'apprise'; if (updates.name !== undefined) { fields.push('name = ?'); values.push(updates.name); } if ('node_id' in updates) { fields.push('node_id = ?'); values.push(updates.node_id ?? null); } @@ -2394,7 +2473,14 @@ export class DatabaseService { if ('label_ids' in updates) { fields.push('label_ids = ?'); values.push(updates.label_ids ? JSON.stringify(updates.label_ids) : null); } if ('categories' in updates) { fields.push('categories = ?'); values.push(updates.categories ? JSON.stringify(updates.categories) : null); } if (updates.channel_type !== undefined) { fields.push('channel_type = ?'); values.push(updates.channel_type); } - if (updates.channel_url !== undefined) { fields.push('channel_url = ?'); values.push(updates.channel_url); } + if (updates.channel_url !== undefined) { + fields.push('channel_url = ?'); + values.push(sealApprise ? (this.sealAppriseSecret(updates.channel_url) ?? '') : updates.channel_url); + } + if ('config' in updates) { + fields.push('config = ?'); + values.push(sealApprise ? this.sealAppriseSecret(updates.config ?? null) : (updates.config ?? null)); + } if (updates.priority !== undefined) { fields.push('priority = ?'); values.push(updates.priority); } if (updates.enabled !== undefined) { fields.push('enabled = ?'); values.push(updates.enabled ? 1 : 0); } if (updates.updated_at !== undefined) { fields.push('updated_at = ?'); values.push(updates.updated_at); } diff --git a/backend/src/services/NotificationService.ts b/backend/src/services/NotificationService.ts index de9555f3..d1ea2542 100644 --- a/backend/src/services/NotificationService.ts +++ b/backend/src/services/NotificationService.ts @@ -12,6 +12,13 @@ import { matchesNotificationFilters, ruleNeedsStackLabels, } from '../helpers/notificationMatchers'; +import { + type NotificationChannelType, + type ParsedAppriseConfig, + normalizeAppriseStoredJson, + parseStoredAppriseConfig, + validateNotificationChannel, +} from '../helpers/notificationChannels'; export type NotificationCategory = | 'deploy_success' @@ -65,7 +72,13 @@ export const ALL_SUPPRESSIBLE_CATEGORIES: readonly NotificationCategory[] = [ const WEBHOOK_TIMEOUT_MS = 10_000; /** Valid notification channel types for defense-in-depth validation. */ -const ALLOWED_CHANNEL_TYPES = new Set(['discord', 'slack', 'webhook']); +const ALLOWED_CHANNEL_TYPES = new Set(['discord', 'slack', 'webhook', 'apprise']); + +export class NotificationDeliveryError extends Error { + public constructor(message: string, public readonly status: number | null, public readonly retryable: boolean) { + super(message); + } +} export class NotificationService { private static instance: NotificationService; @@ -251,7 +264,7 @@ export class NotificationService { if (isDebugEnabled()) console.log(`[Notify:diag] Matched ${matched.length} route(s) for stack "${sanitizeForLog(stackName ?? '(none)')}", category="${sanitizeForLog(category)}"`); await Promise.allSettled( matched.map(route => - this.sendToChannel(route.channel_type, route.channel_url, level, sanitized) + this.sendToChannel(route.channel_type, route.channel_url, level, sanitized, route.config) .then(() => { if (isDebugEnabled()) console.log(`[Notify:diag] Dispatched ${level} via route "${sanitizeForLog(route.name)}" (${route.channel_type})`); }) @@ -275,7 +288,7 @@ export class NotificationService { if (isDebugEnabled()) console.log(`[Notify:diag] Falling back to ${agents.length} global agent(s)`); await Promise.allSettled( agents.map(agent => - this.sendToChannel(agent.type, agent.url, level, sanitized) + this.sendToChannel(agent.type, agent.url, level, sanitized, agent.config) .then(() => { if (isDebugEnabled()) console.log(`[Notify:diag] Dispatched ${level} via global agent (${agent.type})`); }) @@ -302,22 +315,66 @@ export class NotificationService { } } - private async sendToChannel(type: string, url: string, level: 'info' | 'warning' | 'error', message: string): Promise { + private async sendToChannel(type: string, url: string, level: 'info' | 'warning' | 'error', message: string, config?: string | null): Promise { if (type === 'discord') { await this.sendDiscordWebhook(url, level, message); } else if (type === 'slack') { await this.sendSlackWebhook(url, level, message); } else if (type === 'webhook') { await this.sendCustomWebhook(url, level, message); + } else if (type === 'apprise') { + const parsed = parseStoredAppriseConfig(url, config); + if (!parsed.ok) { + throw new NotificationDeliveryError(parsed.reason, null, false); + } + await this.sendAppriseNotify(url, level, message, parsed); } else { throw new Error(`Unsupported channel type: ${type}`); } } - public async testDispatch(type: 'discord' | 'slack' | 'webhook', url: string) { + public async testDispatch(type: NotificationChannelType, url: string, config?: unknown) { if (!ALLOWED_CHANNEL_TYPES.has(type)) throw new Error(`Invalid notification type: ${type}`); - if (!url || !url.startsWith('https://')) throw new Error('URL must use HTTPS'); - await this.sendToChannel(type, url, 'info', '🔌 Test Notification from Sencho!'); + const validation = validateNotificationChannel(type, url, config); + if (validation) throw new Error(`URL ${validation}`); + const stored = type === 'apprise' ? normalizeAppriseStoredJson(url, config) : (config == null ? null : JSON.stringify(config)); + await this.sendToChannel(type, url, 'info', '🔌 Test Notification from Sencho!', stored); + } + + private async sendAppriseNotify( + url: string, + level: 'info' | 'warning' | 'error', + message: string, + config: Extract, + ): Promise { + const payload: Record = { + title: `Sencho Alert [${level.toUpperCase()}]`, + body: message, + type: level === 'error' ? 'failure' : level, + }; + if (config.mode === 'stateless') payload.urls = config.urlsJoined; + else if (config.tags) payload.tag = config.tags; + try { + const response = await fetch(url, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(payload), + signal: AbortSignal.timeout(WEBHOOK_TIMEOUT_MS), + }); + if (response.status === 204) throw new NotificationDeliveryError('Apprise returned no delivery (HTTP 204)', 204, false); + if (response.status >= 400 && response.status < 500) { + throw new NotificationDeliveryError(`Apprise responded with HTTP ${response.status}`, response.status, false); + } + if (!response.ok) throw new NotificationDeliveryError(`Apprise responded with HTTP ${response.status}`, response.status, true); + } catch (error) { + if (error instanceof NotificationDeliveryError) throw error; + const aborted = error instanceof Error && (error.name === 'AbortError' || error.name === 'TimeoutError'); + throw new NotificationDeliveryError( + aborted ? 'Apprise request timed out' : 'Apprise request failed', + null, + true, + ); + } } private async sendDiscordWebhook(url: string, level: 'info' | 'warning' | 'error', message: string) { diff --git a/docs/features/alerts-notifications.mdx b/docs/features/alerts-notifications.mdx index d7ad204e..782763ca 100644 --- a/docs/features/alerts-notifications.mdx +++ b/docs/features/alerts-notifications.mdx @@ -1,23 +1,23 @@ --- title: Alerts & Notifications sidebarTitle: Alerts and notifications -description: Threshold and event alerts for your fleet, dispatched to Discord, Slack, or any webhook, with per-stack rules and channel routing. +description: Threshold and event alerts for your fleet, dispatched to Discord, Slack, Apprise, or any webhook, with per-stack rules and channel routing. --- -Sencho watches each node it manages for container crashes, host pressure, scheduled-task results, and update availability, then surfaces every signal in two places: the in-app notification bell at the top of the shell and one of three external channels you configure. This page covers everything from configuring channels to writing per-stack threshold rules, routing alerts to dedicated channels with routing rules, and tuning retention. +Sencho watches each node it manages for container crashes, host pressure, scheduled-task results, and update availability, then surfaces every signal in two places: the in-app notification bell at the top of the shell and an external channel you configure. This page covers everything from configuring channels to writing per-stack threshold rules, routing alerts to dedicated channels with routing rules, and tuning retention. - Settings · Notifications · Channels panel showing the Discord, Slack, and Webhook tabs with the masthead breadcrumb, the CHANNELS 3/3 stat, the active Discord tab with its Enabled toggle on, the Webhook URL input, and the Test and Save actions. + Settings · Notifications · Channels panel with Discord, Slack, Webhook, and Apprise tabs, CHANNELS 1/4 in the masthead, the Apprise tab active with Enabled on, a redacted Apprise endpoint, an empty Tags field, and Test disabled beside Save. ## Notification channels -Open **Settings · Notifications · Channels** to configure the three channel types. Each channel is per-node, so switching the active node via the node picker reloads the panel against that node's stored settings. The masthead carries a `CHANNELS` stat showing how many of the three slots are enabled. +Open **Settings · Notifications · Channels** to configure Discord, Slack, custom webhook, and Apprise channels. Each channel is per-node, so switching the active node via the node picker reloads the panel against that node's stored settings. The masthead carries a `CHANNELS` stat showing how many of the four slots are enabled. -Each tab carries the same controls: an **Enabled** toggle (helper: `Send Sencho events to this channel.`), a **Webhook URL** input (placeholder `https://...`, helper: `Sencho posts JSON payloads here. Use a private channel.`), and the **Test** and **Save** buttons. The kicker on each tab toggles between `enabled` and `off` so you can see at a glance which slots are wired up. +Each Discord, Slack, and Webhook tab carries an **Enabled** toggle, a **Webhook URL** input (HTTPS only), and **Test** / **Save**. The Apprise tab uses an **Apprise endpoint** instead: keyed `/notify/{key}` shows optional **Tags**; stateless `/notify` shows **Destination URLs**. The kicker on each tab toggles between `enabled` and `off` so you can see at a glance which slots are wired up. - Webhook URLs must use HTTPS. Sencho rejects `http://` and any string that does not parse as a URL. The same rule applies to test sends and to routing-rule URLs. + Discord, Slack, and webhook URLs must use HTTPS. Apprise endpoints may use HTTP or HTTPS. Every endpoint must parse as a URL. ### Discord @@ -43,6 +43,12 @@ Use the Generic Webhook tab when you have your own receiver: a Mattermost or Tea `level` is one of `info`, `warning`, `error`. `source` is always the literal string `sencho`. `timestamp` is ISO-8601 with millisecond precision. +### Apprise + +Use a keyed Apprise endpoint ending in `/notify/` with optional tags, or a stateless endpoint ending in `/notify` with one or more destination URLs. Separate stateless destination URLs with commas or whitespace. Apprise endpoints may use HTTP for a local gateway. + +Sencho sends the alert title, body, severity, and either tags or destination URLs to Apprise. An HTTP 204 response means Apprise accepted no delivery and is reported as a failed test or dispatch. Configuration reads expose only destination provider names and counts, never destination URLs or endpoint keys. + ### Test sends and delivery semantics The **Test** button on each tab dispatches the literal message `🔌 Test Notification from Sencho!` at level `info` through the same path a real alert would take. Test sends require the admin role; the server returns 403 if an operator or viewer submits one. @@ -74,7 +80,7 @@ A route with all four matchers left empty matches every alert and intercepts glo Open **Settings · Notifications · Notification Routing** and click **+ Add Route**. - The 'New routing rule' modal with the 'ROUTING · NEW RULE' kicker, a Name input filled with 'Production alerts', a Node scope select reading 'Any node', empty Stacks, Labels, and Categories combobox pickers, the helper line 'Leave blank to match all categories. All non-empty filters must match (AND).', a Channel tab strip with Discord selected and a webhook URL filled in, and Priority and Enabled fields with Cancel and CREATE actions in the footer. + The New routing rule modal with empty Name, Node scope set to Any node, empty Stacks, Labels, and Categories fields, Channel tabs with Apprise selected, and Cancel and CREATE actions. Priority and Enabled may be scrolled out of the cropped frame. | Field | Purpose | @@ -84,7 +90,7 @@ Open **Settings · Notifications · Notification Routing** and click **+ Add Rou | **Stacks** *(optional)* | A combobox of stacks on the active node. Selected stacks appear as removable pills. Empty matches any stack. | | **Labels** *(optional)* | A combobox of stack labels on the active node. Empty matches any label. | | **Categories** *(optional)* | A combobox of notification categories. The helper line reads `Leave blank to match all categories. All non-empty filters must match (AND).` | -| **Channel** | Tabs for Discord, Slack, and Webhook with a URL input below. URL must use HTTPS. | +| **Channel** | Tabs for Discord, Slack, Webhook, and Apprise. Discord, Slack, and Webhook require HTTPS. Apprise accepts HTTP or HTTPS. | | **Priority** | A number used to sort the rule list. Lower numbers appear higher up. Priority does not gate dispatch: when multiple rules match the same alert, every matching rule fires concurrently. | | **Enabled** | Toggle the rule on or off without deleting it. | @@ -164,7 +170,7 @@ Each stack carries its own set of threshold rules that fire when a metric stays Open the rules editor by right-clicking a stack in the sidebar and choosing **Alerts**, or by pressing `A` while focused on a stack. - The Stack › PLEX › MONITOR sheet with the Alerts tab active, a green 'Notifications active via Discord, Slack, Webhook' banner under the NOTIFICATION CHANNELS heading, an ACTIVE RULES section listing 'CPU Usage (%) > 80' with the secondary line 'Trigger after 5m • Cooldown 60m', and an ADD NEW RULE form with Metric, Operator, Threshold, Duration, Cooldown fields and an Add Rule submit button. + The Stack › PLEX › MONITOR sheet with the Alerts tab active, a green notification-channel banner under the NOTIFICATION CHANNELS heading, an ACTIVE RULES section listing 'CPU Usage (%) > 80' with the secondary line 'Trigger after 5m • Cooldown 60m', and an ADD NEW RULE form with Metric, Operator, Threshold, Duration, Cooldown fields and an Add Rule submit button. ### Alert fields @@ -196,7 +202,7 @@ The **NOTIFICATION CHANNELS** banner above the rules list reflects what dispatch - **Loading** is a spinner with `Checking notification channels...` while Sencho asks the target node for its agent state. - **Remote node** is a blue banner reading `Remote node: `, with the body `Alert rules are stored and evaluated on this remote instance. Notifications are dispatched using that node's configured channels.` A sub-line reports whether the remote has any channels configured. -- **No channels** is an amber banner reading `No notification channels configured`, body `Alert rules will be saved and evaluated, but no notifications will be dispatched. Configure Discord, Slack, or a webhook in Settings → Notifications → Channels.` +- **No channels** is an amber banner reading `No notification channels configured`, body `Alert rules will be saved and evaluated, but no notifications will be dispatched. Configure Discord, Slack, Apprise, or a webhook in Settings → Notifications → Channels.` - **Active** is a green banner reading `Notifications active via Discord, Slack, …` with the configured channels listed. @@ -287,7 +293,7 @@ The bell aggregates across the entire fleet by hitting `/api/notifications` agai Per-stack alert rules and channel configuration are **stored on the node where the stack runs**. To configure a rule on a remote, switch the active node via the picker, open the stack's **Monitor** sheet, and the form's POST is forwarded to the remote. -Crash detection runs only on local Docker; remote nodes run their own copy of `DockerEventService` and emit through the proxy. On a multi-node fleet the bell attributes remotes with a node-name badge rather than embedding the satellite-local name in the message. External channel payloads (Slack, Discord, custom webhook) receive the same sanitized body with no structured source-node id. +Crash detection runs only on local Docker; remote nodes run their own copy of `DockerEventService` and emit through the proxy. On a multi-node fleet the bell attributes remotes with a node-name badge rather than embedding the satellite-local name in the message. External channel payloads (Slack, Discord, Apprise, custom webhook) receive the same sanitized body with no structured source-node id. Switching the active node only affects per-stack rule editing and the Settings panels. The bell aggregates every node regardless of which one is active. @@ -433,8 +439,8 @@ Switching the active node tears down per-stack rule editors and reloads channel ## Troubleshooting - - Check three things in order. First, the channel toggle in **Settings · Notifications · Channels** must be on; the kicker on each tab reads `enabled` or `off`. Second, the URL must use HTTPS; the form rejects plain `http://` outright. Third, a routing rule with empty `Stacks`, `Labels`, and `Categories` matchers will intercept every alert and skip the global channels. Use the per-channel **Test** button to issue a one-shot dispatch and watch your endpoint for the literal message `🔌 Test Notification from Sencho!` Sencho records the failure reason in `notification_history.dispatch_error` when delivery throws, so a row that appears in the bell with no follow-up at the endpoint usually means a 4xx or timeout at the receiver. + + Check three things in order. First, the channel toggle in **Settings · Notifications · Channels** must be on; the kicker on each tab reads `enabled` or `off`. Second, Discord, Slack, and webhook URLs must use HTTPS (the form rejects plain `http://` for those channels); Apprise endpoints may use HTTP or HTTPS. Third, a routing rule with empty `Stacks`, `Labels`, and `Categories` matchers will intercept every alert and skip the global channels. Use the per-channel **Test** button to issue a one-shot dispatch and watch your endpoint for the literal message `🔌 Test Notification from Sencho!` Sencho records the failure reason in `notification_history.dispatch_error` when delivery throws, so a row that appears in the bell with no follow-up at the endpoint usually means a 4xx or timeout at the receiver. Three causes account for almost every case. First, the rule's **Duration** has not elapsed yet: the breach must persist for the full duration before the rule fires. Second, the rule is still in cooldown after a previous fire. Third, the panel's banner is not green: a remote-node banner means the rule was saved on a remote whose channels you may not have configured, and an amber `No notification channels configured` banner means the rule evaluates fine but Sencho has nowhere to send the alert. The evaluator runs on a 30-second tick, so expect up to 30 seconds of latency between the breach starting and the timer engaging. diff --git a/docs/features/dashboard.mdx b/docs/features/dashboard.mdx index 2ed0aa2c..db8c418c 100644 --- a/docs/features/dashboard.mdx +++ b/docs/features/dashboard.mdx @@ -87,7 +87,7 @@ The card is divided into four sections. | Row | What it shows | |-----|---------------| -| **Notification agents** | The list of enabled delivery agents from `Discord`, `Slack`, `Webhook`, joined by commas; reads `None` when no agent is enabled | +| **Notification agents** | The list of enabled delivery agents from `Discord`, `Slack`, `Webhook`, and `Apprise`, joined by commas; reads `None` when no agent is enabled | | **Alert rules** | Total per-stack alert rules in effect, formatted ` rules` | | **Notification routing** | Number of enabled routing rules that direct categories to specific agents, formatted ` routes` | diff --git a/docs/features/licensing.mdx b/docs/features/licensing.mdx index b1d07d8f..7b543c95 100644 --- a/docs/features/licensing.mdx +++ b/docs/features/licensing.mdx @@ -36,12 +36,12 @@ See [the pricing page](https://sencho.io/pricing) for current pricing. - Atomic deployments with automatic rollback, and one-click rollback to the previous deployment - Auto-update policies for stack images and auto-heal policies for failed containers - Scheduled operations across the full action catalog (lifecycle, updates, scans, snapshots, prune) -- Webhooks (incoming, to trigger deploys from CI/CD) and notification routing (per-stack and per-category rules to Discord, Slack, or any webhook) +- Webhooks (incoming, to trigger deploys from CI/CD) and notification routing (per-stack and per-category rules to Discord, Slack, Apprise, or any webhook) - Custom S3-compatible backup target (bring your own AWS S3, Cloudflare R2, MinIO, Backblaze B2, or Wasabi bucket) - Vulnerability scanning: install, update, uninstall, and auto-update the managed Trivy binary, on-demand scans for vulnerabilities, secrets, and misconfigurations, scan comparison, CVE suppressions, and single-scan SBOM export (SPDX, CycloneDX) - Private registry credentials for Docker Hub, GitHub Container Registry (GHCR), and custom or self-hosted registries (admin role required) - A 14-day recent-activity audit log with Stream and Table views and filtering -- Alert rules with Discord, Slack, and webhook targets +- Alert rules with Discord, Slack, Apprise, and webhook targets - API tokens for CI/CD pipelines and scripts (admin role required) - Unlimited accounts with the Admin and Viewer roles - Two-factor authentication (TOTP plus backup codes) diff --git a/docs/features/multi-node.mdx b/docs/features/multi-node.mdx index e1850a83..6eaeb43e 100644 --- a/docs/features/multi-node.mdx +++ b/docs/features/multi-node.mdx @@ -189,7 +189,7 @@ When you select a remote node in the switcher, the Settings hub filters to the p |-------|:-----:|-------| | Appearance | Per browser | Theme and density preferences are stored in your browser, not on the node. | | Host Alerts | Per node | Host CPU, RAM, and disk thresholds for the selected node. | -| Channels | Per node | Discord, Slack, and Webhook channels fire from the node that detects the event. | +| Channels | Per node | Discord, Slack, Webhook, and Apprise channels fire from the node that detects the event. | | Labels | Per node | Stack and container label palettes. | | Vulnerability Scanning | Per node | Trivy install state and scanner readiness for the selected node. | | Developer | Per node | Retention windows for metrics and logs, plus Developer Mode. | diff --git a/docs/features/overview.mdx b/docs/features/overview.mdx index db207aac..3c4ff465 100644 --- a/docs/features/overview.mdx +++ b/docs/features/overview.mdx @@ -147,7 +147,7 @@ The **Logs** view aggregates output from every container across every stack into ### Alerts and notifications -Configure threshold-based alerts per stack and route notifications to Discord, Slack, or any generic webhook. Per-stack [routing rules](/features/alerts-notifications#notification-routing) send each stack's alerts to the right channel. [Learn more →](/features/alerts-notifications) +Configure threshold-based alerts per stack and route notifications to Discord, Slack, Apprise, or any generic webhook. Per-stack [routing rules](/features/alerts-notifications#notification-routing) send each stack's alerts to the right channel. [Learn more →](/features/alerts-notifications) ### Audit log diff --git a/docs/features/scheduled-operations.mdx b/docs/features/scheduled-operations.mdx index 2ebb2de2..f520f166 100644 --- a/docs/features/scheduled-operations.mdx +++ b/docs/features/scheduled-operations.mdx @@ -216,7 +216,7 @@ Use the **Enabled** toggle in the row to pause a schedule without losing its con ## Failure notifications -When a scheduled task fails, Sencho dispatches an `error`-level notification in the `system` category through your configured channels (Discord, Slack, custom webhooks, and the in-app bell). The notification carries the task name, the action, and the error message so you can diagnose without opening the run history. +When a scheduled task fails, Sencho dispatches an `error`-level notification in the `system` category through your configured channels (Discord, Slack, Apprise, custom webhooks, and the in-app bell). The notification carries the task name, the action, and the error message so you can diagnose without opening the run history. When a task that previously failed succeeds again, Sencho dispatches an `info`-level recovery notification in the same category to confirm the issue is resolved. Tasks that succeed on every run do not produce per-run notifications: the recovery-only approach keeps the channel quiet during steady-state operation. diff --git a/docs/images/alerts-notifications/notifications-settings.png b/docs/images/alerts-notifications/notifications-settings.png index 1b8e64cd86072e74b7fe2a872373f25305b34559..85004f3a076e4068a4c7b11070389a9a0ead1de8 100644 GIT binary patch literal 105779 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 EZybwRUH||9 literal 114905 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 diff --git a/docs/images/alerts-notifications/routing-modal.png b/docs/images/alerts-notifications/routing-modal.png index 3a981332c59ee3fad490e74433df3e588e94f0f3..ea879ce7cac501fb9f3fa2e34d593cc74e403abc 100644 GIT binary patch literal 52318 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

DJ1`Z)Jo&kF8n6<*PX?uApU#we)UzRB4=v|{z= zoi)R#ie%2F%U1iHeT@0y3NRD5vI%5(G@8E^FgmlbeoAqJr-pP`u1ZU^j*TS)LB~8F%>2G z73RrPUd*$&zz&9L1#^I!O82(-dJ@rHC?UHLJPUHkb{vnllp z$MRHx()N~v@S%)mXY>tpBr7ATH*?FOkQG87$>}qU$6b?V-q-PrBMEZ*Rj6f2&)Emt zm7d+)+|=Um{U$xY8_ghW)yj0EHZohKE|I=e>w6Lw%PKBOM$KX)X_jq&qzD{kTSxVe z=d+CtrU-)eX9t?4uK1w2K8~H=#Ga~n;jzc*y&9#VFPt7aFKLuBsGOEq8)S<;-2Hbs zyYz)xka<#1V;b3=Jy&C{(kUO-_3HXWw7ro4vOer%0AlWq<~*XKMe8t{_x}_VeSdA~ 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 literal 104857 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 endpoint with optional tags, or a stateless `/notify` endpoint with destination URLs. Apprise accepts HTTP or HTTPS. | Click **Save** to persist changes. Click **Test** to send a test payload immediately and verify delivery. @@ -410,9 +411,9 @@ Create routing rules that direct specific alert types to specific notification c | **Stack patterns** | Glob patterns to match stack names (multi-select). | | **Labels** | Apply this rule to stacks that carry any of the selected labels. | | **Categories** | Event categories that trigger the rule (crash, deploy, vulnerability, etc.). | -| **Channel type** | `discord`, `slack`, or `webhook`. | +| **Channel type** | `discord`, `slack`, `webhook`, or `apprise`. | | **Channel URL** | The destination endpoint for this rule. | -| **Priority** | Order in which rules are evaluated; the first match wins. | +| **Priority** | Sort order among matching rules. Every matching route fires; priority does not stop later matches. | | **Enabled** toggle | Mute a rule without deleting it. | Each rule keeps an execution history (collapsible per row) showing which alerts triggered it, when, and whether the delivery succeeded. diff --git a/frontend/src/components/StackAlertSheet.tsx b/frontend/src/components/StackAlertSheet.tsx index 05950dcc..ee665527 100644 --- a/frontend/src/components/StackAlertSheet.tsx +++ b/frontend/src/components/StackAlertSheet.tsx @@ -102,6 +102,7 @@ const agentTypeLabels: Record = { discord: 'Discord', slack: 'Slack', webhook: 'Webhook', + apprise: 'Apprise', }; const clampNonNegative = (setter: (v: string) => void) => (e: React.ChangeEvent) => { @@ -314,7 +315,7 @@ function AlertsTab({ stackName }: { stackName: string }) {

No notification channels configured

- Alert rules will be saved and evaluated, but no notifications will be dispatched. Configure Discord, Slack, or a webhook in{' '} + Alert rules will be saved and evaluated, but no notifications will be dispatched. Configure Discord, Slack, Apprise, or a webhook in{' '} Settings → Notifications.

diff --git a/frontend/src/components/dashboard/ConfigurationStatus.tsx b/frontend/src/components/dashboard/ConfigurationStatus.tsx index 10d66a1e..8fdaf1fd 100644 --- a/frontend/src/components/dashboard/ConfigurationStatus.tsx +++ b/frontend/src/components/dashboard/ConfigurationStatus.tsx @@ -1,6 +1,7 @@ import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Bell, Zap, Shield, HardDrive, ChevronRight } from 'lucide-react'; import { formatCount } from '@/lib/utils'; +import { normalizeConfigurationAgents } from '@/lib/configurationStatus'; import { useConfigurationStatus } from './useConfigurationStatus'; import type { SectionId } from '@/components/settings/types'; import { SENCHO_NAVIGATE_EVENT, type SenchoNavigateDetail } from '@/components/NodeManager'; @@ -115,11 +116,12 @@ export function ConfigurationStatus({ onOpenSection }: ConfigurationStatusProps const { notifications, automation, security, thresholds, backup } = status; const agentSummary = (() => { - const { discord, slack, webhook } = notifications.agents; + const { discord, slack, webhook, apprise } = normalizeConfigurationAgents(notifications.agents); const active = [ discord.enabled ? 'Discord' : null, slack.enabled ? 'Slack' : null, webhook.enabled ? 'Webhook' : null, + apprise.enabled ? 'Apprise' : null, ].filter(Boolean); return active.length === 0 ? 'None' : active.join(', '); })(); diff --git a/frontend/src/components/dashboard/__tests__/ConfigurationStatus.test.tsx b/frontend/src/components/dashboard/__tests__/ConfigurationStatus.test.tsx index c6470513..377bd152 100644 --- a/frontend/src/components/dashboard/__tests__/ConfigurationStatus.test.tsx +++ b/frontend/src/components/dashboard/__tests__/ConfigurationStatus.test.tsx @@ -17,6 +17,7 @@ function makePayload(overrides: Partial = {}): Confi discord: { configured: false, enabled: false }, slack: { configured: false, enabled: false }, webhook: { configured: false, enabled: false }, + apprise: { configured: false, enabled: false }, }, alertRules: 0, routingRules: { count: 0, enabledCount: 0, locked: true }, @@ -88,6 +89,7 @@ describe('ConfigurationStatus row visibility', () => { discord: { configured: false, enabled: false }, slack: { configured: false, enabled: false }, webhook: { configured: false, enabled: false }, + apprise: { configured: false, enabled: false }, }, alertRules: 2, routingRules: { count: 1, enabledCount: 1, locked: false }, @@ -167,3 +169,33 @@ describe('ConfigurationStatus click targets', () => { expect(onOpenSection).toHaveBeenCalledWith('container-alerts'); }); }); + +describe('ConfigurationStatus legacy remote agents', () => { + it('renders a three-channel payload that omits apprise without throwing', () => { + const legacy = makePayload(); + // Simulate older remote contract: no apprise key on the wire. + delete (legacy.notifications.agents as { apprise?: unknown }).apprise; + useConfigurationStatusMock.mockReturnValue({ status: legacy, loading: false }); + expect(() => render()).not.toThrow(); + const channelsRow = screen.getByText('Channels').closest('button'); + expect(channelsRow?.textContent).toContain('None'); + }); + + it('summarizes enabled legacy channels without requiring apprise', () => { + const legacy = makePayload({ + notifications: { + agents: { + discord: { configured: true, enabled: true }, + slack: { configured: false, enabled: false }, + webhook: { configured: false, enabled: false }, + } as ConfigurationStatusPayload['notifications']['agents'], + alertRules: 0, + routingRules: { count: 0, enabledCount: 0, locked: true }, + suppressionRules: { total: 0, enabledCount: 0 }, + }, + }); + useConfigurationStatusMock.mockReturnValue({ status: legacy, loading: false }); + render(); + expect(screen.getByText('Discord')).toBeDefined(); + }); +}); diff --git a/frontend/src/components/dashboard/useConfigurationStatus.ts b/frontend/src/components/dashboard/useConfigurationStatus.ts index 960ed3cc..e4c0776f 100644 --- a/frontend/src/components/dashboard/useConfigurationStatus.ts +++ b/frontend/src/components/dashboard/useConfigurationStatus.ts @@ -2,20 +2,16 @@ import { useState, useEffect, useCallback, useRef } from 'react'; import { useNodes } from '@/context/NodeContext'; import { apiFetch } from '@/lib/api'; import { visibilityInterval } from '@/lib/utils'; +import { normalizeConfigurationAgents, type AgentStatus } from '@/lib/configurationStatus'; // Trailing-edge debounce window for filtered settings-event refetches, // matching the precedent in useNextAutoUpdateRun. const INVALIDATE_DEBOUNCE_MS = 250; -interface AgentStatus { - configured: boolean; - enabled: boolean; -} - export interface ConfigurationStatus { tier: 'community' | 'paid'; notifications: { - agents: { discord: AgentStatus; slack: AgentStatus; webhook: AgentStatus }; + agents: { discord: AgentStatus; slack: AgentStatus; webhook: AgentStatus; apprise: AgentStatus }; alertRules: number; routingRules: { count: number; enabledCount: number; locked: boolean }; suppressionRules: { total: number; enabledCount: number }; @@ -48,6 +44,28 @@ export interface ConfigurationStatus { }; } +/** Wire payload may omit `apprise` from older remotes. */ +type WireConfigurationStatus = Omit & { + notifications: Omit & { + agents: { + discord: AgentStatus; + slack: AgentStatus; + webhook: AgentStatus; + apprise?: AgentStatus; + }; + }; +}; + +function normalizeConfigurationStatus(raw: WireConfigurationStatus): ConfigurationStatus { + return { + ...raw, + notifications: { + ...raw.notifications, + agents: normalizeConfigurationAgents(raw.notifications.agents), + }, + }; +} + export function useConfigurationStatus() { const { activeNode } = useNodes(); const nodeId = activeNode?.id; @@ -61,8 +79,8 @@ export function useConfigurationStatus() { try { const res = await apiFetch('/dashboard/configuration'); if (!res.ok) return; - const data = await res.json() as ConfigurationStatus; - setStatus(data); + const data = await res.json() as WireConfigurationStatus; + setStatus(normalizeConfigurationStatus(data)); } catch { // Silent; stale data stays visible } finally { diff --git a/frontend/src/components/fleet/FleetConfiguration.tsx b/frontend/src/components/fleet/FleetConfiguration.tsx index 7d7bcc81..e475f62f 100644 --- a/frontend/src/components/fleet/FleetConfiguration.tsx +++ b/frontend/src/components/fleet/FleetConfiguration.tsx @@ -10,6 +10,7 @@ import { import { useFleetSyncStatus } from '@/hooks/useFleetSyncStatus'; import { STICKY_CONTROL_IDENTITY_MISMATCH, type FleetSyncStatus } from '@/lib/fleetSyncApi'; import type { ConfigurationStatusPayload } from '@/components/dashboard'; +import { normalizeConfigurationAgents } from '@/lib/configurationStatus'; interface FleetNodeConfiguration { id: number; @@ -115,11 +116,13 @@ function NodeCard({ node, policySyncState }: { } const { notifications, automation, security, backup, thresholds } = node.configuration; + const agents = normalizeConfigurationAgents(notifications.agents); const agentCount = [ - notifications.agents.discord.enabled, - notifications.agents.slack.enabled, - notifications.agents.webhook.enabled, + agents.discord.enabled, + agents.slack.enabled, + agents.webhook.enabled, + agents.apprise.enabled, ].filter(Boolean).length; return ( diff --git a/frontend/src/components/settings/NotificationRoutingSection.tsx b/frontend/src/components/settings/NotificationRoutingSection.tsx index 80c42cd5..81af1180 100644 --- a/frontend/src/components/settings/NotificationRoutingSection.tsx +++ b/frontend/src/components/settings/NotificationRoutingSection.tsx @@ -23,6 +23,7 @@ import { Plus, Trash2, Pencil, RefreshCw, Zap, X, Route } from 'lucide-react'; import { SettingsCallout } from './SettingsCallout'; import { SettingsPrimaryButton } from './SettingsActions'; import { useMastheadStats } from './MastheadStatsContext'; +import { classifyAppriseEndpoint, isStatelessAppriseEndpoint } from '@/lib/appriseEndpoint'; interface NotificationRoute { id: number; @@ -31,8 +32,9 @@ interface NotificationRoute { stack_patterns: string[]; label_ids: number[] | null; categories: NotificationCategory[] | null; - channel_type: 'discord' | 'slack' | 'webhook'; + channel_type: 'discord' | 'slack' | 'webhook' | 'apprise'; channel_url: string; + config: { mode: 'keyed' | 'stateless'; tags?: string; has_urls: boolean; providers?: string[]; url_count?: number } | null; priority: number; enabled: boolean; created_at: number; @@ -43,12 +45,14 @@ const CHANNEL_LABELS: Record = { discord: 'Discord', slack: 'Slack', webhook: 'Webhook', + apprise: 'Apprise', }; const CHANNEL_PLACEHOLDERS: Record = { discord: 'https://discord.com/api/webhooks/...', slack: 'https://hooks.slack.com/services/...', webhook: 'https://example.com/webhook', + apprise: 'http://apprise.local/notify', }; export function NotificationRoutingSection() { @@ -70,8 +74,15 @@ export function NotificationRoutingSection() { const [formStacks, setFormStacks] = useState([]); const [formLabelIds, setFormLabelIds] = useState([]); const [formCategories, setFormCategories] = useState([]); - const [formChannelType, setFormChannelType] = useState<'discord' | 'slack' | 'webhook'>('discord'); + const [formChannelType, setFormChannelType] = useState<'discord' | 'slack' | 'webhook' | 'apprise'>('discord'); const [formChannelUrl, setFormChannelUrl] = useState(''); + const [formAppriseUrls, setFormAppriseUrls] = useState(''); + const [formAppriseTags, setFormAppriseTags] = useState(''); + const [appriseEndpointDirty, setAppriseEndpointDirty] = useState(false); + const [appriseConfigDirty, setAppriseConfigDirty] = useState(false); + /** Original Apprise mode when editing; drives preserve hints and forces a config write on mode switch. */ + const [editAppriseOriginalMode, setEditAppriseOriginalMode] = useState<'keyed' | 'stateless' | null>(null); + const [editOriginalChannelType, setEditOriginalChannelType] = useState<'discord' | 'slack' | 'webhook' | 'apprise' | null>(null); const [formPriority, setFormPriority] = useState(0); const [formEnabled, setFormEnabled] = useState(true); @@ -123,6 +134,12 @@ export function NotificationRoutingSection() { setFormCategories([]); setFormChannelType('discord'); setFormChannelUrl(''); + setFormAppriseUrls(''); + setFormAppriseTags(''); + setAppriseEndpointDirty(false); + setAppriseConfigDirty(false); + setEditAppriseOriginalMode(null); + setEditOriginalChannelType(null); setFormPriority(0); setFormEnabled(true); setEditingId(null); @@ -138,6 +155,14 @@ export function NotificationRoutingSection() { setFormCategories(route.categories ? [...route.categories] : []); setFormChannelType(route.channel_type); setFormChannelUrl(route.channel_url); + setFormAppriseTags(route.config?.tags ?? ''); + setFormAppriseUrls(''); + setAppriseEndpointDirty(false); + setAppriseConfigDirty(false); + setEditAppriseOriginalMode( + route.channel_type === 'apprise' ? (route.config?.mode ?? null) : null, + ); + setEditOriginalChannelType(route.channel_type); setFormPriority(route.priority); setFormEnabled(route.enabled); setShowForm(true); @@ -145,8 +170,32 @@ export function NotificationRoutingSection() { const handleSave = async () => { if (!formName.trim()) { toast.error('Name is required.'); return; } - if (!formChannelUrl.trim() || !formChannelUrl.startsWith('https://')) { - toast.error('Channel URL must be a valid HTTPS URL.'); + if (!formChannelUrl.trim() || (formChannelType !== 'apprise' && !formChannelUrl.startsWith('https://'))) { + toast.error(formChannelType === 'apprise' ? 'Enter a valid Apprise endpoint.' : 'Channel URL must be a valid HTTPS URL.'); + return; + } + + const channelTypeChanged = Boolean( + editingId + && editOriginalChannelType + && formChannelType !== editOriginalChannelType, + ); + const appriseMode = formChannelType === 'apprise' ? classifyAppriseEndpoint(formChannelUrl) : null; + const appriseModeChanged = Boolean( + editingId + && editAppriseOriginalMode + && appriseMode + && appriseMode !== editAppriseOriginalMode, + ); + // Mode switch, type switch, or dirty tags/URLs need config; endpoint-only edits omit it so blank fields preserve destinations. + const needsAppriseConfig = formChannelType === 'apprise' + && (!editingId || appriseConfigDirty || appriseModeChanged || channelTypeChanged); + if ( + appriseMode === 'stateless' + && !formAppriseUrls.trim() + && (!editingId || appriseModeChanged || appriseConfigDirty || channelTypeChanged) + ) { + toast.error('Destination URLs are required for a stateless Apprise endpoint.'); return; } @@ -159,7 +208,16 @@ export function NotificationRoutingSection() { label_ids: formLabelIds.length > 0 ? formLabelIds : null, categories: formCategories.length > 0 ? formCategories : null, channel_type: formChannelType, - channel_url: formChannelUrl.trim(), + ...(formChannelType !== 'apprise' || !editingId || appriseEndpointDirty || channelTypeChanged + ? { channel_url: formChannelUrl.trim() } + : {}), + ...(needsAppriseConfig + ? { + config: appriseMode === 'stateless' + ? { urls: formAppriseUrls } + : { tags: formAppriseTags }, + } + : {}), priority: formPriority, enabled: formEnabled, }; @@ -287,6 +345,7 @@ export function NotificationRoutingSection() { ], ); + const isAppriseStateless = isStatelessAppriseEndpoint(formChannelUrl); const availableStackOptions = stackOptions.filter(o => !formStacks.includes(o.value)); const availableLabelOptions = useMemo( () => labelOptions.filter(l => !formLabelIds.includes(l.id)).map(l => ({ value: String(l.id), label: l.name })), @@ -431,8 +490,22 @@ export function NotificationRoutingSection() {
- setFormChannelType(v as 'discord' | 'slack' | 'webhook')}> - + { + const next = v as 'discord' | 'slack' | 'webhook' | 'apprise'; + if (next !== formChannelType) { + // Type change replaces credentials; never carry a redacted prior URL across types. + setFormChannelUrl(''); + setFormAppriseTags(''); + setFormAppriseUrls(''); + setAppriseEndpointDirty(true); + setAppriseConfigDirty(true); + } + setFormChannelType(next); + }} + > + Discord @@ -443,14 +516,36 @@ export function NotificationRoutingSection() { Webhook + + Apprise + setFormChannelUrl(e.target.value)} + onChange={e => { + setFormChannelUrl(e.target.value); + if (formChannelType === 'apprise') setAppriseEndpointDirty(true); + }} /> + {formChannelType === 'apprise' && ( + <> + { + if (isAppriseStateless) setFormAppriseUrls(e.target.value); + else setFormAppriseTags(e.target.value); + setAppriseConfigDirty(true); + }} + /> + {editingId !== null && isAppriseStateless && editAppriseOriginalMode === 'stateless' && !formAppriseUrls && ( +

Leave destination URLs blank to preserve the configured destinations.

+ )} + + )}
@@ -594,7 +689,7 @@ export function NotificationRoutingSection() { Matches all alerts )} | - + {route.channel_url} {route.priority !== 0 && ( diff --git a/frontend/src/components/settings/NotificationsSection.tsx b/frontend/src/components/settings/NotificationsSection.tsx index de1ba118..652ddbd2 100644 --- a/frontend/src/components/settings/NotificationsSection.tsx +++ b/frontend/src/components/settings/NotificationsSection.tsx @@ -1,4 +1,4 @@ -import { useState, useEffect } from 'react'; +import { useState, useEffect, useRef } from 'react'; import { Tabs, TabsContent, TabsList, TabsTrigger, TabsHighlight, TabsHighlightItem } from '@/components/ui/tabs'; import { springs } from '@/lib/motion'; import { Button } from '@/components/ui/button'; @@ -13,42 +13,78 @@ import { SettingsSection } from './SettingsSection'; import { SettingsField } from './SettingsField'; import { SettingsActions, SettingsPrimaryButton } from './SettingsActions'; import { useMastheadStats } from './MastheadStatsContext'; +import { classifyAppriseEndpoint, isKeyedAppriseEndpoint, isStatelessAppriseEndpoint } from '@/lib/appriseEndpoint'; -export function NotificationsSection() { - const { activeNode } = useNodes(); +type ChannelType = 'discord' | 'slack' | 'webhook' | 'apprise'; - const [notifTab, setNotifTab] = useState<'discord' | 'slack' | 'webhook'>('discord'); - const [agents, setAgents] = useState>({ +function emptyAgents(): Record { + return { discord: { type: 'discord', url: '', enabled: false }, slack: { type: 'slack', url: '', enabled: false }, webhook: { type: 'webhook', url: '', enabled: false }, - }); + apprise: { type: 'apprise', url: '', enabled: false, config: null }, + }; +} + +function appriseWriteConfig(agent: Agent): { urls: string } | { tags: string } { + if (isStatelessAppriseEndpoint(agent.url)) { + return { urls: agent.config?.urls ?? '' }; + } + return { tags: agent.config?.tags ?? '' }; +} + +function hasStoredAppriseAgent(agent: Agent): boolean { + // Stateless public URLs are not redacted; treat a public mode summary (or keyed redaction) as stored. + return Boolean(agent.config?.mode) || agent.url.includes(''); +} + +export function NotificationsSection() { + const { activeNode } = useNodes(); + const activeNodeIdRef = useRef(activeNode?.id); + useEffect(() => { activeNodeIdRef.current = activeNode?.id; }, [activeNode?.id]); + + const [notifTab, setNotifTab] = useState('discord'); + const [agents, setAgents] = useState>(emptyAgents); const [isSavingAgent, setIsSavingAgent] = useState>({}); const [isTestingAgent, setIsTestingAgent] = useState>({}); + const [appriseUrlDirty, setAppriseUrlDirty] = useState(false); + const [appriseConfigDirty, setAppriseConfigDirty] = useState(false); const fetchAgents = async () => { + const requestNodeId = activeNode?.id; try { - const res = await apiFetch('/agents'); - if (res.ok) { - const data: Agent[] = await res.json(); - setAgents(prev => { - const next = { ...prev }; - data.forEach(a => { next[a.type] = a; }); - return next; - }); - } + const res = await apiFetch('/agents', { + // Bind the request to the node captured when this fetch started. + nodeId: typeof requestNodeId === 'number' ? requestNodeId : undefined, + }); + if (!res.ok) return; + const data: Agent[] = await res.json(); + // Compare after body parse so a slow json() cannot commit after a node switch. + if (activeNodeIdRef.current !== requestNodeId) return; + const next = emptyAgents(); + data.forEach(a => { + if (a.type in next) next[a.type as ChannelType] = a; + }); + setAgents(next); + setAppriseUrlDirty(false); + setAppriseConfigDirty(false); } catch (e) { console.error('Failed to fetch agents', e); } }; - useEffect(() => { fetchAgents(); }, [activeNode?.id]); // eslint-disable-line react-hooks/exhaustive-deps + useEffect(() => { + setAgents(emptyAgents()); + setAppriseUrlDirty(false); + setAppriseConfigDirty(false); + void fetchAgents(); + }, [activeNode?.id]); // eslint-disable-line react-hooks/exhaustive-deps const enabledCount = Object.values(agents).filter(a => a.enabled).length; useMastheadStats([ { label: 'CHANNELS', - value: `${enabledCount}/3`, + value: `${enabledCount}/4`, tone: enabledCount > 0 ? 'value' : 'subtitle', }, ]); @@ -60,15 +96,47 @@ export function NotificationsSection() { })); }; + const handleAppriseConfigPatch = (patch: { urls?: string; tags?: string }) => { + setAppriseConfigDirty(true); + setAgents(prev => ({ + ...prev, + apprise: { ...prev.apprise, config: { ...prev.apprise.config, ...patch } }, + })); + }; + const saveAgent = async (type: string) => { setIsSavingAgent(prev => ({ ...prev, [type]: true })); try { + const agent = agents[type]; + const body: Record = { + type: agent.type, + enabled: agent.enabled, + }; + + if (type !== 'apprise') { + body.url = agent.url; + } else { + const stored = hasStoredAppriseAgent(agent); + // Omit url/config on clean saves (including enable toggles) so preserve-on-write keeps destinations. + // URL-only edits omit config so blank destination fields do not wipe stored URLs. + if (appriseUrlDirty || !stored) { + body.url = agent.url.trim(); + } + const storedMode = agent.config?.mode ?? null; + const nextMode = classifyAppriseEndpoint(agent.url); + const modeChanged = Boolean(stored && storedMode && nextMode && storedMode !== nextMode); + if (appriseConfigDirty || !stored || modeChanged) { + body.config = appriseWriteConfig(agent); + } + } + const res = await apiFetch('/agents', { method: 'POST', - body: JSON.stringify(agents[type]), + body: JSON.stringify(body), }); if (res.ok) { toast.success(`${type.charAt(0).toUpperCase() + type.slice(1)} settings saved.`); + await fetchAgents(); } else { const err = await res.json().catch(() => ({})); toast.error(err?.error || err?.message || 'Something went wrong.'); @@ -80,16 +148,33 @@ export function NotificationsSection() { } }; + const appriseCanTest = (() => { + const agent = agents.apprise; + if (!agent.url.trim() || agent.url.includes('')) return false; + if (isStatelessAppriseEndpoint(agent.url)) { + return Boolean(agent.config?.urls?.trim()); + } + return true; + })(); + const testAgent = async (type: string) => { + if (type === 'apprise' && !appriseCanTest) { + toast.error('Enter a raw Apprise endpoint (and destination URLs for /notify) before testing.'); + return; + } if (!agents[type].url) { toast.error('Please enter a webhook URL first.'); return; } setIsTestingAgent(prev => ({ ...prev, [type]: true })); try { + const body: Record = { type, url: agents[type].url }; + if (type === 'apprise') { + body.config = appriseWriteConfig(agents.apprise); + } const res = await apiFetch('/notifications/test', { method: 'POST', - body: JSON.stringify({ type, url: agents[type].url }), + body: JSON.stringify(body), }); if (res.ok) { toast.success('Test notification sent!'); @@ -104,7 +189,7 @@ export function NotificationsSection() { } }; - const renderAgentTab = (type: 'discord' | 'slack' | 'webhook', title: string) => ( + const renderAgentTab = (type: ChannelType, title: string) => ( handleAgentChange(type, 'url', e.target.value)} + onChange={(e) => { + if (type === 'apprise') setAppriseUrlDirty(true); + handleAgentChange(type, 'url', e.target.value); + }} /> + {type === 'apprise' && isStatelessAppriseEndpoint(agents.apprise.url) && ( + + handleAppriseConfigPatch({ urls: e.target.value })} + /> + + )} + {type === 'apprise' && isKeyedAppriseEndpoint(agents.apprise.url) && ( + + handleAppriseConfigPatch({ tags: e.target.value })} + /> + + )} + {type === 'apprise' && agents.apprise.url.trim() && !isKeyedAppriseEndpoint(agents.apprise.url) && !isStatelessAppriseEndpoint(agents.apprise.url) && ( +

+ Enter an endpoint ending in /notify or /notify/{key} to configure Apprise. +

+ )} -