diff --git a/src/backend/InvenTree/InvenTree/api.py b/src/backend/InvenTree/InvenTree/api.py index 04ecbad05b..cf50368948 100644 --- a/src/backend/InvenTree/InvenTree/api.py +++ b/src/backend/InvenTree/InvenTree/api.py @@ -20,7 +20,10 @@ from rest_framework.views import APIView import InvenTree.version import users.models +from common.settings import get_global_setting +from InvenTree.auth_overrides import registration_enabled from InvenTree.mixins import ListCreateAPI +from InvenTree.sso import sso_registration_enabled from InvenTree.templatetags.inventree_extras import plugins_info from part.models import Part from plugin.serializers import MetadataSerializer @@ -198,6 +201,13 @@ class VersionTextView(ListAPI): class InfoApiSerializer(serializers.Serializer): """InvenTree server information - some information might be blanked if called without elevated credentials.""" + class SettingsSerializer(serializers.Serializer): + """Serializer for InfoApiSerializer.""" + + sso_registration = serializers.BooleanField() + registration_enabled = serializers.BooleanField() + password_forgotten_enabled = serializers.BooleanField() + server = serializers.CharField(read_only=True) version = serializers.CharField(read_only=True) instance = serializers.CharField(read_only=True) @@ -220,6 +230,7 @@ class InfoApiSerializer(serializers.Serializer): installer = serializers.CharField(read_only=True) target = serializers.CharField(read_only=True) django_admin = serializers.CharField(read_only=True) + settings = SettingsSerializer(read_only=True, many=False) class InfoView(APIView): @@ -272,6 +283,13 @@ class InfoView(APIView): 'django_admin': settings.INVENTREE_ADMIN_URL if (is_staff and settings.INVENTREE_ADMIN_ENABLED) else None, + 'settings': { + 'sso_registration': sso_registration_enabled(), + 'registration_enabled': registration_enabled(), + 'password_forgotten_enabled': get_global_setting( + 'LOGIN_ENABLE_PWD_FORGOT' + ), + }, } return JsonResponse(data) diff --git a/src/frontend/src/defaults/defaults.tsx b/src/frontend/src/defaults/defaults.tsx index 14227fb31e..e70c55be52 100644 --- a/src/frontend/src/defaults/defaults.tsx +++ b/src/frontend/src/defaults/defaults.tsx @@ -19,7 +19,8 @@ export const emptyServerAPI = { installer: null, target: null, default_locale: null, - django_admin: null + django_admin: null, + settings: null }; export interface SiteMarkProps { diff --git a/src/frontend/src/states/ApiState.tsx b/src/frontend/src/states/ApiState.tsx index 0df04318c6..bcbdd6c8e3 100644 --- a/src/frontend/src/states/ApiState.tsx +++ b/src/frontend/src/states/ApiState.tsx @@ -19,6 +19,13 @@ interface ServerApiStateProps { password_forgotten_enabled: () => boolean; } +function get_server_setting(val: any) { + if (val === null || val === undefined) { + return false; + } + return val; +} + export const useServerApiState = create()( persist( (set, get) => ({ @@ -58,16 +65,15 @@ export const useServerApiState = create()( return !(data === undefined || data.length == 0); }, registration_enabled: () => { - // TODO - return false; + return get_server_setting(get().server?.settings?.registration_enabled); }, sso_registration_enabled: () => { - // TODO - return false; + return get_server_setting(get().server?.settings?.sso_registration); }, password_forgotten_enabled: () => { - // TODO - return false; + return get_server_setting( + get().server?.settings?.password_forgotten_enabled + ); } }), { diff --git a/src/frontend/src/states/states.tsx b/src/frontend/src/states/states.tsx index ea632d95a5..fa24b578f3 100644 --- a/src/frontend/src/states/states.tsx +++ b/src/frontend/src/states/states.tsx @@ -48,6 +48,11 @@ export interface ServerAPIProps { target: null | string; default_locale: null | string; django_admin: null | string; + settings: { + sso_registration: null | boolean; + registration_enabled: null | boolean; + password_forgotten_enabled: null | boolean; + } | null; } export interface AuthContext {