2024-06-18 13:03:31 +00:00
|
|
|
from test.util.abstract_integration_test import AbstractPostgresTest
|
|
|
|
from test.util.mock_user import mock_webui_user
|
|
|
|
|
|
|
|
|
|
|
|
class TestAuths(AbstractPostgresTest):
|
|
|
|
BASE_PATH = "/api/v1/auths"
|
|
|
|
|
|
|
|
def setup_class(cls):
|
|
|
|
super().setup_class()
|
2024-12-10 08:54:13 +00:00
|
|
|
from open_webui.models.auths import Auths
|
|
|
|
from open_webui.models.users import Users
|
2024-06-18 13:03:31 +00:00
|
|
|
|
|
|
|
cls.users = Users
|
|
|
|
cls.auths = Auths
|
|
|
|
|
|
|
|
def test_get_session_user(self):
|
|
|
|
with mock_webui_user():
|
|
|
|
response = self.fast_api_client.get(self.create_url(""))
|
|
|
|
assert response.status_code == 200
|
|
|
|
assert response.json() == {
|
|
|
|
"id": "1",
|
|
|
|
"name": "John Doe",
|
|
|
|
"email": "john.doe@openwebui.com",
|
|
|
|
"role": "user",
|
|
|
|
"profile_image_url": "/user.png",
|
|
|
|
}
|
|
|
|
|
|
|
|
def test_update_profile(self):
|
2024-12-09 00:01:56 +00:00
|
|
|
from open_webui.utils.auth import get_password_hash
|
2024-06-18 13:03:31 +00:00
|
|
|
|
|
|
|
user = self.auths.insert_new_auth(
|
|
|
|
email="john.doe@openwebui.com",
|
|
|
|
password=get_password_hash("old_password"),
|
|
|
|
name="John Doe",
|
|
|
|
profile_image_url="/user.png",
|
|
|
|
role="user",
|
|
|
|
)
|
|
|
|
|
|
|
|
with mock_webui_user(id=user.id):
|
|
|
|
response = self.fast_api_client.post(
|
|
|
|
self.create_url("/update/profile"),
|
|
|
|
json={"name": "John Doe 2", "profile_image_url": "/user2.png"},
|
|
|
|
)
|
|
|
|
assert response.status_code == 200
|
2024-06-21 12:58:57 +00:00
|
|
|
db_user = self.users.get_user_by_id(user.id)
|
2024-06-18 13:03:31 +00:00
|
|
|
assert db_user.name == "John Doe 2"
|
|
|
|
assert db_user.profile_image_url == "/user2.png"
|
|
|
|
|
|
|
|
def test_update_password(self):
|
2024-12-09 00:01:56 +00:00
|
|
|
from open_webui.utils.auth import get_password_hash
|
2024-06-18 13:03:31 +00:00
|
|
|
|
|
|
|
user = self.auths.insert_new_auth(
|
|
|
|
email="john.doe@openwebui.com",
|
|
|
|
password=get_password_hash("old_password"),
|
|
|
|
name="John Doe",
|
|
|
|
profile_image_url="/user.png",
|
|
|
|
role="user",
|
|
|
|
)
|
|
|
|
|
|
|
|
with mock_webui_user(id=user.id):
|
|
|
|
response = self.fast_api_client.post(
|
|
|
|
self.create_url("/update/password"),
|
|
|
|
json={"password": "old_password", "new_password": "new_password"},
|
|
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
|
|
|
|
|
|
old_auth = self.auths.authenticate_user(
|
2024-06-21 12:58:57 +00:00
|
|
|
"john.doe@openwebui.com", "old_password"
|
2024-06-18 13:03:31 +00:00
|
|
|
)
|
|
|
|
assert old_auth is None
|
|
|
|
new_auth = self.auths.authenticate_user(
|
2024-06-21 12:58:57 +00:00
|
|
|
"john.doe@openwebui.com", "new_password"
|
2024-06-18 13:03:31 +00:00
|
|
|
)
|
|
|
|
assert new_auth is not None
|
|
|
|
|
|
|
|
def test_signin(self):
|
2024-12-09 00:01:56 +00:00
|
|
|
from open_webui.utils.auth import get_password_hash
|
2024-06-18 13:03:31 +00:00
|
|
|
|
|
|
|
user = self.auths.insert_new_auth(
|
|
|
|
email="john.doe@openwebui.com",
|
|
|
|
password=get_password_hash("password"),
|
|
|
|
name="John Doe",
|
|
|
|
profile_image_url="/user.png",
|
|
|
|
role="user",
|
|
|
|
)
|
|
|
|
response = self.fast_api_client.post(
|
|
|
|
self.create_url("/signin"),
|
|
|
|
json={"email": "john.doe@openwebui.com", "password": "password"},
|
|
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
|
|
data = response.json()
|
|
|
|
assert data["id"] == user.id
|
|
|
|
assert data["name"] == "John Doe"
|
|
|
|
assert data["email"] == "john.doe@openwebui.com"
|
|
|
|
assert data["role"] == "user"
|
|
|
|
assert data["profile_image_url"] == "/user.png"
|
|
|
|
assert data["token"] is not None and len(data["token"]) > 0
|
|
|
|
assert data["token_type"] == "Bearer"
|
|
|
|
|
|
|
|
def test_signup(self):
|
|
|
|
response = self.fast_api_client.post(
|
|
|
|
self.create_url("/signup"),
|
|
|
|
json={
|
|
|
|
"name": "John Doe",
|
|
|
|
"email": "john.doe@openwebui.com",
|
|
|
|
"password": "password",
|
|
|
|
},
|
|
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
|
|
data = response.json()
|
|
|
|
assert data["id"] is not None and len(data["id"]) > 0
|
|
|
|
assert data["name"] == "John Doe"
|
|
|
|
assert data["email"] == "john.doe@openwebui.com"
|
|
|
|
assert data["role"] in ["admin", "user", "pending"]
|
|
|
|
assert data["profile_image_url"] == "/user.png"
|
|
|
|
assert data["token"] is not None and len(data["token"]) > 0
|
|
|
|
assert data["token_type"] == "Bearer"
|
|
|
|
|
|
|
|
def test_add_user(self):
|
|
|
|
with mock_webui_user():
|
|
|
|
response = self.fast_api_client.post(
|
|
|
|
self.create_url("/add"),
|
|
|
|
json={
|
|
|
|
"name": "John Doe 2",
|
|
|
|
"email": "john.doe2@openwebui.com",
|
|
|
|
"password": "password2",
|
|
|
|
"role": "admin",
|
|
|
|
},
|
|
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
|
|
data = response.json()
|
|
|
|
assert data["id"] is not None and len(data["id"]) > 0
|
|
|
|
assert data["name"] == "John Doe 2"
|
|
|
|
assert data["email"] == "john.doe2@openwebui.com"
|
|
|
|
assert data["role"] == "admin"
|
|
|
|
assert data["profile_image_url"] == "/user.png"
|
|
|
|
assert data["token"] is not None and len(data["token"]) > 0
|
|
|
|
assert data["token_type"] == "Bearer"
|
|
|
|
|
|
|
|
def test_get_admin_details(self):
|
|
|
|
self.auths.insert_new_auth(
|
|
|
|
email="john.doe@openwebui.com",
|
|
|
|
password="password",
|
|
|
|
name="John Doe",
|
|
|
|
profile_image_url="/user.png",
|
|
|
|
role="admin",
|
|
|
|
)
|
|
|
|
with mock_webui_user():
|
|
|
|
response = self.fast_api_client.get(self.create_url("/admin/details"))
|
|
|
|
|
|
|
|
assert response.status_code == 200
|
|
|
|
assert response.json() == {
|
|
|
|
"name": "John Doe",
|
|
|
|
"email": "john.doe@openwebui.com",
|
|
|
|
}
|
|
|
|
|
|
|
|
def test_create_api_key_(self):
|
|
|
|
user = self.auths.insert_new_auth(
|
|
|
|
email="john.doe@openwebui.com",
|
|
|
|
password="password",
|
|
|
|
name="John Doe",
|
|
|
|
profile_image_url="/user.png",
|
|
|
|
role="admin",
|
|
|
|
)
|
|
|
|
with mock_webui_user(id=user.id):
|
|
|
|
response = self.fast_api_client.post(self.create_url("/api_key"))
|
|
|
|
assert response.status_code == 200
|
|
|
|
data = response.json()
|
|
|
|
assert data["api_key"] is not None
|
|
|
|
assert len(data["api_key"]) > 0
|
|
|
|
|
|
|
|
def test_delete_api_key(self):
|
|
|
|
user = self.auths.insert_new_auth(
|
|
|
|
email="john.doe@openwebui.com",
|
|
|
|
password="password",
|
|
|
|
name="John Doe",
|
|
|
|
profile_image_url="/user.png",
|
|
|
|
role="admin",
|
|
|
|
)
|
2024-06-21 12:58:57 +00:00
|
|
|
self.users.update_user_api_key_by_id(user.id, "abc")
|
2024-06-18 13:03:31 +00:00
|
|
|
with mock_webui_user(id=user.id):
|
|
|
|
response = self.fast_api_client.delete(self.create_url("/api_key"))
|
|
|
|
assert response.status_code == 200
|
|
|
|
assert response.json() == True
|
2024-06-21 12:58:57 +00:00
|
|
|
db_user = self.users.get_user_by_id(user.id)
|
2024-06-18 13:03:31 +00:00
|
|
|
assert db_user.api_key is None
|
|
|
|
|
|
|
|
def test_get_api_key(self):
|
|
|
|
user = self.auths.insert_new_auth(
|
|
|
|
email="john.doe@openwebui.com",
|
|
|
|
password="password",
|
|
|
|
name="John Doe",
|
|
|
|
profile_image_url="/user.png",
|
|
|
|
role="admin",
|
|
|
|
)
|
2024-06-21 12:58:57 +00:00
|
|
|
self.users.update_user_api_key_by_id(user.id, "abc")
|
2024-06-18 13:03:31 +00:00
|
|
|
with mock_webui_user(id=user.id):
|
|
|
|
response = self.fast_api_client.get(self.create_url("/api_key"))
|
|
|
|
assert response.status_code == 200
|
|
|
|
assert response.json() == {"api_key": "abc"}
|