修复Jenkins构建地址归一化
将 Jenkins 返回的外部构建路径重绑定到受信本机 origin 增加外部 Jenkins URL 的状态与产物轮询回归测试
This commit is contained in:
@@ -274,11 +274,27 @@ impl JenkinsClient {
|
||||
}
|
||||
|
||||
fn resolve_trusted_url(&self, value: &str) -> Result<Url, String> {
|
||||
let url = Url::parse(value)
|
||||
let returned = Url::parse(value)
|
||||
.or_else(|_| self.job_url.join(value))
|
||||
.map_err(|_| "Jenkins 返回了无效 URL".to_string())?;
|
||||
self.ensure_same_origin(&url)?;
|
||||
Ok(url)
|
||||
if !returned.username().is_empty()
|
||||
|| returned.password().is_some()
|
||||
|| !returned.path().starts_with(self.root_url.path())
|
||||
{
|
||||
return Err("Jenkins 返回了非受信源 URL".to_string());
|
||||
}
|
||||
let relative_path = returned
|
||||
.path()
|
||||
.strip_prefix(self.root_url.path())
|
||||
.ok_or_else(|| "Jenkins 返回了非受信路径".to_string())?;
|
||||
let mut trusted = self
|
||||
.root_url
|
||||
.join(relative_path)
|
||||
.map_err(|_| "Jenkins 返回了无效 URL".to_string())?;
|
||||
trusted.set_query(returned.query());
|
||||
trusted.set_fragment(None);
|
||||
self.ensure_same_origin(&trusted)?;
|
||||
Ok(trusted)
|
||||
}
|
||||
|
||||
fn ensure_same_origin(&self, url: &Url) -> Result<(), String> {
|
||||
|
||||
@@ -95,7 +95,7 @@ async fn mock_trigger(
|
||||
|
||||
async fn mock_queue(axum::extract::Path(id): axum::extract::Path<u64>) -> Json<Value> {
|
||||
Json(
|
||||
json!({"cancelled": false, "executable": {"url": format!("/jenkins/job/shared/job/Genarrative-Preview-Deployer/{id}/")}}),
|
||||
json!({"cancelled": false, "executable": {"url": format!("http://192.168.35.82:8080/jenkins/job/shared/job/Genarrative-Preview-Deployer/{id}/")}}),
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user