X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=libs%2Flucid-http%2Fluasrc%2Flucid%2Fhttp%2Fhandler%2Fcatchall.lua;h=13272d91e4651bc6fadb9455638fd2fe93e54ca6;hp=3b2c2b0a0cab11fb8a57269ca8c8d0c1521a95fe;hb=2d05a6135a0d29a82148f9bfc215b2de5b609dd5;hpb=73eae62580d4f78ade009415ba6533f502f29e5e diff --git a/libs/lucid-http/luasrc/lucid/http/handler/catchall.lua b/libs/lucid-http/luasrc/lucid/http/handler/catchall.lua index 3b2c2b0a0..13272d91e 100644 --- a/libs/lucid-http/luasrc/lucid/http/handler/catchall.lua +++ b/libs/lucid-http/luasrc/lucid/http/handler/catchall.lua @@ -14,9 +14,18 @@ $Id$ local srv = require "luci.lucid.http.server" local proto = require "luci.http.protocol" local util = require "luci.util" +local ip = require "luci.ip" +local ipairs = ipairs +--- Catchall Handler +-- @cstyle instance module "luci.lucid.http.handler.catchall" +--- Create a Redirect handler. +-- @param name Name +-- @param target Redirect Target +-- @class function +-- @return Redirect handler object Redirect = util.class(srv.Handler) function Redirect.__init__(self, name, target) @@ -24,10 +33,26 @@ function Redirect.__init__(self, name, target) self.target = target end +--- Handle a GET request. +-- @param request Request object +-- @return status code, header table, response source function Redirect.handle_GET(self, request) local target = self.target local protocol = request.env.HTTPS and "https://" or "http://" local server = request.env.SERVER_ADDR + + if request.env.REMOTE_ADDR and not request.env.REMOTE_ADDR:find(":") then + local compare = ip.IPv4(request.env.REMOTE_ADDR) + for _, iface in ipairs(request.server.interfaces) do + if iface.family == "inet" and iface.addr and iface.netmask then + if ip.IPv4(iface.addr, iface.netmask):contains(compare) then + server = iface.addr + break + end + end + end + end + if server:find(":") then server = "[" .. server .. "]" end @@ -46,9 +71,17 @@ function Redirect.handle_GET(self, request) return 302, { Location = target } end +--- Handle a POST request. +-- @class function +-- @param request Request object +-- @return status code, header table, response source Redirect.handle_POST = Redirect.handle_GET +--- Handle a HEAD request. +-- @class function +-- @param request Request object +-- @return status code, header table, response source function Redirect.handle_HEAD(self, request) local stat, head = self:handle_GET(request) return stat, head -end \ No newline at end of file +end