diff options
Diffstat (limited to 'Smarker/database.py')
-rw-r--r-- | Smarker/database.py | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/Smarker/database.py b/Smarker/database.py index 37a44db..a3f77af 100644 --- a/Smarker/database.py +++ b/Smarker/database.py @@ -1,5 +1,6 @@ from dataclasses import dataclass import pymysql +import secrets import yaml @dataclass @@ -54,7 +55,8 @@ class SmarkerDatabase: CREATE TABLE students( student_no VARCHAR(10) PRIMARY KEY NOT NULL, name TEXT NOT NULL, - email VARCHAR(50) NOT NULL + email VARCHAR(50) NOT NULL, + apikey VARCHAR(64) NOT NULL ); """) cursor.execute(""" @@ -175,8 +177,8 @@ class SmarkerDatabase: email (str): Student's email """ with self.__connection.cursor() as cursor: - cursor.execute("INSERT INTO students VALUES (%s, %s, %s);", - (student_id, name, email)) + cursor.execute("INSERT INTO students VALUES (%s, %s, %s, %s);", + (student_id, name, email, secrets.token_urlsafe(32))) self.__connection.commit() def add_submission(self, student_id, assessment_name, report_yaml, files): @@ -198,9 +200,9 @@ class SmarkerDatabase: cursor.execute(""" INSERT INTO submitted_files (submission_id, file_id, file_text) - VALUES (%s, (SELECT file_id FROM assessment_file WHERE file_name = %s), %s); + VALUES (%s, (SELECT file_id FROM assessment_file WHERE file_name = %s AND assessment_name = %s), %s); """, ( - submission_id, file_name, file_contents + submission_id, file_name, assessment_name, file_contents )) self.__connection.commit() @@ -240,6 +242,11 @@ class SmarkerDatabase: cursor.execute("SELECT file_name FROM assessment_file WHERE assessment_name = %s;", (assessment_name, )) return [i[0] for i in cursor.fetchall()] + def valid_apikey(self, key): + with self.__connection.cursor() as cursor: + cursor.execute("SELECT apikey FROM students WHERE apikey = %s", (key, )) + return key in [i[0] for i in cursor.fetchall()] + if __name__ == "__main__": with SmarkerDatabase(host = "vps.eda.gay", user="root", passwd=input("Input password: "), db="Smarker", port=3307) as db: # print(db.get_assessments_required_files("example")) |