]> source.dussan.org Git - gitea.git/commitdiff
Redirect .wiki/* ui link to /wiki (#18831)
authora1012112796 <1012112796@qq.com>
Wed, 23 Mar 2022 13:29:18 +0000 (21:29 +0800)
committerGitHub <noreply@github.com>
Wed, 23 Mar 2022 13:29:18 +0000 (13:29 +0000)
Redirect .wiki/* ui link to /wiki

fix #18590

Signed-off-by: a1012112796 <1012112796@qq.com>
Signed-off-by: Andrew Thornton <art27@cantab.net>
Co-authored-by: Andrew Thornton <art27@cantab.net>
modules/context/repo.go

index 87be2af135800e76c10e8156a9399e89aa89d751..b345decf7e115013e1bab7afd65441a502783e68 100644 (file)
@@ -441,6 +441,26 @@ func RepoAssignment(ctx *Context) (cancel context.CancelFunc) {
        ctx.Repo.Owner = owner
        ctx.Data["Username"] = ctx.Repo.Owner.Name
 
+       // redirect link to wiki
+       if strings.HasSuffix(repoName, ".wiki") {
+               // ctx.Req.URL.Path does not have the preceding appSubURL - any redirect must have this added
+               // Now we happen to know that all of our paths are: /:username/:reponame/whatever_else
+               originalRepoName := ctx.Params(":reponame")
+               redirectRepoName := strings.TrimSuffix(repoName, ".wiki")
+               redirectRepoName += originalRepoName[len(redirectRepoName)+5:]
+               redirectPath := strings.Replace(
+                       ctx.Req.URL.EscapedPath(),
+                       url.PathEscape(userName)+"/"+url.PathEscape(originalRepoName),
+                       url.PathEscape(userName)+"/"+url.PathEscape(redirectRepoName)+"/wiki",
+                       1,
+               )
+               if ctx.Req.URL.RawQuery != "" {
+                       redirectPath += "?" + ctx.Req.URL.RawQuery
+               }
+               ctx.Redirect(path.Join(setting.AppSubURL, redirectPath))
+               return
+       }
+
        // Get repository.
        repo, err := repo_model.GetRepositoryByName(owner.ID, repoName)
        if err != nil {