diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2017-11-07 14:33:06 +0800 |
---|---|---|
committer | Lauris BH <lauris@nix.lv> | 2017-11-07 08:33:06 +0200 |
commit | 62d0a4d8829f214af4f9c00ecf8a81907d86ef06 (patch) | |
tree | c227fd240dcebde532b5ecef7d4b60a042e1f77e /modules/setting | |
parent | ddb75191eca30343783521c06f8706397c9260b8 (diff) | |
download | gitea-62d0a4d8829f214af4f9c00ecf8a81907d86ef06.tar.gz gitea-62d0a4d8829f214af4f9c00ecf8a81907d86ef06.zip |
Add external markup render support (#2570)
* add external markup render support
* bug fixed
* refacotr codes and fix wrong error log
* fix comments and add check to prevent leaks
* add check for config file and improve the example
* check file close error
* use ioutil.TempFile instead uuid
* correct Render -> Parser
* improve warning when incorrect markup setting
* fix typos
Diffstat (limited to 'modules/setting')
-rw-r--r-- | modules/setting/setting.go | 50 |
1 files changed, 49 insertions, 1 deletions
diff --git a/modules/setting/setting.go b/modules/setting/setting.go index 62d4d5eeb5..df80ebdb57 100644 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -60,6 +60,15 @@ const ( LandingPageExplore LandingPage = "/explore" ) +// MarkupParser defines the external parser configured in ini +type MarkupParser struct { + Enabled bool + MarkupName string + Command string + FileExtensions []string + IsInputFile bool +} + // settings var ( // AppVer settings @@ -515,6 +524,8 @@ var ( HasRobotsTxt bool InternalToken string // internal access token IterateBufferSize int + + ExternalMarkupParsers []MarkupParser ) // DateLang transforms standard language locale name to corresponding value in datetime plugin. @@ -1073,6 +1084,44 @@ func NewContext() { UI.ShowUserEmail = Cfg.Section("ui").Key("SHOW_USER_EMAIL").MustBool(true) HasRobotsTxt = com.IsFile(path.Join(CustomPath, "robots.txt")) + + extensionReg := regexp.MustCompile(`\.\w`) + for _, sec := range Cfg.Section("markup").ChildSections() { + name := strings.TrimLeft(sec.Name(), "markup.") + if name == "" { + log.Warn("name is empty, markup " + sec.Name() + "ignored") + continue + } + + extensions := sec.Key("FILE_EXTENSIONS").Strings(",") + var exts = make([]string, 0, len(extensions)) + for _, extension := range extensions { + if !extensionReg.MatchString(extension) { + log.Warn(sec.Name() + " file extension " + extension + " is invalid. Extension ignored") + } else { + exts = append(exts, extension) + } + } + + if len(exts) == 0 { + log.Warn(sec.Name() + " file extension is empty, markup " + name + " ignored") + continue + } + + command := sec.Key("RENDER_COMMAND").MustString("") + if command == "" { + log.Warn(" RENDER_COMMAND is empty, markup " + name + " ignored") + continue + } + + ExternalMarkupParsers = append(ExternalMarkupParsers, MarkupParser{ + Enabled: sec.Key("ENABLED").MustBool(false), + MarkupName: name, + FileExtensions: exts, + Command: command, + IsInputFile: sec.Key("IS_INPUT_FILE").MustBool(false), + }) + } } // Service settings @@ -1133,7 +1182,6 @@ func newService() { Service.OpenIDBlacklist[i] = regexp.MustCompilePOSIX(p) } } - } var logLevels = map[string]string{ |