Fix slug lookup regression (#587)
Removing the Mongo InvalidID legacy code removed an explicit check for "int" for the id lookup. This led the @get_user_media_entry decorator to fail if we looked up a nonexisting non-numerical slug (it tried to query the id with a string, which failed). Cast id to int and return 404 in case it is non-numeric which fixes the regression. It does not fix the underlying problem of slug_or_id lookups that were discussed. Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
This commit is contained in:
parent
76e6c2b15e
commit
7f4e42b0b1
@ -17,7 +17,7 @@
|
||||
from functools import wraps
|
||||
|
||||
from urlparse import urljoin
|
||||
from werkzeug.exceptions import Forbidden
|
||||
from werkzeug.exceptions import Forbidden, NotFound
|
||||
from werkzeug.urls import url_quote
|
||||
|
||||
from mediagoblin.db.models import MediaEntry, User
|
||||
@ -120,25 +120,29 @@ def get_user_media_entry(controller):
|
||||
"""
|
||||
@wraps(controller)
|
||||
def wrapper(request, *args, **kwargs):
|
||||
user = request.db.User.find_one(
|
||||
{'username': request.matchdict['user']})
|
||||
|
||||
user = User.query.filter_by(username=request.matchdict['user']).first()
|
||||
if not user:
|
||||
return render_404(request)
|
||||
media = request.db.MediaEntry.find_one(
|
||||
{'slug': request.matchdict['media'],
|
||||
'state': u'processed',
|
||||
'uploader': user.id})
|
||||
raise NotFound()
|
||||
|
||||
# no media via slug? Grab it via object id
|
||||
if not media:
|
||||
media = MediaEntry.query.filter_by(
|
||||
id=request.matchdict['media'],
|
||||
slug = request.matchdict['media'],
|
||||
state = u'processed',
|
||||
uploader = user.id).first()
|
||||
# Still no media? Okay, 404.
|
||||
|
||||
if not media:
|
||||
return render_404(request)
|
||||
# no media via slug? Grab it via object id
|
||||
try:
|
||||
media = MediaEntry.query.filter_by(
|
||||
id = int(request.matchdict['media']),
|
||||
state = u'processed',
|
||||
uploader = user.id).first()
|
||||
except ValueError:
|
||||
# media "id" was no int
|
||||
raise NotFound()
|
||||
|
||||
if not media:
|
||||
# no media by that id? Okay, 404.
|
||||
raise NotFound()
|
||||
|
||||
return controller(request, media=media, *args, **kwargs)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user