[Fix] Fixed Certificate locale not restored on reboot
This commit is contained in:
parent
bdda43822d
commit
4ef3ae0869
|
@ -1038,7 +1038,7 @@ public class DefaultPrivilegeHandler implements PrivilegeHandler {
|
||||||
if (ctx.getUserRep().getUsername().equals(newUser.getUsername())) {
|
if (ctx.getUserRep().getUsername().equals(newUser.getUsername())) {
|
||||||
Certificate cert = ctx.getCertificate();
|
Certificate cert = ctx.getCertificate();
|
||||||
cert = buildCertificate(cert.getUsage(), newUser, cert.getAuthToken(), cert.getSessionId(),
|
cert = buildCertificate(cert.getUsage(), newUser, cert.getAuthToken(), cert.getSessionId(),
|
||||||
cert.getSource());
|
cert.getSource(), cert.getLoginTime());
|
||||||
PrivilegeContext privilegeContext = buildPrivilegeContext(cert, newUser);
|
PrivilegeContext privilegeContext = buildPrivilegeContext(cert, newUser);
|
||||||
this.privilegeContextMap.put(cert.getSessionId(), privilegeContext);
|
this.privilegeContextMap.put(cert.getSessionId(), privilegeContext);
|
||||||
}
|
}
|
||||||
|
@ -1063,7 +1063,7 @@ public class DefaultPrivilegeHandler implements PrivilegeHandler {
|
||||||
|
|
||||||
Certificate cert = ctx.getCertificate();
|
Certificate cert = ctx.getCertificate();
|
||||||
cert = buildCertificate(cert.getUsage(), user, cert.getAuthToken(), cert.getSessionId(),
|
cert = buildCertificate(cert.getUsage(), user, cert.getAuthToken(), cert.getSessionId(),
|
||||||
cert.getSource());
|
cert.getSource(), cert.getLoginTime());
|
||||||
PrivilegeContext privilegeContext = buildPrivilegeContext(cert, user);
|
PrivilegeContext privilegeContext = buildPrivilegeContext(cert, user);
|
||||||
this.privilegeContextMap.put(cert.getSessionId(), privilegeContext);
|
this.privilegeContextMap.put(cert.getSessionId(), privilegeContext);
|
||||||
}
|
}
|
||||||
|
@ -1127,7 +1127,8 @@ public class DefaultPrivilegeHandler implements PrivilegeHandler {
|
||||||
|
|
||||||
// create a new certificate, with details of the user
|
// create a new certificate, with details of the user
|
||||||
Usage usage = userChallenge.getUsage();
|
Usage usage = userChallenge.getUsage();
|
||||||
Certificate certificate = buildCertificate(usage, user, authToken, sessionId, userChallenge.getSource());
|
Certificate certificate = buildCertificate(usage, user, authToken, sessionId, userChallenge.getSource(),
|
||||||
|
new Date());
|
||||||
|
|
||||||
PrivilegeContext privilegeContext = buildPrivilegeContext(certificate, user);
|
PrivilegeContext privilegeContext = buildPrivilegeContext(certificate, user);
|
||||||
this.privilegeContextMap.put(sessionId, privilegeContext);
|
this.privilegeContextMap.put(sessionId, privilegeContext);
|
||||||
|
@ -1177,7 +1178,7 @@ public class DefaultPrivilegeHandler implements PrivilegeHandler {
|
||||||
String sessionId = UUID.randomUUID().toString();
|
String sessionId = UUID.randomUUID().toString();
|
||||||
|
|
||||||
// create a new certificate, with details of the user
|
// create a new certificate, with details of the user
|
||||||
Certificate certificate = buildCertificate(Usage.ANY, user, authToken, sessionId, source);
|
Certificate certificate = buildCertificate(Usage.ANY, user, authToken, sessionId, source, new Date());
|
||||||
|
|
||||||
PrivilegeContext privilegeContext = buildPrivilegeContext(certificate, user);
|
PrivilegeContext privilegeContext = buildPrivilegeContext(certificate, user);
|
||||||
this.privilegeContextMap.put(sessionId, privilegeContext);
|
this.privilegeContextMap.put(sessionId, privilegeContext);
|
||||||
|
@ -1233,7 +1234,7 @@ public class DefaultPrivilegeHandler implements PrivilegeHandler {
|
||||||
String sessionId = UUID.randomUUID().toString();
|
String sessionId = UUID.randomUUID().toString();
|
||||||
|
|
||||||
// create a new certificate, with details of the user
|
// create a new certificate, with details of the user
|
||||||
Certificate certificate = buildCertificate(Usage.ANY, user, authToken, sessionId, source);
|
Certificate certificate = buildCertificate(Usage.ANY, user, authToken, sessionId, source, new Date());
|
||||||
|
|
||||||
PrivilegeContext privilegeContext = buildPrivilegeContext(certificate, user);
|
PrivilegeContext privilegeContext = buildPrivilegeContext(certificate, user);
|
||||||
this.privilegeContextMap.put(sessionId, privilegeContext);
|
this.privilegeContextMap.put(sessionId, privilegeContext);
|
||||||
|
@ -1246,15 +1247,16 @@ public class DefaultPrivilegeHandler implements PrivilegeHandler {
|
||||||
return certificate;
|
return certificate;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Certificate buildCertificate(Usage usage, User user, String authToken, String sessionId, String source) {
|
private Certificate buildCertificate(Usage usage, User user, String authToken, String sessionId, String source,
|
||||||
|
Date loginTime) {
|
||||||
DBC.PRE.assertNotEmpty("source must not be empty!", source);
|
DBC.PRE.assertNotEmpty("source must not be empty!", source);
|
||||||
Set<String> userRoles = user.getRoles();
|
Set<String> userRoles = user.getRoles();
|
||||||
return new Certificate(usage, sessionId, user.getUsername(), user.getFirstname(), user.getLastname(),
|
return new Certificate(usage, sessionId, user.getUsername(), user.getFirstname(), user.getLastname(),
|
||||||
user.getUserState(), authToken, source, new Date(), user.getLocale(), userRoles,
|
user.getUserState(), authToken, source, loginTime, user.getLocale(), userRoles,
|
||||||
new HashMap<>(user.getProperties()));
|
new HashMap<>(user.getProperties()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean persistSessions() {
|
private synchronized boolean persistSessions() {
|
||||||
if (!this.persistSessions)
|
if (!this.persistSessions)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -1315,12 +1317,12 @@ public class DefaultPrivilegeHandler implements PrivilegeHandler {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (CertificateStub certificateStub : certificateStubs) {
|
for (CertificateStub stub : certificateStubs) {
|
||||||
Usage usage = certificateStub.getUsage();
|
Usage usage = stub.getUsage();
|
||||||
String username = certificateStub.getUsername();
|
String username = stub.getUsername();
|
||||||
String sessionId = certificateStub.getSessionId();
|
String sessionId = stub.getSessionId();
|
||||||
String authToken = certificateStub.getAuthToken();
|
String authToken = stub.getAuthToken();
|
||||||
String source = certificateStub.getSource();
|
String source = stub.getSource();
|
||||||
User user = this.persistenceHandler.getUser(username);
|
User user = this.persistenceHandler.getUser(username);
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
logger.error("Ignoring session data for missing user " + username);
|
logger.error("Ignoring session data for missing user " + username);
|
||||||
|
@ -1339,8 +1341,9 @@ public class DefaultPrivilegeHandler implements PrivilegeHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
// create a new certificate, with details of the user
|
// create a new certificate, with details of the user
|
||||||
Certificate certificate = buildCertificate(usage, user, authToken, sessionId, source);
|
Certificate certificate = buildCertificate(usage, user, authToken, sessionId, source, stub.getLoginTime());
|
||||||
certificate.setLastAccess(certificateStub.getLastAccess());
|
certificate.setLocale(stub.getLocale());
|
||||||
|
certificate.setLastAccess(stub.getLastAccess());
|
||||||
|
|
||||||
PrivilegeContext privilegeContext = buildPrivilegeContext(certificate, user);
|
PrivilegeContext privilegeContext = buildPrivilegeContext(certificate, user);
|
||||||
this.privilegeContextMap.put(sessionId, privilegeContext);
|
this.privilegeContextMap.put(sessionId, privilegeContext);
|
||||||
|
@ -2002,7 +2005,8 @@ public class DefaultPrivilegeHandler implements PrivilegeHandler {
|
||||||
String sessionId = UUID.randomUUID().toString();
|
String sessionId = UUID.randomUUID().toString();
|
||||||
|
|
||||||
// create a new certificate, with details of the user
|
// create a new certificate, with details of the user
|
||||||
Certificate systemUserCertificate = buildCertificate(Usage.ANY, user, authToken, sessionId, this.identifier);
|
Certificate systemUserCertificate = buildCertificate(Usage.ANY, user, authToken, sessionId, this.identifier,
|
||||||
|
new Date());
|
||||||
|
|
||||||
// create and save a new privilege context
|
// create and save a new privilege context
|
||||||
PrivilegeContext privilegeContext = buildPrivilegeContext(systemUserCertificate, user);
|
PrivilegeContext privilegeContext = buildPrivilegeContext(systemUserCertificate, user);
|
||||||
|
|
|
@ -66,7 +66,7 @@ public class CertificateStubsSaxReader extends DefaultHandler {
|
||||||
stub.username = attributes.getValue(XmlConstants.XML_ATTR_USERNAME);
|
stub.username = attributes.getValue(XmlConstants.XML_ATTR_USERNAME);
|
||||||
stub.authToken = attributes.getValue(XmlConstants.XML_ATTR_AUTH_TOKEN);
|
stub.authToken = attributes.getValue(XmlConstants.XML_ATTR_AUTH_TOKEN);
|
||||||
stub.source = attributes.getValue(XmlConstants.XML_ATTR_SOURCE);
|
stub.source = attributes.getValue(XmlConstants.XML_ATTR_SOURCE);
|
||||||
stub.locale = new Locale(attributes.getValue(XmlConstants.XML_ATTR_LOCALE));
|
stub.locale = Locale.forLanguageTag(attributes.getValue(XmlConstants.XML_ATTR_LOCALE));
|
||||||
stub.loginTime = ISO8601FormatFactory.getInstance()
|
stub.loginTime = ISO8601FormatFactory.getInstance()
|
||||||
.parseDate(attributes.getValue(XmlConstants.XML_ATTR_LOGIN_TIME));
|
.parseDate(attributes.getValue(XmlConstants.XML_ATTR_LOGIN_TIME));
|
||||||
stub.lastAccess = ISO8601FormatFactory.getInstance()
|
stub.lastAccess = ISO8601FormatFactory.getInstance()
|
||||||
|
|
|
@ -234,7 +234,8 @@ public class DefaultStrolchSessionHandler extends StrolchComponent implements St
|
||||||
|
|
||||||
private void persistSessions() {
|
private void persistSessions() {
|
||||||
try {
|
try {
|
||||||
runAsAgent(ctx -> this.privilegeHandler.getPrivilegeHandler().persistSessions(ctx.getCertificate(), ctx.getCertificate().getSource()));
|
runAsAgent(ctx -> this.privilegeHandler.getPrivilegeHandler()
|
||||||
|
.persistSessions(ctx.getCertificate(), ctx.getCertificate().getSource()));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("Failed to persist sessions", e);
|
logger.error("Failed to persist sessions", e);
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -390,7 +391,11 @@ public class DefaultStrolchSessionHandler extends StrolchComponent implements St
|
||||||
synchronized (this.certificateMap) {
|
synchronized (this.certificateMap) {
|
||||||
for (Certificate cert : certificateMap.values()) {
|
for (Certificate cert : certificateMap.values()) {
|
||||||
if (cert.getSessionId().equals(sessionId)) {
|
if (cert.getSessionId().equals(sessionId)) {
|
||||||
cert.setLocale(locale);
|
if (!cert.getLocale().equals(locale)) {
|
||||||
|
cert.setLocale(locale);
|
||||||
|
persistSessions();
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,7 +104,7 @@ public class UserSessionsService {
|
||||||
StrolchSessionHandler sessionHandler = RestfulStrolchComponent.getInstance().getSessionHandler();
|
StrolchSessionHandler sessionHandler = RestfulStrolchComponent.getInstance().getSessionHandler();
|
||||||
Locale locale;
|
Locale locale;
|
||||||
try {
|
try {
|
||||||
locale = new Locale(localeS);
|
locale = Locale.forLanguageTag(localeS);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
String msg = MessageFormat.format("Locale {0} is not valid!", localeS);
|
String msg = MessageFormat.format("Locale {0} is not valid!", localeS);
|
||||||
return Response.serverError().entity(ResponseUtil.toResponse(msg)).type(MediaType.APPLICATION_JSON).build();
|
return Response.serverError().entity(ResponseUtil.toResponse(msg)).type(MediaType.APPLICATION_JSON).build();
|
||||||
|
|
Loading…
Reference in New Issue