Example #1
0
def test_disallowed_name():
 assert not util.disallowed_name('Chris Norman')
 assert util.disallowed_name('F**k You')
 assert util.disallowed_name('C**t.lick')
 assert not util.disallowed_name('Jessica')
 assert util.disallowed_name('*****@*****.**')
 assert util.disallowed_name('a.b.c')
 assert util.disallowed_name('fhm123')
Example #2
0
 def handle_line(self, line):
  """The threaded version of lineReceived."""
  if self.state == FROZEN:
   self.sendLine('You are totally frozen.')
   self.logger.info('attempted command while frozen: %s', line)
  elif self.state == READY:
   commands.do_command(connections[self.transport], line)
  else:
   self.reset_timeout()
   if self.state == USERNAME:
    if line:
     if line == 'new':
      self.create_username()
     else:
      self.uid = line
      self.state = PASSWORD
      self.sendLine('Password: '******'You must provide a username.', True)
   elif self.state == PASSWORD:
    for p in db.players:
     if p.authenticate(self.uid, line):
      logger.info('Authenticated as %s.', p.title())
      self.sendLine('Welcome back, {name}.{delimiter}{delimiter}You last logged in on {connect_time} from {connect_host}.'.format(name = p.title(), delimiter = self.delimiter.decode(options.args.default_encoding) if hasattr(self.delimiter, 'decode') else self.delimiter, connect_time = ctime(p.last_connected_time), connect_host = p.last_connected_host))
      self.post_login(p)
      break
    else:
     self.logger.info('Failed to authenticate with username: %s.', self.uid)
     self.sendLine('Invalid username and password combination.', True)
   elif self.state == CREATE_USERNAME:
    self.tries += 1
    if self.tries >= get_config('max_create_retries'):
     return self.sendLine(get_config('max_create_retries_exceeded'), True)
    if line:
     for p in db.players:
      if p.uid == line:
       self.sendLine('That username is already taken.')
       self.create_username()
       break
     else:
      self.uid = line
      self.tries = 0
      self.create_password()
    else:
     self.sendLine('Usernames must not be blank.', True)
   elif self.state == CREATE_PASSWORD_1:
    self.tries += 1
    if self.tries >= get_config('max_create_retries'):
     return self.sendLine(get_config('max_create_retries_exceeded'), True)
    if not line:
     self.sendLine('Passwords must not be blank.')
     self.create_password()
    else:
     self.sendLine('Retype password: '******'Passwords do not match.')
     self.create_password()
   elif self.state == CREATE_NAME:
    self.tries += 1
    if self.tries >= get_config('max_create_retries'):
     return self.sendLine(get_config('max_create_retries_exceeded'), True)
    if line:
     line = line.title()
     for p in db.players:
      if p.name == line:
       self.sendLine('Sorry, but that name is already taken.')
       self.create_name()
     else:
      msg = util.disallowed_name(line)
      if msg:
       self.sendLine(msg)
       self.create_name()
      else:
       self.name = line
       self.tries = 0
       self.create_gender()
    else:
     self.sendLine('You must choose a name.')
     self.create_name()
   elif self.state == CREATE_SEX:
    if line == '1':
     gender = genders.MALE
    elif line == '2':
     gender = genders.FEMALE
    else:
     self.sendLine('Invalid input: %s. Try again.' % line)
     return self.create_gender()
    self.sendLine('You are now a %s.' % gender.sex)
    p = objects.PlayerObject(self.name)
    p.gender = gender
    p.uid = self.uid
    p.pwd = self.pwd
    if len(list(db.get_players())) == 1: # This is the only player.
     p.access = objects.players.WIZARD
     for o in db.objects:
      o.owner = p
    self.logger.info('Created %s player: %s.', 'wizard' if p.access else 'normal', p.title())
    p.move(db.objects_config['start_room'])
    self.post_login(p)
   elif self.state == READING:
    try:
     self.transport.read_func(line.decode(options.args.default_encoding) if hasattr(line, 'decode') else line)
    except Exception as e:
     self.sendLine('An error was raised while passing the line to the target function. See log for details.')
     self.logger.exception(e)
    finally:
     self.state = READY
     self.transport.read_func = None
   else:
    self.logger.warning('Unknown connection state: %s.', self.state)
    self.sendLine('Sorry, but an unknown error occurred. Please log in again.')
    if connections[self.transport]:
     connections[self.transport].transport = None
    connections[self.transport] = None
    self.get_username()