Adds `data_filter()` to sanitize username

This commit is contained in:
Fred Z 2018-03-12 23:14:44 +01:00
parent 851b618ff7
commit 367750b9c4
1 changed files with 38 additions and 10 deletions

View File

@ -55,6 +55,7 @@ class ConnectSocket:
# Others const
_MAX_CLIENT_NAME_LEN = 8
_MIN_CLIENT_NAME_LEN = 3
_MAX_CLIENT_NB = 5
def __init__(self, host=_HOST, port=_PORT):
@ -134,6 +135,39 @@ class ConnectSocket:
"""
return len(self.list_sockets(False, False))
def data_filter(self, data, s_idx):
"""
Filters the data basically:
- Alphanumeric char only
- non-alphanum char replaced by 'x'
- 'xxx' for string < MIN
- Troncated after the MAX char
- trailed with index number if same name exists
"""
# alphanumeric
if str(data).isalnum() is False:
f_data = ''
for char in data:
if char.isalnum():
f_data += char
else:
f_data += 'x'
data = f_data
# minimum length
if len(data) < self._MIN_CLIENT_NAME_LEN:
data += 'xxx'
# maximum length
data = data[0:self._MAX_CLIENT_NAME_LEN]
# name already used
if data in self._user_name:
data += str(s_idx)
return data
def list_sockets(self, print_string=True, user_name=True):
"""
List connected sockets
@ -223,25 +257,19 @@ class ConnectSocket:
if self._user_name[s_idx] is False: # setting username
# insert username naming rule here
data = data[0:self._MAX_CLIENT_NAME_LEN]
# name is already used
if data in self._user_name:
data += str(s_idx)
self._user_name[s_idx] = data
# saving name
self._user_name[s_idx] = self.data_filter(data, s_idx)
# LBS params override
log_msg = self._SERVER_LOG.format(
*sckt.getpeername(),
name=data,
name=self._user_name[s_idx],
msg="set user name"
)
bdcst_msg = self._MSG_USER_IN
send_msg = self._MSG_SALUTE.format(data)
send_msg = self._MSG_SALUTE.format(self._user_name[s_idx])
elif data.upper() == "QUIT": # client quit network