weinturm-infra/hosts/pbx/services/fieldpoc/extensions.nix
2025-07-30 15:24:09 +02:00

100 lines
3 KiB
Nix

{
lib,
pkgs,
...
}: let
domain = "tel.weinturm.de";
mkphonebook = pkgs.python3.pkgs.buildPythonPackage {
pname = "fieldpoc-mkphonebook";
version = "1.0";
src = ./mkphonebook.py;
dontUnpack = true;
propagatedBuildInputs = [pkgs.makeWrapper];
format = "other";
installPhase = ''
mkdir -p $out/lib/mkphonebook
mkdir -p $out/bin
cp $src $out/lib/mkphonebook/script.py
makeWrapper ${pkgs.python3.interpreter} $out/bin/mkphonebook \
--add-flags "$out/lib/mkphonebook/script.py" \
--set PYTHONPATH "${pkgs.python3.pkgs.pyyaml}/${pkgs.python3.sitePackages}"
'';
};
webmanifest = lib.generators.toJSON {} {
name = "Weinturm";
short_name = "Telefonbuch";
icons = [
{
src = "/web-app-manifest-192x192.png";
sizes = "192x192";
type = "image/png";
purpose = "maskable";
}
{
src = "/web-app-manifest-512x512.png";
sizes = "512x512";
type = "image/png";
purpose = "maskable";
}
];
theme_color = "#ffffff";
background_color = "#300a8d";
display = "standalone";
};
webmanifestFile = pkgs.writeText "site.webmanifest" webmanifest;
webroot = pkgs.stdenvNoCC.mkDerivation {
name = "webroot-${domain}";
src = ./html;
dontBuild = true;
installPhase = ''
export PATH="$PATH:${pkgs.lib.makeBinPath [pkgs.imagemagick]}"
mkdir $out
cp "$src/favicon.svg" "$out/favicon.svg"
convert -background transparent "$src/favicon.svg" -define icon:auto-resize=16,24,32,48,64,72,96,128,256 "$out/favicon.ico"
convert -background transparent "$src/favicon.svg" -resize 180x180 "$out/apple-touch-icon.png"
convert -background transparent "$src/favicon.svg" -resize 96x96 "$out/favicon-96x96.png"
convert -background transparent "$src/favicon.svg" -resize 192x192 "$out/web-app-manifest-192x192.png"
convert -background transparent "$src/favicon.svg" -resize 512x512 "$out/web-app-manifest-512x512.png"
cp "${webmanifestFile}" "$out/site.webmanifest"
ln -s /persist/html/index.html "$out/index.html"
'';
};
in {
environment.systemPackages = [
(
pkgs.writeShellScriptBin "fieldpoc-load-extensions" ''
set -e
tmpfile="$(mktemp -p /tmp tmp.extensions.XXXXXXXXXX.json)"
trap "rm -f $tmpfile" 0 2 3 15
${pkgs.yq}/bin/yq \
'.extensions[] |= with_entries(select(.key | IN("name", "type", "dialout_allowed", "trunk", "static_target", "callgroup_members", "sip_password", "dect_ipei")))' \
"$1" > $tmpfile
cat "$tmpfile" | /run/wrappers/bin/sudo -u fieldpoc tee /var/lib/fieldpoc/extensions.json >/dev/null
curl -s --fail --json '{}' http://127.0.0.1:9437/reload
${mkphonebook}/bin/mkphonebook "$1" "/persist/html/index.html"
rm -f $tmpfile
''
)
];
services.nginx.virtualHosts = {
"${domain}" = {
serverAliases = ["tel.weinturm-open-air.de"];
enableACME = true;
forceSSL = true;
root = webroot;
};
};
}