-- -- Licensed to the Apache Software Foundation (ASF) under one or more -- contributor license agreements. See the NOTICE file distributed with -- this work for additional information regarding copyright ownership. -- The ASF licenses this file to You under the Apache License, Version 2.0 -- (the "License"); you may not use this file except in compliance with -- the License. You may obtain a copy of the License at -- -- http://www.apache.org/licenses/LICENSE-2.0 -- -- Unless required by applicable law or agreed to in writing, software -- distributed under the License is distributed on an "AS IS" BASIS, -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- See the License for the specific language governing permissions and -- limitations under the License. -- local require = require local http_route = require("apisix.http.route") local apisix_upstream = require("apisix.upstream") local core = require("apisix.core") local str_lower = string.lower local ipairs = ipairs local _M = {version = 0.3} local function filter(route) route.orig_modifiedIndex = route.modifiedIndex route.has_domain = false if not route.value then return end if route.value.host then route.value.host = str_lower(route.value.host) elseif route.value.hosts then for i, v in ipairs(route.value.hosts) do route.value.hosts[i] = str_lower(v) end end apisix_upstream.filter_upstream(route.value.upstream, route) core.log.info("filter route: ", core.json.delay_encode(route, true)) end -- attach common methods if the router doesn't provide its custom implementation local function attach_http_router_common_methods(http_router) if http_router.routes == nil then http_router.routes = function () if not http_router.user_routes then return nil, nil end local user_routes = http_router.user_routes return user_routes.values, user_routes.conf_version end end if http_router.init_worker == nil then http_router.init_worker = function (filter) http_router.user_routes = http_route.init_worker(filter) end end end function _M.http_init_worker() local conf = core.config.local_conf() local router_http_name = "radixtree_uri" local router_ssl_name = "radixtree_sni" if conf and conf.apisix and conf.apisix.router then router_http_name = conf.apisix.router.http or router_http_name router_ssl_name = conf.apisix.router.ssl or router_ssl_name end local router_http = require("apisix.http.router." .. router_http_name) attach_http_router_common_methods(router_http) router_http.init_worker(filter) _M.router_http = router_http local router_ssl = require("apisix.ssl.router." .. router_ssl_name) router_ssl.init_worker() _M.router_ssl = router_ssl _M.api = require("apisix.api_router") end function _M.stream_init_worker() local router_ssl_name = "radixtree_sni" local router_stream = require("apisix.stream.router.ip_port") router_stream.stream_init_worker(filter) _M.router_stream = router_stream local router_ssl = require("apisix.ssl.router." .. router_ssl_name) router_ssl.init_worker() _M.router_ssl = router_ssl end function _M.ssls() return _M.router_ssl.ssls() end function _M.http_routes() if not _M.router_http then return nil, nil end return _M.router_http.routes() end function _M.stream_routes() -- maybe it's not inited. if not _M.router_stream then return nil, nil end return _M.router_stream.routes() end -- for test _M.filter_test = filter return _M