Пример #1
0
def namesCmd(cn, args):
    '''@description Display names used by client
	   @usage cn
	   @public'''
    if master_required and not isAtLeastMaster(cn):
        insufficientPermissions(cn)
        return
    if args == '':
        raise UsageError()
        return
    try:
        tcn = int(args)
        names = dbmanager.query(IpToNick).filter(
            IpToNick.ip == sbserver.playerIpLong(tcn)).all()
        if len(names) == 0:
            sbserver.playerMessage(cn, info('No names found'))
            return
    except NoResultFound:
        sbserver.playerMessage(cn, info('No names found'))
        return
    except ValueError:
        sbserver.playerMessage(cn, error('Invalid cn'))
        return
    namestr = 'Other known names: '
    for name in names:
        namestr += name.nick + ' '
    sbserver.playerMessage(cn, info(namestr))
Пример #2
0
def namesCmd(cn, args):
	'''@description Display names used by client
	   @usage cn
	   @public'''
	if master_required and not isAtLeastMaster(cn):
		insufficientPermissions(cn)
		return
	if args == '':
		raise UsageError()
		return
	try:
		tcn = int(args)
		names = dbmanager.query(IpToNick).filter(IpToNick.ip==sbserver.playerIpLong(tcn)).all()
		if len(names) == 0:
			sbserver.playerMessage(cn, info('No names found'))
			return
	except NoResultFound:
		sbserver.playerMessage(cn, info('No names found'))
		return
	except ValueError:
		sbserver.playerMessage(cn, error('Invalid cn'))
		return
	namestr = 'Other known names: '
	for name in names:
		namestr += name.nick + ' '
	sbserver.playerMessage(cn, info(namestr))
Пример #3
0
def isUserAdmin(user_id):
    try:
        priv = dbmanager.query(UserPrivilege).filter(
            UserPrivilege.user_id == user_id).filter(
                UserPrivilege.privilege == ADMIN).one()
        return True
    except NoResultFound:
        return False
Пример #4
0
def onRecentBans(cn, args):
	'''@description Recently added bans
	   @usage'''
	p = player(cn)
	if args != '':
		raise UsageError()
	else:
		recent = dbmanager.query(Ban).order_by(Ban.time.desc())[:5]
		for ban in recent:
			p.message(info('Nick: %s' % ban.nick))
Пример #5
0
def onRecentBans(cn, args):
    '''@description Recently added bans
	   @usage'''
    p = player(cn)
    if args != '':
        raise UsageError()
    else:
        recent = dbmanager.query(Ban).order_by(Ban.time.desc())[:5]
        for ban in recent:
            p.message(info('Nick: %s' % ban.nick))
Пример #6
0
def onConnect(cn):
	try:
		same = dbmanager.query(IpToNick).filter(IpToNick.ip==sbserver.playerIpLong(cn)).filter(IpToNick.nick==sbserver.playerName(cn)).all()
		if len(same) > 0:
			return
	except NoResultFound:
		pass
	ent = IpToNick(sbserver.playerIpLong(cn), sbserver.playerName(cn))
	session.add(ent)
	session.commit()
Пример #7
0
def onChangepass(cn, args):
	'''@description Link name to server account, and reserve name.
	   @usage
	   @public'''
	args = args.split(' ')
	if len(args) != 2:
		raise UsageError()
	if not isLoggedIn(cn):
		raise StateError('You must be logged in to change your password')
	try:
		dbmanager.query(User).filter(User.id==loggedInAs(cn).id).filter(User.password==args[0]).one()
	except NoResultFound:
		raise StateError('Incorrect password.')
	except MultipleResultsFound:
		pass
	else:
		dbmanager.query(User).filter(User.id==loggedInAs(cn).id).update({ 'password': args[1] })
		session.commit()
		return
Пример #8
0
def onRegisterCommand(cn, args):
	'''@description Register account with server
	   @usage email password
	   @public'''
	args = args.split(' ')
	if len(args) != 2:
		raise UsageError()
	try:
		dbmanager.query(User).filter(User.email==args[0]).one()
	except NoResultFound:
		if not isValidEmail(args[0]):
			raise ArgumentValueError('Invalid email address')
		user = User(args[0], args[1])
		session.add(user)
		session.commit()
		sbserver.playerMessage(cn, info('Account created'))
		return
	except MultipleResultsFound:
		pass
	raise StateError('An account with that email already exists')
