示例#1
0
def HandleWorldPenguinLogin(client, nickname, _id, swid, password, confirmHash,
                            loginkey):
    exist = yield client.db_penguinExists(value=_id)

    if not exist:
        client.send("e", 101)
        returnValue(client.disconnect())

    client.penguin.nickname = Nickname(nickname, client)
    client.penguin.password = password
    client.penguin.id = _id
    client.penguin.swid = swid

    yield client.db_init()
    client.penguin.username = Username(client.dbpenguin.username, client)
    if not client.dbpenguin.swid == swid or not client.dbpenguin.nickname == nickname:
        client.send('e', 101)
        returnValue(client.disconnect())

    banned = yield client.banned()
    if banned:
        returnValue(0)
    a = yield client.engine.redis.server.ping()
    print a
    isLoggedIn = yield client.engine.redis.isPenguinLoggedIn(client.penguin.id)
    if isLoggedIn:
        client.send('e', 3)
        returnValue(client.disconnect())

    details = yield client.engine.redis.getPlayerKey(client.penguin.id)
    if not details:
        client.send('e', 101)
        returnValue(client.disconnect())

    if not client.CryptoHandler.bcheck(
            details, loginkey[32:]) or not client.CryptoHandler.bcheck(
                details, confirmHash) or not client.CryptoHandler.bcheck(
                    details, password):
        client.send('e', 101)
        returnValue(client.disconnect())

    yield client.engine.redis.server.delete("conf:{}".format(
        client.penguin.id))
    yield client.engine.redis.server.hmset(
        "online:{}".format(client.penguin.id), {
            'server': client.engine.id,
            'place': 0,
            'playing': 0,
            'waddling': 0,
            'joined': 0
        })

    client.ReceivePacketEnabled = True

    client.send('l', 'timeline')
示例#2
0
文件: Login.py 项目: az4521/Timeline
def HandlePrimaryPenguinLogin(client, user, passd):
    exist = yield client.db_penguinExists('username', user)

    if not exist:
        client.send("e", 101)
        returnValue(client.disconnect())

    client.penguin.username = user

    yield client.db_init()

    client.penguin.username = Username(client.dbpenguin.username, client)
    client.penguin.password = Password(client.dbpenguin.password, client)
    if not client.checkPassword(passd):
        client.send('e', 101)
        returnValue(client.disconnect())

    client.penguin.id = client.dbpenguin.id

    banned = yield client.banned()
    if banned:
        returnValue(0)

    client.penguin.swid = client.dbpenguin.swid

    key = client.CryptoHandler.confirmHash()
    confh = client.CryptoHandler.bcrypt(key)
    fkey = client.CryptoHandler.md5(key)

    client.engine.redis.server.set("conf:{0}".format(client.dbpenguin.id), key,
                                   15 * 60)

    world = list()

    w = yield client.engine.redis.getWorldServers()

    for k in w:
        p = w[k]
        bars = int(int(p['population']) * 5 / int(p['max']))
        world.append("{},{}".format(k, bars))

    world = '|'.join(world)
    player_data = "{}|{}|{}|{}|NULL|45|2".format(
        client.dbpenguin.id, client.dbpenguin.swid, client.dbpenguin.nickname,
        client.CryptoHandler.bcrypt(key))
    email = client.dbpenguin.email[0] + '***@' + client.dbpenguin.email.split(
        '@')[1]

    client.send('l', player_data, confh, fkey, world, email)

    returnValue(client.disconnect())
