From 667474ed6547e0a9b433a0574238d3eaafed82c9 Mon Sep 17 00:00:00 2001 From: Donavan Becker Date: Wed, 5 Jan 2022 23:26:30 -0600 Subject: [PATCH 1/3] add avahi Advertiser --- src/modules/server/server.dto.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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'; } From 7df97e3c7e19afe9b08f7d491859015ddfe5ac65 Mon Sep 17 00:00:00 2001 From: Donavan Becker Date: Wed, 5 Jan 2022 23:42:48 -0600 Subject: [PATCH 2/3] added avahi advertiser --- src/core/config/config.service.ts | 2 +- src/modules/plugins/plugins.service.ts | 16 ++++++++ test/e2e/server.e2e-spec.ts | 40 +++++++++++++++++++ .../modules/settings/settings.component.html | 1 + 4 files changed, 58 insertions(+), 1 deletion(-) 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/plugins/plugins.service.ts b/src/modules/plugins/plugins.service.ts index 03e2859bd..7ee2c9c42 100755 --- a/src/modules/plugins/plugins.service.ts +++ b/src/modules/plugins/plugins.service.ts @@ -581,6 +581,22 @@ export class PluginsService { } // end 1.2.x -> 1.3.0 upgrade + // 1.3.x -> 1.4.0 upgrade set ciao as bridge advertiser + if (homebridge.installedVersion && homebridgeUpdateAction.version) { + const installedVersion = semver.parse(homebridge.installedVersion); + const targetVersion = semver.parse(homebridgeUpdateAction.version); + if (installedVersion.minor === 3 && targetVersion.minor > 3 && os.platform() === 'linux') { + try { + const config: HomebridgeConfig = await fs.readJson(this.configService.configPath); + config.bridge.advertiser = 'avahi'; + await fs.writeJsonSync(this.configService.configPath, config); + } catch (e) { + this.logger.warn('Could not update config.json', e.message); + } + } + } + // end 1.3.x -> 1.4.0 upgrade + await this.runNpmCommand( [...this.npm, 'install', ...installOptions, `${homebridge.name}@${homebridgeUpdateAction.version}`], installPath, 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 @@
From 8231c7ea7fa500d2a04ba27c5670ab17a6511102 Mon Sep 17 00:00:00 2001 From: Donavan Becker Date: Thu, 6 Jan 2022 04:25:45 -0600 Subject: [PATCH 3/3] Update plugins.service.ts --- src/modules/plugins/plugins.service.ts | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/modules/plugins/plugins.service.ts b/src/modules/plugins/plugins.service.ts index 7ee2c9c42..03e2859bd 100755 --- a/src/modules/plugins/plugins.service.ts +++ b/src/modules/plugins/plugins.service.ts @@ -581,22 +581,6 @@ export class PluginsService { } // end 1.2.x -> 1.3.0 upgrade - // 1.3.x -> 1.4.0 upgrade set ciao as bridge advertiser - if (homebridge.installedVersion && homebridgeUpdateAction.version) { - const installedVersion = semver.parse(homebridge.installedVersion); - const targetVersion = semver.parse(homebridgeUpdateAction.version); - if (installedVersion.minor === 3 && targetVersion.minor > 3 && os.platform() === 'linux') { - try { - const config: HomebridgeConfig = await fs.readJson(this.configService.configPath); - config.bridge.advertiser = 'avahi'; - await fs.writeJsonSync(this.configService.configPath, config); - } catch (e) { - this.logger.warn('Could not update config.json', e.message); - } - } - } - // end 1.3.x -> 1.4.0 upgrade - await this.runNpmCommand( [...this.npm, 'install', ...installOptions, `${homebridge.name}@${homebridgeUpdateAction.version}`], installPath,