diff --git a/src/main/java/org/example/alfs/config/SecurityConfig.java b/src/main/java/org/example/alfs/config/SecurityConfig.java index 9a17a11..0b61490 100644 --- a/src/main/java/org/example/alfs/config/SecurityConfig.java +++ b/src/main/java/org/example/alfs/config/SecurityConfig.java @@ -43,6 +43,10 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti .requestMatchers("/auth/signup").permitAll() .requestMatchers("/auth/hash").permitAll() .requestMatchers("/h2-console/**").permitAll() + + //allow access to endpoints during development + .requestMatchers("/create", "/tickets/**", "/view/**").permitAll() + .requestMatchers("/css/**", "/js/**", "/images/**", "/static/**").permitAll() .requestMatchers("/login", "/login-form").permitAll() .requestMatchers("/signup", "/signup-form").permitAll() .anyRequest().authenticated() diff --git a/src/main/java/org/example/alfs/controllers/TicketController.java b/src/main/java/org/example/alfs/controllers/TicketController.java index 5e47799..7ff0a32 100644 --- a/src/main/java/org/example/alfs/controllers/TicketController.java +++ b/src/main/java/org/example/alfs/controllers/TicketController.java @@ -15,7 +15,7 @@ //TODO: Decide final routes and redirects @Controller -@RequestMapping +@RequestMapping("/tickets") public class TicketController { private final TicketService ticketService; @@ -34,23 +34,23 @@ public String createNewTicketForm(Model model) { return "create"; } - //TODO REDIRECT, WHERE?? @PreAuthorize("hasRole('REPORTER')") // should change later for anonymous access @PostMapping("/create") - public String createNewTicket(@ModelAttribute("ticket") @Valid TicketCreateDTO ticketCreateDTO, BindingResult bindingResult) { + public String createNewTicket(@ModelAttribute("ticket") @Valid TicketCreateDTO ticketCreateDTO, BindingResult bindingResult, Model model) { if (bindingResult.hasErrors()) { + model.addAttribute("ticket", ticketCreateDTO); return "create"; } - ticketService.createNewTicket(ticketCreateDTO); + TicketViewDTO ticket = ticketService.createNewTicket(ticketCreateDTO); - return "redirect:/home"; + return "redirect:/tickets/" + ticket.getId(); } //view ticket by token - //TODO, FIX SO ANONYMOUS USERS CAN USE - @GetMapping("/view/token/{token}") + + @GetMapping("/token/{token}") public String viewTicketByToken(@PathVariable String token, Model model) { TicketViewDTO ticket = ticketService.getTicketByToken(token); @@ -61,7 +61,7 @@ public String viewTicketByToken(@PathVariable String token, Model model) { //view ticket by id @PreAuthorize("hasAnyRole('ADMIN','INVESTIGATOR','REPORTER')") - @GetMapping("/view/id/{id}") + @GetMapping("/{id}") public String viewTicketById(@PathVariable Long id, Model model) { TicketViewDTO ticket = ticketService.getTicketById(id); @@ -78,7 +78,7 @@ public String assignTicket(@PathVariable Long id, @Valid @ModelAttribute TicketA ticketService.assignInvestigator(id, dto.getInvestigatorId()); - return "redirect:/view/id/" + id; + return "redirect:/tickets/" + id; } //update status @@ -88,7 +88,7 @@ public String updateStatus(@PathVariable Long id, @Valid @ModelAttribute TicketS ticketService.updateTicketStatus(id, dto.getStatus()); - return "redirect:/view/id/" + id; + return "redirect:/tickets/" + id; } diff --git a/src/main/jte/.jteroot b/src/main/jte/.jteroot new file mode 100644 index 0000000..e69de29 diff --git a/src/main/jte/create.jte b/src/main/jte/create.jte new file mode 100644 index 0000000..02fc472 --- /dev/null +++ b/src/main/jte/create.jte @@ -0,0 +1,24 @@ +@param org.example.alfs.dto.ticket.TicketCreateDTO ticket + +@template.layout(title = "Create Ticket", content = @` +

Create Ticket

+ +
+ + + + + +
+`) \ No newline at end of file diff --git a/src/main/jte/layout.jte b/src/main/jte/layout.jte new file mode 100644 index 0000000..1202e22 --- /dev/null +++ b/src/main/jte/layout.jte @@ -0,0 +1,52 @@ +@param String title +@param gg.jte.Content content + + + + + + + + ${title} + + + + + + + + + + + +
+
+

+ ALFS + whistleblower system +

+ + +
+
+ + +
+ + ${content} + +
+ + + + + + \ No newline at end of file diff --git a/src/main/jte/placeholder.jte b/src/main/jte/placeholder.jte deleted file mode 100644 index 666c406..0000000 --- a/src/main/jte/placeholder.jte +++ /dev/null @@ -1 +0,0 @@ -<%-- This is a placeholder jte file for CI test --%> \ No newline at end of file diff --git a/src/main/jte/view.jte b/src/main/jte/view.jte new file mode 100644 index 0000000..60b2417 --- /dev/null +++ b/src/main/jte/view.jte @@ -0,0 +1,23 @@ +@param org.example.alfs.dto.ticket.TicketViewDTO ticket + +@template.layout(title = "View Ticket", content = @` +

Ticket

+ +
+
+ ID: ${ticket.getId()} +
+ +
+ Title: ${ticket.getTitle()} +
+ +
+ Description: ${ticket.getDescription()} +
+ +
+ Status: ${ticket.getStatus()} +
+
+`) \ No newline at end of file diff --git a/src/main/resources/static/css/style.css b/src/main/resources/static/css/style.css new file mode 100644 index 0000000..93091c2 --- /dev/null +++ b/src/main/resources/static/css/style.css @@ -0,0 +1,27 @@ + +:root { + --state-blue: #1a2b49; + --state-gold: #b39359; + --state-gray: #f4f4f4; +} +body { + font-family: Georgia, serif; + background-color: var(--state-gray); + color: #333; +} +.header-border { + border-bottom: 4px solid var(--state-gold); +} +.btn-primary { + background-color: var(--state-blue); + color: white; + transition: all 0.3s ease; +} +.btn-primary:hover { + background-color: #2c4471; +} +.card { + background: white; + border: 1px solid #ddd; + box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); +}