import std/[json, options, tables, strutils, sequtils, parseutils] import std/[marshal, cgi, os, httpclient, times] import mustache import types, utils const templateOverview = staticRead "templates/overview.tpl" proc main() = var leaseFile = "./dnsmasq.lease" if getEnv("LEASE_PATH") != "": leaseFile = getEnv("LEASE_PATH") if not fileExists(leaseFile): echo "Lease file not found!" quit() let (duid, leases) = parseLeaseFile(leaseFile) case getRequestURI() of "": stdout.write("Content-type: text/plain\n\n") stdout.write("Not called from cgi?") of "/": var tplLeases = newSeq[Table[string, string]]() var wifiConnections : Table[string, JsonNode] if getEnv("MIKROTIK_HOST") != "" and getEnv("MIKROTIK_USER") != "" and getEnv("MIKROTIK_PASSWORD") != "": wifiConnections = getWifiConnections(getEnv("MIKROTIK_HOST"), getEnv("MIKROTIK_USER"), getEnv("MIKROTIK_PASSWORD")) for lease in leases: var element : Table[string, string]; if not lease.hostname.isSome: element["HOSTNAME"] = "-" else: element["HOSTNAME"] = lease.hostname.get if lease.type == v4: element["MAC_ADDRESS"] = lease.macAddress element["IP4_ADDRESS"] = lease.address element["IP6_ADDRESS"] = "-" if wifiConnections.hasKey(lease.macAddress): element["WIFI_SSID"] = wifiConnections[lease.macAddress]["ssid"].getStr element["WIFI_SIGNAL"] = wifiConnections[lease.macAddress]["signal"].getStr element["WIFI_RX_RATE"] = $(wifiConnections[lease.macAddress]["rx-rate"].getStr.parseInt / 1000000) element["WIFI_TX_RATE"] = $(wifiConnections[lease.macAddress]["tx-rate"].getStr.parseInt / 1000000) else: element["MAC_ADDRESS"] = "-" element["IP4_ADDRESS"] = "-" element["IP6_ADDRESS"] = lease.address let time = (lease.expiry - now()).toParts element["EXPIRY_TIME"] = $time[Days] & "d " & $time[Hours] & "h " & $time[Minutes] & "m" tplLeases.add(element) let context = newContext() context["PAGE"] = "Overview" context["LEASES"] = tplLeases stdout.write("Content-type: text/html\n\n") stdout.write(templateOverview.render(context)) of "/json": stdout.write("Content-type: application/json\n\n") stdout.write($$leases) main()