peterhudec/authomatic

View on GitHub
authomatic/extras/flask.py

Summary

Maintainability
A
0 mins
Test Coverage
# -*- coding: utf-8 -*-
"""
|flask| Extras
--------------

Utilities you can use when using this library with the |flask|_ framework.

Thanks to `Mark Steve Samson <http://marksteve.com>`_.
"""

from __future__ import absolute_import
from functools import wraps

from authomatic.adapters import WerkzeugAdapter
from authomatic import Authomatic
from flask import make_response, request, session


class FlaskAuthomatic(Authomatic):
    """
    Flask Plugin for authomatic support.
    """

    result = None

    def login(self, *login_args, **login_kwargs):
        """
        Decorator for Flask view functions.
        """

        def decorator(f):
            @wraps(f)
            def decorated(*args, **kwargs):
                self.response = make_response()
                adapter = WerkzeugAdapter(request, self.response)
                login_kwargs.setdefault('session', session)
                login_kwargs.setdefault('session_saver', self.session_saver)
                self.result = super(FlaskAuthomatic, self).login(
                    adapter,
                    *login_args,
                    **login_kwargs)
                return f(*args, **kwargs)
            return decorated
        return decorator

    def session_saver(self):
        # FIXME: pylint false positive - see https://github.com/pallets/flask/issues/4020
        session.modified = True  # pylint: disable=assigning-non-slot