func parseConfig()

in plugins/wasm-go/extensions/request-block/main.go [50:121]


func parseConfig(json gjson.Result, config *RequestBlockConfig, log wrapper.Log) error {
	code := json.Get("blocked_code").Int()
	if code != 0 && code > 100 && code < 600 {
		config.blockedCode = uint32(code)
	} else {
		config.blockedCode = 403
	}
	config.blockedMessage = json.Get("blocked_message").String()
	config.caseSensitive = json.Get("case_sensitive").Bool()
	for _, item := range json.Get("block_urls").Array() {
		url := item.String()
		if url == "" {
			continue
		}
		if config.caseSensitive {
			config.blockUrls = append(config.blockUrls, url)
		} else {
			config.blockUrls = append(config.blockUrls, strings.ToLower(url))
		}
	}
	for _, item := range json.Get("block_exact_urls").Array() {
		url := item.String()
		if url == "" {
			continue
		}
		if config.caseSensitive {
			config.blockExactUrls = append(config.blockExactUrls, url)
		} else {
			config.blockExactUrls = append(config.blockExactUrls, strings.ToLower(url))
		}
	}
	for _, item := range json.Get("block_regexp_urls").Array() {
		regexpUrl := item.String()
		if regexpUrl == "" {
			continue
		}
		if config.caseSensitive {
			reg := regexp.MustCompile(regexpUrl)
			config.blockRegExpArray = append(config.blockRegExpArray, reg)
		} else {
			reg := regexp.MustCompile(strings.ToLower(regexpUrl))
			config.blockRegExpArray = append(config.blockRegExpArray, reg)
		}
	}
	for _, item := range json.Get("block_headers").Array() {
		header := item.String()
		if header == "" {
			continue
		}
		if config.caseSensitive {
			config.blockHeaders = append(config.blockHeaders, header)
		} else {
			config.blockHeaders = append(config.blockHeaders, strings.ToLower(header))
		}
	}
	for _, item := range json.Get("block_bodies").Array() {
		body := item.String()
		if body == "" {
			continue
		}
		if config.caseSensitive {
			config.blockBodies = append(config.blockBodies, body)
		} else {
			config.blockBodies = append(config.blockBodies, strings.ToLower(body))
		}
	}
	if len(config.blockUrls) == 0 && len(config.blockHeaders) == 0 &&
		len(config.blockBodies) == 0 {
		return errors.New("there is no block rules")
	}
	return nil
}