From fe0dd478cd3d665fb0a30053a42089e049eff818 Mon Sep 17 00:00:00 2001 From: Maximilian Leopold Date: Sat, 13 Apr 2019 13:52:42 +0200 Subject: [PATCH] Started reorganising backend code --- .../bugageocaching/controller/Controller.java | 115 +----------------- .../bugageocaching/entities/Station.java | 11 ++ .../util/CacheConstructionUtil.java | 115 ++++++++++++++++++ 3 files changed, 129 insertions(+), 112 deletions(-) create mode 100644 src/main/java/hhn/labsw/bugageocaching/util/CacheConstructionUtil.java diff --git a/src/main/java/hhn/labsw/bugageocaching/controller/Controller.java b/src/main/java/hhn/labsw/bugageocaching/controller/Controller.java index 73daf44..91e0c3f 100644 --- a/src/main/java/hhn/labsw/bugageocaching/controller/Controller.java +++ b/src/main/java/hhn/labsw/bugageocaching/controller/Controller.java @@ -9,20 +9,17 @@ import io.jsonwebtoken.Claims; import io.jsonwebtoken.ExpiredJwtException; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; -import io.jsonwebtoken.security.Keys; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.crypto.bcrypt.BCrypt; import org.springframework.web.bind.annotation.*; import javax.annotation.PostConstruct; -import javax.xml.bind.DatatypeConverter; -import java.security.Key; import java.security.SecureRandom; import java.util.*; import java.util.concurrent.atomic.AtomicLong; -import java.util.logging.Logger; + +import static hhn.labsw.bugageocaching.util.CacheConstructionUtil.*; @RestController public class Controller { @@ -103,14 +100,6 @@ public class Controller { return ResponseEntity.status(200).body(token); } - /*if (BCrypt.checkpw(user.getPassword(), userRepository.findByUsername(user.getUsername()).getPassword())) { - String token = user.getUsername() + BCrypt.hashpw(String.valueOf(System.currentTimeMillis() + counter.incrementAndGet()), BCrypt.gensalt()); - String hashedToken = BCrypt.hashpw(token, BCrypt.gensalt()); - userRepository.findByUsername(user.getUsername()).setToken(hashedToken); - userRepository.save(userRepository.findByUsername(user.getUsername())); - //return ResponseEntity.ok(new Gson().toJson(token)); - return ResponseEntity.status(200).body(token); - }*/ return ResponseEntity.status(400).body("Es ist ein Fehler aufgetreten"); } @@ -176,113 +165,15 @@ public class Controller { } } - //Eigentlich brauchen wir mit JWT keine Logout Methode mehr. - @CrossOrigin(origins = "http://localhost:8081") // only for dev purpose - @RequestMapping("/api/logout") - @ResponseBody - public ResponseEntity logout(@RequestParam String token) { -// System.out.println("logout"); - /*User user = userRepository.findByUsername(token.substring(0, token.indexOf("$"))); -// System.out.println(token); -// System.out.println(user.getToken()); - if (user == null || user.getToken().isEmpty()) { - return ResponseEntity.status(404).body("User was not found"); - } - user.setToken(null); - userRepository.save(user);*/ - return ResponseEntity.status(200).body("Token was deleted"); - } - @CrossOrigin(origins = "http://localhost:8081") // only for dev purpose @RequestMapping("/api/createCache") @ResponseBody public ResponseEntity createCache(@RequestBody Cache cache) { - - // Stationen werden in die Datenbank eingetragen - for (Station station : cache.getStationen()) { - ResponseEntity response = createStation(station); - if (response.getStatusCodeValue() == 400) { - deleteStationen(cache); - return response; - } - } - - // Caches werden in die Datenbank eingetragen - if (cache.getDescription().length() == 0 || cache.getName().length() == 0 || cache.getRankingPoints() == 0.0 || cache.getStationen().size() == 0) { - deleteStationen(cache); - return ResponseEntity.status(400).body("cache fields can´t be empty"); - } - - for (Cache cache1 : cacheRepository.findAll()) { - if (cache1.getName().equals(cache.getName())) { - deleteStationen(cache); - return ResponseEntity.status(400).body("name is already taken"); - } - } - - if (cache.getRankingPoints() < 0) { - deleteStationen(cache); - return ResponseEntity.status(400).body("Ranking points has to be a positive number"); - } - - cacheRepository.save(cache); - - for (int i = 0; i + 1 < cache.getStationen().size(); i++) { - StationReihenfolge stationReihenfolge = new StationReihenfolge(); - stationReihenfolge.setCache(cache); - stationReihenfolge.setStation(cache.getStationen().get(i)); - stationReihenfolge.setNachfolgeStation(cache.getStationen().get(i + 1)); - stationReihenfolgeRepository.save(stationReihenfolge); - } - - return ResponseEntity.status(200).body(new Gson().toJson(cache)); + return createCacheUtil(cache); } - public ResponseEntity createStation(Station station) { - if (station.getDescription().length() == 0 || station.getLattitude() == 0.0 || station.getLongitude() == 0.0 || station.getSolution().length() == 0) { - return ResponseEntity.status(400).body("station fields can´t be empty"); - } - if (station.getLattitude() < -90 || station.getLattitude() > 90) { - return ResponseEntity.status(400).body("Lattitude has to be between -90 and 90 Degree"); - } - - if (station.getLongitude() < -180 || station.getLongitude() > 180) { - return ResponseEntity.status(400).body("Longitude has to be in the range of -180 to 180 degrees"); - } - - Random r = new Random(); - int low = 100000; - int high = 1000000; - int code = 0; - boolean unique = false; - while (!unique) { - code = r.nextInt(high - low) + low; - unique = true; - for (Station station1 : stationRepository.findAll()) { - if (station1.getCode() == code) { - unique = false; - } - } - } - - station.setCode(code); - - stationRepository.save(station); - - return ResponseEntity.status(200).body(new Gson().toJson(station)); - } - - public void deleteStationen(Cache cache) { - for (Station station : cache.getStationen()) { - try { - stationRepository.delete(station); - } catch (IllegalArgumentException e) { // station is null - // do nothing - } - } - } @CrossOrigin(origins = "http://localhost:8081") // only for dev purpose diff --git a/src/main/java/hhn/labsw/bugageocaching/entities/Station.java b/src/main/java/hhn/labsw/bugageocaching/entities/Station.java index fe1344f..31bc0eb 100644 --- a/src/main/java/hhn/labsw/bugageocaching/entities/Station.java +++ b/src/main/java/hhn/labsw/bugageocaching/entities/Station.java @@ -2,6 +2,7 @@ package hhn.labsw.bugageocaching.entities; import javax.persistence.*; +import javax.validation.constraints.NotNull; @Entity @Table @@ -11,10 +12,20 @@ public class Station { @GeneratedValue private int id; + @NotNull private String description; + + @NotNull private double longitude; + + @NotNull private double lattitude; + + @Column(unique = true) + @NotNull private int code; + + @NotNull private String solution; public Station() { diff --git a/src/main/java/hhn/labsw/bugageocaching/util/CacheConstructionUtil.java b/src/main/java/hhn/labsw/bugageocaching/util/CacheConstructionUtil.java new file mode 100644 index 0000000..d7594c7 --- /dev/null +++ b/src/main/java/hhn/labsw/bugageocaching/util/CacheConstructionUtil.java @@ -0,0 +1,115 @@ +package hhn.labsw.bugageocaching.util; + +import com.google.gson.Gson; +import hhn.labsw.bugageocaching.entities.Cache; +import hhn.labsw.bugageocaching.entities.Station; +import hhn.labsw.bugageocaching.entities.StationReihenfolge; +import hhn.labsw.bugageocaching.repositories.CacheRepository; +import hhn.labsw.bugageocaching.repositories.StationRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +import javax.persistence.RollbackException; +import java.util.Random; + +public class CacheConstructionUtil { + + @Autowired + static StationRepository stationRepository; + + @Autowired + static CacheRepository cacheRepository; + + public static ResponseEntity createCacheUtil(Cache cache){ + + // Stationen werden in die Datenbank eingetragen + for (Station station : cache.getStationen()) { + ResponseEntity response = createStationUtil(station); + if (response.getStatusCodeValue() == 400) { + deleteStationenUtil(cache); + return response; + } + } + + // Caches werden in die Datenbank eingetragen + if (cache.getDescription().length() == 0 || cache.getName().length() == 0 || cache.getRankingPoints() == 0.0 || cache.getStationen().size() == 0) { + deleteStationenUtil(cache); + return ResponseEntity.status(400).body("cache fields can´t be empty"); + } + + for (Cache cache1 : cacheRepository.findAll()) { + if (cache1.getName().equals(cache.getName())) { + deleteStationenUtil(cache); + return ResponseEntity.status(400).body("name is already taken"); + } + } + + if (cache.getRankingPoints() < 0) { + deleteStationenUtil(cache); + return ResponseEntity.status(400).body("Ranking points has to be a positive number"); + } + + cacheRepository.save(cache); + + /*for (int i = 0; i + 1 < cache.getStationen().size(); i++) { + StationReihenfolge stationReihenfolge = new StationReihenfolge(); + stationReihenfolge.setCache(cache); + stationReihenfolge.setStation(cache.getStationen().get(i)); + stationReihenfolge.setNachfolgeStation(cache.getStationen().get(i + 1)); + stationReihenfolgeRepository.save(stationReihenfolge); + }*/ + + return ResponseEntity.status(200).body(new Gson().toJson(cache)); + } + + public static ResponseEntity createStationUtil(Station station) { + + if (station.getDescription().length() == 0 || station.getLattitude() == 0.0 || station.getLongitude() == 0.0 || station.getSolution().length() == 0) { + return ResponseEntity.status(400).body("station fields can´t be empty"); + } + + if (station.getLattitude() < -90 || station.getLattitude() > 90) { + return ResponseEntity.status(400).body("Lattitude has to be between -90 and 90 Degree"); + } + + if (station.getLongitude() < -180 || station.getLongitude() > 180) { + return ResponseEntity.status(400).body("Longitude has to be in the range of -180 to 180 degrees"); + } + + Random r = new Random(); + int low = 100000; + int high = 1000000; + int code = 0; + boolean unique = false; + + while (!unique) { + code = r.nextInt(high - low) + low; + unique = true; + for (Station station1 : stationRepository.findAll()) { + if (station1.getCode() == code) { + unique = false; + } + } + } + + try { + station.setCode(code); + }catch (RollbackException e){ + return ResponseEntity.status(400).body("There was an error generating the unique code"); + } + + stationRepository.save(station); + + return ResponseEntity.status(200).body(new Gson().toJson(station)); + } + + public static void deleteStationenUtil(Cache cache) { + for (Station station : cache.getStationen()) { + try { + stationRepository.delete(station); + } catch (IllegalArgumentException e) { // station is null + // do nothing + } + } + } +}