diff --git a/src/core/config/config.service.ts b/src/core/config/config.service.ts index 647630f7d..f165ae7e4 100644 --- a/src/core/config/config.service.ts +++ b/src/core/config/config.service.ts @@ -12,7 +12,7 @@ export interface HomebridgeConfig { pin: string; name: string; port: number; - advertiser?: 'ciao' | 'bonjour-hap'; + advertiser?: 'avahi' | 'ciao' | 'bonjour-hap'; bind?: string | string[]; }; mdns?: { diff --git a/src/modules/server/server.dto.ts b/src/modules/server/server.dto.ts index 9b6bd98dd..f49b0d3b4 100644 --- a/src/modules/server/server.dto.ts +++ b/src/modules/server/server.dto.ts @@ -11,7 +11,7 @@ export class HomebridgeNetworkInterfacesDto { export class HomebridgeMdnsSettingDto { @IsString() @IsDefined() - @IsIn(['ciao', 'bonjour-hap']) + @IsIn(['avahi', 'ciao', 'bonjour-hap']) @ApiProperty() - advertiser: 'ciao' | 'bonjour-hap'; + advertiser: 'avahi' | 'ciao' | 'bonjour-hap'; } diff --git a/test/e2e/server.e2e-spec.ts b/test/e2e/server.e2e-spec.ts index da8fc8f5b..167eb4a99 100644 --- a/test/e2e/server.e2e-spec.ts +++ b/test/e2e/server.e2e-spec.ts @@ -402,6 +402,23 @@ describe('ServerController (e2e)', () => { expect(res.json()).toEqual({ advertiser: 'ciao' }); }); + it('GET /server/mdns-advertiser (when set to avahi)', async () => { + const config: HomebridgeConfig = await fs.readJson(configService.configPath); + config.bridge.advertiser = 'avahi'; + await fs.writeJson(configService.configPath, config); + + const res = await app.inject({ + method: 'GET', + path: '/server/mdns-advertiser', + headers: { + authorization, + }, + }); + + expect(res.statusCode).toEqual(200); + expect(res.json()).toEqual({ advertiser: 'avahi' }); + }); + it('PUT /server/mdns-advertiser (bonjour-hap)', async () => { const initialConfig: HomebridgeConfig = await fs.readJson(configService.configPath); delete initialConfig.bridge.advertiser; @@ -448,6 +465,29 @@ describe('ServerController (e2e)', () => { expect(config.bridge.advertiser).toEqual('ciao'); }); + it('PUT /server/mdns-advertiser (avahi)', async () => { + const initialConfig: HomebridgeConfig = await fs.readJson(configService.configPath); + delete initialConfig.mdns; + await fs.writeJson(configService.configPath, initialConfig); + + const res = await app.inject({ + method: 'PUT', + path: '/server/mdns-advertiser', + headers: { + authorization, + }, + payload: { + advertiser: 'avahi', + }, + }); + + expect(res.statusCode).toEqual(200); + + // check the value was saved + const config = await fs.readJson(configService.configPath); + expect(config.bridge.advertiser).toEqual('avahi'); + }); + it('PUT /server/mdns-advertiser (invalid value)', async () => { const initialConfig: HomebridgeConfig = await fs.readJson(configService.configPath); delete initialConfig.mdns; diff --git a/ui/src/app/modules/settings/settings.component.html b/ui/src/app/modules/settings/settings.component.html index a9131cfdd..2e7895a4a 100644 --- a/ui/src/app/modules/settings/settings.component.html +++ b/ui/src/app/modules/settings/settings.component.html @@ -45,6 +45,7 @@