summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--forms.py7
-rw-r--r--templates/pad_change.html6
-rw-r--r--utils/widgets.py12
3 files changed, 21 insertions, 4 deletions
diff --git a/forms.py b/forms.py
index e1dab0f..b13a5e7 100644
--- a/forms.py
+++ b/forms.py
@@ -2,12 +2,11 @@ from flask.ext.wtf import Form
from wtforms import StringField, HiddenField, PasswordField, BooleanField, \
validators, ValidationError
from wtforms.ext.sqlalchemy.orm import model_form, ModelConverter
-from wtforms.widgets import PasswordInput
from app import db
from models import Group, Pad
from utils.forms import Unique, RedirectMixin
-from utils.widgets import TextArea, Static
+from utils.widgets import TextArea, Static, PasswordInput
CreateGroup = model_form(
@@ -50,7 +49,7 @@ _CreatePad = model_form(
validators.Regexp('^[a-zA-Z1-9]', message=u'Pad name should not '
'start with a special character.')]},
'public': {'validators': []},
- 'password': {'widget': PasswordInput()},
+ 'password': {'widget': PasswordInput(autocomplete='off')},
},
db_session=db.session)
@@ -72,7 +71,7 @@ ChangePad = model_form(
field_args={
'name': {'widget': Static()},
'public': {'validators': []},
- 'password': {'widget': PasswordInput()},
+ 'password': {'widget': PasswordInput(autocomplete='off')},
},
db_session=db.session)
diff --git a/templates/pad_change.html b/templates/pad_change.html
index afa0633..5e46d70 100644
--- a/templates/pad_change.html
+++ b/templates/pad_change.html
@@ -19,6 +19,12 @@
<div class="panel-body">
<form class="form-horizontal" role="form" method="POST">
+ <!--
+ this will prevent chrome from filling the saved login password
+ into this form (chrome ignores autocomplete=off)
+ -->
+ <input type="text" class="hidden" /><input type="password" class="hidden" />
+
{% for field in change_form %}
{{ render_field(field) }}
{% endfor %}
diff --git a/utils/widgets.py b/utils/widgets.py
index 3b65b82..4ce206f 100644
--- a/utils/widgets.py
+++ b/utils/widgets.py
@@ -20,3 +20,15 @@ class TextArea(wtforms.widgets.core.TextArea):
if arg not in kwargs:
kwargs[arg] = self.kwargs[arg]
return super(TextArea, self).__call__(field, **kwargs)
+
+
+class PasswordInput(wtforms.widgets.core.PasswordInput):
+ def __init__(self, hide_value=True, **kwargs):
+ self.kwargs = kwargs
+ super(PasswordInput, self).__init__(hide_value)
+
+ def __call__(self, field, **kwargs):
+ for arg in self.kwargs:
+ if arg not in kwargs:
+ kwargs[arg] = self.kwargs[arg]
+ return super(PasswordInput, self).__call__(field, **kwargs)