aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md12
-rw-r--r--diplomacy/client/connection.py7
-rw-r--r--diplomacy/communication/requests.py6
-rw-r--r--diplomacy/daide/request_managers.py12
-rw-r--r--diplomacy/daide/tests/test_daide_game.py6
-rw-r--r--diplomacy/server/request_managers.py21
-rw-r--r--diplomacy/tests/network/test_real_game.py10
-rw-r--r--diplomacy/utils/strings.py1
-rw-r--r--diplomacy/web/src/diplomacy/client/connection.js5
-rw-r--r--diplomacy/web/src/diplomacy/communication/requests.js2
-rw-r--r--diplomacy/web/src/gui/pages/content_connection.jsx6
11 files changed, 29 insertions, 59 deletions
diff --git a/README.md b/README.md
index 61a11fd..247893e 100644
--- a/README.md
+++ b/README.md
@@ -118,24 +118,16 @@ from diplomacy.utils import exceptions
POWERS = ['AUSTRIA', 'ENGLAND', 'FRANCE', 'GERMANY', 'ITALY', 'RUSSIA', 'TURKEY']
-async def login(connection, username, password):
- """ Logins to the server """
- try:
- channel = await connection.authenticate(username, password, create_user=True)
- except exceptions.DiplomacyException:
- channel = await connection.authenticate(username, password, create_user=False)
- return channel
-
async def create_game(game_id, hostname='localhost', port=8432):
""" Creates a game on the server """
connection = await connect(hostname, port)
- channel = await login(connection, 'random_user', 'password')
+ channel = await connection.authenticate('random_user', 'password')
await channel.create_game(game_id=game_id, rules={'REAL_TIME', 'NO_DEADLINE', 'POWER_CHOICE'})
async def play(game_id, power_name, hostname='localhost', port=8432):
""" Play as the specified power """
connection = await connect(hostname, port)
- channel = await login(connection, 'user_' + power_name, 'password')
+ channel = await connection.authenticate('user_' + power_name, 'password')
# Waiting for the game, then joining it
while not (await channel.list_games(game_id=game_id)):
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();