From 30667e0fc615c0339c0bb5cf39adbd48dc1c1436 Mon Sep 17 00:00:00 2001 From: Bryan Brooks Date: Mon, 23 Feb 2026 18:35:21 -0600 Subject: [PATCH] fix: resolve all lint errors for CI - Prefix unused nonce params with _ in proxy-auth.ts render functions - Remove unused imports (vi, beforeEach, afterEach) from test files - Use bare catch in admin-dashboard.ts access rule handler - Remove unused variable in authorize.test.ts --- gateway/src/routes/admin-dashboard.ts | 8 +++--- gateway/src/routes/admin.proxy.test.ts | 32 +++++++++++------------ gateway/src/routes/oidc/authorize.test.ts | 4 +-- gateway/src/utils/proxy-auth.test.ts | 26 +++++++++--------- 4 files changed, 34 insertions(+), 36 deletions(-) diff --git a/gateway/src/routes/admin-dashboard.ts b/gateway/src/routes/admin-dashboard.ts index 5bf257a..ce41d10 100644 --- a/gateway/src/routes/admin-dashboard.ts +++ b/gateway/src/routes/admin-dashboard.ts @@ -147,7 +147,7 @@ export function createAdminDashboardRoutes(
- +
@@ -258,7 +258,7 @@ export function createAdminDashboardRoutes(
- +
@@ -340,7 +340,7 @@ export function createAdminDashboardRoutes( description: description || null, }); res.redirect('/admin/dashboard/access?msg=Rule+added'); - } catch (_e) { + } catch { res.redirect('/admin/dashboard/access?msg=Failed+to+add+rule'); } }); @@ -1053,7 +1053,7 @@ export function createAdminDashboardRoutes(
- +
diff --git a/gateway/src/routes/admin.proxy.test.ts b/gateway/src/routes/admin.proxy.test.ts index 0b0f7b6..aa4751c 100644 --- a/gateway/src/routes/admin.proxy.test.ts +++ b/gateway/src/routes/admin.proxy.test.ts @@ -65,10 +65,10 @@ describe('Admin Proxy Origins', () => { const res = await request(app) .post('/admin/proxy/origins') .set(authHeader()) - .send({ origin: 'https://search.arcnode.xyz', name: 'SearXNG' }); + .send({ origin: 'https://search.example.com', name: 'SearXNG' }); expect(res.status).toBe(201); - expect(res.body.origin).toBe('https://search.arcnode.xyz'); + expect(res.body.origin).toBe('https://search.example.com'); expect(res.body.name).toBe('SearXNG'); expect(res.body.id).toBeGreaterThan(0); }); @@ -95,7 +95,7 @@ describe('Admin Proxy Origins', () => { const res = await request(app) .post('/admin/proxy/origins') .set(authHeader()) - .send({ origin: 'https://search.arcnode.xyz/path', name: 'Bad' }); + .send({ origin: 'https://search.example.com/path', name: 'Bad' }); expect(res.status).toBe(400); }); @@ -104,12 +104,12 @@ describe('Admin Proxy Origins', () => { await request(app) .post('/admin/proxy/origins') .set(authHeader()) - .send({ origin: 'https://search.arcnode.xyz', name: 'SearXNG' }); + .send({ origin: 'https://search.example.com', name: 'SearXNG' }); const res = await request(app) .post('/admin/proxy/origins') .set(authHeader()) - .send({ origin: 'https://search.arcnode.xyz', name: 'Duplicate' }); + .send({ origin: 'https://search.example.com', name: 'Duplicate' }); expect(res.status).toBe(409); }); @@ -118,11 +118,11 @@ describe('Admin Proxy Origins', () => { await request(app) .post('/admin/proxy/origins') .set(authHeader()) - .send({ origin: 'https://search.arcnode.xyz', name: 'SearXNG' }); + .send({ origin: 'https://search.example.com', name: 'SearXNG' }); await request(app) .post('/admin/proxy/origins') .set(authHeader()) - .send({ origin: 'https://element.arcnode.xyz', name: 'Element' }); + .send({ origin: 'https://element.example.com', name: 'Element' }); const res = await request(app) .get('/admin/proxy/origins') @@ -136,7 +136,7 @@ describe('Admin Proxy Origins', () => { const created = await request(app) .post('/admin/proxy/origins') .set(authHeader()) - .send({ origin: 'https://search.arcnode.xyz', name: 'SearXNG' }); + .send({ origin: 'https://search.example.com', name: 'SearXNG' }); const res = await request(app) .delete(`/admin/proxy/origins/${created.body.id}`) @@ -246,13 +246,13 @@ describe('Admin Access Rules API', () => { origin_id: null, rule_type: 'allow', subject_type: 'handle_pattern', - subject_value: '*.arcnode.xyz', + subject_value: '*.example.com', description: 'PDS users', }); expect(res.status).toBe(201); expect(res.body.rule_type).toBe('allow'); - expect(res.body.subject_value).toBe('*.arcnode.xyz'); + expect(res.body.subject_value).toBe('*.example.com'); }); it('should create a deny rule', async () => { @@ -362,7 +362,7 @@ describe('Admin Access Rules API', () => { const origin = await request(app) .post('/admin/proxy/origins') .set(authHeader()) - .send({ origin: 'https://search.arcnode.xyz', name: 'SearXNG' }); + .send({ origin: 'https://search.example.com', name: 'SearXNG' }); await request(app) .post('/admin/proxy/access') @@ -380,7 +380,7 @@ describe('Admin Access Rules API', () => { origin_id: null, rule_type: 'allow', subject_type: 'handle_pattern', - subject_value: '*.arcnode.xyz', + subject_value: '*.example.com', }); const res = await request(app) @@ -397,7 +397,7 @@ describe('Admin Access Rules API', () => { const origin = await request(app) .post('/admin/proxy/origins') .set(authHeader()) - .send({ origin: 'https://search.arcnode.xyz', name: 'SearXNG' }); + .send({ origin: 'https://search.example.com', name: 'SearXNG' }); await request(app) .post('/admin/proxy/access') @@ -406,13 +406,13 @@ describe('Admin Access Rules API', () => { origin_id: null, rule_type: 'allow', subject_type: 'handle_pattern', - subject_value: '*.arcnode.xyz', + subject_value: '*.example.com', }); const allowed = await request(app) .post('/admin/proxy/access/check') .set(authHeader()) - .send({ did: 'did:plc:test', handle: 'bkb.arcnode.xyz', origin_id: origin.body.id }); + .send({ did: 'did:plc:test', handle: 'user.example.com', origin_id: origin.body.id }); expect(allowed.status).toBe(200); expect(allowed.body.allowed).toBe(true); @@ -430,7 +430,7 @@ describe('Admin Access Rules API', () => { const origin = await request(app) .post('/admin/proxy/origins') .set(authHeader()) - .send({ origin: 'https://search.arcnode.xyz', name: 'SearXNG' }); + .send({ origin: 'https://search.example.com', name: 'SearXNG' }); const res = await request(app) .post('/admin/proxy/access/check') diff --git a/gateway/src/routes/oidc/authorize.test.ts b/gateway/src/routes/oidc/authorize.test.ts index 6edc48d..0bc7f48 100644 --- a/gateway/src/routes/oidc/authorize.test.ts +++ b/gateway/src/routes/oidc/authorize.test.ts @@ -159,10 +159,8 @@ describe('POST /oauth/authorize/passkey', () => { it('should return 400 for already-used auth code', async () => { createPendingAuthCode(db, 'used-code'); - // Mark it as used + // Mark it as used via raw SQL since there's no direct method db.updateAuthorizationCodeUser('used-code', 'did:plc:old', 'old.bsky.social'); - const authData = db.getAuthorizationCode('used-code'); - // Manually mark as used via raw SQL since there's no direct method db['db'].prepare('UPDATE authorization_codes SET used = 1 WHERE code = ?').run('used-code'); const res = await request(app) diff --git a/gateway/src/utils/proxy-auth.test.ts b/gateway/src/utils/proxy-auth.test.ts index 6fd5d48..825fdc2 100644 --- a/gateway/src/utils/proxy-auth.test.ts +++ b/gateway/src/utils/proxy-auth.test.ts @@ -85,21 +85,21 @@ describe('Auth Ticket', () => { it('should create and verify an auth ticket', () => { const ticket = createAuthTicket( 'session-789', 'did:plc:abc123', 'user.bsky.social', - 'https://search.arcnode.xyz', TEST_SECRET, + 'https://search.example.com', TEST_SECRET, ); const result = verifyAuthTicket(ticket, TEST_SECRET); expect(result).not.toBeNull(); expect(result!.sid).toBe('session-789'); expect(result!.did).toBe('did:plc:abc123'); expect(result!.handle).toBe('user.bsky.social'); - expect(result!.origin).toBe('https://search.arcnode.xyz'); + expect(result!.origin).toBe('https://search.example.com'); }); it('should reject an expired ticket', () => { vi.useFakeTimers(); const ticket = createAuthTicket( 'session-789', 'did:plc:abc123', 'user.bsky.social', - 'https://search.arcnode.xyz', TEST_SECRET, + 'https://search.example.com', TEST_SECRET, ); // Advance past 60s expiry vi.advanceTimersByTime(61 * 1000); @@ -111,7 +111,7 @@ describe('Auth Ticket', () => { it('should reject a ticket with wrong origin', () => { const ticket = createAuthTicket( 'session-789', 'did:plc:abc123', 'user.bsky.social', - 'https://search.arcnode.xyz', TEST_SECRET, + 'https://search.example.com', TEST_SECRET, ); const result = verifyAuthTicket(ticket, TEST_SECRET, 'https://evil.example.com'); expect(result).toBeNull(); @@ -120,9 +120,9 @@ describe('Auth Ticket', () => { it('should accept a ticket with matching expected origin', () => { const ticket = createAuthTicket( 'session-789', 'did:plc:abc123', 'user.bsky.social', - 'https://search.arcnode.xyz', TEST_SECRET, + 'https://search.example.com', TEST_SECRET, ); - const result = verifyAuthTicket(ticket, TEST_SECRET, 'https://search.arcnode.xyz'); + const result = verifyAuthTicket(ticket, TEST_SECRET, 'https://search.example.com'); expect(result).not.toBeNull(); expect(result!.sid).toBe('session-789'); }); @@ -130,7 +130,7 @@ describe('Auth Ticket', () => { it('should reject a tampered ticket', () => { const ticket = createAuthTicket( 'session-789', 'did:plc:abc123', 'user.bsky.social', - 'https://search.arcnode.xyz', TEST_SECRET, + 'https://search.example.com', TEST_SECRET, ); const tampered = ticket.slice(0, -1) + 'x'; const result = verifyAuthTicket(tampered, TEST_SECRET); @@ -164,11 +164,11 @@ describe('parseCookies', () => { }); describe('isAllowedRedirect', () => { - const allowed = ['https://search.arcnode.xyz', 'https://element.arcnode.xyz']; + const allowed = ['https://search.example.com', 'https://element.example.com']; it('should allow a URL with an allowed origin', () => { - expect(isAllowedRedirect('https://search.arcnode.xyz/some/path', allowed)).toBe(true); - expect(isAllowedRedirect('https://element.arcnode.xyz/', allowed)).toBe(true); + expect(isAllowedRedirect('https://search.example.com/some/path', allowed)).toBe(true); + expect(isAllowedRedirect('https://element.example.com/', allowed)).toBe(true); }); it('should reject a URL with a disallowed origin', () => { @@ -180,17 +180,17 @@ describe('isAllowedRedirect', () => { }); it('should reject a URL with different port', () => { - expect(isAllowedRedirect('https://search.arcnode.xyz:8443/path', allowed)).toBe(false); + expect(isAllowedRedirect('https://search.example.com:8443/path', allowed)).toBe(false); }); it('should reject a URL with different scheme', () => { - expect(isAllowedRedirect('http://search.arcnode.xyz/path', allowed)).toBe(false); + expect(isAllowedRedirect('http://search.example.com/path', allowed)).toBe(false); }); }); describe('extractOrigin', () => { it('should extract origin from a full URL', () => { - expect(extractOrigin('https://search.arcnode.xyz/some/path?q=test')).toBe('https://search.arcnode.xyz'); + expect(extractOrigin('https://search.example.com/some/path?q=test')).toBe('https://search.example.com'); }); it('should return null for invalid URL', () => { -- knotmirror 0.0.1