""" REST Operations """ from datetime import datetime from flask import jsonify from flask_sqlalchemy_session import current_session as session from sqlalchemy.exc import IntegrityError from werkzeug.exceptions import BadRequest from api import strings from api.db.util import fetch, fetch_all, fetch_all_by_filter, save_all from api.util import no_content_response from api.logger import get_logger logger = get_logger(__name__) # pylint:disable=invalid-name def _serialize(json_key, obj, status_code=200): return jsonify(**{json_key: obj}), status_code def create(cls, payload, json_key): """ Create a new resource """ obj = cls(**payload) obj.save() return _serialize(json_key, obj, 201) def create_multiple(cls, payload, json_key=None, validation_func=None): """ Create multiple instances of `cls` """ json_key = json_key if json_key else 'result'
import json from functools import wraps from secrets import token_urlsafe from typing import Callable, Union from aiohttp import web, hdrs from aiohttp_session import get_session from api.logger import get_logger from api.schemas import HTTPValidationErrorSchema from api.settings import settings log = get_logger(__name__) def csrf_protection(handler: Callable) -> Callable: @wraps(handler) async def wrapper(request: web.Request, **kwargs) -> Union[Callable, web.Response]: session = await get_session(request) if "X-Csrf-Token" not in request.headers or request.headers[ "X-Csrf-Token"] != session["csrf_token"]: log.error("Cannot confirm anti cross-site request forgery token") validation_error_schema = HTTPValidationErrorSchema() data = validation_error_schema.dump({ "detail": { "header": { "X-Csrf-Token": ["Missing or invalid value."] } }
def handle_log_record(self, record): record.name = record.name.replace("bitcart.logclient.", "") logger = get_logger(record.name) logger.handle(record)