package org.apereo.cas.trusted.web;
import org.apereo.cas.configuration.model.support.mfa.MultifactorAuthenticationProperties;
import org.apereo.cas.trusted.authentication.api.MultifactorAuthenticationTrustRecord;
import org.apereo.cas.trusted.authentication.api.MultifactorAuthenticationTrustStorage;
import org.apereo.cas.util.DateTimeUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDate;
import java.util.Set;
/**
* This is {@link MultifactorAuthenticationTrustController}.
*
* @author Misagh Moayyed
* @since 5.0.0
*/
@RestController("mfaTrustController")
@RequestMapping(value="/status/trustedDevices")
public class MultifactorAuthenticationTrustController {
private final MultifactorAuthenticationTrustStorage storage;
private final MultifactorAuthenticationProperties.Trusted trustedProperties;
public MultifactorAuthenticationTrustController(final MultifactorAuthenticationTrustStorage storage,
final MultifactorAuthenticationProperties.Trusted trustedProperties) {
this.storage = storage;
this.trustedProperties = trustedProperties;
}
/**
* Gets all trusted devices.
*
* @param response the response
* @param request the request
* @return the all trusted devices
* @throws Exception the exception
*/
@GetMapping
@ResponseBody
public Set<MultifactorAuthenticationTrustRecord> getAllTrustedDevices(final HttpServletResponse response,
final HttpServletRequest request) throws Exception {
final LocalDate onOrAfter = LocalDate.now().minus(trustedProperties.getExpiration(),
DateTimeUtils.toChronoUnit(trustedProperties.getTimeUnit()));
return storage.get(onOrAfter);
}
}