funkwhale/api/tests/subsonic/test_authentication.py

78 wiersze
2.2 KiB
Python

import binascii
import pytest
from rest_framework import exceptions
from funkwhale_api.subsonic import authentication
def test_auth_with_salt(api_request, factories):
salt = "salt"
user = factories["users.User"]()
user.subsonic_api_token = "password"
user.save()
token = authentication.get_token(salt, "password")
request = api_request.get("/", {"t": token, "s": salt, "u": user.username})
authenticator = authentication.SubsonicAuthentication()
u, _ = authenticator.authenticate(request)
assert user == u
def test_auth_with_password_hex(api_request, factories):
user = factories["users.User"]()
user.subsonic_api_token = "password"
user.save()
request = api_request.get(
"/",
{
"u": user.username,
"p": "enc:{}".format(
binascii.hexlify(user.subsonic_api_token.encode("utf-8")).decode(
"utf-8"
)
),
},
)
authenticator = authentication.SubsonicAuthentication()
u, _ = authenticator.authenticate(request)
assert user == u
def test_auth_with_password_cleartext(api_request, factories):
user = factories["users.User"]()
user.subsonic_api_token = "password"
user.save()
request = api_request.get("/", {"u": user.username, "p": "password"})
authenticator = authentication.SubsonicAuthentication()
u, _ = authenticator.authenticate(request)
assert user == u
def test_auth_with_inactive_users(api_request, factories):
user = factories["users.User"](is_active=False)
user.subsonic_api_token = "password"
user.save()
request = api_request.get("/", {"u": user.username, "p": "password"})
authenticator = authentication.SubsonicAuthentication()
with pytest.raises(exceptions.AuthenticationFailed):
authenticator.authenticate(request)
def test_auth_case_insensitive(api_request, factories):
user = factories["users.User"](username="Hello")
user.subsonic_api_token = "password"
user.save()
request = api_request.get("/", {"u": "hello", "p": "password"})
authenticator = authentication.SubsonicAuthentication()
u, _ = authenticator.authenticate(request)
assert user == u