from flask import Blueprint, current_app, request, jsonify from werkzeug.exceptions import BadRequest, ServiceUnavailable from atlas_um.extensions import limiter, usm from atlas_um.helpers.common import remap_dict from atlas_um.logs import logger from atlas_um.settings import Settings from atlas_um.auth.claims import Role from atlas_um.auth.decorators import claims_required graph = Blueprint("usm_graph", __name__) @graph.route("/search_users", methods=["GET"]) @claims_required([Role(Role.Values.admin), Role(Role.Values.manager)]) @limiter.limit(Settings.USM_GRAPH_RATE_LIMIT) def search_users(): min_length = current_app.config.get("USM_GRAPH_MIN_SEARCH_TERM_LENGTH") search_term = request.args.get("search_term", type=str, default="") if not search_term: raise BadRequest("search_term param is required") elif len(search_term) < min_length: raise BadRequest( f"At least {min_length} letters required for search_term" ) result = usm.search_users(search_term) if result.is_left: logger.bind(error=result.value).error("Error on search with USM") raise ServiceUnavailable() results = [ remap_dict( r, { "mail": "email", "displayName": "name", "country": "location", "jobTitle": "job_title", }, ) for r in result.value ] return jsonify({"results": results})