├── frontend ├── src │ ├── lib │ │ ├── Excercises │ │ │ ├── StatusBarCreation.svelte │ │ │ ├── ProgrammingExercise │ │ │ │ ├── create │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── ParametersCard.svelte │ │ │ │ │ ├── TestCaseDialog.svelte │ │ │ │ │ └── ParameterDialog.svelte │ │ │ │ ├── OutputCard.svelte │ │ │ │ ├── types.ts │ │ │ │ ├── CodingCard.svelte │ │ │ │ └── ProgrammingExercise.svelte │ │ │ ├── GapTextExercise │ │ │ │ ├── types.ts │ │ │ │ ├── BlanksCard.svelte │ │ │ │ └── GapTextExercise.svelte │ │ │ ├── ParsonsPuzzleExercise │ │ │ │ ├── types.ts │ │ │ │ ├── PuzzleCard.svelte │ │ │ │ ├── horizontalList.svelte │ │ │ │ └── ParsonsPuzzleExercise.svelte │ │ │ ├── ExitDialog.svelte │ │ │ ├── TaskCard.svelte │ │ │ ├── ExerciseRouter.svelte │ │ │ ├── TaskCardCreation.svelte │ │ │ ├── solution.ts │ │ │ ├── StatusBar.svelte │ │ │ ├── exercise.ts │ │ │ └── types.ts │ │ ├── AnimatedSVG │ │ │ ├── index.js │ │ │ ├── UserSVG.svelte │ │ │ ├── ExerciseSVG.svelte │ │ │ ├── SolutionsSVG.svelte │ │ │ ├── GroupSVG.svelte │ │ │ ├── PythonSVG.svelte │ │ │ └── JavaSVG.svelte │ │ ├── Authentication │ │ │ ├── _dialog.scss │ │ │ ├── types.ts │ │ │ ├── AuthDialog.svelte │ │ │ ├── PasswordInput.svelte │ │ │ ├── Login.svelte │ │ │ └── user.ts │ │ ├── Navbar │ │ │ ├── config.js │ │ │ ├── NavbarLink.svelte │ │ │ ├── Navbar.svelte │ │ │ └── AccountMenu.svelte │ │ ├── Common │ │ │ ├── Message │ │ │ │ ├── _snackbars.scss │ │ │ │ └── Message.svelte │ │ │ ├── types.ts │ │ │ ├── Page.svelte │ │ │ ├── UICard.svelte │ │ │ └── LanguageCard.svelte │ │ ├── Theming │ │ │ ├── types.ts │ │ │ ├── ThemeButton.svelte │ │ │ ├── ThemeSelector.svelte │ │ │ └── themes.ts │ │ ├── Footer │ │ │ └── Footer.svelte │ │ └── AcceptCookies │ │ │ └── AcceptCookies.svelte │ ├── static │ │ └── .gitignore │ ├── assets │ │ ├── 404-not-found.png │ │ ├── favicons │ │ │ ├── favicon.ico │ │ │ ├── favicon-128.png │ │ │ ├── mstile-70x70.png │ │ │ ├── favicon-16x16.png │ │ │ ├── favicon-196x196.png │ │ │ ├── favicon-32x32.png │ │ │ ├── favicon-96x96.png │ │ │ ├── mstile-144x144.png │ │ │ ├── mstile-150x150.png │ │ │ ├── mstile-310x150.png │ │ │ ├── mstile-310x310.png │ │ │ ├── apple-touch-icon-57x57.png │ │ │ ├── apple-touch-icon-60x60.png │ │ │ ├── apple-touch-icon-72x72.png │ │ │ ├── apple-touch-icon-76x76.png │ │ │ ├── apple-touch-icon-114x114.png │ │ │ ├── apple-touch-icon-120x120.png │ │ │ ├── apple-touch-icon-144x144.png │ │ │ └── apple-touch-icon-152x152.png │ │ ├── python.svg │ │ ├── svelte.svg │ │ ├── logo_small.svg │ │ ├── logo_main.svg │ │ └── java.svg │ ├── main.js │ ├── pages │ │ ├── admin │ │ │ ├── user-profile │ │ │ │ └── [userID].svelte │ │ │ ├── _reset.svelte │ │ │ └── add_user.svelte │ │ ├── exercises │ │ │ ├── [exerciseID].svelte │ │ │ ├── _reset.svelte │ │ │ └── create │ │ │ │ ├── _reset.svelte │ │ │ │ ├── programming.svelte │ │ │ │ └── parsonspuzzle.svelte │ │ ├── _layout.svelte │ │ ├── user │ │ │ └── _reset.svelte │ │ ├── _fallback.svelte │ │ └── index.svelte │ ├── stores.ts │ ├── custom_styles │ │ └── scrollbar.css │ ├── _variables.scss │ ├── themes │ │ ├── _smui-theme.scss │ │ └── dark │ │ │ └── _smui-theme.scss │ └── App.svelte ├── vite.config.js ├── jsconfig.json ├── README.md ├── package.json └── index.html ├── mimeTypesFix.reg ├── docs ├── assets │ ├── logo.png │ └── favicon.ico ├── milestones │ ├── design │ │ └── design.pdf │ ├── final │ │ ├── final.pdf │ │ └── final.md │ ├── testing │ │ └── testing.pdf │ └── requirements │ │ ├── requirements.pdf │ │ ├── login.md │ │ ├── evaluation.md │ │ ├── exercises.md │ │ └── administration.md ├── manuals │ ├── users.md │ └── administrators.md ├── stylesheets │ └── extra.css ├── index.md ├── api │ ├── logout.md │ ├── login.md │ └── config.md ├── installation.md └── meetings │ ├── SE-PM3.md │ ├── SE-PM1.md │ ├── SE-PM2.md │ └── SE-PM4.md ├── run.sh ├── run.bat ├── requirements.txt ├── backend ├── lib │ ├── evaluator │ │ ├── sandboxes │ │ │ ├── javaenv │ │ │ │ ├── javaSandbox03.jar │ │ │ │ ├── py4j0.10.9.7.jar │ │ │ │ ├── sandbox_env │ │ │ │ │ ├── JavaSandbox.class │ │ │ │ │ ├── JavaSandbox$1.class │ │ │ │ │ └── SandboxEntryPoint.class │ │ │ │ ├── README_JAVA_SANDBOX.md │ │ │ │ ├── SandboxEntryPoint.java │ │ │ │ ├── JavaSandbox.java │ │ │ │ └── javasandbox.py │ │ │ └── __init__.py │ │ └── __init__.py │ ├── __init__.py │ ├── core │ │ ├── __init__.py │ │ └── config.py │ ├── interfaces │ │ └── __init__.py │ └── routes │ │ ├── __init__.py │ │ ├── logout.py │ │ └── login.py └── __init__.py ├── setup.sh ├── .gitignore ├── .github └── workflows │ └── mkdocs-action.yml ├── .pre-commit-config.yaml ├── tests ├── __init__.py ├── test_javasandbox.py └── test_login.py ├── mkdocs.yml ├── README.md └── run.py /frontend/src/lib/Excercises/StatusBarCreation.svelte: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /mimeTypesFix.reg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/mimeTypesFix.reg -------------------------------------------------------------------------------- /docs/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/docs/assets/logo.png -------------------------------------------------------------------------------- /docs/assets/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/docs/assets/favicon.ico -------------------------------------------------------------------------------- /run.sh: -------------------------------------------------------------------------------- 1 | pushd frontend 2 | npm install 3 | npm run build 4 | popd 5 | ./run.py --host --testing --clean 6 | -------------------------------------------------------------------------------- /frontend/src/static/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore everything in this directory 2 | * 3 | # Except this file 4 | !.gitignore -------------------------------------------------------------------------------- /docs/milestones/design/design.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/docs/milestones/design/design.pdf -------------------------------------------------------------------------------- /docs/milestones/final/final.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/docs/milestones/final/final.pdf -------------------------------------------------------------------------------- /docs/milestones/testing/testing.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/docs/milestones/testing/testing.pdf -------------------------------------------------------------------------------- /frontend/src/assets/404-not-found.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/frontend/src/assets/404-not-found.png -------------------------------------------------------------------------------- /frontend/src/assets/favicons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/frontend/src/assets/favicons/favicon.ico -------------------------------------------------------------------------------- /run.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | pushd frontend 3 | call npm install 4 | call npm run build 5 | popd 6 | python run.py --host --clean --testing 7 | -------------------------------------------------------------------------------- /docs/milestones/requirements/requirements.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/docs/milestones/requirements/requirements.pdf -------------------------------------------------------------------------------- /frontend/src/assets/favicons/favicon-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/frontend/src/assets/favicons/favicon-128.png -------------------------------------------------------------------------------- /frontend/src/assets/favicons/mstile-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/frontend/src/assets/favicons/mstile-70x70.png -------------------------------------------------------------------------------- /frontend/src/assets/favicons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/frontend/src/assets/favicons/favicon-16x16.png -------------------------------------------------------------------------------- /frontend/src/assets/favicons/favicon-196x196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/frontend/src/assets/favicons/favicon-196x196.png -------------------------------------------------------------------------------- /frontend/src/assets/favicons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/frontend/src/assets/favicons/favicon-32x32.png -------------------------------------------------------------------------------- /frontend/src/assets/favicons/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/frontend/src/assets/favicons/favicon-96x96.png -------------------------------------------------------------------------------- /frontend/src/assets/favicons/mstile-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/frontend/src/assets/favicons/mstile-144x144.png -------------------------------------------------------------------------------- /frontend/src/assets/favicons/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/frontend/src/assets/favicons/mstile-150x150.png -------------------------------------------------------------------------------- /frontend/src/assets/favicons/mstile-310x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/frontend/src/assets/favicons/mstile-310x150.png -------------------------------------------------------------------------------- /frontend/src/assets/favicons/mstile-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/frontend/src/assets/favicons/mstile-310x310.png -------------------------------------------------------------------------------- /frontend/src/lib/Excercises/ProgrammingExercise/create/types.ts: -------------------------------------------------------------------------------- 1 | export type TestCase = { 2 | input: Array; 3 | output: Array; 4 | }; 5 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | flask 2 | flask_restful 3 | flask_sqlalchemy 4 | mkdocs 5 | PyJWT 6 | RestrictedPython 7 | py4j 8 | parameterized 9 | wrapt_timeout_decorator -------------------------------------------------------------------------------- /frontend/src/assets/favicons/apple-touch-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/frontend/src/assets/favicons/apple-touch-icon-57x57.png -------------------------------------------------------------------------------- /frontend/src/assets/favicons/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/frontend/src/assets/favicons/apple-touch-icon-60x60.png -------------------------------------------------------------------------------- /frontend/src/assets/favicons/apple-touch-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/frontend/src/assets/favicons/apple-touch-icon-72x72.png -------------------------------------------------------------------------------- /frontend/src/assets/favicons/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/frontend/src/assets/favicons/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /backend/lib/evaluator/sandboxes/javaenv/javaSandbox03.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/backend/lib/evaluator/sandboxes/javaenv/javaSandbox03.jar -------------------------------------------------------------------------------- /backend/lib/evaluator/sandboxes/javaenv/py4j0.10.9.7.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/backend/lib/evaluator/sandboxes/javaenv/py4j0.10.9.7.jar -------------------------------------------------------------------------------- /frontend/src/assets/favicons/apple-touch-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/frontend/src/assets/favicons/apple-touch-icon-114x114.png -------------------------------------------------------------------------------- /frontend/src/assets/favicons/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/frontend/src/assets/favicons/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /frontend/src/assets/favicons/apple-touch-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/frontend/src/assets/favicons/apple-touch-icon-144x144.png -------------------------------------------------------------------------------- /frontend/src/assets/favicons/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/frontend/src/assets/favicons/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /frontend/src/main.js: -------------------------------------------------------------------------------- 1 | import App from './App.svelte' 2 | 3 | const app = new App({ 4 | target: document.getElementById('app') 5 | }) 6 | 7 | export default app 8 | -------------------------------------------------------------------------------- /setup.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | # -*- coding: utf-8 -*- 3 | 4 | pushd frontend 5 | npm install 6 | popd 7 | code . 8 | pushd frontend 9 | npm run dev -- --open 10 | 11 | -------------------------------------------------------------------------------- /backend/lib/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | 4 | from .core import * 5 | from .evaluator import * 6 | from .interfaces import * 7 | from .routes import * 8 | -------------------------------------------------------------------------------- /backend/lib/evaluator/sandboxes/javaenv/sandbox_env/JavaSandbox.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/backend/lib/evaluator/sandboxes/javaenv/sandbox_env/JavaSandbox.class -------------------------------------------------------------------------------- /backend/lib/evaluator/sandboxes/javaenv/sandbox_env/JavaSandbox$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/backend/lib/evaluator/sandboxes/javaenv/sandbox_env/JavaSandbox$1.class -------------------------------------------------------------------------------- /backend/lib/evaluator/sandboxes/javaenv/sandbox_env/SandboxEntryPoint.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mlinke-ai/kev_in/HEAD/backend/lib/evaluator/sandboxes/javaenv/sandbox_env/SandboxEntryPoint.class -------------------------------------------------------------------------------- /docs/manuals/users.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Kev.in 3 | summary: A learning platform form programming beginners. 4 | authors: 5 | - Max Linke 6 | - and others 7 | date: 2022-11-26 8 | --- 9 | 10 | # User manual -------------------------------------------------------------------------------- /frontend/src/lib/Excercises/GapTextExercise/types.ts: -------------------------------------------------------------------------------- 1 | import { SolutionPost } from "../types"; 2 | 3 | export interface SolutionPostFillInBlanks extends SolutionPost { 4 | solution_content: { 5 | list: Array; 6 | }; 7 | } 8 | -------------------------------------------------------------------------------- /frontend/src/pages/admin/user-profile/[userID].svelte: -------------------------------------------------------------------------------- 1 | 8 | 9 | -------------------------------------------------------------------------------- /frontend/src/lib/AnimatedSVG/index.js: -------------------------------------------------------------------------------- 1 | export {default as JavaSvg} from "./JavaSVG.svelte" 2 | export {default as PythonSvg} from "./PythonSVG.svelte" 3 | export {default as GroupSvg} from "./GroupSVG.svelte" 4 | export {default as ExerciseSvg} from "./ExerciseSVG.svelte" 5 | 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # files: 2 | .coverage 3 | notes.md 4 | .coverage 5 | *.log 6 | 7 | # directories: 8 | __pycache__/ 9 | instance/ 10 | .vscode/ 11 | tex/ 12 | .idea/ 13 | wip/ 14 | 15 | frontend/.routify 16 | frontend/node_modules/ 17 | frontend/dist 18 | frontend/src/static/* 19 | -------------------------------------------------------------------------------- /frontend/src/lib/Authentication/_dialog.scss: -------------------------------------------------------------------------------- 1 | // enhance the looks of the default dialog scrim 2 | @use "@material/dialog/mixins"; 3 | 4 | .mdc-dialog.dialog { 5 | .mdc-dialog__scrim { 6 | background-color: rgba(0, 0, 0, 0.5); 7 | backdrop-filter: blur(5px); 8 | } 9 | } -------------------------------------------------------------------------------- /frontend/src/pages/exercises/[exerciseID].svelte: -------------------------------------------------------------------------------- 1 | 8 | 9 | -------------------------------------------------------------------------------- /frontend/src/stores.ts: -------------------------------------------------------------------------------- 1 | import { writable } from "svelte/store"; 2 | 3 | export const accessLevel = writable(-1); 4 | export const userID = writable(); 5 | export const userName = writable(""); 6 | export const userMail = writable(""); 7 | 8 | export const startPage = writable("#/") 9 | -------------------------------------------------------------------------------- /frontend/src/pages/_layout.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 |