diff --git a/backend/database.mv.db b/backend/database.mv.db index e021102..8e5008d 100644 Binary files a/backend/database.mv.db and b/backend/database.mv.db differ diff --git a/backend/database.trace.db b/backend/database.trace.db index 8a6becf..10bc2cb 100644 --- a/backend/database.trace.db +++ b/backend/database.trace.db @@ -1458,3 +1458,27 @@ java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supporte 2023-05-09 18:38:17 jdbc[3]: exception org.h2.jdbc.JdbcSQLNonTransientException: Keine Daten verfügbar No data is available [2000-214] +2023-05-09 16:41:29 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-09 18:42:56 jdbc[3]: exception +org.h2.jdbc.JdbcSQLNonTransientException: Keine Daten verfügbar +No data is available [2000-214] 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 105f96d..2d00b24 100644 --- a/backend/src/main/java/com/example/backend/anwprj/DataBaseHandler.java +++ b/backend/src/main/java/com/example/backend/anwprj/DataBaseHandler.java @@ -389,16 +389,29 @@ public class DataBaseHandler } - public User updateUser(User user, int id) + public User updateUser(User user, int id, boolean elevationRequestByAdmin) { try { - st.executeUpdate("update users set " + - "firstname='" + user.getFirstName() + "', " + - "lastname='" + user.getLastName() + "', " + - "mail='" + user.getMail() + "', " + - "password='" + user.getPassword() + "' " + - "where id=" + id); + if(!elevationRequestByAdmin) + { + st.executeUpdate("update users set " + + "firstname='" + user.getFirstName() + "', " + + "lastname='" + user.getLastName() + "', " + + "mail='" + user.getMail() + "', " + + "password='" + user.getPassword() + "' " + + "where id=" + id); + } + else + { + st.executeUpdate("update users set " + + "firstname='" + user.getFirstName() + "', " + + "lastname='" + user.getLastName() + "', " + + "mail='" + user.getMail() + "', " + + "password='" + user.getPassword() + "'," + + "permission=" + user.getPermissions() + + "where id=" + id); + } return getUser(id); } catch (SQLException e) 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 27485c3..8ca16c5 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 @@ -9,8 +9,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @RestController -public class UserController -{ +public class UserController { //reference to the database handler private DataBaseHandler db; @@ -22,20 +21,17 @@ public class UserController //adds a new user to the database (cannot create an admin user) @CrossOrigin @PostMapping("/users") - public ResponseEntity addUser(@RequestBody User user) - { + public ResponseEntity addUser(@RequestBody User user) { User checkUser = db.getUser(user.getMail()); - if(checkUser != null) - { + if (checkUser != null) { return new ResponseEntity<>("mail", HttpStatus.FORBIDDEN); } //if user was successfully added to database User u = db.addUser(user); - if (u != null) - { + if (u != null) { //generate a session id return new ResponseEntity(UserSessionIDHandler.addUser(user.getMail(), user.getPassword()), HttpStatus.OK); } @@ -46,8 +42,7 @@ public class UserController //a user wants to login @CrossOrigin @GetMapping("/users") - public ResponseEntity login(@RequestParam(name = "mail") String mail, @RequestParam(name = "password") String password) - { + 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); @@ -56,28 +51,23 @@ public class UserController @CrossOrigin @GetMapping("/users/logout") - public ResponseEntity logout(@RequestParam(name = "sessionid") String sessionID) - { + public ResponseEntity logout(@RequestParam(name = "sessionid") String sessionID) { boolean success = UserSessionIDHandler.removeUser(sessionID); return new ResponseEntity<>(success, HttpStatus.OK); } @CrossOrigin @PutMapping("/users") - public ResponseEntity updateUser(@RequestParam(name="sessionid") String sessionID, @RequestBody User u, @RequestParam(name="mail") String mail) - { + public ResponseEntity updateUser(@RequestParam(name = "sessionid") String sessionID, @RequestBody User u, @RequestParam(name = "mail") String mail) { User sessionUser = UserSessionIDHandler.getUserBySessionID(sessionID); - if(sessionUser != null) - { - if (sessionUser.getMail().equals(mail) || sessionUser.getPermissions() == UserPermissions.admin.getValue()) - { + if (sessionUser != null) { + if (sessionUser.getMail().equals(mail) || sessionUser.getPermissions() == UserPermissions.admin.getValue()) { System.out.println(sessionUser.getId()); - User resultingUser = db.updateUser(u, sessionUser.getId()); + User resultingUser = db.updateUser(u, sessionUser.getId(), false); - if (resultingUser != null) - { + if (resultingUser != null) { UserSessionIDHandler.removeUser(sessionID); return new ResponseEntity<>(true, HttpStatus.OK); } @@ -90,19 +80,45 @@ public class UserController } @CrossOrigin - @GetMapping("/users/data") - public ResponseEntity getUserData( - @RequestParam(name="sessionid") String sessionID, - @RequestParam(name="mail") String mail) + @PutMapping("/users/elevate") + public ResponseEntity elevateUser( + @RequestParam(name = "sessionid") String sessionID, + @RequestParam(name = "mail") String mail, + @RequestParam(name = "permission") int permission) { User sessionUser = UserSessionIDHandler.getUserBySessionID(sessionID); - if(sessionUser != null) + if(sessionUser != null && sessionUser.getPermissions() == UserPermissions.admin.getValue()) { + System.out.println("test"); + User userToUpdateTemplate = db.getUser(mail); + User userToUpdate = new User(userToUpdateTemplate.getId(), userToUpdateTemplate.getFirstName(), userToUpdateTemplate.getLastName(), + userToUpdateTemplate.getMail(), userToUpdateTemplate.getPassword(), permission); + + User resultingUser = db.updateUser(userToUpdate, userToUpdate.getId(), true); + + if(resultingUser == null) + { + return new ResponseEntity<>(false, HttpStatus.NOT_FOUND); + } + + return new ResponseEntity<>(true, HttpStatus.OK); + } + + return new ResponseEntity<>(false, HttpStatus.FORBIDDEN); + } + + @CrossOrigin + @GetMapping("/users/data") + public ResponseEntity getUserData( + @RequestParam(name = "sessionid") String sessionID, + @RequestParam(name = "mail") String mail) { + User sessionUser = UserSessionIDHandler.getUserBySessionID(sessionID); + + if (sessionUser != null) { System.out.println(sessionUser.getMail() + " " + mail); - if (sessionUser.getMail().equals(mail) || sessionUser.getPermissions() == UserPermissions.admin.getValue()) - { + if (sessionUser.getMail().equals(mail) || sessionUser.getPermissions() == UserPermissions.admin.getValue()) { User searchedUser = db.getUser(mail); return new ResponseEntity<>(searchedUser, HttpStatus.OK); } @@ -113,13 +129,11 @@ public class UserController @CrossOrigin @DeleteMapping("/users") - public ResponseEntity deleteUser(@RequestParam(name="sessionid") String sessionID, @RequestParam(name="mail") String mail) - { + public ResponseEntity deleteUser(@RequestParam(name = "sessionid") String sessionID, @RequestParam(name = "mail") String mail) { User sessionUser = UserSessionIDHandler.getUserBySessionID(sessionID); - if(sessionUser != null && sessionUser.getPermissions() == UserPermissions.admin.getValue()) - { - return new ResponseEntity<>(db.deleteUser(mail), HttpStatus.OK); + if (sessionUser != null && sessionUser.getPermissions() == UserPermissions.admin.getValue()) { + return new ResponseEntity<>(db.deleteUser(mail), HttpStatus.OK); } return new ResponseEntity<>(HttpStatus.FORBIDDEN);