Skip to content

Commit 87f058e

Browse files
Working application
1 parent 71d9a1c commit 87f058e

17 files changed

+515
-39
lines changed

src/main/java/com/bitscoderdotcom/link_generator_system/controller/AuthController.java

Lines changed: 44 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,18 @@
44
import com.bitscoderdotcom.link_generator_system.dto.SignInRequest;
55
import com.bitscoderdotcom.link_generator_system.dto.UserRegistrationRequest;
66
import com.bitscoderdotcom.link_generator_system.security.service.AuthService;
7+
import jakarta.servlet.http.Cookie;
8+
import jakarta.servlet.http.HttpServletResponse;
9+
import jakarta.servlet.http.HttpSession;
710
import lombok.AllArgsConstructor;
11+
import org.springframework.http.HttpStatus;
812
import org.springframework.http.ResponseEntity;
913
import org.springframework.stereotype.Controller;
10-
import org.springframework.web.bind.annotation.PostMapping;
11-
import org.springframework.web.bind.annotation.RequestBody;
12-
import org.springframework.web.bind.annotation.RequestMapping;
14+
import org.springframework.ui.Model;
15+
import org.springframework.web.bind.annotation.*;
16+
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
17+
18+
import java.util.Objects;
1319

1420
@Controller
1521
@AllArgsConstructor
@@ -18,13 +24,44 @@ public class AuthController {
1824

1925
private AuthService authService;
2026

27+
@GetMapping("/register")
28+
public String showRegistrationForm(Model model) {
29+
model.addAttribute("userRegistrationRequest", new UserRegistrationRequest());
30+
return "register";
31+
}
32+
2133
@PostMapping("/register")
22-
public ResponseEntity<ApiResponse<UserRegistrationRequest.Response>> register(@RequestBody UserRegistrationRequest request) {
23-
return authService.register(request);
34+
public String register(UserRegistrationRequest request, RedirectAttributes redirectAttributes) {
35+
String response = authService.register(request);
36+
if (response.equals("Company registered successfully")) {
37+
redirectAttributes.addFlashAttribute("message", response);
38+
return "redirect:/lgsApp/v1/auth/signIn";
39+
} else {
40+
redirectAttributes.addFlashAttribute("message", response);
41+
return "redirect:/registrationFailure";
42+
}
43+
}
44+
45+
@GetMapping("/signIn")
46+
public String showSignInForm(Model model) {
47+
model.addAttribute("signInRequest", new SignInRequest());
48+
return "signIn";
2449
}
2550

2651
@PostMapping("/signIn")
27-
public ResponseEntity<ApiResponse<SignInRequest.Response>> signIn(@RequestBody SignInRequest request) {
28-
return authService.signIn(request);
52+
public String signIn(@ModelAttribute SignInRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
53+
ResponseEntity<ApiResponse<SignInRequest.Response>> apiResponse = authService.signIn(request);
54+
if (apiResponse.getStatusCode() == HttpStatus.OK) {
55+
// Create a new cookie
56+
Cookie cookie = new Cookie("token", Objects.requireNonNull(apiResponse.getBody()).getData().getToken());
57+
cookie.setHttpOnly(true);
58+
// Add the cookie to the response
59+
response.addCookie(cookie);
60+
// Redirect to the generateInvoice page
61+
return "redirect:/lgsApp/v1/invoice/generateInvoice";
62+
} else {
63+
redirectAttributes.addFlashAttribute("error", Objects.requireNonNull(apiResponse.getBody()).getMessage());
64+
return "redirect:/error";
65+
}
2966
}
3067
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.bitscoderdotcom.link_generator_system.controller;
2+
3+
import org.springframework.stereotype.Controller;
4+
import org.springframework.web.bind.annotation.GetMapping;
5+
6+
@Controller
7+
public class HomeController {
8+
9+
@GetMapping("/")
10+
public String home() {
11+
return "home";
12+
}
13+
}

src/main/java/com/bitscoderdotcom/link_generator_system/controller/InvoiceController.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.bitscoderdotcom.link_generator_system.entities.Invoice;
66
import com.bitscoderdotcom.link_generator_system.service.service.InvoiceService;
77
import lombok.AllArgsConstructor;
8+
import org.springframework.http.HttpStatus;
89
import org.springframework.http.ResponseEntity;
910
import org.springframework.stereotype.Controller;
1011
import org.springframework.ui.Model;
@@ -19,9 +20,27 @@ public class InvoiceController {
1920

2021
private InvoiceService invoiceService;
2122

23+
@GetMapping("/generateInvoice")
24+
public String showInvoiceForm(Model model) {
25+
model.addAttribute("invoiceDto", new InvoiceDto());
26+
return "generateInvoice";
27+
}
28+
2229
@PostMapping("/generateInvoice")
23-
public ResponseEntity<ApiResponse<InvoiceDto.Response>> generateInvoice(@RequestBody InvoiceDto invoiceDto, Principal principal) {
24-
return invoiceService.generateInvoice(invoiceDto, principal);
30+
public String generateInvoice(@ModelAttribute InvoiceDto invoiceDto, Principal principal, Model model) {
31+
ResponseEntity<ApiResponse<InvoiceDto.Response>> apiResponse = invoiceService.generateInvoice(invoiceDto, principal);
32+
33+
// Check if the invoice was generated successfully
34+
if (apiResponse != null && apiResponse.getStatusCode() == HttpStatus.OK) {
35+
// Add a success message
36+
model.addAttribute("message", "Invoice generated successfully. An email has been sent to the customer.");
37+
} else {
38+
// Add an error message
39+
model.addAttribute("error", "There was an error generating the invoice.");
40+
}
41+
42+
// Stay on the same page
43+
return "generateInvoice";
2544
}
2645

2746
@GetMapping("/{invoiceId}/payment")

src/main/java/com/bitscoderdotcom/link_generator_system/dto/UserRegistrationRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
@AllArgsConstructor
1313
@Getter
1414
@Setter
15+
@ToString
1516
public class UserRegistrationRequest {
1617

1718
private String name;

src/main/java/com/bitscoderdotcom/link_generator_system/security/WebSecurityConfig.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import lombok.RequiredArgsConstructor;
66
import org.springframework.context.annotation.Bean;
77
import org.springframework.context.annotation.Configuration;
8+
import org.springframework.http.HttpMethod;
89
import org.springframework.security.authentication.AuthenticationManager;
910
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
1011
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
@@ -80,13 +81,12 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
8081
http.csrf().disable()
8182
.headers().frameOptions().disable()
8283
.and()
83-
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
84+
.sessionManagement()
85+
.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
8486
.and()
8587
.authorizeHttpRequests()
86-
.requestMatchers("/lgsApp/v1/auth/**").permitAll()
87-
.requestMatchers("/h2-console/**").permitAll()
88-
.requestMatchers("/lgsApp/v1/invoice/{invoiceId}/payment", "/payment", "/paymentSuccess", "/error" ).permitAll()
89-
.anyRequest().authenticated()
88+
.requestMatchers(HttpMethod.POST,"/lgsApp/v1/invoice/generateInvoice").authenticated()
89+
.anyRequest().permitAll()
9090
.and()
9191
.formLogin();
9292

src/main/java/com/bitscoderdotcom/link_generator_system/security/jwt/AuthTokenFilter.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.bitscoderdotcom.link_generator_system.security.service.UserDetailsServiceImpl;
44
import jakarta.servlet.FilterChain;
55
import jakarta.servlet.ServletException;
6+
import jakarta.servlet.http.Cookie;
67
import jakarta.servlet.http.HttpServletRequest;
78
import jakarta.servlet.http.HttpServletResponse;
89
import lombok.extern.slf4j.Slf4j;
@@ -46,11 +47,23 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
4647
filterChain.doFilter(request, response);
4748
}
4849

49-
private String parseJwt(HttpServletRequest request) {
50-
String headerAuth = request.getHeader("Authorization");
50+
// private String parseJwt(HttpServletRequest request) {
51+
// String headerAuth = request.getHeader("Authorization");
52+
//
53+
// if (StringUtils.hasText(headerAuth) && headerAuth.startsWith("Bearer ")) {
54+
// return headerAuth.substring(7);
55+
// }
56+
// return null;
57+
// }
5158

52-
if (StringUtils.hasText(headerAuth) && headerAuth.startsWith("Bearer ")) {
53-
return headerAuth.substring(7);
59+
private String parseJwt(HttpServletRequest request) {
60+
Cookie[] cookies = request.getCookies();
61+
if (cookies != null) {
62+
for (Cookie cookie : cookies) {
63+
if (cookie.getName().equals("token")) {
64+
return cookie.getValue();
65+
}
66+
}
5467
}
5568
return null;
5669
}

src/main/java/com/bitscoderdotcom/link_generator_system/security/service/AuthService.java

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ public class AuthService {
3838
private EmailService emailService;
3939

4040
@Transactional
41-
public ResponseEntity<ApiResponse<UserRegistrationRequest.Response>> register(UserRegistrationRequest request) {
41+
public String register(UserRegistrationRequest request) {
4242

43-
log.info("Register method called with request: {}", request);
43+
log.info("Register method called");
4444

4545
String username = request.getName();
4646
String email = request.getEmail();
@@ -50,16 +50,12 @@ public ResponseEntity<ApiResponse<UserRegistrationRequest.Response>> register(Us
5050

5151
if (usernameExists) {
5252
log.info("Username already taken: {}", username);
53-
throw new ResponseStatusException(
54-
HttpStatus.BAD_REQUEST, "Username is already taken!"
55-
);
53+
return "Username is already taken!";
5654
}
5755

5856
if (emailExists) {
5957
log.info("Email already in use: {}", email);
60-
throw new ResponseStatusException(
61-
HttpStatus.BAD_REQUEST, "Email Address already in use!"
62-
);
58+
return "Email Address already in use!";
6359
}
6460

6561
Company company = new Company();
@@ -77,15 +73,7 @@ public ResponseEntity<ApiResponse<UserRegistrationRequest.Response>> register(Us
7773
emailDetails.setMessageBody("Your account has been registered on our platform");
7874
emailService.sendEmail(emailDetails);
7975

80-
UserRegistrationRequest.Response response = new UserRegistrationRequest.Response(
81-
LocalDateTime.now(),
82-
UUID.randomUUID().toString(),
83-
true,
84-
"Company registered successfully",
85-
request.getName()
86-
);
87-
88-
return createSuccessResponse("Company registered successfully", response);
76+
return "Company registered successfully";
8977
}
9078

9179
public ResponseEntity<ApiResponse<SignInRequest.Response>> signIn(SignInRequest request) {

src/main/java/com/bitscoderdotcom/link_generator_system/security/service/UserDetailsServiceImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public UserDetails loadUserByUsername(String email) throws UsernameNotFoundExcep
3333
});
3434

3535
log.info("Found COMPANY user: {}", email);
36-
return buildUserDetails(company);
36+
return UserDetailsImpl.build(company);
3737
}
3838

3939
private UserDetails buildUserDetails(Company company) {

src/main/java/com/bitscoderdotcom/link_generator_system/service/service/InvoiceService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
import java.security.Principal;
99

1010
public interface InvoiceService {
11-
1211
ResponseEntity<ApiResponse<InvoiceDto.Response>> generateInvoice(InvoiceDto invoiceDto, Principal principal);
1312
ResponseEntity<String> processPayment(String linkId, String invoiceId);
1413
Invoice getInvoiceById(String id);
14+
1515
}

src/main/java/com/bitscoderdotcom/link_generator_system/service/service/serviceImpl/InvoiceServiceImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,8 @@ private String createMessageBody(Invoice invoice, PaymentLink paymentLink) {
152152
messageBody += "<hr />";
153153
messageBody += "<p>Please click the following link to view and pay your invoice: <a href=\"" +
154154
paymentLink.getUrl() + "\">" + paymentLink.getUrl() + "</a></p>";
155+
messageBody += "<p>LinkId for payment verification: " + paymentLink.getId() + "</p>";
156+
messageBody += "<p><strong>Please note:</strong> The LinkId and the InvoiceId are necessary for validating the payment when requested.</p>";
155157
messageBody += "<p>Thank you.</p>";
156158
messageBody += "</body></html>";
157159
return messageBody;

src/main/resources/templates/error.html

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,9 @@ <h1>Error</h1>
2828
<a href="/">Go Back</a>
2929
</div>
3030
<script>
31-
// Get the error message from the URL query string
3231
var urlParams = new URLSearchParams(window.location.search);
3332
var errorMessage = urlParams.get('error');
3433

35-
// Display the error message
3634
document.getElementById('errorMessage').textContent = errorMessage;
3735
</script>
3836
</body>

0 commit comments

Comments
 (0)