diff --git a/client/vite.config.ts b/client/vite.config.ts index 1bd01a2e..6fcf6971 100644 --- a/client/vite.config.ts +++ b/client/vite.config.ts @@ -30,13 +30,5 @@ export default ({mode}) => { '@': fileURLToPath(new URL('./src', import.meta.url)), }, }, - server: { - proxy: { - '^.*': process.env.VITE_PROXY_TARGET_BASE, - '/sso': process.env.VITE_PROXY_TARGET_BASE, - '/api': process.env.VITE_PROXY_TARGET_BASE, - '/todo': process.env.VITE_PROXY_TARGET_BASE, - } - }, }) } diff --git a/env_secrets/local_daniel.env b/env_secrets/local_daniel.env index d4a2197a..b0f76bee 100644 Binary files a/env_secrets/local_daniel.env and b/env_secrets/local_daniel.env differ diff --git a/server/config/settings/base.py b/server/config/settings/base.py index 05b64b2c..9894b2a7 100644 --- a/server/config/settings/base.py +++ b/server/config/settings/base.py @@ -201,6 +201,8 @@ MEDIA_ROOT = str(APPS_DIR / "media") # https://docs.djangoproject.com/en/dev/ref/settings/#media-url MEDIA_URL = "/media/" +IT_SERVE_VUE = env.bool("IT_SERVE_VUE", DEBUG) +IT_SERVE_VUE_URL = env("IT_SERVE_VUE_URL", 'http://localhost:3000') # WAGTAIL # ------------------------------------------------------------------------------ diff --git a/server/config/urls.py b/server/config/urls.py index 6ed1ab7a..ed2fa5ad 100644 --- a/server/config/urls.py +++ b/server/config/urls.py @@ -5,26 +5,25 @@ from django.contrib import admin from django.contrib.auth import views as auth_views from django.contrib.auth.decorators import user_passes_test from django.contrib.staticfiles.urls import staticfiles_urlpatterns -from django.urls import include, path +from django.urls import include, path, re_path from django.views import defaults as default_views -from django.views.generic import TemplateView from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView +from grapple import urls as grapple_urls from ratelimit.exceptions import Ratelimited from rest_framework.authtoken.views import obtain_auth_token +from wagtail.admin import urls as wagtailadmin_urls +from wagtail.core import urls as wagtail_urls +from wagtail.documents import urls as wagtaildocs_urls + from vbv_lernwelt.core.middleware.auth import django_view_authentication_exempt from vbv_lernwelt.core.views import ( rate_limit_exceeded_view, permission_denied_view, - check_rate_limit, + check_rate_limit, vue_home, ) -from wagtail.admin import urls as wagtailadmin_urls -from wagtail.core import urls as wagtail_urls -from wagtail.documents import urls as wagtaildocs_urls -from grapple import urls as grapple_urls from .api import api_router - def raise_example_error(request): """ raise error to check if it gets logged @@ -36,7 +35,6 @@ def raise_example_error(request): # fmt: off urlpatterns = [ - path("", django_view_authentication_exempt(TemplateView.as_view(template_name="pages/home.html")), name="home"), path('admin/raise_error/', user_passes_test(lambda u: u.is_superuser, login_url='/login/')(raise_example_error), ), path(settings.ADMIN_URL, admin.site.urls), path("checkratelimit/", check_rate_limit), @@ -106,3 +104,8 @@ if settings.DEBUG: import debug_toolbar urlpatterns = [path("__debug__/", include(debug_toolbar.urls))] + urlpatterns + + +# serve everything else via the vue app +urlpatterns += [re_path(r'^.*$', vue_home, name='home')] + diff --git a/server/vbv_lernwelt/core/views.py b/server/vbv_lernwelt/core/views.py index 69fe7e5c..5fe68853 100644 --- a/server/vbv_lernwelt/core/views.py +++ b/server/vbv_lernwelt/core/views.py @@ -1,11 +1,31 @@ # Create your views here. +import requests +from django.conf import settings from django.http import JsonResponse, HttpResponse from django.shortcuts import render +from django.views.decorators.csrf import ensure_csrf_cookie from ratelimit.decorators import ratelimit from vbv_lernwelt.core.middleware.auth import django_view_authentication_exempt +@django_view_authentication_exempt +@ensure_csrf_cookie +def vue_home(request): + if settings.IT_SERVE_VUE: + try: + res = requests.get(f'{settings.IT_SERVE_VUE_URL}{request.get_full_path()}') + headers = res.headers + content_type = headers.get('content-type', 'text/html') + return HttpResponse(res.text, content_type=content_type) + except Exception as e: + print(f'Can not connect to vue dev server at {settings.IT_SERVE_VUE_URL}:', e) + return + + # render index.html from `npm run build` + return render(request, 'index.html', {}) + + def permission_denied_view(request, exception): return render(request, "403.html", status=403) diff --git a/server/vbv_lernwelt/templates/pages/home.html b/server/vbv_lernwelt/templates/pages/home.html deleted file mode 100644 index 7095cd9d..00000000 --- a/server/vbv_lernwelt/templates/pages/home.html +++ /dev/null @@ -1,108 +0,0 @@ -{% extends "base.html" %} - - -{% block content %} -
- Hier steht noch etwas mehr Text
-weitere Kurse entdecken und buchen
- - -