Skip to content

Commit

Permalink
feat: response header plugin support rename header, #61 (#62)
Browse files Browse the repository at this point in the history
  • Loading branch information
vicanso authored Nov 27, 2024
1 parent 9f3825c commit 66b4824
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 1 deletion.
28 changes: 27 additions & 1 deletion src/plugin/response_headers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ pub struct ResponseHeaders {
add_headers: Vec<HttpHeader>,
remove_headers: Vec<HeaderName>,
set_headers: Vec<HttpHeader>,
rename_headers: Vec<(HeaderName, HeaderName)>,
hash_value: String,
}

Expand Down Expand Up @@ -68,12 +69,31 @@ impl TryFrom<&PluginConf> for ResponseHeaders {
})?;
remove_headers.push(item);
}
let mut rename_headers = vec![];
for item in get_str_slice_conf(value, "rename_headers").iter() {
if let Some((k, v)) =
item.split_once(':').map(|(k, v)| (k.trim(), v.trim()))
{
let original_name =
HeaderName::from_str(k).map_err(|e| Error::Invalid {
category: PluginCategory::ResponseHeaders.to_string(),
message: e.to_string(),
})?;
let new_name =
HeaderName::from_str(v).map_err(|e| Error::Invalid {
category: PluginCategory::ResponseHeaders.to_string(),
message: e.to_string(),
})?;
rename_headers.push((original_name, new_name));
}
}
let params = Self {
hash_value,
plugin_step: step,
add_headers,
set_headers,
remove_headers,
rename_headers,
};

if params.plugin_step != PluginStep::Response {
Expand Down Expand Up @@ -110,7 +130,7 @@ impl Plugin for ResponseHeaders {
if step != self.plugin_step {
return Ok(());
}
// add --> remove --> set
// add --> remove --> set --> rename
// ingore error
for (name, value) in &self.add_headers {
if let Some(value) = convert_header_value(value, session, ctx) {
Expand All @@ -129,6 +149,12 @@ impl Plugin for ResponseHeaders {
let _ = upstream_response.insert_header(name, value);
}
}
for (original_name, new_name) in &self.rename_headers {
if let Some(value) = upstream_response.remove_header(original_name)
{
let _ = upstream_response.append_header(new_name, value);
}
}
Ok(())
}
}
Expand Down
3 changes: 3 additions & 0 deletions web/src/i18n/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,9 @@ export default {
responseHeadersSetHeader: "Set Header",
responseHeadersSetHeaderPlaceholder:
"Input the header name : Input the header value",
responseHeadersRenameHeader: "Rename Header",
responseHeadersRenamePlaceholder:
"Input the original header name : Input the new header name",
responseHeadersRemoveHeader: "Remove Header",
responseHeadersRemoveHeaderPlaceholder: "Input the header name",
combinedAuthAuthorizations: "Authorizations",
Expand Down
3 changes: 3 additions & 0 deletions web/src/i18n/zh.ts
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,9 @@ export default {
responseHeadersSetHeader: "设置响应头",
responseHeadersSetHeaderPlaceholder:
"输入设置响应头的名称 : 输入设置响应头的值",
responseHeadersRenameHeader: "修改响应头",
responseHeadersRenamePlaceholder:
"输入原来的响应头名称 : 输入新的响应头名称",
responseHeadersRemoveHeader: "删除响应头",
responseHeadersRemoveHeaderPlaceholder: "输入响应头名称",
combinedAuthAuthorizations: "认证配置列表",
Expand Down
8 changes: 8 additions & 0 deletions web/src/pages/Plugins.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -926,6 +926,14 @@ export default function Plugins() {
span: 6,
category: ExFormItemCategory.TEXTS,
},
{
name: "rename_headers",
label: pluginI18n("responseHeadersRenameHeader"),
placeholder: pluginI18n("responseHeadersRenamePlaceholder"),
defaultValue: pluginConfig.rename_headers as string[],
span: 6,
category: ExFormItemCategory.KV_LIST,
},
);
break;
}
Expand Down

0 comments on commit 66b4824

Please sign in to comment.