Use url parameters instead of path

This commit is contained in:
2022-12-09 17:14:42 +01:00
parent 2a45573cd9
commit 6d028919b7
2 changed files with 22 additions and 2 deletions

View File

@ -27,6 +27,7 @@ Functions:
Runs on startup. Runs on startup.
""" """
import sys import sys
import urllib.parse
from functools import cache from functools import cache
from typing import Any, Iterable from typing import Any, Iterable
@ -48,6 +49,21 @@ app.mount("/static", StaticFiles(directory="static"), name="static")
templates: Jinja2Templates = Jinja2Templates(directory="templates") templates: Jinja2Templates = Jinja2Templates(directory="templates")
def encode_url(url_to_quote: str) -> str:
"""%-escape the URL so it can be used in a URL. If we didn't do this, the URL could contain a ?
Args:
url_to_quote: The url to encode.
Returns:
The encoded url.
"""
return urllib.parse.quote(url_to_quote)
templates.env.filters["encode_url"] = encode_url
@app.post("/check", response_class=HTMLResponse) @app.post("/check", response_class=HTMLResponse)
def check_feed(request: Request, feed_url: str = Form()) -> _TemplateResponse: def check_feed(request: Request, feed_url: str = Form()) -> _TemplateResponse:
"""Check all feeds""" """Check all feeds"""
@ -120,7 +136,7 @@ def get_add(request: Request) -> _TemplateResponse:
return templates.TemplateResponse("add.html", context) return templates.TemplateResponse("add.html", context)
@app.get("/feed/{feed_url:path}", response_class=HTMLResponse) @app.get("/feed/", response_class=HTMLResponse)
async def get_feed(feed_url: str, request: Request) -> _TemplateResponse: async def get_feed(feed_url: str, request: Request) -> _TemplateResponse:
""" """
Get a feed by URL. Get a feed by URL.
@ -132,6 +148,9 @@ async def get_feed(feed_url: str, request: Request) -> _TemplateResponse:
Returns: Returns:
HTMLResponse: The HTML response. HTMLResponse: The HTML response.
""" """
# Make feed_url a valid URL.
feed_url = urllib.parse.unquote(feed_url)
feed: Feed = reader.get_feed(feed_url) feed: Feed = reader.get_feed(feed_url)
# Get entries from the feed. # Get entries from the feed.

View File

@ -34,7 +34,8 @@
{% set hook_from_feed = feed_webhook["webhook"] %} {% set hook_from_feed = feed_webhook["webhook"] %}
{% if hook_from_context.url == hook_from_feed %} {% if hook_from_context.url == hook_from_feed %}
<li class="list-group-item" style="background:#111111"> <li class="list-group-item" style="background:#111111">
<a class="text-muted" href="/feed/{{ feed.url }}">{{ feed.url }}</a> <a class="text-muted"
href="/feed?feed_url={{ feed.url|encode_url }}">{{ feed.url }}</a>
</li> </li>
{% endif %} {% endif %}
{% endfor %} {% endfor %}