Skip to content

Commit

Permalink
checkCategoryOwnershipAndTicket
Browse files Browse the repository at this point in the history
  • Loading branch information
syjer committed Dec 13, 2023
1 parent 03747df commit d5eb3fd
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -674,6 +674,7 @@ public boolean toggleTicketLocking(@PathVariable("eventName") String eventName,
@PathVariable("categoryId") int categoryId,
@PathVariable("ticketId") int ticketId,
Principal principal) {
accessService.checkCategoryOwnershipAndTicket(principal, eventName, categoryId, ticketId);
return eventManager.toggleTicketLocking(eventName, categoryId, ticketId, principal.getName());
}

Expand Down
8 changes: 8 additions & 0 deletions src/main/java/alfio/manager/AccessService.java
Original file line number Diff line number Diff line change
Expand Up @@ -455,4 +455,12 @@ public void checkEventOwnershipAndTicketAdditionalFieldIds(Principal principal,
throw new AccessDeniedException();
}
}

public void checkCategoryOwnershipAndTicket(Principal principal, String eventName, int categoryId, int ticketId) {
checkCategoryOwnership(principal, eventName, categoryId);
if (!ticketRepository.isInCategory(ticketId, categoryId)) {
log.warn("Ticket with id {} is not in category id {}", ticketId, categoryId);
throw new AccessDeniedException();
}
}
}
1 change: 1 addition & 0 deletions src/main/java/alfio/manager/EventManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -956,6 +956,7 @@ public AdditionalService getAdditionalServiceById(int id, int eventId) {
public boolean toggleTicketLocking(String eventName, int categoryId, int ticketId, String username) {
EventAndOrganizationId event = getEventAndOrganizationId(eventName, username);
checkOwnership(event, username, event.getOrganizationId());
// FIXME: can search directly by id
var existingCategory = ticketCategoryRepository.findAllTicketCategories(event.getId()).stream().filter(tc -> tc.getId() == categoryId).findFirst();
if(existingCategory.isPresent()) {
Ticket ticket = ticketRepository.findById(ticketId, categoryId);
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/alfio/repository/TicketRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,9 @@ int updateTicketPrice(@Bind("ids") List<Integer> ids,
@Query("select * from ticket where id = :id and category_id = :categoryId")
Ticket findById(@Bind("id") int ticketId, @Bind("categoryId") int categoryId);

@Query("select exists(select id from ticket where id = :id and category_id = :categoryId)")
boolean isInCategory(@Bind("id") int id, @Bind("categoryId") int categoryId);

@Query("select * from ticket where id in (:ids)")
List<Ticket> findByIds(@Bind("ids") List<Integer> ticketIds);

Expand Down

0 comments on commit d5eb3fd

Please sign in to comment.