From ced8f5fdf8e65e68d0ffea58b6abf6e377335f3c Mon Sep 17 00:00:00 2001 From: Hyoung kim Date: Mon, 27 Aug 2018 15:32:26 +0900 Subject: [PATCH 1/7] Update JpaTicketRegistry.java Maybe this is right to return ticket expired. I tested and all the ticket expired were deleted from database. --- .../java/org/apereo/cas/ticket/registry/JpaTicketRegistry.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/support/cas-server-support-jpa-ticket-registry/src/main/java/org/apereo/cas/ticket/registry/JpaTicketRegistry.java b/support/cas-server-support-jpa-ticket-registry/src/main/java/org/apereo/cas/ticket/registry/JpaTicketRegistry.java index 08e738fd5721..0610a07537d9 100644 --- a/support/cas-server-support-jpa-ticket-registry/src/main/java/org/apereo/cas/ticket/registry/JpaTicketRegistry.java +++ b/support/cas-server-support-jpa-ticket-registry/src/main/java/org/apereo/cas/ticket/registry/JpaTicketRegistry.java @@ -89,9 +89,8 @@ public Ticket getTicket(final String ticketId) { val result = query.getSingleResult(); if (result != null && result.isExpired()) { LOGGER.debug("Ticket [{}] has expired and will be removed from the database", result.getId()); - return null; + return result; } - return result; } catch (final Exception e) { LOGGER.error("Error getting ticket [{}] from registry.", ticketId, e); } From 1c617c197f86f183fcf5282891327e2a8f4c0fb2 Mon Sep 17 00:00:00 2001 From: Hyoung kim Date: Tue, 28 Aug 2018 15:47:32 +0900 Subject: [PATCH 2/7] Update AbstractTicketRegistry.java change deleteLinkedProxyGrantingTickets, deleteProxyGrantingTicketFromParent methods protected to use from --- .../apereo/cas/ticket/registry/AbstractTicketRegistry.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/cas-server-core-tickets-api/src/main/java/org/apereo/cas/ticket/registry/AbstractTicketRegistry.java b/core/cas-server-core-tickets-api/src/main/java/org/apereo/cas/ticket/registry/AbstractTicketRegistry.java index 7a33ff67c810..d0a5bd95e1bd 100644 --- a/core/cas-server-core-tickets-api/src/main/java/org/apereo/cas/ticket/registry/AbstractTicketRegistry.java +++ b/core/cas-server-core-tickets-api/src/main/java/org/apereo/cas/ticket/registry/AbstractTicketRegistry.java @@ -130,7 +130,7 @@ protected int deleteTickets(final Stream tickets) { return tickets.mapToInt(this::deleteTicket).sum(); } - private void deleteLinkedProxyGrantingTickets(final AtomicInteger count, final TicketGrantingTicket tgt) { + protected void deleteLinkedProxyGrantingTickets(final AtomicInteger count, final TicketGrantingTicket tgt) { val pgts = new LinkedHashSet<>(tgt.getProxyGrantingTickets().keySet()); val hasPgts = !pgts.isEmpty(); count.getAndAdd(deleteTickets(pgts)); @@ -141,7 +141,7 @@ private void deleteLinkedProxyGrantingTickets(final AtomicInteger count, final T } } - private void deleteProxyGrantingTicketFromParent(final ProxyGrantingTicket ticket) { + protected void deleteProxyGrantingTicketFromParent(final ProxyGrantingTicket ticket) { val thePgt = ticket; thePgt.getTicketGrantingTicket().getProxyGrantingTickets().remove(thePgt.getId()); updateTicket(thePgt.getTicketGrantingTicket()); From 90b93213267f88fe2d45830b452e9ff5e0825946 Mon Sep 17 00:00:00 2001 From: Hyoung kim Date: Tue, 28 Aug 2018 15:55:32 +0900 Subject: [PATCH 3/7] Update JpaTicketRegistry.java 1. add deleteTicket method for JpaTicketRegistry ( bcuz previously it's not remove expired ticket ) 2. add getTicket method to get expired ticket to remove --- .../ticket/registry/JpaTicketRegistry.java | 63 ++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/support/cas-server-support-jpa-ticket-registry/src/main/java/org/apereo/cas/ticket/registry/JpaTicketRegistry.java b/support/cas-server-support-jpa-ticket-registry/src/main/java/org/apereo/cas/ticket/registry/JpaTicketRegistry.java index 0610a07537d9..bf6cc96f985b 100644 --- a/support/cas-server-support-jpa-ticket-registry/src/main/java/org/apereo/cas/ticket/registry/JpaTicketRegistry.java +++ b/support/cas-server-support-jpa-ticket-registry/src/main/java/org/apereo/cas/ticket/registry/JpaTicketRegistry.java @@ -89,13 +89,41 @@ public Ticket getTicket(final String ticketId) { val result = query.getSingleResult(); if (result != null && result.isExpired()) { LOGGER.debug("Ticket [{}] has expired and will be removed from the database", result.getId()); - return result; + return null; } + return result; } catch (final Exception e) { LOGGER.error("Error getting ticket [{}] from registry.", ticketId, e); } return null; } + + /** + * + * Get ticket nevertheless it was expired. + * + */ + protected Ticket getTicket(final String ticketId, final boolean getIfExpired) { + if(!getIfExpired) { + return getTicket(ticketId); + } + else { + try { + final TicketDefinition tkt = ticketCatalog.find(ticketId); + final String sql = String.format("select t from %s t where t.id = :id", getTicketEntityName(tkt)); + final TypedQuery query = entityManager.createQuery(sql, tkt.getImplementationClass()); + query.setParameter("id", ticketId); + query.setLockMode(this.lockType); + final Ticket result = query.getSingleResult(); + if (result != null) { + return result; + } + } catch (final Exception e) { + LOGGER.error("Error getting ticket [{}] from registry.", ticketId, e); + } + return null; + } + } @Override public Collection getTickets() { @@ -150,6 +178,39 @@ public long serviceTicketCount() { val query = this.entityManager.createQuery(sql); return countToLong(query.getSingleResult()); } + + @Override + public int deleteTicket(final String ticketId) { + final AtomicInteger count = new AtomicInteger(0); + + try { + final Ticket ticket = getTicket(ticketId, true); + + if (ticket instanceof TicketGrantingTicket) { + LOGGER.debug("Removing children of ticket [{}] from the registry.", ticket.getId()); + final TicketGrantingTicket tgt = (TicketGrantingTicket) ticket; + count.addAndGet(deleteChildren(tgt)); + + if (ticket instanceof ProxyGrantingTicket) { + deleteProxyGrantingTicketFromParent((ProxyGrantingTicket) ticket); + } else { + deleteLinkedProxyGrantingTickets(count, tgt); + } + } + LOGGER.debug("Removing ticket [{}] from the registry.", ticket); + if (deleteSingleTicket(ticketId)) { + count.incrementAndGet(); + } + } + catch (NoResultException e) { + LOGGER.error("Error getting ticket [{}] from registry.", ticketId, e); + } + catch (Exception e) { + LOGGER.error("Error deleting ticket [{}] from registry.", ticketId, e); + } + + return count.intValue(); + } @Override public boolean deleteSingleTicket(final String ticketId) { From dc348b74e163fa26f48cbf7ce94c4f213a379659 Mon Sep 17 00:00:00 2001 From: Hyoung kim Date: Tue, 28 Aug 2018 16:32:21 +0900 Subject: [PATCH 4/7] Update JpaTicketRegistry.java 1. add Javadoc comment 2. check compile error --- .../ticket/registry/JpaTicketRegistry.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/support/cas-server-support-jpa-ticket-registry/src/main/java/org/apereo/cas/ticket/registry/JpaTicketRegistry.java b/support/cas-server-support-jpa-ticket-registry/src/main/java/org/apereo/cas/ticket/registry/JpaTicketRegistry.java index bf6cc96f985b..5475aa815bfd 100644 --- a/support/cas-server-support-jpa-ticket-registry/src/main/java/org/apereo/cas/ticket/registry/JpaTicketRegistry.java +++ b/support/cas-server-support-jpa-ticket-registry/src/main/java/org/apereo/cas/ticket/registry/JpaTicketRegistry.java @@ -5,6 +5,7 @@ import org.apereo.cas.ticket.TicketCatalog; import org.apereo.cas.ticket.TicketDefinition; import org.apereo.cas.ticket.TicketGrantingTicket; +import org.apereo.cas.ticket.proxy.ProxyGrantingTicket; import lombok.extern.slf4j.Slf4j; import lombok.val; @@ -20,6 +21,7 @@ import javax.persistence.TypedQuery; import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -99,9 +101,11 @@ public Ticket getTicket(final String ticketId) { } /** - * * Get ticket nevertheless it was expired. * + * @param ticketId the ticket id + * @param getIfExpired check to get expired ticket + * @return the int */ protected Ticket getTicket(final String ticketId, final boolean getIfExpired) { if(!getIfExpired) { @@ -109,12 +113,12 @@ protected Ticket getTicket(final String ticketId, final boolean getIfExpired) { } else { try { - final TicketDefinition tkt = ticketCatalog.find(ticketId); - final String sql = String.format("select t from %s t where t.id = :id", getTicketEntityName(tkt)); - final TypedQuery query = entityManager.createQuery(sql, tkt.getImplementationClass()); + val tkt = ticketCatalog.find(ticketId); + val sql = String.format("select t from %s t where t.id = :id", getTicketEntityName(tkt)); + val query = entityManager.createQuery(sql, tkt.getImplementationClass()); query.setParameter("id", ticketId); query.setLockMode(this.lockType); - final Ticket result = query.getSingleResult(); + val result = query.getSingleResult(); if (result != null) { return result; } @@ -181,14 +185,14 @@ public long serviceTicketCount() { @Override public int deleteTicket(final String ticketId) { - final AtomicInteger count = new AtomicInteger(0); + val count = new AtomicInteger(0); try { - final Ticket ticket = getTicket(ticketId, true); + val ticket = getTicket(ticketId, true); if (ticket instanceof TicketGrantingTicket) { LOGGER.debug("Removing children of ticket [{}] from the registry.", ticket.getId()); - final TicketGrantingTicket tgt = (TicketGrantingTicket) ticket; + val tgt = (TicketGrantingTicket) ticket; count.addAndGet(deleteChildren(tgt)); if (ticket instanceof ProxyGrantingTicket) { @@ -202,9 +206,6 @@ public int deleteTicket(final String ticketId) { count.incrementAndGet(); } } - catch (NoResultException e) { - LOGGER.error("Error getting ticket [{}] from registry.", ticketId, e); - } catch (Exception e) { LOGGER.error("Error deleting ticket [{}] from registry.", ticketId, e); } From ff4c5aede17bc07db5c34c1af9ef58f37693eb0a Mon Sep 17 00:00:00 2001 From: Hyoung kim Date: Tue, 28 Aug 2018 16:38:00 +0900 Subject: [PATCH 5/7] Update AbstractTicketRegistry.java add javadoc comment --- .../ticket/registry/AbstractTicketRegistry.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/core/cas-server-core-tickets-api/src/main/java/org/apereo/cas/ticket/registry/AbstractTicketRegistry.java b/core/cas-server-core-tickets-api/src/main/java/org/apereo/cas/ticket/registry/AbstractTicketRegistry.java index d0a5bd95e1bd..8dbe4f4b3886 100644 --- a/core/cas-server-core-tickets-api/src/main/java/org/apereo/cas/ticket/registry/AbstractTicketRegistry.java +++ b/core/cas-server-core-tickets-api/src/main/java/org/apereo/cas/ticket/registry/AbstractTicketRegistry.java @@ -130,6 +130,12 @@ protected int deleteTickets(final Stream tickets) { return tickets.mapToInt(this::deleteTicket).sum(); } + /** + * Delete linked pgts + * + * @param count the total number of deleted tickets + * @param tgt ticket granting ticket to get PGT + */ protected void deleteLinkedProxyGrantingTickets(final AtomicInteger count, final TicketGrantingTicket tgt) { val pgts = new LinkedHashSet<>(tgt.getProxyGrantingTickets().keySet()); val hasPgts = !pgts.isEmpty(); @@ -140,7 +146,13 @@ protected void deleteLinkedProxyGrantingTickets(final AtomicInteger count, final updateTicket(tgt); } } - + + /** + * Delete pgt from parent + * + * @param count the total number of deleted tickets + * @param ticket pgt to remove + */ protected void deleteProxyGrantingTicketFromParent(final ProxyGrantingTicket ticket) { val thePgt = ticket; thePgt.getTicketGrantingTicket().getProxyGrantingTickets().remove(thePgt.getId()); From b6115bcc5132ee6ada0a0eabff16cdd5e8544d10 Mon Sep 17 00:00:00 2001 From: Hyoung kim Date: Tue, 28 Aug 2018 16:58:52 +0900 Subject: [PATCH 6/7] Update AbstractTicketRegistry.java change for checkstyle --- .../apereo/cas/ticket/registry/AbstractTicketRegistry.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/core/cas-server-core-tickets-api/src/main/java/org/apereo/cas/ticket/registry/AbstractTicketRegistry.java b/core/cas-server-core-tickets-api/src/main/java/org/apereo/cas/ticket/registry/AbstractTicketRegistry.java index 8dbe4f4b3886..4958783545c2 100644 --- a/core/cas-server-core-tickets-api/src/main/java/org/apereo/cas/ticket/registry/AbstractTicketRegistry.java +++ b/core/cas-server-core-tickets-api/src/main/java/org/apereo/cas/ticket/registry/AbstractTicketRegistry.java @@ -131,7 +131,7 @@ protected int deleteTickets(final Stream tickets) { } /** - * Delete linked pgts + * Delete linked pgts. * * @param count the total number of deleted tickets * @param tgt ticket granting ticket to get PGT @@ -148,9 +148,8 @@ protected void deleteLinkedProxyGrantingTickets(final AtomicInteger count, final } /** - * Delete pgt from parent + * Delete pgt from parent. * - * @param count the total number of deleted tickets * @param ticket pgt to remove */ protected void deleteProxyGrantingTicketFromParent(final ProxyGrantingTicket ticket) { From d05055db3d8ea52813be6c165b114e84dc7ed646 Mon Sep 17 00:00:00 2001 From: Hyoung kim Date: Tue, 28 Aug 2018 17:20:31 +0900 Subject: [PATCH 7/7] Update JpaTicketRegistry.java check checkstyle --- .../org/apereo/cas/ticket/registry/JpaTicketRegistry.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/support/cas-server-support-jpa-ticket-registry/src/main/java/org/apereo/cas/ticket/registry/JpaTicketRegistry.java b/support/cas-server-support-jpa-ticket-registry/src/main/java/org/apereo/cas/ticket/registry/JpaTicketRegistry.java index 5475aa815bfd..b90d6433f085 100644 --- a/support/cas-server-support-jpa-ticket-registry/src/main/java/org/apereo/cas/ticket/registry/JpaTicketRegistry.java +++ b/support/cas-server-support-jpa-ticket-registry/src/main/java/org/apereo/cas/ticket/registry/JpaTicketRegistry.java @@ -108,10 +108,9 @@ public Ticket getTicket(final String ticketId) { * @return the int */ protected Ticket getTicket(final String ticketId, final boolean getIfExpired) { - if(!getIfExpired) { + if (!getIfExpired) { return getTicket(ticketId); - } - else { + } else { try { val tkt = ticketCatalog.find(ticketId); val sql = String.format("select t from %s t where t.id = :id", getTicketEntityName(tkt)); @@ -205,8 +204,7 @@ public int deleteTicket(final String ticketId) { if (deleteSingleTicket(ticketId)) { count.incrementAndGet(); } - } - catch (Exception e) { + } catch (final Exception e) { LOGGER.error("Error deleting ticket [{}] from registry.", ticketId, e); }