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)
|
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
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -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))
|
||||||
|
|
Loading…
Reference in New Issue