Пример #9
0
def onConnect(cn):
    try:
        same = dbmanager.query(IpToNick).filter(
            IpToNick.ip == sbserver.playerIpLong(cn)).filter(
                IpToNick.nick == sbserver.playerName(cn)).all()
        if len(same) > 0:
            return
    except NoResultFound:
        pass
    ent = IpToNick(sbserver.playerIpLong(cn), sbserver.playerName(cn))
    session.add(ent)
    session.commit()
Пример #10
0
def onLinkName(cn, args):
	'''@description Link name to server account, and reserve name.
	   @usage
	   @public'''
	if args != '':
		raise UsageError()
	if not isLoggedIn(cn):
		raise StateError('You must be logged in to link a name to your account')
	if sbserver.playerName(cn) in blocked_names:
		raise StateError('You can not reserve this name')
	try:
		dbmanager.query(NickAccount).filter(NickAccount.nick==sbserver.playerName(cn)).one()
	except NoResultFound:
		user = loggedInAs(cn)
		nickacct = NickAccount(sbserver.playerName(cn), user.id)
		session.add(nickacct)
		session.commit()
		sbserver.playerMessage(cn, info('Your name is now linked to your account.'))
		sbserver.playerMessage(cn, info('You may now login with /setmaster password'))
		return
	except MultipleResultsFound:
		pass
	raise StateError('Your name is already linked to an account')
Пример #11
0
def userPrivSetCmd(cn, tcn, args):
	user_id = player(tcn).user.id
	if args == 'user':
		try:
			if isUser(player(tcn).user.id):
				sbserver.playerMessage(cn, error('%s already has user permissions.' % sbserver.playerName(tcn)))
				return
		except (ValueError, AttributeError):
			pass
		else:
			try:
				user = loggedInAs(tcn)
			except AttributeError:
				sbserver.playerMessage(cn, error('%s is not logged in.' % sbserver.playerName(tcn)))
			else:
				dbmanager.query(UserPrivilege).filter(UserPrivilege.user_id==user_id).update({ 'privilege': None })
				session.add(UserPrivilege(0, user.id))
				session.commit()
				sbserver.playerMessage(cn, info('User privilege has been given to %s (%s)' % (sbserver.playerName(tcn), user.email)))
	elif args == 'master':
		try:
			if isUserMaster(player(tcn).user.id):
				sbserver.playerMessage(cn, error('%s already has master permissions.' % sbserver.playerName(tcn)))
				return
		except (ValueError, AttributeError):
			pass
		else:
			try:
				user = loggedInAs(tcn)
			except AttributeError:
				sbserver.playerMessage(cn, error('%s is not logged in.' % sbserver.playerName(tcn)))
			else:
				dbmanager.query(UserPrivilege).filter(UserPrivilege.user_id==user_id).update({ 'privilege': None })
				session.add(UserPrivilege(1, user.id))
				session.commit()
				sbserver.playerMessage(cn, info('Master privilege has been given to %s (%s)' % (sbserver.playerName(tcn), user.email)))
	elif args == 'admin':
		try:
			if isUserAdmin(player(tcn).user.id):
				sbserver.playerMessage(cn, error('%s already has admin permissions.' % sbserver.playerName(tcn)))
				return
		except (ValueError, AttributeError):
			pass
		else:
			try:
				user = loggedInAs(tcn)
			except AttributeError:
				sbserver.playerMessage(cn, error('%s is not logged in.' % sbserver.playerName(tcn)))
			else:
				dbmanager.query(UserPrivilege).filter(UserPrivilege.user_id==user_id).update({ 'privilege': None })
				session.add(UserPrivilege(2, user.id))
				session.commit()
				sbserver.playerMessage(cn, info('Admin privilege has been given to %s (%s)' % (sbserver.playerName(tcn), user.email)))
	else:
		sbserver.playerMessage(cn, error('Privilege level must be \'master\' to set master permissions and \'admin\' to set master or admin permissions'))
