import random import base64 from hashlib import blake2b db.define_table( 'Room', Field('code', 'string', notnull=True, unique=True), Field('hashcode', 'string', notnull=True), Field('player_max', 'integer', notnull=True), Field('creation', 'datetime', default=request.now, notnull=True), Field('heartbeat', 'datetime', default=request.now, notnull=True), Field('started', 'boolean', default=False), Field('roles', 'string', default=base64.standard_b64encode(b'{}'), notnull=True), Field('closed', 'boolean', default=False) ) def generateRoomCode(): code = None while not code or db((db.Room.code == code) & (db.Room.closed == False)).count() > 0: code = "" for i in range(4): # Removed characters which could be confused like 0 and O code = code + random.choice("346789ABCDEFGHJKLMNPQRTUVWXY") return(code) def generateHashCode(): digest = blake2b(digest_size=32) digest.update(str(request.now).encode("utf-8")) digest.update(str(random.random()).encode("utf-8")) return (digest.hexdigest()) db.Room.code.default = generateRoomCode db.Room.hashcode.default = generateHashCode