From 6b9b4a10e80872680002f2b91602b18548cbf328 Mon Sep 17 00:00:00 2001 From: Julian Waller Date: Fri, 9 Aug 2024 23:07:00 +0100 Subject: [PATCH] feat: add mdns and installname to api and webui --- satellite/src/apiTypes.ts | 11 ++++++++ satellite/src/config.ts | 8 ++++++ satellite/src/rest.ts | 20 +++++++++++++++ webui/src/SettingsForm.tsx | 51 ++++++++++++++++++++++++++++++++++---- 4 files changed, 85 insertions(+), 5 deletions(-) diff --git a/satellite/src/apiTypes.ts b/satellite/src/apiTypes.ts index d8a1569..d2e46b1 100644 --- a/satellite/src/apiTypes.ts +++ b/satellite/src/apiTypes.ts @@ -12,8 +12,12 @@ export interface ApiConfigData { host: string port: number + installationName: string + httpEnabled: boolean httpPort: number + + mdnsEnabled: boolean } export function compileStatus(client: CompanionSatelliteClient): ApiStatusResponse { @@ -29,8 +33,12 @@ export function compileConfig(appConfig: Conf): ApiConfigData { host: appConfig.get('remoteIp'), port: appConfig.get('remotePort'), + installationName: appConfig.get('installationName'), + httpEnabled: appConfig.get('restEnabled'), httpPort: appConfig.get('restPort'), + + mdnsEnabled: appConfig.get('mdnsEnabled'), } } @@ -40,4 +48,7 @@ export function updateConfig(appConfig: Conf, newConfig: Partia if (newConfig.httpEnabled !== undefined) appConfig.set('restEnabled', newConfig.httpEnabled) if (newConfig.httpPort !== undefined) appConfig.set('restPort', newConfig.httpPort) + + if (newConfig.mdnsEnabled !== undefined) appConfig.set('mdnsEnabled', newConfig.mdnsEnabled) + if (newConfig.installationName !== undefined) appConfig.set('installationName', newConfig.installationName) } diff --git a/satellite/src/config.ts b/satellite/src/config.ts index a169f07..cf5fd5d 100644 --- a/satellite/src/config.ts +++ b/satellite/src/config.ts @@ -5,6 +5,8 @@ export interface SatelliteConfig { remoteIp: string remotePort: number + installationName: string + restEnabled: boolean restPort: number @@ -25,6 +27,12 @@ export const satelliteConfigSchema: Schema = { default: 16622, }, + installationName: { + type: 'string', + description: 'Name for this Satellite installation', + default: 'TODO - something here', + }, + restEnabled: { type: 'boolean', description: 'Enable HTTP api', diff --git a/satellite/src/rest.ts b/satellite/src/rest.ts index 93766c8..859fdc2 100644 --- a/satellite/src/rest.ts +++ b/satellite/src/rest.ts @@ -112,6 +112,26 @@ export class RestServer { partialConfig.port = port } + const installationName = body.installationName + if (installationName !== undefined) { + if (typeof installationName === 'string') { + partialConfig.installationName = installationName + } else { + ctx.status = 400 + ctx.body = 'Invalid installationName' + } + } + + const mdnsEnabled = body.mdnsEnabled + if (mdnsEnabled !== undefined) { + if (typeof mdnsEnabled === 'boolean') { + partialConfig.mdnsEnabled = mdnsEnabled + } else { + ctx.status = 400 + ctx.body = 'Invalid mdnsEnabled' + } + } + // Ensure some fields cannot be changed delete partialConfig.httpEnabled delete partialConfig.httpPort diff --git a/webui/src/SettingsForm.tsx b/webui/src/SettingsForm.tsx index b653a55..44fb5e8 100644 --- a/webui/src/SettingsForm.tsx +++ b/webui/src/SettingsForm.tsx @@ -70,7 +70,7 @@ function SettingsFormInner({ host: value, })) }, - [setModifiedConfig] + [setModifiedConfig], ) const setPort = useCallback( (e: React.ChangeEvent) => { @@ -81,7 +81,7 @@ function SettingsFormInner({ port: value, })) }, - [setModifiedConfig] + [setModifiedConfig], ) const setHttpEnabled = useCallback( (e: React.ChangeEvent) => { @@ -92,7 +92,7 @@ function SettingsFormInner({ httpEnabled: value, })) }, - [setModifiedConfig] + [setModifiedConfig], ) const setHttpPort = useCallback( @@ -104,7 +104,29 @@ function SettingsFormInner({ httpPort: value, })) }, - [setModifiedConfig] + [setModifiedConfig], + ) + const setMdnsEnabled = useCallback( + (e: React.ChangeEvent) => { + const value = !!e.currentTarget.checked + + setModifiedConfig((oldConfig) => ({ + ...oldConfig, + mdnsEnabled: value, + })) + }, + [setModifiedConfig], + ) + const setInstallationName = useCallback( + (e: React.ChangeEvent) => { + const value = e.currentTarget.value + + setModifiedConfig((oldConfig) => ({ + ...oldConfig, + installationName: value, + })) + }, + [setModifiedConfig], ) const saveConfigFull = useCallback( @@ -113,7 +135,7 @@ function SettingsFormInner({ saveConfig() }, - [saveConfig] + [saveConfig], ) return ( @@ -145,6 +167,25 @@ function SettingsFormInner({ + + MDNS Announce + + + Announce this Satellite installation to the network. This allows for easy setup from inside Companion. + + + + + Installation name + + Name to use for this installation in MDNS announcements + + {includeApiEnable && ( <> HTTP Interface & API