fix(wiki): directory check before raw redirect #538
+30
-29
@@ -254,38 +254,39 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) {
|
||||
wikiTree := buildWikiTree(commit)
|
||||
ctx.Data["WikiTree"] = wikiTree
|
||||
|
||||
// Check if path is a directory first (before file lookup)
|
||||
dirEntry, _ := commit.GetTreeEntryByPath(string(pageName))
|
||||
if dirEntry != nil && dirEntry.IsDir() {
|
||||
// Path is a directory - try index files or show folder listing
|
||||
var entry *git.TreeEntry
|
||||
foundIndex := false
|
||||
for _, indexName := range []string{"README", "Home", "index"} {
|
||||
indexPath := wiki_service.WebPath(string(pageName) + "/" + indexName)
|
||||
idxEntry, _, idxNoEntry, _ := wikiEntryByName(ctx, commit, indexPath)
|
||||
if !idxNoEntry && idxEntry != nil {
|
||||
pageName = indexPath
|
||||
entry = idxEntry
|
||||
_, displayName = wiki_service.WebPathToUserTitle(pageName)
|
||||
ctx.Data["PageURL"] = wiki_service.WebPathToURLPath(pageName)
|
||||
ctx.Data["Title"] = displayName
|
||||
foundIndex = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !foundIndex {
|
||||
ctx.Data["IsWikiFolder"] = true
|
||||
ctx.Data["WikiFolderPath"] = string(pageName)
|
||||
folderEntries := listWikiFolderEntries(commit, string(pageName))
|
||||
ctx.Data["WikiFolderEntries"] = folderEntries
|
||||
return wikiGitRepo, nil
|
||||
}
|
||||
_ = entry // will be used below via pageName lookup
|
||||
}
|
||||
|
||||
// lookup filename in wiki - get gitTree entry , real filename
|
||||
entry, pageFilename, noEntry, isRaw := wikiEntryByName(ctx, commit, pageName)
|
||||
if noEntry {
|
||||
// Check if path is a directory - try index files or show folder listing
|
||||
dirEntry, _ := commit.GetTreeEntryByPath(string(pageName))
|
||||
if dirEntry != nil && dirEntry.IsDir() {
|
||||
// Try index files: README.md, Home.md, index.md
|
||||
for _, indexName := range []string{"README", "Home", "index"} {
|
||||
indexPath := wiki_service.WebPath(string(pageName) + "/" + indexName)
|
||||
idxEntry, _, idxNoEntry, _ := wikiEntryByName(ctx, commit, indexPath)
|
||||
if !idxNoEntry && idxEntry != nil {
|
||||
// Found index file - render it
|
||||
pageName = indexPath
|
||||
entry = idxEntry
|
||||
_, displayName = wiki_service.WebPathToUserTitle(pageName)
|
||||
ctx.Data["PageURL"] = wiki_service.WebPathToURLPath(pageName)
|
||||
ctx.Data["Title"] = displayName
|
||||
noEntry = false
|
||||
break
|
||||
}
|
||||
}
|
||||
if noEntry {
|
||||
// No index file - show folder listing
|
||||
ctx.Data["IsWikiFolder"] = true
|
||||
ctx.Data["WikiFolderPath"] = string(pageName)
|
||||
folderEntries := listWikiFolderEntries(commit, string(pageName))
|
||||
ctx.Data["WikiFolderEntries"] = folderEntries
|
||||
return wikiGitRepo, nil
|
||||
}
|
||||
} else {
|
||||
ctx.Redirect(ctx.Repo.RepoLink + "/wiki/?action=_pages")
|
||||
}
|
||||
ctx.Redirect(ctx.Repo.RepoLink + "/wiki/?action=_pages")
|
||||
}
|
||||
if isRaw {
|
||||
ctx.Redirect(ctx.Repo.RepoLink + "/wiki/raw/" + string(pageName))
|
||||
|
||||
Reference in New Issue
Block a user