From c8fe5bb2358a6e853ceefde825ecaa005d001c33 Mon Sep 17 00:00:00 2001 From: Wanda Date: Wed, 20 Nov 2024 15:36:04 +0700 Subject: [PATCH] perubahan struktur response --- .../gateway/span/config/JwtAuthFilter.java | 30 ++++++++------ .../span/controllers/AuthController.java | 41 ++++++++++++------- .../gateway/span/models/AuthResponse.java | 8 ++-- .../span/models/AuthResponseDescription.java | 11 +++++ .../gateway/span/models/BasicResponse.java | 11 +++++ .../gateway/span/models/JwtExpiration.java | 3 +- .../gateway/span/models/JwtUsername.java | 3 +- .../span/models/JwtValidationResult.java | 3 +- .../gateway/span/services/JwtService.java | 30 ++++++++------ 9 files changed, 93 insertions(+), 47 deletions(-) create mode 100644 src/main/java/id/co/anaheim/gateway/span/models/AuthResponseDescription.java create mode 100644 src/main/java/id/co/anaheim/gateway/span/models/BasicResponse.java diff --git a/src/main/java/id/co/anaheim/gateway/span/config/JwtAuthFilter.java b/src/main/java/id/co/anaheim/gateway/span/config/JwtAuthFilter.java index d1cf1aa..6342951 100644 --- a/src/main/java/id/co/anaheim/gateway/span/config/JwtAuthFilter.java +++ b/src/main/java/id/co/anaheim/gateway/span/config/JwtAuthFilter.java @@ -1,6 +1,7 @@ package id.co.anaheim.gateway.span.config; import com.google.gson.Gson; +import id.co.anaheim.gateway.span.models.BasicResponse; import id.co.anaheim.gateway.span.models.JwtUsername; import id.co.anaheim.gateway.span.models.JwtValidationResult; import id.co.anaheim.gateway.span.services.JwtService; @@ -19,7 +20,6 @@ import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; import java.io.IOException; -import java.util.HashMap; @Slf4j @Component @@ -48,6 +48,10 @@ public class JwtAuthFilter extends OncePerRequestFilter { if (isWhitelisted) { filterChain.doFilter(request, response); } else { + BasicResponse basicResponse = new BasicResponse(); + basicResponse.setFileName(""); + basicResponse.setResultCode("403"); + Gson gson = new Gson(); if (authHeader != null && authHeader.startsWith("Bearer ")) { String token = authHeader.substring(7); JwtUsername userName = jwtService.extractUsername(token); @@ -64,31 +68,31 @@ public class JwtAuthFilter extends OncePerRequestFilter { log.info("Security Context: {}", SecurityContextHolder.getContext().getAuthentication()); filterChain.doFilter(request, response); } else { - HashMap map = new HashMap<>(); - map.put("message", validationResult.getMessage()); - Gson gson = new Gson(); + basicResponse.setResultStatus(validationResult.getStatus()); + basicResponse.setResultDescription(validationResult.getDescription() ); + response.setStatus(HttpServletResponse.SC_FORBIDDEN); response.setContentType("application/json"); - response.getWriter().write(gson.toJson(map)); + response.getWriter().write(gson.toJson(basicResponse)); response.getWriter().flush(); } } else { - HashMap map = new HashMap<>(); - map.put("message", userName.getMessage()); - Gson gson = new Gson(); + basicResponse.setResultStatus(userName.getStatus()); + basicResponse.setResultDescription(userName.getDescription() ); + response.setStatus(HttpServletResponse.SC_FORBIDDEN); response.setContentType("application/json"); - response.getWriter().write(gson.toJson(map)); + response.getWriter().write(gson.toJson(basicResponse)); response.getWriter().flush(); } } else { - HashMap map = new HashMap<>(); - map.put("message", "Tidak ada authorization header"); - Gson gson = new Gson(); + basicResponse.setResultStatus("Tidak Memiliki Otorisasi"); + basicResponse.setResultDescription("Tidak ada authorization header"); + response.setStatus(HttpServletResponse.SC_FORBIDDEN); response.setContentType("application/json"); - response.getWriter().write(gson.toJson(map)); + response.getWriter().write(gson.toJson(basicResponse)); response.getWriter().flush(); } } diff --git a/src/main/java/id/co/anaheim/gateway/span/controllers/AuthController.java b/src/main/java/id/co/anaheim/gateway/span/controllers/AuthController.java index 1492a14..444d10d 100644 --- a/src/main/java/id/co/anaheim/gateway/span/controllers/AuthController.java +++ b/src/main/java/id/co/anaheim/gateway/span/controllers/AuthController.java @@ -1,10 +1,7 @@ package id.co.anaheim.gateway.span.controllers; import at.favre.lib.crypto.bcrypt.BCrypt; -import id.co.anaheim.gateway.span.models.AuthDto; -import id.co.anaheim.gateway.span.models.AuthResponse; -import id.co.anaheim.gateway.span.models.JwtExpiration; -import id.co.anaheim.gateway.span.models.User; +import id.co.anaheim.gateway.span.models.*; import id.co.anaheim.gateway.span.repositories.UserRepository; import id.co.anaheim.gateway.span.repositories.jdbc.JdbcUserRepository; import id.co.anaheim.gateway.span.services.JwtService; @@ -31,30 +28,40 @@ public class AuthController { @PostMapping("/login") ResponseEntity login(@RequestBody AuthDto authDto) { AuthResponse response = new AuthResponse(); + AuthResponseDescription description = new AuthResponseDescription(); + User user = repository.findByUsername(authDto.getUsername()); if (user == null) { - response.setMessage("Pengguna tidak ditemukan"); + response.setResultCode("403"); + response.setResultStatus("Tidak Memiliki Otorisasi"); + description.setMessage("Username/Password tidak sesuai"); } else { BCrypt.Result result = BCrypt.verifyer().verify(authDto.getPassword().toCharArray(), user.getPassword()); if (result.verified) { - response.setMessage("Berhasil masuk"); - response.setId(user.getId()); + response.setResultCode("401"); + response.setResultStatus("Berhasil Login"); + description.setMessage("Berhasil Masuk"); + description.setId(user.getId()); String token = jwtService.generateToken(user); - response.setToken(token); + description.setToken(token); JwtExpiration jwtExpiration = jwtService.extractExpiration(token); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - response.setTokenExpiration(dateFormat.format(jwtExpiration.getValue())); + description.setTokenExpiration(dateFormat.format(jwtExpiration.getValue())); } else { - response.setMessage("Password tidak sesuai"); - + response.setResultCode("403"); + response.setResultStatus("Tidak Memiliki Otorisasi"); + description.setMessage("Username/Password tidak sesuai"); } } + response.setResultDescription(description); return ResponseEntity.ok(response); } @PostMapping("/register") ResponseEntity createDefault() { AuthResponse response = new AuthResponse(); + AuthResponseDescription description = new AuthResponseDescription(); + User user = repository.findByUsername("admin"); if (user == null) { user = new User(); @@ -66,12 +73,16 @@ public class AuthController { user.setRole("ADMIN"); repository.create(user); - response.setMessage("Pendaftaran berhasil"); - response.setId(user.getId()); + response.setResultCode("Pendaftaran berhasil"); + description.setMessage("Pendaftaran berhasil"); + description.setId(user.getId()); + response.setResultDescription(description); return ResponseEntity.ok(response); } - response.setMessage("Pengguna dengan username admin sudah ada"); - response.setId(user.getId()); + response.setResultCode("400"); + description.setMessage("Pengguna dengan username admin sudah ada"); + description.setId(user.getId()); + response.setResultDescription(description); return ResponseEntity.ok(response); } } diff --git a/src/main/java/id/co/anaheim/gateway/span/models/AuthResponse.java b/src/main/java/id/co/anaheim/gateway/span/models/AuthResponse.java index 9057c8f..16150f4 100644 --- a/src/main/java/id/co/anaheim/gateway/span/models/AuthResponse.java +++ b/src/main/java/id/co/anaheim/gateway/span/models/AuthResponse.java @@ -4,8 +4,8 @@ import lombok.Data; @Data public class AuthResponse { - private String id; - private String token; - private String message; - private String tokenExpiration; + private String fileName; + private String resultCode; + private String resultStatus; + private AuthResponseDescription resultDescription; } diff --git a/src/main/java/id/co/anaheim/gateway/span/models/AuthResponseDescription.java b/src/main/java/id/co/anaheim/gateway/span/models/AuthResponseDescription.java new file mode 100644 index 0000000..b38eabe --- /dev/null +++ b/src/main/java/id/co/anaheim/gateway/span/models/AuthResponseDescription.java @@ -0,0 +1,11 @@ +package id.co.anaheim.gateway.span.models; + +import lombok.Data; + +@Data +public class AuthResponseDescription { + private String id; + private String token; + private String message; + private String tokenExpiration; +} diff --git a/src/main/java/id/co/anaheim/gateway/span/models/BasicResponse.java b/src/main/java/id/co/anaheim/gateway/span/models/BasicResponse.java new file mode 100644 index 0000000..d4ef249 --- /dev/null +++ b/src/main/java/id/co/anaheim/gateway/span/models/BasicResponse.java @@ -0,0 +1,11 @@ +package id.co.anaheim.gateway.span.models; + +import lombok.Data; + +@Data +public class BasicResponse { + private String fileName; + private String resultCode; + private String resultStatus; + private String resultDescription; +} diff --git a/src/main/java/id/co/anaheim/gateway/span/models/JwtExpiration.java b/src/main/java/id/co/anaheim/gateway/span/models/JwtExpiration.java index 4fdb6e2..1cc26f1 100644 --- a/src/main/java/id/co/anaheim/gateway/span/models/JwtExpiration.java +++ b/src/main/java/id/co/anaheim/gateway/span/models/JwtExpiration.java @@ -10,5 +10,6 @@ import java.util.Date; public class JwtExpiration { private boolean valid; private Date value; - private String message; + private String status; + private String description; } diff --git a/src/main/java/id/co/anaheim/gateway/span/models/JwtUsername.java b/src/main/java/id/co/anaheim/gateway/span/models/JwtUsername.java index 5a195fd..1677470 100644 --- a/src/main/java/id/co/anaheim/gateway/span/models/JwtUsername.java +++ b/src/main/java/id/co/anaheim/gateway/span/models/JwtUsername.java @@ -8,5 +8,6 @@ import lombok.Data; public class JwtUsername { private boolean valid; private String value; - private String message; + private String status; + private String description; } diff --git a/src/main/java/id/co/anaheim/gateway/span/models/JwtValidationResult.java b/src/main/java/id/co/anaheim/gateway/span/models/JwtValidationResult.java index 5f5838d..c8c1dfd 100644 --- a/src/main/java/id/co/anaheim/gateway/span/models/JwtValidationResult.java +++ b/src/main/java/id/co/anaheim/gateway/span/models/JwtValidationResult.java @@ -9,5 +9,6 @@ import lombok.Data; public class JwtValidationResult { private Claims claims; private boolean valid; - private String message; + private String status; + private String description; } diff --git a/src/main/java/id/co/anaheim/gateway/span/services/JwtService.java b/src/main/java/id/co/anaheim/gateway/span/services/JwtService.java index 285f5b1..4240e6b 100644 --- a/src/main/java/id/co/anaheim/gateway/span/services/JwtService.java +++ b/src/main/java/id/co/anaheim/gateway/span/services/JwtService.java @@ -63,11 +63,11 @@ public class JwtService { public JwtValidationResult validateToken(String token, UserDetails userDetails) { JwtExpiration expirationDate = extractExpiration(token); if (!expirationDate.isValid() || (expirationDate.getValue() != null && expirationDate.getValue().before(new Date()))) { - return JwtValidationResult.builder().message("JWT token is expired").valid(false).build(); + return JwtValidationResult.builder().status("Tidak Memiliki Otorisasi").description("Token yang Digunakan Expired").valid(false).build(); } JwtUsername username = extractUsername(token); if (!username.isValid()) { - return JwtValidationResult.builder().message(username.getMessage()).valid(false).build(); + return JwtValidationResult.builder().status(username.getStatus()).description(username.getDescription()).valid(false).build(); } boolean valid = userDetails.getUsername().equals(username.getValue()) && !expirationDate.getValue().before(new Date()); return JwtValidationResult.builder().valid(valid).build(); @@ -79,7 +79,7 @@ public class JwtService { Date value = result.getClaims().getExpiration(); return JwtExpiration.builder().value(value).valid(true).build(); } - return JwtExpiration.builder().message(result.getMessage()).valid(false).build(); + return JwtExpiration.builder().description(result.getDescription()).status(result.getStatus()).valid(false).build(); } public JwtUsername extractUsername(String token) { @@ -88,7 +88,7 @@ public class JwtService { String value = result.getClaims().getSubject(); return JwtUsername.builder().value(value).valid(true).build(); } - return JwtUsername.builder().message(result.getMessage()).valid(false).build(); + return JwtUsername.builder().description(result.getDescription()).valid(false).build(); } public String extractStaticToken(String token) { @@ -100,27 +100,33 @@ public class JwtService { } public JwtValidationResult getAllClaimsFromToken(String token) { - String message = ""; + String description = ""; + String status = ""; try { Claims claims = Jwts.parserBuilder().setSigningKey(getSignKey()).build().parseClaimsJws(token).getBody(); - return JwtValidationResult.builder().valid(true).claims(claims).message(message).build(); + return JwtValidationResult.builder().valid(true).claims(claims).description(description).status(status).build(); } catch (MalformedJwtException e) { log.error("Invalid JWT token: {}", e.getMessage()); - message = "JWT token tidak sesuai"; + status = "Tidak Memiliki Otorisasi"; + description = "Token yang Digunakan Salah"; } catch (ExpiredJwtException e) { log.error("JWT token is expired: {}", e.getMessage()); - message = "JWT token telah kadaluarsa"; + status = "Tidak Memiliki Otorisasi"; + description = "Token yang Digunakan Expired"; } catch (UnsupportedJwtException e) { log.error("JWT token is unsupported: {}", e.getMessage()); - message = "JWT token tidak didukung"; + status = "Tidak Memiliki Otorisasi"; + description = "Token yang Digunakan Salah"; } catch (IllegalArgumentException e) { log.error("JWT claims string is empty: {}", e.getMessage()); - message = "String JWT claims kosong"; + status = "Tidak Memiliki Otorisasi"; + description = "Token yang Digunakan Salah"; } catch (Exception e){ log.error("Invalid JWT token"); - message = "JWT token tidak sesuai"; + status = "Tidak Memiliki Otorisasi"; + description = "Token yang Digunakan Salah"; } - return JwtValidationResult.builder().valid(false).message(message).build(); + return JwtValidationResult.builder().valid(false).description(description).status(status).build(); } private String createToken(Map claims, String username) {