Möglichkeit Die Rechte von Usern zu erhöhen

This commit is contained in:
brausjonas
2023-05-09 19:01:35 +02:00
parent 0ff09533e8
commit 78fd2fb2e2
4 changed files with 91 additions and 40 deletions
Binary file not shown.
+24
View File
@@ -1458,3 +1458,27 @@ java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supporte
2023-05-09 18:38:17 jdbc[3]: exception 2023-05-09 18:38:17 jdbc[3]: exception
org.h2.jdbc.JdbcSQLNonTransientException: Keine Daten verfügbar org.h2.jdbc.JdbcSQLNonTransientException: Keine Daten verfügbar
No data is available [2000-214] 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]
@@ -389,16 +389,29 @@ public class DataBaseHandler
} }
public User updateUser(User user, int id) public User updateUser(User user, int id, boolean elevationRequestByAdmin)
{ {
try try
{ {
st.executeUpdate("update users set " + if(!elevationRequestByAdmin)
"firstname='" + user.getFirstName() + "', " + {
"lastname='" + user.getLastName() + "', " + st.executeUpdate("update users set " +
"mail='" + user.getMail() + "', " + "firstname='" + user.getFirstName() + "', " +
"password='" + user.getPassword() + "' " + "lastname='" + user.getLastName() + "', " +
"where id=" + id); "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); return getUser(id);
} catch (SQLException e) } catch (SQLException e)
@@ -9,8 +9,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@RestController @RestController
public class UserController public class UserController {
{
//reference to the database handler //reference to the database handler
private DataBaseHandler db; private DataBaseHandler db;
@@ -22,20 +21,17 @@ public class UserController
//adds a new user to the database (cannot create an admin user) //adds a new user to the database (cannot create an admin user)
@CrossOrigin @CrossOrigin
@PostMapping("/users") @PostMapping("/users")
public ResponseEntity<String> addUser(@RequestBody User user) public ResponseEntity<String> addUser(@RequestBody User user) {
{
User checkUser = db.getUser(user.getMail()); User checkUser = db.getUser(user.getMail());
if(checkUser != null) if (checkUser != null) {
{
return new ResponseEntity<>("mail", HttpStatus.FORBIDDEN); return new ResponseEntity<>("mail", HttpStatus.FORBIDDEN);
} }
//if user was successfully added to database //if user was successfully added to database
User u = db.addUser(user); User u = db.addUser(user);
if (u != null) if (u != null) {
{
//generate a session id //generate a session id
return new ResponseEntity<String>(UserSessionIDHandler.addUser(user.getMail(), user.getPassword()), HttpStatus.OK); return new ResponseEntity<String>(UserSessionIDHandler.addUser(user.getMail(), user.getPassword()), HttpStatus.OK);
} }
@@ -46,8 +42,7 @@ public class UserController
//a user wants to login //a user wants to login
@CrossOrigin @CrossOrigin
@GetMapping("/users") @GetMapping("/users")
public ResponseEntity<String> login(@RequestParam(name = "mail") String mail, @RequestParam(name = "password") String password) public ResponseEntity<String> login(@RequestParam(name = "mail") String mail, @RequestParam(name = "password") String password) {
{
//generate a session id for the user trying to login //generate a session id for the user trying to login
String sessionID = UserSessionIDHandler.addUser(mail, password); String sessionID = UserSessionIDHandler.addUser(mail, password);
@@ -56,28 +51,23 @@ public class UserController
@CrossOrigin @CrossOrigin
@GetMapping("/users/logout") @GetMapping("/users/logout")
public ResponseEntity<Boolean> logout(@RequestParam(name = "sessionid") String sessionID) public ResponseEntity<Boolean> logout(@RequestParam(name = "sessionid") String sessionID) {
{
boolean success = UserSessionIDHandler.removeUser(sessionID); boolean success = UserSessionIDHandler.removeUser(sessionID);
return new ResponseEntity<>(success, HttpStatus.OK); return new ResponseEntity<>(success, HttpStatus.OK);
} }
@CrossOrigin @CrossOrigin
@PutMapping("/users") @PutMapping("/users")
public ResponseEntity<Boolean> updateUser(@RequestParam(name="sessionid") String sessionID, @RequestBody User u, @RequestParam(name="mail") String mail) public ResponseEntity<Boolean> updateUser(@RequestParam(name = "sessionid") String sessionID, @RequestBody User u, @RequestParam(name = "mail") String mail) {
{
User sessionUser = UserSessionIDHandler.getUserBySessionID(sessionID); User sessionUser = UserSessionIDHandler.getUserBySessionID(sessionID);
if(sessionUser != null) if (sessionUser != null) {
{ if (sessionUser.getMail().equals(mail) || sessionUser.getPermissions() == UserPermissions.admin.getValue()) {
if (sessionUser.getMail().equals(mail) || sessionUser.getPermissions() == UserPermissions.admin.getValue())
{
System.out.println(sessionUser.getId()); 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); UserSessionIDHandler.removeUser(sessionID);
return new ResponseEntity<>(true, HttpStatus.OK); return new ResponseEntity<>(true, HttpStatus.OK);
} }
@@ -90,19 +80,45 @@ public class UserController
} }
@CrossOrigin @CrossOrigin
@GetMapping("/users/data") @PutMapping("/users/elevate")
public ResponseEntity<User> getUserData( public ResponseEntity<Boolean> elevateUser(
@RequestParam(name="sessionid") String sessionID, @RequestParam(name = "sessionid") String sessionID,
@RequestParam(name="mail") String mail) @RequestParam(name = "mail") String mail,
@RequestParam(name = "permission") int permission)
{ {
User sessionUser = UserSessionIDHandler.getUserBySessionID(sessionID); 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<User> 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); 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); User searchedUser = db.getUser(mail);
return new ResponseEntity<>(searchedUser, HttpStatus.OK); return new ResponseEntity<>(searchedUser, HttpStatus.OK);
} }
@@ -113,13 +129,11 @@ public class UserController
@CrossOrigin @CrossOrigin
@DeleteMapping("/users") @DeleteMapping("/users")
public ResponseEntity<Boolean> deleteUser(@RequestParam(name="sessionid") String sessionID, @RequestParam(name="mail") String mail) public ResponseEntity<Boolean> deleteUser(@RequestParam(name = "sessionid") String sessionID, @RequestParam(name = "mail") String mail) {
{
User sessionUser = UserSessionIDHandler.getUserBySessionID(sessionID); User sessionUser = UserSessionIDHandler.getUserBySessionID(sessionID);
if(sessionUser != null && sessionUser.getPermissions() == UserPermissions.admin.getValue()) if (sessionUser != null && sessionUser.getPermissions() == UserPermissions.admin.getValue()) {
{ return new ResponseEntity<>(db.deleteUser(mail), HttpStatus.OK);
return new ResponseEntity<>(db.deleteUser(mail), HttpStatus.OK);
} }
return new ResponseEntity<>(HttpStatus.FORBIDDEN); return new ResponseEntity<>(HttpStatus.FORBIDDEN);