示例#3
0
def HandlePrimaryPenguinLogin(client, user, passd):
    if user == '$fire' and FIREBASE_INIT:
        #firebase
        idToken = passd
        try:
            userData = auth.verify_id_token(idToken, check_revoked=True)
            userData = auth.get_user(userData['uid'])
            client.penguin.firebase_user = userData
            exist = True
        except:
            traceback.print_exc()
            client.send('e', 101)
            returnValue(client.disconnect())
    else:
        exist = yield client.db_penguinExists('username', user)

    if not exist:
        client.send("e", 101)
        returnValue(client.disconnect())

    if user == '$fire' and FIREBASE_INIT:
        client.penguin.swid = userData.custom_claims.get('swid')
    else:
        client.penguin.username = user

    yield client.db_init()

    client.penguin.username = Username(client.dbpenguin.username, client)
    client.penguin.password = Password(client.dbpenguin.password, client)

    if (client['password'] == 'firebase'
            and user != '$fire') or (not client.checkPassword(passd) and
                                     (user != '$fire' or not FIREBASE_INIT)):
        client.send('e', 101)
        returnValue(client.disconnect())

    client.penguin.id = client.dbpenguin.id

    banned = yield client.banned()
    if banned:
        returnValue(0)

    client.penguin.swid = client.dbpenguin.swid

    key = client.CryptoHandler.confirmHash()
    confh = client.CryptoHandler.bcrypt(key)
    fkey = client.CryptoHandler.md5(key)

    client.engine.redis.server.set("conf:{0}".format(client.dbpenguin.id), key,
                                   15 * 60)
    world = list()

    w, wu = yield client.engine.redis.getWorldServers()

    for k in w:
        p = w[k]
        bars = int(int(p['population']) * 5 / int(p['max']))
        world.append("{},{}".format(k, bars))

    world = '|'.join(world)

    if client.Protocol == AS3_PROTOCOL:
        avatar = yield client.dbpenguin.avatar.get()
        language = avatar.language if avatar is not None else 45
        player_data = "{}|{}|{}|{}|NULL|{}|2".format(
            client.dbpenguin.id,
            client.dbpenguin.swid, client.dbpenguin.nickname,
            client.CryptoHandler.bcrypt(key), language)
        email = client.dbpenguin.email[
            0] + '***@' + client.dbpenguin.email.split('@')[1]

        client.send('l', player_data, confh, fkey, world, email)

    elif client.Protocol == AS2_PROTOCOL:
        friendsDB = yield Friend.find(
            where=['penguin_id = ?', client.dbpenguin.swid])
        friends = map(lambda x: x.friend, friendsDB)
        friends = set(friends)
        '''
        World = {user1, user2, ...}
        Friends = {user_p, user_q, ...}

        if Friends in World, then, World - Friends will be a set such that n(W-F) < n(W)
        '''
        worldsWithFriends = list(
            str(i) for i in wu if len(wu[i]) != len(wu[i] - friends))
        wwf = '|'.join(worldsWithFriends)

        client.send('l', client.dbpenguin.id, confh, wwf, world)

    returnValue(client.disconnect())
示例#4
0
def HandlePrimaryPenguinLogin(client, user, passd):
	exist = yield client.db_penguinExists('username', user)
	
	if not exist:
		client.send("e", 101)
		returnValue(client.disconnect())
	
	client.penguin.username = user

	yield client.db_init()

	client.penguin.username = Username(client.dbpenguin.username, client)
	client.penguin.password = Password(client.dbpenguin.password, client)
	if not client.checkPassword(passd):
		client.send('e', 101)
		returnValue(client.disconnect())

	client.penguin.id = client.dbpenguin.id

	banned = yield client.banned()
	if banned:
		returnValue(0)
		
	client.penguin.swid = client.dbpenguin.swid
	
	key = client.CryptoHandler.confirmHash()
	confh = client.CryptoHandler.bcrypt(key)
	fkey = client.CryptoHandler.md5(key)
	
	client.engine.redis.server.set("conf:{0}".format(client.dbpenguin.id), key, 15*60)

	world = list()

	w, wu = yield client.engine.redis.getWorldServers()

	for k in w:
		p = w[k]
		bars = int(int(p['population']) * 5 / int(p['max']))
		world.append("{},{}".format(k, bars))
		
	world = '|'.join(world)

	if client.Protocol == AS3_PROTOCOL:
		player_data = "{}|{}|{}|{}|NULL|45|2".format(client.dbpenguin.id, client.dbpenguin.swid, client.dbpenguin.nickname, client.CryptoHandler.bcrypt(key))
		email = client.dbpenguin.email[0] + '***@' + client.dbpenguin.email.split('@')[1]
	
		client.send('l', player_data, confh, fkey, world, email)

	elif client.Protocol == AS2_PROTOCOL:
		friendsDB = yield Friend.find(where = ['swid = ?', client.dbpenguin.swid], limit = 1)
		friends = map(lambda x: x.split('|')[0], friendsDB.friends.split(',')) if friendsDB is not None else []
		friends = set(friends)

		'''
		World = {user1, user2, ...}
		Friends = {user_p, user_q, ...}

		if Friends in World, then, World - Friends will be a set such that n(W-F) < n(W)
		'''
		worldsWithFriends = list(str(i) for i in wu if len(wu[i]) != len(wu[i] - friends))
		wwf = '|'.join(worldsWithFriends)

		client.send('l', client.dbpenguin.id, confh, wwf, world)
	
	returnValue(client.disconnect())