pillar/pillar/api/search/routes.py

62 lines
1.4 KiB
Python

import json
import logging
from bson import ObjectId
from flask import Blueprint, request, current_app, make_response, url_for
from flask import Response
from werkzeug import exceptions as wz_exceptions
from pillar.api.utils import authorization, jsonify, str2id
from pillar.api.utils import mongo
from pillar.api.utils.authorization import require_login, check_permissions
from pillar.auth import current_user
log = logging.getLogger(__name__)
blueprint_search = Blueprint('elksearch', __name__)
from . import queries
def _valid_search() -> str:
"""
Returns search parameters, raising error when missing.
"""
searchword = request.args.get('q', '')
if not searchword:
raise wz_exceptions.BadRequest('You are forgetting a "?q=whatareyoulookingfor"')
return searchword
@blueprint_search.route('/')
def search_nodes():
searchword = _valid_search()
data = queries.do_search(searchword)
return jsonify(data)
@blueprint_search.route('/user')
def search_user():
searchword = _valid_search()
data = queries.do_user_search(searchword)
return jsonify(data)
@blueprint_search.route('/admin/user')
@authorization.require_login(require_cap='admin')
def search_user_admin():
"""
User search over all fields.
"""
searchword = _valid_search()
data = queries.do_user_search_admin(searchword)
return jsonify(data)