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
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() sauerbomber.playerMessage(cn, info('Account created')) return except MultipleResultsFound: pass raise StateError('An account with that email already exists')
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 sauerbomber.playerName(cn) in blocked_names: raise StateError('You can not reserve this name') try: dbmanager.query(NickAccount).filter(NickAccount.nick==sauerbomber.playerName(cn)).one() except NoResultFound: user = loggedInAs(cn) nickacct = NickAccount(sauerbomber.playerName(cn), user.id) session.add(nickacct) session.commit() sauerbomber.playerMessage(cn, info('Your name is now linked to your account.')) sauerbomber.playerMessage(cn, info('You may now login with /setmaster password')) return except MultipleResultsFound: pass raise StateError('Your name is already linked to an account')
def onSetMaster(cn, givenhash): p = player(cn) adminhash = sauerbomber.hashPassword(cn, sauerbomber.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 = sauerbomber.hashPassword(cn, na.user.password) if givenhash == nickhash: login(cn, na.user) else: if givenhash != adminhash: p.message(error('Invalid password'))
def getCurrentBanByNick(nick): return dbmanager.query(BanNick).filter(BanNick.nick==nick).one()
def getCurrentBanByIp(ipaddress): return dbmanager.query(Ban).filter(Ban.ip==ipaddress).filter('expiration>'+str(time.time())).one()
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
def nickReserver(nick): return dbmanager.query(NickAccount).filter(NickAccount.nick==nick).one()
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