From 0d011bdb264e3ea4fc84b8915b2136f9a3e5320f Mon Sep 17 00:00:00 2001 From: Mawoka Date: Tue, 29 Mar 2022 21:46:37 +0200 Subject: [PATCH] :sparkles: Added rudimentary image-support via imgur --- classquiz/db/models.py | 1 + classquiz/routers/quiz.py | 6 +++++ frontend/src/app.d.ts | 1 + frontend/src/lib/editor.svelte | 38 ++++++++++++++++++++++++++- frontend/src/lib/i18n/locales/de.json | 3 ++- frontend/src/lib/i18n/locales/en.json | 3 ++- frontend/src/lib/play/question.svelte | 3 +++ frontend/src/routes/play.svelte | 11 ++++++-- 8 files changed, 61 insertions(+), 5 deletions(-) diff --git a/classquiz/db/models.py b/classquiz/db/models.py index 48d18d1..4606127 100644 --- a/classquiz/db/models.py +++ b/classquiz/db/models.py @@ -52,6 +52,7 @@ class QuizQuestion(BaseModel): question: str time: str # in Secs answers: list[QuizAnswer] + image: str | None = None class QuizInput(BaseModel): diff --git a/classquiz/routers/quiz.py b/classquiz/routers/quiz.py index a08bfa7..8334052 100644 --- a/classquiz/routers/quiz.py +++ b/classquiz/routers/quiz.py @@ -6,6 +6,7 @@ from random import randint from classquiz.kahoot_importer.import_quiz import import_quiz from fastapi import APIRouter, Depends, HTTPException from fastapi.responses import JSONResponse +import re from classquiz.auth import get_current_user, get_current_user_optional from classquiz.config import redis @@ -16,6 +17,11 @@ router = APIRouter() @router.post("/create") async def create_quiz_lol(quiz_input: QuizInput, user: User = Depends(get_current_user)): + imgur_regex = r"^https://i\.imgur\.com\/.{7}.(jpg|png|gif)$" + for question in quiz_input.questions: + if question.image is not None: + if not re.match(imgur_regex, question.image): + raise HTTPException(status_code=400, detail="image url is not valid") quiz = Quiz(**quiz_input.dict(), user_id=user.id, id=uuid.uuid4()) await redis.delete("global_quiz_count") return await quiz.save() diff --git a/frontend/src/app.d.ts b/frontend/src/app.d.ts index 076d930..d0a69f9 100644 --- a/frontend/src/app.d.ts +++ b/frontend/src/app.d.ts @@ -27,6 +27,7 @@ export interface QuizData { export interface Question { time: string; question: string; + image?: string; answers: Answer[]; } diff --git a/frontend/src/lib/editor.svelte b/frontend/src/lib/editor.svelte index 3e73cf6..9dd09b1 100644 --- a/frontend/src/lib/editor.svelte +++ b/frontend/src/lib/editor.svelte @@ -13,6 +13,7 @@ interface Question { question: string; time: string; + image?: string; answers: Answer[]; } @@ -21,12 +22,15 @@ answer: string; } + export let data: Data; export let submit_button_text = 'Create'; + let imgur_links_valid = false; const empty_question: Question = { question: '', time: '20', + image: '', answers: [ { right: false, @@ -35,6 +39,21 @@ ] }; + const checkIfAllQuestionImagesComplyWithRegex = (questions: Array) => { + let NoteverythingValid = false; + const regex = /^https:\/\/i\.imgur\.com\/.{7}.(jpg|png|gif)$/; + for (let i = 0; i < questions.length; i++) { + const question = questions[i]; + if (question.image && !regex.test(question.image)) { + console.log('not valid'); + NoteverythingValid = true; + } + } + return NoteverythingValid; + }; + + $: imgur_links_valid = checkIfAllQuestionImagesComplyWithRegex(data.questions); + const empty_answer: Answer = { right: false, answer: '' @@ -69,6 +88,17 @@ class='text-black w-3/5 bg-inherit border-dotted border-b-2 border-black' /> + +