Support some webfinger API's and real profile and /api/user/<user>/
authorxray7224 <jessica@megworld.co.uk>
Tue, 3 Sep 2013 16:17:07 +0000 (17:17 +0100)
committerJessica Tallon <jessica@megworld.co.uk>
Tue, 22 Jul 2014 22:13:14 +0000 (23:13 +0100)
mediagoblin/db/models.py
mediagoblin/federation/routing.py
mediagoblin/federation/views.py
mediagoblin/oauth/routing.py

index 4377f60f870cc1d7f33d2dc164a19e7ab697f56f..4f5182d6c9f3e7880214025d77f6d2366eb7631e 100644 (file)
@@ -148,7 +148,7 @@ class User(Base, UserMixin):
             "links": {
                 "self": {
                     "href": request.urlgen(
-                            "mediagoblin.federation.profile",
+                            "mediagoblin.federation.user.profile",
                              username=self.username,
                              qualified=True
                              ),
index 16184866bdd9e5c18f843c299790703d67b2bca0..daf60d00c45425bd99e4d39db77df249d34b5b31 100644 (file)
@@ -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"
+    )
index ab67e4574814edbcf9210f97f7b1b67b8dc1fc29..85bf154030d0923f9eab78a0d2c73767d7a44c30 100644 (file)
@@ -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)
index e45077bbf1d9f81d1da9193d8f4d99a0b97478c4..7f2aa11d0635688829052a117848090cfe770a9c 100644 (file)
@@ -18,25 +18,25 @@ from mediagoblin.tools.routing import add_route
 
 # client registration & oauth
 add_route(
-        "mediagoblin.oauth",
+        "mediagoblin.oauth.client_register",
         "/api/client/register",
         "mediagoblin.oauth.views:client_register"
         )
 
 add_route(
-        "mediagoblin.oauth",
+        "mediagoblin.oauth.request_token",
         "/oauth/request_token",
         "mediagoblin.oauth.views:request_token"
         )
 
 add_route(
-        "mediagoblin.oauth",
+        "mediagoblin.oauth.authorize",
         "/oauth/authorize",
         "mediagoblin.oauth.views:authorize",
         )
 
 add_route(
-        "mediagoblin.oauth",
+        "mediagoblin.oauth.access_token",
         "/oauth/access_token",
         "mediagoblin.oauth.views:access_token"
         )