diff --git a/configs/tegola.toml b/configs/tegola.toml index 250738d..aa65264 100644 --- a/configs/tegola.toml +++ b/configs/tegola.toml @@ -7,42 +7,6 @@ port = ":9090" type="file" # cache type basepath="/tmp/tegola" # cache specific config -# register data providers -[[providers]] -name = "bonn" # provider name is referenced from map layers -type = "mvt_postgis" # the type of data provider. currently only supports postgis -#uri = "postgres://tegola:supersecret@localhost:5432/tegola?sslmode=prefer" # PostGIS connection string (required) -uri = "postgres://tegola:@localhost:/tegola?host=/var/run/postgresql&sslmode=disable" # PostGIS connection string (required) -srid = 4326 # The default srid for this provider. If not provided it will be WebMercator (3857) - - [[providers.layers]] - name = "road" - geometry_fieldname = "wkb_geometry" - geometry_type="linestring" - id_fieldname = "ogc_fid" - sql = "SELECT ST_AsMVTGeom(wkb_geometry, !BBOX!) AS wkb_geometry, name, ogc_fid FROM all_roads WHERE wkb_geometry && !BBOX!" - - [[providers.layers]] - name = "main_roads" - geometry_fieldname = "wkb_geometry" - geometry_type="linestring" - id_fieldname = "ogc_fid" - sql = "SELECT ST_AsMVTGeom(wkb_geometry, !BBOX!) AS wkb_geometry, name, ogc_fid FROM main_roads WHERE wkb_geometry && !BBOX!" - - [[providers.layers]] - name = "lakes" - geometry_fieldname = "wkb_geometry" - geometry_type="polygon" - id_fieldname = "ogc_fid" - sql = "SELECT ST_AsMVTGeom(wkb_geometry, !BBOX!) AS wkb_geometry, name, ogc_fid FROM lakes WHERE wkb_geometry && !BBOX!" - - [[providers.layers]] - name = "h3" - geometry_fieldname = "wkb_geometry" - geometry_type="polygon" - id_fieldname = "ogc_fid" - sql = "SELECT ST_AsMVTGeom(wkb_geometry, !BBOX!) AS wkb_geometry, name, ogc_fid FROM hexes WHERE wkb_geometry && !BBOX!" - [[providers]] name = "nidus" # provider name is referenced from map layers type = "mvt_postgis" # the type of data provider. currently only supports postgis @@ -51,49 +15,77 @@ uri = "postgres://tegola:@localhost:/nidus-sync?host=/var/run/postgresql&sslmode srid = 4326 # The default srid for this provider. If not provided it will be WebMercator (3857) [[providers.layers]] - name = "h3_aggregation" + name = "mosquito_source" geometry_fieldname = "geometry" geometry_type="polygon" id_fieldname = "id" - sql = "SELECT ST_AsMVTGeom(geometry, !BBOX!) AS geometry, id, cell, count_, resolution FROM h3_aggregation WHERE geometry && !BBOX! !PARAM!" + sql = "SELECT ST_AsMVTGeom(geometry, !BBOX!) AS geometry, id, cell, count_, resolution FROM h3_aggregation WHERE type_ = 'MosquitoSource' AND geometry && !BBOX! !PARAM!" -[[maps]] -name = "bonn" -# center is lng, lat, zoom -center = [7.0982, 50.7374, 11.0] # set the center of the map so the user is auto navigated to Bonn + [[providers.layers]] + name = "service_request" + geometry_fieldname = "geometry" + geometry_type="polygon" + id_fieldname = "id" + sql = "SELECT ST_AsMVTGeom(geometry, !BBOX!) AS geometry, id, cell, count_, resolution FROM h3_aggregation WHERE type_ = 'ServiceRequest' AND geometry && !BBOX! !PARAM!" - [[maps.layers]] - provider_layer = "bonn.road" - min_zoom = 10 - max_zoom = 20 + [[providers.layers]] + name = "trap" + geometry_fieldname = "geometry" + geometry_type="polygon" + id_fieldname = "id" + sql = "SELECT ST_AsMVTGeom(geometry, !BBOX!) AS geometry, id, cell, count_, resolution FROM h3_aggregation WHERE type_ = 'Trap' AND geometry && !BBOX! !PARAM!" - [[maps.layers]] - provider_layer = "bonn.main_roads" - min_zoom = 5 - max_zoom = 20 +[[providers]] +name = "mosquito" # provider name is referenced from map layers +type = "mvt_postgis" # the type of data provider. currently only supports postgis +#uri = "postgres://tegola:supersecret@localhost:5432/tegola?sslmode=prefer" # PostGIS connection string (required) +uri = "postgres://tegola:@localhost:/nidus-sync?host=/var/run/postgresql&sslmode=disable" # PostGIS connection string (required) +srid = 4326 # The default srid for this provider. If not provided it will be WebMercator (3857) - [[maps.layers]] - provider_layer = "bonn.lakes" - min_zoom = 5 - max_zoom = 20 + [[providers.layers]] + name = "district" + geometry_fieldname = "geom_4326" + geometry_type="polygon" + id_fieldname = "gid" + sql = "SELECT agency, ST_AsMVTGeom(geom_4326, !BBOX!) as geom_4326, gid, regionid FROM import.district WHERE geom_4326 && !BBOX!" - [[maps.layers]] - provider_layer = "bonn.h3" - min_zoom = 3 - max_zoom = 20 + [[providers.layers]] + name = "report_location" + geometry_fieldname = "location" + geometry_type="point" + id_fieldname = "id" + sql = "SELECT address, created, id, ST_AsMVTGeom(location::geometry, !BBOX!) AS location, public_id, status, table_name FROM publicreport.report_location WHERE location && !BBOX!" [[maps]] name = "nidus" -center = [-119.175, 36.24, 11.0] # set the center of the map so the user is auto navigated to Bonn +center = [-119.175, 36.24, 11.0] # set the center of the map so the user is auto navigated to visalia [[maps.layers]] - provider_layer = "nidus.h3_aggregation" - #min_zoom = 5 - #max_zoom = 20 + provider_layer = "nidus.mosquito_source" + + [[maps.layers]] + provider_layer = "nidus.service_request" + + [[maps.layers]] + provider_layer = "nidus.trap" [[maps.params]] name = "organization_id" token = "!PARAM!" type = "int" sql = "AND organization_id = ?" - default_sql = "1" + default_sql = "0" + +[[maps]] +name = "mosquito" +center = [-119.175, 36.24, 11.0] + + [[maps.layers]] + provider_layer = "mosquito.district" + #min_zoom = 5 + #max_zoom = 20 + + [[maps.layers]] + provider_layer = "mosquito.report_location" + #min_zoom = 5 + #max_zoom = 20 diff --git a/flake.lock b/flake.lock index aa33e96..2fbf748 100644 --- a/flake.lock +++ b/flake.lock @@ -297,17 +297,17 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1767992550, - "narHash": "sha256-+UkmHyaQaT0glqPH7fgtCFFZOlXAbozueFeoMxuuFHM=", + "lastModified": 1769058768, + "narHash": "sha256-RC0SHdTxTWU/4iAglTpNaEtZEI9fXnvfhSTcOj+ECZA=", "owner": "Gleipnir-Technology", "repo": "nidus-sync", - "rev": "4303534396e2ff8de60d0a09aedd479a8c2418b0", + "rev": "1aa19ce7071b12c462fd463409a44dbe73ea5c83", "type": "github" }, "original": { "owner": "Gleipnir-Technology", "repo": "nidus-sync", - "rev": "4303534396e2ff8de60d0a09aedd479a8c2418b0", + "rev": "1aa19ce7071b12c462fd463409a44dbe73ea5c83", "type": "github" } }, diff --git a/flake.nix b/flake.nix index 2d096cc..692de20 100644 --- a/flake.nix +++ b/flake.nix @@ -27,7 +27,7 @@ type = "github"; owner = "Gleipnir-Technology"; repo = "nidus-sync"; - rev = "4303534396e2ff8de60d0a09aedd479a8c2418b0"; + rev = "1aa19ce7071b12c462fd463409a44dbe73ea5c83"; }; nixos-facter-modules.url = "github:numtide/nixos-facter-modules"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11"; diff --git a/modules/system/tegola.nix b/modules/system/tegola.nix index 5900275..45ac4c3 100644 --- a/modules/system/tegola.nix +++ b/modules/system/tegola.nix @@ -25,7 +25,11 @@ in { networking.firewall.allowedTCPPorts = [ 9090 ]; services.caddy.virtualHosts."${domainName}" = { extraConfig = '' - reverse_proxy http://127.0.0.1:${toString port} + reverse_proxy { + to http://127.0.0.1:${toString port} + header_up X-Forwarded-Proto "https" + } + header / Access-Control-Allow-Origin * ''; }; services.postgresql = { @@ -43,6 +47,9 @@ in { description="Tegola Vector Tile"; path = [ pkgs.tegola ]; requires=["network-online.target"]; + restartTriggers = [ + config.environment.etc."tegola.toml".source + ]; serviceConfig = { Group = group; ExecStart = "${pkgs.tegola}/bin/tegola serve --config /etc/tegola.toml"; diff --git a/secrets/nidus-sync.env b/secrets/nidus-sync.env index 9afd6dd..fe716b9 100644 --- a/secrets/nidus-sync.env +++ b/secrets/nidus-sync.env @@ -1,16 +1,25 @@ ARCGIS_CLIENT_ID=ENC[AES256_GCM,data:feM1kZYTa4VKx0iBggWBDA==,iv:nl2nqqtOV+NozbWJNaoay6uHyLUKQqsrQpZALnftSvg=,tag:rJXbnBQsZqob/NmgK3IjMw==,type:str] ARCGIS_CLIENT_SECRET=ENC[AES256_GCM,data:PQfW7zuAXKnA3CGz3jmafM2JOEPCjPOPM+Rb77pKqeU=,iv:GVUvJY6DQxVSLzlSkvsPB1+TzMpcN7sPxJxgwe4rdhE=,tag:fv/QiZuGpFIxBu0dLsU43w==,type:str] BIND=ENC[AES256_GCM,data:eILarEJdsXcevSBcSIE1,iv:Fl+4Ueb7e6FixoqUzJGgg6hQG8suz0owNX1ObK+i85w=,tag:RFylkUTVTyntD0knJMXS5g==,type:str] +DOMAIN_RMO=ENC[AES256_GCM,data:DGwVgHndfVnIDZMHLD0HZjHy5PWgqB4W,iv:rQMqa7XX5Ehpqrm23e460y9zncCiovGnk57iC/G9CbE=,tag:d5jz+uHXzORxXZmZHWtBkg==,type:str] +DOMAIN_NIDUS=ENC[AES256_GCM,data:K3ENU+4cY1DcWiN4UqeMwA==,iv:0dBUdaWQf//Zg67qVH1Q4/DHfIKtd/uQf6TMH9T93pk=,tag:ZSJcI0vBsOPlnQVe65Shiw==,type:str] +DOMAIN_TEGOLA=ENC[AES256_GCM,data:/hkDyOCzH2ofEqqAS0nbaOAL,iv:nMQ0DjJacF/7vYKa24pk4ATXRR5uBtDGDH5wRUuueO4=,tag:YNwWLUKsuEM6JC3xIcoaVw==,type:str] ENVIRONMENT=ENC[AES256_GCM,data:QoFl3JZFMFsEHg==,iv:b8NZkUS17mksajxOhxfSpmhzBuUnnwM0+cd92p8Ifcg=,tag:r6bCoPPFzFWX7dqgXuT6aA==,type:str] FIELDSEEKER_SCHEMA_DIRECTORY=ENC[AES256_GCM,data:CoVEdF5GqwQVFQeYEoDGaAY5cv8c9k89aa/jrkRtP6yLpJaNJGd292jv,iv:2LAwe5PwehFkU41Camjxft6OpuBR/HwXtaVdsaNO0Rs=,tag:S5NA0XqcEhiwwMVIMyzgPw==,type:str] -FORWARDEMAIL_API_TOKEN=ENC[AES256_GCM,data:IL3Vo6ynTuDFqfDIwNppnXIxm/DF3nWk,iv:qnS5XIBvFT+t95cwqfXS2VKCbjqiRZVez9jlDHbwLEc=,tag:nlhILpJhQzVRFVhJB5ALDQ==,type:str] -MAPBOX_TOKEN=ENC[AES256_GCM,data:4DUd+znj0b7O3G54vcNcyBtcSlcGuD5ujqF2WLfvZ56EPFKPbbTscfMnFusCuL4dUepcqgeJfKbcUnLmAhydTkSlOZbAUikm+/r/74OHkZslHMgHJb7FlFFPMwo=,iv:K8EXVn4SaUGtc3TYsSFwUZ5ibtS4ib6PxJCinVET3p8=,tag:MNSvAPlBQQz6eJqTvd6DhQ==,type:str] -POSTGRES_DSN=ENC[AES256_GCM,data:mtzoql/9SaStmvmXDmhwjFgvXAEUX8PAe47zSgOS1JHQFPxKsM9lLp8soZk+OWqadtnTqOWL9pPzBg==,iv:f20ZMK3cxCqVYRGXtNcG7lMse/2rEjOadsgVDQa1DGw=,tag:UmDfoWu8NW6m0a7lF8rSYA==,type:str] -URL_REPORT=ENC[AES256_GCM,data:QN0myadBmZWkUDjFr8KGs6jhCfN7bMA4,iv:4BsNhmJ4G0iW+I52lvEQTh9rsI35g2spGvy7s7/fGPA=,tag:H/jQ2BKYb9R2SC+Ljbc6sA==,type:str] -URL_SYNC=ENC[AES256_GCM,data:tiM2khW878svt/whduuTTQ==,iv:GAqBOq/6+IO2eZ8mKaCj8a6X7CLBqN7PdZrwDPvJk3k=,tag:ja7xdVjBV5nL+U6ub0O0Yg==,type:str] -URL_TEGOLA=ENC[AES256_GCM,data:+smzSbcmww59po3IUPrQenlk,iv:fNgezU6l1NMS5mLqnSydpHWSVr8XYIeN9UKJEAYavMQ=,tag:xqzrdhYHURdO6ZyVT2bAfA==,type:str] +FILES_DIRECTORY_LOGO=ENC[AES256_GCM,data:CIwmeBZTkYHR2lBgAgevYCkd9imiA2MudmEtRJQehPVPCQ==,iv:VQ8tIdvDzADlvVwoq4jof/+txpat1SlfdasgVnExPZ8=,tag:sPUOVIXOn4lgjW8YgyoyUA==,type:str] FILES_DIRECTORY_PUBLIC=ENC[AES256_GCM,data:lXbDgJ8qdLpqPWt8XEHuB0Y40Q0XMftLgbXZtLs6EPyPRGf7,iv:xQRpGEqMo/bLRZn9/At4nG5yAxydvBmVKR0qhUp6oJE=,tag:GCt/Exl/jlSknExDj3Gf6w==,type:str] FILES_DIRECTORY_USER=ENC[AES256_GCM,data:+DYYHwx5PJvCahaXpllVhwGRp/Lm8Py+s0twXLVDiIf2wQ==,iv:QFw6x1VxUg8nQQxSOom4rXVhcFFV3YRdgnWJjUzz60Y=,tag:nYhuULH5ucbY7UWCK1ThVg==,type:str] +FORWARDEMAIL_API_TOKEN=ENC[AES256_GCM,data:IL3Vo6ynTuDFqfDIwNppnXIxm/DF3nWk,iv:qnS5XIBvFT+t95cwqfXS2VKCbjqiRZVez9jlDHbwLEc=,tag:nlhILpJhQzVRFVhJB5ALDQ==,type:str] +FORWARDEMAIL_REPORT_ADDRESS=ENC[AES256_GCM,data:msPHeoXeiUdMzzjh8r61stOQBdOg3yh2oPpGiPbO448=,iv:w74ilGrXbhHk1BiEhsmhJJ5KHmFJWIl/yf/ieeR9OqI=,tag:AzS+gHP79Ov3MDcSjGbkIw==,type:str] +FORWARDEMAIL_REPORT_USERNAME=ENC[AES256_GCM,data:n8DxEVA4JCrE4EQU1mkS+TQqno16iRgF/pg0Q2wU+BY=,iv:yfC2D/COmH0FpXJsEIEwVt7X6viSZavuNF0a1vS0Rmc=,tag:1WTi9WUKZAWb4MhdIgF1tA==,type:str] +FORWARDEMAIL_REPORT_PASSWORD=ENC[AES256_GCM,data:ZqRJ4ku2/X4GTNcdgqBhC7qNxfxRl6tR,iv:e4v4u8d/YG6A8yuzw2XxKu5vpkhsYO/He7eTPbD7ZMY=,tag:AhfOoJdgP5a3YC//Xg8uHQ==,type:str] +MAPBOX_TOKEN=ENC[AES256_GCM,data:4DUd+znj0b7O3G54vcNcyBtcSlcGuD5ujqF2WLfvZ56EPFKPbbTscfMnFusCuL4dUepcqgeJfKbcUnLmAhydTkSlOZbAUikm+/r/74OHkZslHMgHJb7FlFFPMwo=,iv:K8EXVn4SaUGtc3TYsSFwUZ5ibtS4ib6PxJCinVET3p8=,tag:MNSvAPlBQQz6eJqTvd6DhQ==,type:str] +POSTGRES_DSN=ENC[AES256_GCM,data:mtzoql/9SaStmvmXDmhwjFgvXAEUX8PAe47zSgOS1JHQFPxKsM9lLp8soZk+OWqadtnTqOWL9pPzBg==,iv:f20ZMK3cxCqVYRGXtNcG7lMse/2rEjOadsgVDQa1DGw=,tag:UmDfoWu8NW6m0a7lF8rSYA==,type:str] +RMO_EMAIL=ENC[AES256_GCM,data:Vjcsi5dG+ush3oDo7XZIQ2NBmIUhTxGxwHgtau9dHXI=,iv:slGyTZ3/gHLzxgS+G+5k4P2u2v89np1nTttMtQNow60=,tag:r3BpF+yLQ2G+CMjNJ5ayiQ==,type:str] +RMO_PHONE_NUMBER=ENC[AES256_GCM,data:h3TQNxHPpMJONMT4,iv:KRioGefyHHnt088mBeU+kxgK2liRsEOBF5HO6Vr/DSM=,tag:IVgzb8beUI7EmHslI/Zr4g==,type:str] +TWILIO_ACCOUNT_SID=ENC[AES256_GCM,data:BdT9bSDT+7i69ar6DmfAFTML3tETg0ZGNHXU57wIOpTH2w==,iv:bWD4TMcD1IQL/b8dvY+ChugPXgQzREN3OKAEvt8yHCw=,tag:v2S6QY5hkOJ0RNujd6dUJg==,type:str] +TWILIO_AUTH_TOKEN=ENC[AES256_GCM,data:t5WPHs5nzcKabM/xcdruWUjsDigCqtd0lGljS9qVNRQ=,iv:UCwpRDSPgsYlwe510+o89sERkWnTQPZJQ7eq28VZ8TY=,tag:WvKivNPofOZk43GNCNHUwA==,type:str] +TWILIO_MESSAGING_SERVICE_SID=ENC[AES256_GCM,data:3ARNA6acwR6pJGB0J6tWE7UEV9MRio8+q0d4rBf1BXjbhw==,iv:0JSVOlGjWqrbDmeptCCEjxuxJpUkO0pL1hqCnnzwIjk=,tag:goPrHU4P55x8E/bL7AnXKw==,type:str] sops_age__list_0__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBiZ2pHbGEwamg3MFovQkVM\nZzRlQVcrdHhDUHlWNjV0ZHZaeGszUk1JS2drCjJDeGt6S3RuT0t2VldKNTRzQ2hZ\nVzd6MUlZcjVDUllyM3pLMjVUeXVrSVEKLS0tIGY4dnh0QUozejNmWWNFNUMwMjUv\nT1Z0cnZqVXRVeHZ1VWtKWlJpZjh4RHcK3quJSk59rAuNBPizPhP5PefvmoZUgYHo\n9hCdeBbcyOYD2/tYklJzA8q0BWqZAvJzNoc5EKn2CqlFOCmVxnHu7A==\n-----END AGE ENCRYPTED FILE-----\n sops_age__list_0__map_recipient=age1fnkhk9rv7r8gh84vxnhvndk4fgh20qcj4hvnfhdpumcydl6m6vrse50lrz sops_age__list_1__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3SCsydWwxek1WaTBpSVN6\nYUJVZHNCZEdLS0d0WlFZNU13V2I4VlVRa0g4CldTbUh3SWEzZCtwN09pWXkrb2VW\nY3JXOWtGQlAwdk1TUVRTa2QybDJhYmcKLS0tIFpSZUNrVFRCdXdHN2I1Yk5Kb284\nQ2RYSnRUVHMzU2d2dnVzZXhUbTd6Y1UKyYEZNXM4w3jf/OjROp5Xiicj5wRRpwAS\nRyF+nvtINNqcagcBoXAxMOX4J6ukpq+I3rcJVRRZ6TXyr2LM+cRDuQ==\n-----END AGE ENCRYPTED FILE-----\n @@ -27,7 +36,7 @@ sops_age__list_6__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb2 sops_age__list_6__map_recipient=age1t3ryfktuhr3cysf49m9q2n8fkjf9ajjjnhztxw9hz8paxgk4lpcq065jge sops_age__list_7__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3OUIzR1loODJRcXJTcTRW\nYlV0TXI0ZXJWV04wR0ludVpFeXppS1B6WlJrCjMrL1d0eEZqbTAvTmJkWUoxYnJy\naDhUUXJ2SnpYbldRcTJ3Y1MwY2E4ZVUKLS0tIG9TbnFlNWlSRjluK0xOMkpoU1Uz\nMnJ1R2diS0NZVStmcjFiUWNPZ1BkOWcKLA/3udlVovJ3wHuhP3VB9006C26iLCBM\nwWLoAo3lJbnk5owRRdHEA2JildsqpKfWNvu4VX1m/rV0LSb0SdOQkw==\n-----END AGE ENCRYPTED FILE-----\n sops_age__list_7__map_recipient=age167q6r28ws6wrpjwxnt4ap2fgs6d9cyvrdhzl2wflr2tnsw5xapxq36n2ec -sops_lastmodified=2026-01-16T21:33:14Z -sops_mac=ENC[AES256_GCM,data:jLl2blxfNjwFdFdeNvTHZdY+Glo2R5R/qD7vOC63Oc1+Uuoq2auQKsncIDwOCmhBBBhqXxShR9XR1apKhKBBZIza3i4fDpQJlcoDRmFUVeTu7/2XYuBLfeL2epZanB3Dnu/iAvW9sOfDfZrisAooGzKx6gw5lGKGlZk40oGiCSg=,iv:bHl4StrWO96/gkkHlOXdLAtw9JHA2jp4dQ4RjishwPM=,tag:J5W60DRbdoJYypidFs720w==,type:str] +sops_lastmodified=2026-01-22T03:36:05Z +sops_mac=ENC[AES256_GCM,data:ppyDS6rhPuOsGE3887sSiSZ3ESB1wJdknMi+Fs8pVyttmnSyBDLSNNLxOBv/9uBQ1u51A3AlfmujegStCrkdlHr9GyaoSoYZXajV0WLh9EB4WfqRXkqHWgvg2KETHkq2hlT76NtmBd1Nv3fiJlKWv7szMw+Q+PxtH8LSePIcZkI=,iv:mRBp+5rEOPMyfNKcUvFi7C4/9AXfgtzUE/M6wUXN0k8=,tag:LJT2gko4g0lS7/00L4ugjw==,type:str] sops_unencrypted_suffix=_unencrypted sops_version=3.11.0