Adds endpoint /api/image/<uuid> so that you can now view an image endpoint
[mediagoblin.git] / mediagoblin / federation / views.py
1 from mediagoblin.decorators import oauth_required
2 from mediagoblin.db.models import User, MediaEntry
3 from mediagoblin.tools.response import json_response
4
5 @oauth_required
6 def user(request):
7 """ Handles user response at /api/user/<username>/ """
8 user = request.matchdict["username"]
9 requested_user = User.query.filter_by(username=user)
10
11 # check if the user exists
12 if requested_user is None:
13 error = "No such 'user' with id '{0}'".format(user)
14 return json_response({"error": error}, status=404)
15
16 user = requested_user[0]
17
18 # user profiles are public so return information
19 return json_response(user.serialize(request))
20
21 @oauth_required
22 def feed(request):
23 """ Handles the user's outbox - /api/user/<username>/feed """
24 user = request.matchdict["username"]
25 requested_user = User.query.filter_by(username=user)
26
27 # check if the user exists
28 if requested_user is None:
29 error = "No such 'user' with id '{0}'".format(user)
30 return json_response({"error": error}, status=404)
31
32 user = request_user[0]
33
34 # Now lookup the user's feed.
35 raise NotImplemented("Yet to implement looking up user's feed")
36
37 @oauth_required
38 def inbox(request):
39 """ Handles the user's inbox - /api/user/<username>/inbox """
40 raise NotImplemented("Yet to implement looking up user's inbox")
41
42 def image_object(request, media):
43 """ Return image object - /api/image/<uuid> """
44 author = media.get_uploader
45 url = request.urlgen(
46 "mediagoblin.user_pages.media_home",
47 user=author.username,
48 media=media.slug,
49 qualified=True
50 )
51
52 context = {
53 "author": author.serialize(request),
54 "displayName": media.title,
55 "objectType": "image",
56 "url": url,
57 }
58
59 return json_response(context)
60
61 @oauth_required
62 def object(request):
63 """ Lookup for a object type """
64 objectType = request.matchdict["objectType"]
65 uuid = request.matchdict["uuid"]
66 if objectType not in ["image"]:
67 error = "Unknown type: {0}".format(objectType)
68 # not sure why this is 404, maybe ask evan. Maybe 400?
69 return json_response({"error": error}, status=404)
70
71 media = MediaEntry.query.filter_by(uuid=uuid).first()
72 if media is None:
73 # no media found with that uuid
74 error = "Can't find a {0} with ID = {1}".format(objectType, uuid)
75 return json_response({"error": error}, status=404)
76
77 if objectType == "image":
78 return image_object(request, media)