Changed Find User Methods so its matching to the user management

This commit is contained in:
Maximilian Leopold 2019-04-17 15:02:42 +02:00
parent 4b039cb198
commit 0bc1855284
2 changed files with 43 additions and 31 deletions

View File

@ -61,8 +61,8 @@ public class Controller {
return ResponseEntity.status(200).body(new Gson().toJson(cacheRepository.findAll()));
}
// TODO user muss jetzt anders aus dem token geholt werden, da kein subject mehr gesetzt wird und username nichtmehr unique ist
// TODO (über der checkAdmin methode steht ein möglicher lösungsvorschlag dafür)
// user muss jetzt anders aus dem token geholt werden, da kein subject mehr gesetzt wird und username nichtmehr unique ist
// (über der checkAdmin methode steht ein möglicher lösungsvorschlag dafür)
@CrossOrigin(origins = "http://localhost:8081") // only for dev purpose
@RequestMapping("/api/startCache")
@ResponseBody
@ -86,7 +86,8 @@ public class Controller {
Claims claims = (Claims) tokenVerification.getBody();
ResponseEntity getUser = FinderUtil.findUserByUsername(claims.getSubject());
//Sollte jetzt eigentlich funktionieren...hoffe ich
ResponseEntity getUser = FinderUtil.findUserFromClaim(claims);
if (getUser.getStatusCodeValue() != 200) {
return getUser;
@ -145,7 +146,7 @@ public class Controller {
}
}
// TODO user muss jetzt anders aus dem token geholt werden, da kein subject mehr gesetzt wird und username nichtmehr unique ist
//user muss jetzt anders aus dem token geholt werden, da kein subject mehr gesetzt wird und username nichtmehr unique ist
@CrossOrigin(origins = "http://localhost:8081") // only for dev purpose
@RequestMapping("/api/checkStation")
@ResponseBody
@ -165,7 +166,7 @@ public class Controller {
Claims claims = (Claims) tokenVerification.getBody();
ResponseEntity getUser = FinderUtil.findUserByUsername(claims.getSubject());
ResponseEntity getUser = FinderUtil.findUserFromClaim(claims);
if (getUser.getStatusCodeValue() != 200) {
return getUser;
@ -276,9 +277,6 @@ public class Controller {
return createCacheUtil(cache);
}
// TODO claims.get funktioniert denk ich jetzt nurnoch mit claims.get("user") und liefert glaub ein userEntity objekt als JSON zurück
// TODO wir könnten doch dann die userID aus dem JSON auslesen und mit Hilfe einer findByID methode dann den user aus unserer DB finden oder?
// TODO unten sieht man auskommentiert, wie das eventuell funktionieren könnte
@CrossOrigin(origins = "http://localhost:8081") // only for dev purpose
@RequestMapping("/api/checkAdmin")
@ResponseBody
@ -292,25 +290,15 @@ public class Controller {
Claims claims = (Claims) verifyToken.getBody();
ResponseEntity userResponse = FinderUtil.findUserFromClaim(claims);
// TODO sieht nach einer lösung aus, sollte aber denk ich in FinderUtil oder so ausgelagert
// TODO werden. Dann haben wir eine Methode, die hierfür aufgerufen wird und ein 'Claim'
// TODO entgegennimmt und dann eine ResponseEntity zurückgibt
// try {
// String userString = (String) claims.get("user");
// JSONParser parser = new JSONParser();
// JSONObject userObject = (JSONObject) parser.parse(userString);
// int userID = (Integer) userObject.get("userID");
// Optional<User> userOptional = userRepository.findById(userID);
// if (userOptional.isPresent()) {
// User user = userOptional.get();
// // hier dann admin check etc...
// } else {
// return ResponseEntity.status(404).body("Couldnt find User " + userID);
// }
// } catch (ParseException e) {
// e.printStackTrace();
// }
if(userResponse.getStatusCodeValue() != 200){
return userResponse;
}
User user = (User) userResponse.getBody();
//TODO Hier Admin Check einfügen
return ResponseEntity.status(200).body(claims.get("admin"));
}
@ -329,7 +317,7 @@ public class Controller {
return deleteCacheUtil(cacheID);
}
// TODO
@CrossOrigin(origins = "http://localhost:8081") // only for dev purpose
@RequestMapping("/api/getMyCaches")
@ResponseBody
@ -344,7 +332,7 @@ public class Controller {
Claims claims = (Claims) verifyToken.getBody();
ResponseEntity getUser = FinderUtil.findUserByUsername(claims.getSubject());
ResponseEntity getUser = FinderUtil.findUserFromClaim(claims);
if (getUser.getStatusCodeValue() != 200) {
return getUser;
@ -382,7 +370,6 @@ public class Controller {
return ResponseEntity.status(200).body(new Gson().toJson(sendBackUsers));
}
// TODO ebenfalls userfindung ändern
@CrossOrigin(origins = "http://localhost:8081") // only for dev purpose
@RequestMapping("/api/getUser")
@ResponseBody
@ -396,7 +383,7 @@ public class Controller {
Claims claims = (Claims) verifyToken.getBody();
ResponseEntity getUser = FinderUtil.findUserByUsername(claims.getSubject());
ResponseEntity getUser = FinderUtil.findUserFromClaim(claims);
if (getUser.getStatusCodeValue() != 200) {
return getUser;

View File

@ -2,6 +2,10 @@ package hhn.labsw.bugageocaching.util;
import hhn.labsw.bugageocaching.entities.*;
import hhn.labsw.bugageocaching.repositories.*;
import io.jsonwebtoken.Claims;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
@ -91,4 +95,25 @@ public class FinderUtil {
return ResponseEntity.status(404).body("Couldnt find User_Info " + infoID);
}
}
}
public static ResponseEntity findUserFromClaim(Claims claims) {
try {
String userString = (String) claims.get("user");
JSONParser parser = new JSONParser();
JSONObject userObject = (JSONObject) parser.parse(userString);
int userID = (Integer) userObject.get("userID");
Optional<User> userOptional = userRepository.findById(userID);
if (userOptional.isPresent()) {
User user = userOptional.get();
return ResponseEntity.status(200).body(user);
} else {
return ResponseEntity.status(404).body("Couldnt find User " + userID);
}
} catch (ParseException e) {
e.printStackTrace();
return ResponseEntity.status(404).body("String format was corrupt");
}
}
}