feat(playout): allow harbor ssl configuration
This commit is contained in:
parent
8764feded9
commit
b2fc3a5ecf
17 changed files with 248 additions and 13 deletions
|
@ -1,5 +1,5 @@
|
|||
from pathlib import Path
|
||||
from typing import List, Literal
|
||||
from typing import List, Literal, Optional
|
||||
|
||||
from libretime_shared.config import (
|
||||
BaseConfig,
|
||||
|
@ -7,7 +7,7 @@ from libretime_shared.config import (
|
|||
RabbitMQConfig,
|
||||
StreamConfig,
|
||||
)
|
||||
from pydantic import BaseModel
|
||||
from pydantic import BaseModel, root_validator
|
||||
|
||||
CACHE_DIR = Path.cwd() / "scheduler"
|
||||
RECORD_DIR = Path.cwd() / "recorder"
|
||||
|
@ -33,6 +33,23 @@ class LiquidsoapConfig(BaseModel):
|
|||
|
||||
harbor_listen_address: List[str] = ["0.0.0.0"]
|
||||
|
||||
harbor_ssl_certificate: Optional[str] = None
|
||||
harbor_ssl_private_key: Optional[str] = None
|
||||
harbor_ssl_password: Optional[str] = None
|
||||
|
||||
@root_validator
|
||||
@classmethod
|
||||
def _validate_harbor_ssl(cls, values: dict):
|
||||
harbor_ssl_certificate = values.get("harbor_ssl_certificate")
|
||||
harbor_ssl_private_key = values.get("harbor_ssl_private_key")
|
||||
if harbor_ssl_certificate is not None and harbor_ssl_private_key is None:
|
||||
raise ValueError("missing 'harbor_ssl_private_key' value")
|
||||
|
||||
if harbor_ssl_certificate is None and harbor_ssl_private_key is not None:
|
||||
raise ValueError("missing 'harbor_ssl_certificate' value")
|
||||
|
||||
return values
|
||||
|
||||
|
||||
class Config(BaseConfig):
|
||||
general: GeneralConfig
|
||||
|
|
|
@ -120,6 +120,14 @@ def input_main_on_disconnect() update_source_status("master_dj", false) end
|
|||
def input_show_on_connect(header) update_source_status("live_dj", true) end
|
||||
def input_show_on_disconnect() update_source_status("live_dj", false) end
|
||||
|
||||
def make_input_func(secure)
|
||||
if secure then
|
||||
input.harbor.ssl
|
||||
else
|
||||
input.harbor
|
||||
end
|
||||
end
|
||||
|
||||
def make_input_auth_handler(input_name)
|
||||
def auth_handler(user, password)
|
||||
log("user '#{user}' connected", label="#{input_name}_input")
|
||||
|
@ -144,9 +152,10 @@ s = switch(id="switch:blank+schedule",
|
|||
)
|
||||
|
||||
s = if input_show_port != 0 and input_show_mount != "" then
|
||||
input_show_func = make_input_func(input_show_secure)
|
||||
input_show_source =
|
||||
audio_to_stereo(
|
||||
input.harbor(id="harbor:input_show",
|
||||
input_show_func(id="harbor:input_show",
|
||||
input_show_mount,
|
||||
port=input_show_port,
|
||||
auth=make_input_auth_handler("show"),
|
||||
|
@ -166,9 +175,10 @@ else
|
|||
end
|
||||
|
||||
s = if input_main_port != 0 and input_main_mount != "" then
|
||||
input_main_func = make_input_func(input_main_secure)
|
||||
input_main_source =
|
||||
audio_to_stereo(
|
||||
input.harbor(id="harbor:input_main",
|
||||
input_main_func(id="harbor:input_main",
|
||||
input_main_mount,
|
||||
port=input_main_port,
|
||||
auth=make_input_auth_handler("main"),
|
||||
|
|
|
@ -5,8 +5,10 @@
|
|||
# Inputs
|
||||
input_main_mount = {{ config.stream.inputs.main.mount | quote }}
|
||||
input_main_port = {{ config.stream.inputs.main.port }}
|
||||
input_main_secure = {{ config.stream.inputs.main.secure | string | lower }}
|
||||
input_show_mount = {{ config.stream.inputs.show.mount | quote }}
|
||||
input_show_port = {{ config.stream.inputs.show.port }}
|
||||
input_show_secure = {{ config.stream.inputs.show.secure | string | lower }}
|
||||
|
||||
# Settings
|
||||
{% if paths.log_filepath is defined -%}
|
||||
|
@ -21,6 +23,14 @@ set("server.telnet.port", {{ config.liquidsoap.server_listen_port }})
|
|||
|
||||
set("harbor.bind_addrs", ["{{ config.liquidsoap.harbor_listen_address | join('", "') }}"])
|
||||
|
||||
{% if config.liquidsoap.harbor_ssl_certificate -%}
|
||||
set("harbor.ssl.certificate", "{{ config.liquidsoap.harbor_ssl_certificate }}")
|
||||
set("harbor.ssl.private_key", "{{ config.liquidsoap.harbor_ssl_private_key }}")
|
||||
{% if config.liquidsoap.harbor_ssl_password -%}
|
||||
set("harbor.ssl.password", "{{ config.liquidsoap.harbor_ssl_password }}")
|
||||
{%- endif %}
|
||||
{% endif -%}
|
||||
|
||||
station_name = interactive.string("station_name", {{ info.station_name | quote }})
|
||||
|
||||
message_offline = interactive.string("message_offline", {{ preferences.message_offline | quote }})
|
||||
|
|
|
@ -8,8 +8,10 @@
|
|||
# Inputs
|
||||
input_main_mount = "main"
|
||||
input_main_port = 8001
|
||||
input_main_secure = false
|
||||
input_show_mount = "show"
|
||||
input_show_port = 8002
|
||||
input_show_secure = false
|
||||
|
||||
# Settings
|
||||
set("log.file.path", "/var/log/radio.log")
|
||||
|
@ -43,8 +45,50 @@
|
|||
# Inputs
|
||||
input_main_mount = "main"
|
||||
input_main_port = 8001
|
||||
input_main_secure = false
|
||||
input_show_mount = "show"
|
||||
input_show_port = 8002
|
||||
input_show_secure = false
|
||||
|
||||
# Settings
|
||||
set("log.file.path", "/var/log/radio.log")
|
||||
|
||||
set("server.telnet", true)
|
||||
set("server.telnet.bind_addr", "127.0.0.1")
|
||||
set("server.telnet.port", 1234)
|
||||
|
||||
set("harbor.bind_addrs", ["0.0.0.0"])
|
||||
|
||||
set("harbor.ssl.certificate", "/fake/ssl.cert")
|
||||
set("harbor.ssl.private_key", "/fake/ssl.key")
|
||||
|
||||
station_name = interactive.string("station_name", "LibreTime")
|
||||
|
||||
message_offline = interactive.string("message_offline", "LibreTime - offline")
|
||||
message_format = interactive.string("message_format", "0")
|
||||
input_fade_transition = interactive.float("input_fade_transition", 0.0)
|
||||
|
||||
%include "/fake/1.4/ls_script.liq"
|
||||
|
||||
|
||||
|
||||
gateway("started")
|
||||
|
||||
'''
|
||||
# ---
|
||||
# name: test_generate_entrypoint[stream_config2-1.4]
|
||||
'''
|
||||
# THIS FILE IS AUTO GENERATED. PLEASE DO NOT EDIT!
|
||||
###########################################################
|
||||
# The ignore() lines are to squash unused variable warnings
|
||||
|
||||
# Inputs
|
||||
input_main_mount = "main"
|
||||
input_main_port = 8001
|
||||
input_main_secure = false
|
||||
input_show_mount = "show"
|
||||
input_show_port = 8002
|
||||
input_show_secure = false
|
||||
|
||||
# Settings
|
||||
set("log.file.path", "/var/log/radio.log")
|
||||
|
@ -94,7 +138,7 @@
|
|||
|
||||
'''
|
||||
# ---
|
||||
# name: test_generate_entrypoint[stream_config2-1.4]
|
||||
# name: test_generate_entrypoint[stream_config3-1.4]
|
||||
'''
|
||||
# THIS FILE IS AUTO GENERATED. PLEASE DO NOT EDIT!
|
||||
###########################################################
|
||||
|
@ -103,8 +147,10 @@
|
|||
# Inputs
|
||||
input_main_mount = "main"
|
||||
input_main_port = 8001
|
||||
input_main_secure = false
|
||||
input_show_mount = "show"
|
||||
input_show_port = 8002
|
||||
input_show_secure = false
|
||||
|
||||
# Settings
|
||||
set("log.file.path", "/var/log/radio.log")
|
||||
|
@ -150,7 +196,7 @@
|
|||
|
||||
'''
|
||||
# ---
|
||||
# name: test_generate_entrypoint[stream_config3-1.4]
|
||||
# name: test_generate_entrypoint[stream_config4-1.4]
|
||||
'''
|
||||
# THIS FILE IS AUTO GENERATED. PLEASE DO NOT EDIT!
|
||||
###########################################################
|
||||
|
@ -159,8 +205,10 @@
|
|||
# Inputs
|
||||
input_main_mount = "main"
|
||||
input_main_port = 8001
|
||||
input_main_secure = false
|
||||
input_show_mount = "show"
|
||||
input_show_port = 8002
|
||||
input_show_secure = false
|
||||
|
||||
# Settings
|
||||
set("log.file.path", "/var/log/radio.log")
|
||||
|
@ -231,7 +279,7 @@
|
|||
|
||||
'''
|
||||
# ---
|
||||
# name: test_generate_entrypoint[stream_config4-1.4]
|
||||
# name: test_generate_entrypoint[stream_config5-1.4]
|
||||
'''
|
||||
# THIS FILE IS AUTO GENERATED. PLEASE DO NOT EDIT!
|
||||
###########################################################
|
||||
|
@ -240,8 +288,10 @@
|
|||
# Inputs
|
||||
input_main_mount = "main"
|
||||
input_main_port = 8001
|
||||
input_main_secure = false
|
||||
input_show_mount = "show"
|
||||
input_show_port = 8002
|
||||
input_show_secure = false
|
||||
|
||||
# Settings
|
||||
set("log.file.path", "/var/log/radio.log")
|
||||
|
@ -274,7 +324,7 @@
|
|||
|
||||
'''
|
||||
# ---
|
||||
# name: test_generate_entrypoint[stream_config5-1.4]
|
||||
# name: test_generate_entrypoint[stream_config6-1.4]
|
||||
'''
|
||||
# THIS FILE IS AUTO GENERATED. PLEASE DO NOT EDIT!
|
||||
###########################################################
|
||||
|
@ -283,8 +333,10 @@
|
|||
# Inputs
|
||||
input_main_mount = "main"
|
||||
input_main_port = 8001
|
||||
input_main_secure = false
|
||||
input_show_mount = "show"
|
||||
input_show_port = 8002
|
||||
input_show_secure = false
|
||||
|
||||
# Settings
|
||||
set("log.file.path", "/var/log/radio.log")
|
||||
|
|
|
@ -3,20 +3,33 @@ from typing import List
|
|||
from libretime_playout.config import Config
|
||||
|
||||
|
||||
def make_config_with_stream(**kwargs) -> Config:
|
||||
def make_config(**kwargs) -> Config:
|
||||
return Config(
|
||||
**{
|
||||
"general": {
|
||||
"public_url": "http://localhost:8080",
|
||||
"api_key": "some_api_key",
|
||||
},
|
||||
"stream": kwargs,
|
||||
**kwargs,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def make_config_with_stream(**kwargs) -> Config:
|
||||
return make_config(stream=kwargs)
|
||||
|
||||
|
||||
TEST_STREAM_CONFIGS: List[Config] = [
|
||||
make_config_with_stream(),
|
||||
make_config(),
|
||||
make_config(
|
||||
liquidsoap={
|
||||
"harbor_ssl_certificate": "/fake/ssl.cert",
|
||||
"harbor_ssl_private_key": "/fake/ssl.key",
|
||||
},
|
||||
stream={
|
||||
"system": [{"enabled": True, "kind": "pulseaudio"}],
|
||||
},
|
||||
),
|
||||
make_config_with_stream(
|
||||
outputs={
|
||||
"icecast": [
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue