diff --git a/hosts/pbx/secrets.yaml b/hosts/pbx/secrets.yaml index fc47f86..bb57413 100644 --- a/hosts/pbx/secrets.yaml +++ b/hosts/pbx/secrets.yaml @@ -3,6 +3,16 @@ fieldpoc: sip: ENC[AES256_GCM,data:B82q2sD5I6NUa+RphJL+f1IT5qpZYlpMunZUaN5JJ5I=,iv:YzDg/g1C1z7kV2R5LLNMhe2UvaRaurQKaq4SbGfFKmQ=,tag:NuWn3D8u6jiJFZFTaFvv3g==,type:str] wireguard: public-ip4: ENC[AES256_GCM,data:NifuhsgDA+/4c+Op9CAg4jhizFdup7FL9jQt4VLGqGzOaY9lMpAFvrWiW2o=,iv:zKN7QTIEo8+KjwtNPxhUVwD+6Xmz48gp9nDAg3bOazo=,tag:GQCBEFAD2en33gKXraXArw==,type:str] +yate: + accounts: + easybell-2: ENC[AES256_GCM,data:jPyZY87r++dNLZCv,iv:BMVICnZujyIbE4IYi+Z9tqn5rbWwnEcoHm9/jWAAhsc=,tag:tk/Vs0tOt6p+a3vD0bJMfw==,type:str] + easybell-3: ENC[AES256_GCM,data:JNQKClwQtYm4GMRp,iv:WsYzrY4vDPQ5voGkQsnOTFTeo09XbE1SfOT6cPv6NJw=,tag:M0hvDGUnFM8lRxRiXNMOUA==,type:str] + easybell-4: ENC[AES256_GCM,data:+bvA76qDKPfSwF/j,iv:Dtnn8JOnIHEXfwjqIWnNlAWdCVIzDbuz1VT6YVPo62w=,tag:NQrKHSV93u5ZAnwYu8EDHQ==,type:str] + easybell-5: ENC[AES256_GCM,data:yj8BuiShAb7gRapp,iv:R0Rj6+Bd54nb4vGfv2yD+H5miWaxLIiMwozgsq/cGN8=,tag:/iQ0r1rTOvDsb+Ik1Rg6oA==,type:str] + easybell-6: ENC[AES256_GCM,data:aAgbSrXbReqUkFq0,iv:VcAsb+246Qys0BJGpTwxTaj5LpQ5fuyJNys3EOMzt5k=,tag:7zXTQNtdsadRiZ/7DrtnHg==,type:str] + easybell-7: ENC[AES256_GCM,data:XU+9wmOTck+xXedv,iv:2ehV8RDzGY68BmlJf5u1oCG/G80uDtFBiA4MGotrFgU=,tag:+mGKoOBjmrB70iOoBTTsKA==,type:str] + easybell-8: ENC[AES256_GCM,data:mVjh6ybvPnT8YhXy,iv:l6RXSdK7Jq/ObOc0gx2fw/9SoZNyGaIAjsl9wBiI7UI=,tag:eIOi54s6RsmYHvrG15pPYQ==,type:str] + easybell-9: ENC[AES256_GCM,data:v0fo8FFrfQQn1H29,iv:jmDFvuRb4W12D9Gh6CLArymyf7efMvsQiELGksTa6Lk=,tag:wylK++mO98LZCsWd1DIT1Q==,type:str] sops: age: - recipient: age16s0cyttcsp40jup9vnreck6mw500ae8j4ayrmf0tg79ukhgua3vsf4m5j4 @@ -14,8 +24,8 @@ sops: TFN1ZFJ2cEZmcHoxSmU1c3o0Q0w1cnMKkT8uBrgL9zyL5PAcqJqQerUdJN8yieVO JwJvcU3I6reHuVkeNKGCZXdYrNMGeFPWwL88yHJW9MYjhO6xfDo8WQ== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-07-22T09:02:55Z" - mac: ENC[AES256_GCM,data:EYfRNPGHQYmxYPswTozFpd7Vp9j7PhV/Vop8dvvdr3JeAUGoHF2FHZt2Xxrni/wu3CSFW2jGLpMPXigiCxZndbGZhREjCaFrvtNIL/5fhmFV9hoAuW7jp8ydRbHoSB2wJ0d+O/YO4Y5uoKO+pnbmvWgMpHllrBvMMJ/+1tBgh5g=,iv:48VMeGQvhVTAgrtKNbyE9YTQLsp7vYlRPrm9cUMBC24=,tag:j9PPD8B7CYiojNKf6BhG+w==,type:str] + lastmodified: "2025-07-23T09:35:37Z" + mac: ENC[AES256_GCM,data:e1hoBiXA1BrLVTaf/siFWwjDSPvgaWYmfzMBjoIqShj1MnUg8vXBfPR89bhsPNtOkW7s0HVsgFeKBMFm0++xkDOb/Xy7gdzPltF4f8P0D5SrlcEoeHgRQWLCgxJLB4suKUBhUauccKKg1NlIVXw3MgizBjG7+bTfGDXZfVGGJy4=,iv:O0JE5V6rVkPnCpxVsGJUpeQZsmJF4ZxPTnqnLwZZnlg=,tag:AnejfZw44+8CnoDHS1KIsg==,type:str] pgp: - created_at: "2025-07-18T23:14:45Z" enc: |- diff --git a/hosts/pbx/services/fieldpoc/accounts.nix b/hosts/pbx/services/fieldpoc/accounts.nix new file mode 100644 index 0000000..0bf2ea2 --- /dev/null +++ b/hosts/pbx/services/fieldpoc/accounts.nix @@ -0,0 +1,63 @@ +{ + config, + lib, + pkgs, + ... +}: { + sops.secrets = lib.listToAttrs ( + map + (number: + lib.nameValuePair "yate/accounts/easybell-${toString number}" { + sopsFile = ../../secrets.yaml; + owner = "yate"; + }) + (lib.lists.range 2 9) + ); + + environment.etc."yate/accfile.conf" = { + mode = "symlink"; + source = "/var/run/yate/accfile.conf"; + }; + + systemd.services.yate.serviceConfig = let + easybellAccount = name: username: let + title = "easybell-${toString name}"; + secretPath = config.sops.secrets."yate/accounts/${title}".path; + in '' + [${title}] + enabled=yes + protocol=sip + username=${username} + password=$(cat "${secretPath}") + registrar=pbx.easybell.de + ''; + accounts = [ + (easybellAccount 2 "CPBX-61tkfwsx-000004") + (easybellAccount 3 "CPBX-61tkfwsx-000005") + (easybellAccount 4 "CPBX-61tkfwsx-000006") + (easybellAccount 5 "CPBX-61tkfwsx-000007") + (easybellAccount 6 "CPBX-61tkfwsx-000008") + (easybellAccount 7 "CPBX-61tkfwsx-000009") + (easybellAccount 8 "CPBX-61tkfwsx-000010") + (easybellAccount 9 "CPBX-61tkfwsx-000011") + ]; + in { + RuntimeDirectory = "yate"; + RuntimeDirectoryMode = lib.mkForce "2750"; + ExecStartPre = pkgs.writeShellScript "yate-pre-start" '' + cat > "$RUNTIME_DIRECTORY/accfile.conf" << EOF + ${lib.concatStringsSep "\n" accounts} + EOF + ''; + }; + + services.yate.config = { + yate.modules."regexroute.yate" = "enable"; + regexroute.default = let + matchCalled = account: ''''${called}^${account}$''; + in { + "${matchCalled "CPBX-61tkfwsx-000004"}" = "sip/sip:1337@192.168.98.11"; + #"^.*$" = ''echo REGEXROUTE DEBUG called=''${called} address=''${address} callsource=''${callsource} formats=''${formats} id=''${id} peerid=''${peerid} ip_host=''${ip_host} ip_port=''${ip_port} overlapped=''${overlapped} rtp_forward=''${rtp_forward} type=''${type} username=''${username} line=''${line} account=''${account} caller=''${caller} called=''${called} module=''${module}''; + }; + }; +} diff --git a/hosts/pbx/services/fieldpoc/default.nix b/hosts/pbx/services/fieldpoc/default.nix index 949f1bd..17c9af7 100644 --- a/hosts/pbx/services/fieldpoc/default.nix +++ b/hosts/pbx/services/fieldpoc/default.nix @@ -5,6 +5,10 @@ to = 11250; }; in { + imports = [ + ./accounts.nix + ]; + sops.secrets."fieldpoc/omm" = { sopsFile = ../../secrets.yaml; owner = "fieldpoc";