-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgateway_policy.rss
More file actions
32 lines (28 loc) · 1.54 KB
/
Copy pathgateway_policy.rss
File metadata and controls
32 lines (28 loc) · 1.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
use pingora;
let method: string = pingora::request::method();
let path: string = pingora::request::path();
let query: string = pingora::request::query();
let tier: string = pingora::request::header("x-user-tier");
let rewrite: string = pingora::request::header("x-rustscript-rewrite");
let request_marked: bool = pingora::request::insert_header("x-rustscript-checked", "true");
let policy_marked: bool = pingora::response::insert_header("x-rustscript-policy", "gateway_policy");
if path == "/admin" && tier != "pro" {
pingora::response::set_status(403);
pingora::response::insert_header("x-rustscript-deny-reason", "upgrade required");
} else if path == "/canary" && method == "GET" {
pingora::response::insert_header("x-rustscript-upstream", "loopback-upstream");
if rewrite == "true" {
pingora::request::insert_header("x-original-query", query);
pingora::request::append_header("x-request-value", "one");
pingora::request::append_header("x-request-value", "two");
pingora::request::remove_header("x-remove-me");
pingora::request::set_method("POST");
pingora::request::set_uri("/rewritten?source=rustscript");
pingora::response::insert_header("x-original-target", path + "?" + query);
pingora::response::insert_header("x-obs-text", "café");
pingora::response::append_header("x-rustscript-policy", "rewritten");
pingora::response::insert_header("x-remove-response", "temporary");
pingora::response::remove_header("x-remove-response");
}
}
pingora::response::status();