aboutsummaryrefslogtreecommitdiffstats
path: root/mediagoblin/federation
diff options
context:
space:
mode:
authorxray7224 <jessica@megworld.co.uk>2013-09-03 17:17:07 +0100
committerJessica Tallon <jessica@megworld.co.uk>2014-07-22 23:13:14 +0100
commita5682e89602ddc266d05c760a319d7647755f0b4 (patch)
tree2c9c2185ca8027bab5233c935ba1a5b5164ddef2 /mediagoblin/federation
parent98596dd072597c5d9c474e882f57407817d049f5 (diff)
downloadmediagoblin-a5682e89602ddc266d05c760a319d7647755f0b4.tar.lz
mediagoblin-a5682e89602ddc266d05c760a319d7647755f0b4.tar.xz
mediagoblin-a5682e89602ddc266d05c760a319d7647755f0b4.zip
Support some webfinger API's and real profile and /api/user/<user>/
Diffstat (limited to 'mediagoblin/federation')
-rw-r--r--mediagoblin/federation/routing.py16
-rw-r--r--mediagoblin/federation/views.py61
2 files changed, 71 insertions, 6 deletions
diff --git a/mediagoblin/federation/routing.py b/mediagoblin/federation/routing.py
index 16184866..daf60d00 100644
--- a/mediagoblin/federation/routing.py
+++ b/mediagoblin/federation/routing.py
@@ -24,9 +24,9 @@ add_route(
)
add_route(
- "mediagoblin.federation.profile",
+ "mediagoblin.federation.user.profile",
"/api/user/<string:username>/profile",
- "mediagoblin.federation.views:user"
+ "mediagoblin.federation.views:profile"
)
# Inbox and Outbox (feed)
@@ -53,3 +53,15 @@ add_route(
"/api/<string:objectType>/<string:uuid>/comments",
"mediagoblin.federation.views:object_comments"
)
+
+add_route(
+ "mediagoblin.webfinger.well-known.host-meta",
+ "/.well-known/host-meta",
+ "mediagoblin.federation.views:host_meta"
+ )
+
+add_route(
+ "mediagoblin.webfinger.whoami",
+ "/api/whoami",
+ "mediagoblin.federation.views:whoami"
+ )
diff --git a/mediagoblin/federation/views.py b/mediagoblin/federation/views.py
index ab67e457..85bf1540 100644
--- a/mediagoblin/federation/views.py
+++ b/mediagoblin/federation/views.py
@@ -1,10 +1,10 @@
from mediagoblin.decorators import oauth_required
from mediagoblin.db.models import User, MediaEntry
-from mediagoblin.tools.response import json_response
+from mediagoblin.tools.response import redirect, json_response
-@oauth_required
-def user(request):
- """ Handles user response at /api/user/<username>/ """
+#@oauth_required
+def profile(request, raw=False):
+ """ This is /api/user/<username>/profile - This will give profile info """
user = request.matchdict["username"]
requested_user = User.query.filter_by(username=user)
@@ -15,9 +15,24 @@ def user(request):
user = requested_user[0]
+ if raw:
+ return (user, user.serialize(request))
+
# user profiles are public so return information
return json_response(user.serialize(request))
+def user(request):
+ """ This is /api/user/<username> - This will get the user """
+ user, user_profile = profile(request, raw=True)
+ data = {
+ "nickname": user.username,
+ "updated": user.created.isoformat(),
+ "published": user.created.isoformat(),
+ "profile": user_profile
+ }
+
+ return json_response(data)
+
@oauth_required
def feed(request):
""" Handles the user's outbox - /api/user/<username>/feed """
@@ -78,3 +93,41 @@ def object_comments(request):
response = json_response(comments)
return response
+
+
+##
+# Well known
+##
+def host_meta(request):
+ """ This is /.well-known/host-meta - provides URL's to resources on server """
+ links = []
+
+ # Client registration links
+ links.append({
+ "ref": "registration_endpoint",
+ "href": request.urlgen("mediagoblin.oauth.client_register", qualified=True),
+ })
+ links.append({
+ "ref": "http://apinamespace.org/oauth/request_token",
+ "href": request.urlgen("mediagoblin.oauth.request_token", qualified=True),
+ })
+ links.append({
+ "ref": "http://apinamespace.org/oauth/authorize",
+ "href": request.urlgen("mediagoblin.oauth.authorize", qualified=True),
+ })
+ links.append({
+ "ref": "http://apinamespace.org/oauth/access_token",
+ "href": request.urlgen("mediagoblin.oauth.access_token", qualified=True),
+ })
+
+ return json_response(links)
+
+def whoami(request):
+ """ This is /api/whoami - This is a HTTP redirect to api profile """
+ profile = request.urlgen(
+ "mediagoblin.federation.user.profile",
+ username=request.user.username,
+ qualified=True
+ )
+
+ return redirect(request, location=profile)