diff --git a/server/api/admin.js b/server/api/admin.js
index cb7044f..269a940 100644
--- a/server/api/admin.js
+++ b/server/api/admin.js
@@ -30,7 +30,7 @@ async function listTimetables(_, res) {
source: true,
trusted: true,
},
- })
+ }),
);
}
diff --git a/server/api/auth.js b/server/api/auth.js
index 9e3dccc..b0d72aa 100644
--- a/server/api/auth.js
+++ b/server/api/auth.js
@@ -140,16 +140,19 @@ export default {
};
// Clean up expired sessions every hour
-setInterval(async () => {
- const sessions = await prisma.session.findMany();
- for (const session of sessions) {
- if (session.validUntil < new Date()) {
- log("API / Auth", `Removed expired session: ${session.token}`);
- await prisma.session.delete({
- where: {
- token: session.token,
- },
- });
+setInterval(
+ async () => {
+ const sessions = await prisma.session.findMany();
+ for (const session of sessions) {
+ if (session.validUntil < new Date()) {
+ log("API / Auth", `Removed expired session: ${session.token}`);
+ await prisma.session.delete({
+ where: {
+ token: session.token,
+ },
+ });
+ }
}
- }
-}, 1000 * 60 * 60);
+ },
+ 1000 * 60 * 60,
+);
diff --git a/server/api/permission.js b/server/api/permission.js
index 9f4692c..b801f9b 100644
--- a/server/api/permission.js
+++ b/server/api/permission.js
@@ -87,21 +87,24 @@ export async function revokeKey(sessionToken, key) {
}
// Clean up expired keys every hour
-setInterval(async () => {
- const keys = await prisma.key.findMany();
- for (const key of keys) {
- if (key.validUntil && key.validUntil < new Date()) {
- log(
- "API / Permissions",
- `Removed expired key: ${key.key}; Permissions: ${key.permissions.join(
- ", "
- )}`
- );
- await prisma.key.delete({
- where: {
- key: key.key,
- },
- });
+setInterval(
+ async () => {
+ const keys = await prisma.key.findMany();
+ for (const key of keys) {
+ if (key.validUntil && key.validUntil < new Date()) {
+ log(
+ "API / Permissions",
+ `Removed expired key: ${key.key}; Permissions: ${key.permissions.join(
+ ", ",
+ )}`,
+ );
+ await prisma.key.delete({
+ where: {
+ key: key.key,
+ },
+ });
+ }
}
- }
-}, 1000 * 60 * 60);
+ },
+ 1000 * 60 * 60,
+);
diff --git a/server/index.js b/server/index.js
index ed08d1d..412ab44 100644
--- a/server/index.js
+++ b/server/index.js
@@ -44,10 +44,10 @@ new Parser(
new BolleClient(
process.env.BOLLE_URL,
process.env.BOLLE_USER,
- process.env.BOLLE_KEY
+ process.env.BOLLE_KEY,
),
parseSubstitutionPlan,
- process.env.UPDATE_INTERVAL || 1 * 60 * 1000 // Default to 1 minute
+ process.env.UPDATE_INTERVAL || 1 * 60 * 1000, // Default to 1 minute
);
// Create new Auth class to store sessions
diff --git a/server/parser/dsbmobile.js b/server/parser/dsbmobile.js
index 99e7fe7..13a8426 100644
--- a/server/parser/dsbmobile.js
+++ b/server/parser/dsbmobile.js
@@ -5,7 +5,7 @@ const baseUrl = "https://mobileapi.dsbcontrol.de";
export async function getAuthtoken(username, password) {
const response = await axios.get(
- `${baseUrl}/authid?user=${username}&password=${password}&bundleid&appversion&osversion&pushid`
+ `${baseUrl}/authid?user=${username}&password=${password}&bundleid&appversion&osversion&pushid`,
);
if (response.data == "") throw "Wrong DSB username or password";
return response.data;
@@ -13,7 +13,7 @@ export async function getAuthtoken(username, password) {
export async function getTimetables(authtoken) {
const response = await axios.get(
- `${baseUrl}/dsbtimetables?authid=${authtoken}`
+ `${baseUrl}/dsbtimetables?authid=${authtoken}`,
);
const timetables = response.data;
diff --git a/server/parser/index.js b/server/parser/index.js
index b4766a4..8fd1e9d 100644
--- a/server/parser/index.js
+++ b/server/parser/index.js
@@ -105,7 +105,7 @@ export class Parser {
substitution.class.sort().join(",") &&
substitution.changedSubject == change.subject &&
substitution.teacher == (change.teacher || "");
- }
+ },
);
const matchingSubstitution = knownSubstitutions[matchingSubstitutionId];
@@ -148,7 +148,7 @@ export class Parser {
});
log(
"Insert / DB",
- `Created new substitution: S:${newSubstitution.id} C:${substitutionChange.id}`
+ `Created new substitution: S:${newSubstitution.id} C:${substitutionChange.id}`,
);
} else {
// If the entry was updated, find the differences
@@ -178,7 +178,7 @@ export class Parser {
});
log(
"Insert / DB",
- `Found changed substitution: S:${matchingSubstitution.id} C:${substitutionChange.id}`
+ `Found changed substitution: S:${matchingSubstitution.id} C:${substitutionChange.id}`,
);
}
// Remove the substitution from the array to later know the
@@ -219,7 +219,7 @@ export class Parser {
});
log(
"Insert / DB",
- `Deleted removed substitution: S:${remainingSubstitution.id} C:${substitutionChange.id}`
+ `Deleted removed substitution: S:${remainingSubstitution.id} C:${substitutionChange.id}`,
);
}
}
diff --git a/src/App.vue b/src/App.vue
index 46d4c85..483178b 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -22,7 +22,7 @@ const colorSchemeMedia = window.matchMedia("(prefers-color-scheme: dark)");
autoTheme.value = autoThemes[colorSchemeMedia.matches];
colorSchemeMedia.addEventListener(
"change",
- (e) => (autoTheme.value = autoThemes[e.matches])
+ (e) => (autoTheme.value = autoThemes[e.matches]),
);
const route = useRoute();
diff --git a/src/components/history-list.vue b/src/components/history-list.vue
index d3dc2ca..112df05 100644
--- a/src/components/history-list.vue
+++ b/src/components/history-list.vue
@@ -68,7 +68,7 @@ const chars = {
$t(
getSubstitutionText(
event.change,
- !classFilter || classFilter == "none"
+ !classFilter || classFilter == "none",
),
{
subject: event.change.change.subject,
@@ -76,7 +76,7 @@ const chars = {
teacher: event.change.teacher,
new_teacher: event.change.change.teacher,
room: event.change.change.room,
- }
+ },
)
}}
{{ $t("timetable.notes") }} {{ event.change.notes }}
diff --git a/src/components/lesson-card.vue b/src/components/lesson-card.vue
index 29c87b2..bffc0f4 100644
--- a/src/components/lesson-card.vue
+++ b/src/components/lesson-card.vue
@@ -15,7 +15,7 @@ watch(
() => props.lesson,
(value) => {
if (!props.edit) lesson.value = value;
- }
+ },
);
const subjectElement = ref();
diff --git a/src/components/loading-element.vue b/src/components/loading-element.vue
index 0dd8e56..745fbcd 100644
--- a/src/components/loading-element.vue
+++ b/src/components/loading-element.vue
@@ -23,7 +23,7 @@ watch(
() => props.progress,
() => {
if (visible.value) computedProgress.value = props.progress;
- }
+ },
);
watch(
() => props.active,
@@ -44,7 +44,7 @@ watch(
}
}, 500);
}
- }
+ },
);
diff --git a/src/components/substitution-list.vue b/src/components/substitution-list.vue
index 33d878d..fb6ec94 100644
--- a/src/components/substitution-list.vue
+++ b/src/components/substitution-list.vue
@@ -49,7 +49,7 @@ const substitutionsForDate = computed(() => {
$t(
getSubstitutionText(
substitution,
- !classFilter || classFilter == "none"
+ !classFilter || classFilter == "none",
),
{
subject: substitution.change.subject,
@@ -57,7 +57,7 @@ const substitutionsForDate = computed(() => {
teacher: substitution.teacher,
new_teacher: substitution.change.teacher,
room: substitution.change.room,
- }
+ },
)
}}
diff --git a/src/components/timetable-list.vue b/src/components/timetable-list.vue
index 478f55e..0766af8 100644
--- a/src/components/timetable-list.vue
+++ b/src/components/timetable-list.vue
@@ -26,7 +26,7 @@ const linkedTimetable = computed(() => {
entryDay == props.date.getTime() &&
(entry.teacher == e.teacher || !entry.teacher || !e.teacher)
);
- }
+ },
);
return newElement;
});
diff --git a/src/store.js b/src/store.js
index 466a879..87b1880 100644
--- a/src/store.js
+++ b/src/store.js
@@ -12,10 +12,10 @@ export const loadingFailed = ref(false);
export const classFilter = ref(localStorage.getItem("classFilter") || "none");
export const timetableId = ref(localStorage.getItem("timetableId") || "none");
export const timetableGroups = ref(
- JSON.parse(localStorage.getItem("timetableGroups") || "[]")
+ JSON.parse(localStorage.getItem("timetableGroups") || "[]"),
);
export const localTimetables = ref(
- JSON.parse(localStorage.getItem("timetables")) || []
+ JSON.parse(localStorage.getItem("timetables")) || [],
);
export const theme = ref(localStorage.getItem("theme") || "auto");
@@ -32,14 +32,14 @@ watch(
(newValue) => {
localStorage.setItem("timetableGroups", JSON.stringify(newValue));
},
- { deep: true }
+ { deep: true },
);
watch(
localTimetables,
(newValue) => {
localStorage.setItem("timetables", JSON.stringify(newValue));
},
- { deep: true }
+ { deep: true },
);
watch(theme, (newValue) => {
localStorage.setItem("theme", newValue);
@@ -63,10 +63,10 @@ export const changeDate = ref(new Date());
/* Data store */
export const timetable = computed(() => {
const localTimetable = localTimetables.value.find(
- (e) => e.id == timetableId.value
+ (e) => e.id == timetableId.value,
);
const remoteTimetable = timetables.value.find(
- (e) => e.id == timetableId.value
+ (e) => e.id == timetableId.value,
);
return (
localTimetable || remoteTimetable || { trusted: true, source: "", data: [] }
@@ -124,7 +124,7 @@ export async function fetchData(days, partial) {
// Load new data if date changes
watch(selectedDate, () =>
- fetchData(getNextAndPrevDay(selectedDate.value), true)
+ fetchData(getNextAndPrevDay(selectedDate.value), true),
);
export async function fetchSessionInfo() {
@@ -154,7 +154,7 @@ export async function fetchClassList() {
export async function fetchTimetables() {
const timetableResponse = await fetch(
- `${baseUrl}/timetable?class=${classFilter.value}`
+ `${baseUrl}/timetable?class=${classFilter.value}`,
);
const timetableData = await timetableResponse.json();
if (timetableData.error) {
@@ -171,7 +171,7 @@ export async function fetchSubstitutions(day) {
const substitutionResponse = await fetch(
classFilter.value == "none"
? `${baseUrl}/substitutions${requestDate}`
- : `${baseUrl}/substitutions${requestDate}&class=${classFilter.value}`
+ : `${baseUrl}/substitutions${requestDate}&class=${classFilter.value}`,
);
const substitutionData = await substitutionResponse.json();
substitutions.value[day] = substitutionData;
@@ -182,7 +182,7 @@ export async function fetchHistory(day) {
const historyResponse = await fetch(
classFilter.value == "none"
? `${baseUrl}/history${requestDate}`
- : `${baseUrl}/history${requestDate}&class=${classFilter.value}`
+ : `${baseUrl}/history${requestDate}&class=${classFilter.value}`,
);
const historyData = await historyResponse.json();
if (historyData.error) console.warn("API Error: " + historyData.error);
@@ -201,7 +201,7 @@ export const parsedTimetable = computed(() => {
// (timetable groups)
if (Array.isArray(lesson) && lesson.length > 1) {
let matchingLesson = lesson.find((e) =>
- timetableGroups.value.includes(e.group)
+ timetableGroups.value.includes(e.group),
);
// If no valid timetable group is configured
// add a dummy lesson showing a notice
diff --git a/src/util.js b/src/util.js
index 1ccaa23..d1e45eb 100644
--- a/src/util.js
+++ b/src/util.js
@@ -33,7 +33,7 @@ export function getDateSkippingWeekend(date, onlyNext) {
// Go from sunday to last friday or next monday
if (date.getDay() == 0)
return new Date(
- onlyNext ? date.getTime() + 86400000 * 1 : date.getTime() - 86400000 * 2
+ onlyNext ? date.getTime() + 86400000 * 1 : date.getTime() - 86400000 * 2,
);
return date;
}
@@ -49,6 +49,6 @@ export function getNextAndPrevDay(date) {
export function setUTCMidnight(date) {
// Set the time to UTC midnight while keeping the correct date
return new Date(
- Date.UTC(date.getFullYear(), date.getMonth(), date.getDate())
+ Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()),
);
}
diff --git a/src/views/settings/AdminSettings.vue b/src/views/settings/AdminSettings.vue
index b3e9119..58dbee2 100644
--- a/src/views/settings/AdminSettings.vue
+++ b/src/views/settings/AdminSettings.vue
@@ -20,7 +20,7 @@ async function fetchObjects(type) {
async function deleteObject(type, id) {
const response = await fetch(
baseUrl + `/admin/${type}?id=${encodeURIComponent(id)}`,
- { method: "delete" }
+ { method: "delete" },
);
if (response.status != 200) alert("Delete failed!");
updateData();
@@ -47,7 +47,7 @@ async function updateObject(type, id, data) {
"Content-Type": "application/json",
},
body: JSON.stringify(data),
- }
+ },
);
if (response.status != 201) alert("Post failed!");
updateData();
diff --git a/src/views/settings/KeySettings.vue b/src/views/settings/KeySettings.vue
index eb9b650..78dd1ca 100644
--- a/src/views/settings/KeySettings.vue
+++ b/src/views/settings/KeySettings.vue
@@ -20,7 +20,7 @@ async function applyKey() {
baseUrl + "/key?key=" + encodeURIComponent(key.value),
{
method: "put",
- }
+ },
);
loadingProgress.value = 0.5;
if (result.status == 400) {
diff --git a/src/views/settings/TimetableEditor.vue b/src/views/settings/TimetableEditor.vue
index a86c251..e3b586e 100644
--- a/src/views/settings/TimetableEditor.vue
+++ b/src/views/settings/TimetableEditor.vue
@@ -11,7 +11,7 @@ import LessonGroupList from "@/components/lesson-group-list.vue";
const route = useRoute();
const timetable = localTimetables.value.find(
- (e) => e.id == route.params.id
+ (e) => e.id == route.params.id,
) || {
data: [],
};
@@ -97,7 +97,7 @@ const forceUpdate = ref(0);
arrayMove(
timetableClone.data[day - 1],
index,
- index - 1
+ index - 1,
);
} else if (
direction == 'down' &&
@@ -106,7 +106,7 @@ const forceUpdate = ref(0);
arrayMove(
timetableClone.data[day - 1],
index,
- index + 1
+ index + 1,
);
}
forceUpdate++;
diff --git a/src/views/settings/TimetableSettings.vue b/src/views/settings/TimetableSettings.vue
index 66b8bad..dcb9a9a 100644
--- a/src/views/settings/TimetableSettings.vue
+++ b/src/views/settings/TimetableSettings.vue
@@ -53,7 +53,7 @@ function exportTimetable(timetable) {
download(
JSON.stringify(timetable),
`timetable-${timetable.id}.json`,
- "application/json"
+ "application/json",
);
}
@@ -70,7 +70,7 @@ async function uploadTimetable(id) {
"Content-Type": "application/json",
},
body: JSON.stringify(timetableData),
- }
+ },
);
if (response.status != 201) {
@@ -103,7 +103,7 @@ async function uploadTimetable(id) {
@delete="
localTimetables.splice(
localTimetables.findIndex((e) => e.id == timetable.id),
- 1
+ 1,
)
"
@export="exportTimetable(timetable)"
diff --git a/vite.config.js b/vite.config.js
index 3a0512a..3686fa9 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -9,10 +9,10 @@ import * as child from "child_process";
export default defineConfig({
define: {
GITVERSION: JSON.stringify(
- child.execSync("git rev-parse --short HEAD").toString()
+ child.execSync("git rev-parse --short HEAD").toString(),
),
GITURL: JSON.stringify(
- child.execSync("git config --get remote.origin.url").toString()
+ child.execSync("git config --get remote.origin.url").toString(),
),
},
plugins: [