aboutsummaryrefslogtreecommitdiff
path: root/pyaggr3g470r/decorators.py
blob: f419260597794d1b409d31f0d7db4da53c4af9f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#! /usr/bin/env python
#-*- coding: utf-8 -*-

from threading import Thread
from functools import wraps

from flask import g

from pyaggr3g470r.models import Feed

def async(f):
    def wrapper(*args, **kwargs):
        thr = Thread(target = f, args = args, kwargs = kwargs)
        thr.start()
    return wrapper

def feed_access_required(func):
    """
    This decorator enables to check if a user has access to a feed.
    The administrator of the platform is able to access to the feeds of a normal user.
    """
    @wraps(func)
    def decorated(*args, **kwargs):
        if kwargs.get('feed_id', None) != None:
            feed = Feed.query.filter(Feed.id == kwargs.get('feed_id', None)).first()
            if (feed == None or feed.subscriber.id != g.user.id) and not g.user.is_admin():
                flash("This feed do not exist.", "danger")
                return redirect(url_for('home'))
        return func(*args, **kwargs)
    return decorated
bgstack15