nix/modules/voip/provisioning/directory-json.nix

50 lines
1.6 KiB
Nix

{ lib, pkgs, cfg, models, allPhones }:
let
# Does any provisioned phone on this extension support intercom?
extensionHasIntercom = ext:
lib.any (phone: phone.extension == ext && models.${phone.model}.hasIntercom)
(lib.attrValues allPhones);
personContacts = lib.mapAttrsToList (_key: person:
lib.filterAttrs (_: v: v != null) {
displayName = person.displayName;
extension = person.extension;
intercomExtension =
if cfg.intercomPrefix != null && extensionHasIntercom person.extension
then "${cfg.intercomPrefix}${person.extension}"
else null;
mailboxCheckExtension =
if person.mailbox then "*97" else null;
}
) cfg.persons;
sharedPhoneContacts = lib.mapAttrsToList (_key: phone:
lib.filterAttrs (_: v: v != null) {
displayName = phone.displayName;
extension = phone.extension;
intercomExtension =
if cfg.intercomPrefix != null && models.${phone.model}.hasIntercom
then "${cfg.intercomPrefix}${phone.extension}"
else null;
}
) cfg.sharedPhones;
specialExtensions = lib.mapAttrsToList (ext: extCfg: {
displayName = extCfg.displayName;
extension = ext;
mode = extCfg.mode;
}) cfg.extensions;
directory = {
version = 1;
contacts = personContacts ++ sharedPhoneContacts;
specialExtensions = specialExtensions;
} // lib.optionalAttrs (cfg.sharedMailbox != null) {
sharedMailbox = {
inherit (cfg.sharedMailbox) displayName checkExtension;
};
};
in
pkgs.writeText "contacts.json" (builtins.toJSON directory)