mob next [ci-skip] [ci skip] [skip ci]

lastFile:vars/per-machine/buna/phonebox/owner-name/value
This commit is contained in:
2025-12-29 14:49:56 +07:00
parent 4e83773e21
commit 312ff0c100
8 changed files with 83 additions and 3 deletions

View File

@@ -1,4 +1,7 @@
{ clanLib, ... }: {
clanLib,
...
}:
{ {
_class = "clan.service"; _class = "clan.service";
manifest.name = "phonebox"; manifest.name = "phonebox";
@@ -14,6 +17,11 @@
description = "An Ethernet interface that connect to ATA box."; description = "An Ethernet interface that connect to ATA box.";
default = "enp2s0"; default = "enp2s0";
}; };
options.ownerName = lib.mkOption {
type = lib.types.str;
description = "";
default = "";
};
}; };
perInstance = perInstance =
{ {
@@ -22,6 +30,7 @@
... ...
}: }:
{ {
nixosModule = nixosModule =
{ {
lib, lib,
@@ -34,12 +43,57 @@
propagatedNativeBuildInputs = [ pkgs.spandsp3 ]; propagatedNativeBuildInputs = [ pkgs.spandsp3 ];
}); });
machines = lib.attrNames roles.default.machines;
user = "asterisk"; user = "asterisk";
faxDir = "/run/asterisk/fax"; faxDir = "/run/asterisk/fax";
rtpPortFrom = 10000; rtpPortFrom = 10000;
rtpPortTo = 20000; rtpPortTo = 20000;
ata-interface = settings.ata-ethernet-iface; ata-interface = settings.ata-ethernet-iface;
contactList = builtins.map (machineName: {
name = "${clanLib.getPublicValue {
flake = config.clan.core.settings.directory;
machine = machineName;
generator = "phonebox";
file = "owner-name";
default = null;
}}";
number = "${
clanLib.getPublicValue {
flake = config.clan.core.settings.directory;
machine = machineName;
generator = "phonebox";
file = "server-prefix-number";
default = null;
}
}${
clanLib.getPublicValue {
flake = config.clan.core.settings.directory;
machine = machineName;
generator = "phonebox";
file = "ata-local-number";
default = null;
}
}";
}) machines;
createContactListTiff =
let
contactTXT = lib.concatStringsSep "\n" (
builtins.map (contact: "${contact.number}\t\t: \t\t${contact.name}") contactList
);
in
pkgs.writeShellApplication {
name = "create-contact-tiff";
text = ''
magick -background white -fill black -pointsize 20 -font DejaVu-Sans label:"${contactTXT}" "$1"
magick "$1" -border 20x50 -bordercolor white "$1"
magick "$1" -resize 1728x -units PixelsPerInch -compress Group4 -density 204x196 -monochrome -depth 1 "$1"
'';
runtimeInputs = [ pkgs.imagemagick ];
};
genServerSIPEndpoint = genServerSIPEndpoint =
{ hostname, address }: { hostname, address }:
'' ''
@@ -102,26 +156,35 @@
throw "clanService/yggdrasil is required"; throw "clanService/yggdrasil is required";
in in
{ {
clan.core.vars.generators.phonebox = { clan.core.vars.generators.phonebox = builtins.break {
files = { files = {
server-prefix-number.secret = false; server-prefix-number.secret = false;
ata-local-number.secret = false; ata-local-number.secret = false;
owner-name.secret = false;
}; };
prompts = { prompts = {
server-prefix-number = { server-prefix-number = {
type = "line"; type = "line";
persist = true;
description = "Server prefix number: indicate server to connect to [10XX]"; description = "Server prefix number: indicate server to connect to [10XX]";
}; };
ata-local-number = { ata-local-number = {
persist = true;
type = "line"; type = "line";
description = "Local suffix number: indicate local number on the server [XX00]"; description = "Local suffix number: indicate local number on the server [XX00]";
}; };
owner-name = {
persist = true;
type = "line";
description = "The owner's name for this unit";
};
}; };
script = '' script = ''
cat $prompts/server-prefix-number > $out/server-prefix-number cat $prompts/server-prefix-number > $out/server-prefix-number
cat $prompts/ata-local-number > $out/ata-local-number cat $prompts/ata-local-number > $out/ata-local-number
cat $prompts/owner-name > $out/owner-name
''; '';
}; };
@@ -199,7 +262,6 @@
package = lib.mkDefault asterisk; package = lib.mkDefault asterisk;
confFiles = confFiles =
let let
machines = lib.attrNames roles.default.machines;
nodes = builtins.foldl' ( nodes = builtins.foldl' (
nodes: name: nodes: name:
nodes nodes
@@ -275,6 +337,13 @@
same => n,Set(FAXFILE=${faxDir}/echo-''${UNIQUEID}.tiff) same => n,Set(FAXFILE=${faxDir}/echo-''${UNIQUEID}.tiff)
same => n,Set(FAXECHO=true) same => n,Set(FAXECHO=true)
exten => 888,1,Answer()
same => n,Set(FAXFILE=${faxDir}/contact.tiff)
same => n,System(${lib.getExe createContactListTiff} ''${FAXFILE})
same => n,Set(FAXECHO=true)
same => n,Playback(vm-goodbye)
same => n,Wait(3)
exten => h,1,GotoIf($[''${FAXECHO}]?sendfax) exten => h,1,GotoIf($[''${FAXECHO}]?sendfax)
same => n,Hangup() same => n,Hangup()
same => n(sendfax),Originate(PJSIP/00,app,SendFAX,''${FAXFILE}) same => n(sendfax),Originate(PJSIP/00,app,SendFAX,''${FAXFILE})
@@ -341,6 +410,10 @@
}; };
}; };
environment.systemPackages = [
createContactListTiff
];
systemd.tmpfiles.rules = [ systemd.tmpfiles.rules = [
"d ${faxDir} 0755 ${user} ${user} - -" "d ${faxDir} 0755 ${user} ${user} - -"
]; ];

View File

@@ -0,0 +1 @@
w-office

View File

@@ -0,0 +1 @@
usa-1

View File

@@ -0,0 +1 @@
usa-2

View File

@@ -0,0 +1 @@
whitehouse

View File

@@ -0,0 +1 @@
usa-3

View File

@@ -0,0 +1 @@
vi

View File

@@ -0,0 +1 @@
b4l