use of io.swagger.v3.oas.models.Operation in project cas by apereo.
the class SingleSignOnSessionsEndpoint method destroySsoSessions.
/**
* Destroy sso sessions map.
*
* @param type the type
* @param username the username
* @param from the from
* @param count the count
* @param request the request
* @param response the response
* @return the map
*/
@Operation(summary = "Remove single sign-on session for type and user")
@DeleteMapping(produces = MediaType.APPLICATION_JSON_VALUE)
public Map<String, Object> destroySsoSessions(@Nullable @RequestParam(name = "type", required = false) final String type, @Nullable @RequestParam(name = "username", required = false) final String username, @RequestParam(name = "from", required = false, defaultValue = "0") final long from, @RequestParam(name = "count", required = false, defaultValue = "1000") final long count, final HttpServletRequest request, final HttpServletResponse response) {
if (StringUtils.isBlank(username) && StringUtils.isBlank(type)) {
return Map.of(STATUS, HttpServletResponse.SC_BAD_REQUEST);
}
if (StringUtils.isNotBlank(username)) {
val sessionsMap = new HashMap<String, Object>(1);
val tickets = centralAuthenticationService.getObject().getTickets(ticket -> ticket instanceof TicketGrantingTicket && ((TicketGrantingTicket) ticket).getAuthentication().getPrincipal().getId().equalsIgnoreCase(username));
tickets.forEach(ticket -> sessionsMap.put(ticket.getId(), destroySsoSession(ticket.getId(), request, response)));
return sessionsMap;
}
val sessionsMap = new HashMap<String, Object>();
val option = SsoSessionReportOptions.valueOf(type);
val collection = getActiveSsoSessions(option, username, from, count);
collection.stream().map(sso -> sso.get(SsoSessionAttributeKeys.TICKET_GRANTING_TICKET.getAttributeKey()).toString()).forEach(ticketGrantingTicket -> destroySsoSession(ticketGrantingTicket, request, response));
sessionsMap.put(STATUS, HttpServletResponse.SC_OK);
return sessionsMap;
}
use of io.swagger.v3.oas.models.Operation in project cas by apereo.
the class StatisticsEndpoint method handle.
/**
* Gets availability times of the server.
*
* @return the availability
*/
@ReadOperation
@Operation(summary = "Get a report of CAS statistics")
public Map<String, Object> handle() {
val model = new HashMap<String, Object>();
val diff = Duration.between(this.upTimeStartDate, ZonedDateTime.now(ZoneOffset.UTC));
model.put("upTime", diff.getSeconds());
val runtime = Runtime.getRuntime();
model.put("totalMemory", FileUtils.byteCountToDisplaySize(runtime.totalMemory()));
model.put("maxMemory", FileUtils.byteCountToDisplaySize(runtime.maxMemory()));
model.put("freeMemory", FileUtils.byteCountToDisplaySize(runtime.freeMemory()));
val unexpiredTgts = new AtomicInteger();
val unexpiredSts = new AtomicInteger();
val expiredTgts = new AtomicInteger();
val expiredSts = new AtomicInteger();
val tickets = this.centralAuthenticationService.getObject().getTickets(ticket -> true);
tickets.forEach(Unchecked.consumer(ticket -> {
if (ticket instanceof ServiceTicket) {
if (ticket.isExpired()) {
this.centralAuthenticationService.getObject().deleteTicket(ticket.getId());
expiredSts.incrementAndGet();
} else {
unexpiredSts.incrementAndGet();
}
} else {
if (ticket.isExpired()) {
this.centralAuthenticationService.getObject().deleteTicket(ticket.getId());
expiredTgts.incrementAndGet();
} else {
unexpiredTgts.incrementAndGet();
}
}
}));
model.put("unexpiredTgts", unexpiredTgts);
model.put("unexpiredSts", unexpiredSts);
model.put("expiredTgts", expiredTgts);
model.put("expiredSts", expiredSts);
return model;
}
use of io.swagger.v3.oas.models.Operation in project cas by apereo.
the class AuditLogEndpoint method getAuditLog.
/**
* Gets Audit log for passed interval.
*
* @param interval - Interval subtracted from current time
* @return the auditlog
*/
@ReadOperation
@SuppressWarnings("JavaUtilDate")
@Operation(summary = "Provide a report of the audit log using a given interval", parameters = { @Parameter(name = "interval", description = "Accepts the duration syntax, such as PT1H") })
public Set<AuditActionContext> getAuditLog(@Selector final String interval) {
if (StringUtils.isBlank(interval)) {
val sinceDate = LocalDate.now(ZoneId.systemDefault()).minusDays(casProperties.getAudit().getEngine().getNumberOfDaysInHistory());
return auditTrailManager.getObject().getAuditRecordsSince(sinceDate);
}
val duration = Beans.newDuration(interval);
val sinceTime = new Date(new Date().getTime() - duration.toMillis());
val days = duration.toDays();
val sinceDate = LocalDate.now(ZoneId.systemDefault()).minusDays(days + 1);
return auditTrailManager.getObject().getAuditRecordsSince(sinceDate).stream().filter(a -> a.getWhenActionWasPerformed().after(sinceTime)).collect(Collectors.toSet());
}
use of io.swagger.v3.oas.models.Operation in project cas by apereo.
the class CasReleaseAttributesReportEndpoint method releaseAttributes.
/**
* Method that accepts a JSON body through a POST method to receive user credentials and only returns a
* map of attributes released for the authenticated user.
*
* @param username - the username
* @param password - the password
* @param service - the service id
* @return - the map
*/
@WriteOperation
@Operation(summary = "Get collection of released attributes for the user and application", parameters = { @Parameter(name = "username", required = true), @Parameter(name = "password", required = true), @Parameter(name = "service", required = true) })
public Map<String, Object> releaseAttributes(final String username, final String password, final String service) {
val map = releasePrincipalAttributes(username, password, service);
val assertion = (ImmutableAssertion) map.get("assertion");
return Map.of("uid", username, "attributes", assertion.getPrimaryAuthentication().getPrincipal().getAttributes());
}
use of io.swagger.v3.oas.models.Operation in project cas by apereo.
the class SingleSignOnSessionStatusEndpoint method ssoStatus.
/**
* Sso status response entity.
*
* @param tgc the tgc
* @param request the request
* @return the response entity
*/
@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
@Operation(summary = "Get current status of single sign-on", parameters = { @Parameter(name = "tgc", required = false), @Parameter(name = "request", required = false) })
public ResponseEntity<Map<?, ?>> ssoStatus(@RequestParam(name = "tgc", required = false, defaultValue = StringUtils.EMPTY) final String tgc, final HttpServletRequest request) {
val tgtId = StringUtils.isNotBlank(tgc) ? ticketGrantingTicketCookieGenerator.getCasCookieValueManager().obtainCookieValue(tgc, request) : ticketGrantingTicketCookieGenerator.retrieveCookieValue(request);
if (StringUtils.isBlank(tgtId)) {
return ResponseEntity.badRequest().build();
}
val auth = this.ticketRegistrySupport.getAuthenticationFrom(tgtId);
if (auth == null) {
return ResponseEntity.badRequest().build();
}
val ticketState = this.ticketRegistrySupport.getTicket(tgtId);
val body = CollectionUtils.wrap("principal", auth.getPrincipal().getId(), "authenticationDate", auth.getAuthenticationDate(), "ticketGrantingTicketCreationTime", ticketState.getCreationTime(), "ticketGrantingTicketPreviousTimeUsed", ticketState.getPreviousTimeUsed(), "ticketGrantingTicketLastTimeUsed", ticketState.getLastTimeUsed());
return ResponseEntity.ok(body);
}
Aggregations