async def webfinger(request): resource = request.args.get('resource') if request.app.config.DOMAIN not in resource: return response.json({"error": "wrong domain"}, status=404) user_id = resource.split(":")[1].split("@")[0] user = await User.find_one(dict(name=user_id)) if not user: return response.json({"error": "no such user"}, status=404) return response.json( Actor(user).webfinger(resource), headers={'Content-Type': 'application/jrd+json; charset=utf-8'})
async def user_create(request): if request.app.config.REGISTRATION == "closed": return response.json({'error': 'registration closed'}) invite = request.json.pop("invite", None) if request.app.config.REGISTRATION == "invite": if not invite or invite != request.app.config.INVITE_CODE: return response.json({'error': 'need valid invite'}) username = request.json["username"] password = request.json["password"] if username and password: is_uniq = await User.is_unique(doc=dict(name=username)) if is_uniq in (True, None): user = await User.create(request.json, request.app.base_url) return response.json({'profile': Actor(user).render}, status=201) else: return response.json({'error': 'username n/a'})
async def user_get(request, user): return response.json( Actor(user).render, headers={'Content-Type': 'application/activity+json; charset=utf-8'})