mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09: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