Commit | Line | Data |
---|---|---|
d7b3805f | 1 | from mediagoblin.decorators import oauth_required |
5a2056f7 | 2 | from mediagoblin.db.models import User, MediaEntry |
a5682e89 | 3 | from mediagoblin.tools.response import redirect, json_response |
d7b3805f | 4 | |
a5682e89 | 5 | #@oauth_required |
6 | def profile(request, raw=False): | |
7 | """ This is /api/user/<username>/profile - This will give profile info """ | |
d7b3805f JT |
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 | ||
a5682e89 | 18 | if raw: |
19 | return (user, user.serialize(request)) | |
20 | ||
d7b3805f JT |
21 | # user profiles are public so return information |
22 | return json_response(user.serialize(request)) | |
23 | ||
a5682e89 | 24 | def user(request): |
25 | """ This is /api/user/<username> - This will get the user """ | |
26 | user, user_profile = profile(request, raw=True) | |
27 | data = { | |
28 | "nickname": user.username, | |
29 | "updated": user.created.isoformat(), | |
30 | "published": user.created.isoformat(), | |
31 | "profile": user_profile | |
32 | } | |
33 | ||
34 | return json_response(data) | |
35 | ||
d7b3805f JT |
36 | @oauth_required |
37 | def feed(request): | |
38 | """ Handles the user's outbox - /api/user/<username>/feed """ | |
39 | user = request.matchdict["username"] | |
40 | requested_user = User.query.filter_by(username=user) | |
41 | ||
42 | # check if the user exists | |
43 | if requested_user is None: | |
44 | error = "No such 'user' with id '{0}'".format(user) | |
45 | return json_response({"error": error}, status=404) | |
46 | ||
47 | user = request_user[0] | |
48 | ||
49 | # Now lookup the user's feed. | |
50 | raise NotImplemented("Yet to implement looking up user's feed") | |
51 | ||
52 | @oauth_required | |
53 | def inbox(request): | |
54 | """ Handles the user's inbox - /api/user/<username>/inbox """ | |
d7b3805f | 55 | raise NotImplemented("Yet to implement looking up user's inbox") |
5a2056f7 | 56 | |
98596dd0 | 57 | #@oauth_required |
58 | def object(request, raw_obj=False): | |
5a2056f7 JT |
59 | """ Lookup for a object type """ |
60 | objectType = request.matchdict["objectType"] | |
61 | uuid = request.matchdict["uuid"] | |
62 | if objectType not in ["image"]: | |
63 | error = "Unknown type: {0}".format(objectType) | |
64 | # not sure why this is 404, maybe ask evan. Maybe 400? | |
65 | return json_response({"error": error}, status=404) | |
66 | ||
d461fbe5 | 67 | media = MediaEntry.query.filter_by(slug=uuid).first() |
5a2056f7 JT |
68 | if media is None: |
69 | # no media found with that uuid | |
70 | error = "Can't find a {0} with ID = {1}".format(objectType, uuid) | |
71 | return json_response({"error": error}, status=404) | |
72 | ||
98596dd0 | 73 | if raw_obj: |
74 | return media | |
75 | ||
bdde87a4 | 76 | return json_response(media.serialize(request)) |
98596dd0 | 77 | |
78 | def object_comments(request): | |
79 | """ Looks up for the comments on a object """ | |
80 | media = object(request, raw_obj=True) | |
81 | response = media | |
82 | if isinstance(response, MediaEntry): | |
83 | comments = response.serialize(request) | |
84 | comments = comments.get("replies", { | |
85 | "totalItems": 0, | |
86 | "items": [], | |
87 | "url": request.urlgen( | |
88 | "mediagoblin.federation.object.comments", | |
89 | objectType=media.objectType, | |
90 | uuid=media.slug, | |
91 | qualified=True) | |
92 | }) | |
93 | response = json_response(comments) | |
94 | ||
95 | return response | |
a5682e89 | 96 | |
97 | ||
98 | ## | |
99 | # Well known | |
100 | ## | |
101 | def host_meta(request): | |
102 | """ This is /.well-known/host-meta - provides URL's to resources on server """ | |
103 | links = [] | |
104 | ||
105 | # Client registration links | |
106 | links.append({ | |
107 | "ref": "registration_endpoint", | |
108 | "href": request.urlgen("mediagoblin.oauth.client_register", qualified=True), | |
109 | }) | |
110 | links.append({ | |
111 | "ref": "http://apinamespace.org/oauth/request_token", | |
112 | "href": request.urlgen("mediagoblin.oauth.request_token", qualified=True), | |
113 | }) | |
114 | links.append({ | |
115 | "ref": "http://apinamespace.org/oauth/authorize", | |
116 | "href": request.urlgen("mediagoblin.oauth.authorize", qualified=True), | |
117 | }) | |
118 | links.append({ | |
119 | "ref": "http://apinamespace.org/oauth/access_token", | |
120 | "href": request.urlgen("mediagoblin.oauth.access_token", qualified=True), | |
121 | }) | |
122 | ||
123 | return json_response(links) | |
124 | ||
125 | def whoami(request): | |
126 | """ This is /api/whoami - This is a HTTP redirect to api profile """ | |
127 | profile = request.urlgen( | |
128 | "mediagoblin.federation.user.profile", | |
129 | username=request.user.username, | |
130 | qualified=True | |
131 | ) | |
132 | ||
133 | return redirect(request, location=profile) |