Beispiel #1
0
 def authenticate(self, username, password, create_user=False):
     """ Send a SignIn request.
         :param username: username
         :param password: password
         :param create_user: boolean indicating if you want to create a user or login to and existing user.
         :return: a Channel object representing the authentication.
     """
     request = requests.SignIn(username=username,
                               password=password,
                               create_user=create_user)
     return (yield self.send(request))
Beispiel #2
0
    def authenticate(self, username, password):
        """ Send a :class:`.SignIn` request.
            User will be created on the server automatically if it doesn't exist.

            :param username: username
            :param password: password
            :return: a :class:`.Channel` object representing the authentication.
            :type username: str
            :type password: str
            :rtype: diplomacy.client.channel.Channel
        """
        request = requests.SignIn(username=username, password=password)
        return (yield self.send(request))
Beispiel #3
0
def on_i_am_request(server, request, connection_handler, game):
    """ Manage IAM request
        :param server: server which receives the request
        :param request: request to manage
        :param connection_handler: connection handler from which the request was sent
        :param game: the game
        :return: the list of responses
    """
    power_name, passcode = request.power_name, request.passcode

    # find user
    username = None
    for user in server.users.values():
        if not isinstance(user, DaideUser):
            continue
        is_passcode_valid = bool(user.passcode == passcode)
        if is_passcode_valid and game.is_controlled_by(power_name,
                                                       user.username):
            username = user.username
            break

    if username is None:
        return [responses.REJ(bytes(request))]

    try:
        server.assert_token(connection_handler.token, connection_handler)
    except exceptions.TokenException:
        connection_handler.token = None

    if not connection_handler.token:
        sign_in_request = internal_requests.SignIn(username=username,
                                                   password='******',
                                                   create_user=False)

        try:
            token_response = yield internal_request_managers.handle_request(
                server, sign_in_request, connection_handler)
            connection_handler.token = token_response.data
        except exceptions.UserException:
            return [responses.REJ(bytes(request))]

    join_game_request = internal_requests.JoinGame(
        game_id=game.game_id,
        power_name=power_name,
        registration_password=None,
        token=connection_handler.token)

    yield internal_request_managers.handle_request(server, join_game_request,
                                                   connection_handler)

    return [responses.YES(bytes(request))]
Beispiel #4
0
def on_name_request(server, request, connection_handler, game):
    """ Manage NME request
        :param server: server which receives the request
        :param request: request to manage
        :param connection_handler: connection handler from which the request was sent
        :param game: the game
        :return: the list of responses
    """
    username = connection_handler.get_name_variant() + request.client_name

    try:
        server.assert_token(connection_handler.token, connection_handler)
    except exceptions.TokenException:
        connection_handler.token = None

    if not connection_handler.token:
        user_exists = server.users.has_username(username)

        sign_in_request = internal_requests.SignIn(username=username,
                                                   password='******',
                                                   create_user=not user_exists)

        try:
            token_response = yield internal_request_managers.handle_request(
                server, sign_in_request, connection_handler)
            connection_handler.token = token_response.data
            if not isinstance(server.users.get_user(username), DaideUser):
                daide_user = DaideUser(
                    passcode=random.randint(1, 8191),
                    client_name=request.client_name,
                    client_version=request.client_version,
                    **server.users.get_user(username).to_dict())
                server.users.replace_user(username, daide_user)
                server.save_data()
        except exceptions.UserException:
            return [responses.REJ(bytes(request))]

    # find next available power
    power_name = [
        power_name for power_name, power in game.powers.items()
        if not power.is_controlled()
    ]
    if not power_name:
        return [responses.REJ(bytes(request))]

    return [responses.YES(bytes(request)), responses.MAP(game.map.name)]