Пример #12
0
def userPrivSetCmd(cn, tcn, args):
	user_id = player(tcn).user.id
	if args == 'user':
		try:
			if isUser(player(tcn).user.id):
				sbserver.playerMessage(cn, error('%s already has user permissions.' % sbserver.playerName(tcn)))
				return
		except (ValueError, AttributeError):
			pass
		else:
			try:
				user = loggedInAs(tcn)
			except AttributeError:
				sbserver.playerMessage(cn, error('%s is not logged in.' % sbserver.playerName(tcn)))
			else:
				dbmanager.query(UserPrivilege).filter(UserPrivilege.user_id==user_id).update({ 'privilege': None })
				session.add(UserPrivilege(0, user.id))
				session.commit()
				sbserver.playerMessage(cn, info('User privilege has been given to %s (%s)' % (sbserver.playerName(tcn), user.email)))
	elif args == 'master':
		try:
			if isUserMaster(player(tcn).user.id):
				sbserver.playerMessage(cn, error('%s already has master permissions.' % sbserver.playerName(tcn)))
				return
		except (ValueError, AttributeError):
			pass
		else:
			try:
				user = loggedInAs(tcn)
			except AttributeError:
				sbserver.playerMessage(cn, error('%s is not logged in.' % sbserver.playerName(tcn)))
			else:
				dbmanager.query(UserPrivilege).filter(UserPrivilege.user_id==user_id).update({ 'privilege': None })
				session.add(UserPrivilege(1, user.id))
				session.commit()
				sbserver.playerMessage(cn, info('Master privilege has been given to %s (%s)' % (sbserver.playerName(tcn), user.email)))
	elif args == 'admin':
		try:
			if isUserAdmin(player(tcn).user.id):
				sbserver.playerMessage(cn, error('%s already has admin permissions.' % sbserver.playerName(tcn)))
				return
		except (ValueError, AttributeError):
			pass
		else:
			try:
				user = loggedInAs(tcn)
			except AttributeError:
				sbserver.playerMessage(cn, error('%s is not logged in.' % sbserver.playerName(tcn)))
			else:
				dbmanager.query(UserPrivilege).filter(UserPrivilege.user_id==user_id).update({ 'privilege': None })
				session.add(UserPrivilege(2, user.id))
				session.commit()
				sbserver.playerMessage(cn, info('Admin privilege has been given to %s (%s)' % (sbserver.playerName(tcn), user.email)))
	else:
		sbserver.playerMessage(cn, error('Privilege level must be \'master\' to set master permissions and \'admin\' to set master or admin permissions'))
Пример #13
0
def onSetMaster(cn, givenhash):
	p = player(cn)
	adminhash = sbserver.hashPassword(cn, sbserver.adminPassword())
	try:
		na = dbmanager.query(NickAccount).filter(NickAccount.nick==p.name()).one()
	except NoResultFound:
		if givenhash != adminhash:
			p.message(error('Your name is not assigned to any accounts'))
	except MultipleResultsFound:
		p.message(error('Multiple names linked to this account.  Contact the system administrator.'))
	else:
		nickhash = sbserver.hashPassword(cn, na.user.password)
		if givenhash == nickhash:
			login(cn, na.user)
		else:
			if givenhash != adminhash:
				p.message(error('Invalid password'))
Пример #14
0
def getCurrentBanByNick(nick):
	return dbmanager.query(BanNick).filter(BanNick.nick==nick).one()
Пример #15
0
def clearBans():
    bans = dbmanager.query(Ban).filter('expiration>' + str(time.time())).all()
    for b in bans:
        session.delete(b)
    session.commit()
Пример #16
0
def isUserAdmin(user_id):
	try:
		priv = dbmanager.query(UserPrivilege).filter(UserPrivilege.user_id==user_id).filter(UserPrivilege.privilege==ADMIN).one()
		return True
	except NoResultFound:
		return False
Пример #17
0
def clearBans():
	bans = dbmanager.query(Ban).filter('expiration>'+str(time.time())).all()
	for b in bans:
		session.delete(b)
	session.commit()
Пример #18
0
def userBelongsTo(user, tag_id):
	try:
		dbmanager.query(ClanMember).filter(ClanMember.tag_id==tag_id).filter(ClanMember.user_id==user.id).one()
		return True
	except NoResultFound:
		return False
Пример #19
0
def tagId(tag):
	return dbmanager.query(ClanTag).filter(ClanTag.tag==tag).one().id
Пример #20
0
def getCurrentBanByIp(ipaddress):
	return dbmanager.query(Ban).filter(Ban.ip==ipaddress).filter('expiration>'+str(time.time())).one()
Пример #21
0
def userAuth(email, password):
	try:
		user = dbmanager.query(User).filter(User.email==email).filter(User.password==password).one()
	except (NoResultFound, MultipleResultsFound):
		return False
	return user
Пример #22
0
def nickReserver(nick):
	return dbmanager.query(NickAccount).filter(NickAccount.nick==nick).one()