refactor: 💡 Removed PerunACR and PerunDeviceACR
Removed models and repositories, removed scheduled tasks tied to these classes. Acr is now instead stored together with the User authenticationpull/1580/head
parent
7155e4adf5
commit
f85cd5c1c5
|
@ -4,8 +4,6 @@ import cz.muni.ics.oauth2.model.AuthorizationCodeEntity;
|
||||||
import cz.muni.ics.oauth2.model.DeviceCode;
|
import cz.muni.ics.oauth2.model.DeviceCode;
|
||||||
import cz.muni.ics.oauth2.model.OAuth2AccessTokenEntity;
|
import cz.muni.ics.oauth2.model.OAuth2AccessTokenEntity;
|
||||||
import cz.muni.ics.oauth2.model.OAuth2RefreshTokenEntity;
|
import cz.muni.ics.oauth2.model.OAuth2RefreshTokenEntity;
|
||||||
import cz.muni.ics.openid.connect.models.Acr;
|
|
||||||
import cz.muni.ics.openid.connect.models.DeviceCodeAcr;
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import javax.persistence.EntityManager;
|
import javax.persistence.EntityManager;
|
||||||
|
@ -135,38 +133,4 @@ public class CustomClearTasks {
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int clearExpiredAcrs(long timeout) {
|
|
||||||
manager.flush();
|
|
||||||
manager.clear();
|
|
||||||
int count = 0;
|
|
||||||
Query query = manager.createNamedQuery(Acr.DELETE_EXPIRED);
|
|
||||||
query.setParameter(Acr.PARAM_EXPIRES_AT, Instant.now().toEpochMilli());
|
|
||||||
if (timeout > 0) {
|
|
||||||
query.setHint("javax.persistence.query.timeout", timeout);
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
count += query.executeUpdate();
|
|
||||||
} catch (QueryTimeoutException e) {
|
|
||||||
// this is OK
|
|
||||||
}
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int clearExpiredDeviceCodeAcrs(long timeout) {
|
|
||||||
manager.flush();
|
|
||||||
manager.clear();
|
|
||||||
int count = 0;
|
|
||||||
Query query = manager.createNamedQuery(DeviceCodeAcr.DELETE_EXPIRED);
|
|
||||||
query.setParameter(DeviceCodeAcr.PARAM_EXPIRES_AT, Instant.now().toEpochMilli());
|
|
||||||
if (timeout > 0) {
|
|
||||||
query.setHint("javax.persistence.query.timeout", timeout);
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
count += query.executeUpdate();
|
|
||||||
} catch (QueryTimeoutException e) {
|
|
||||||
// this is OK
|
|
||||||
}
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -105,34 +105,4 @@ public class CustomTaskScheduler {
|
||||||
log.info("clearExpiredDeviceCodes took {}ms, deleted {} records", execution, count);
|
log.info("clearExpiredDeviceCodes took {}ms, deleted {} records", execution, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional(value = "defaultTransactionManager")
|
|
||||||
@Scheduled(fixedDelay = 60 * ONE_MINUTE, initialDelay = 48 * ONE_MINUTE)
|
|
||||||
@SchedulerLock(name = "clearExpiredAcrs", lockAtMostFor = "3590s", lockAtLeastFor = "3590s")
|
|
||||||
public void clearExpiredAcrs() {
|
|
||||||
try {
|
|
||||||
LockAssert.assertLocked();
|
|
||||||
} catch (IllegalArgumentException e) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
long start = System.currentTimeMillis();
|
|
||||||
int count = this.customClearTasks.clearExpiredAcrs(TimeUnit.MINUTES.toMillis(15));
|
|
||||||
long execution = System.currentTimeMillis() - start;
|
|
||||||
log.info("clearExpiredAcrs took {}ms, deleted {} records", execution, count);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transactional(value = "defaultTransactionManager")
|
|
||||||
@Scheduled(fixedDelay = 60 * ONE_MINUTE, initialDelay = 48 * ONE_MINUTE)
|
|
||||||
@SchedulerLock(name = "clearExpiredDeviceAcrs", lockAtMostFor = "3590s", lockAtLeastFor = "3590s")
|
|
||||||
public void clearExpiredDeviceAcrs() {
|
|
||||||
try {
|
|
||||||
LockAssert.assertLocked();
|
|
||||||
} catch (IllegalArgumentException e) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
long start = System.currentTimeMillis();
|
|
||||||
int count = this.customClearTasks.clearExpiredAcrs(TimeUnit.MINUTES.toMillis(15));
|
|
||||||
long execution = System.currentTimeMillis() - start;
|
|
||||||
log.info("clearExpiredDeviceAcrs took {}ms, deleted {} records", execution, count);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,81 +0,0 @@
|
||||||
package cz.muni.ics.oidc.server;
|
|
||||||
|
|
||||||
import cz.muni.ics.openid.connect.models.Acr;
|
|
||||||
import java.time.Instant;
|
|
||||||
import javax.persistence.EntityManager;
|
|
||||||
import javax.persistence.NoResultException;
|
|
||||||
import javax.persistence.PersistenceContext;
|
|
||||||
import javax.persistence.Query;
|
|
||||||
import javax.persistence.TypedQuery;
|
|
||||||
import org.springframework.stereotype.Repository;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Repository class for ACR model.
|
|
||||||
*
|
|
||||||
* @author Dominik Frantisek Bucik <bucik@ics.muni.cz>
|
|
||||||
*/
|
|
||||||
@Repository
|
|
||||||
@Transactional(value = "defaultTransactionManager")
|
|
||||||
public class PerunAcrRepository {
|
|
||||||
|
|
||||||
@PersistenceContext(unitName = "defaultPersistenceUnit")
|
|
||||||
private EntityManager manager;
|
|
||||||
|
|
||||||
public Acr getActive(String sub, String clientId, String state) {
|
|
||||||
TypedQuery<Acr> query = manager.createNamedQuery(Acr.GET_ACTIVE, Acr.class);
|
|
||||||
query.setParameter(Acr.PARAM_SUB, sub);
|
|
||||||
query.setParameter(Acr.PARAM_CLIENT_ID, clientId);
|
|
||||||
query.setParameter(Acr.PARAM_STATE, state);
|
|
||||||
query.setParameter(Acr.PARAM_EXPIRES_AT, now());
|
|
||||||
try {
|
|
||||||
return query.getSingleResult();
|
|
||||||
} catch (NoResultException e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Acr getById(Long id) {
|
|
||||||
TypedQuery<Acr> query = manager.createNamedQuery(Acr.GET_BY_ID, Acr.class);
|
|
||||||
query.setParameter(Acr.PARAM_ID, id);
|
|
||||||
query.setParameter(Acr.PARAM_EXPIRES_AT, now());
|
|
||||||
|
|
||||||
try {
|
|
||||||
return query.getSingleResult();
|
|
||||||
} catch (NoResultException e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transactional
|
|
||||||
public Acr store(Acr acr) {
|
|
||||||
Acr existing = getActive(acr.getSub(), acr.getClientId(), acr.getState());
|
|
||||||
if (existing != null) {
|
|
||||||
return existing;
|
|
||||||
} else {
|
|
||||||
Acr tmp = manager.merge(acr);
|
|
||||||
manager.flush();
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transactional
|
|
||||||
public void remove(Long id) {
|
|
||||||
Acr acr = getById(id);
|
|
||||||
if (acr != null) {
|
|
||||||
manager.remove(acr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transactional
|
|
||||||
public void deleteExpired() {
|
|
||||||
Query query = manager.createNamedQuery(Acr.DELETE_EXPIRED);
|
|
||||||
query.setParameter(Acr.PARAM_EXPIRES_AT, now());
|
|
||||||
query.executeUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
private long now() {
|
|
||||||
return Instant.now().toEpochMilli();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,91 +0,0 @@
|
||||||
package cz.muni.ics.oidc.server;
|
|
||||||
|
|
||||||
import cz.muni.ics.openid.connect.models.Acr;
|
|
||||||
import cz.muni.ics.openid.connect.models.DeviceCodeAcr;
|
|
||||||
import java.time.Instant;
|
|
||||||
import javax.persistence.EntityManager;
|
|
||||||
import javax.persistence.NoResultException;
|
|
||||||
import javax.persistence.PersistenceContext;
|
|
||||||
import javax.persistence.Query;
|
|
||||||
import javax.persistence.TypedQuery;
|
|
||||||
import org.springframework.stereotype.Repository;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Repository class for ACR model.
|
|
||||||
*
|
|
||||||
* @author Dominik Frantisek Bucik <bucik@ics.muni.cz>
|
|
||||||
*/
|
|
||||||
@Repository
|
|
||||||
@Transactional(value = "defaultTransactionManager")
|
|
||||||
public class PerunDeviceCodeAcrRepository {
|
|
||||||
|
|
||||||
@PersistenceContext(unitName = "defaultPersistenceUnit")
|
|
||||||
private EntityManager manager;
|
|
||||||
|
|
||||||
public DeviceCodeAcr getActiveByDeviceCode(String deviceCode) {
|
|
||||||
TypedQuery<DeviceCodeAcr> query = manager.createNamedQuery(DeviceCodeAcr.GET_ACTIVE_BY_DEVICE_CODE,
|
|
||||||
DeviceCodeAcr.class);
|
|
||||||
query.setParameter(DeviceCodeAcr.PARAM_DEVICE_CODE, deviceCode);
|
|
||||||
query.setParameter(Acr.PARAM_EXPIRES_AT, now());
|
|
||||||
try {
|
|
||||||
return query.getSingleResult();
|
|
||||||
} catch (NoResultException e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public DeviceCodeAcr getByUserCode(String userCode) {
|
|
||||||
TypedQuery<DeviceCodeAcr> query = manager.createNamedQuery(DeviceCodeAcr.GET_BY_USER_CODE, DeviceCodeAcr.class);
|
|
||||||
query.setParameter(DeviceCodeAcr.PARAM_USER_CODE, userCode);
|
|
||||||
|
|
||||||
try {
|
|
||||||
return query.getSingleResult();
|
|
||||||
} catch (NoResultException e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public DeviceCodeAcr getById(Long id) {
|
|
||||||
TypedQuery<DeviceCodeAcr> query = manager.createNamedQuery(DeviceCodeAcr.GET_BY_ID, DeviceCodeAcr.class);
|
|
||||||
query.setParameter(DeviceCodeAcr.PARAM_ID, id);
|
|
||||||
query.setParameter(DeviceCodeAcr.PARAM_EXPIRES_AT, now());
|
|
||||||
|
|
||||||
try {
|
|
||||||
return query.getSingleResult();
|
|
||||||
} catch (NoResultException e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transactional
|
|
||||||
public DeviceCodeAcr store(DeviceCodeAcr acr) {
|
|
||||||
try {
|
|
||||||
return getActiveByDeviceCode(acr.getDeviceCode());
|
|
||||||
} catch (NoResultException e) {
|
|
||||||
DeviceCodeAcr tmp = manager.merge(acr);
|
|
||||||
manager.flush();
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transactional
|
|
||||||
public void remove(Long id) {
|
|
||||||
DeviceCodeAcr acr = getById(id);
|
|
||||||
if (acr != null) {
|
|
||||||
manager.remove(acr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transactional
|
|
||||||
public void deleteExpired() {
|
|
||||||
Query query = manager.createNamedQuery(DeviceCodeAcr.DELETE_EXPIRED);
|
|
||||||
query.setParameter(DeviceCodeAcr.PARAM_EXPIRES_AT, now());
|
|
||||||
query.executeUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
private long now() {
|
|
||||||
return Instant.now().toEpochMilli();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -4,17 +4,14 @@ import cz.muni.ics.oauth2.model.ClientDetailsEntity;
|
||||||
import cz.muni.ics.oauth2.model.DeviceCode;
|
import cz.muni.ics.oauth2.model.DeviceCode;
|
||||||
import cz.muni.ics.oauth2.service.SystemScopeService;
|
import cz.muni.ics.oauth2.service.SystemScopeService;
|
||||||
import cz.muni.ics.oauth2.web.DeviceEndpoint;
|
import cz.muni.ics.oauth2.web.DeviceEndpoint;
|
||||||
import cz.muni.ics.oidc.server.PerunDeviceCodeAcrRepository;
|
|
||||||
import cz.muni.ics.oidc.server.PerunScopeClaimTranslationService;
|
import cz.muni.ics.oidc.server.PerunScopeClaimTranslationService;
|
||||||
import cz.muni.ics.oidc.server.configurations.PerunOidcConfig;
|
import cz.muni.ics.oidc.server.configurations.PerunOidcConfig;
|
||||||
import cz.muni.ics.oidc.server.filters.PerunFilterConstants;
|
import cz.muni.ics.oidc.server.filters.PerunFilterConstants;
|
||||||
import cz.muni.ics.oidc.server.userInfo.PerunUserInfo;
|
import cz.muni.ics.oidc.server.userInfo.PerunUserInfo;
|
||||||
import cz.muni.ics.oidc.web.WebHtmlClasses;
|
import cz.muni.ics.oidc.web.WebHtmlClasses;
|
||||||
import cz.muni.ics.oidc.web.langs.Localization;
|
import cz.muni.ics.oidc.web.langs.Localization;
|
||||||
import cz.muni.ics.openid.connect.models.DeviceCodeAcr;
|
|
||||||
import cz.muni.ics.openid.connect.service.UserInfoService;
|
import cz.muni.ics.openid.connect.service.UserInfoService;
|
||||||
import java.security.Principal;
|
import java.security.Principal;
|
||||||
import java.time.Instant;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpSession;
|
import javax.servlet.http.HttpSession;
|
||||||
|
@ -41,7 +38,6 @@ public class ApproveDeviceController {
|
||||||
public static final String DEVICE_APPROVED = "deviceApproved";
|
public static final String DEVICE_APPROVED = "deviceApproved";
|
||||||
public static final String REQUEST_USER_CODE = "requestUserCode";
|
public static final String REQUEST_USER_CODE = "requestUserCode";
|
||||||
public static final String USER_CODE = "user_code";
|
public static final String USER_CODE = "user_code";
|
||||||
public static final String DEVICE_CODE = "device_code";
|
|
||||||
public static final String USER_OAUTH_APPROVAL = "user_oauth_approval";
|
public static final String USER_OAUTH_APPROVAL = "user_oauth_approval";
|
||||||
public static final String URL = "devicecode";
|
public static final String URL = "devicecode";
|
||||||
public static final String VERIFICATION_URI = "verification_uri";
|
public static final String VERIFICATION_URI = "verification_uri";
|
||||||
|
@ -59,7 +55,6 @@ public class ApproveDeviceController {
|
||||||
private final WebHtmlClasses htmlClasses;
|
private final WebHtmlClasses htmlClasses;
|
||||||
private final PerunScopeClaimTranslationService scopeClaimTranslationService;
|
private final PerunScopeClaimTranslationService scopeClaimTranslationService;
|
||||||
private final UserInfoService userInfoService;
|
private final UserInfoService userInfoService;
|
||||||
private final PerunDeviceCodeAcrRepository deviceCodeAcrRepository;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public ApproveDeviceController(SystemScopeService scopeService,
|
public ApproveDeviceController(SystemScopeService scopeService,
|
||||||
|
@ -68,8 +63,7 @@ public class ApproveDeviceController {
|
||||||
Localization localization,
|
Localization localization,
|
||||||
WebHtmlClasses htmlClasses,
|
WebHtmlClasses htmlClasses,
|
||||||
PerunScopeClaimTranslationService scopeClaimTranslationService,
|
PerunScopeClaimTranslationService scopeClaimTranslationService,
|
||||||
UserInfoService userInfoService,
|
UserInfoService userInfoService)
|
||||||
PerunDeviceCodeAcrRepository perunDeviceCodeAcrRepository)
|
|
||||||
{
|
{
|
||||||
this.scopeService = scopeService;
|
this.scopeService = scopeService;
|
||||||
this.deviceEndpoint = deviceEndpoint;
|
this.deviceEndpoint = deviceEndpoint;
|
||||||
|
@ -78,7 +72,6 @@ public class ApproveDeviceController {
|
||||||
this.htmlClasses = htmlClasses;
|
this.htmlClasses = htmlClasses;
|
||||||
this.scopeClaimTranslationService = scopeClaimTranslationService;
|
this.scopeClaimTranslationService = scopeClaimTranslationService;
|
||||||
this.userInfoService = userInfoService;
|
this.userInfoService = userInfoService;
|
||||||
this.deviceCodeAcrRepository = perunDeviceCodeAcrRepository;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping(
|
@RequestMapping(
|
||||||
|
@ -96,7 +89,6 @@ public class ApproveDeviceController {
|
||||||
Map<String, Object> response = (Map<String, Object>) model.get(ENTITY);
|
Map<String, Object> response = (Map<String, Object>) model.get(ENTITY);
|
||||||
response.replace(VERIFICATION_URI, response.get(VERIFICATION_URI) + "?" + ACR_VALUES + "=" + acrValues);
|
response.replace(VERIFICATION_URI, response.get(VERIFICATION_URI) + "?" + ACR_VALUES + "=" + acrValues);
|
||||||
response.replace(VERIFICATION_URI_COMPLETE, response.get(VERIFICATION_URI_COMPLETE) + "&" + ACR_VALUES + "=" + acrValues);
|
response.replace(VERIFICATION_URI_COMPLETE, response.get(VERIFICATION_URI_COMPLETE) + "&" + ACR_VALUES + "=" + acrValues);
|
||||||
storeAcrBase((String) response.get(DEVICE_CODE), (String)response.get(USER_CODE));
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -145,10 +137,6 @@ public class ApproveDeviceController {
|
||||||
{
|
{
|
||||||
String result = deviceEndpoint.readUserCode(userCode, model, session);
|
String result = deviceEndpoint.readUserCode(userCode, model, session);
|
||||||
if (result.equals(APPROVE_DEVICE) && !perunOidcConfig.getTheme().equalsIgnoreCase("default")) {
|
if (result.equals(APPROVE_DEVICE) && !perunOidcConfig.getTheme().equalsIgnoreCase("default")) {
|
||||||
if (StringUtils.hasText(req.getParameter(ACR))) {
|
|
||||||
storeAcr(req.getParameter(ACR), userCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
return themedApproveDevice(model, p, req);
|
return themedApproveDevice(model, p, req);
|
||||||
} else if (result.equals(REQUEST_USER_CODE) && !perunOidcConfig.getTheme().equalsIgnoreCase("default")) {
|
} else if (result.equals(REQUEST_USER_CODE) && !perunOidcConfig.getTheme().equalsIgnoreCase("default")) {
|
||||||
ControllerUtils.setPageOptions(model, req, localization, htmlClasses, perunOidcConfig);
|
ControllerUtils.setPageOptions(model, req, localization, htmlClasses, perunOidcConfig);
|
||||||
|
@ -189,14 +177,6 @@ public class ApproveDeviceController {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void storeAcr(String acrValue, String userCode) {
|
|
||||||
DeviceCodeAcr acr = deviceCodeAcrRepository.getByUserCode(userCode);
|
|
||||||
acr.setShibAuthnContextClass(acrValue);
|
|
||||||
long expiresAtEpoch = Instant.now().plusSeconds(600L).toEpochMilli();
|
|
||||||
acr.setExpiresAt(expiresAtEpoch);
|
|
||||||
deviceCodeAcrRepository.store(acr);
|
|
||||||
}
|
|
||||||
|
|
||||||
private String themedApproveDevice(ModelMap model, Principal p, HttpServletRequest req) {
|
private String themedApproveDevice(ModelMap model, Principal p, HttpServletRequest req) {
|
||||||
model.remove("scopes");
|
model.remove("scopes");
|
||||||
DeviceCode dc = (DeviceCode) model.get("dc");
|
DeviceCode dc = (DeviceCode) model.get("dc");
|
||||||
|
@ -210,10 +190,4 @@ public class ApproveDeviceController {
|
||||||
return "themedApproveDevice";
|
return "themedApproveDevice";
|
||||||
}
|
}
|
||||||
|
|
||||||
private void storeAcrBase(String deviceCode, String userCode) {
|
|
||||||
DeviceCodeAcr acrBase = new DeviceCodeAcr(deviceCode, userCode);
|
|
||||||
acrBase.setExpiresAt(Instant.now().plusSeconds(1800).toEpochMilli());
|
|
||||||
deviceCodeAcrRepository.store(acrBase);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,137 +0,0 @@
|
||||||
package cz.muni.ics.openid.connect.models;
|
|
||||||
|
|
||||||
import static cz.muni.ics.openid.connect.models.Acr.PARAM_EXPIRES_AT;
|
|
||||||
import static cz.muni.ics.openid.connect.models.Acr.PARAM_SUB;
|
|
||||||
|
|
||||||
import javax.persistence.Basic;
|
|
||||||
import javax.persistence.Column;
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.GeneratedValue;
|
|
||||||
import javax.persistence.GenerationType;
|
|
||||||
import javax.persistence.Id;
|
|
||||||
import javax.persistence.NamedQueries;
|
|
||||||
import javax.persistence.NamedQuery;
|
|
||||||
import javax.persistence.Table;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Model of ACR.
|
|
||||||
*
|
|
||||||
* @author Dominik Frantisek Bucik <bucik@ics.muni.cz>
|
|
||||||
*/
|
|
||||||
@Entity
|
|
||||||
@Table(name = "acrs")
|
|
||||||
@NamedQueries({
|
|
||||||
@NamedQuery(name = Acr.GET_ACTIVE, query = "SELECT acr FROM Acr acr WHERE " +
|
|
||||||
"acr.sub = :" + PARAM_SUB +
|
|
||||||
" AND acr.clientId = :" + Acr.PARAM_CLIENT_ID +
|
|
||||||
" AND acr.state = :" + Acr.PARAM_STATE +
|
|
||||||
" AND acr.expiresAt > :" + PARAM_EXPIRES_AT),
|
|
||||||
@NamedQuery(name = Acr.GET_BY_ID,
|
|
||||||
query = "SELECT acr FROM Acr acr " +
|
|
||||||
"WHERE acr.id = :" + Acr.PARAM_ID +
|
|
||||||
" AND acr.expiresAt > :" + PARAM_EXPIRES_AT),
|
|
||||||
@NamedQuery(name = Acr.DELETE_EXPIRED,
|
|
||||||
query = "DELETE FROM Acr acr WHERE acr.expiresAt <= :" + Acr.PARAM_EXPIRES_AT)
|
|
||||||
})
|
|
||||||
public class Acr {
|
|
||||||
|
|
||||||
public static final String GET_ACTIVE = "Acr.getActive";
|
|
||||||
public static final String GET_BY_ID = "Acr.getById";
|
|
||||||
public static final String DELETE_EXPIRED = "Acr.deleteExpired";
|
|
||||||
|
|
||||||
public static final String PARAM_ID = "id";
|
|
||||||
public static final String PARAM_SUB = "sub";
|
|
||||||
public static final String PARAM_CLIENT_ID = "client_id";
|
|
||||||
public static final String PARAM_STATE = "state";
|
|
||||||
public static final String PARAM_EXPIRES_AT = "expiration";
|
|
||||||
|
|
||||||
private Long id;
|
|
||||||
private String sub;
|
|
||||||
private String clientId;
|
|
||||||
private String state;
|
|
||||||
private String shibAuthnContextClass;
|
|
||||||
private long expiresAt;
|
|
||||||
|
|
||||||
public Acr() { }
|
|
||||||
|
|
||||||
public Acr(String sub, String clientId, String state, String shibAuthnContextClass, long expiresAt) {
|
|
||||||
this.sub = sub;
|
|
||||||
this.clientId = clientId;
|
|
||||||
this.state = state;
|
|
||||||
this.shibAuthnContextClass = shibAuthnContextClass;
|
|
||||||
this.expiresAt = expiresAt;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Id
|
|
||||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
|
||||||
@Column(name = "id")
|
|
||||||
public Long getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Long id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Basic
|
|
||||||
@Column(name = "sub")
|
|
||||||
public String getSub() {
|
|
||||||
return sub;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSub(String sub) {
|
|
||||||
this.sub = sub;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Basic
|
|
||||||
@Column(name = "client_id")
|
|
||||||
public String getClientId() {
|
|
||||||
return clientId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setClientId(String clientId) {
|
|
||||||
this.clientId = clientId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Basic
|
|
||||||
@Column(name = "state")
|
|
||||||
public String getState() {
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setState(String state) {
|
|
||||||
this.state = state;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Basic
|
|
||||||
@Column(name = "shib_authn_context_class")
|
|
||||||
public String getShibAuthnContextClass() {
|
|
||||||
return shibAuthnContextClass;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setShibAuthnContextClass(String shibAuthnContextClass) {
|
|
||||||
this.shibAuthnContextClass = shibAuthnContextClass;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Basic
|
|
||||||
@Column(name = "expiration")
|
|
||||||
public long getExpiresAt() {
|
|
||||||
return expiresAt;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setExpiresAt(long expiresAt) {
|
|
||||||
this.expiresAt = expiresAt;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "Acr{" +
|
|
||||||
"id=" + id +
|
|
||||||
", sub='" + sub + '\'' +
|
|
||||||
", clientId='" + clientId + '\'' +
|
|
||||||
", state='" + state + '\'' +
|
|
||||||
", shibAuthnContextClass='" + shibAuthnContextClass + '\'' +
|
|
||||||
", expiration=" + expiresAt +
|
|
||||||
'}';
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,122 +0,0 @@
|
||||||
package cz.muni.ics.openid.connect.models;
|
|
||||||
|
|
||||||
import javax.persistence.Basic;
|
|
||||||
import javax.persistence.Column;
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.GeneratedValue;
|
|
||||||
import javax.persistence.GenerationType;
|
|
||||||
import javax.persistence.Id;
|
|
||||||
import javax.persistence.NamedQueries;
|
|
||||||
import javax.persistence.NamedQuery;
|
|
||||||
import javax.persistence.Table;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Model of ACR for device_code flow.
|
|
||||||
*
|
|
||||||
* @author Dominik Frantisek Bucik <bucik@ics.muni.cz>
|
|
||||||
*/
|
|
||||||
@Entity
|
|
||||||
@Table(name = "device_code_acrs")
|
|
||||||
@NamedQueries({
|
|
||||||
@NamedQuery(name = DeviceCodeAcr.GET_ACTIVE_BY_DEVICE_CODE,
|
|
||||||
query = "SELECT acr FROM DeviceCodeAcr acr WHERE " +
|
|
||||||
"acr.deviceCode = :" + DeviceCodeAcr.PARAM_DEVICE_CODE +
|
|
||||||
" AND acr.expiresAt > :" + DeviceCodeAcr.PARAM_EXPIRES_AT),
|
|
||||||
@NamedQuery(name = DeviceCodeAcr.GET_BY_ID,
|
|
||||||
query = "SELECT acr FROM DeviceCodeAcr acr " +
|
|
||||||
"WHERE acr.id = :" + DeviceCodeAcr.PARAM_ID +
|
|
||||||
" AND acr.expiresAt > :" + DeviceCodeAcr.PARAM_EXPIRES_AT),
|
|
||||||
@NamedQuery(name = DeviceCodeAcr.GET_BY_USER_CODE,
|
|
||||||
query = "SELECT acr FROM DeviceCodeAcr acr " +
|
|
||||||
"WHERE acr.userCode = :" + DeviceCodeAcr.PARAM_USER_CODE),
|
|
||||||
@NamedQuery(name = DeviceCodeAcr.DELETE_EXPIRED,
|
|
||||||
query = "DELETE FROM DeviceCodeAcr acr WHERE acr.expiresAt <= :" + DeviceCodeAcr.PARAM_EXPIRES_AT)
|
|
||||||
})
|
|
||||||
public class DeviceCodeAcr {
|
|
||||||
|
|
||||||
public static final String GET_ACTIVE_BY_DEVICE_CODE = "DeviceCodeAcr.getActive";
|
|
||||||
public static final String GET_BY_ID = "DeviceCodeAcr.getById";
|
|
||||||
public static final String DELETE_EXPIRED = "DeviceCodeAcr.deleteExpired";
|
|
||||||
public static final String GET_BY_USER_CODE = "DeviceCodeAcr.getByUserCode";
|
|
||||||
|
|
||||||
public static final String PARAM_ID = "id";
|
|
||||||
public static final String PARAM_USER_CODE = "user_code";
|
|
||||||
public static final String PARAM_DEVICE_CODE = "device_code";
|
|
||||||
public static final String PARAM_EXPIRES_AT = "expiration";
|
|
||||||
|
|
||||||
private Long id;
|
|
||||||
private String userCode;
|
|
||||||
private String deviceCode;
|
|
||||||
private String shibAuthnContextClass;
|
|
||||||
private long expiresAt;
|
|
||||||
|
|
||||||
public DeviceCodeAcr() { }
|
|
||||||
|
|
||||||
public DeviceCodeAcr(String deviceCode, String userCode) {
|
|
||||||
this.deviceCode = deviceCode;
|
|
||||||
this.userCode = userCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Id
|
|
||||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
|
||||||
@Column(name = "id")
|
|
||||||
public Long getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Long id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Basic
|
|
||||||
@Column(name = "device_code")
|
|
||||||
public String getDeviceCode() {
|
|
||||||
return deviceCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDeviceCode(String deviceCode) {
|
|
||||||
this.deviceCode = deviceCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Basic
|
|
||||||
@Column(name = "user_code")
|
|
||||||
public String getUserCode() {
|
|
||||||
return userCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUserCode(String userCode) {
|
|
||||||
this.userCode = userCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Basic
|
|
||||||
@Column(name = "shib_authn_context_class")
|
|
||||||
public String getShibAuthnContextClass() {
|
|
||||||
return shibAuthnContextClass;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setShibAuthnContextClass(String shibAuthnContextClass) {
|
|
||||||
this.shibAuthnContextClass = shibAuthnContextClass;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Basic
|
|
||||||
@Column(name = "expiration")
|
|
||||||
public long getExpiresAt() {
|
|
||||||
return expiresAt;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setExpiresAt(long expiresAt) {
|
|
||||||
this.expiresAt = expiresAt;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "Acr{" +
|
|
||||||
"id=" + id +
|
|
||||||
", deviceCode='" + deviceCode + '\'' +
|
|
||||||
", userCode='" + userCode + '\'' +
|
|
||||||
", shibAuthnContextClass='" + shibAuthnContextClass + '\'' +
|
|
||||||
", expiration=" + expiresAt +
|
|
||||||
'}';
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue