return fmt.Sprintf("wiki title is reserved: %s", err.Title)
}
+// ErrWikiInvalidFileName represents an invalid wiki file name.
+type ErrWikiInvalidFileName struct {
+ FileName string
+}
+
+// IsErrWikiInvalidFileName checks if an error is an ErrWikiInvalidFileName.
+func IsErrWikiInvalidFileName(err error) bool {
+ _, ok := err.(ErrWikiInvalidFileName)
+ return ok
+}
+
+func (err ErrWikiInvalidFileName) Error() string {
+ return fmt.Sprintf("Invalid wiki filename: %s", err.FileName)
+}
+
// __________ ___. .__ .__ ____ __.
// \______ \__ _\_ |__ | | |__| ____ | |/ _|____ ___.__.
// | ___/ | \ __ \| | | |/ ___\ | <_/ __ < | |
// WikiFilenameToName converts a wiki filename to its corresponding page name.
func WikiFilenameToName(filename string) (string, error) {
if !strings.HasSuffix(filename, ".md") {
- return "", fmt.Errorf("Invalid wiki filename: %s", filename)
+ return "", ErrWikiInvalidFileName{filename}
}
basename := filename[:len(filename)-3]
unescaped, err := url.QueryUnescape(basename)
for _, badFilename := range []string{
"nofileextension",
"wrongfileextension.txt",
- "badescaping%%.md",
} {
_, err := WikiFilenameToName(badFilename)
assert.Error(t, err)
+ assert.True(t, IsErrWikiInvalidFileName(err))
}
+ _, err := WikiFilenameToName("badescaping%%.md")
+ assert.Error(t, err)
+ assert.False(t, IsErrWikiInvalidFileName(err))
}
func TestWikiNameToFilenameToName(t *testing.T) {
}
wikiName, err := models.WikiFilenameToName(entry.Name())
if err != nil {
+ if models.IsErrWikiInvalidFileName(err) {
+ continue
+ }
ctx.ServerError("WikiFilenameToName", err)
return nil, nil
} else if wikiName == "_Sidebar" || wikiName == "_Footer" {
}
wikiName, err := models.WikiFilenameToName(entry.Name())
if err != nil {
+ if models.IsErrWikiInvalidFileName(err) {
+ continue
+ }
ctx.ServerError("WikiFilenameToName", err)
return
}