From 96c5441ac652bb2e7e396381d3fb2e0964ad68da Mon Sep 17 00:00:00 2001 From: Philip Paquette Date: Wed, 11 Sep 2019 17:34:18 -0400 Subject: channel.authenticate() - Deprecated argument 'create_user' - User is now created by default if it doesn't exist on the server - Unless the server prevents new registrations --- diplomacy/client/connection.py | 7 +++---- diplomacy/communication/requests.py | 6 +----- diplomacy/daide/request_managers.py | 12 ++---------- diplomacy/daide/tests/test_daide_game.py | 6 ++---- diplomacy/server/request_managers.py | 21 ++++++++++++--------- diplomacy/tests/network/test_real_game.py | 10 +++------- diplomacy/utils/strings.py | 1 - diplomacy/web/src/diplomacy/client/connection.js | 5 ++--- .../web/src/diplomacy/communication/requests.js | 2 +- diplomacy/web/src/gui/pages/content_connection.jsx | 6 +----- 10 files changed, 27 insertions(+), 49 deletions(-) (limited to 'diplomacy') diff --git a/diplomacy/client/connection.py b/diplomacy/client/connection.py index f81d5b6..759a0c0 100644 --- a/diplomacy/client/connection.py +++ b/diplomacy/client/connection.py @@ -130,19 +130,18 @@ class Connection: # =================== @gen.coroutine - def authenticate(self, username, password, create_user=False): + 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 - :param create_user: boolean indicating if you want to create a user or login to an existing user. :return: a :class:`.Channel` object representing the authentication. :type username: str :type password: str - :type create_user: bool :rtype: diplomacy.client.channel.Channel """ - request = requests.SignIn(username=username, password=password, create_user=create_user) + request = requests.SignIn(username=username, password=password) return (yield self.send(request)) @gen.coroutine diff --git a/diplomacy/communication/requests.py b/diplomacy/communication/requests.py index f16c33c..3291dfb 100644 --- a/diplomacy/communication/requests.py +++ b/diplomacy/communication/requests.py @@ -198,7 +198,6 @@ class SignIn(_AbstractRequest): :param username: account username :param password: account password - :param create_user: if True, server must create user. If False, server must login user. :return: - Server: :class:`.DataToken` @@ -207,19 +206,16 @@ class SignIn(_AbstractRequest): :type username: str :type password: str - :type create_user: bool """ - __slots__ = ['username', 'password', 'create_user'] + __slots__ = ['username', 'password'] params = { strings.USERNAME: str, strings.PASSWORD: str, - strings.CREATE_USER: bool } def __init__(self, **kwargs): self.username = None self.password = None - self.create_user = None super(SignIn, self).__init__(**kwargs) # ================= diff --git a/diplomacy/daide/request_managers.py b/diplomacy/daide/request_managers.py index 8e3e5cb..e4a5451 100644 --- a/diplomacy/daide/request_managers.py +++ b/diplomacy/daide/request_managers.py @@ -50,12 +50,7 @@ def on_name_request(server, request, connection_handler, game): 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='1234', - create_user=not user_exists) - + sign_in_request = internal_requests.SignIn(username=username, password='1234') try: token_response = yield internal_request_managers.handle_request(server, sign_in_request, connection_handler) connection_handler.token = token_response.data @@ -119,10 +114,7 @@ def on_i_am_request(server, request, connection_handler, game): connection_handler.token = None if not connection_handler.token: - sign_in_request = internal_requests.SignIn(username=username, - password='1234', - create_user=False) - + sign_in_request = internal_requests.SignIn(username=username, password='1234') try: token_response = yield internal_request_managers.handle_request(server, sign_in_request, connection_handler) connection_handler.token = token_response.data diff --git a/diplomacy/daide/tests/test_daide_game.py b/diplomacy/daide/tests/test_daide_game.py index 3e970b2..93c73b7 100644 --- a/diplomacy/daide/tests/test_daide_game.py +++ b/diplomacy/daide/tests/test_daide_game.py @@ -390,17 +390,15 @@ def run_game_data(nb_daide_clients, rules, csv_file): # Creating human player human_username = 'username' human_password = 'password' - human_create_user = not server.users.has_user(human_username, human_password) # Creating bot player to play for dummy powers bot_username = constants.PRIVATE_BOT_USERNAME bot_password = constants.PRIVATE_BOT_PASSWORD - bot_create_user = not server.users.has_user(bot_username, bot_password) # Connecting connection = yield connect(HOSTNAME, port) - human_channel = yield connection.authenticate(human_username, human_password, human_create_user) - bot_channel = yield connection.authenticate(bot_username, bot_password, bot_create_user) + human_channel = yield connection.authenticate(human_username, human_password) + bot_channel = yield connection.authenticate(bot_username, bot_password) # Joining human to game channels = {BOT_KEYWORD: bot_channel} diff --git a/diplomacy/server/request_managers.py b/diplomacy/server/request_managers.py index 073a7ef..9e61044 100644 --- a/diplomacy/server/request_managers.py +++ b/diplomacy/server/request_managers.py @@ -1068,20 +1068,23 @@ def on_sign_in(server, request, connection_handler): :type request: diplomacy.communication.requests.SignIn """ # No channel/game request verification to do. - username, password, create_user = request.username, request.password, request.create_user - if create_user: - # Register. - if not username: - raise exceptions.UserException() - if not password: - raise exceptions.PasswordException() + username, password = request.username, request.password + + if not username: + raise exceptions.UserException() + if not password: + raise exceptions.PasswordException() + + # New user + if not server.users.has_username(username): if not server.allow_registrations: raise exceptions.ServerRegistrationException() - if server.users.has_username(username): - raise exceptions.UserException() server.users.add_user(username, hash_password(password)) + + # Existing user elif not server.users.has_user(username, password): raise exceptions.UserException() + token = server.users.connect_user(username, connection_handler) server.save_data() return responses.DataToken(data=token, request_id=request.request_id) diff --git a/diplomacy/tests/network/test_real_game.py b/diplomacy/tests/network/test_real_game.py index bd63da1..5a8904a 100644 --- a/diplomacy/tests/network/test_real_game.py +++ b/diplomacy/tests/network/test_real_game.py @@ -32,7 +32,7 @@ from diplomacy.server.server import Server from diplomacy.engine.game import Game from diplomacy.engine.map import Map from diplomacy.engine.message import GLOBAL, Message as EngineMessage -from diplomacy.utils import common, exceptions, constants, strings +from diplomacy.utils import common, constants, strings LOGGER = logging.getLogger('diplomacy.tests.network.test_real_game') @@ -511,11 +511,7 @@ def load_power_game(case_data, power_name): username = 'user_%s' % power_name password = 'password_%s' % power_name - try: - user_channel = yield case_data.connection.authenticate(username, password, create_user=True) - except exceptions.ResponseException: - print('User', username, 'seems to already exists. Try to login.') - user_channel = yield case_data.connection.authenticate(username, password, create_user=False) + user_channel = yield case_data.connection.authenticate(username, password) print('User', username, 'connected.') user_game = yield user_channel.join_game(game_id=case_data.admin_game.game_id, power_name=power_name) @@ -550,7 +546,7 @@ def main(case_data): if case_data.admin_channel is None: LOGGER.info('Creating connection, admin channel and admin game.') case_data.connection = yield connect(case_data.hostname, case_data.port) - case_data.admin_channel = yield case_data.connection.authenticate('admin', 'password', create_user=False) + case_data.admin_channel = yield case_data.connection.authenticate('admin', 'password') # NB: For all test cases, first game state should be default game engine state when starting. # So, we don't need to pass game state of first expected phase when creating a server game. case_data.admin_game = yield case_data.admin_channel.create_game( diff --git a/diplomacy/utils/strings.py b/diplomacy/utils/strings.py index 80b83a3..9cabaf3 100644 --- a/diplomacy/utils/strings.py +++ b/diplomacy/utils/strings.py @@ -48,7 +48,6 @@ CONTROLLED_POWERS = 'controlled_powers' CONTROLLER = 'controller' COUNT_EXPECTED = 'count_expected' COUNT_VOTED = 'count_voted' -CREATE_USER = 'create_user' CURRENT_ORDER = 'current_order' CURRENT_PHASE = 'current_phase' CURRENT_PHASE_DATA = 'current_phase_data' diff --git a/diplomacy/web/src/diplomacy/client/connection.js b/diplomacy/web/src/diplomacy/client/connection.js index 54f6f2d..c1f8bfd 100644 --- a/diplomacy/web/src/diplomacy/client/connection.js +++ b/diplomacy/web/src/diplomacy/client/connection.js @@ -340,11 +340,10 @@ export class Connection { return requestContext.future; } - authenticate(username, password, createUser = false) { + authenticate(username, password) { return this.send(REQUESTS.create('sign_in', { username: username, - password: password, - create_user: createUser + password: password })).promise(); } diff --git a/diplomacy/web/src/diplomacy/communication/requests.js b/diplomacy/web/src/diplomacy/communication/requests.js index 6902b5f..a4a140e 100644 --- a/diplomacy/web/src/diplomacy/communication/requests.js +++ b/diplomacy/web/src/diplomacy/communication/requests.js @@ -35,7 +35,7 @@ export const REQUESTS = { * - request phase dependent (optional, for game requests): boolean (default, true) * **/ models: { - sign_in: {level: null, model: {username: null, password: null, create_user: null}}, + sign_in: {level: null, model: {username: null, password: null}}, create_game: { level: STRINGS.CHANNEL, model: { diff --git a/diplomacy/web/src/gui/pages/content_connection.jsx b/diplomacy/web/src/gui/pages/content_connection.jsx index 01b0650..a7a151f 100644 --- a/diplomacy/web/src/gui/pages/content_connection.jsx +++ b/diplomacy/web/src/gui/pages/content_connection.jsx @@ -46,11 +46,7 @@ export class ContentConnection extends React.Component { page.connection = this.connection; this.connection = null; page.success(`Successfully connected to server ${data.username}:${data.port}`); - page.connection.authenticate(data.username, data.password, false) - .catch((error) => { - page.error(`Unable to sign in, trying to create an account, error: ${error}`); - return page.connection.authenticate(data.username, data.password, true); - }) + page.connection.authenticate(data.username, data.password) .then((channel) => { page.channel = channel; return channel.getAvailableMaps(); -- cgit v1.2.3