package org.keycloak.testsuite.util; import org.keycloak.admin.client.resource.RealmResource; import org.keycloak.common.util.Base64; import org.keycloak.common.util.CertificateUtils; import org.keycloak.representations.idm.RealmRepresentation; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.cert.X509Certificate; /** * @author <a href="mailto:bruno@abstractj.org">Bruno Oliveira</a>. */ public class RealmManager { private static RealmResource realm; private RealmManager() { } public static RealmManager realm(RealmResource realm) { RealmManager.realm = realm; return new RealmManager(); } public RealmManager accessCodeLifeSpan(Integer accessCodeLifespan) { RealmRepresentation realmRepresentation = realm.toRepresentation(); realmRepresentation.setAccessCodeLifespan(accessCodeLifespan); realm.update(realmRepresentation); return this; } public RealmManager verifyEmail(Boolean enabled) { RealmRepresentation rep = realm.toRepresentation(); rep.setVerifyEmail(enabled); realm.update(rep); return this; } public RealmManager passwordPolicy(String passwordPolicy) { RealmRepresentation rep = realm.toRepresentation(); rep.setPasswordPolicy(passwordPolicy); realm.update(rep); return this; } public RealmManager revokeRefreshToken(boolean enable) { RealmRepresentation rep = realm.toRepresentation(); rep.setRevokeRefreshToken(enable); realm.update(rep); return this; } public void generateKeys() { RealmRepresentation rep = realm.toRepresentation(); KeyPair keyPair; try { KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA"); generator.initialize(2048); keyPair = generator.generateKeyPair(); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } rep.setPrivateKey(Base64.encodeBytes(keyPair.getPrivate().getEncoded())); rep.setPublicKey(Base64.encodeBytes(keyPair.getPublic().getEncoded())); X509Certificate certificate; try { certificate = CertificateUtils.generateV1SelfSignedCertificate(keyPair, rep.getId()); rep.setCertificate(Base64.encodeBytes(certificate.getEncoded())); } catch (Exception e) { throw new RuntimeException(e); } rep.setCodeSecret(org.keycloak.models.utils.KeycloakModelUtils.generateCodeSecret()); realm.update(rep); } public void keyPair(String privateKey, String publicKey) { RealmRepresentation rep = realm.toRepresentation(); rep.setPrivateKey(privateKey); rep.setPublicKey(publicKey); realm.update(rep); } public void ssoSessionMaxLifespan(int ssoSessionMaxLifespan) { RealmRepresentation rep = realm.toRepresentation(); rep.setSsoSessionMaxLifespan(ssoSessionMaxLifespan); realm.update(rep); } public void sslRequired(String sslRequired) { RealmRepresentation rep = realm.toRepresentation(); rep.setSslRequired(sslRequired); realm.update(rep); } public void accessTokenLifespan(int accessTokenLifespan) { RealmRepresentation rep = realm.toRepresentation(); rep.setAccessTokenLifespan(accessTokenLifespan); realm.update(rep); } public RealmManager ssoSessionIdleTimeout(int ssoSessionIdleTimeout) { RealmRepresentation rep = realm.toRepresentation(); rep.setSsoSessionIdleTimeout(ssoSessionIdleTimeout); realm.update(rep); return this; } }