summaryrefslogtreecommitdiffstats
path: root/routers/web/misc
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2022-04-08 12:22:10 +0800
committerGitHub <noreply@github.com>2022-04-08 06:22:10 +0200
commit3c3d49899f0f7206e190bdeecdc4da248cc7e686 (patch)
tree7d1f57f7655142b47b5adeb197943c74c1e6f8c9 /routers/web/misc
parent75f8534c3a8678f4b55e557960450230cf909b93 (diff)
downloadgitea-3c3d49899f0f7206e190bdeecdc4da248cc7e686.tar.gz
gitea-3c3d49899f0f7206e190bdeecdc4da248cc7e686.zip
Remove dependent on session auth for api/v1 routers (#19321)
* Remove dependent on session auth for api/v1 routers * Remove unnecessary session on API context * remove missed header * fix test * fix missed api/v1
Diffstat (limited to 'routers/web/misc')
-rw-r--r--routers/web/misc/markdown.go98
-rw-r--r--routers/web/misc/swagger.go21
2 files changed, 119 insertions, 0 deletions
diff --git a/routers/web/misc/markdown.go b/routers/web/misc/markdown.go
new file mode 100644
index 0000000000..b37aaf10ff
--- /dev/null
+++ b/routers/web/misc/markdown.go
@@ -0,0 +1,98 @@
+// Copyright 2014 The Gogs Authors. All rights reserved.
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package misc
+
+import (
+ "net/http"
+ "strings"
+
+ "code.gitea.io/gitea/modules/context"
+ "code.gitea.io/gitea/modules/markup"
+ "code.gitea.io/gitea/modules/markup/markdown"
+ "code.gitea.io/gitea/modules/setting"
+ api "code.gitea.io/gitea/modules/structs"
+ "code.gitea.io/gitea/modules/util"
+ "code.gitea.io/gitea/modules/web"
+ "mvdan.cc/xurls/v2"
+)
+
+// Markdown render markdown document to HTML
+func Markdown(ctx *context.Context) {
+ // swagger:operation POST /markdown miscellaneous renderMarkdown
+ // ---
+ // summary: Render a markdown document as HTML
+ // parameters:
+ // - name: body
+ // in: body
+ // schema:
+ // "$ref": "#/definitions/MarkdownOption"
+ // consumes:
+ // - application/json
+ // produces:
+ // - text/html
+ // responses:
+ // "200":
+ // "$ref": "#/responses/MarkdownRender"
+ // "422":
+ // "$ref": "#/responses/validationError"
+
+ form := web.GetForm(ctx).(*api.MarkdownOption)
+
+ if ctx.HasAPIError() {
+ ctx.Error(http.StatusUnprocessableEntity, "", ctx.GetErrMsg())
+ return
+ }
+
+ if len(form.Text) == 0 {
+ _, _ = ctx.Write([]byte(""))
+ return
+ }
+
+ switch form.Mode {
+ case "comment":
+ fallthrough
+ case "gfm":
+ urlPrefix := form.Context
+ meta := map[string]string{}
+ if !strings.HasPrefix(setting.AppSubURL+"/", urlPrefix) {
+ // check if urlPrefix is already set to a URL
+ linkRegex, _ := xurls.StrictMatchingScheme("https?://")
+ m := linkRegex.FindStringIndex(urlPrefix)
+ if m == nil {
+ urlPrefix = util.URLJoin(setting.AppURL, form.Context)
+ }
+ }
+ if ctx.Repo != nil && ctx.Repo.Repository != nil {
+ // "gfm" = Github Flavored Markdown - set this to render as a document
+ if form.Mode == "gfm" {
+ meta = ctx.Repo.Repository.ComposeDocumentMetas()
+ } else {
+ meta = ctx.Repo.Repository.ComposeMetas()
+ }
+ }
+ if form.Mode == "gfm" {
+ meta["mode"] = "document"
+ }
+
+ if err := markdown.Render(&markup.RenderContext{
+ Ctx: ctx,
+ URLPrefix: urlPrefix,
+ Metas: meta,
+ IsWiki: form.Wiki,
+ }, strings.NewReader(form.Text), ctx.Resp); err != nil {
+ ctx.Error(http.StatusInternalServerError, err.Error())
+ return
+ }
+ default:
+ if err := markdown.RenderRaw(&markup.RenderContext{
+ Ctx: ctx,
+ URLPrefix: form.Context,
+ }, strings.NewReader(form.Text), ctx.Resp); err != nil {
+ ctx.Error(http.StatusInternalServerError, err.Error())
+ return
+ }
+ }
+}
diff --git a/routers/web/misc/swagger.go b/routers/web/misc/swagger.go
new file mode 100644
index 0000000000..e46d4194b4
--- /dev/null
+++ b/routers/web/misc/swagger.go
@@ -0,0 +1,21 @@
+// Copyright 2017 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package misc
+
+import (
+ "net/http"
+
+ "code.gitea.io/gitea/modules/base"
+ "code.gitea.io/gitea/modules/context"
+)
+
+// tplSwagger swagger page template
+const tplSwagger base.TplName = "swagger/ui"
+
+// Swagger render swagger-ui page with v1 json
+func Swagger(ctx *context.Context) {
+ ctx.Data["APIJSONVersion"] = "v1"
+ ctx.HTML(http.StatusOK, tplSwagger)
+}