from django.conf import settings from django.urls import path, re_path from django.views.static import serve from .views import ( APIKeyDeleteView, APIKeyGenerateView, APIKeyListView, CertificateIssuanceDetailView, CertificateIssuanceRegeneratePdfView, CertificateTemplatePreviewView, CertificateTypeCreateView, CertificateTypeDetailView, CertificateTypeListView, CreditVoucherCreateView, CreditVoucherDetailView, CreditVoucherListView, DashboardView, EventVoucherCreateView, EventVoucherDetailView, EventVoucherListView, ExamAttemptsView, ExamCreateView, ExamDeleteView, ExamDetailView, ExamListView, ExamQuestionCreateView, ExamQuestionDeleteView, ExamQuestionDetailView, ExamQuestionReorderView, ExamSectionCreateView, ExamSectionDeleteView, ExamSectionDetailView, ExamSectionReorderView, ExamVariantAttemptsView, ExamVariantCreateView, ExamVariantDeleteView, ExamVariantDetailView, ExamVoucherCreateView, ExamVoucherDetailView, ExamVoucherListView, ExitSudoView, GroupAddUserView, GroupCreateView, GroupDeleteView, GroupDetailView, GroupListView, GroupRemoveUserView, LabFeedbackDetailView, LabFeedbackListView, LabInstanceDetailView, LabInstanceListView, LogoutView, OTPRecoveryView, OTPRegenerateRecoveryView, OTPSetupView, OTPVerifyView, SiteSettingListView, SiteSettingResetView, SiteSettingUpdateView, UserDetailView, UserJsonSearchView, UserListView, UserWrangledDetailView, UserWrangledListView, ) app_name = "labs_admin" urlpatterns = [ # TODO: use cdn instead of serving static files from the server re_path( r"^static/(?P.*)$", serve, {"document_root": settings.STATIC_ROOT}, ), # OTP authentication routes (must be before routes that require sudo) path("otp/setup/", OTPSetupView.as_view(), name="otp_setup"), path("otp/verify/", OTPVerifyView.as_view(), name="otp_verify"), path("otp/recovery/", OTPRecoveryView.as_view(), name="otp_recovery"), path( "otp/regenerate-recovery/", OTPRegenerateRecoveryView.as_view(), name="otp_regenerate_recovery", ), # Session management path("exit-sudo/", ExitSudoView.as_view(), name="exit_sudo"), path("logout/", LogoutView.as_view(), name="logout"), # Main admin routes path("", DashboardView.as_view(), name="dashboard"), # Certificates path("certificates/", CertificateTypeListView.as_view(), name="certificates"), path( "certificates/create/", CertificateTypeCreateView.as_view(), name="certificates_create", ), path( "certificates//", CertificateTypeDetailView.as_view(), name="certificates_detail", ), path( "api/certificates/template-preview/", CertificateTemplatePreviewView.as_view(), name="certificates_template_preview", ), path( "certificate-issuances//", CertificateIssuanceDetailView.as_view(), name="certificate_issuances_detail", ), path( "certificate-issuances//regenerate-pdf/", CertificateIssuanceRegeneratePdfView.as_view(), name="certificate_issuances_regenerate_pdf", ), # API Keys path("api-keys/", APIKeyListView.as_view(), name="api_keys"), path("api-keys/generate/", APIKeyGenerateView.as_view(), name="api_keys_generate"), path( "api-keys//delete/", APIKeyDeleteView.as_view(), name="api_keys_delete", ), # Users path("api/users/search/", UserJsonSearchView.as_view(), name="users_json_search"), path("users/", UserListView.as_view(), name="users"), path("users//", UserDetailView.as_view(), name="users_detail"), # UserWrangled path("user-wrangled/", UserWrangledListView.as_view(), name="user_wrangled"), path( "user-wrangled//", UserWrangledDetailView.as_view(), name="user_wrangled_detail", ), # Groups path("groups/", GroupListView.as_view(), name="groups"), path("groups/create/", GroupCreateView.as_view(), name="groups_create"), path("groups//", GroupDetailView.as_view(), name="groups_detail"), path("groups//delete/", GroupDeleteView.as_view(), name="groups_delete"), path( "groups//add_user/", GroupAddUserView.as_view(), name="groups_add_user" ), path( "groups//remove_user/", GroupRemoveUserView.as_view(), name="groups_remove_user", ), path("event-vouchers/", EventVoucherListView.as_view(), name="event_vouchers"), path( "event-vouchers/create/", EventVoucherCreateView.as_view(), name="event_vouchers_create", ), path( "event-vouchers//", EventVoucherDetailView.as_view(), name="event_vouchers_detail", ), path("credit-vouchers/", CreditVoucherListView.as_view(), name="credit_vouchers"), path( "credit-vouchers/create/", CreditVoucherCreateView.as_view(), name="credit_vouchers_create", ), path( "credit-vouchers//", CreditVoucherDetailView.as_view(), name="credit_vouchers_detail", ), path("exam-vouchers/", ExamVoucherListView.as_view(), name="exam_vouchers"), path( "exam-vouchers/create/", ExamVoucherCreateView.as_view(), name="exam_vouchers_create", ), path( "exam-vouchers//", ExamVoucherDetailView.as_view(), name="exam_vouchers_detail", ), path("lab-instances/", LabInstanceListView.as_view(), name="lab_instances"), path( "lab-instances//", LabInstanceDetailView.as_view(), name="lab_instances_detail", ), path("lab-feedbacks/", LabFeedbackListView.as_view(), name="lab_feedbacks"), path( "lab-feedbacks//", LabFeedbackDetailView.as_view(), name="lab_feedbacks_detail", ), # Exams path("exams/", ExamListView.as_view(), name="exams"), path("exams/create/", ExamCreateView.as_view(), name="exams_create"), path("exams//", ExamDetailView.as_view(), name="exams_detail"), path("exams//delete/", ExamDeleteView.as_view(), name="exams_delete"), # Exam Attempts (nested under exam) path( "exams//attempts/", ExamAttemptsView.as_view(), name="exams_attempts", ), # Exam Variants (nested under exam) path( "exams//variants/create/", ExamVariantCreateView.as_view(), name="exams_variants_create", ), path( "exams//variants//", ExamVariantDetailView.as_view(), name="exams_variants_detail", ), path( "exams//variants//delete/", ExamVariantDeleteView.as_view(), name="exams_variants_delete", ), # Variant Attempts (nested under variant) path( "exams//variants//attempts/", ExamVariantAttemptsView.as_view(), name="exams_variants_attempts", ), # Exam Sections (nested under variant) path( "exams//variants//sections/create/", ExamSectionCreateView.as_view(), name="exams_sections_create", ), path( "exams//variants//sections/reorder/", ExamSectionReorderView.as_view(), name="exams_sections_reorder", ), path( "exams//variants//sections//", ExamSectionDetailView.as_view(), name="exams_sections_detail", ), path( "exams//variants//sections//delete/", ExamSectionDeleteView.as_view(), name="exams_sections_delete", ), # Exam Questions (nested under section) path( "exams//variants//sections//questions/create/", ExamQuestionCreateView.as_view(), name="exams_questions_create", ), path( "exams//variants//sections//questions/reorder/", ExamQuestionReorderView.as_view(), name="exams_questions_reorder", ), path( "exams//variants//sections//questions//", ExamQuestionDetailView.as_view(), name="exams_questions_detail", ), path( "exams//variants//sections//questions//delete/", ExamQuestionDeleteView.as_view(), name="exams_questions_delete", ), # Site Settings path("site-settings/", SiteSettingListView.as_view(), name="site_settings"), path( "site-settings//reset/", SiteSettingResetView.as_view(), name="site_settings_reset", ), path( "site-settings//", SiteSettingUpdateView.as_view(), name="site_settings_update", ), ]