diff --git a/src/backend/InvenTree/InvenTree/api_version.py b/src/backend/InvenTree/InvenTree/api_version.py index 112f401103..a52993e9a0 100644 --- a/src/backend/InvenTree/InvenTree/api_version.py +++ b/src/backend/InvenTree/InvenTree/api_version.py @@ -1,13 +1,16 @@ """InvenTree API version information.""" # InvenTree API version -INVENTREE_API_VERSION = 300 +INVENTREE_API_VERSION = 301 """Increment this API version number whenever there is a significant change to the API that any clients need to know about.""" INVENTREE_API_TEXT = """ +v301 - 2025-01-14 - https://github.com/inventree/InvenTree/pull/8894 + - Remove ui preferences from the API + v300 - 2025-01-13 - https://github.com/inventree/InvenTree/pull/8886 - Allow null value for 'expiry_date' field introduced in #8867 diff --git a/src/backend/InvenTree/InvenTree/urls.py b/src/backend/InvenTree/InvenTree/urls.py index ddc53a7eb2..e1770fb490 100644 --- a/src/backend/InvenTree/InvenTree/urls.py +++ b/src/backend/InvenTree/InvenTree/urls.py @@ -31,7 +31,6 @@ import stock.api import users.api from InvenTree.auth_override_views import CustomRegisterView from plugin.urls import get_plugin_urls -from web.urls import api_urls as web_api_urls from web.urls import urlpatterns as platform_urls from .api import ( @@ -87,7 +86,6 @@ apipatterns = [ ]), ), path('user/', include(users.api.user_urls)), - path('web/', include(web_api_urls)), # Plugin endpoints path('', include(plugin.api.plugin_api_urls)), # Common endpoints endpoint diff --git a/src/backend/InvenTree/users/api.py b/src/backend/InvenTree/users/api.py index f0941c3572..c794326d90 100644 --- a/src/backend/InvenTree/users/api.py +++ b/src/backend/InvenTree/users/api.py @@ -391,10 +391,7 @@ class LoginRedirect(RedirectView): def get_redirect_url(self, *args, **kwargs): """Return the URL to redirect to.""" - session = self.request.session - if session.get('preferred_method', 'cui') == 'pui': - return f'/{FRONTEND_URL_BASE}/logged-in/' - return '/index/' + return f'/{FRONTEND_URL_BASE}/logged-in/' user_urls = [ diff --git a/src/backend/InvenTree/users/test_api.py b/src/backend/InvenTree/users/test_api.py index c61f6556aa..7881415ac1 100644 --- a/src/backend/InvenTree/users/test_api.py +++ b/src/backend/InvenTree/users/test_api.py @@ -95,11 +95,6 @@ class UserAPITests(InvenTreeAPITestCase): def test_login_redirect(self): """Test login redirect endpoint.""" response = self.get(reverse('api-login-redirect'), expected_code=302) - self.assertEqual(response.url, '/index/') - - # PUI - self.put(reverse('api-ui-preference'), {'preferred_method': 'pui'}) - response = self.get(reverse('api-login-redirect'), expected_code=302) self.assertEqual(response.url, '/platform/logged-in/') diff --git a/src/backend/InvenTree/web/tests.py b/src/backend/InvenTree/web/tests.py index 4603f25ded..72d5f5d402 100644 --- a/src/backend/InvenTree/web/tests.py +++ b/src/backend/InvenTree/web/tests.py @@ -5,10 +5,8 @@ import os from pathlib import Path from unittest import mock -from django.urls import reverse - from InvenTree.config import get_frontend_settings -from InvenTree.unit_test import InvenTreeAPITestCase, InvenTreeTestCase +from InvenTree.unit_test import InvenTreeTestCase from .templatetags import spa_helper @@ -92,26 +90,3 @@ class TemplateTagTest(InvenTreeTestCase): """Test the redirect helper.""" response = self.client.get('/assets/testpath') self.assertEqual(response.url, '/static/web/assets/testpath') - - -class TestWebHelpers(InvenTreeAPITestCase): - """Tests for the web helpers.""" - - def test_ui_preference(self): - """Test the UI preference API.""" - url = reverse('api-ui-preference') - - # Test default - resp = self.get(url) - data = json.loads(resp.content) - self.assertTrue(data['cui']) - self.assertFalse(data['pui']) - self.assertEqual(data['preferred_method'], 'cui') - - # Set to PUI - resp = self.put(url, {'preferred_method': 'pui'}) - data = json.loads(resp.content) - self.assertEqual(resp.status_code, 200) - self.assertFalse(data['cui']) - self.assertTrue(data['pui']) - self.assertEqual(data['preferred_method'], 'pui') diff --git a/src/backend/InvenTree/web/urls.py b/src/backend/InvenTree/web/urls.py index 6199abe264..208dd7d512 100644 --- a/src/backend/InvenTree/web/urls.py +++ b/src/backend/InvenTree/web/urls.py @@ -1,16 +1,11 @@ """URLs for web app.""" from django.conf import settings -from django.http import JsonResponse from django.shortcuts import redirect from django.urls import include, path, re_path from django.views.decorators.csrf import ensure_csrf_cookie from django.views.generic import TemplateView -from rest_framework import permissions, serializers - -from InvenTree.mixins import RetrieveUpdateAPI - class RedirectAssetView(TemplateView): """View to redirect to static asset.""" @@ -22,55 +17,6 @@ class RedirectAssetView(TemplateView): ) -class PreferredSerializer(serializers.Serializer): - """Serializer for the preferred serializer session setting.""" - - preferred_method = serializers.ChoiceField(choices=['cui', 'pui']) - pui = serializers.SerializerMethodField(read_only=True) - cui = serializers.SerializerMethodField(read_only=True) - - def get_pui(self, obj) -> bool: - """Return true if preferred method is PUI.""" - return obj['preferred_method'] == 'pui' - - def get_cui(self, obj) -> bool: - """Return true if preferred method is CUI.""" - return obj['preferred_method'] == 'cui' - - class Meta: - """Meta class for PreferedSerializer.""" - - fields = '__all__' - - -class PreferredUiView(RetrieveUpdateAPI): - """Set preferred UI (CIU/PUI).""" - - permission_classes = [permissions.AllowAny] - serializer_class = PreferredSerializer - http_method_names = ['get', 'post', 'put', 'head', 'options'] - - def retrieve(self, request, *args, **kwargs): - """Retrieve the preferred UI method.""" - session = self.request.session - session['preferred_method'] = session.get('preferred_method', 'cui') - serializer = self.get_serializer(data=dict(session)) - serializer.is_valid(raise_exception=True) - return JsonResponse(serializer.data) - - def update(self, request, *args, **kwargs): - """Update the preferred UI method.""" - serializer = self.get_serializer(data=self.clean_data(request.data)) - serializer.is_valid(raise_exception=True) - - # Run update - session = self.request.session - session['preferred_method'] = serializer.validated_data['preferred_method'] - session.modified = True - - return JsonResponse(serializer.data) - - spa_view = ensure_csrf_cookie(TemplateView.as_view(template_name='web/index.html')) assets_path = path('assets/', RedirectAssetView.as_view()) @@ -91,8 +37,3 @@ urlpatterns = [ assets_path, path(settings.FRONTEND_URL_BASE, spa_view, name='platform'), ] - -api_urls = [ - # UI Preference - path('ui_preference/', PreferredUiView.as_view(), name='api-ui-preference') -] diff --git a/src/frontend/src/components/buttons/SSOButton.tsx b/src/frontend/src/components/buttons/SSOButton.tsx index fc136768f7..2ae4da60c5 100644 --- a/src/frontend/src/components/buttons/SSOButton.tsx +++ b/src/frontend/src/components/buttons/SSOButton.tsx @@ -15,10 +15,6 @@ import { } from '@tabler/icons-react'; import { t } from '@lingui/macro'; -import { showNotification } from '@mantine/notifications'; -import { api } from '../../App'; -import { ApiEndpoints } from '../../enums/ApiEndpoints'; -import { apiUrl } from '../../states/ApiState'; import type { Provider } from '../../states/states'; const brandIcons: { [key: string]: JSX.Element } = { @@ -37,24 +33,7 @@ const brandIcons: { [key: string]: JSX.Element } = { export function SsoButton({ provider }: Readonly<{ provider: Provider }>) { function login() { - // set preferred provider - api - .put( - apiUrl(ApiEndpoints.ui_preference), - { preferred_method: 'pui' }, - { headers: { Authorization: '' } } - ) - .then(() => { - // redirect to login - window.location.href = provider.login; - }) - .catch(() => { - showNotification({ - title: t`Error`, - message: t`Sign in redirect failed.`, - color: 'red' - }); - }); + window.location.href = provider.login; } return ( diff --git a/src/frontend/src/enums/ApiEndpoints.tsx b/src/frontend/src/enums/ApiEndpoints.tsx index 8c0ec8fe38..3f3e2712cc 100644 --- a/src/frontend/src/enums/ApiEndpoints.tsx +++ b/src/frontend/src/enums/ApiEndpoints.tsx @@ -221,6 +221,5 @@ export enum ApiEndpoints { error_report_list = 'error-report/', project_code_list = 'project-code/', custom_unit_list = 'units/', - ui_preference = 'web/ui_preference/', notes_image_upload = 'notes-image-upload/' }