Validate realname, username, and passwords on identity page

- Apply limits to realname (1..160)
- Apply limits to username (1..32)
- Restrict chars allowed for realname via RealnameEditor widget
- Ensure all fields have input

Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
This commit is contained in:
Ryan Harper 2015-11-03 14:00:05 -06:00
parent bc30e87e4c
commit b75cc356aa
2 changed files with 44 additions and 4 deletions

View File

@ -60,6 +60,20 @@ class PasswordEditor(StringEditor):
super().__init__(caption, mask=mask)
class RealnameEditor(StringEditor):
""" Username input prompt with input rules
"""
def keypress(self, size, key):
''' restrict what chars we allow for username '''
realname = r'[a-zA-Z0-9_\- ]'
if re.match(realname, key) is None:
return False
return super().keypress(size, key)
class UsernameEditor(StringEditor):
""" Username input prompt with input rules
"""

View File

@ -22,20 +22,23 @@ import logging
from urwid import (Pile, Columns, Text, ListBox)
from subiquity.ui.buttons import done_btn, cancel_btn
from subiquity.ui.interactive import (PasswordEditor,
StringEditor,
RealnameEditor,
UsernameEditor)
from subiquity.ui.utils import Padding, Color
from subiquity.view import ViewPolicy
log = logging.getLogger("subiquity.views.identity")
USERNAME_MAXLEN = 32
REALNAME_MAXLEN = 160
class IdentityView(ViewPolicy):
def __init__(self, model, signal):
self.model = model
self.signal = signal
self.items = []
self.realname = StringEditor(caption="")
self.realname = RealnameEditor(caption="")
self.username = UsernameEditor(caption="")
self.password = PasswordEditor(caption="")
self.error = Text("", align="center")
@ -102,14 +105,37 @@ class IdentityView(ViewPolicy):
return Pile(sl)
def done(self, result):
if len(self.password.value) < 1:
self.error.set_text("Password must be set")
self.password.value = ""
self.confirm_password.value = ""
return
if self.password.value != self.confirm_password.value:
self.error.set_text("Passwords do not match.")
self.password.value = ""
self.confirm_password.value = ""
return
if len(self.username.value) > 32:
self.error.set_text("Username too long, must be < 32")
if len(self.realname.value) < 1:
self.error.set_text("Realname missing.")
self.realname.value = ""
return
if len(self.realname.value) > REALNAME_MAXLEN:
self.error.set_text("Realname too long, must be < " +
str(REALNAME_MAXLEN))
self.realname.value = ""
return
if len(self.username.value) < 1:
self.error.set_text("Username missing.")
self.username.value = ""
return
if len(self.username.value) > USERNAME_MAXLEN:
self.error.set_text("Username too long, must be < " +
str(USERNAME_MAXLEN))
self.username.value = ""
return