Merge pull request #118 from CanonicalLtd/fix_empty_username

Validate realname, username, and passwords on identity page
This commit is contained in:
Ryan Harper 2015-11-03 14:08:45 -06:00
commit 8fe3d3c28a
2 changed files with 44 additions and 4 deletions

View File

@ -60,6 +60,20 @@ class PasswordEditor(StringEditor):
super().__init__(caption, mask=mask) 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): class UsernameEditor(StringEditor):
""" Username input prompt with input rules """ Username input prompt with input rules
""" """

View File

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