Closes #13408
This commit is contained in:
parent
254483bc5d
commit
6b1c64a1a9
3 changed files with 38 additions and 5 deletions
|
@ -31,6 +31,7 @@ public class UserSessionRepresentation {
|
||||||
private String ipAddress;
|
private String ipAddress;
|
||||||
private long start;
|
private long start;
|
||||||
private long lastAccess;
|
private long lastAccess;
|
||||||
|
private boolean rememberMe;
|
||||||
private Map<String, String> clients = new HashMap<>();
|
private Map<String, String> clients = new HashMap<>();
|
||||||
|
|
||||||
public String getId() {
|
public String getId() {
|
||||||
|
@ -48,7 +49,7 @@ public class UserSessionRepresentation {
|
||||||
public void setUsername(String username) {
|
public void setUsername(String username) {
|
||||||
this.username = username;
|
this.username = username;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUserId() {
|
public String getUserId() {
|
||||||
return userId;
|
return userId;
|
||||||
}
|
}
|
||||||
|
@ -81,6 +82,14 @@ public class UserSessionRepresentation {
|
||||||
this.lastAccess = lastAccess;
|
this.lastAccess = lastAccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isRememberMe() {
|
||||||
|
return rememberMe;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRememberMe(boolean rememberMe) {
|
||||||
|
this.rememberMe = rememberMe;
|
||||||
|
}
|
||||||
|
|
||||||
public Map<String, String> getClients() {
|
public Map<String, String> getClients() {
|
||||||
return clients;
|
return clients;
|
||||||
}
|
}
|
||||||
|
|
|
@ -641,6 +641,7 @@ public class ModelToRepresentation {
|
||||||
rep.setUsername(session.getUser().getUsername());
|
rep.setUsername(session.getUser().getUsername());
|
||||||
rep.setUserId(session.getUser().getId());
|
rep.setUserId(session.getUser().getId());
|
||||||
rep.setIpAddress(session.getIpAddress());
|
rep.setIpAddress(session.getIpAddress());
|
||||||
|
rep.setRememberMe(session.isRememberMe());
|
||||||
for (AuthenticatedClientSessionModel clientSession : session.getAuthenticatedClientSessions().values()) {
|
for (AuthenticatedClientSessionModel clientSession : session.getAuthenticatedClientSessions().values()) {
|
||||||
ClientModel client = clientSession.getClient();
|
ClientModel client = clientSession.getClient();
|
||||||
rep.getClients().put(client.getId(), client.getClientId());
|
rep.getClients().put(client.getId(), client.getClientId());
|
||||||
|
@ -694,7 +695,7 @@ public class ModelToRepresentation {
|
||||||
rep.setNotBefore(clientModel.getNotBefore());
|
rep.setNotBefore(clientModel.getNotBefore());
|
||||||
rep.setNodeReRegistrationTimeout(clientModel.getNodeReRegistrationTimeout());
|
rep.setNodeReRegistrationTimeout(clientModel.getNodeReRegistrationTimeout());
|
||||||
rep.setClientAuthenticatorType(clientModel.getClientAuthenticatorType());
|
rep.setClientAuthenticatorType(clientModel.getClientAuthenticatorType());
|
||||||
|
|
||||||
// adding the secret if non public or bearer only
|
// adding the secret if non public or bearer only
|
||||||
if (clientModel.isBearerOnly() || clientModel.isPublicClient()) {
|
if (clientModel.isBearerOnly() || clientModel.isPublicClient()) {
|
||||||
rep.setSecret(null);
|
rep.setSecret(null);
|
||||||
|
@ -937,7 +938,7 @@ public class ModelToRepresentation {
|
||||||
public static <R extends AbstractPolicyRepresentation> R toRepresentation(Policy policy, AuthorizationProvider authorization, boolean genericRepresentation, boolean export) {
|
public static <R extends AbstractPolicyRepresentation> R toRepresentation(Policy policy, AuthorizationProvider authorization, boolean genericRepresentation, boolean export) {
|
||||||
return toRepresentation(policy, authorization, genericRepresentation, export, false);
|
return toRepresentation(policy, authorization, genericRepresentation, export, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static <R extends AbstractPolicyRepresentation> R toRepresentation(Policy policy, AuthorizationProvider authorization, boolean genericRepresentation, boolean export, boolean allFields) {
|
public static <R extends AbstractPolicyRepresentation> R toRepresentation(Policy policy, AuthorizationProvider authorization, boolean genericRepresentation, boolean export, boolean allFields) {
|
||||||
PolicyProviderFactory providerFactory = authorization.getProviderFactory(policy.getType());
|
PolicyProviderFactory providerFactory = authorization.getProviderFactory(policy.getType());
|
||||||
R representation;
|
R representation;
|
||||||
|
@ -962,7 +963,7 @@ public class ModelToRepresentation {
|
||||||
representation.setType(policy.getType());
|
representation.setType(policy.getType());
|
||||||
representation.setDecisionStrategy(policy.getDecisionStrategy());
|
representation.setDecisionStrategy(policy.getDecisionStrategy());
|
||||||
representation.setLogic(policy.getLogic());
|
representation.setLogic(policy.getLogic());
|
||||||
|
|
||||||
if (allFields) {
|
if (allFields) {
|
||||||
representation.setResourcesData(policy.getResources().stream()
|
representation.setResourcesData(policy.getResources().stream()
|
||||||
.map(resource -> toRepresentation(resource, policy.getResourceServer(), authorization, true))
|
.map(resource -> toRepresentation(resource, policy.getResourceServer(), authorization, true))
|
||||||
|
|
|
@ -24,17 +24,19 @@ import org.keycloak.admin.client.resource.ClientResource;
|
||||||
import org.keycloak.common.Profile;
|
import org.keycloak.common.Profile;
|
||||||
import org.keycloak.events.admin.OperationType;
|
import org.keycloak.events.admin.OperationType;
|
||||||
import org.keycloak.events.admin.ResourceType;
|
import org.keycloak.events.admin.ResourceType;
|
||||||
|
import org.keycloak.representations.idm.RealmRepresentation;
|
||||||
import org.keycloak.representations.idm.UserRepresentation;
|
import org.keycloak.representations.idm.UserRepresentation;
|
||||||
import org.keycloak.representations.idm.UserSessionRepresentation;
|
import org.keycloak.representations.idm.UserSessionRepresentation;
|
||||||
import org.keycloak.testsuite.arquillian.annotation.DisableFeature;
|
import org.keycloak.testsuite.arquillian.annotation.DisableFeature;
|
||||||
import org.keycloak.testsuite.auth.page.AuthRealm;
|
|
||||||
import org.keycloak.testsuite.auth.page.account.AccountManagement;
|
import org.keycloak.testsuite.auth.page.account.AccountManagement;
|
||||||
import org.keycloak.testsuite.util.AdminEventPaths;
|
import org.keycloak.testsuite.util.AdminEventPaths;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertNotNull;
|
import static org.junit.Assert.assertNotNull;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.keycloak.testsuite.auth.page.AuthRealm.TEST;
|
import static org.keycloak.testsuite.auth.page.AuthRealm.TEST;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -105,6 +107,27 @@ public class SessionTest extends AbstractClientTest {
|
||||||
assertNotNull(rep.getIpAddress());
|
assertNotNull(rep.getIpAddress());
|
||||||
assertNotNull(rep.getLastAccess());
|
assertNotNull(rep.getLastAccess());
|
||||||
assertNotNull(rep.getStart());
|
assertNotNull(rep.getStart());
|
||||||
|
assertFalse(rep.isRememberMe());
|
||||||
|
|
||||||
|
testRealmAccountManagementPage.signOut();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetUserSessionsWithRememberMe() {
|
||||||
|
RealmRepresentation realm = adminClient.realm(TEST).toRepresentation();
|
||||||
|
realm.setRememberMe(true);
|
||||||
|
adminClient.realm(TEST).update(realm);
|
||||||
|
|
||||||
|
testRealmAccountManagementPage.navigateTo();
|
||||||
|
loginPage.form().rememberMe(true);
|
||||||
|
loginPage.form().login(testUser);
|
||||||
|
|
||||||
|
ClientResource account = findClientResourceById("account");
|
||||||
|
List<UserSessionRepresentation> sessions = account.getUserSessions(0, 5);
|
||||||
|
assertEquals(1, sessions.size());
|
||||||
|
|
||||||
|
UserSessionRepresentation rep = sessions.get(0);
|
||||||
|
assertTrue(rep.isRememberMe());
|
||||||
|
|
||||||
testRealmAccountManagementPage.signOut();
|
testRealmAccountManagementPage.signOut();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue