mirror of
https://github.com/go-gitea/gitea.git
synced 2026-03-12 02:24:21 -05:00
External markup renderer [$15] #117
Closed
opened 2025-11-02 03:09:40 -06:00 by GiteaMirror
·
22 comments
No Branch/Tag Specified
main
release/v1.25
release/v1.24
release/v1.23
release/v1.22
release/v1.21
release/v1.20
release/v1.19
release/v1.18
release/v1.17
release/v1.16
release/v1.15
release/v1.14
release/v1.13
release/v1.12
release/v1.11
release/v1.10
release/v1.9
release/v1.8
v1.25.3
v1.25.2
v1.25.1
v1.25.0
v1.24.7
v1.25.0-rc0
v1.26.0-dev
v1.24.6
v1.24.5
v1.24.4
v1.24.3
v1.24.2
v1.24.1
v1.24.0
v1.23.8
v1.24.0-rc0
v1.25.0-dev
v1.23.7
v1.23.6
v1.23.5
v1.23.4
v1.23.3
v1.23.2
v1.23.1
v1.23.0
v1.23.0-rc0
v1.24.0-dev
v1.22.6
v1.22.5
v1.22.4
v1.22.3
v1.22.2
v1.22.1
v1.22.0
v1.23.0-dev
v1.22.0-rc1
v1.21.11
v1.22.0-rc0
v1.21.10
v1.21.9
v1.21.8
v1.21.7
v1.21.6
v1.21.5
v1.21.4
v1.21.3
v1.21.2
v1.20.6
v1.21.1
v1.21.0
v1.21.0-rc2
v1.21.0-rc1
v1.20.5
v1.22.0-dev
v1.21.0-rc0
v1.20.4
v1.20.3
v1.20.2
v1.20.1
v1.20.0
v1.19.4
v1.21.0-dev
v1.20.0-rc2
v1.20.0-rc1
v1.20.0-rc0
v1.19.3
v1.19.2
v1.19.1
v1.19.0
v1.19.0-rc1
v1.20.0-dev
v1.19.0-rc0
v1.18.5
v1.18.4
v1.18.3
v1.18.2
v1.18.1
v1.18.0
v1.17.4
v1.18.0-rc1
v1.19.0-dev
v1.18.0-rc0
v1.17.3
v1.17.2
v1.17.1
v1.17.0
v1.17.0-rc2
v1.16.9
v1.17.0-rc1
v1.18.0-dev
v1.16.8
v1.16.7
v1.16.6
v1.16.5
v1.16.4
v1.16.3
v1.16.2
v1.16.1
v1.16.0
v1.15.11
v1.17.0-dev
v1.16.0-rc1
v1.15.10
v1.15.9
v1.15.8
v1.15.7
v1.15.6
v1.15.5
v1.15.4
v1.15.3
v1.15.2
v1.15.1
v1.14.7
v1.15.0
v1.15.0-rc3
v1.14.6
v1.15.0-rc2
v1.14.5
v1.16.0-dev
v1.15.0-rc1
v1.14.4
v1.14.3
v1.14.2
v1.14.1
v1.14.0
v1.13.7
v1.14.0-rc2
v1.13.6
v1.13.5
v1.14.0-rc1
v1.15.0-dev
v1.13.4
v1.13.3
v1.13.2
v1.13.1
v1.13.0
v1.12.6
v1.13.0-rc2
v1.14.0-dev
v1.13.0-rc1
v1.12.5
v1.12.4
v1.12.3
v1.12.2
v1.12.1
v1.11.8
v1.12.0
v1.11.7
v1.12.0-rc2
v1.11.6
v1.12.0-rc1
v1.13.0-dev
v1.11.5
v1.11.4
v1.11.3
v1.10.6
v1.12.0-dev
v1.11.2
v1.10.5
v1.11.1
v1.10.4
v1.11.0
v1.11.0-rc2
v1.10.3
v1.11.0-rc1
v1.10.2
v1.10.1
v1.10.0
v1.9.6
v1.9.5
v1.10.0-rc2
v1.11.0-dev
v1.10.0-rc1
v1.9.4
v1.9.3
v1.9.2
v1.9.1
v1.9.0
v1.9.0-rc2
v1.10.0-dev
v1.9.0-rc1
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.8.0-rc3
v1.7.6
v1.8.0-rc2
v1.7.5
v1.8.0-rc1
v1.9.0-dev
v1.7.4
v1.7.3
v1.7.2
v1.7.1
v1.7.0
v1.7.0-rc3
v1.6.4
v1.7.0-rc2
v1.6.3
v1.7.0-rc1
v1.7.0-dev
v1.6.2
v1.6.1
v1.6.0
v1.6.0-rc2
v1.5.3
v1.6.0-rc1
v1.6.0-dev
v1.5.2
v1.5.1
v1.5.0
v1.5.0-rc2
v1.5.0-rc1
v1.5.0-dev
v1.4.3
v1.4.2
v1.4.1
v1.4.0
v1.4.0-rc3
v1.4.0-rc2
v1.3.3
v1.4.0-rc1
v1.3.2
v1.3.1
v1.3.0
v1.3.0-rc2
v1.3.0-rc1
v1.2.3
v1.2.2
v1.2.1
v1.2.0
v1.2.0-rc3
v1.2.0-rc2
v1.1.4
v1.2.0-rc1
v1.1.3
v1.1.2
v1.1.1
v1.1.0
v1.0.2
v1.0.1
v1.0.0
v0.9.99
Labels
Clear labels
$20
$250
$50
$500
backport/done
💎 Bounty
docs-update-needed
good first issue
hacktoberfest
issue/bounty
issue/confirmed
issue/critical
issue/duplicate
issue/needs-feedback
issue/not-a-bug
issue/regression
issue/stale
issue/workaround
lgtm/need 2
modifies/api
modifies/translation
outdated/backport/v1.18
outdated/theme/markdown
outdated/theme/timetracker
performance/bigrepo
performance/cpu
performance/memory
performance/speed
pr/breaking
proposal/accepted
proposal/rejected
pr/wip
pull-request
reviewed/wontfix
💰 Rewarded
skip-changelog
status/blocked
topic/accessibility
topic/api
topic/authentication
topic/build
topic/code-linting
topic/commit-signing
topic/content-rendering
topic/deployment
topic/distribution
topic/federation
topic/gitea-actions
topic/issues
topic/lfs
topic/mobile
topic/moderation
topic/packages
topic/pr
topic/projects
topic/repo
topic/repo-migration
topic/security
topic/theme
topic/ui
topic/ui-interaction
topic/ux
topic/webhooks
topic/wiki
type/bug
type/deprecation
type/docs
type/enhancement
type/feature
type/miscellaneous
type/proposal
type/question
type/refactoring
type/summary
type/testing
type/upstream
Mirrored from GitHub Pull Request
Milestone
No items
No Milestone
Projects
Clear projects
No project
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: github-starred/gitea#117
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @plemp on GitHub (Dec 11, 2016).
Originally assigned to: @lunny on GitHub.
See gogits/gogs#211 and gogits/gogs#2097.
Most Python-related projects use reStructuredText
.rstinstead of markdown files, forREADME.rstand documentation. Sometimes other markup languages are used, or markdown with extensions currently not supported by Gitea. GitHub supports the following markups: https://github.com/github/markup/.I propose the following feature:
If, for example, the file
README.rstexists, its first 1024 bytes will be passed into stdin ofrst2html.py --no-rawand stdout will be displayed as html for the file preview.An optional
%swill be replaced by the matched file extension (so that one can write a script that handles both.rstand.asciidoc).As such a feature would be important to me, I am willing to implement this proposal, assuming there is a good chance it will be merged into master. Let me know if I can start working on it.
There is a $15 open bounty on this issue. Add to the bounty at Bountysource.
@tboerger commented on GitHub (Dec 11, 2016):
Depending on external tools for rendering content is not really our goal
@plemp commented on GitHub (Dec 11, 2016):
The default can be empty, then it's not a dependency and more like plugin interface.
@lunny commented on GitHub (Dec 11, 2016):
We could find a go lib to do that
@lunny commented on GitHub (Dec 12, 2016):
It seems there isn't any mature Golang library to do that. So maybe give a config like @plemp said, but default is closed currently.
@bkcsoft commented on GitHub (Dec 12, 2016):
IMO adding external renderers isn't a bad idea, could be made with a simple list.
Have a simple schema to identify arguments, basically injecting
.InFileand.OutFileExample:
given
would generate
/usr/bin/rst2html5 foo.rst > /tmp/gitea-1337/foo.html@tboerger commented on GitHub (Dec 16, 2016):
I would prefer to integrate a real plugin system instead of increasing the current config more and more
@Solido commented on GitHub (Mar 11, 2017):
Well I guess I'm just here to vote for .asciidoc the rich format and feature is offers have make it a defacto tools in our product chain.
@joneepenk commented on GitHub (Mar 16, 2017):
@tboerger maybe external renderer is better choice, because asciidoc is an extensible format. the renderer itself should have a plugin system.
@lannocc commented on GitHub (May 26, 2017):
I recently did a quick-and-dirty hack on Gogs to add some basic .rst support for our own use, but maybe you will also find it useful:
https://github.com/AlphaGriffin/gogs
@lunny commented on GitHub (May 26, 2017):
@lannocc great! I will try to merge it on v1.3
@lunny commented on GitHub (Sep 17, 2017):
After #2525 merged, I will try to add reStructuredText support based on github.com/hhatto/gorst and https://github.com/AlphaGriffin/gogs. And I think that should be easy since that a new document type only implementation
markup.Parser.@lunny commented on GitHub (Sep 17, 2017):
And for asciidoc, since github.com/VonC/asciidocgo could be imported.@lunny commented on GitHub (Sep 21, 2017):
@plemp, It seems there is no golang lib to handle asciidoc well. don't know how to use
github.com/VonC/asciidocgo.@lenisko commented on GitHub (Oct 20, 2017):
Any update on this one?
@lunny https://godoc.org/github.com/VonC/asciidocgo documentation looks good to me
@lunny commented on GitHub (Oct 20, 2017):
@lenisko #2570 will support external render commands.
@tantegerda1 commented on GitHub (Nov 15, 2017):
@lunny: Bountysource keeps telling me "Your application has been suspended" and throws various
{"error":"Internal server error."}responses, keeping me from releasing the bounty. The mails I got from them uniquely say that if I "don't respond" you will get the bounty paid out at 2017-11-21. Sorry for that delay!Could you check back at that date and - please - get in touch with me[1], should Bountysource fail to pay the bounty.
Thank you - and all contributors - for your continuous work on Gitea!
[1] via GitHub or
accounts+github@netztechniker.at@lunny commented on GitHub (Nov 15, 2017):
@tantegerda1 OK. Thanks for your bounty.
@James-E-A commented on GitHub (Sep 21, 2018):
Getting this working was as simple as
docutils(didn't even need root for that!)PATHcontains$HOME/.local/binapp.ini:Readme.rstrenders just as prettily on my selfhost as on GitHub! 🎉However, what I am wondering is: isn't this a security nightmare*? How quick+easy would it be for some sufficiently clever person to monkey into existence a
Readme.rstthat, when uploaded, would allow doing things not otherwise doable on the server?*—in a situation involving potentially untrusted users having write access to repositories
@James-E-A commented on GitHub (Sep 21, 2018):
Although, a small P.S. to the previous comment:
Is the above explicitly documented anywhere beyond thread #2570 in GitHub's walled-garden forum, associated with (but not documented in) commit
62d0a4d882?@Shados commented on GitHub (Nov 21, 2018):
@JamesTheAwesomeDude it is definitely a security problem in that situation. I wouldn't say it is a complete nightmare, however, because you can write a wrapper for your external renderer that takes one or more steps to isolate it from your server environment, e.g.:
You're still left with the problem of the returned html being untrusted, but you can at least prevent attacks on the external renderer(s) from being able to perform arbitrary actions on the server.
@James-E-A commented on GitHub (Dec 14, 2018):
@Shados Just to expand on that a bit,
since
rst2html.pyis seemingly only having stdio used, I guess it'd pretty simple to set up something like the way FastCGI servers work, just assign the wrapper/offloader script toRENDER_COMMAND.But I really am concerned at the scarcity of documentation on this; as I mentioned before, you've got to manually hunt down the information yourself to make this work..I might have to stick something in the Wiki, maybe...
Although, re:"the problem of the returned html being untrusted",
It does look like Gitea (and Github itself, for that matter) actually sanitizes it pretty violently...for instance,
renders to the browser merely to:
with absolutely no styling at all, not even an indication that the word "Note" is a header for the following content, no indent for the note itself....anything
(same with
warning, etc)@Shados commented on GitHub (Dec 17, 2018):
@JamesTheAwesomeDude yes, output from markup modules (external renderer included) are passed through a sanitizer in an attempt at solving that part of the problem.
Of course, if you want the output to be useful, you would likely need to relax the sanitizer slightly to allow more class names (whatever ones your renderer is using), and then separately supply a manually-audited or created stylesheet that defines those classes.
You're still left with two possible avenues of attack, however: