Merge pull request #96 from CanonicalLtd/identity_field_protection

Implement username field protection
This commit is contained in:
Adam Stokes 2015-10-23 16:58:11 -04:00
commit f35e3f8596
2 changed files with 31 additions and 2 deletions

View File

@ -18,6 +18,7 @@
from urwid import (Edit, IntEdit, RadioButton, WidgetWrap) from urwid import (Edit, IntEdit, RadioButton, WidgetWrap)
import logging import logging
import re
log = logging.getLogger("subiquity.ui.input") log = logging.getLogger("subiquity.ui.input")
@ -59,6 +60,26 @@ class PasswordEditor(StringEditor):
super().__init__(caption, mask=mask) super().__init__(caption, mask=mask)
class UsernameEditor(StringEditor):
""" Username input prompt with input rules
"""
def keypress(self, size, key):
''' restrict what chars we allow for username '''
userlen = len(self.value)
if userlen == 0:
username = r'[a-z_]'
else:
username = r'[a-z0-9_-]'
# don't allow non username chars
if re.match(username, key) is None:
return False
return super().keypress(size, key)
class IntegerEditor(WidgetWrap): class IntegerEditor(WidgetWrap):
""" IntEdit input class """ IntEdit input class
""" """

View File

@ -21,7 +21,9 @@ Welcome provides user with language selection
import logging 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 StringEditor, PasswordEditor from subiquity.ui.interactive import (PasswordEditor,
StringEditor,
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
@ -34,7 +36,7 @@ class IdentityView(ViewPolicy):
self.signal = signal self.signal = signal
self.items = [] self.items = []
self.realname = StringEditor(caption="") self.realname = StringEditor(caption="")
self.username = StringEditor(caption="") self.username = UsernameEditor(caption="")
self.password = PasswordEditor(caption="") self.password = PasswordEditor(caption="")
self.error = Text("", align="center") self.error = Text("", align="center")
self.confirm_password = PasswordEditor(caption="") self.confirm_password = PasswordEditor(caption="")
@ -105,6 +107,12 @@ class IdentityView(ViewPolicy):
self.password.value = "" self.password.value = ""
self.confirm_password.value = "" self.confirm_password.value = ""
return return
if len(self.username.value) > 32:
self.error.set_text("Username too long, must be < 32")
self.username.value = ""
return
cpassword = self.model.encrypt_password(self.password.value) cpassword = self.model.encrypt_password(self.password.value)
log.debug("*crypted* User input: {} {} {}".format( log.debug("*crypted* User input: {} {} {}".format(
self.username.value, cpassword, cpassword)) self.username.value, cpassword, cpassword))