Added redirect uris to application
This commit is contained in:
1 parent
7966afb434
commit
79c1230a9d
12 files changed
+454
-127
No files matched your search
@@ -1,5 +1,10 @@
|
||||
package org.keycloak.services.managers;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.keycloak.models.*;
|
||||
import org.keycloak.representations.idm.*;
|
||||
|
||||
@@ -32,6 +37,12 @@ public class ApplicationManager {
|
||||
realm.updateCredential(resourceUser, credential);
|
||||
}
|
||||
}
|
||||
if (resourceRep.getRedirectUris() != null) {
|
||||
for (String redirectUri : resourceRep.getRedirectUris()) {
|
||||
resourceUser.addRedirectUri(redirectUri);
|
||||
}
|
||||
}
|
||||
|
||||
realm.grantRole(resourceUser, loginRole);
|
||||
|
||||
|
||||
@@ -82,6 +93,10 @@ public class ApplicationManager {
|
||||
resource.setSurrogateAuthRequired(rep.isSurrogateAuthRequired());
|
||||
resource.updateApplication();
|
||||
|
||||
List<String> redirectUris = rep.getRedirectUris();
|
||||
if (redirectUris != null) {
|
||||
resource.getApplicationUser().setRedirectUris(new HashSet<String>(redirectUris));
|
||||
}
|
||||
}
|
||||
|
||||
public ApplicationRepresentation toRepresentation(ApplicationModel applicationModel) {
|
||||
@@ -92,6 +107,12 @@ public class ApplicationManager {
|
||||
rep.setAdminUrl(applicationModel.getManagementUrl());
|
||||
rep.setSurrogateAuthRequired(applicationModel.isSurrogateAuthRequired());
|
||||
rep.setBaseUrl(applicationModel.getBaseUrl());
|
||||
|
||||
Set<String> redirectUris = applicationModel.getApplicationUser().getRedirectUris();
|
||||
if (redirectUris != null) {
|
||||
rep.setRedirectUris(new LinkedList<String>(redirectUris));
|
||||
}
|
||||
|
||||
return rep;
|
||||
|
||||
}
|
||||
|
||||
@@ -68,6 +68,11 @@ public class OAuthFlows {
|
||||
}
|
||||
|
||||
public Response redirectAccessCode(AccessCodeEntry accessCode, String state, String redirect) {
|
||||
Set<String> redirectUris = accessCode.getClient().getRedirectUris();
|
||||
if (!redirectUris.isEmpty() && !redirectUris.contains(redirect)) {
|
||||
return forwardToSecurityFailure("Invalid redirect_uri " + redirect);
|
||||
}
|
||||
|
||||
String code = accessCode.getCode();
|
||||
UriBuilder redirectUri = UriBuilder.fromUri(redirect).queryParam("code", code);
|
||||
log.info("redirectAccessCode: state: " + state);
|
||||
|
||||
@@ -302,42 +302,4 @@ public class AdapterTest extends AbstractKeycloakTest {
|
||||
Assert.assertEquals("user", role.getName());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUserRequiredActions() throws Exception {
|
||||
test1CreateRealm();
|
||||
|
||||
UserModel user = realmModel.addUser("bburke");
|
||||
|
||||
Assert.assertTrue(user.getRequiredActions().isEmpty());
|
||||
|
||||
user.addRequiredAction(UserModel.RequiredAction.CONFIGURE_TOTP);
|
||||
user = realmModel.getUser("bburke");
|
||||
|
||||
Assert.assertEquals(1, user.getRequiredActions().size());
|
||||
Assert.assertTrue(user.getRequiredActions().contains(RequiredAction.CONFIGURE_TOTP));
|
||||
|
||||
user.addRequiredAction(UserModel.RequiredAction.CONFIGURE_TOTP);
|
||||
user = realmModel.getUser("bburke");
|
||||
|
||||
Assert.assertEquals(1, user.getRequiredActions().size());
|
||||
Assert.assertTrue(user.getRequiredActions().contains(RequiredAction.CONFIGURE_TOTP));
|
||||
|
||||
user.addRequiredAction(UserModel.RequiredAction.VERIFY_EMAIL);
|
||||
user = realmModel.getUser("bburke");
|
||||
|
||||
Assert.assertEquals(2, user.getRequiredActions().size());
|
||||
Assert.assertTrue(user.getRequiredActions().contains(RequiredAction.CONFIGURE_TOTP));
|
||||
Assert.assertTrue(user.getRequiredActions().contains(RequiredAction.VERIFY_EMAIL));
|
||||
|
||||
user.removeRequiredAction(UserModel.RequiredAction.CONFIGURE_TOTP);
|
||||
user = realmModel.getUser("bburke");
|
||||
|
||||
Assert.assertEquals(1, user.getRequiredActions().size());
|
||||
Assert.assertTrue(user.getRequiredActions().contains(RequiredAction.VERIFY_EMAIL));
|
||||
|
||||
user.removeRequiredAction(UserModel.RequiredAction.VERIFY_EMAIL);
|
||||
user = realmModel.getUser("bburke");
|
||||
|
||||
Assert.assertTrue(user.getRequiredActions().isEmpty());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
package org.keycloak.test;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.keycloak.models.ApplicationModel;
|
||||
import org.keycloak.models.KeycloakSession;
|
||||
import org.keycloak.models.KeycloakSessionFactory;
|
||||
import org.keycloak.models.RealmModel;
|
||||
import org.keycloak.models.RoleModel;
|
||||
import org.keycloak.models.UserModel;
|
||||
import org.keycloak.representations.idm.ApplicationRepresentation;
|
||||
import org.keycloak.services.managers.ApplicationManager;
|
||||
import org.keycloak.services.managers.RealmManager;
|
||||
import org.keycloak.services.resources.KeycloakApplication;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
|
||||
*/
|
||||
public class ApplicationModelTest extends AbstractKeycloakServerTest {
|
||||
private KeycloakSessionFactory factory;
|
||||
private KeycloakSession identitySession;
|
||||
private RealmManager manager;
|
||||
private ApplicationModel application;
|
||||
private RealmModel realm;
|
||||
private ApplicationManager appManager;
|
||||
|
||||
@Before
|
||||
public void before() throws Exception {
|
||||
factory = KeycloakApplication.buildSessionFactory();
|
||||
identitySession = factory.createSession();
|
||||
identitySession.getTransaction().begin();
|
||||
manager = new RealmManager(identitySession);
|
||||
|
||||
appManager = new ApplicationManager(manager);
|
||||
|
||||
realm = manager.createRealm("original");
|
||||
application = realm.addApplication("application");
|
||||
application.setBaseUrl("http://base");
|
||||
application.setManagementUrl("http://management");
|
||||
application.setName("app-name");
|
||||
application.addRole("role-1");
|
||||
application.addRole("role-2");
|
||||
|
||||
application.getApplicationUser().addRedirectUri("redirect-1");
|
||||
application.getApplicationUser().addRedirectUri("redirect-2");
|
||||
|
||||
application.updateApplication();
|
||||
}
|
||||
|
||||
@After
|
||||
public void after() throws Exception {
|
||||
identitySession.getTransaction().commit();
|
||||
identitySession.close();
|
||||
factory.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void persist() {
|
||||
RealmModel persisted = manager.getRealm(realm.getId());
|
||||
|
||||
assertEquals(application, persisted.getApplications().get(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void json() {
|
||||
ApplicationRepresentation representation = appManager.toRepresentation(application);
|
||||
|
||||
RealmModel realm = manager.createRealm("copy");
|
||||
ApplicationModel copy = appManager.createApplication(realm, representation);
|
||||
|
||||
assertEquals(application, copy);
|
||||
}
|
||||
|
||||
public static void assertEquals(ApplicationModel expected, ApplicationModel actual) {
|
||||
Assert.assertEquals(expected.getName(), actual.getName());
|
||||
Assert.assertEquals(expected.getBaseUrl(), actual.getBaseUrl());
|
||||
Assert.assertEquals(expected.getManagementUrl(), actual.getManagementUrl());
|
||||
|
||||
UserModel auser = actual.getApplicationUser();
|
||||
UserModel euser = expected.getApplicationUser();
|
||||
|
||||
Assert.assertTrue(euser.getRedirectUris().containsAll(auser.getRedirectUris()));
|
||||
}
|
||||
|
||||
public static void assertEquals(List<RoleModel> expected, List<RoleModel> actual) {
|
||||
Assert.assertEquals(expected.size(), actual.size());
|
||||
Iterator<RoleModel> exp = expected.iterator();
|
||||
Iterator<RoleModel> act = actual.iterator();
|
||||
while (exp.hasNext()) {
|
||||
Assert.assertEquals(exp.next().getName(), act.next().getName());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,118 @@
|
||||
package org.keycloak.test;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.keycloak.models.KeycloakSession;
|
||||
import org.keycloak.models.KeycloakSessionFactory;
|
||||
import org.keycloak.models.RealmModel;
|
||||
import org.keycloak.models.RoleModel;
|
||||
import org.keycloak.models.UserModel;
|
||||
import org.keycloak.models.UserModel.RequiredAction;
|
||||
import org.keycloak.services.managers.RealmManager;
|
||||
import org.keycloak.services.resources.KeycloakApplication;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
|
||||
*/
|
||||
public class UserModelTest extends AbstractKeycloakServerTest {
|
||||
private KeycloakSessionFactory factory;
|
||||
private KeycloakSession identitySession;
|
||||
private RealmManager manager;
|
||||
|
||||
@Before
|
||||
public void before() throws Exception {
|
||||
factory = KeycloakApplication.buildSessionFactory();
|
||||
identitySession = factory.createSession();
|
||||
identitySession.getTransaction().begin();
|
||||
manager = new RealmManager(identitySession);
|
||||
}
|
||||
|
||||
@After
|
||||
public void after() throws Exception {
|
||||
identitySession.getTransaction().commit();
|
||||
identitySession.close();
|
||||
factory.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void persistUser() {
|
||||
RealmModel realm = manager.createRealm("original");
|
||||
UserModel user = realm.addUser("user");
|
||||
user.setFirstName("first-name");
|
||||
user.setLastName("last-name");
|
||||
user.setEmail("email");
|
||||
|
||||
user.addRedirectUri("redirect-1");
|
||||
user.addRedirectUri("redirect-2");
|
||||
|
||||
user.addRequiredAction(RequiredAction.CONFIGURE_TOTP);
|
||||
user.addRequiredAction(RequiredAction.UPDATE_PASSWORD);
|
||||
|
||||
UserModel persisted = manager.getRealm(realm.getId()).getUser("user");
|
||||
|
||||
assertEquals(user, persisted);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUserRequiredActions() throws Exception {
|
||||
RealmModel realm = manager.createRealm("original");
|
||||
UserModel user = realm.addUser("user");
|
||||
|
||||
Assert.assertTrue(user.getRequiredActions().isEmpty());
|
||||
|
||||
user.addRequiredAction(UserModel.RequiredAction.CONFIGURE_TOTP);
|
||||
user = realm.getUser("user");
|
||||
|
||||
Assert.assertEquals(1, user.getRequiredActions().size());
|
||||
Assert.assertTrue(user.getRequiredActions().contains(RequiredAction.CONFIGURE_TOTP));
|
||||
|
||||
user.addRequiredAction(UserModel.RequiredAction.CONFIGURE_TOTP);
|
||||
user = realm.getUser("user");
|
||||
|
||||
Assert.assertEquals(1, user.getRequiredActions().size());
|
||||
Assert.assertTrue(user.getRequiredActions().contains(RequiredAction.CONFIGURE_TOTP));
|
||||
|
||||
user.addRequiredAction(UserModel.RequiredAction.VERIFY_EMAIL);
|
||||
user = realm.getUser("user");
|
||||
|
||||
Assert.assertEquals(2, user.getRequiredActions().size());
|
||||
Assert.assertTrue(user.getRequiredActions().contains(RequiredAction.CONFIGURE_TOTP));
|
||||
Assert.assertTrue(user.getRequiredActions().contains(RequiredAction.VERIFY_EMAIL));
|
||||
|
||||
user.removeRequiredAction(UserModel.RequiredAction.CONFIGURE_TOTP);
|
||||
user = realm.getUser("user");
|
||||
|
||||
Assert.assertEquals(1, user.getRequiredActions().size());
|
||||
Assert.assertTrue(user.getRequiredActions().contains(RequiredAction.VERIFY_EMAIL));
|
||||
|
||||
user.removeRequiredAction(UserModel.RequiredAction.VERIFY_EMAIL);
|
||||
user = realm.getUser("user");
|
||||
|
||||
Assert.assertTrue(user.getRequiredActions().isEmpty());
|
||||
}
|
||||
|
||||
public static void assertEquals(UserModel expected, UserModel actual) {
|
||||
Assert.assertEquals(expected.getLoginName(), actual.getLoginName());
|
||||
Assert.assertEquals(expected.getFirstName(), actual.getFirstName());
|
||||
Assert.assertEquals(expected.getLastName(), actual.getLastName());
|
||||
Assert.assertArrayEquals(expected.getRedirectUris().toArray(), actual.getRedirectUris().toArray());
|
||||
Assert.assertArrayEquals(expected.getRequiredActions().toArray(), actual.getRequiredActions().toArray());
|
||||
|
||||
}
|
||||
|
||||
public static void assertEquals(List<RoleModel> expected, List<RoleModel> actual) {
|
||||
Assert.assertEquals(expected.size(), actual.size());
|
||||
Iterator<RoleModel> exp = expected.iterator();
|
||||
Iterator<RoleModel> act = actual.iterator();
|
||||
while (exp.hasNext()) {
|
||||
Assert.assertEquals(exp.next().getName(), act.next().getName());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user