Source code for tahrir.endpoints.admin.users
from flask import abort, g, jsonify, request
from ...app import csrf, oidc
from ...utils.user import get_person, need_access_root, need_access_user
from . import blueprint as bp
[docs]
@bp.route("/api/admin/users", methods=["POST"])
@csrf.exempt
@oidc.accept_token()
@need_access_user
@need_access_root
def add_user():
"""Endpoint to add a new user"""
data = request.get_json()
if not data:
return abort(400, "No details provided")
if not data.get("email"):
return abort(400, "No email id is provided")
if g.tahrirdb.person_exists(email=data.get("email")):
abort(409, f"Person with email {data.get('email')!r} already exists.")
g.tahrirdb.add_person(
email=data.get("email"),
nickname=data.get("nickname"),
website=data.get("website"),
bio=data.get("bio"),
avatar=data.get("avatar"),
)
return jsonify({"message": f"User {data.get('email')!r} added successfully"}), 201
[docs]
@bp.route("/api/admin/users/<string:user_id>", methods=["PUT"])
@csrf.exempt
@oidc.accept_token()
@need_access_user
@need_access_root
def update_user(user_id: str):
"""Endpoint to update existing user"""
if not user_id:
return abort(400, "No user ID provided")
data = request.get_json()
if not data:
return abort(400, "No details provided")
result = g.tahrirdb.update_person(
nickname=user_id,
website=data.get("website"),
bio=data.get("bio"),
avatar=data.get("avatar"),
)
if not result:
return abort(404, f"User {user_id!r} not found")
return jsonify({"message": f"User {user_id!r} updated successfully"})
[docs]
@bp.route("/api/admin/users/<string:user_id>/opt_out", methods=["PUT"])
@csrf.exempt
@oidc.accept_token()
@need_access_user
@need_access_root
def user_opt_out(user_id: str):
"""Endpoint to update user account settings."""
user = get_person(user_id)
if not user:
abort(404, f"No such user {user_id!r}")
data = request.get_json()
if data is None or "opt_out" not in data:
abort(400, "No opt_out status provided")
# Opt out functionality should be made available in tahrir-api
user.opt_out = data.get("opt_out")
g.tahrirdb.session.commit()
return jsonify({"message": "User updated successfully"})