aboutsummaryrefslogtreecommitdiff
path: root/server/szurubooru/tests/api
diff options
context:
space:
mode:
authorReAnzu2018-02-25 04:44:02 -0600
committerrr-2018-03-25 22:23:29 +0200
commit2a69f0193f9e5aa451e0dbcb8c89070f3e49ffa5 (patch)
treebda640614ae711e8fef0e0463f118f85ef83ac0e /server/szurubooru/tests/api
parente35e70992736340bff3995ca6f425baf2f431e2f (diff)
server/auth: add token authentication
* Users are only authenticated against their password on login, and to retrieve a token * Passwords are wiped from the GUI frontend and cookies after login and token retrieval * Tokens are revoked at the end of the session/logout * If the user chooses the "remember me" option, the token is stored in the cookie * Tokens correctly delete themselves on logout * Tokens can expire at user-specified date * Tokens have their last usage time * Tokens can have user defined descriptions * Users can manage login tokens in their account settings
Diffstat (limited to 'server/szurubooru/tests/api')
-rw-r--r--server/szurubooru/tests/api/test_user_token_creating.py29
-rw-r--r--server/szurubooru/tests/api/test_user_token_deleting.py30
-rw-r--r--server/szurubooru/tests/api/test_user_token_retrieving.py31
-rw-r--r--server/szurubooru/tests/api/test_user_token_updating.py42
4 files changed, 132 insertions, 0 deletions
diff --git a/server/szurubooru/tests/api/test_user_token_creating.py b/server/szurubooru/tests/api/test_user_token_creating.py
new file mode 100644
index 0000000..f550f63
--- /dev/null
+++ b/server/szurubooru/tests/api/test_user_token_creating.py
@@ -0,0 +1,29 @@
+from unittest.mock import patch
+import pytest
+from szurubooru import api
+from szurubooru.func import user_tokens, users
+
+
+@pytest.fixture(autouse=True)
+def inject_config(config_injector):
+ config_injector({'privileges': {'user_tokens:create:self': 'regular'}})
+
+
+def test_creating_user_token(
+ user_token_factory, context_factory, fake_datetime):
+ user_token = user_token_factory()
+ with patch('szurubooru.func.user_tokens.create_user_token'), \
+ patch('szurubooru.func.user_tokens.serialize_user_token'), \
+ patch('szurubooru.func.users.get_user_by_name'), \
+ fake_datetime('1969-02-12'):
+ users.get_user_by_name.return_value = user_token.user
+ user_tokens.serialize_user_token.return_value = 'serialized user token'
+ user_tokens.create_user_token.return_value = user_token
+ result = api.user_token_api.create_user_token(
+ context_factory(user=user_token.user),
+ {
+ 'user_name': user_token.user.name
+ })
+ assert result == 'serialized user token'
+ user_tokens.create_user_token.assert_called_once_with(
+ user_token.user, True)
diff --git a/server/szurubooru/tests/api/test_user_token_deleting.py b/server/szurubooru/tests/api/test_user_token_deleting.py
new file mode 100644
index 0000000..8534152
--- /dev/null
+++ b/server/szurubooru/tests/api/test_user_token_deleting.py
@@ -0,0 +1,30 @@
+from unittest.mock import patch
+import pytest
+from szurubooru import api, db
+from szurubooru.func import user_tokens, users
+
+
+@pytest.fixture(autouse=True)
+def inject_config(config_injector):
+ config_injector({'privileges': {'user_tokens:delete:self': 'regular'}})
+
+
+def test_deleting_user_token(
+ user_token_factory, context_factory, fake_datetime):
+ user_token = user_token_factory()
+ db.session.add(user_token)
+ db.session.commit()
+ with patch('szurubooru.func.user_tokens.get_by_user_and_token'), \
+ patch('szurubooru.func.users.get_user_by_name'), \
+ fake_datetime('1969-02-12'):
+ users.get_user_by_name.return_value = user_token.user
+ user_tokens.get_by_user_and_token.return_value = user_token
+ result = api.user_token_api.delete_user_token(
+ context_factory(user=user_token.user),
+ {
+ 'user_name': user_token.user.name,
+ 'user_token': user_token.token
+ })
+ assert result == {}
+ user_tokens.get_by_user_and_token.assert_called_once_with(
+ user_token.user, user_token.token)
diff --git a/server/szurubooru/tests/api/test_user_token_retrieving.py b/server/szurubooru/tests/api/test_user_token_retrieving.py
new file mode 100644
index 0000000..01b2534
--- /dev/null
+++ b/server/szurubooru/tests/api/test_user_token_retrieving.py
@@ -0,0 +1,31 @@
+from unittest.mock import patch
+import pytest
+from szurubooru import api
+from szurubooru.func import user_tokens, users
+
+
+@pytest.fixture(autouse=True)
+def inject_config(config_injector):
+ config_injector({'privileges': {'user_tokens:list:self': 'regular'}})
+
+
+def test_retrieving_user_tokens(
+ user_token_factory, context_factory, fake_datetime):
+ user_token1 = user_token_factory()
+ user_token2 = user_token_factory(user=user_token1.user)
+ user_token3 = user_token_factory(user=user_token1.user)
+ with patch('szurubooru.func.user_tokens.get_user_tokens'), \
+ patch('szurubooru.func.user_tokens.serialize_user_token'), \
+ patch('szurubooru.func.users.get_user_by_name'), \
+ fake_datetime('1969-02-12'):
+ users.get_user_by_name.return_value = user_token1.user
+ user_tokens.serialize_user_token.return_value = 'serialized user token'
+ user_tokens.get_user_tokens.return_value = [user_token1, user_token2,
+ user_token3]
+ result = api.user_token_api.get_user_tokens(
+ context_factory(user=user_token1.user),
+ {
+ 'user_name': user_token1.user.name
+ })
+ assert result == {'results': ['serialized user token'] * 3}
+ user_tokens.get_user_tokens.assert_called_once_with(user_token1.user)
diff --git a/server/szurubooru/tests/api/test_user_token_updating.py b/server/szurubooru/tests/api/test_user_token_updating.py
new file mode 100644
index 0000000..bf725a3
--- /dev/null
+++ b/server/szurubooru/tests/api/test_user_token_updating.py
@@ -0,0 +1,42 @@
+from unittest.mock import patch
+import pytest
+from szurubooru import api, db
+from szurubooru.func import user_tokens, users
+
+
+@pytest.fixture(autouse=True)
+def inject_config(config_injector):
+ config_injector({'privileges': {'user_tokens:edit:self': 'regular'}})
+
+
+def test_edit_user_token(user_token_factory, context_factory, fake_datetime):
+ user_token = user_token_factory()
+ db.session.add(user_token)
+ db.session.commit()
+ with patch('szurubooru.func.user_tokens.get_by_user_and_token'), \
+ patch('szurubooru.func.user_tokens.update_user_token_enabled'), \
+ patch('szurubooru.func.user_tokens.update_user_token_edit_time'), \
+ patch('szurubooru.func.user_tokens.serialize_user_token'), \
+ patch('szurubooru.func.users.get_user_by_name'), \
+ fake_datetime('1969-02-12'):
+ users.get_user_by_name.return_value = user_token.user
+ user_tokens.serialize_user_token.return_value = 'serialized user token'
+ user_tokens.get_by_user_and_token.return_value = user_token
+ result = api.user_token_api.update_user_token(
+ context_factory(
+ params={
+ 'version': user_token.version,
+ 'enabled': False,
+ },
+ user=user_token.user),
+ {
+ 'user_name': user_token.user.name,
+ 'user_token': user_token.token
+ })
+ assert result == 'serialized user token'
+ user_tokens.get_by_user_and_token.assert_called_once_with(
+ user_token.user, user_token.token)
+ user_tokens.update_user_token_enabled.assert_called_once_with(
+ user_token, False)
+ user_tokens.update_user_token_edit_time.assert_called_once_with(
+ user_token)

© 2015 - 2026 Jakob L. Kreuze