Mercurial > prosody-modules
comparison mod_http_status/mod_http_status.lua @ 5679:e274431bf4ce
mod_http_status: Add IP allowlisting capabilities
Based on mod_http_openmetrics
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Wed, 25 Oct 2023 17:18:50 +0200 |
| parents | 6af2d74daa15 |
| children |
comparison
equal
deleted
inserted
replaced
| 5678:0cffeff2cd1d | 5679:e274431bf4ce |
|---|---|
| 1 module:set_global(); | 1 module:set_global(); |
| 2 | 2 |
| 3 local json = require "util.json"; | 3 local json = require "util.json"; |
| 4 local datetime = require "util.datetime".datetime; | 4 local datetime = require "util.datetime".datetime; |
| 5 local ip = require "util.ip"; | |
| 5 | 6 |
| 6 local modulemanager = require "core.modulemanager"; | 7 local modulemanager = require "core.modulemanager"; |
| 8 | |
| 9 local permitted_ips = module:get_option_set("http_status_allow_ips", { "::1", "127.0.0.1" }); | |
| 10 local permitted_cidr = module:get_option_string("http_status_allow_cidr"); | |
| 11 | |
| 12 local function is_permitted(request) | |
| 13 local ip_raw = request.ip; | |
| 14 if permitted_ips:contains(ip_raw) or | |
| 15 (permitted_cidr and ip.match(ip.new_ip(ip_raw), ip.parse_cidr(permitted_cidr))) then | |
| 16 return true; | |
| 17 end | |
| 18 return false; | |
| 19 end | |
| 7 | 20 |
| 8 module:provides("http", { | 21 module:provides("http", { |
| 9 route = { | 22 route = { |
| 10 GET = function(event) | 23 GET = function(event) |
| 11 local request, response = event.request, event.response; | 24 local request, response = event.request, event.response; |
| 25 if not is_permitted(request) then | |
| 26 return 403; -- Forbidden | |
| 27 end | |
| 12 response.headers.content_type = "application/json"; | 28 response.headers.content_type = "application/json"; |
| 13 | 29 |
| 14 local resp = { ["*"] = true }; | 30 local resp = { ["*"] = true }; |
| 15 | 31 |
| 16 for host in pairs(prosody.hosts) do | 32 for host in pairs(prosody.hosts) do |
