This is an automated email from the ASF dual-hosted git repository.

membphis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-apisix.git


The following commit(s) were added to refs/heads/master by this push:
     new b61db08  feature: support to run `header_filter` and `body_filter` 
phase for global rules. (#1364)
b61db08 is described below

commit b61db0865a18c887897246483f08108e583327ae
Author: Ayeshmantha Perera <[email protected]>
AuthorDate: Thu Apr 2 02:46:00 2020 +0200

    feature: support to run `header_filter` and `body_filter` phase for global 
rules. (#1364)
---
 apisix/init.lua | 38 +++++++++++++++++++++++++++++++++++---
 1 file changed, 35 insertions(+), 3 deletions(-)

diff --git a/apisix/init.lua b/apisix/init.lua
index 3a08157..a9a07a7 100644
--- a/apisix/init.lua
+++ b/apisix/init.lua
@@ -435,12 +435,44 @@ end
 
 
 function _M.http_header_filter_phase()
-    run_plugin("header_filter")
+    local api_ctx = ngx.ctx.api_ctx
+    if not api_ctx then
+        return
+    end
+
+    if router.global_rules and router.global_rules.values
+            and #router.global_rules.values > 0
+    then
+        local plugins = core.tablepool.fetch("plugins", 32, 0)
+        for _, global_rule in ipairs(router.global_rules.values) do
+            core.table.clear(plugins)
+            plugins = plugin.filter(global_rule, plugins)
+            run_plugin("header_filter", plugins, api_ctx)
+        end
+        core.tablepool.release("plugins", plugins)
+    end
+    run_plugin("header_filter", nil, api_ctx)
 end
 
 
 function _M.http_body_filter_phase()
-    run_plugin("body_filter")
+    local api_ctx = ngx.ctx.api_ctx
+    if not api_ctx then
+        return
+    end
+
+    if router.global_rules and router.global_rules.values
+            and #router.global_rules.values > 0
+    then
+        local plugins = core.tablepool.fetch("plugins", 32, 0)
+        for _, global_rule in ipairs(router.global_rules.values) do
+            core.table.clear(plugins)
+            plugins = plugin.filter(global_rule, plugins)
+            run_plugin("body_filter", plugins, api_ctx)
+        end
+        core.tablepool.release("plugins", plugins)
+    end
+    run_plugin("body_filter", nil, api_ctx)
 end
 
 
@@ -451,7 +483,7 @@ function _M.http_log_phase()
     end
 
     if router.global_rules and router.global_rules.values
-       and #router.global_rules.values > 0
+            and #router.global_rules.values > 0
     then
         local plugins = core.tablepool.fetch("plugins", 32, 0)
         for _, global_rule in ipairs(router.global_rules.values) do

Reply via email to