Ejemplo n.º 1
0
""" 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'
Ejemplo n.º 2
0
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."]
                    }
                }
Ejemplo n.º 3
0
 def handle_log_record(self, record):
     record.name = record.name.replace("bitcart.logclient.", "")
     logger = get_logger(record.name)
     logger.handle(record)