feat: add static phonebook
This commit is contained in:
parent
6bb30f8227
commit
85d54363f2
4 changed files with 75 additions and 0 deletions
|
|
@ -146,6 +146,11 @@ in {
|
||||||
# };
|
# };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
phonebook = [
|
||||||
|
{ name = "Oma"; numbers = { Mobil = "+49151..."; Zuhause = "+494..."; }; }
|
||||||
|
{ name = "Opa"; numbers = { Zuhause = "+494..."; }; }
|
||||||
|
];
|
||||||
|
|
||||||
extensions = {
|
extensions = {
|
||||||
"*99" = { mode = "page"; displayName = "Durchsage an alle"; };
|
"*99" = { mode = "page"; displayName = "Durchsage an alle"; };
|
||||||
"*100" = { mode = "all"; displayName = "Alle rufen"; };
|
"*100" = { mode = "all"; displayName = "Alle rufen"; };
|
||||||
|
|
|
||||||
|
|
@ -90,6 +90,13 @@ in {
|
||||||
"= /intercom.xml" = { alias = "${directory.intercomFile}"; extraConfig = "default_type text/xml;"; };
|
"= /intercom.xml" = { alias = "${directory.intercomFile}"; extraConfig = "default_type text/xml;"; };
|
||||||
"= /contacts.json" = { alias = "${directoryJson}"; extraConfig = ''default_type application/json; add_header Access-Control-Allow-Origin "*";''; };
|
"= /contacts.json" = { alias = "${directoryJson}"; extraConfig = ''default_type application/json; add_header Access-Control-Allow-Origin "*";''; };
|
||||||
"= /auth" = { extraConfig = ''default_type text/plain; return 200 "AUTHORIZED";''; };
|
"= /auth" = { extraConfig = ''default_type text/plain; return 200 "AUTHORIZED";''; };
|
||||||
|
} // lib.optionalAttrs (cfg.phonebook != []) (
|
||||||
|
{ "= /phonebook.xml" = { alias = "${directory.phonebookMenuFile}"; extraConfig = "default_type text/xml;"; }; }
|
||||||
|
// lib.listToAttrs (lib.imap0 (i: _: {
|
||||||
|
name = "= /phonebook-${toString i}.xml";
|
||||||
|
value = { alias = "${lib.elemAt directory.phonebookDetailFiles i}"; extraConfig = "default_type text/xml;"; };
|
||||||
|
}) cfg.phonebook)
|
||||||
|
) // {
|
||||||
"/" = {
|
"/" = {
|
||||||
root = "${diagram.webRoot}";
|
root = "${diagram.webRoot}";
|
||||||
extraConfig = lib.optionalString (!hasRuntimeSecrets) "index index.html;";
|
extraConfig = lib.optionalString (!hasRuntimeSecrets) "index index.html;";
|
||||||
|
|
|
||||||
|
|
@ -306,6 +306,29 @@ in {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
phonebook = lib.mkOption {
|
||||||
|
default = [];
|
||||||
|
description = ''
|
||||||
|
External contacts shown in the phone directory. Example:
|
||||||
|
[
|
||||||
|
{ name = "Oma"; numbers = { Mobil = "+49151..."; Zuhause = "+494..."; }; }
|
||||||
|
{ name = "Opa"; numbers = { Zuhause = "+494..."; }; }
|
||||||
|
]
|
||||||
|
'';
|
||||||
|
type = lib.types.listOf (lib.types.submodule {
|
||||||
|
options = {
|
||||||
|
name = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
description = "Contact name shown in the directory listing.";
|
||||||
|
};
|
||||||
|
numbers = lib.mkOption {
|
||||||
|
type = lib.types.attrsOf lib.types.str;
|
||||||
|
description = ''Labelled phone numbers, e.g. { Mobil = "+49..."; Zuhause = "+49..."; }.'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
voicemailCheckExtension = lib.mkOption {
|
voicemailCheckExtension = lib.mkOption {
|
||||||
type = lib.types.str;
|
type = lib.types.str;
|
||||||
default = "*97";
|
default = "*97";
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ let
|
||||||
baseUrl = "http://${cfg.serverAddress}:${toString cfg.directoryPort}";
|
baseUrl = "http://${cfg.serverAddress}:${toString cfg.directoryPort}";
|
||||||
|
|
||||||
hasPageExtensions = lib.any (e: e.mode == "page") (lib.attrValues cfg.extensions);
|
hasPageExtensions = lib.any (e: e.mode == "page") (lib.attrValues cfg.extensions);
|
||||||
|
hasPhonebook = cfg.phonebook != [];
|
||||||
|
|
||||||
# Deduplicated directory entries: one per extension, using the displayName from
|
# Deduplicated directory entries: one per extension, using the displayName from
|
||||||
# allPhones (all phones sharing an extension have the same displayName).
|
# allPhones (all phones sharing an extension have the same displayName).
|
||||||
|
|
@ -27,6 +28,11 @@ let
|
||||||
<Name>Intercom / Durchsage</Name>
|
<Name>Intercom / Durchsage</Name>
|
||||||
<URL>${baseUrl}/intercom.xml</URL>
|
<URL>${baseUrl}/intercom.xml</URL>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
|
'' + lib.optionalString hasPhonebook ''
|
||||||
|
<MenuItem>
|
||||||
|
<Name>Externes Telefonbuch</Name>
|
||||||
|
<URL>${baseUrl}/phonebook.xml</URL>
|
||||||
|
</MenuItem>
|
||||||
'' + ''
|
'' + ''
|
||||||
</CiscoIPPhoneMenu>
|
</CiscoIPPhoneMenu>
|
||||||
'';
|
'';
|
||||||
|
|
@ -68,8 +74,42 @@ let
|
||||||
</CiscoIPPhoneDirectory>
|
</CiscoIPPhoneDirectory>
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
phonebookMenuXml = ''
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CiscoIPPhoneMenu>
|
||||||
|
<Title>Externes Telefonbuch</Title>
|
||||||
|
<Prompt>Bitte wählen</Prompt>
|
||||||
|
'' + lib.concatStringsSep "\n" (lib.imap0 (i: contact: ''
|
||||||
|
<MenuItem>
|
||||||
|
<Name>${contact.name}</Name>
|
||||||
|
<URL>${baseUrl}/phonebook-${toString i}.xml</URL>
|
||||||
|
</MenuItem>
|
||||||
|
'') cfg.phonebook)
|
||||||
|
+ ''
|
||||||
|
</CiscoIPPhoneMenu>
|
||||||
|
'';
|
||||||
|
|
||||||
|
mkContactXml = contact: ''
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CiscoIPPhoneDirectory>
|
||||||
|
<Title>${contact.name}</Title>
|
||||||
|
<Prompt>Bitte wählen</Prompt>
|
||||||
|
'' + lib.concatStringsSep "\n" (lib.mapAttrsToList (label: number: ''
|
||||||
|
<DirectoryEntry>
|
||||||
|
<Name>${label}</Name>
|
||||||
|
<Telephone>${number}</Telephone>
|
||||||
|
</DirectoryEntry>
|
||||||
|
'') contact.numbers)
|
||||||
|
+ ''
|
||||||
|
</CiscoIPPhoneDirectory>
|
||||||
|
'';
|
||||||
|
|
||||||
in {
|
in {
|
||||||
menuFile = pkgs.writeText "directory.xml" menuXml;
|
menuFile = pkgs.writeText "directory.xml" menuXml;
|
||||||
listFile = pkgs.writeText "directory-list.xml" listXml;
|
listFile = pkgs.writeText "directory-list.xml" listXml;
|
||||||
intercomFile = pkgs.writeText "intercom.xml" intercomXml;
|
intercomFile = pkgs.writeText "intercom.xml" intercomXml;
|
||||||
|
phonebookMenuFile = pkgs.writeText "phonebook.xml" phonebookMenuXml;
|
||||||
|
phonebookDetailFiles = lib.imap0 (i: contact:
|
||||||
|
pkgs.writeText "phonebook-${toString i}.xml" (mkContactXml contact)
|
||||||
|
) cfg.phonebook;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue