| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- // Copyright 2017 The Gitea Authors. All rights reserved.
- // Copyright 2017 The Gogs Authors. All rights reserved.
- // SPDX-License-Identifier: MIT
-
- package markup
-
- import (
- "regexp"
- "sync"
-
- "github.com/microcosm-cc/bluemonday"
- )
-
- // Sanitizer is a protection wrapper of *bluemonday.Policy which does not allow
- // any modification to the underlying policies once it's been created.
- type Sanitizer struct {
- defaultPolicy *bluemonday.Policy
- descriptionPolicy *bluemonday.Policy
- rendererPolicies map[string]*bluemonday.Policy
- allowAllRegex *regexp.Regexp
- }
-
- var (
- defaultSanitizer *Sanitizer
- defaultSanitizerOnce sync.Once
- )
-
- func GetDefaultSanitizer() *Sanitizer {
- defaultSanitizerOnce.Do(func() {
- defaultSanitizer = &Sanitizer{
- rendererPolicies: map[string]*bluemonday.Policy{},
- allowAllRegex: regexp.MustCompile(".+"),
- }
- for name, renderer := range renderers {
- sanitizerRules := renderer.SanitizerRules()
- if len(sanitizerRules) > 0 {
- policy := defaultSanitizer.createDefaultPolicy()
- defaultSanitizer.addSanitizerRules(policy, sanitizerRules)
- defaultSanitizer.rendererPolicies[name] = policy
- }
- }
- defaultSanitizer.defaultPolicy = defaultSanitizer.createDefaultPolicy()
- defaultSanitizer.descriptionPolicy = defaultSanitizer.createRepoDescriptionPolicy()
- })
- return defaultSanitizer
- }
-
- func ResetDefaultSanitizerForTesting() {
- defaultSanitizer = nil
- defaultSanitizerOnce = sync.Once{}
- }
|