- main
- manifest
- deps
- main
- Install
- Run
use fastly::http::header;
use fastly::{Error, Request, Response};
use base64::{Engine as _, engine::general_purpose};
const BACKEND_NAME: &str = "origin_0";
const MAX_BODY_CONVERT_SIZE: usize = 4 * 1024;
#[fastly::main]
fn main(mut req: Request) -> Result<Response, Error> {
log_fastly::init_simple("my_log", log::LevelFilter::Info);
req.set_header(header::HOST, "httpbin.org");
let content_length: usize = get_req_content_length(&req);
if content_length > MAX_BODY_CONVERT_SIZE || content_length == 0 {
return Ok(req.send(BACKEND_NAME)?);
}
let body_encoded64 = general_purpose::URL_SAFE_NO_PAD.encode(&req.take_body_bytes());
req.get_url_mut()
.query_pairs_mut()
.append_pair("postdata", &body_encoded64)
.append_pair("method", "GET");
log::info!("new_req URL is {}", req.get_url());
Ok(req.send(BACKEND_NAME)?)
}
fn get_req_content_length(req: &Request) -> usize {
match req.get_header(header::CONTENT_LENGTH) {
Some(value) => {
if let Ok(cl_str) = value.to_str() {
cl_str.parse().unwrap_or(0)
} else {
0
}
}
None => 0,
}
}