Merge pull request #96 from CanonicalLtd/identity_field_protection
Implement username field protection
This commit is contained in:
commit
f35e3f8596
|
@ -18,6 +18,7 @@
|
|||
|
||||
from urwid import (Edit, IntEdit, RadioButton, WidgetWrap)
|
||||
import logging
|
||||
import re
|
||||
|
||||
log = logging.getLogger("subiquity.ui.input")
|
||||
|
||||
|
@ -59,6 +60,26 @@ class PasswordEditor(StringEditor):
|
|||
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):
|
||||
""" IntEdit input class
|
||||
"""
|
||||
|
|
|
@ -21,7 +21,9 @@ Welcome provides user with language selection
|
|||
import logging
|
||||
from urwid import (Pile, Columns, Text, ListBox)
|
||||
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.view import ViewPolicy
|
||||
|
||||
|
@ -34,7 +36,7 @@ class IdentityView(ViewPolicy):
|
|||
self.signal = signal
|
||||
self.items = []
|
||||
self.realname = StringEditor(caption="")
|
||||
self.username = StringEditor(caption="")
|
||||
self.username = UsernameEditor(caption="")
|
||||
self.password = PasswordEditor(caption="")
|
||||
self.error = Text("", align="center")
|
||||
self.confirm_password = PasswordEditor(caption="")
|
||||
|
@ -105,6 +107,12 @@ class IdentityView(ViewPolicy):
|
|||
self.password.value = ""
|
||||
self.confirm_password.value = ""
|
||||
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)
|
||||
log.debug("*crypted* User input: {} {} {}".format(
|
||||
self.username.value, cpassword, cpassword))
|
||||
|
|
Loading…
Reference in New Issue