From 5d8ef452654a6f0b1cf7616bd9a51658c6fa994f Mon Sep 17 00:00:00 2001 From: brausjonas Date: Tue, 9 May 2023 12:05:42 +0200 Subject: [PATCH] Documentation Backend --- backend/database.mv.db | Bin 36864 -> 36864 bytes backend/database.trace.db | 370 ++++++++++++++++++ .../backend/anwprj/DataBaseHandler.java | 25 +- .../example/backend/anwprj/Entries/Entry.java | 10 +- .../backend/anwprj/Semesters/Semester.java | 1 + .../example/backend/anwprj/Users/User.java | 1 + .../backend/anwprj/Users/UserPermissions.java | 1 + .../anwprj/Users/UserSessionIDHandler.java | 23 +- .../anwprj/controller/SemesterController.java | 17 +- .../anwprj/controller/UserController.java | 14 + 10 files changed, 450 insertions(+), 12 deletions(-) diff --git a/backend/database.mv.db b/backend/database.mv.db index a5d3de0811b850b518c53e537d75ce510a9c3122..5011f32cc872ae409dd6e34bd9a82c6be8aec556 100644 GIT binary patch literal 36864 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 Ds1C

(MVStore.java:461) + at org.h2.mvstore.MVStore$Builder.open(MVStore.java:4056) + at org.h2.mvstore.db.Store.(Store.java:129) + at org.h2.engine.Database.(Database.java:324) + at org.h2.engine.Engine.openSession(Engine.java:92) + at org.h2.engine.Engine.openSession(Engine.java:222) + at org.h2.engine.Engine.createSession(Engine.java:201) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:338) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:122) + at org.h2.Driver.connect(Driver.java:59) + at com.intellij.database.remote.jdbc.helpers.JdbcHelperImpl.connect(JdbcHelperImpl.java:670) + at com.intellij.database.remote.jdbc.impl.RemoteDriverImpl.connect(RemoteDriverImpl.java:64) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) + at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) + at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) + at java.base/java.security.AccessController.doPrivileged(AccessController.java:712) + at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) + at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705) + at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Allgemeiner Fehler: "org.h2.mvstore.MVStoreException: The file is locked: D:/DH/TIF22A_AnwProjekt_B/backend/database.mv.db [2.1.210/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: D:/DH/TIF22A_AnwProjekt_B/backend/database.mv.db [2.1.210/7]" [50000-210] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:573) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:496) + ... 34 more +Caused by: org.h2.mvstore.MVStoreException: The file is locked: D:/DH/TIF22A_AnwProjekt_B/backend/database.mv.db [2.1.210/7] + at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:1004) + at org.h2.mvstore.FileStore.open(FileStore.java:163) + at org.h2.mvstore.MVStore.(MVStore.java:444) + ... 28 more +2023-05-08 23:04:01 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1573) + at com.intellij.database.remote.jdbc.impl.RemoteConnectionImpl.setClientInfo(RemoteConnectionImpl.java:469) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) + at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) + at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) + at java.base/java.security.AccessController.doPrivileged(AccessController.java:712) + at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) + at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705) + at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +2023-05-08 23:21:46 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1573) + at com.intellij.database.remote.jdbc.impl.RemoteConnectionImpl.setClientInfo(RemoteConnectionImpl.java:469) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) + at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) + at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) + at java.base/java.security.AccessController.doPrivileged(AccessController.java:712) + at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) + at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705) + at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +2023-05-08 23:21:48 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1573) + at com.intellij.database.remote.jdbc.impl.RemoteConnectionImpl.setClientInfo(RemoteConnectionImpl.java:469) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) + at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) + at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) + at java.base/java.security.AccessController.doPrivileged(AccessController.java:712) + at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) + at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705) + at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +2023-05-08 23:22:42 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1573) + at com.intellij.database.remote.jdbc.impl.RemoteConnectionImpl.setClientInfo(RemoteConnectionImpl.java:469) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) + at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) + at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) + at java.base/java.security.AccessController.doPrivileged(AccessController.java:712) + at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) + at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705) + at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +2023-05-08 23:24:01 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1573) + at com.intellij.database.remote.jdbc.impl.RemoteConnectionImpl.setClientInfo(RemoteConnectionImpl.java:469) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) + at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) + at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) + at java.base/java.security.AccessController.doPrivileged(AccessController.java:712) + at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) + at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705) + at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +2023-05-08 23:24:05 jdbc[4]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1573) + at com.intellij.database.remote.jdbc.impl.RemoteConnectionImpl.setClientInfo(RemoteConnectionImpl.java:469) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) + at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) + at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) + at java.base/java.security.AccessController.doPrivileged(AccessController.java:712) + at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) + at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705) + at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +2023-05-08 23:24:06 jdbc[5]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1573) + at com.intellij.database.remote.jdbc.impl.RemoteConnectionImpl.setClientInfo(RemoteConnectionImpl.java:469) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) + at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) + at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) + at java.base/java.security.AccessController.doPrivileged(AccessController.java:712) + at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) + at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705) + at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +2023-05-08 23:24:08 jdbc[6]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1573) + at com.intellij.database.remote.jdbc.impl.RemoteConnectionImpl.setClientInfo(RemoteConnectionImpl.java:469) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) + at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) + at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) + at java.base/java.security.AccessController.doPrivileged(AccessController.java:712) + at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) + at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705) + at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +2023-05-08 23:24:10 jdbc[7]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1573) + at com.intellij.database.remote.jdbc.impl.RemoteConnectionImpl.setClientInfo(RemoteConnectionImpl.java:469) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) + at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) + at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) + at java.base/java.security.AccessController.doPrivileged(AccessController.java:712) + at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) + at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705) + at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) + at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) diff --git a/backend/src/main/java/com/example/backend/anwprj/DataBaseHandler.java b/backend/src/main/java/com/example/backend/anwprj/DataBaseHandler.java index 5b3e4ae..f88d40f 100644 --- a/backend/src/main/java/com/example/backend/anwprj/DataBaseHandler.java +++ b/backend/src/main/java/com/example/backend/anwprj/DataBaseHandler.java @@ -12,6 +12,7 @@ import java.util.List; public class DataBaseHandler { + //singleton instance of database handler private static DataBaseHandler instance = null; public static DataBaseHandler getInstance() @@ -24,13 +25,16 @@ public class DataBaseHandler return instance; } + //connection to the database private Connection connection; + //sql statement private Statement st; public DataBaseHandler() { try { + //connect to the local database connection = DriverManager.getConnection("jdbc:h2:./database", "adm", "73bgjfdsfJ!934"); st = connection.createStatement(); } catch (SQLException e) @@ -39,10 +43,12 @@ public class DataBaseHandler } } + //method that returns all entries of a day based on the given parameters public Entry[] getEntries(int dayinweek, int weeknumber, int semesterid, User user) { try { + //search the correct data in the database ResultSet rs = st.executeQuery("select distinct e.id, e.dayid, e.usercreatedbyid, e.timestart, e.timeend, e.info " + "from entries e, days d, weeks w, semester s " + "where e.dayid = d.id and " + @@ -53,15 +59,18 @@ public class DataBaseHandler "s.id = " + semesterid); - boolean editable = false; + int editable = 0; + //a temporary list to save entry objects in List temp = new ArrayList<>(); + //while there a still entries for the day while(rs.next()) { - editable = false; - if(rs.getInt("usercreatedbyid") == user.getId()) + editable = 0; + //if entry has been created by the requesting user set the entry to editable (or the user is admin) + if(rs.getInt("usercreatedbyid") == user.getId() || user.getPermissions() == 1) { - editable = true; + editable = 1; } temp.add( @@ -77,6 +86,7 @@ public class DataBaseHandler ); } + //return the temporary list as an array return temp.toArray(new Entry[0]); } catch (SQLException e) @@ -85,6 +95,7 @@ public class DataBaseHandler } } + //get a semester object by its name public Semester findSemester(String name) { try @@ -110,6 +121,7 @@ public class DataBaseHandler return null; } + //write a new semester to the database returns if process was successful public boolean addSemester(Semester s) { try @@ -124,6 +136,7 @@ public class DataBaseHandler } + //get a user object by mail and password from the database public User findUser(String mail, String password) { @@ -149,8 +162,10 @@ public class DataBaseHandler return null; } + //add a new user object to the database returns if process was successful public boolean addUser(User user) { + //check if mail and passwort (key user information) is given if (user.getMail() == null || user.getPassword() == null) { return false; @@ -158,7 +173,7 @@ public class DataBaseHandler try { - st.executeUpdate("insert into users (firstname, lastname, mail, password, permission) values (" + "'" + user.getFirstName() + "', '" + user.getLastName() + "', '" + user.getMail() + "', '" + user.getPassword() + "', " + user.getPermissions() + ")"); + st.executeUpdate("insert into users (firstname, lastname, mail, password, permission) values (" + "'" + user.getFirstName() + "', '" + user.getLastName() + "', '" + user.getMail() + "', '" + user.getPassword() + "', " + 0 + ")"); } catch (SQLException e) { e.printStackTrace(); diff --git a/backend/src/main/java/com/example/backend/anwprj/Entries/Entry.java b/backend/src/main/java/com/example/backend/anwprj/Entries/Entry.java index c140be4..0d6f568 100644 --- a/backend/src/main/java/com/example/backend/anwprj/Entries/Entry.java +++ b/backend/src/main/java/com/example/backend/anwprj/Entries/Entry.java @@ -1,5 +1,6 @@ package com.example.backend.anwprj.Entries; +//entry data class public class Entry { private int id; @@ -8,9 +9,9 @@ public class Entry private int timestart; private int timeend; private String info; - private boolean editable; + private int editable; - public Entry(int id, int dayid, int usercreatedbyid, int timestart, int timeend, String info, boolean editable) + public Entry(int id, int dayid, int usercreatedbyid, int timestart, int timeend, String info, int editable) { this.id = id; this.dayid = dayid; @@ -70,4 +71,9 @@ public class Entry { this.info = info; } + + public int getEditable() + { + return editable; + } } diff --git a/backend/src/main/java/com/example/backend/anwprj/Semesters/Semester.java b/backend/src/main/java/com/example/backend/anwprj/Semesters/Semester.java index d1291a7..b51c929 100644 --- a/backend/src/main/java/com/example/backend/anwprj/Semesters/Semester.java +++ b/backend/src/main/java/com/example/backend/anwprj/Semesters/Semester.java @@ -1,5 +1,6 @@ package com.example.backend.anwprj.Semesters; +//semester data class public class Semester { private int id; diff --git a/backend/src/main/java/com/example/backend/anwprj/Users/User.java b/backend/src/main/java/com/example/backend/anwprj/Users/User.java index 7f573db..8fa9a5c 100644 --- a/backend/src/main/java/com/example/backend/anwprj/Users/User.java +++ b/backend/src/main/java/com/example/backend/anwprj/Users/User.java @@ -1,5 +1,6 @@ package com.example.backend.anwprj.Users; +//user data class public class User { private int id; diff --git a/backend/src/main/java/com/example/backend/anwprj/Users/UserPermissions.java b/backend/src/main/java/com/example/backend/anwprj/Users/UserPermissions.java index 017fcab..bb97360 100644 --- a/backend/src/main/java/com/example/backend/anwprj/Users/UserPermissions.java +++ b/backend/src/main/java/com/example/backend/anwprj/Users/UserPermissions.java @@ -1,5 +1,6 @@ package com.example.backend.anwprj.Users; +//mapping of the integer rights to enum public enum UserPermissions { self(0), diff --git a/backend/src/main/java/com/example/backend/anwprj/Users/UserSessionIDHandler.java b/backend/src/main/java/com/example/backend/anwprj/Users/UserSessionIDHandler.java index 86ed1fd..8a74748 100644 --- a/backend/src/main/java/com/example/backend/anwprj/Users/UserSessionIDHandler.java +++ b/backend/src/main/java/com/example/backend/anwprj/Users/UserSessionIDHandler.java @@ -8,19 +8,37 @@ import java.util.Random; public class UserSessionIDHandler { + //stores mapping of session ids to users public static HashMap mapping = new HashMap<>(); + //returns a user object by its session id (ONLY FOR SERVER INTERNAL USE!) public static User getUserBySessionID(String sessionID) { return mapping.get(sessionID); } + public static boolean removeUser(String sessionID) + { + try + { + mapping.remove(sessionID); + return true; + } + catch(Exception e) + { + return false; + } + } + public static String addUser(String mail, String password) { + //try to get user from database User user = DataBaseHandler.getInstance().findUser(mail, password); + //if user exists if(user != null) { + //generate random session id based on ascii table byte[] id = new byte[100]; for(int i = 0; i < id.length; i++) @@ -31,6 +49,8 @@ public class UserSessionIDHandler String generatedString = new String(id, StandardCharsets.US_ASCII); mapping.put(generatedString, user); + + //makes user session expire after ca. 2h new java.util.Timer().schedule(new java.util.TimerTask(){ @Override @@ -39,8 +59,7 @@ public class UserSessionIDHandler mapping.remove(generatedString); return; } - //value to be higher - }, 5000000); + }, 7500000); return generatedString; } diff --git a/backend/src/main/java/com/example/backend/anwprj/controller/SemesterController.java b/backend/src/main/java/com/example/backend/anwprj/controller/SemesterController.java index 7ad218e..32b477c 100644 --- a/backend/src/main/java/com/example/backend/anwprj/controller/SemesterController.java +++ b/backend/src/main/java/com/example/backend/anwprj/controller/SemesterController.java @@ -2,6 +2,9 @@ package com.example.backend.anwprj.controller; import com.example.backend.anwprj.DataBaseHandler; import com.example.backend.anwprj.Semesters.Semester; +import com.example.backend.anwprj.Users.User; +import com.example.backend.anwprj.Users.UserPermissions; +import com.example.backend.anwprj.Users.UserSessionIDHandler; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -9,25 +12,33 @@ import org.springframework.web.bind.annotation.*; @RestController public class SemesterController { + //reference to the database handler private DataBaseHandler db; { db = DataBaseHandler.getInstance(); } + //a new semester add is requested (only allowed for admin users) @CrossOrigin @PostMapping("/semester") - public ResponseEntity addSemester(@RequestBody Semester semester) + public ResponseEntity addSemester(@RequestBody Semester semester, @RequestParam(name="sessionid") String sessionID) { - if(db.addSemester(semester)) + User user = UserSessionIDHandler.getUserBySessionID(sessionID); + + if(user.getPermissions() == UserPermissions.admin.getValue()) { - return new ResponseEntity<>(semester, HttpStatus.OK); + if (db.addSemester(semester)) + { + return new ResponseEntity<>(semester, HttpStatus.OK); + } } return new ResponseEntity<>(HttpStatus.BAD_REQUEST); } + //get a semester object by its name @CrossOrigin @GetMapping("/semester") public ResponseEntity getSemester(@RequestParam(name="name") String name) diff --git a/backend/src/main/java/com/example/backend/anwprj/controller/UserController.java b/backend/src/main/java/com/example/backend/anwprj/controller/UserController.java index dd8c723..becaef8 100644 --- a/backend/src/main/java/com/example/backend/anwprj/controller/UserController.java +++ b/backend/src/main/java/com/example/backend/anwprj/controller/UserController.java @@ -10,6 +10,7 @@ import org.springframework.web.bind.annotation.*; @RestController public class UserController { + //reference to the database handler private DataBaseHandler db; { @@ -17,24 +18,37 @@ public class UserController } + //adds a new user to the database (cannot create an admin user) @CrossOrigin @PostMapping("/users") public ResponseEntity addUser(@RequestBody User user) { + //if user was successfully added to database if(db.addUser(user)) { + //generate a session id return new ResponseEntity(UserSessionIDHandler.addUser(user.getMail(), user.getPassword()), HttpStatus.OK); } return new ResponseEntity(HttpStatus.BAD_REQUEST); } + //a user wants to login @CrossOrigin @GetMapping("/users") public ResponseEntity login(@RequestParam(name="mail") String mail, @RequestParam(name="password") String password) { + //generate a session id for the user trying to login String sessionID = UserSessionIDHandler.addUser(mail, password); return new ResponseEntity<>(sessionID, HttpStatus.OK); } + + @CrossOrigin + @GetMapping("/users/logout") + public ResponseEntity logout(@RequestParam(name="sessionid") String sessionID) + { + boolean success = UserSessionIDHandler.removeUser(sessionID); + return new ResponseEntity<>(success, HttpStatus.OK); + } }