Starts the user (profile) endpoint and lays groundwork for inbox and feed endpoint
This commit is contained in:
parent
637b966ac2
commit
d7b3805f2d
@ -138,13 +138,37 @@ class User(Base, UserMixin):
|
|||||||
|
|
||||||
def serialize(self, request):
|
def serialize(self, request):
|
||||||
user = {
|
user = {
|
||||||
|
"id": "acct:{0}@{1}".format(self.username, request.url),
|
||||||
"preferredUsername": self.username,
|
"preferredUsername": self.username,
|
||||||
"displayName": "{username}@{server}".format(username=self.username, server=request.url)
|
"displayName": "{0}@{1}".format(self.username, request.url),
|
||||||
"objectType": "person",
|
"objectType": "person",
|
||||||
"url": self.url,
|
"url": self.url,
|
||||||
|
"summary": self.bio,
|
||||||
"links": {
|
"links": {
|
||||||
|
"self": {
|
||||||
|
"href": request.urlgen(
|
||||||
|
"mediagoblin.federation.profile",
|
||||||
|
username=self.username,
|
||||||
|
qualified=True
|
||||||
|
),
|
||||||
|
},
|
||||||
|
"activity-inbox": {
|
||||||
|
"href": request.urlgen(
|
||||||
|
"mediagoblin.federation.inbox",
|
||||||
|
username=self.username,
|
||||||
|
qualified=True
|
||||||
|
)
|
||||||
|
},
|
||||||
|
"activity-outbox": {
|
||||||
|
"href": request.urlgen(
|
||||||
|
"mediagoblin.federation.feed",
|
||||||
|
username=self.username,
|
||||||
|
qualified=True
|
||||||
|
)
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
return user
|
||||||
|
|
||||||
class Client(Base):
|
class Client(Base):
|
||||||
"""
|
"""
|
||||||
|
@ -401,7 +401,7 @@ def oauth_required(controller):
|
|||||||
|
|
||||||
request_validator = GMGRequestValidator()
|
request_validator = GMGRequestValidator()
|
||||||
resource_endpoint = ResourceEndpoint(request_validator)
|
resource_endpoint = ResourceEndpoint(request_validator)
|
||||||
valid, request = resource_endpoint.validate_protected_resource_request(
|
valid, r = resource_endpoint.validate_protected_resource_request(
|
||||||
uri=request.url,
|
uri=request.url,
|
||||||
http_method=request.method,
|
http_method=request.method,
|
||||||
body=request.get_data(),
|
body=request.get_data(),
|
||||||
|
0
mediagoblin/federation/__init__.py
Normal file
0
mediagoblin/federation/__init__.py
Normal file
43
mediagoblin/federation/routing.py
Normal file
43
mediagoblin/federation/routing.py
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# GNU MediaGoblin -- federated, autonomous media hosting
|
||||||
|
# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS.
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
from mediagoblin.tools.routing import add_route
|
||||||
|
|
||||||
|
# Add user profile
|
||||||
|
add_route(
|
||||||
|
"mediagoblin.federation.user",
|
||||||
|
"/api/user/<string:username>/",
|
||||||
|
"mediagoblin.federation.views:user"
|
||||||
|
)
|
||||||
|
|
||||||
|
add_route(
|
||||||
|
"mediagoblin.federation.profile",
|
||||||
|
"/api/user/<string:username>/profile",
|
||||||
|
"mediagoblin.federation.views:user"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Inbox and Outbox (feed)
|
||||||
|
add_route(
|
||||||
|
"mediagoblin.federation.feed",
|
||||||
|
"/api/user/<string:username>/feed",
|
||||||
|
"mediagoblin.federation.views:feed"
|
||||||
|
)
|
||||||
|
|
||||||
|
add_route(
|
||||||
|
"mediagoblin.federation.inbox",
|
||||||
|
"/api/user/<string:username>/inbox",
|
||||||
|
"mediagoblin.federation.views:inbox"
|
||||||
|
)
|
42
mediagoblin/federation/views.py
Normal file
42
mediagoblin/federation/views.py
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
from mediagoblin.decorators import oauth_required
|
||||||
|
from mediagoblin.db.models import User
|
||||||
|
from mediagoblin.tools.response import json_response
|
||||||
|
|
||||||
|
@oauth_required
|
||||||
|
def user(request):
|
||||||
|
""" Handles user response at /api/user/<username>/ """
|
||||||
|
user = request.matchdict["username"]
|
||||||
|
requested_user = User.query.filter_by(username=user)
|
||||||
|
|
||||||
|
# check if the user exists
|
||||||
|
if requested_user is None:
|
||||||
|
error = "No such 'user' with id '{0}'".format(user)
|
||||||
|
return json_response({"error": error}, status=404)
|
||||||
|
|
||||||
|
user = requested_user[0]
|
||||||
|
|
||||||
|
# user profiles are public so return information
|
||||||
|
return json_response(user.serialize(request))
|
||||||
|
|
||||||
|
@oauth_required
|
||||||
|
def feed(request):
|
||||||
|
""" Handles the user's outbox - /api/user/<username>/feed """
|
||||||
|
user = request.matchdict["username"]
|
||||||
|
requested_user = User.query.filter_by(username=user)
|
||||||
|
|
||||||
|
# check if the user exists
|
||||||
|
if requested_user is None:
|
||||||
|
error = "No such 'user' with id '{0}'".format(user)
|
||||||
|
return json_response({"error": error}, status=404)
|
||||||
|
|
||||||
|
user = request_user[0]
|
||||||
|
|
||||||
|
# Now lookup the user's feed.
|
||||||
|
raise NotImplemented("Yet to implement looking up user's feed")
|
||||||
|
|
||||||
|
@oauth_required
|
||||||
|
def inbox(request):
|
||||||
|
""" Handles the user's inbox - /api/user/<username>/inbox """
|
||||||
|
pass
|
||||||
|
|
||||||
|
raise NotImplemented("Yet to implement looking up user's inbox")
|
Loading…
x
Reference in New Issue
Block a user