{
  pkgs,
  lib,
  config,
  ...
}:
{
  sops.secrets."coturn/static-auth-secret" = {
    sopsFile = ../../../.secrets/hetzner/coturn.yaml; # bring your own password file
    restartUnits = [ "coturn.service" ];
    owner = "turnserver";
  };

  networking.firewall =
    let
      range = with config.services.coturn; [
        {
          from = min-port;
          to = max-port;
        }
      ];
    in
    {
      allowedUDPPortRanges = range;
      allowedTCPPorts = [
        3478
        3479
        5349
      ];
      allowedUDPPorts = [
        3478
        3479
        5349
      ];
    };

  # get a certificate
  security.acme.certs.${config.services.coturn.realm} = {
    # insert here the right configuration to obtain a certificate
    postRun = "systemctl restart coturn.service";
    group = "turnserver";
  };

  services.coturn = rec {
    enable = true;
    realm = "turn.hoyer.xyz";
    static-auth-secret-file = config.sops.secrets."coturn/static-auth-secret".path;
    use-auth-secret = true;
    lt-cred-mech = true;
    min-port = 49000;
    max-port = 50000;
    no-cli = true;
    cert = "${config.security.acme.certs.${realm}.directory}/full.pem";
    pkey = "${config.security.acme.certs.${realm}.directory}/key.pem";
    extraConfig = ''
      fingerprint
      total-quota=100
      bps-capacity=0
      stale-nonce=600
      cipher-list="ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384"
      no-loopback-peers
      no-multicast-peers
      no-tlsv1
      no-tlsv1_1
      # strongly encouraged options to decrease amplification attacks
      no-rfc5780
      no-stun-backward-compatibility
      response-origin-only-with-rfc5780
    '';
  };
}