mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 12:26:05 +01:00 
			
		
		
		
	Merge pull request #2406 from bkcsoft/feature/markdown-custom-url-scheme
Feature/markdown custom url scheme
This commit is contained in:
		@@ -41,6 +41,9 @@ ORG_PAGING_NUM = 50
 | 
			
		||||
[markdown]
 | 
			
		||||
; Enable hard line break extension
 | 
			
		||||
ENABLE_HARD_LINE_BREAK = false
 | 
			
		||||
; List of custom URL-Schemes that are allowed as links when rendering Markdown
 | 
			
		||||
; for example git,magnet
 | 
			
		||||
CUSTOM_URL_SCHEMES =
 | 
			
		||||
 | 
			
		||||
[server]
 | 
			
		||||
PROTOCOL = http
 | 
			
		||||
 
 | 
			
		||||
@@ -31,16 +31,10 @@ func isalnum(c byte) bool {
 | 
			
		||||
	return (c >= '0' && c <= '9') || isletter(c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var validLinks = [][]byte{[]byte("http://"), []byte("https://"), []byte("ftp://"), []byte("mailto://")}
 | 
			
		||||
var validLinksPattern = regexp.MustCompile(`^[a-z][\w-]+://`)
 | 
			
		||||
 | 
			
		||||
func isLink(link []byte) bool {
 | 
			
		||||
	for _, prefix := range validLinks {
 | 
			
		||||
		if len(link) > len(prefix) && bytes.Equal(bytes.ToLower(link[:len(prefix)]), prefix) && isalnum(link[len(prefix)]) {
 | 
			
		||||
			return true
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return false
 | 
			
		||||
	return validLinksPattern.Match(link)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func IsMarkdownFile(name string) bool {
 | 
			
		||||
 
 | 
			
		||||
@@ -31,17 +31,20 @@ import (
 | 
			
		||||
	"github.com/gogits/gogs/modules/setting"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func BuildSanitizer() (p *bluemonday.Policy) {
 | 
			
		||||
	p = bluemonday.UGCPolicy()
 | 
			
		||||
	p.AllowAttrs("class").Matching(regexp.MustCompile(`[\p{L}\p{N}\s\-_',:\[\]!\./\\\(\)&]*`)).OnElements("code")
 | 
			
		||||
var Sanitizer = bluemonday.UGCPolicy()
 | 
			
		||||
 | 
			
		||||
	p.AllowAttrs("type").Matching(regexp.MustCompile(`^checkbox$`)).OnElements("input")
 | 
			
		||||
	p.AllowAttrs("checked", "disabled").OnElements("input")
 | 
			
		||||
	return p
 | 
			
		||||
func BuildSanitizer() {
 | 
			
		||||
	// Normal markdown-stuff
 | 
			
		||||
	Sanitizer.AllowAttrs("class").Matching(regexp.MustCompile(`[\p{L}\p{N}\s\-_',:\[\]!\./\\\(\)&]*`)).OnElements("code")
 | 
			
		||||
 | 
			
		||||
	// Checkboxes
 | 
			
		||||
	Sanitizer.AllowAttrs("type").Matching(regexp.MustCompile(`^checkbox$`)).OnElements("input")
 | 
			
		||||
	Sanitizer.AllowAttrs("checked", "disabled").OnElements("input")
 | 
			
		||||
 | 
			
		||||
	// Custom URL-Schemes
 | 
			
		||||
	Sanitizer.AllowURLSchemes(setting.Markdown.CustomURLSchemes...)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var Sanitizer = BuildSanitizer()
 | 
			
		||||
 | 
			
		||||
// EncodeMD5 encodes string to md5 hex value.
 | 
			
		||||
func EncodeMD5(str string) string {
 | 
			
		||||
	m := md5.New()
 | 
			
		||||
 
 | 
			
		||||
@@ -118,6 +118,7 @@ var (
 | 
			
		||||
	// Markdown sttings
 | 
			
		||||
	Markdown struct {
 | 
			
		||||
		EnableHardLineBreak bool
 | 
			
		||||
		CustomURLSchemes    []string `ini:"CUSTOM_URL_SCHEMES"`
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Picture settings
 | 
			
		||||
 
 | 
			
		||||
@@ -91,6 +91,9 @@ func GlobalInit() {
 | 
			
		||||
		ssh.Listen(setting.SSHPort)
 | 
			
		||||
		log.Info("SSH server started on :%v", setting.SSHPort)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Build Sanitizer
 | 
			
		||||
	base.BuildSanitizer()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func InstallInit(ctx *middleware.Context) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user