Source code for tahrir.endpoints.admin.badges

from flask import abort, g, jsonify, request

from ...app import csrf, oidc
from ...utils.badge import convert_name_to_id
from ...utils.user import need_access_root, need_access_user
from . import blueprint as bp


[docs] @bp.route("/api/admin/badges", methods=["POST"]) @csrf.exempt @oidc.accept_token() @need_access_user @need_access_root def create_badge(): """Endpoint to create new badge""" data = request.get_json() if not data: return abort(400, "No details provided") required_fields = ["name", "image", "description", "criteria", "issuer_id"] for field in required_fields: if not data.get(field): return abort(400, f"No detail provided for {field!r}") badge_id = convert_name_to_id(data.get("name")) if g.tahrirdb.badge_exists(badge_id): return abort(409, f"Badge {badge_id!r} already exists") g.tahrirdb.add_badge( name=data.get("name"), image=data.get("image"), desc=data.get("description"), criteria=data.get("criteria"), issuer_id=data.get("issuer_id"), tags=data.get("tags"), ) return jsonify({"message": f"Badge {badge_id!r} created successfully"}), 201
[docs] @bp.route("/api/admin/badges/<string:badge_id>", methods=["PUT"]) @csrf.exempt @oidc.accept_token() @need_access_user @need_access_root def update_badge(badge_id): """Endpoint to update existing badge""" if not badge_id: return abort(400, "No badge ID provided") data = request.get_json() if not data: return abort(400, "No details provided") try: result = g.tahrirdb.update_badge(badge_id, **data) if not result: return abort(404, f"Badge {badge_id!r} not found") return jsonify({"message": f"Badge {badge_id!r} updated successfully"}) except KeyError as e: return abort(400, str(e))
[docs] @bp.route("/api/admin/badges/<string:badge_id>", methods=["DELETE"]) @csrf.exempt @oidc.accept_token() @need_access_user @need_access_root def delete_badge(badge_id): """Endpoint to delete a badge""" if not badge_id: return abort(400, "No ID provided") result = g.tahrirdb.delete_badge(badge_id) if not result: return abort(404, f"Badge {badge_id!r} not found") return jsonify({"message": f"Badge {badge_id!r} deleted successfully"})