from django.conf import settings from django.conf.urls.static import static from django.contrib import admin from django.contrib.auth.decorators import user_passes_test from django.contrib.staticfiles.urls import staticfiles_urlpatterns from django.urls import include, path, re_path from django.views import defaults as default_views from grapple import urls as grapple_urls from ratelimit.exceptions import Ratelimited from vbv_lernwelt.core.middleware.auth import django_view_authentication_exempt from vbv_lernwelt.core.views import ( check_rate_limit, cypress_reset_view, generate_web_component_icons, me_user_view, permission_denied_view, rate_limit_exceeded_view, vue_home, vue_login, vue_logout, ) from vbv_lernwelt.course.views import ( course_page_api_view, document_delete, document_direct_upload, document_upload_finish, document_upload_start, get_course_session_users, get_course_sessions, mark_course_completion_view, request_course_completion, request_course_completion_for_user, ) from vbv_lernwelt.feedback.views import get_name from wagtail import urls as wagtail_urls from wagtail.admin import urls as wagtailadmin_urls from wagtail.documents import urls as wagtaildocs_urls def raise_example_error(request): """ raise error to check if it gets logged """ raise Exception("Test Error: I know python!") # pylint: disable=unreachable return HttpResponse("no error?") # fmt: off urlpatterns = [ path(settings.ADMIN_URL, admin.site.urls), # wagtail urls path('server/cms/', include(wagtailadmin_urls)), path('server/documents/', include(wagtaildocs_urls)), path('server/pages/', include(wagtail_urls)), # user management path("sso/", include("vbv_lernwelt.sso.urls")), re_path(r'api/core/me/$', me_user_view, name='me_user_view'), re_path(r'api/core/login/$', django_view_authentication_exempt(vue_login), name='vue_login'), re_path(r'api/core/logout/$', vue_logout, name='vue_logout'), # core re_path(r"server/core/icons/$", generate_web_component_icons, name="generate_web_component_icons"), # course path(r"api/course/sessions/", get_course_sessions, name="get_course_sessions"), path(r"api/course/sessions//users/", get_course_session_users, name="get_course_session_users"), path(r"api/course/page//", course_page_api_view, name="course_page_api_view"), path(r"api/course/completion/mark/", mark_course_completion_view, name="mark_course_completion"), path(r"api/course/completion//", request_course_completion, name="request_course_completion"), path(r"api/course/completion///", request_course_completion_for_user, name="request_course_completion_for_user"), # test path(r'api/core/document/start/', document_upload_start, name='file_upload_start'), path(r'api/core/document//', document_delete, name='document_delete'), path(r'api/core/file/finish/', document_upload_finish, name='file_upload_finish'), path(r"api/core/document/local//", document_direct_upload, name='file_upload_local'), # testing and debug path('server/raise_error/', user_passes_test(lambda u: u.is_superuser, login_url='/login/')( raise_example_error), ), path("server/checkratelimit/", check_rate_limit), path("server/", include(grapple_urls)), path(r"your-name/", get_name) ] urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) if settings.DEBUG: # Static file serving when using Gunicorn + Uvicorn for local web socket development urlpatterns += staticfiles_urlpatterns() if settings.APP_ENVIRONMENT != 'production': urlpatterns += [ re_path(r'api/core/cypressreset/$', cypress_reset_view, name='cypress_reset_view'), ] # fmt: on def handler403(request, exception=None): if isinstance(exception, Ratelimited): # if request.path.startswith("/swisscom/customer"): # return SwisscomCustomerLandingPageErrorView.as_view()(request) return rate_limit_exceeded_view(request, exception) return permission_denied_view(request, exception) handler500 = "vbv_lernwelt.core.views.server_json_error" if settings.DEBUG: # This allows the error pages to be debugged during development, just visit # these url in browser to see how these error pages look like. urlpatterns += [ path( "400/", default_views.bad_request, kwargs={"exception": Exception("Bad Request!")}, ), path( "403/", default_views.permission_denied, kwargs={"exception": Exception("Permission Denied")}, ), path( "404/", default_views.page_not_found, kwargs={"exception": Exception("Page not Found")}, ), path("500/", default_views.server_error), ] if "debug_toolbar" in settings.INSTALLED_APPS: import debug_toolbar urlpatterns = [path("__debug__/", include(debug_toolbar.urls))] + urlpatterns # serve everything else via the vue app urlpatterns += [re_path(r"^(?!.*(server/|api/|sso/)).*$", vue_home, name="home")]