Skip to content

Commit

Permalink
Add itemlinks validator
Browse files Browse the repository at this point in the history
  • Loading branch information
UlrichB22 committed Jun 21, 2024
1 parent d913e87 commit d1006df
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 5 deletions.
9 changes: 5 additions & 4 deletions src/moin/storage/middleware/indexing.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Copyright: 2011 MoinMoin:RonnyPfannschmidt
# Copyright: 2011 MoinMoin:ThomasWaldmann
# Copyright: 2011 MoinMoin:MichaelMayorov
# Copyright: 2024 MoinMoin:UlrichB
# License: GNU GPL v2 (or any later version), see LICENSE.txt for details.

"""
Expand Down Expand Up @@ -1241,10 +1242,10 @@ def store_revision(
logging.warning("data validation skipped because metadata is invalid, see below")
val = []
for e in m.children:
if e.name == "subscriptions":
for sub in e.children:
if sub.valid is False:
val.append(f'"{str(sub)}". {str(sub.errors[0])}')
if e.name in ["itemlinks", "subscriptions"]:
for child in e.children:
if child.valid is False:
val.append(f'"{str(child)}". {str(child.errors[0])}')
e.valid = False
elif e.valid is False:
val.append(str(e))
Expand Down
20 changes: 19 additions & 1 deletion src/moin/storage/middleware/validation.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Copyright: 2011,2012 MoinMoin:ThomasWaldmann
# Copyright: 2024 MoinMoin:UlrichB
# License: GNU GPL v2 (or any later version), see LICENSE.txt for details.

"""
Expand Down Expand Up @@ -110,6 +111,23 @@ def name_validator(element, state):
return True


def itemlink_validator(element, state):
"""an itemlink"""
if element.raw is Unset:
element.set(state[keys.NAME])
v = element.value
if not isinstance(v, str):
return False
if v != v.strip():
return False
if v.startswith("/") or v.endswith("/"):
element.add_error("Itemlink may not start or end with '/'.")
return False
if "//" in v: # empty ancestor name is invalid
return False
return True


def tag_validator(element, state):
"""
a tag
Expand Down Expand Up @@ -395,7 +413,7 @@ def subscription_validator(element, state):
String.named(keys.HASH_ALGORITHM).validated_by(hash_validator),
String.named(keys.DATAID).validated_by(uuid_validator).using(optional=True),
# markup items may have this:
List.named(keys.ITEMLINKS).of(String.named("itemlink").validated_by(wikiname_validator)).using(optional=True),
List.named(keys.ITEMLINKS).of(String.named("itemlink").validated_by(itemlink_validator)).using(optional=True),
List.named(keys.ITEMTRANSCLUSIONS)
.of(String.named("itemtransclusion").validated_by(wikiname_validator))
.using(optional=True),
Expand Down

0 comments on commit d1006df

Please sign in to comment.