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}
@@ -124,11 +124,11 @@ style="writing-mode: vertical-lr" class="text-center h-full text-xl p-2" > - {quiz.title} + {@html quiz.title}

- {quiz.description} + {@html quiz.description}

{#if quiz.cover_image}
- {quiz.title} + {@html quiz.title}

@@ -246,7 +246,9 @@ {#each quiz.questions as question}
-
{question.question}
+
+ {@html question.question} +
{#if question.image}
-

{answer}

+

{@html answer}

{/each}
diff --git a/frontend/src/lib/play/question.svelte b/frontend/src/lib/play/question.svelte index ac18b29..219ce56 100644 --- a/frontend/src/lib/play/question.svelte +++ b/frontend/src/lib/play/question.svelte @@ -100,7 +100,7 @@

- {question.question} + {@html question.question}

diff --git a/frontend/src/lib/play/title.svelte b/frontend/src/lib/play/title.svelte index 1eaed5f..abfbea4 100644 --- a/frontend/src/lib/play/title.svelte +++ b/frontend/src/lib/play/title.svelte @@ -10,8 +10,8 @@
-

{title}

-

{description}

+

{@html title}

+

{@html description}

{#if cover_image}
diff --git a/frontend/src/lib/practice/question.svelte b/frontend/src/lib/practice/question.svelte index c5001c9..425e35b 100644 --- a/frontend/src/lib/practice/question.svelte +++ b/frontend/src/lib/practice/question.svelte @@ -43,7 +43,7 @@
-

{question.question}

+

{@html question.question}

{#if question.image !== null}
- {data.title} + {@html data.title}

- {data.description} + {@html data.description}

diff --git a/frontend/src/lib/search-card.svelte b/frontend/src/lib/search-card.svelte index 8ba48d2..3dcda0b 100644 --- a/frontend/src/lib/search-card.svelte +++ b/frontend/src/lib/search-card.svelte @@ -8,7 +8,6 @@ const { t } = getLocalization(); export let quiz; - export let enable_html = false; import ImportedOrNot from '$lib/view_quiz/imported_or_not.svelte'; @@ -24,11 +23,7 @@

- {#if enable_html} - {@html quiz.title} - {:else} - {quiz.title} - {/if} + {@html quiz.title}

@@ -37,7 +32,7 @@

- {#if enable_html} {@html quiz.description}{:else}{quiz.description} {/if} + {@html quiz.description}

@@ -47,7 +42,7 @@ {:else} {$t('explore_page.made_by')} {/if} - {#if enable_html}{@html quiz.user}{:else}{quiz.user}{/if}
diff --git a/frontend/src/routes/search/+page.svelte b/frontend/src/routes/search/+page.svelte index 907781f..86a322d 100644 --- a/frontend/src/routes/search/+page.svelte +++ b/frontend/src/routes/search/+page.svelte @@ -82,7 +82,7 @@ {#if resp_data.hits.length !== 0}
{#each resp_data.hits as quiz} - + {/each}
{:else} diff --git a/frontend/src/routes/view/[quiz_id]/+page.svelte b/frontend/src/routes/view/[quiz_id]/+page.svelte index 5a0c39f..9e5505f 100644 --- a/frontend/src/routes/view/[quiz_id]/+page.svelte +++ b/frontend/src/routes/view/[quiz_id]/+page.svelte @@ -63,9 +63,9 @@
-

{quiz.title}

+

{@html quiz.title}

-

{quiz.description}

+

{@html quiz.description}

{#if quiz.cover_image}
@@ -118,7 +118,7 @@

- {index_question + 1}: {question.question} + {index_question + 1}: {@html question.question}