Browse Source

Moved the content from template_filters to helpers
Added an perm_ prefix in front off all permission checks

sh4nks 11 years ago
parent
commit
ad4a2be728
3 changed files with 82 additions and 80 deletions
  1. 12 10
      flaskbb/app.py
  2. 70 2
      flaskbb/helpers.py
  3. 0 68
      flaskbb/template_filters.py

+ 12 - 10
flaskbb/app.py

@@ -10,6 +10,7 @@
 """
 import os
 import logging
+import datetime
 
 from flask import Flask, render_template
 from flask.ext.login import current_user
@@ -27,13 +28,13 @@ from flaskbb.pms.views import pms
 from flaskbb.pms.models import PrivateMessage
 # Import the forum blueprint
 from flaskbb.forum.views import forum
-from flaskbb.forum.models import *
 
 from flaskbb.extensions import db, login_manager, mail, cache
+from flaskbb.helpers import (format_date, time_since, is_online,
+                             perm_post_reply, perm_post_topic, perm_edit_post,
+                             perm_delete_topic, perm_delete_post, crop_title,
+                             render_markup)
 
-from flaskbb.template_filters import (format_date, time_since, is_online,
-                                      edit_post, delete_post, delete_topic,
-                                      post_reply, crop_title, render_markup)
 
 DEFAULT_BLUEPRINTS = (
     (forum, ""),
@@ -96,7 +97,7 @@ def configure_extensions(app):
     cache.init_app(app)
 
     # Flask-Debugtoolbar
-    toolbar = DebugToolbarExtension(app)
+    DebugToolbarExtension(app)
 
     # Flask-Login
     login_manager.login_view = app.config["LOGIN_VIEW"]
@@ -137,11 +138,12 @@ def configure_template_filters(app):
     app.jinja_env.filters['format_date'] = format_date
     app.jinja_env.filters['time_since'] = time_since
     app.jinja_env.filters['is_online'] = is_online
-    app.jinja_env.filters['edit_post'] = edit_post
-    app.jinja_env.filters['delete_post'] = delete_post
-    app.jinja_env.filters['delete_topic'] = delete_topic
-    app.jinja_env.filters['post_reply'] = post_reply
     app.jinja_env.filters['crop_title'] = crop_title
+    app.jinja_env.filters['edit_post'] = perm_edit_post
+    app.jinja_env.filters['delete_post'] = perm_delete_post
+    app.jinja_env.filters['delete_topic'] = perm_delete_topic
+    app.jinja_env.filters['post_reply'] = perm_post_reply
+    app.jinja_env.filters['post_topic'] = perm_post_topic
 
 
 def configure_before_handlers(app):
@@ -155,7 +157,7 @@ def configure_before_handlers(app):
         Updates `lastseen` before every reguest if the user is authenticated
         """
         if current_user.is_authenticated():
-            current_user.lastseen = datetime.utcnow()
+            current_user.lastseen = datetime.datetime.utcnow()
             db.session.add(current_user)
             db.session.commit()
 

+ 70 - 2
flaskbb/helpers.py

@@ -15,6 +15,7 @@ from flask import current_app
 from sqlalchemy import types
 from sqlalchemy.ext.mutable import Mutable
 from wtforms.widgets.core import Select, HTMLString, html_params
+from postmarkup import render_bbcode
 
 
 def check_perm(user, perm, forum, post_user_id=None):
@@ -31,14 +32,81 @@ def can_moderate(user, forum):
     return user.permissions['super_mod'] or user.permissions['admin']
 
 
+def perm_edit_post(user, post_user_id, forum):
+    """
+    Check if the post can be edited by the user
+    """
+    return check_perm(user=user, perm='editpost', forum=forum,
+                      post_user_id=post_user_id)
+
+
+def perm_delete_post(user, post_user_id, forum):
+    """
+    Check if the post can be deleted by the user
+    """
+    return check_perm(user=user, perm='deletepost', forum=forum,
+                      post_user_id=post_user_id)
+
+
+def perm_delete_topic(user, post_user_id, forum):
+    """
+    Check if the topic can be deleted by the user
+    """
+    return check_perm(user=user, perm='deletetopic', forum=forum,
+                      post_user_id=post_user_id)
+
+
+def perm_post_reply(user, forum):
+    """
+    Check if the user is allowed to post in the forum
+    """
+    return check_perm(user=user, perm='postreply', forum=forum)
+
+
+def perm_post_topic(user, forum):
+    """
+    Check if the user is allowed to create a new topic in the forum
+    """
+    return check_perm(user=user, perm='posttopic', forum=forum)
+
+
+def crop_title(title):
+    """
+    Crops the title to a specified length
+    """
+    length = current_app.config['TITLE_LENGTH']
+    if len(title) > length:
+        return title[:length] + "..."
+    return title
+
+
+def generate_random_pass(length=8):
+    return "".join(chr(random.randint(33, 126)) for i in range(length))
+
+
+def render_markup(text):
+    return render_bbcode(text)
+
+
+def is_online(user):
+    return user.lastseen >= time_diff()
+
+
 def time_diff():
     now = datetime.datetime.utcnow()
     diff = now - datetime.timedelta(minutes=current_app.config['LAST_SEEN'])
     return diff
 
 
-def generate_random_pass(length=8):
-    return "".join(chr(random.randint(33, 126)) for i in range(length))
+def format_date(value, format='%Y-%m-%d'):
+    """
+    Returns a formatted time string
+    """
+    return value.strftime(format)
+
+
+def time_since(value):
+    return time_delta_format(value)
 
 
 def time_delta_format(dt, default=None):

+ 0 - 68
flaskbb/template_filters.py

@@ -1,68 +0,0 @@
-from flask import current_app
-from postmarkup import render_bbcode
-
-from flaskbb.helpers import time_diff, time_delta_format, check_perm
-
-
-def format_date(value, format='%Y-%m-%d'):
-    """
-    Returns a formatted time string
-    """
-    return value.strftime(format)
-
-
-def render_markup(text):
-    return render_bbcode(text)
-
-
-def time_since(value):
-    return time_delta_format(value)
-
-
-def is_online(user):
-    return user.lastseen >= time_diff()
-
-
-def is_current_user(user, post):
-    """
-    Check if the post is written by the user
-    """
-    return post.user_id == user.id
-
-
-def edit_post(user, post, forum):
-    """
-    Check if the post can be edited by the user
-    """
-    return check_perm(user, 'editpost', forum, post.user_id)
-
-
-def delete_post(user, post, forum):
-    """
-    Check if the post can be edited by the user
-    """
-    return check_perm(user, 'deletepost', forum, post.user_id)
-
-
-def delete_topic(user, post, forum):
-    """
-    Check if the topic can be deleted by the user
-    """
-    return check_perm(user, 'deletetopic', forum, post.user_id)
-
-
-def post_reply(user, forum):
-    """
-    Check if the user is allowed to post in the forum
-    """
-    return check_perm(user, 'postreply', forum)
-
-
-def crop_title(title):
-    """
-    Crops the title to a specified length
-    """
-    length = current_app.config['TITLE_LENGTH']
-    if len(title) > length:
-        return title[:length] + "..."
-    return title