From cd09073cd1f05e9a56597e7ec622b11db50b7d57 Mon Sep 17 00:00:00 2001
From: Mawoka
Date: Mon, 21 Nov 2022 17:09:43 +0100
Subject: [PATCH] :sparkles: Closing #172
---
classquiz/routers/editor.py | 13 +++++++++++--
frontend/src/lib/admin.svelte | 10 +++++-----
frontend/src/lib/collapsible.svelte | 2 +-
frontend/src/lib/dashboard/main_slider.svelte | 12 +++++++-----
frontend/src/lib/play/admin/voting_results.svelte | 2 +-
frontend/src/lib/play/question.svelte | 2 +-
frontend/src/lib/play/title.svelte | 4 ++--
frontend/src/lib/practice/question.svelte | 2 +-
frontend/src/lib/practice/title_screen.svelte | 4 ++--
frontend/src/lib/search-card.svelte | 11 +++--------
frontend/src/routes/search/+page.svelte | 2 +-
frontend/src/routes/view/[quiz_id]/+page.svelte | 6 +++---
12 files changed, 38 insertions(+), 32 deletions(-)
diff --git a/classquiz/routers/editor.py b/classquiz/routers/editor.py
index 26ffd87..deb6dc5 100644
--- a/classquiz/routers/editor.py
+++ b/classquiz/routers/editor.py
@@ -121,8 +121,8 @@ async def finish_edit(edit_id: str, quiz_input: QuizInput):
if session_data is None:
raise HTTPException(status_code=401, detail="Edit ID not found!")
session_data = EditSessionData.parse_raw(session_data)
- quiz_input.title = html.unescape(bleach.clean(quiz_input.title, tags=[], strip=True))
- quiz_input.description = html.unescape(bleach.clean(quiz_input.description, tags=[], strip=True))
+ quiz_input.title = html.unescape(bleach.clean(quiz_input.title, tags=bleach.ALLOWED_TAGS, strip=True))
+ quiz_input.description = html.unescape(bleach.clean(quiz_input.description, tags=bleach.ALLOWED_TAGS, strip=True))
if quiz_input.background_color is not None:
quiz_input.background_color = html.unescape(bleach.clean(quiz_input.background_color, tags=[], strip=True))
@@ -133,6 +133,12 @@ async def finish_edit(edit_id: str, quiz_input: QuizInput):
quiz_input.questions[i].answers[i2].color = html.unescape(
bleach.clean(answer.color, tags=[], strip=True)
)
+ if answer.answer == "":
+ quiz_input.questions[i].answers[i2].answer = None
+ if answer.answer is not None:
+ quiz_input.questions[i].answers[i2].answer = html.unescape(
+ bleach.clean(answer.answer, tags=bleach.ALLOWED_TAGS, strip=True)
+ )
image_id_regex = r"^.{36}--.{36}$"
imgur_regex = r"^https://i\.imgur\.com\/.{7}.(jpg|png|gif)$"
server_regex = rf"^{re.escape(settings.root_address)}/api/v1/storage/download/.{{36}}--.{{36}}$"
@@ -154,6 +160,9 @@ async def finish_edit(edit_id: str, quiz_input: QuizInput):
for i, question in enumerate(quiz_input.questions):
image = question.image
+ quiz_input.questions[i].question = html.unescape(
+ bleach.clean(quiz_input.questions[i].question, tags=bleach.ALLOWED_TAGS, strip=True)
+ )
if image == "":
question.image = None
mark_image_for_deletion(question.image, i, old_quiz_data)
diff --git a/frontend/src/lib/admin.svelte b/frontend/src/lib/admin.svelte
index 28bee0b..9956f79 100644
--- a/frontend/src/lib/admin.svelte
+++ b/frontend/src/lib/admin.svelte
@@ -111,7 +111,7 @@
{#if selected_question >= 0 && JSON.stringify(final_results) === JSON.stringify([null])}
-
{quiz_data.questions[selected_question].question}
+ {@html quiz_data.questions[selected_question].question}
{/if}
@@ -164,7 +164,7 @@
{#if timer_res !== undefined && !final_results_clicked && !question_results}
- {quiz_data.questions[selected_question].question}
+ {@html quiz_data.questions[selected_question].question}
@@ -278,7 +278,7 @@
on:click={() => {
set_question_number(selected_question + 1);
}}
- >{$t('admin_page.show_next_question')}: {get_question_title(
+ >{$t('admin_page.show_next_question')}: {@html get_question_title(
selected_question + 1,
quiz_data
)}
{:else}
-
{quiz_data.title}
-
{quiz_data.description}
+
{@html quiz_data.title}
+
{@html quiz_data.description}
{#if quiz_data.cover_image}
diff --git a/frontend/src/lib/collapsible.svelte b/frontend/src/lib/collapsible.svelte
index 6d4068e..c8b84d5 100644
--- a/frontend/src/lib/collapsible.svelte
+++ b/frontend/src/lib/collapsible.svelte
@@ -16,7 +16,7 @@
on:click={() => (expanded = !expanded)}
class="bg-white dark:bg-gray-700 flex justify-between w-full border-none m-0 p-2 rounded-t-lg hover:bg-gray-200 dark:hover:bg-gray-500 transition"
class:rounded-b-lg={!expanded}
- >{headerText}
+ >
{@html headerText}