Add a reserved path check to the wiki (#720)

This commit is contained in:
Bwko 2017-01-22 16:08:54 +01:00 committed by Lunny Xiao
parent f9a3aa8737
commit 1257d43e14
1 changed files with 18 additions and 1 deletions

View File

@ -21,7 +21,10 @@ import (
"code.gitea.io/gitea/modules/sync" "code.gitea.io/gitea/modules/sync"
) )
var wikiWorkingPool = sync.NewExclusivePool() var (
reservedWikiPaths = []string{"_pages", "_new", "_edit"}
wikiWorkingPool = sync.NewExclusivePool()
)
// ToWikiPageURL formats a string to corresponding wiki URL name. // ToWikiPageURL formats a string to corresponding wiki URL name.
func ToWikiPageURL(name string) string { func ToWikiPageURL(name string) string {
@ -88,8 +91,22 @@ func discardLocalWikiChanges(localPath string) error {
return discardLocalRepoBranchChanges(localPath, "master") return discardLocalRepoBranchChanges(localPath, "master")
} }
// pathAllowed checks if a wiki path is allowed
func pathAllowed(path string) error {
for i := range reservedWikiPaths {
if path == reservedWikiPaths[i] {
return ErrWikiAlreadyExist{path}
}
}
return nil
}
// updateWikiPage adds new page to repository wiki. // updateWikiPage adds new page to repository wiki.
func (repo *Repository) updateWikiPage(doer *User, oldWikiPath, wikiPath, content, message string, isNew bool) (err error) { func (repo *Repository) updateWikiPage(doer *User, oldWikiPath, wikiPath, content, message string, isNew bool) (err error) {
if err = pathAllowed(wikiPath); err != nil {
return err
}
wikiWorkingPool.CheckIn(com.ToStr(repo.ID)) wikiWorkingPool.CheckIn(com.ToStr(repo.ID))
defer wikiWorkingPool.CheckOut(com.ToStr(repo.ID)) defer wikiWorkingPool.CheckOut(com.ToStr(repo.ID))