fix #1655: ensure path suffix '/' exists

This commit is contained in:
lilong.129
2023-07-22 12:17:37 +08:00
parent e212ccf0b9
commit dbf76eca4b
9 changed files with 257 additions and 20 deletions

View File

@@ -28,32 +28,38 @@ type Parser struct {
plugin funplugin.IPlugin // plugin is used to call functions
}
func buildURL(baseURL, stepURL string) string {
func buildURL(baseURL, stepURL string) (fullUrl string) {
uStep, err := url.Parse(stepURL)
if err != nil {
log.Error().Str("stepURL", stepURL).Err(err).Msg("[buildURL] parse url failed")
return ""
return stepURL
}
defer func() {
// ensure path suffix '/' exists
if uStep.RawQuery == "" {
uStep.Path = strings.TrimRight(uStep.Path, "/") + "/"
}
fullUrl = uStep.String()
}()
// step url is absolute url
if uStep.Host != "" {
return stepURL
return
}
// step url is relative, based on base url
uConfig, err := url.Parse(baseURL)
if err != nil {
log.Error().Str("baseURL", baseURL).Err(err).Msg("[buildURL] parse url failed")
return ""
return
}
// merge url
uStep.Scheme = uConfig.Scheme
uStep.Host = uConfig.Host
uStep.Path = path.Join(uConfig.Path, uStep.Path)
// base url missed
return uStep.String()
return
}
func (p *Parser) ParseHeaders(rawHeaders map[string]string, variablesMapping map[string]interface{}) (map[string]string, error) {