コード例 #1
0
def verify_handler():
    body = request.get_json()
    logger.debug("Verify %s", body)
    user = db.getUserByName(conn, body.get('username'))
    login_attempt = db.getAuthByStateHash(conn, body.get('hash'))
    try:
        if user and login_attempt:
            requested_datetime = datetime.strptime(login_attempt[2],
                                                   '%Y-%m-%d %H:%M:%S.%f')
            max_datetime = requested_datetime + timedelta(minutes=10)
            if requested_datetime < max_datetime:
                public_key = base64.b64decode(user[3])
                signed_hash = base64.b64decode(login_attempt[4])
                original_hash = login_attempt[1]
                try:
                    bytes_signed_hash = bytes(signed_hash)
                    bytes_original_hash = bytes(original_hash, encoding='utf8')
                    verify_key = nacl.signing.VerifyKey(
                        public_key.hex(), encoder=nacl.encoding.HexEncoder)
                    verify_key.verify(bytes_original_hash, bytes_signed_hash)
                    return Response("Ok")
                except:
                    return Response("Sinature invalid", status=400)
            else:
                return Response("You are too late", status=400)

        else:
            return Response("Oops.. user or login attempt not found",
                            status=404)
    except Exception as e:
        logger.log("Something went wrong while trying to verify the header %e",
                   e)
コード例 #2
0
def flag_handler():
    body = request.get_json()
    logger.debug("Flag %s", body)
    login_attempt = None
    user = db.getUserByName(conn, body.get('doubleName'))

    try:
        login_attempt = db.getAuthByStateHash(conn, body.get('hash'))
    except Exception as e:
        pass

    if user:
        print("user found")
        try:
            public_key = base64.b64decode(user[3])
            signed_device_id = base64.b64decode(body.get('deviceId'))
            bytes_signed_device_id = bytes(signed_device_id)
            verify_key = nacl.signing.VerifyKey(
                public_key.hex(), encoder=nacl.encoding.HexEncoder)
            verified_device_id = verify_key.verify(bytes_signed_device_id)
            if verified_device_id:
                verified_device_id = verified_device_id.decode("utf-8")
                update_sql = "UPDATE users SET device_id=?  WHERE device_id=?;"
                db.update_user(conn, update_sql, '', verified_device_id)

                sio.emit('scannedFlag', {'scanned': True}, room=user[1])
            return Response("Ok")
        except Exception as e:
            logger.debug("Exception: %s", e)
            return Response("Sinature invalid", status=400)

        if login_attempt:
            print("login attempt found")
            if verified_device_id:
                verified_device_id = verified_device_id.decode("utf-8")
                update_sql = "UPDATE users SET device_id=?  WHERE device_id=?;"
                db.update_user(conn, update_sql, '', verified_device_id)

                update_sql = "UPDATE auth SET scanned=?, data=?  WHERE double_name=?;"
                db.update_auth(conn, update_sql, 1, '', login_attempt[0])

                update_sql = "UPDATE users SET device_id =?  WHERE double_name=?;"
                db.update_user(conn, update_sql, verified_device_id,
                               login_attempt[0])

            return Response("Ok")
    else:
        print("user not found")
        return Response('User not found', status=404)
コード例 #3
0
def sign_handler():
    body = request.get_json()
    logger.debug("Sign: %s", body)
    login_attempt = db.getAuthByStateHash(conn, body.get('hash'))
    if login_attempt != None:
        user = db.getUserByName(conn, login_attempt[0])
        update_sql = "UPDATE auth SET singed_statehash =?, data=?  WHERE state_hash=?;"
        db.update_auth(conn, update_sql, body.get('signedHash'),
                       json.dumps(body.get('data')), body.get('hash'))
        sio.emit('signed', {
            'signedHash': body.get('signedHash'),
            'data': body.get('data'),
            'selectedImageId': body.get('selectedImageId')
        },
                 room=user[1])
        return Response("Ok")
    else:
        return Response("Something went wrong", status=500)
コード例 #4
0
ファイル: __main__.py プロジェクト: RafGi/3Bot_connect
def force_refetch_handler():
    data = request.args
    logger.debug("Force refetch %s", data)
    if (data == None):
        return Response("Got no data", status=400)
    logger.debug("Hash %s", data['hash'])
    loggin_attempt = db.getAuthByStateHash(conn, data['hash'])
    logger.debug("Login attempt %s", loggin_attempt)
    if (loggin_attempt != None):
        # db.deleteAuthByStateHash(conn, data['hash'])
        # logger.debug("Removing login attempt")
        data = {"scanned": loggin_attempt[3], "signed": {'signedHash': loggin_attempt[4], 'data': loggin_attempt[5], 'doubleName': loggin_attempt[0]}}
        response = app.response_class(
            response=json.dumps(data),
            mimetype='application/json'
        )
        logger.debug("Data %s", data)
        return response
    else:
        return Response()