Commit 46958eb0 authored by Paul Brown's avatar Paul Brown

add SecureForm for easier CSRF validation

parent 1975115a
from wtforms import form from wtforms import form, __version__ as wtforms_version
from wtforms.fields.core import UnboundField from wtforms.fields.core import UnboundField
from .fields import * from .fields import *
...@@ -32,3 +32,29 @@ def recreate_field(unbound): ...@@ -32,3 +32,29 @@ def recreate_field(unbound):
raise ValueError('recreate_field expects UnboundField instance, %s was passed.' % type(unbound)) raise ValueError('recreate_field expects UnboundField instance, %s was passed.' % type(unbound))
return unbound.field_class(*unbound.args, **unbound.kwargs) return unbound.field_class(*unbound.args, **unbound.kwargs)
if int(wtforms_version[0]) > 1:
# only WTForms 2+ has built-in CSRF functionality
from os import urandom
from flask import session
from wtforms.csrf.session import SessionCSRF
class SecureForm(BaseForm):
"""
BaseForm with CSRF token generation and validation support.
Requires WTForms 2+
"""
class Meta:
csrf = True
csrf_class = SessionCSRF
csrf_secret = urandom(24)
@property
def csrf_context(self):
return session
else:
class SecureForm(BaseForm):
def __init__(self, *args, **kwargs):
raise Exception("SecureForm requires WTForms 2+")
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment