Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • morganamilo/aurweb
  • tex/aurweb
  • abitrolly/aurweb
  • muflone/aurweb
  • anthraxx/aurweb
  • jafari/aurweb
  • levitating/aurweb
  • freso/aurweb
  • okabe/aurweb
  • rafaelff/aurweb
  • zoorat/aurweb
  • auerhuhn/aurweb
  • nils/aurweb
  • antiz/aurweb
  • henry-zhr/aurweb
  • segaja/aurweb
  • som015/aurweb
  • gromit/aurweb
  • belongingtome47/aurweb
  • moson/aurweb
  • steppaa23/aurweb
  • bittin/aurweb
  • jkhsjdhjs/aurweb
  • whynothugo/aurweb
  • matt/aurweb
  • fosskers/aurweb
  • awalgarg/aurweb
  • robertoszek/aurweb
  • ainola/aurweb
  • fluix/aurweb
  • hwittenborn/aurweb
  • jocke-l/aurweb
  • eschwartz/aurweb
  • mackilanu/aurweb
  • artafinde/aurweb
  • klausenbusk/aurweb
  • felixonmars/aurweb
  • kevr/aurweb
  • hashworks/aurweb
  • freswa/aurweb
  • lahwaacz/aurweb
  • jelle/aurweb
  • ffy00/aurweb
  • archlinux/aurweb
44 results
Show changes
Commits on Source (2)
......@@ -200,6 +200,8 @@ async def package(
context["licenses"] = pkg.package_licenses
context["groups"] = pkg.package_groups
conflicts = pkg.package_relations.filter(
models.PackageRelation.RelTypeID == CONFLICTS_ID
).order_by(models.PackageRelation.RelName.asc())
......
......@@ -121,6 +121,20 @@ class HeadingExtension(markdown.extensions.Extension):
md.treeprocessors.register(HeadingTreeprocessor(md), "heading", 30)
class StrikethroughInlineProcessor(markdown.inlinepatterns.InlineProcessor):
def handleMatch(self, m, data):
el = Element("del")
el.text = m.group(1)
return el, m.start(0), m.end(0)
class StrikethroughExtension(markdown.extensions.Extension):
def extendMarkdown(self, md):
pattern = r"~~(.*?)~~"
processor = StrikethroughInlineProcessor(pattern, md)
md.inlinePatterns.register(processor, "del", 40)
def save_rendered_comment(comment: PackageComment, html: str):
with db.begin():
comment.RenderedComment = html
......@@ -142,6 +156,7 @@ def update_comment_render(comment: PackageComment) -> None:
FlysprayLinksExtension(),
GitCommitsExtension(pkgbasename),
HeadingExtension(),
StrikethroughExtension(),
],
)
......@@ -153,6 +168,9 @@ def update_comment_render(comment: PackageComment) -> None:
"h6",
"br",
"hr",
"del",
"details",
"summary",
]
html = bleach.clean(html, tags=allowed_tags)
save_rendered_comment(comment, html)
......
......@@ -68,6 +68,12 @@
<td>{{ licenses.all() | join(', ', attribute='License.Name') }} </td>
</tr>
{% endif %}
{% if show_package_details and groups and groups.count() %}
<tr id="groups">
<th>{{ "Groups" | tr }}:</th>
<td>{{ groups.all() | join(', ', attribute='Group.Name') }} </td>
</tr>
{% endif %}
{% if show_package_details and conflicts and conflicts.count() %}
<tr id="conflicts">
<th>{{ "Conflicts" | tr }}:</th>
......
......@@ -105,6 +105,13 @@ def test_markdown_conversion(user: User, pkgbase: PackageBase):
assert comment.RenderedComment == expected
def test_markdown_strikethrough(user: User, pkgbase: PackageBase):
text = "*~~Hello~~world*~~!~~"
comment = create_comment(user, pkgbase, text)
expected = "<p><em><del>Hello</del>world</em><del>!</del></p>"
assert comment.RenderedComment == expected
def test_html_sanitization(user: User, pkgbase: PackageBase):
text = '<script>alert("XSS!")</script>'
comment = create_comment(user, pkgbase, text)
......
......@@ -8,8 +8,10 @@ from aurweb import config, db, templates, time
from aurweb.filters import as_timezone, number_format, timestamp_to_datetime as to_dt
from aurweb.models import Package, PackageBase, User
from aurweb.models.account_type import USER_ID
from aurweb.models.group import Group
from aurweb.models.license import License
from aurweb.models.package_base import popularity
from aurweb.models.package_group import PackageGroup
from aurweb.models.package_license import PackageLicense
from aurweb.models.package_relation import PackageRelation
from aurweb.models.relation_type import PROVIDES_ID, REPLACES_ID
......@@ -88,6 +90,12 @@ def create_license(pkg: Package, license_name: str) -> PackageLicense:
return pkglic
def create_group(pkg: Package, group_name: str) -> PackageLicense:
grp = db.create(Group, Name=group_name)
pkggrp = db.create(PackageGroup, Group=grp, Package=pkg)
return pkggrp
def test_register_function_exists_key_error():
"""Most instances of register_filter are tested through module
imports or template renders, so we only test failures here."""
......@@ -219,6 +227,15 @@ def check_package_details(content: str, pkg: Package) -> None:
else:
assert "Licenses" not in content
groups = pkg.package_groups.all()
if groups:
i += 1
expected = ", ".join([p.Group.Name for p in groups])
group_markup = rows[i].xpath("./td")[0]
assert group_markup.text.strip() == expected
else:
assert "Groups" not in content
provides = pkg.package_relations.filter(
PackageRelation.RelTypeID == PROVIDES_ID
).all()
......@@ -319,6 +336,10 @@ def test_package_details_filled(user: User, package: Package):
create_license(package, "TPL") # Testing Public License
create_license(package, "TPL2") # Testing Public License 2
# Create two groups.
create_group(package, "GRP")
create_group(package, "GRP2")
# Add provides.
create_pkgrel(package, PROVIDES_ID, "test-provider")
......@@ -337,6 +358,7 @@ def test_package_details_filled(user: User, package: Package):
"package": package,
"comaintainers": [],
"licenses": package.package_licenses,
"groups": package.package_groups,
"provides": package.package_relations.filter(
PackageRelation.RelTypeID == PROVIDES_ID
),
......