use of io.swagger.v3.oas.models.parameters.Parameter in project cas by apereo.
the class DuoSecurityUserAccountStatusEndpoint method fetchAccountStatus.
/**
* Fetch account status map.
*
* @param username the username
* @param providerId the provider id
* @return the map
*/
@ReadOperation(produces = MediaType.APPLICATION_JSON_VALUE)
@Operation(summary = "Fetch Duo Security user account status", parameters = { @Parameter(name = "username", required = true), @Parameter(name = "providerId") })
public Map<?, ?> fetchAccountStatus(@Selector final String username, @Nullable final String providerId) {
val resolver = SpringExpressionLanguageValueResolver.getInstance();
val results = new LinkedHashMap<>();
val providers = applicationContext.getBeansOfType(DuoSecurityMultifactorAuthenticationProvider.class).values();
providers.stream().filter(Objects::nonNull).map(DuoSecurityMultifactorAuthenticationProvider.class::cast).filter(provider -> StringUtils.isBlank(providerId) || provider.matches(providerId)).forEach(p -> {
val duoService = p.getDuoAuthenticationService();
val accountStatus = duoService.getUserAccount(username);
results.put(p.getId(), CollectionUtils.wrap("duoApiHost", resolver.resolve(duoService.getProperties().getDuoApiHost()), "name", p.getFriendlyName(), "accountStatus", accountStatus));
});
return results;
}
use of io.swagger.v3.oas.models.parameters.Parameter in project cas by apereo.
the class DuoSecurityPingEndpoint method pingDuo.
/**
* Ping duo and return availability result.
*
* @param providerId the provider id, if any.
* @return the map
*/
@ReadOperation(produces = MediaType.APPLICATION_JSON_VALUE)
@Operation(summary = "Ping Duo Security given the provider id", parameters = { @Parameter(name = "providerId") })
public Map<?, ?> pingDuo(@Nullable final String providerId) {
val resolver = SpringExpressionLanguageValueResolver.getInstance();
val results = new LinkedHashMap<>();
val providers = applicationContext.getBeansOfType(DuoSecurityMultifactorAuthenticationProvider.class).values();
providers.stream().filter(Objects::nonNull).map(DuoSecurityMultifactorAuthenticationProvider.class::cast).filter(provider -> StringUtils.isBlank(providerId) || provider.matches(providerId)).forEach(p -> {
val duoService = p.getDuoAuthenticationService();
val available = duoService.ping();
results.put(p.getId(), CollectionUtils.wrap("duoApiHost", resolver.resolve(duoService.getProperties().getDuoApiHost()), "name", p.getFriendlyName(), "availability", available));
});
return results;
}
use of io.swagger.v3.oas.models.parameters.Parameter 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);
}
use of io.swagger.v3.oas.models.parameters.Parameter in project cas by apereo.
the class SpringWebflowEndpoint method getReport.
/**
* Get SWF report.
*
* @param flowId the flow id
* @param stateId the state id
* @return JSON representing the current state of SWF.
*/
@ReadOperation
@Operation(summary = "Get Spring webflow report using an optional flow id", parameters = { @Parameter(name = "flowId"), @Parameter(name = "stateId") })
public Map<?, ?> getReport(@Nullable final String flowId, @Nullable final String stateId) {
val jsonMap = new LinkedHashMap<String, Object>();
val executionPlan = applicationContext.getBean(CasWebflowExecutionPlan.BEAN_NAME, CasWebflowExecutionPlan.class);
executionPlan.execute();
val map = applicationContext.getBeansOfType(FlowDefinitionRegistry.class);
map.forEach((k, value) -> Arrays.stream(value.getFlowDefinitionIds()).filter(currentId -> StringUtils.isBlank(flowId) || flowId.equalsIgnoreCase(currentId)).forEach(id -> {
val flowDefinition = (Flow) value.getFlowDefinition(id);
val flowDetails = new LinkedHashMap<String, Object>();
flowDetails.put("startState", flowDefinition.getStartState().getId());
val startActions = StreamSupport.stream(flowDefinition.getStartActionList().spliterator(), false).map(SpringWebflowEndpoint::convertActionToString).collect(Collectors.toList());
if (!startActions.isEmpty()) {
flowDetails.put("startActions", startActions);
}
val states = new LinkedHashMap<String, Map>();
Arrays.stream(flowDefinition.getStateIds()).filter(st -> StringUtils.isBlank(stateId) || RegexUtils.find(stateId, st)).forEach(st -> {
val stateMap = getStateDetails(flowDefinition, st);
states.put(st, stateMap);
});
flowDetails.put("states", states);
flowDetails.put("possibleOutcomes", flowDefinition.getPossibleOutcomes());
flowDetails.put("stateCount", flowDefinition.getStateCount());
var acts = StreamSupport.stream(flowDefinition.getEndActionList().spliterator(), false).map(SpringWebflowEndpoint::convertActionToString).collect(Collectors.toList());
if (!acts.isEmpty()) {
flowDetails.put("endActions", acts);
}
acts = StreamSupport.stream(flowDefinition.getGlobalTransitionSet().spliterator(), false).map(tr -> tr.getId() + " -> " + tr.getTargetStateId() + " @ " + tr.getExecutionCriteria().toString()).collect(Collectors.toList());
if (!acts.isEmpty()) {
flowDetails.put("globalTransitions", acts);
}
acts = Arrays.stream(flowDefinition.getExceptionHandlerSet().toArray()).map(Object::toString).collect(Collectors.toList());
if (!acts.isEmpty()) {
flowDetails.put("exceptionHandlers", acts);
}
val vars = Arrays.stream(flowDefinition.getVariables()).map(FlowVariable::getName).collect(Collectors.joining(","));
if (StringUtils.isNotBlank(vars)) {
flowDetails.put("variables", vars);
}
jsonMap.put(id, flowDetails);
}));
return jsonMap;
}
use of io.swagger.v3.oas.models.parameters.Parameter in project cas by apereo.
the class CasResolveAttributesReportEndpoint method resolvePrincipalAttributes.
/**
* Resolve principal attributes map.
*
* @param uid the uid
* @return the map
*/
@ReadOperation
@Operation(summary = "Resolve principal attributes for user", parameters = { @Parameter(name = "uid", required = true) })
public Map<String, Object> resolvePrincipalAttributes(@Selector final String uid) {
val p = defaultPrincipalResolver.getObject().resolve(new BasicIdentifiableCredential(uid));
val map = new HashMap<String, Object>();
map.put("uid", p.getId());
map.put("attributes", p.getAttributes());
return map;
}
Aggregations