Remove Red Hat Single Sign-On product profile from upstream (#14697)

* Remove Red Hat Single Sign-On product profile from upstream

Closes #14916

* review suggestions: Remove Red Hat Single Sign-On product profile from upstream

Closes #14916

Co-authored-by: Peter Skopek <pskopek@redhat.com>
This commit is contained in:
Stian Thorgersen 2022-10-18 14:43:04 +02:00 committed by GitHub
parent 31aefd1489
commit 97ae90de88
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
85 changed files with 183 additions and 3766 deletions

View File

@ -33,24 +33,11 @@
<modules>
<module>core-public</module>
<module>core</module>
<module>jetty</module>
<module>undertow</module>
<module>tomcat</module>
<module>wildfly</module>
<module>servlet-filter</module>
<module>wildfly-elytron</module>
</modules>
<profiles>
<profile>
<id>community</id>
<activation>
<property>
<name>!product</name>
</property>
</activation>
<modules>
<module>jetty</module>
</modules>
</profile>
</profiles>
</project>

View File

@ -34,12 +34,9 @@ import org.jboss.logging.Logger;
*/
public class Profile {
public static final String PRODUCT_NAME = ProductValue.RHSSO.getName();
public static final String PROJECT_NAME = ProductValue.KEYCLOAK.getName();
private static final Logger logger = Logger.getLogger(Profile.class);
private static Profile CURRENT;
private final ProductValue product;
private final ProfileValue profile;
private final Set<Feature> disabledFeatures = new HashSet<>();
private final Set<Feature> previewFeatures = new HashSet<>();
@ -50,12 +47,11 @@ public class Profile {
this.propertyResolver = resolver;
Config config = new Config();
product = PRODUCT_NAME.toLowerCase().equals(Version.NAME) ? ProductValue.RHSSO : ProductValue.KEYCLOAK;
profile = ProfileValue.valueOf(config.getProfile().toUpperCase());
for (Feature f : Feature.values()) {
Boolean enabled = config.getConfig(f);
Type type = product.equals(ProductValue.RHSSO) ? f.getTypeProduct() : f.getTypeProject();
Type type = f.getType();
switch (type) {
case DEFAULT:
@ -142,10 +138,6 @@ public class Profile {
return !getInstance().disabledFeatures.contains(feature);
}
public static boolean isProduct() {
return getInstance().profile.equals(ProfileValue.PRODUCT);
}
public enum Type {
DEFAULT,
DISABLED_BY_DEFAULT,
@ -195,55 +187,25 @@ public class Profile {
JS_ADAPTER("Host keycloak.js and keycloak-authz.js through the Keycloak sever", Type.DEFAULT);
private final Type typeProject;
private final Type typeProduct;
private final Type type;
private String label;
Feature(String label, Type type) {
this(label, type, type);
}
Feature(String label, Type typeProject, Type typeProduct) {
this.label = label;
this.typeProject = typeProject;
this.typeProduct = typeProduct;
this.type = type;
}
public String getLabel() {
return label;
}
public Type getTypeProject() {
return typeProject;
}
public Type getTypeProduct() {
return typeProduct;
}
public boolean hasDifferentProductType() {
return typeProject != typeProduct;
}
}
private enum ProductValue {
KEYCLOAK("Keycloak"),
RHSSO("RH-SSO");
private final String name;
ProductValue(String name) {
this.name = name;
}
public String getName() {
return name;
public Type getType() {
return type;
}
}
private enum ProfileValue {
COMMUNITY,
PRODUCT,
DEFAULT,
PREVIEW
}
@ -281,10 +243,14 @@ public class Profile {
profile = properties.getProperty("profile");
if (profile != null) {
if (profile.equals("community")) {
profile = "default";
}
return profile;
}
return Version.DEFAULT_PROFILE;
return ProfileValue.DEFAULT.name();
}
public Boolean getConfig(Feature feature) {

View File

@ -27,25 +27,17 @@ import java.util.Properties;
*/
public class Version {
public static final String UNKNOWN = "UNKNOWN";
public static String NAME;
public static String NAME_FULL;
public static String NAME_HTML;
public static final String NAME = "Keycloak";
public static final String NAME_HTML = "<div class=\"kc-logo-text\"><span>Keycloak</span></div>";
public static String VERSION;
public static String VERSION_KEYCLOAK;
public static String RESOURCES_VERSION;
public static String BUILD_TIME;
public static String DEFAULT_PROFILE;
static {
try (InputStream is = Version.class.getResourceAsStream("/keycloak-version.properties")) {
Properties props = new Properties();
props.load(is);
Version.NAME = props.getProperty("name");
Version.NAME_FULL = props.getProperty("name-full");
Version.NAME_HTML = props.getProperty("name-html");
Version.DEFAULT_PROFILE = props.getProperty("default-profile");
Version.VERSION = props.getProperty("version");
Version.VERSION_KEYCLOAK = props.getProperty("version-keycloak");
Version.BUILD_TIME = props.getProperty("build-time");
Version.RESOURCES_VERSION = Version.VERSION.toLowerCase();

View File

@ -14,11 +14,5 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
name=${product.name}
name-full=${product.name.full}
name-html=${product.name-html}
version=${product.version}
version-keycloak=${project.version}
build-time=${product.build-time}
default-profile=${product.default-profile}
version=${project.version}
build-time=${project.build-time}

View File

@ -1,20 +1,16 @@
package org.keycloak.common;
import static org.junit.Assert.assertTrue;
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.keycloak.common.Profile.Feature;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Properties;
import java.util.Set;
import org.keycloak.common.Profile.Feature;
import static org.junit.Assert.assertTrue;
public class ProfileTest {
@ -22,31 +18,15 @@ public class ProfileTest {
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@Test
public void checkDefaultsKeycloak() {
Assert.assertEquals("community", Profile.getName());
public void checkDefaults() {
Assert.assertEquals("default", Profile.getName());
assertEquals(Profile.getDisabledFeatures(), Profile.Feature.ADMIN, Profile.Feature.ADMIN_FINE_GRAINED_AUTHZ, Profile.Feature.DYNAMIC_SCOPES, Profile.Feature.DOCKER, Profile.Feature.RECOVERY_CODES, Profile.Feature.SCRIPTS, Profile.Feature.TOKEN_EXCHANGE, Profile.Feature.OPENSHIFT_INTEGRATION, Profile.Feature.MAP_STORAGE, Profile.Feature.DECLARATIVE_USER_PROFILE, Feature.CLIENT_SECRET_ROTATION, Feature.UPDATE_EMAIL);
assertEquals(Profile.getPreviewFeatures(), Profile.Feature.ADMIN_FINE_GRAINED_AUTHZ, Profile.Feature.RECOVERY_CODES, Profile.Feature.SCRIPTS, Profile.Feature.TOKEN_EXCHANGE, Profile.Feature.OPENSHIFT_INTEGRATION, Profile.Feature.DECLARATIVE_USER_PROFILE, Feature.CLIENT_SECRET_ROTATION, Feature.UPDATE_EMAIL);
}
@Test
public void checkDefaultsRH_SSO() {
System.setProperty("keycloak.profile", "product");
String backUpName = Version.NAME;
Version.NAME = Profile.PRODUCT_NAME.toLowerCase();
Profile.init();
Assert.assertEquals("product", Profile.getName());
assertEquals(Profile.getDisabledFeatures(), Profile.Feature.ADMIN, Profile.Feature.ADMIN_FINE_GRAINED_AUTHZ, Profile.Feature.DYNAMIC_SCOPES, Profile.Feature.DOCKER, Profile.Feature.RECOVERY_CODES, Profile.Feature.SCRIPTS, Profile.Feature.TOKEN_EXCHANGE, Profile.Feature.OPENSHIFT_INTEGRATION, Profile.Feature.MAP_STORAGE, Profile.Feature.DECLARATIVE_USER_PROFILE, Feature.CLIENT_SECRET_ROTATION, Feature.UPDATE_EMAIL);
assertEquals(Profile.getPreviewFeatures(), Profile.Feature.ADMIN_FINE_GRAINED_AUTHZ, Profile.Feature.RECOVERY_CODES, Profile.Feature.SCRIPTS, Profile.Feature.TOKEN_EXCHANGE, Profile.Feature.OPENSHIFT_INTEGRATION, Profile.Feature.DECLARATIVE_USER_PROFILE, Feature.CLIENT_SECRET_ROTATION, Feature.UPDATE_EMAIL);
System.setProperty("keycloak.profile", "community");
Version.NAME = backUpName;
Profile.init();
}
@Test
public void configWithSystemProperties() {
Assert.assertEquals("community", Profile.getName());
Assert.assertEquals("default", Profile.getName());
Assert.assertFalse(Profile.isFeatureEnabled(Profile.Feature.DOCKER));
Assert.assertFalse(Profile.isFeatureEnabled(Profile.Feature.OPENSHIFT_INTEGRATION));
assertTrue(Profile.isFeatureEnabled(Profile.Feature.IMPERSONATION));
@ -71,38 +51,6 @@ public class ProfileTest {
Profile.init();
}
@Test
public void configWithPropertiesFile() throws IOException {
Assert.assertEquals("community", Profile.getName());
Assert.assertFalse(Profile.isFeatureEnabled(Profile.Feature.DOCKER));
assertTrue(Profile.isFeatureEnabled(Profile.Feature.IMPERSONATION));
File d = temporaryFolder.newFolder();
File f = new File(d, "profile.properties");
Properties p = new Properties();
p.setProperty("profile", "preview");
p.setProperty("feature.docker", "enabled");
p.setProperty("feature.impersonation", "disabled");
p.setProperty("feature.upload_scripts", "enabled");
PrintWriter pw = new PrintWriter(f);
p.list(pw);
pw.close();
System.setProperty("jboss.server.config.dir", d.getAbsolutePath());
Profile.init();
Assert.assertEquals("preview", Profile.getName());
assertTrue(Profile.isFeatureEnabled(Profile.Feature.DOCKER));
assertTrue(Profile.isFeatureEnabled(Profile.Feature.OPENSHIFT_INTEGRATION));
Assert.assertFalse(Profile.isFeatureEnabled(Profile.Feature.IMPERSONATION));
System.getProperties().remove("jboss.server.config.dir");
Profile.init();
}
public static void assertEquals(Set<Profile.Feature> actual, Profile.Feature... expected) {
Profile.Feature[] a = actual.toArray(new Profile.Feature[actual.size()]);
Arrays.sort(a, new FeatureComparator());

View File

@ -85,19 +85,4 @@
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>product</id>
<activation>
<property>
<name>product</name>
</property>
</activation>
<build>
<finalName>${product.name}-${product.filename.version}-js-adapter</finalName>
</build>
</profile>
</profiles>
</project>

View File

@ -38,15 +38,15 @@
</fileSet>
<!-- License Data -->
<fileSet>
<directory>src/main/resources/licenses/${product.slot}</directory>
<outputDirectory>docs/licenses-${product.slot}-adapter</outputDirectory>
<directory>src/main/resources/licenses/keycloak</directory>
<outputDirectory>docs/licenses-keycloak-adapter</outputDirectory>
<excludes>
<exclude>licenses.xml</exclude>
</excludes>
</fileSet>
<fileSet>
<directory>target/licenses</directory>
<outputDirectory>docs/licenses-${product.slot}-adapter</outputDirectory>
<outputDirectory>docs/licenses-keycloak-adapter</outputDirectory>
</fileSet>
</fileSets>
</assembly>

View File

@ -89,19 +89,4 @@
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>product</id>
<activation>
<property>
<name>product</name>
</property>
</activation>
<build>
<finalName>${product.name}-${product.filename.version}-js-adapter</finalName>
</build>
</profile>
</profiles>
</project>

View File

@ -33,21 +33,8 @@
<modules>
<module>js-adapter-zip</module>
<module>wildfly-adapter</module>
<module>tomcat-adapter-zip</module>
<module>jetty94-adapter-zip</module>
<module>js-adapter-npm-zip</module>
</modules>
<profiles>
<profile>
<id>community</id>
<activation>
<property>
<name>!product</name>
</property>
</activation>
<modules>
<module>tomcat-adapter-zip</module>
<module>jetty94-adapter-zip</module>
<module>js-adapter-npm-zip</module>
</modules>
</profile>
</profiles>
</project>

View File

@ -29,6 +29,7 @@
<wildfly.build-tools.version>1.2.13.Final</wildfly.build-tools.version>
<wildfly.core.version>15.0.1.Final</wildfly.core.version>
<org.wildfly.galleon-plugins.version>5.1.3.Final</org.wildfly.galleon-plugins.version>
<assemblyFile>assembly.xml</assemblyFile>
</properties>
<artifactId>keycloak-wildfly-adapter-dist</artifactId>
@ -89,36 +90,4 @@
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>community</id>
<activation>
<property>
<name>!product</name>
</property>
</activation>
<properties>
<build-tools.version>${wildfly.build-tools.version}</build-tools.version>
<assemblyFile>assembly.xml</assemblyFile>
</properties>
</profile>
<profile>
<id>product</id>
<activation>
<property>
<name>product</name>
</property>
</activation>
<properties>
<assemblyFile>assembly.xml</assemblyFile>
<profileExcludes>%regex[(docs/contrib.*)|(docs/examples.*)|(docs/schema.*)]</profileExcludes>
</properties>
<build>
<finalName>${product.name}-${product.filename.version}-eap7-adapter</finalName>
</build>
</profile>
</profiles>
</project>

View File

@ -30,9 +30,51 @@
<description/>
<properties>
<javadoc.branding>${product.name.full} ${product.version}</javadoc.branding>
<javadoc.branding>Keycloak ${project.version}</javadoc.branding>
</properties>
<dependencies>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-dependencies-server-all</artifactId>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-admin-client</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-authz-client</artifactId>
</dependency>
<!-- Include all classes that are marked "provided" and therefore not included in the dependencies above.
This avoids warnings when generating the JavaDoc -->
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-model-build-processor</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging-annotations</artifactId>
</dependency>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
</dependency>
<dependency>
<!-- Included here as it provides Nonnull from com.google.code.findbugs:jsr305.
That is used in annotations in FilesPlainTextVaultProvider -->
<groupId>com.googlecode.owasp-java-html-sanitizer</groupId>
<artifactId>owasp-java-html-sanitizer</artifactId>
</dependency>
<dependency>
<groupId>org.infinispan.protostream</groupId>
<artifactId>protostream-processor</artifactId>
<version>${infinispan.protostream.processor.version}</version>
</dependency>
</dependencies>
<build>
<finalName>keycloak-api-docs-${project.version}</finalName>
<plugins>
@ -75,165 +117,28 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<id>aggregate-javadoc</id>
<configuration>
<includeTransitiveDependencySources>true</includeTransitiveDependencySources>
<dependencySourceIncludes>
<dependencySourceInclude>org.keycloak:*</dependencySourceInclude>
</dependencySourceIncludes>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>community</id>
<activation>
<property>
<name>!product</name>
</property>
</activation>
<dependencies>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-dependencies-server-all</artifactId>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-admin-client</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-authz-client</artifactId>
</dependency>
<!-- Include all classes that are marked "provided" and therefore not included in the dependencies above.
This avoids warnings when generating the JavaDoc -->
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-model-build-processor</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging-annotations</artifactId>
</dependency>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
</dependency>
<dependency>
<!-- Included here as it provides Nonnull from com.google.code.findbugs:jsr305.
That is used in annotations in FilesPlainTextVaultProvider -->
<groupId>com.googlecode.owasp-java-html-sanitizer</groupId>
<artifactId>owasp-java-html-sanitizer</artifactId>
</dependency>
<dependency>
<groupId>org.infinispan.protostream</groupId>
<artifactId>protostream-processor</artifactId>
<version>${infinispan.protostream.processor.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<id>aggregate-javadoc</id>
<configuration>
<includeTransitiveDependencySources>true</includeTransitiveDependencySources>
<dependencySourceIncludes>
<dependencySourceInclude>org.keycloak:*</dependencySourceInclude>
</dependencySourceIncludes>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>product</id>
<activation>
<property>
<name>product</name>
</property>
</activation>
<!-- Make sure to keep this list in sync with <dependencySourceIncludes> -->
<dependencies>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-server-spi</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-common</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-core</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-saml-core-public</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-adapter-spi</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-adapter-core</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-saml-adapter-api-public</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-admin-client</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-authz-client</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<id>aggregate-javadoc</id>
<configuration>
<windowtitle>${javadoc.branding} public API</windowtitle>
<doctitle>${javadoc.branding} public API</doctitle>
<header>${javadoc.branding}</header>
<footer>${javadoc.branding}</footer>
<includeTransitiveDependencySources>false</includeTransitiveDependencySources>
<!-- Make sure to keep this list in sync with <dependencies> -->
<dependencySourceIncludes>
<include>org.keycloak:keycloak-server-spi</include>
<include>org.keycloak:keycloak-common</include>
<include>org.keycloak:keycloak-core</include>
<include>org.keycloak:keycloak-saml-core-public</include>
<include>org.keycloak:keycloak-adapter-spi</include>
<include>org.keycloak:keycloak-adapter-core</include>
<include>org.keycloak:keycloak-saml-adapter-api-public</include>
<include>org.keycloak:keycloak-admin-client</include>
<include>org.keycloak:keycloak-authz-client</include>
</dependencySourceIncludes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>

View File

@ -29,46 +29,36 @@
<name>Keycloak Release Downloads</name>
<description/>
<profiles>
<profile>
<id>community</id>
<activation>
<property>
<name>!product</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<id>server-downloads</id>
<phase>package</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<skip>true</skip>
<mainClass>CopyDependencies</mainClass>
<arguments>
<argument>${settings.localRepository}</argument>
<argument>${project.build.directory}</argument>
<argument>${project.version}</argument>
</arguments>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<id>server-downloads</id>
<phase>package</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>CopyDependencies</mainClass>
<arguments>
<argument>${settings.localRepository}</argument>
<argument>${project.build.directory}</argument>
<argument>${project.version}</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -31,15 +31,15 @@
<!-- License Data -->
<fileSet>
<directory>src/main/resources/licenses/${product.slot}</directory>
<outputDirectory>content/docs/licenses-${product.slot}</outputDirectory>
<directory>src/main/resources/licenses/keycloak</directory>
<outputDirectory>content/docs/licenses-keycloak</outputDirectory>
<excludes>
<exclude>licenses.xml</exclude>
</excludes>
</fileSet>
<fileSet>
<directory>target/licenses</directory>
<outputDirectory>content/docs/licenses-${product.slot}</outputDirectory>
<outputDirectory>content/docs/licenses-keycloak</outputDirectory>
</fileSet>
</fileSets>
</assembly>

View File

@ -27,6 +27,10 @@
<wildfly.build-tools.version>1.2.13.Final</wildfly.build-tools.version>
<wildfly.core.version>15.0.1.Final</wildfly.core.version>
<org.wildfly.galleon-plugins.version>5.1.3.Final</org.wildfly.galleon-plugins.version>
<feature.parent>org.wildfly:wildfly-feature-pack</feature.parent>
<!-- EAP feature.parent
<feature.parent>org.jboss.eap:wildfly-feature-pack</feature.parent>
-->
</properties>
<modelVersion>4.0.0</modelVersion>
@ -150,6 +154,13 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.wildfly</groupId>
<artifactId>wildfly-feature-pack</artifactId>
<version>${wildfly.version}</version>
<type>zip</type>
</dependency>
</dependencies>
<build>
@ -205,53 +216,4 @@
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>community</id>
<activation>
<property>
<name>!product</name>
</property>
</activation>
<properties>
<build-tools.version>${wildfly.build-tools.version}</build-tools.version>
<feature.parent>org.wildfly:wildfly-feature-pack</feature.parent>
</properties>
<dependencies>
<dependency>
<groupId>org.wildfly</groupId>
<artifactId>wildfly-feature-pack</artifactId>
<version>${wildfly.version}</version>
<type>zip</type>
</dependency>
</dependencies>
</profile>
<profile>
<id>product</id>
<activation>
<property>
<name>product</name>
</property>
</activation>
<properties>
<feature.parent>org.jboss.eap:wildfly-feature-pack</feature.parent>
</properties>
<dependencies>
<dependency>
<groupId>org.jboss.eap</groupId>
<artifactId>wildfly-feature-pack</artifactId>
<version>${eap.version}</version>
<type>zip</type>
</dependency>
</dependencies>
</profile>
</profiles>
</project>

View File

@ -27,7 +27,7 @@ class LicenseProcessMojo extends AbstractMojo {
// Property configuration with defaults
def outputDirectoryRaw = project.properties['outputDirectory'] ?: "${project.build.directory}/licenses"
def xmlFileSource = project.properties['xmlFileSource'] ?: "${project.basedir}/src/main/resources/licenses/${project.properties['product.slot']}/licenses.xml"
def xmlFileSource = project.properties['xmlFileSource'] ?: "${project.basedir}/src/main/resources/licenses/keycloak/licenses.xml"
def licenseName = project.properties['licenseName'] ?: "Apache Software License 2.0"
def licenseUrl = project.properties['licenseUrl'] ?: "https://raw.githubusercontent.com/keycloak/keycloak/${project.version}/LICENSE.txt"
def groupId = project.properties['groupId'] ?: "org.keycloak"
@ -91,7 +91,7 @@ class LicenseProcessMojo extends AbstractMojo {
InputStream input = this.class.getResourceAsStream("keycloak-licenses-common/licenses.xsl")
transformer = TransformerFactory.newInstance().newTemplates(new StreamSource(input)).newTransformer()
}
transformer.setParameter("productname", project.properties['product.name.full'])
transformer.setParameter("productname", "Keycloak")
transformer.setParameter("version", project.version)
outputLicensesXmlFile.withInputStream() { inStream ->
def input = new StreamSource(inStream)

View File

@ -32,21 +32,8 @@
<modules>
<module>wildfly-adapter</module>
<module>jetty94-adapter-zip</module>
<module>tomcat-adapter-zip</module>
</modules>
<profiles>
<profile>
<id>community</id>
<activation>
<property>
<name>!product</name>
</property>
</activation>
<modules>
<module>jetty94-adapter-zip</module>
<module>tomcat-adapter-zip</module>
</modules>
</profile>
</profiles>
</project>

View File

@ -34,7 +34,7 @@
</fileSet>
<fileSet>
<directory>${project.build.directory}/unpacked/licenses</directory>
<outputDirectory>docs/licenses-${product.slot}</outputDirectory>
<outputDirectory>docs/licenses-keycloak</outputDirectory>
</fileSet>
</fileSets>
<files>

View File

@ -89,19 +89,4 @@
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>product</id>
<activation>
<property>
<name>product</name>
</property>
</activation>
<build>
<finalName>${product.name}-${product.filename.version}-saml-eap7-adapter</finalName>
</build>
</profile>
</profiles>
</project>

View File

@ -25,7 +25,7 @@
<fileSets>
<fileSet>
<directory>src/main/resources/licenses/${product.slot}</directory>
<directory>src/main/resources/licenses/keycloak</directory>
<outputDirectory>licenses</outputDirectory>
<excludes>
<exclude>licenses.xml</exclude>

View File

@ -13,7 +13,7 @@ public class Features {
public Features() {
this.features = Arrays.stream(Profile.Feature.values())
.filter(f -> !f.getTypeProject().equals(Profile.Type.EXPERIMENTAL))
.filter(f -> !f.getType().equals(Profile.Type.EXPERIMENTAL))
.map(f -> new Feature(f))
.sorted(Comparator.comparing(Feature::getName))
.collect(Collectors.toList());
@ -52,7 +52,7 @@ public class Features {
}
private Profile.Type getType() {
return profileFeature.getTypeProject();
return profileFeature.getType();
}
}

View File

@ -29,19 +29,8 @@
<artifactId>keycloak-docs-parent</artifactId>
<packaging>pom</packaging>
<profiles>
<profile>
<id>quarkus</id>
<activation>
<jdk>[11,)</jdk>
<property>
<name>!product</name>
</property>
</activation>
<modules>
<module>maven-plugin</module>
<module>guides</module>
</modules>
</profile>
</profiles>
<modules>
<module>maven-plugin</module>
<module>guides</module>
</modules>
</project>

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +0,0 @@
# fabric8-analytics-version-comparator/f8a\_version\_comparator
Python module/library implementing generic Maven version comparison:
https://github.com/apache/maven/blob/master/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java
The "f8a\_version\_comparator" Python module implementation was taken
from "fabric8-analytics/fabric8-analytics-version-comparator" repository:
https://github.com/fabric8-analytics/fabric8-analytics-version-comparator

View File

@ -1,28 +0,0 @@
# Copyright © 2018 Red Hat Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Author: Geetika Batra <gbatra@redhat.com>
#
"""Initialize Module."""
__all__ = [
"base",
"comparable_version",
"item_object",
]
from . import base
from . import comparable_version
from . import item_object

View File

@ -1,28 +0,0 @@
# Copyright © 2018 Red Hat Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Author: Geetika Batra <gbatra@redhat.com>
#
"""Item class acting as base class for various item types."""
from abc import ABCMeta, abstractmethod
class Item(metaclass=ABCMeta):
"""Base class for maven version comparator tasks."""
@abstractmethod
def compare_to(self, _item):
"""Compare two maven versions."""

View File

@ -1,213 +0,0 @@
# Copyright © 2018 Red Hat Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Author: Geetika Batra <gbatra@redhat.com>
#
"""Module to implement Comparable Version class."""
import typing
from .item_object import IntegerItem
from .item_object import StringItem
from .item_object import ListItem
class ComparableVersion:
"""Class for Comparable Version."""
def __init__(self, version: str):
"""Initialize comparable version class.
:version: Version supplied as a string
"""
if not isinstance(version, str):
raise TypeError(
"Invalid type {got!r} of argument `version`, expected {expected!r}".format(
got=type(version),
expected=str
))
self.version = version
self.items = self.parse_version()
def __repr__(self):
"""Return representation of ComparableVersion object."""
return "{cls!s}(version={version!r})".format(
cls=self.__class__.__name__,
version=self.version
)
def __str__(self):
"""Return version string held by ComparableVersion object."""
return "{version!s}".format(
version=self.version
)
def __eq__(self, other):
"""Compare ComparableVersion objects for equality.
This rich comparison implies whether self == other
"""
# don't call compare_to(None)
if other is None:
return False
return self.compare_to(other) == 0
def __ne__(self, other):
"""Compare ComparableVersion objects for equality.
This rich comparison implies whether self != other
"""
# don't call compare_to(None)
if other is None:
return True
return self.compare_to(other) != 0
def __lt__(self, other):
"""Compare ComparableVersion objects.
This rich comparison implies whether self < other
"""
# don't call compare_to(None)
if other is None:
return False
return self.compare_to(other) == -1
def __le__(self, other):
"""Compare ComparableVersion objects.
This rich comparison implies whether self <= other
"""
# don't call compare_to(None)
if other is None:
return False
return self.compare_to(other) <= 0
def __gt__(self, other):
"""Compare ComparableVersion objects.
This rich comparison implies whether self > other
"""
# don't call compare_to(None)
if other is None:
return True
return self.compare_to(other) == 1
def __ge__(self, other):
"""Compare ComparableVersion objects.
This rich comparison implies whether self >= other
"""
# don't call compare_to(None)
if other is None:
return True
return self.compare_to(other) >= 0
def parse_version(self):
"""Parse version."""
# TODO: reduce cyclomatic complexity
ref_list = ListItem()
items = ref_list
parse_stack = list()
version = self.version.lower()
parse_stack.append(ref_list)
_is_digit = False
_start_index = 0
for _ch in range(0, len(version)):
ver_char = version[_ch]
if ver_char == ".":
if _ch == _start_index:
ref_list.add_item(IntegerItem(0))
else:
ref_list.add_item(self.parse_item(_is_digit, version[_start_index: _ch]))
_start_index = _ch + 1
elif ver_char == "-":
if _ch == _start_index:
ref_list.add_item(IntegerItem(0))
else:
ref_list.add_item(self.parse_item(_is_digit, version[_start_index: _ch]))
_start_index = _ch + 1
temp = ListItem()
ref_list.add_item(temp)
ref_list = temp
parse_stack.append(ref_list)
elif ver_char.isdigit():
if not _is_digit and _ch > _start_index:
ref_list.add_item(StringItem(version[_start_index: _ch], True))
_start_index = _ch
temp = ListItem()
ref_list.add_item(temp)
ref_list = temp
parse_stack.append(ref_list)
_is_digit = True
else:
if _is_digit and _ch > _start_index:
ref_list.add_item(self.parse_item(True, version[_start_index:_ch]))
_start_index = _ch
temp = ListItem()
ref_list.add_item(temp)
ref_list = temp
parse_stack.append(ref_list)
_is_digit = False
if len(version) > _start_index:
ref_list.add_item(self.parse_item(_is_digit, version[_start_index:]))
while parse_stack:
ref_list = parse_stack.pop()
ref_list.normalize()
return items
@staticmethod
def parse_item(_is_digit, buf):
"""Wrap items in version in respective object class."""
# TODO: make this function static (it does not need 'self')
if _is_digit:
return IntegerItem(buf)
return StringItem(buf, False)
def compare_to(self, obj: typing.Union["ComparableVersion", str]):
"""Compare two ComparableVersion objects."""
if isinstance(obj, ComparableVersion):
# compare two objects of the same type
cmp_result = self.items.compare_to(obj.items)
elif isinstance(obj, str):
# compare against string
cmp_result = self.items.compare_to(ComparableVersion(obj).items)
else:
raise TypeError(
"Invalid type {got!r} of argument `obj`, expected <{expected}>".format(
got=type(obj),
expected=typing.Union["ComparableVersion", str]
))
return cmp_result

View File

@ -1,204 +0,0 @@
# Copyright © 2018 Red Hat Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Author: Geetika Batra <gbatra@redhat.com>
#
"""Module to implement methods item types."""
from .base import Item
# TODO: setup logging
class IntegerItem(Item):
"""Integer Item class for maven version comparator tasks."""
def __init__(self, str_version):
"""Initialize integer from string value of version.
:str_version: part of version supplied as string
"""
self.value = int(str_version)
def int_cmp(self, cmp_value):
"""Compare two integers."""
if self.value.__lt__(cmp_value):
return -1
if self.value.__gt__(cmp_value):
return 1
return 0
def compare_to(self, item):
"""Compare two maven versions."""
if item is None:
return 0 if self.value == 0 else 1
if isinstance(item, IntegerItem):
return self.int_cmp(item.value) # check if this value thing works
if isinstance(item, StringItem):
return 1
if isinstance(item, ListItem):
return 1
else:
raise ValueError("invalid item" + str(type(item)))
def to_string(self):
"""Return string value of version."""
return str(self.value)
def __str__(self):
"""Return string value of version - Pythonish variant."""
return str(self.value)
class StringItem(Item):
"""String Item class for maven version comparator tasks."""
def __init__(self, str_version, followed_by_digit):
"""Initialize string value of version.
:str_value: part of version supplied as string
:followed_by_digit: True if str_version is followed by digit
"""
self.qualifiers = ["alpha", "beta", "milestone", "rc", "snapshot", "", "sp"]
self.aliases = {
"ga": "",
"final": "",
"cr": "rc"
}
self.release_version_index = str(self.qualifiers.index(""))
self._decode_char_versions(str_version, followed_by_digit)
def _decode_char_versions(self, value, followed_by_digit):
"""Decode short forms of versions."""
if followed_by_digit and len(value) == 1:
if value.startswith("a"):
value = "alpha"
elif value.startswith("b"):
value = "beta"
elif value.startswith("m"):
value = "milestone"
self.value = self.aliases.get(value, value)
def comparable_qualifier(self, qualifier):
"""Get qualifier that is comparable."""
q_index = None
if qualifier in self.qualifiers:
q_index = self.qualifiers.index(qualifier)
q_index_not_found = str(len(self.qualifiers)) + "-" + qualifier
return str(q_index) if q_index is not None else q_index_not_found
def str_cmp(self, val1, val2):
"""Compare two strings."""
if val1.__lt__(val2):
return -1
if val1.__gt__(val2):
return 1
return 0
def compare_to(self, item):
"""Compare two maven versions."""
if item is None:
temp = self.str_cmp(self.comparable_qualifier(self.value), self.release_version_index)
return temp
if isinstance(item, IntegerItem):
return -1
if isinstance(item, StringItem):
return self.str_cmp(
self.comparable_qualifier(
self.value), self.comparable_qualifier(
item.value))
if isinstance(item, ListItem):
return -1
else:
raise ValueError("invalid item" + str(type(item)))
def to_string(self):
"""Return value in string form."""
return str(self.value)
def __str__(self):
"""Return string value of version - Pythonish variant."""
return str(self.value)
class ListItem(Item):
"""List Item class for maven version comparator tasks."""
def __init__(self):
"""Initialize string value of version."""
self.array_list = list()
def add_item(self, item):
"""Add item to array list."""
self.array_list.append(item)
def get_list(self):
"""Get object list items."""
return self.array_list
def normalize(self):
"""Remove trailing items: 0, "", empty list."""
red_list = [0, None, ""]
i = len(self.array_list) - 1
while i >= 0:
last_item = self.array_list[i]
if not isinstance(last_item, ListItem):
if last_item.value in red_list:
self.array_list.pop(i)
else:
break
i = i - 1
def compare_to(self, item):
"""Compare two maven versions."""
# TODO: reduce cyclomatic complexity
if item is None:
if len(self.array_list) == 0:
return 0
first = self.array_list[0]
return first.compare_to(None)
if isinstance(item, IntegerItem):
return -1
if isinstance(item, StringItem):
return 1
if isinstance(item, ListItem):
left_iter = iter(self.array_list)
right_iter = iter(item.get_list())
while True:
l_obj = next(left_iter, None)
r_obj = next(right_iter, None)
if l_obj is None and r_obj is None:
break
result = 0
if l_obj is None:
if r_obj is not None:
result = -1 * r_obj.compare_to(l_obj)
else:
result = l_obj.compare_to(r_obj)
if result != 0:
return result
return 0
else:
raise ValueError("invalid item" + str(type(item)))

View File

@ -1,139 +0,0 @@
#!/usr/bin/env python
# *
# * Copyright 2020 Red Hat, Inc. and/or its affiliates
# * and other contributors as indicated by the @author tags.
# *
# * Licensed under the Apache License, Version 2.0 (the "License");
# * you may not use this file except in compliance with the License.
# * You may obtain a copy of the License at
# *
# * http://www.apache.org/licenses/LICENSE-2.0
# *
# * Unless required by applicable law or agreed to in writing, software
# * distributed under the License is distributed on an "AS IS" BASIS,
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# * See the License for the specific language governing permissions and
# * limitations under the License.
# *
# *
import click, logging, os, sys
import lib.wildfly.upgrade as wu
CONTEXT_SETTINGS = dict(help_option_names = ['-h', '--help'])
FORCE_OPTION_HELP = """
Force elements / files updates.
In common mode of operation (without the "-f" or "--force" options) the
script upgrades the version of the Keycloak characteristic in question
(POM property, dependency, or some other XML element shared with Wildfly
application server) ONLY if the new version is HIGHER than the version of
the corresponding element currently present in the local copy of the
Keycloak repository, the script is operating on.
The -f, --force options instruct the script to allow an upgrade to replace
newer version of a particular Keycloak characteristic with an older one.
Useful to perform e.g. Keycloak downgrades to previous Wildfly versions.
"""
RHSSO_ADAPTERS_OPTION_HELP = """
Update artifacts versions of selected dependencies utilized by various
RH-SSO adapter license XML files. Also update the location of the
corresponding license text files within the repository so their names
reflect the updated artifacts versions.
"""
@click.command(context_settings=CONTEXT_SETTINGS)
@click.argument('tag', required = True, type=click.STRING)
@click.option('-f', '--force', help=FORCE_OPTION_HELP, is_flag=True)
@click.option('-r', '--update-rh-sso-adapters', help=RHSSO_ADAPTERS_OPTION_HELP, is_flag=True)
@click.option('-v', '--verbose', help='Enable verbose output.', is_flag=True)
@click.version_option(prog_name=sys.argv[0], version=wu.__version__)
def processParameters(tag, verbose, force, update_rh_sso_adapters):
"""
NAME
upgrade-keycloak-to-wildfly-tag.py - Rebase Keycloak on top of the
specified Wildfly tag (release)
DESCRIPTION
Update the versions of various Keycloak characteristics (versions of
POM properties, adapter dependencies, and other attributes actually
binding the Keycloak POM build configuration to the particular Wildfly
tag) to their corresponding values as used by the Wildfly application
server of version matching the tag / release, passed to the script as
argument.
EXAMPLES
Upgrade Keycloak to Wildfly 20 (using "20.0.1.Final" Wildfly tag):
$ python upgrade-keycloak-to-wildfly-tag.py 20.0.1.Final
Downgrade Keycloak to Wildfly 16 (using "16.0.0.Final" Wildfly tag,
script verbose mode to display the details about elements being
updated, and force option to perform the actual downgrade):
$ python upgrade-keycloak-to-wildfly-tag.py -v -f 16.0.0.Final
"""
# Set loglevel to debug if '-v' or '--verbose' option was specified
wu.__loglevel__ = logging.DEBUG if verbose else logging.INFO
upgradeKeycloakToWildflyTag(tag, forceUpdates = force, ssoAdapters = update_rh_sso_adapters)
def upgradeKeycloakToWildflyTag(tag, forceUpdates = False, ssoAdapters = False):
wildflyTag = wu.isWellFormedWildflyTag(tag)
wildflyPomBaseUrl = "https://github.com/wildfly/wildfly/raw/%s/pom.xml" % wildflyTag
taskLogger = wu.getTaskLogger("Rebase Keycloak on top of Wildfly '%s'" % wildflyTag)
taskLogger.info("Retrieving Wildfly's pom.xml for tag: %s" % wildflyTag)
wildflyPomFile = wu.saveUrlToNamedTemporaryFile(wildflyPomBaseUrl)
wildflyPomXmlRoot = wu.getXmlRoot(wildflyPomFile)
wildflyCoreTag = wu.isWellFormedWildflyTag( wu.getPomProperty(wildflyPomXmlRoot, "version.org.wildfly.core")[0].text )
wildflyCorePomBaseUrl = "https://github.com/wildfly/wildfly-core/raw/%s/pom.xml" % wildflyCoreTag
taskLogger.info("Retrieving Wildfly-Core pom.xml for tag: %s" % wildflyCoreTag)
wildflyCorePomFile = wu.saveUrlToNamedTemporaryFile(wildflyCorePomBaseUrl)
if wildflyPomFile != None and wildflyCorePomFile != None:
# Subtask - Update main Keycloak pom.xml file
wu.performMainKeycloakPomFileUpdateTask(wildflyPomFile, wildflyCorePomFile, forceUpdates)
# Subtask - Update adapter-galleon-pack pom.xml file if necessary
wu.performAdapterGalleonPackPomFileUpdateTask(wildflyCorePomFile, forceUpdates)
# Subtask - Update Keycloak adapters
wu.performKeycloakAdapterLicenseFilesUpdateTask(wildflyPomFile, wildflyCorePomFile, forceUpdates)
if ssoAdapters:
# Subtask - Update RH-SSO adapters
wu.performRhssoAdapterLicenseFilesUpdateTask(wildflyPomFile, wildflyCorePomFile, forceUpdates)
else:
skipRhSsoAdapterUpdatesMessage = (
"Skipping RH-SSO adapters updates since their changes weren't requested!",
"\n\tRerun the script with '-r' or '--update-rh-sso-adapters' option to request them."
)
taskLogger.warning(wu._empty_string.join(skipRhSsoAdapterUpdatesMessage))
# Subtask - Update properties of the deprecated Wildfly testing module if necessary
wu.performDeprecatedWildflyTestingModuleUpdateTask(forceUpdates)
# Subtask - Update version of jboss-parent if necessary
wu.performJbossParentVersionUpdateTask(wildflyTag, wildflyPomFile, wildflyCorePomFile, forceUpdates)
# Subtask - Synchronize the XML namespace of the 'subsystem' element of the Keycloak
# Infinispan subsystem template with its current value as used by Wildfly
wu.synchronizeInfinispanSubsystemXmlNamespaceWithWildfly(wildflyTag)
for filename in [wildflyPomFile, wildflyCorePomFile]:
os.remove(filename)
rebaseDoneMessage = (
"Done rebasing Keycloak to Wildfly '%s' release!" % wildflyTag,
"\n\tRun 'git status' to list the changed files and 'git diff <path>' to inspect changes done to a specific file."
)
taskLogger.info(wu._empty_string.join(rebaseDoneMessage))
if __name__ == '__main__':
processParameters()

View File

@ -79,7 +79,7 @@ public class ExportUtils {
ModelToRepresentation.exportRequiredActions(realm, rep);
// Project/product version
rep.setKeycloakVersion(Version.VERSION_KEYCLOAK);
rep.setKeycloakVersion(Version.VERSION);
// Client Scopes
rep.setClientScopes(realm.getClientScopesStream().map(ModelToRepresentation::toRepresentation).collect(Collectors.toList()));

View File

@ -120,7 +120,7 @@ public class LegacyMigrationManager implements MigrationManager {
session.setAttribute(Constants.STORAGE_BATCH_SIZE, Integer.getInteger("keycloak.migration.batch-size"));
MigrationModel model = session.getProvider(DeploymentStateProvider.class).getMigrationModel();
ModelVersion currentVersion = new ModelVersion(Version.VERSION_KEYCLOAK);
ModelVersion currentVersion = new ModelVersion(Version.VERSION);
ModelVersion latestUpdate = migrations[migrations.length-1].getVersion();
ModelVersion databaseVersion = model.getStoredVersion() != null ? new ModelVersion(model.getStoredVersion()) : null;

95
pom.xml
View File

@ -43,26 +43,15 @@
<quarkus.version>2.13.2.Final</quarkus.version>
<!--
Performing a Wildfly upgrade? Run the:
<project.build-time>${timestamp}</project.build-time>
"./misc/scripts/upgrade-wildfly/upgrade-keycloak-to-wildfly-tag.py"
script with the corresponding Wildfly tag, e.g. '20.0.0.Final' to get necessary Keycloak bits
updated automatically based on corresponding artifact versions used in Wildfly and Wildfly Core
IMPORTANT: If you add new dependency name / version property below, be sure to update the
"./misc/scripts/upgrade-wildfly/upgrade-keycloak-to-wildfly-tag.py" script too to ensure
the script continues to work
-->
<product.rhsso.version>7.5.0.GA</product.rhsso.version>
<product.build-time>${timestamp}</product.build-time>
<wildfly.version>26.1.1.Final</wildfly.version>
<wildfly.build-tools.version>1.2.13.Final</wildfly.build-tools.version>
<eap.version>7.4.0.GA-redhat-00005</eap.version>
<wildfly.core.version>18.1.1.Final</wildfly.core.version>
<apache.httpcomponents.fuse.version>4.5.2</apache.httpcomponents.fuse.version>
<apache.httpcomponents.httpcore.fuse.version>4.4.4</apache.httpcomponents.httpcore.fuse.version>
<ee.maven.groupId>org.wildfly</ee.maven.groupId>
<ee.maven.version>${wildfly.version}</ee.maven.version>
<jboss.as.version>7.2.0.Final</jboss.as.version>
<jboss.as.subsystem.test.version>7.5.22.Final-redhat-1</jboss.as.subsystem.test.version>
@ -1907,29 +1896,6 @@
</build>
<profiles>
<profile>
<id>community</id>
<activation>
<property>
<name>!product</name>
</property>
</activation>
<properties>
<product.name>Keycloak</product.name>
<product.name.full>Keycloak</product.name.full>
<product.slot>keycloak</product.slot>
<product.wildfly.console.slot>main</product.wildfly.console.slot>
<product.name-html>\u003Cdiv class="kc-logo-text"\u003E\u003Cspan\u003EKeycloak\u003C\u002Fspan\u003E\u003C\u002Fdiv\u003E</product.name-html>
<product.version>${project.version}</product.version>
<product.default-profile>community</product.default-profile>
<apache.httpcomponents.fuse.version>4.5.2</apache.httpcomponents.fuse.version>
<apache.httpcomponents.httpcore.fuse.version>4.4.4</apache.httpcomponents.httpcore.fuse.version>
<ee.maven.groupId>org.wildfly</ee.maven.groupId>
<ee.maven.version>${wildfly.version}</ee.maven.version>
<product.filename.version>${project.version}</product.filename.version>
</properties>
</profile>
<profile>
<id>jdk9</id>
<activation>
@ -1942,57 +1908,6 @@
</properties>
</profile>
<profile>
<id>product</id>
<activation>
<property>
<name>product</name>
</property>
</activation>
<properties>
<product.name.full>Red Hat Single Sign-On</product.name.full>
<product.name>rh-sso</product.name>
<product.slot>rh-sso</product.slot>
<product.wildfly.console.slot>eap</product.wildfly.console.slot>
<product.name-html>\u003Cstrong\u003ERed Hat\u003C\u002Fstrong\u003E\u003Csup\u003E\u00AE\u003C\u002Fsup\u003E Single Sign On</product.name-html>
<product.version>${product.rhsso.version}</product.version>
<apache.httpcomponents.fuse.version>4.5.2.redhat-2</apache.httpcomponents.fuse.version>
<apache.httpcomponents.httpcore.fuse.version>4.4.4.redhat-2</apache.httpcomponents.httpcore.fuse.version>
<product.default-profile>product</product.default-profile>
<ee.maven.groupId>org.jboss.eap</ee.maven.groupId>
<ee.maven.version>${eap.version}</ee.maven.version>
<!-- Properties that drive the names of various directories produced by and used in the build -->
<server.output.dir.prefix>${product.name}</server.output.dir.prefix>
<!-- Version suffix that is appended to directories. Default is the maven GAV version but this can be edited to use a short form version -->
<server.output.dir.version>${product.filename.version}</server.output.dir.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>set-product-filename-version</id>
<goals>
<goal>regex-property</goal>
</goals>
<phase>initialize</phase>
<configuration>
<name>product.filename.version</name>
<value>${product.rhsso.version}</value>
<regex>^(\d+(\.\d+)?).*?$</regex>
<replacement>$1</replacement>
<failIfNoMatch>true</failIfNoMatch>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>testsuite</id>
<activation>

View File

@ -1 +1 @@
Keycloak - Version ${product.version}
Keycloak - Version ${project.version}

View File

@ -63,7 +63,7 @@ public class KeycloakMain implements QuarkusApplication {
private static final String KEYCLOAK_ADMIN_PASSWORD_ENV_VAR = "KEYCLOAK_ADMIN_PASSWORD";
public static void main(String[] args) {
System.setProperty("kc.version", Version.VERSION_KEYCLOAK);
System.setProperty("kc.version", Version.VERSION);
List<String> cliArgs = Picocli.parseArgs(args);
if (cliArgs.isEmpty()) {

View File

@ -176,7 +176,6 @@ public class QuarkusWelcomeResource {
map.put("adminConsoleEnabled", isAdminConsoleEnabled());
map.put("productName", Version.NAME);
map.put("productNameFull", Version.NAME_FULL);
map.put("properties", theme.getProperties());
map.put("adminUrl", session.getContext().getUri(UrlType.ADMIN).getBaseUriBuilder().path("/admin/").build());

View File

@ -252,7 +252,7 @@ public class LegacyJpaConnectionProviderFactory extends AbstractJpaConnectionPro
JpaUpdaterProvider updater = session.getProvider(JpaUpdaterProvider.class);
boolean requiresMigration = version == null || !version.equals(new ModelVersion(Version.VERSION_KEYCLOAK).toString());
boolean requiresMigration = version == null || !version.equals(new ModelVersion(Version.VERSION).toString());
session.setAttribute(VERIFY_AND_RUN_MASTER_CHANGELOG, requiresMigration);
JpaUpdaterProvider.Status status = updater.validate(connection, schema);

View File

@ -28,7 +28,7 @@ public final class DockerKeycloakDistribution implements KeycloakDistribution {
private String stderr = "";
private ToStringConsumer backupConsumer = new ToStringConsumer();
private File distributionFile = new File("../../dist/target/keycloak-" + Version.VERSION_KEYCLOAK + ".tar.gz");
private File distributionFile = new File("../../dist/target/keycloak-" + Version.VERSION + ".tar.gz");
private File dockerFile = new File("../../container/Dockerfile");
private GenericContainer<?> keycloakContainer = null;

View File

@ -343,7 +343,7 @@ public final class RawKeycloakDistribution implements KeycloakDistribution {
Path distRootPath = Paths.get(System.getProperty("java.io.tmpdir")).resolve("kc-tests");
distRootPath.toFile().mkdirs();
File distFile = new File("../../dist/" + File.separator + "target" + File.separator + "keycloak-" + Version.VERSION_KEYCLOAK + ".zip");
File distFile = new File("../../dist/" + File.separator + "target" + File.separator + "keycloak-" + Version.VERSION + ".zip");
if (!distFile.exists()) {
throw new RuntimeException("Distribution archive " + distFile.getAbsolutePath() +" doesn't exist");
}

View File

@ -1,4 +1,4 @@
{
"title": "${product.name.full} Admin REST API",
"description": "This is a REST API reference for the ${product.name.full} Admin"
"title": "Keycloak Admin REST API",
"description": "This is a REST API reference for the Keycloak Admin"
}

View File

@ -179,7 +179,6 @@ public class WelcomeResource {
map.put("adminConsoleEnabled", isAdminConsoleEnabled());
map.put("productName", Version.NAME);
map.put("productNameFull", Version.NAME_FULL);
map.put("properties", theme.getProperties());
map.put("adminUrl", session.getContext().getUri(UrlType.ADMIN).getBaseUriBuilder().path("/admin/").build());

View File

@ -966,7 +966,7 @@ public class TestingResourceProvider implements RealmResourceProvider {
* KEYCLOAK-12958
*/
private void disableFeatureProperties(Profile.Feature feature) {
Profile.Type type = Profile.getName().equals("product") ? feature.getTypeProduct() : feature.getTypeProject();
Profile.Type type = feature.getType();
if (type.equals(Profile.Type.DEFAULT)) {
System.setProperty("keycloak.profile.feature." + feature.toString().toLowerCase(), "disabled");
} else {

View File

@ -152,39 +152,4 @@
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>community</id>
<activation>
<property>
<name>!product</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>productized-server</id>
<activation>
<property>
<name>previous.product.unpacked.folder.name</name>
</property>
</activation>
<properties>
<auth.server.home>${project.build.directory}/unpacked/${previous.product.unpacked.folder.name}
</auth.server.home>
</properties>
</profile>
</profiles>
</project>

View File

@ -33,6 +33,7 @@
<script.suffix>sh</script.suffix>
<!--app container versions-->
<eap.version>7.4.0.GA-redhat-00005</eap.version>
<eap71.version>7.1.5.GA-redhat-00002</eap71.version>
<jboss.as.version>7.1.1.Final</jboss.as.version>

View File

@ -405,25 +405,6 @@
</plugins>
</build>
</profile>
<profile>
<id>product</id>
<activation>
<property>
<name>product</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>com.igormaznitsa</groupId>
<artifactId>mvn-golang-wrapper</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>app-server-jetty94</id>

View File

@ -729,16 +729,6 @@ public abstract class AbstractKeycloakTest {
return in;
}
/**
* Get product/project name
*
* @return f.e. 'RH-SSO' or 'Keycloak'
*/
protected String getProjectName() {
final boolean isProduct = adminClient.serverInfo().getInfo().getProfileInfo().getName().equals("product");
return isProduct ? Profile.PRODUCT_NAME : Profile.PROJECT_NAME;
}
/**
* MapRealmProvider uses session.invalidate() instead of calling e.g.
* session.clients().removeClients(realm); for clients (where clients are being removed one by one)

View File

@ -417,7 +417,7 @@ public abstract class AbstractBaseBrokerTest extends AbstractKeycloakTest {
}
protected void waitForAccountManagementTitle() {
final String title = getProjectName().toLowerCase() + " account management";
final String title = "Keycloak account management";
waitForPage(driver, title, true);
}

View File

@ -1137,7 +1137,7 @@ public class ResetPasswordTest extends AbstractTestRealmKeycloakTest {
final String REQUIRED_URI = OAuthClient.AUTH_SERVER_ROOT + "/realms/test/account/applications";
final String REDIRECT_URI = getAccountRedirectUrl() + "?path=applications";
final String CLIENT_ID = "account";
final String ACCOUNT_MANAGEMENT_TITLE = getProjectName() + " Account Management";
final String ACCOUNT_MANAGEMENT_TITLE = "Keycloak Account Management";
try (BrowserTabUtil tabUtil = BrowserTabUtil.getInstanceAndSetEnv(driver)) {
assertThat(tabUtil.getCountOfTabs(), Matchers.is(1));

View File

@ -58,7 +58,7 @@ public class MigrationModelTest extends KeycloakModelTest {
public void test() {
inComittedTransaction(1, (session , i) -> {
String currentVersion = new ModelVersion(Version.VERSION_KEYCLOAK).toString();
String currentVersion = new ModelVersion(Version.VERSION).toString();
JpaConnectionProvider p = session.getProvider(JpaConnectionProvider.class);
EntityManager em = p.getEntityManager();

View File

@ -32,7 +32,7 @@
<packaging>pom</packaging>
<properties>
<server.version>${product.version}</server.version>
<server.version>${project.version}</server.version>
<management.user/>
<management.user.password/>
<jstat>false</jstat>

View File

@ -46,6 +46,13 @@
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
<modules>

View File

@ -69,6 +69,9 @@
<exclude>**/keycloak.v2/account/src/**</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources-community</directory>
</resource>
</resources>
</build>
@ -190,43 +193,6 @@
</plugins>
</build>
</profile>
<profile>
<id>community</id>
<activation>
<property>
<name>!product</name>
</property>
</activation>
<build>
<resources>
<resource>
<directory>src/main/resources-community</directory>
</resource>
</resources>
</build>
</profile>
<profile>
<id>product</id>
<activation>
<property>
<name>product</name>
</property>
</activation>
<build>
<resources>
<resource>
<directory>src/main/resources-product</directory>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/node_modules/rcue/**</include>
</includes>
</resource>
</resources>
</build>
</profile>
</profiles>
</project>

View File

@ -1,18 +0,0 @@
{
"themes": [{
"name" : "base",
"types": [ "admin", "account", "login", "email" ]
}, {
"name" : "keycloak",
"types": [ "admin", "account", "login", "common", "email", "welcome" ]
}, {
"name" : "rh-sso",
"types": [ "admin", "account", "login", "common", "email", "welcome" ]
}, {
"name" : "keycloak.v2",
"types": [ "account" ]
}, {
"name" : "rh-sso.v2",
"types": [ "account" ]
}]
}

View File

@ -1,2 +0,0 @@
import=common/keycloak
locales=en

View File

@ -1,4 +0,0 @@
# Put new messages for Account Console Here
# Feel free to use any existing messages from the base theme
accountManagementWelcomeMessage=Welcome to RH-SSO Account Management
accountManagementTitle=RH-SSO Account Management

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -1,101 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 223.4 12.5" style="enable-background:new 0 0 223.4 12.5;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<g>
<g>
<g>
<path class="st0" d="M6.5,12.3l-2-4H3.2v4H0V0.3h5.3c0.7,0,1.3,0.1,1.9,0.2c0.6,0.1,1.1,0.4,1.5,0.7c0.4,0.3,0.7,0.7,0.9,1.2
C9.9,2.9,10,3.5,10,4.2c0,0.9-0.2,1.6-0.6,2.2C9,7,8.5,7.4,7.8,7.7l2.4,4.6H6.5z M6.4,3.4C6.1,3.1,5.8,3,5.2,3h-2v2.6h2
c0.5,0,0.9-0.1,1.2-0.3c0.2-0.2,0.3-0.6,0.3-1C6.7,3.9,6.6,3.6,6.4,3.4z"/>
</g>
<g>
<path class="st0" d="M12.2,12.3V0.3h9.1v2.8h-5.9v1.6H19v2.7h-3.5v2h6v2.8H12.2z"/>
</g>
<g>
<path class="st0" d="M33.5,9.1c-0.3,0.8-0.7,1.4-1.2,1.9c-0.5,0.5-1.2,0.8-2,1c-0.8,0.2-1.7,0.3-2.8,0.3h-3.9V0.3h4.2
c0.9,0,1.8,0.1,2.5,0.3c0.8,0.2,1.4,0.5,1.9,1c0.5,0.5,0.9,1.1,1.2,1.8c0.3,0.7,0.4,1.7,0.4,2.8C33.9,7.3,33.8,8.3,33.5,9.1z
M30.4,4.9c-0.1-0.4-0.3-0.7-0.5-1c-0.2-0.2-0.5-0.4-0.9-0.6c-0.4-0.1-0.8-0.2-1.3-0.2h-0.8v6.3h0.7c0.5,0,1-0.1,1.3-0.2
c0.4-0.1,0.7-0.3,0.9-0.5c0.2-0.2,0.4-0.6,0.5-1c0.1-0.4,0.2-0.9,0.2-1.5C30.5,5.7,30.5,5.3,30.4,4.9z"/>
</g>
<g>
<path class="st0" d="M48,12.3V7.6h-3.7v4.7h-3.4V0.3h3.4v4.4H48V0.3h3.4v11.9H48z"/>
</g>
<g>
<path class="st0" d="M61.5,12.3l-0.6-2.1h-3.6l-0.6,2.1h-3.5l4.3-11.9h3.3l4.3,11.9H61.5z M59.8,6.7c-0.1-0.4-0.2-0.7-0.3-1
c-0.1-0.3-0.2-0.5-0.2-0.8c-0.1-0.2-0.1-0.4-0.2-0.6c0-0.2-0.1-0.4-0.1-0.6C59,4,59,4.2,58.9,4.4c0,0.2-0.1,0.4-0.2,0.6
c-0.1,0.2-0.1,0.5-0.2,0.8c-0.1,0.3-0.2,0.6-0.3,1l-0.2,0.8h2L59.8,6.7z"/>
</g>
<g>
<path class="st0" d="M71.3,3.2v9.1H68V3.2h-3.3V0.3h10v2.9H71.3z"/>
</g>
</g>
<g>
<path class="st0" d="M78.6,2c-0.1,0.1-0.1,0.3-0.3,0.4c-0.1,0.1-0.2,0.2-0.4,0.3c-0.1,0.1-0.3,0.1-0.5,0.1c-0.2,0-0.3,0-0.5-0.1
c-0.1-0.1-0.3-0.1-0.4-0.3c-0.1-0.1-0.2-0.2-0.3-0.4c-0.1-0.1-0.1-0.3-0.1-0.5c0-0.2,0-0.3,0.1-0.5c0.1-0.1,0.1-0.3,0.3-0.4
c0.1-0.1,0.2-0.2,0.4-0.3c0.1-0.1,0.3-0.1,0.5-0.1c0.2,0,0.3,0,0.5,0.1c0.1,0.1,0.3,0.1,0.4,0.3c0.1,0.1,0.2,0.2,0.3,0.4
c0.1,0.1,0.1,0.3,0.1,0.5C78.7,1.7,78.6,1.8,78.6,2z M78.4,1.1c-0.1-0.1-0.1-0.2-0.2-0.3c-0.1-0.1-0.2-0.2-0.3-0.2
c-0.1-0.1-0.3-0.1-0.4-0.1c-0.1,0-0.3,0-0.4,0.1c-0.1,0.1-0.2,0.1-0.3,0.2c-0.1,0.1-0.2,0.2-0.2,0.3c-0.1,0.1-0.1,0.3-0.1,0.4
c0,0.1,0,0.3,0.1,0.4s0.1,0.2,0.2,0.3c0.1,0.1,0.2,0.2,0.3,0.2c0.1,0,0.3,0.1,0.4,0.1c0.1,0,0.3,0,0.4-0.1
c0.1-0.1,0.2-0.1,0.3-0.2c0.1-0.1,0.2-0.2,0.2-0.3c0.1-0.1,0.1-0.3,0.1-0.4C78.5,1.4,78.4,1.2,78.4,1.1z M77.9,1.5
c-0.1,0.1-0.1,0.1-0.2,0.1L78,2.1h-0.3l-0.3-0.5h-0.3v0.5H77V0.8h0.6c0.1,0,0.1,0,0.2,0c0.1,0,0.1,0,0.1,0.1C77.9,1,77.9,1,78,1
c0,0,0,0.1,0,0.2C78,1.3,78,1.4,77.9,1.5z M77.7,1.1c0,0-0.1,0-0.1,0h-0.3v0.4h0.3c0.1,0,0.1,0,0.1,0c0,0,0.1-0.1,0.1-0.1
C77.8,1.2,77.8,1.1,77.7,1.1z"/>
</g>
<g>
<path class="st0" d="M91.4,10.2c-0.2,0.5-0.5,0.9-0.9,1.2S89.6,12,89,12.2c-0.6,0.2-1.3,0.3-2.1,0.3c-1,0-1.9-0.2-2.8-0.6
c-0.8-0.4-1.5-0.9-1.9-1.6l1.7-1.6c0.4,0.5,0.9,0.8,1.4,1.1s1.1,0.3,1.7,0.3c0.7,0,1.3-0.1,1.6-0.3s0.5-0.5,0.5-1
c0-0.2,0-0.4-0.1-0.5C89,8.1,88.8,8,88.6,7.9c-0.2-0.1-0.5-0.2-0.8-0.4c-0.4-0.1-0.8-0.2-1.4-0.4c-0.6-0.1-1.1-0.3-1.5-0.4
C84.4,6.5,84,6.3,83.7,6c-0.3-0.3-0.6-0.6-0.8-1c-0.2-0.4-0.3-0.9-0.3-1.5c0-0.6,0.1-1,0.3-1.5c0.2-0.4,0.5-0.8,0.9-1.1
c0.4-0.3,0.8-0.5,1.4-0.7C85.8,0.1,86.4,0,87,0c0.9,0,1.8,0.2,2.5,0.5c0.7,0.3,1.3,0.8,1.9,1.4l-1.7,1.7c-0.4-0.4-0.8-0.7-1.3-0.9
s-0.9-0.3-1.5-0.3c-0.3,0-0.6,0-0.8,0.1c-0.2,0.1-0.4,0.1-0.5,0.2s-0.2,0.2-0.3,0.3c-0.1,0.1-0.1,0.3-0.1,0.4c0,0.2,0,0.4,0.1,0.5
c0.1,0.1,0.2,0.2,0.4,0.4c0.2,0.1,0.4,0.2,0.7,0.3c0.3,0.1,0.7,0.2,1.2,0.3c0.5,0.1,1,0.2,1.4,0.4c0.5,0.2,0.9,0.4,1.3,0.6
C90.7,6.2,91,6.6,91.3,7c0.2,0.4,0.4,1,0.4,1.6C91.6,9.2,91.5,9.7,91.4,10.2z"/>
<path class="st0" d="M94.4,12.3V0.2h2.4v12.1H94.4z"/>
<path class="st0" d="M107.7,12.3l-4.4-6.6c-0.1-0.2-0.3-0.5-0.5-0.7c-0.2-0.3-0.3-0.5-0.4-0.6c0,0.1,0,0.3,0,0.5
c0,0.2,0,0.5,0,0.7c0,0.3,0,0.5,0,0.8c0,0.3,0,0.5,0,0.6v5.3h-2.4V0.2h2.3l4.3,6.4c0.1,0.2,0.3,0.5,0.5,0.7
c0.2,0.3,0.3,0.5,0.4,0.6c0-0.1,0-0.3,0-0.5c0-0.2,0-0.5,0-0.7c0-0.3,0-0.5,0-0.8c0-0.3,0-0.5,0-0.6V0.2h2.4v12.1H107.7z"/>
<path class="st0" d="M122.1,9.7c-0.2,0.6-0.6,1.1-1,1.5c-0.4,0.4-0.9,0.7-1.5,0.9c-0.6,0.2-1.2,0.3-1.9,0.3
c-0.8,0-1.5-0.1-2.2-0.4c-0.6-0.3-1.2-0.7-1.7-1.3c-0.5-0.5-0.8-1.2-1.1-2c-0.3-0.8-0.4-1.6-0.4-2.6c0-0.9,0.1-1.8,0.4-2.5
c0.3-0.8,0.6-1.4,1.1-2s1-1,1.7-1.3c0.7-0.3,1.4-0.5,2.2-0.5c0.6,0,1.2,0.1,1.6,0.2c0.5,0.1,0.9,0.3,1.3,0.6s0.7,0.6,1,1
c0.3,0.4,0.5,0.8,0.7,1.3L120,4c-0.1-0.2-0.2-0.4-0.4-0.6s-0.3-0.4-0.5-0.5c-0.2-0.1-0.4-0.2-0.6-0.3c-0.2-0.1-0.5-0.1-0.8-0.1
c-0.4,0-0.9,0.1-1.2,0.3c-0.4,0.2-0.7,0.5-0.9,0.8s-0.4,0.7-0.6,1.2c-0.1,0.5-0.2,1-0.2,1.5c0,0.6,0.1,1.1,0.2,1.5
c0.1,0.5,0.3,0.9,0.6,1.2c0.2,0.3,0.5,0.6,0.9,0.8c0.4,0.2,0.8,0.3,1.2,0.3c0.4,0,0.8,0,1.1-0.1c0.3-0.1,0.5-0.2,0.7-0.4
c0.2-0.2,0.3-0.4,0.4-0.6s0.2-0.5,0.2-0.7h-1.9V6h4.3v1.6C122.4,8.4,122.3,9.1,122.1,9.7z"/>
<path class="st0" d="M125,12.3V0.2h2.4v9.7h6.1v2.4H125z"/>
<path class="st0" d="M135.7,12.3V0.2h8.4v2.4h-6v2.1h3.5V7h-3.5v2.9h6.2v2.4H135.7z"/>
<path class="st0" d="M160.5,10.2c-0.2,0.5-0.5,0.9-0.9,1.2s-0.9,0.6-1.5,0.8c-0.6,0.2-1.3,0.3-2.1,0.3c-1,0-1.9-0.2-2.8-0.6
s-1.5-0.9-1.9-1.6l1.7-1.6c0.4,0.5,0.9,0.8,1.4,1.1s1.1,0.3,1.7,0.3c0.7,0,1.3-0.1,1.6-0.3c0.3-0.2,0.5-0.5,0.5-1
c0-0.2,0-0.4-0.1-0.5c-0.1-0.1-0.2-0.3-0.4-0.4c-0.2-0.1-0.5-0.2-0.8-0.4c-0.4-0.1-0.8-0.2-1.4-0.4C155,7,154.5,6.9,154,6.7
c-0.5-0.2-0.9-0.4-1.2-0.7c-0.3-0.3-0.6-0.6-0.8-1c-0.2-0.4-0.3-0.9-0.3-1.5c0-0.6,0.1-1,0.3-1.5c0.2-0.4,0.5-0.8,0.9-1.1
c0.4-0.3,0.8-0.5,1.4-0.7c0.5-0.2,1.1-0.2,1.7-0.2c0.9,0,1.8,0.2,2.5,0.5c0.7,0.3,1.3,0.8,1.9,1.4l-1.7,1.7
c-0.4-0.4-0.8-0.7-1.3-0.9s-0.9-0.3-1.5-0.3c-0.3,0-0.6,0-0.8,0.1c-0.2,0.1-0.4,0.1-0.5,0.2s-0.2,0.2-0.3,0.3
c-0.1,0.1-0.1,0.3-0.1,0.4c0,0.2,0,0.4,0.1,0.5c0.1,0.1,0.2,0.2,0.4,0.4c0.2,0.1,0.4,0.2,0.7,0.3c0.3,0.1,0.7,0.2,1.2,0.3
c0.5,0.1,1,0.2,1.4,0.4c0.5,0.2,0.9,0.4,1.3,0.6c0.4,0.3,0.7,0.6,0.9,1.1c0.2,0.4,0.4,1,0.4,1.6C160.8,9.2,160.7,9.7,160.5,10.2z"
/>
<path class="st0" d="M163.5,12.3V0.2h2.4v12.1H163.5z"/>
<path class="st0" d="M178.3,9.7c-0.2,0.6-0.6,1.1-1,1.5c-0.4,0.4-0.9,0.7-1.5,0.9c-0.6,0.2-1.2,0.3-1.9,0.3
c-0.8,0-1.5-0.1-2.2-0.4s-1.2-0.7-1.7-1.3c-0.5-0.5-0.8-1.2-1.1-2c-0.3-0.8-0.4-1.6-0.4-2.6c0-0.9,0.1-1.8,0.4-2.5
c0.3-0.8,0.6-1.4,1.1-2s1-1,1.7-1.3c0.7-0.3,1.4-0.5,2.2-0.5c0.6,0,1.2,0.1,1.6,0.2c0.5,0.1,0.9,0.3,1.3,0.6c0.4,0.3,0.7,0.6,1,1
s0.5,0.8,0.7,1.3L176.2,4c-0.1-0.2-0.2-0.4-0.4-0.6c-0.1-0.2-0.3-0.4-0.5-0.5c-0.2-0.1-0.4-0.2-0.6-0.3c-0.2-0.1-0.5-0.1-0.8-0.1
c-0.4,0-0.9,0.1-1.2,0.3c-0.4,0.2-0.7,0.5-0.9,0.8c-0.2,0.3-0.4,0.7-0.6,1.2c-0.1,0.5-0.2,1-0.2,1.5c0,0.6,0.1,1.1,0.2,1.5
c0.1,0.5,0.3,0.9,0.6,1.2c0.2,0.3,0.5,0.6,0.9,0.8c0.4,0.2,0.8,0.3,1.2,0.3c0.4,0,0.8,0,1.1-0.1c0.3-0.1,0.5-0.2,0.7-0.4
c0.2-0.2,0.3-0.4,0.4-0.6s0.2-0.5,0.2-0.7h-1.9V6h4.3v1.6C178.7,8.4,178.6,9.1,178.3,9.7z"/>
<path class="st0" d="M188.9,12.3l-4.4-6.6c-0.2-0.2-0.3-0.5-0.5-0.7c-0.2-0.3-0.3-0.5-0.4-0.6c0,0.1,0,0.3,0,0.5
c0,0.2,0,0.5,0,0.7c0,0.3,0,0.5,0,0.8c0,0.3,0,0.5,0,0.6v5.3h-2.4V0.2h2.3l4.3,6.4c0.1,0.2,0.3,0.5,0.5,0.7
c0.2,0.3,0.3,0.5,0.4,0.6c0-0.1,0-0.3,0-0.5c0-0.2,0-0.5,0-0.7c0-0.3,0-0.5,0-0.8c0-0.3,0-0.5,0-0.6V0.2h2.4v12.1H188.9z"/>
<path class="st0" d="M193.6,7.2V4.8h5v2.4H193.6z"/>
<path class="st0" d="M210.7,8.8c-0.3,0.8-0.6,1.4-1.1,2c-0.5,0.5-1,0.9-1.7,1.2c-0.7,0.3-1.4,0.4-2.2,0.4c-0.8,0-1.5-0.1-2.2-0.4
s-1.2-0.7-1.7-1.2c-0.5-0.5-0.8-1.2-1.1-2c-0.3-0.8-0.4-1.6-0.4-2.6s0.1-1.9,0.4-2.6c0.3-0.8,0.6-1.4,1.1-2c0.5-0.5,1-0.9,1.7-1.2
c0.7-0.3,1.4-0.4,2.2-0.4c0.8,0,1.5,0.1,2.1,0.4s1.2,0.7,1.7,1.2c0.5,0.5,0.8,1.2,1.1,2c0.3,0.8,0.4,1.6,0.4,2.6
S211,8.1,210.7,8.8z M207.9,3.4c-0.5-0.7-1.2-1-2.1-1s-1.5,0.3-2,1S203,5,203,6.2c0,1.2,0.3,2.2,0.8,2.8c0.5,0.7,1.2,1,2.1,1
s1.5-0.3,2-1s0.8-1.6,0.8-2.8S208.4,4.1,207.9,3.4z"/>
<path class="st0" d="M221.2,12.3l-4.4-6.6c-0.2-0.2-0.3-0.5-0.5-0.7c-0.2-0.3-0.3-0.5-0.4-0.6c0,0.1,0,0.3,0,0.5
c0,0.2,0,0.5,0,0.7c0,0.3,0,0.5,0,0.8c0,0.3,0,0.5,0,0.6v5.3h-2.4V0.2h2.3l4.3,6.4c0.1,0.2,0.3,0.5,0.5,0.7
c0.2,0.3,0.3,0.5,0.4,0.6c0-0.1,0-0.3,0-0.5c0-0.2,0-0.5,0-0.7c0-0.3,0-0.5,0-0.8c0-0.3,0-0.5,0-0.6V0.2h2.4v12.1H221.2z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 8.2 KiB

View File

@ -1 +0,0 @@
accountManagementTitle=RH-SSO Account Management

View File

@ -1,279 +0,0 @@
html {
height: 100%;
}
body {
background-color: #F9F9F9;
margin: 0;
padding: 0;
height: 100%;
}
header .navbar {
margin-bottom: 0;
min-height: inherit;
}
.header .container {
position: relative;
}
.navbar-title {
background-image: url('../img/brand.svg');
height: 25px;
background-repeat: no-repeat;
width: 172px;
margin: 3px 10px 5px;
text-indent: -99999px;
position: relative;
top: 8px;
}
.navbar-pf .navbar-utility {
right: 20px;
top: -34px;
font-size: 12px;
}
.navbar-pf .navbar-utility > li > a {
color: #fff !important;
padding-bottom: 12px;
padding-top: 11px;
border-left: medium none;
}
.container {
height: 100%;
}
.content-area {
background-color: #fff;
border-color: #CECECE;
border-style: solid;
border-width: 0 1px;
height: 100%;
padding: 0 30px;
}
.margin-bottom {
margin-bottom: 10px;
}
/* Sidebar */
.bs-sidebar {
background-color: #f9f9f9;
padding-top: 44px;
padding-right: 0;
padding-left: 0;
z-index: 20;
}
.bs-sidebar ul {
list-style: none;
padding-left: 12px;
}
.bs-sidebar ul li {
margin-bottom: 0.5em;
margin-left: -1em;
}
.bs-sidebar ul li a {
font-size: 14px;
padding-left: 25px;
color: #4d5258;
line-height: 28px;
display: block;
border-width: 1px 0 1px 1px;
border-style: solid;
border-color: #f9f9f9;
}
.bs-sidebar ul li a:hover,
.bs-sidebar ul li a:focus {
text-decoration: none;
color: #777777;
border-right: 2px solid #aaa;
}
.bs-sidebar ul li.active a {
background-color: #c7e5f0;
border-color: #56bae0;
font-weight: bold;
background-image: url(../img/icon-sidebar-active.png);
background-repeat: no-repeat;
background-position: right center;
}
.bs-sidebar ul li.active a:hover {
border-right: none;
}
.content-area h2 {
font-family: "Open Sans", sans-serif;
font-weight: 100;
font-size: 24px;
margin-bottom: 25px;
margin-top: 25px;
}
.subtitle {
text-align: right;
margin-top: 30px;
color: #909090;
}
.required {
color: #CB2915;
}
.alert {
margin-top: 30px;
margin-bottom: 0;
}
.feedback-aligner .alert {
background-position: 1.27273em center;
background-repeat: no-repeat;
border-radius: 2px;
border-width: 1px;
color: #4D5258;
display: inline-block;
font-size: 1.1em;
line-height: 1.4em;
margin: 0;
padding: 0.909091em 3.63636em;
position: relative;
text-align: left;
}
.alert.alert-success {
background-color: #E4F1E1;
border-color: #4B9E39;
}
.alert.alert-error {
background-color: #F8E7E7;
border-color: #B91415;
}
.alert.alert-warning {
background-color: #FEF1E9;
border-color: #F17528;
}
.alert.alert-info {
background-color: #E4F3FA;
border-color: #5994B2;
}
.form-horizontal {
border-top: 1px solid #E9E8E8;
padding-top: 23px;
}
.form-horizontal .control-label {
color: #909090;
line-height: 1.4em;
padding-top: 5px;
position: relative;
text-align: right;
width: 100%;
}
.form-group {
position: relative;
}
.control-label + .required {
position: absolute;
right: -2px;
top: 0;
}
#kc-form-buttons {
text-align: right;
margin-top: 10px;
}
#kc-form-buttons .btn-primary {
float: right;
margin-left: 8px;
}
/* Authenticator page */
ol {
padding-left: 40px;
}
ol li {
font-size: 13px;
margin-bottom: 10px;
position: relative;
}
ol li img {
margin-top: 15px;
margin-bottom: 5px;
border: 1px solid #eee;
}
hr + .form-horizontal {
border: none;
padding-top: 0;
}
.kc-dropdown{
position: relative;
}
.kc-dropdown > a{
display:block;
padding: 11px 10px 12px;
line-height: 12px;
font-size: 12px;
color: #fff !important;
text-decoration: none;
}
.kc-dropdown > a::after{
content: "\2c5";
margin-left: 4px;
}
.kc-dropdown:hover > a{
background-color: rgba(0,0,0,0.2);
}
.kc-dropdown ul li a{
padding: 1px 11px;
font-size: 12px;
color: #000 !important;
border: 1px solid #fff;
text-decoration: none;
display:block;
line-height: 20px;
}
.kc-dropdown ul li a:hover{
color: #4d5258;
background-color: #d4edfa;
border-color: #b3d3e7;
}
.kc-dropdown ul{
position: absolute;
z-index: 2000;
list-style:none;
display:none;
padding: 5px 0px;
margin: 0px;
background-color: #fff !important;
border: 1px solid #b6b6b6;
border-radius: 1px;
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
background-clip: padding-box;
min-width: 100px;
}
.kc-dropdown:hover ul{
display:block;
}
#kc-totp-secret-key {
border: 1px solid #eee;
font-size: 16px;
padding: 10px;
margin: 50px 0;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 202 B

View File

@ -1,4 +0,0 @@
parent=keycloak
styles=css/account.css
stylesCommon=node_modules/rcue/dist/css/rcue.min.css node_modules/rcue/dist/css/rcue-additions.min.css

View File

@ -1 +0,0 @@
consoleTitle=RH-SSO Admin Console

View File

@ -1,411 +0,0 @@
html,body {
height: 100%;
}
form {
margin-top: 20px;
}
table {
margin-top: 20px;
}
.required {
color: #f00;
}
.tooltip-inner {
min-width: 200px;
}
.margin-top {
margin-top: 20px;
}
.no-margin-top {
margin-top: 0px !important;
}
table {
max-width: 100%;
}
td.clip {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
max-width: 0;
}
th.w-10 {
width: 10%;
}
th.w-15 {
width: 15%;
}
th.w-20 {
width: 20%;
}
th.w-25 {
width: 25%;
}
th.w-30 {
width: 30%;
}
th.w-35 {
width: 35%;
}
th.w-40 {
width: 40%;
}
/*********** Loading ***********/
.loading {
background-color: #f5f5f5;
border: 1px solid #eee;
position: absolute;
bottom: 0px;
left: 0px;
padding: 2px 200px 2px 5px;
}
/*********** Feedback ***********/
.feedback-aligner {
position: fixed;
top: 15px;
text-align: center;
width: 100%;
height: 0;
z-index: 100;
}
.feedback-aligner .alert {
border-radius: 2px;
border-width: 1px;
display: inline-block;
position: relative;
}
/*********** On-Off Switch ***********/
.onoffswitch {
-moz-user-select: none;
height: 26px;
position: relative;
width: 62px;
}
.onoffswitch .onoffswitch-checkbox {
display: none;
}
.onoffswitch .onoffswitch-label {
border: 1px solid #bbb;
border-radius: 2px;
cursor: pointer;
display: block;
overflow: hidden;
width: 62px;
}
.onoffswitch .onoffswitch-inner {
display: block;
margin-left: -100%;
transition: margin 0.3s ease-in 0s;
width: 200%;
}
.onoffswitch .onoffswitch-inner > span {
-moz-box-sizing: border-box;
color: white;
float: left;
font-size: 11px;
font-family: "Open Sans", sans-serif;
font-weight: bold;
height: 24px;
line-height: 24px;
padding: 0;
width: 50%;
}
.onoffswitch .onoffswitch-switch {
background-image: linear-gradient(top, #fafafa 0%, #ededed 100%);
background-image: -o-linear-gradient(top, #fafafa 0%, #ededed 100%);
background-image: -moz-linear-gradient(top, #fafafa 0%, #ededed 100%);
background-image: -webkit-linear-gradient(top, #fafafa 0%, #ededed 100%);
background-image: -ms-linear-gradient(top, #fafafa 0%, #ededed 100%);
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fafafa), color-stop(1, 0, #ededed));
border: 1px solid #aaa;
border-radius: 2px;
bottom: 0;
margin: 0;
position: absolute;
right: 39px;
top: 0;
transition: all 0.3s ease-in 0s;
-webkit-transition: all 0.3s ease-in 0s;
width: 23px;
}
.onoffswitch .onoffswitch-inner .onoffswitch-active {
background-image: linear-gradient(top, #00a9ec 0%, #009bd3 100%);
background-image: -o-linear-gradient(top, #00a9ec 0%, #009bd3 100%);
background-image: -moz-linear-gradient(top, #00a9ec 0%, #009bd3 100%);
background-image: -webkit-linear-gradient(top, #00a9ec 0%, #009bd3 100%);
background-image: -ms-linear-gradient(top, #00a9ec 0%, #009bd3 100%);
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #00a9ec), color-stop(1, 0, #009bd3));
color: #FFFFFF;
padding-left: 10px;
}
.onoffswitch-checkbox:disabled + .onoffswitch-label .onoffswitch-inner .onoffswitch-active,
.onoffswitch-checkbox:disabled + .onoffswitch-label .onoffswitch-inner .onoffswitch-inactive {
background-image: none;
background-color: #e5e5e5;
color: #9d9fa1;
}
.onoffswitch .onoffswitch-inner .onoffswitch-inactive {
background: linear-gradient(#fefefe, #e8e8e8) repeat scroll 0 0 transparent;
color: #4d5258;
padding-right: 10px;
text-align: right;
}
.onoffswitch .onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner {
margin-left: 0;
}
.onoffswitch .onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch {
right: 0;
}
/*********** Select 2 ***********/
.select2-container {
width: 100%;
}
.select2-container-multi .select2-choices .select2-search-field {
height: 26px;
}
/*********** New Menu ***********/
.sidebar-pf-left{
background: #292e34;
}
.sidebar-pf .nav-pills > li a i, .sidebar-pf .nav-pills > li a span{
color: #72767b;
display: inline-block;
margin-right: 10px;
}
.sidebar-pf .nav-pills > li > a{
color: #dbdada;
padding: 0px 20px 0 30px!important;
line-height: 30px;
border-left-width: 12px;
border-left-style: solid;
border-left-color: #292e34;
margin-left: -6px;
}
.sidebar-pf .nav-pills > li > a:hover{
background: #393f44;
border-color:#292e34;
border-left-color: #393f44;
color: #fff;
}
.sidebar-pf .nav-pills > li > a:after{
display: none!important;
}
.sidebar-pf .nav-pills > li.active > a {
color: #fff;
background: #393f44!important;
border-bottom: 1px solid #000!important;
border-top: 1px solid #000!important;
border-left-color: #39a5dc!important;
}
.sidebar-pf .nav-pills > li.active a i, .sidebar-pf .nav-pills > li.active a span{
color: #39a5dc;
}
/*********** Realm selector ***********/
.realm-selector{
color: #fff;
margin: 0 -20px;
position: relative;
}
.realm-dropmenu{
display: none;
cursor: pointer;
position: absolute;
top: 60px;
left: 0;
right: 0;
z-index: 999;
background: #fff;
}
.realm-selector:hover .realm-dropmenu{
display: block;
}
.realm-add{
padding: 10px;
}
.realm-selector h2{
font-size: 16px;
line-height: 60px;
padding: 0 20px;
margin: 0;
border-bottom: 1px solid #d5d5d6;
}
.realm-selector h2 i{
display: inline-block;
float: right;
line-height: 60px;
}
.realm-selector ul{
padding-left: 0;
margin: 0;
list-style: none;
max-height: 200px;
overflow-y:auto;
}
.realm-selector ul li a{
line-height: 60px;
padding: 0 20px;
border-bottom: 1px solid #d5d5d6;
line-height: 39px;
display: block;
font-size: 14px;
}
/*********** Overwrites header defaults ***********/
.navbar-pf{
border-top: none!important;
}
.navbar-pf .navbar-header {
height: 56px;
}
.navbar-pf .navbar-brand {
padding: 0;
height: 56px;
line-height: 56px;
background-position: center center;
background-image: url('../img/brand.svg');
background-size: 172px 10px;
background-repeat: no-repeat;
width: 176px;
position: relative;
top: 50%;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
transform: translateY(-50%);
}
.navbar-pf .navbar-utility .dropdown-toggle {
padding: 23px !important;
}
.clickable {
cursor: pointer;
}
h1 i {
color: #999999;
font-size: 18px;
margin-left: 10px;
}
/* Action cell */
.kc-action-cell {
background-color: #eeeeee;
background-image: linear-gradient(to bottom, #fafafa 0%, #ededed 100%);
background-repeat: repeat-x;
text-align: center;
vertical-align: middle;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
cursor:pointer;
}
.kc-action-cell:hover {
background-color: #eeeeee;
background-image: none;
}
.kc-sorter span {
margin-left: 10px;
}
/* Time selector */
.time-selector input {
display: inline-block;
width: 120px;
padding-right: 0;
margin-right: 0;
}
.time-selector select {
display: inline-block;
width: 80px;
margin-left: 0;
padding-left: 0;
}
.ace_editor {
height: 600px;
width: 100%;
}
.kc-button-input-file input {
float: left;
width: 73%;
}
.kc-button-input-file label {
float: left;
margin-left: 2%;
width: 25%;
}
table.kc-authz-table-expanded {
margin-top: 0px !important;
}
.no-gutter > [class*='col-'] {
padding-right:0!important;
padding-left:0!important;
}
.password-conceal {
font-family: 'text-security-disc';
font-size: 14px;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1,5 +0,0 @@
parent=keycloak
import=common/rh-sso
styles=css/styles.css
stylesCommon=node_modules/rcue/dist/css/rcue.min.css node_modules/rcue/dist/css/rcue-additions.min.css node_modules/select2/select2.css lib/angular/treeview/css/angular.treeview.css node_modules/text-security/text-security.css

View File

@ -1,101 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 223.4 12.5" style="enable-background:new 0 0 223.4 12.5;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<g>
<g>
<g>
<path class="st0" d="M6.5,12.3l-2-4H3.2v4H0V0.3h5.3c0.7,0,1.3,0.1,1.9,0.2c0.6,0.1,1.1,0.4,1.5,0.7c0.4,0.3,0.7,0.7,0.9,1.2
C9.9,2.9,10,3.5,10,4.2c0,0.9-0.2,1.6-0.6,2.2C9,7,8.5,7.4,7.8,7.7l2.4,4.6H6.5z M6.4,3.4C6.1,3.1,5.8,3,5.2,3h-2v2.6h2
c0.5,0,0.9-0.1,1.2-0.3c0.2-0.2,0.3-0.6,0.3-1C6.7,3.9,6.6,3.6,6.4,3.4z"/>
</g>
<g>
<path class="st0" d="M12.2,12.3V0.3h9.1v2.8h-5.9v1.6H19v2.7h-3.5v2h6v2.8H12.2z"/>
</g>
<g>
<path class="st0" d="M33.5,9.1c-0.3,0.8-0.7,1.4-1.2,1.9c-0.5,0.5-1.2,0.8-2,1c-0.8,0.2-1.7,0.3-2.8,0.3h-3.9V0.3h4.2
c0.9,0,1.8,0.1,2.5,0.3c0.8,0.2,1.4,0.5,1.9,1c0.5,0.5,0.9,1.1,1.2,1.8c0.3,0.7,0.4,1.7,0.4,2.8C33.9,7.3,33.8,8.3,33.5,9.1z
M30.4,4.9c-0.1-0.4-0.3-0.7-0.5-1c-0.2-0.2-0.5-0.4-0.9-0.6c-0.4-0.1-0.8-0.2-1.3-0.2h-0.8v6.3h0.7c0.5,0,1-0.1,1.3-0.2
c0.4-0.1,0.7-0.3,0.9-0.5c0.2-0.2,0.4-0.6,0.5-1c0.1-0.4,0.2-0.9,0.2-1.5C30.5,5.7,30.5,5.3,30.4,4.9z"/>
</g>
<g>
<path class="st0" d="M48,12.3V7.6h-3.7v4.7h-3.4V0.3h3.4v4.4H48V0.3h3.4v11.9H48z"/>
</g>
<g>
<path class="st0" d="M61.5,12.3l-0.6-2.1h-3.6l-0.6,2.1h-3.5l4.3-11.9h3.3l4.3,11.9H61.5z M59.8,6.7c-0.1-0.4-0.2-0.7-0.3-1
c-0.1-0.3-0.2-0.5-0.2-0.8c-0.1-0.2-0.1-0.4-0.2-0.6c0-0.2-0.1-0.4-0.1-0.6C59,4,59,4.2,58.9,4.4c0,0.2-0.1,0.4-0.2,0.6
c-0.1,0.2-0.1,0.5-0.2,0.8c-0.1,0.3-0.2,0.6-0.3,1l-0.2,0.8h2L59.8,6.7z"/>
</g>
<g>
<path class="st0" d="M71.3,3.2v9.1H68V3.2h-3.3V0.3h10v2.9H71.3z"/>
</g>
</g>
<g>
<path class="st0" d="M78.6,2c-0.1,0.1-0.1,0.3-0.3,0.4c-0.1,0.1-0.2,0.2-0.4,0.3c-0.1,0.1-0.3,0.1-0.5,0.1c-0.2,0-0.3,0-0.5-0.1
c-0.1-0.1-0.3-0.1-0.4-0.3c-0.1-0.1-0.2-0.2-0.3-0.4c-0.1-0.1-0.1-0.3-0.1-0.5c0-0.2,0-0.3,0.1-0.5c0.1-0.1,0.1-0.3,0.3-0.4
c0.1-0.1,0.2-0.2,0.4-0.3c0.1-0.1,0.3-0.1,0.5-0.1c0.2,0,0.3,0,0.5,0.1c0.1,0.1,0.3,0.1,0.4,0.3c0.1,0.1,0.2,0.2,0.3,0.4
c0.1,0.1,0.1,0.3,0.1,0.5C78.7,1.7,78.6,1.8,78.6,2z M78.4,1.1c-0.1-0.1-0.1-0.2-0.2-0.3c-0.1-0.1-0.2-0.2-0.3-0.2
c-0.1-0.1-0.3-0.1-0.4-0.1c-0.1,0-0.3,0-0.4,0.1c-0.1,0.1-0.2,0.1-0.3,0.2c-0.1,0.1-0.2,0.2-0.2,0.3c-0.1,0.1-0.1,0.3-0.1,0.4
c0,0.1,0,0.3,0.1,0.4s0.1,0.2,0.2,0.3c0.1,0.1,0.2,0.2,0.3,0.2c0.1,0,0.3,0.1,0.4,0.1c0.1,0,0.3,0,0.4-0.1
c0.1-0.1,0.2-0.1,0.3-0.2c0.1-0.1,0.2-0.2,0.2-0.3c0.1-0.1,0.1-0.3,0.1-0.4C78.5,1.4,78.4,1.2,78.4,1.1z M77.9,1.5
c-0.1,0.1-0.1,0.1-0.2,0.1L78,2.1h-0.3l-0.3-0.5h-0.3v0.5H77V0.8h0.6c0.1,0,0.1,0,0.2,0c0.1,0,0.1,0,0.1,0.1C77.9,1,77.9,1,78,1
c0,0,0,0.1,0,0.2C78,1.3,78,1.4,77.9,1.5z M77.7,1.1c0,0-0.1,0-0.1,0h-0.3v0.4h0.3c0.1,0,0.1,0,0.1,0c0,0,0.1-0.1,0.1-0.1
C77.8,1.2,77.8,1.1,77.7,1.1z"/>
</g>
<g>
<path class="st0" d="M91.4,10.2c-0.2,0.5-0.5,0.9-0.9,1.2S89.6,12,89,12.2c-0.6,0.2-1.3,0.3-2.1,0.3c-1,0-1.9-0.2-2.8-0.6
c-0.8-0.4-1.5-0.9-1.9-1.6l1.7-1.6c0.4,0.5,0.9,0.8,1.4,1.1s1.1,0.3,1.7,0.3c0.7,0,1.3-0.1,1.6-0.3s0.5-0.5,0.5-1
c0-0.2,0-0.4-0.1-0.5C89,8.1,88.8,8,88.6,7.9c-0.2-0.1-0.5-0.2-0.8-0.4c-0.4-0.1-0.8-0.2-1.4-0.4c-0.6-0.1-1.1-0.3-1.5-0.4
C84.4,6.5,84,6.3,83.7,6c-0.3-0.3-0.6-0.6-0.8-1c-0.2-0.4-0.3-0.9-0.3-1.5c0-0.6,0.1-1,0.3-1.5c0.2-0.4,0.5-0.8,0.9-1.1
c0.4-0.3,0.8-0.5,1.4-0.7C85.8,0.1,86.4,0,87,0c0.9,0,1.8,0.2,2.5,0.5c0.7,0.3,1.3,0.8,1.9,1.4l-1.7,1.7c-0.4-0.4-0.8-0.7-1.3-0.9
s-0.9-0.3-1.5-0.3c-0.3,0-0.6,0-0.8,0.1c-0.2,0.1-0.4,0.1-0.5,0.2s-0.2,0.2-0.3,0.3c-0.1,0.1-0.1,0.3-0.1,0.4c0,0.2,0,0.4,0.1,0.5
c0.1,0.1,0.2,0.2,0.4,0.4c0.2,0.1,0.4,0.2,0.7,0.3c0.3,0.1,0.7,0.2,1.2,0.3c0.5,0.1,1,0.2,1.4,0.4c0.5,0.2,0.9,0.4,1.3,0.6
C90.7,6.2,91,6.6,91.3,7c0.2,0.4,0.4,1,0.4,1.6C91.6,9.2,91.5,9.7,91.4,10.2z"/>
<path class="st0" d="M94.4,12.3V0.2h2.4v12.1H94.4z"/>
<path class="st0" d="M107.7,12.3l-4.4-6.6c-0.1-0.2-0.3-0.5-0.5-0.7c-0.2-0.3-0.3-0.5-0.4-0.6c0,0.1,0,0.3,0,0.5
c0,0.2,0,0.5,0,0.7c0,0.3,0,0.5,0,0.8c0,0.3,0,0.5,0,0.6v5.3h-2.4V0.2h2.3l4.3,6.4c0.1,0.2,0.3,0.5,0.5,0.7
c0.2,0.3,0.3,0.5,0.4,0.6c0-0.1,0-0.3,0-0.5c0-0.2,0-0.5,0-0.7c0-0.3,0-0.5,0-0.8c0-0.3,0-0.5,0-0.6V0.2h2.4v12.1H107.7z"/>
<path class="st0" d="M122.1,9.7c-0.2,0.6-0.6,1.1-1,1.5c-0.4,0.4-0.9,0.7-1.5,0.9c-0.6,0.2-1.2,0.3-1.9,0.3
c-0.8,0-1.5-0.1-2.2-0.4c-0.6-0.3-1.2-0.7-1.7-1.3c-0.5-0.5-0.8-1.2-1.1-2c-0.3-0.8-0.4-1.6-0.4-2.6c0-0.9,0.1-1.8,0.4-2.5
c0.3-0.8,0.6-1.4,1.1-2s1-1,1.7-1.3c0.7-0.3,1.4-0.5,2.2-0.5c0.6,0,1.2,0.1,1.6,0.2c0.5,0.1,0.9,0.3,1.3,0.6s0.7,0.6,1,1
c0.3,0.4,0.5,0.8,0.7,1.3L120,4c-0.1-0.2-0.2-0.4-0.4-0.6s-0.3-0.4-0.5-0.5c-0.2-0.1-0.4-0.2-0.6-0.3c-0.2-0.1-0.5-0.1-0.8-0.1
c-0.4,0-0.9,0.1-1.2,0.3c-0.4,0.2-0.7,0.5-0.9,0.8s-0.4,0.7-0.6,1.2c-0.1,0.5-0.2,1-0.2,1.5c0,0.6,0.1,1.1,0.2,1.5
c0.1,0.5,0.3,0.9,0.6,1.2c0.2,0.3,0.5,0.6,0.9,0.8c0.4,0.2,0.8,0.3,1.2,0.3c0.4,0,0.8,0,1.1-0.1c0.3-0.1,0.5-0.2,0.7-0.4
c0.2-0.2,0.3-0.4,0.4-0.6s0.2-0.5,0.2-0.7h-1.9V6h4.3v1.6C122.4,8.4,122.3,9.1,122.1,9.7z"/>
<path class="st0" d="M125,12.3V0.2h2.4v9.7h6.1v2.4H125z"/>
<path class="st0" d="M135.7,12.3V0.2h8.4v2.4h-6v2.1h3.5V7h-3.5v2.9h6.2v2.4H135.7z"/>
<path class="st0" d="M160.5,10.2c-0.2,0.5-0.5,0.9-0.9,1.2s-0.9,0.6-1.5,0.8c-0.6,0.2-1.3,0.3-2.1,0.3c-1,0-1.9-0.2-2.8-0.6
s-1.5-0.9-1.9-1.6l1.7-1.6c0.4,0.5,0.9,0.8,1.4,1.1s1.1,0.3,1.7,0.3c0.7,0,1.3-0.1,1.6-0.3c0.3-0.2,0.5-0.5,0.5-1
c0-0.2,0-0.4-0.1-0.5c-0.1-0.1-0.2-0.3-0.4-0.4c-0.2-0.1-0.5-0.2-0.8-0.4c-0.4-0.1-0.8-0.2-1.4-0.4C155,7,154.5,6.9,154,6.7
c-0.5-0.2-0.9-0.4-1.2-0.7c-0.3-0.3-0.6-0.6-0.8-1c-0.2-0.4-0.3-0.9-0.3-1.5c0-0.6,0.1-1,0.3-1.5c0.2-0.4,0.5-0.8,0.9-1.1
c0.4-0.3,0.8-0.5,1.4-0.7c0.5-0.2,1.1-0.2,1.7-0.2c0.9,0,1.8,0.2,2.5,0.5c0.7,0.3,1.3,0.8,1.9,1.4l-1.7,1.7
c-0.4-0.4-0.8-0.7-1.3-0.9s-0.9-0.3-1.5-0.3c-0.3,0-0.6,0-0.8,0.1c-0.2,0.1-0.4,0.1-0.5,0.2s-0.2,0.2-0.3,0.3
c-0.1,0.1-0.1,0.3-0.1,0.4c0,0.2,0,0.4,0.1,0.5c0.1,0.1,0.2,0.2,0.4,0.4c0.2,0.1,0.4,0.2,0.7,0.3c0.3,0.1,0.7,0.2,1.2,0.3
c0.5,0.1,1,0.2,1.4,0.4c0.5,0.2,0.9,0.4,1.3,0.6c0.4,0.3,0.7,0.6,0.9,1.1c0.2,0.4,0.4,1,0.4,1.6C160.8,9.2,160.7,9.7,160.5,10.2z"
/>
<path class="st0" d="M163.5,12.3V0.2h2.4v12.1H163.5z"/>
<path class="st0" d="M178.3,9.7c-0.2,0.6-0.6,1.1-1,1.5c-0.4,0.4-0.9,0.7-1.5,0.9c-0.6,0.2-1.2,0.3-1.9,0.3
c-0.8,0-1.5-0.1-2.2-0.4s-1.2-0.7-1.7-1.3c-0.5-0.5-0.8-1.2-1.1-2c-0.3-0.8-0.4-1.6-0.4-2.6c0-0.9,0.1-1.8,0.4-2.5
c0.3-0.8,0.6-1.4,1.1-2s1-1,1.7-1.3c0.7-0.3,1.4-0.5,2.2-0.5c0.6,0,1.2,0.1,1.6,0.2c0.5,0.1,0.9,0.3,1.3,0.6c0.4,0.3,0.7,0.6,1,1
s0.5,0.8,0.7,1.3L176.2,4c-0.1-0.2-0.2-0.4-0.4-0.6c-0.1-0.2-0.3-0.4-0.5-0.5c-0.2-0.1-0.4-0.2-0.6-0.3c-0.2-0.1-0.5-0.1-0.8-0.1
c-0.4,0-0.9,0.1-1.2,0.3c-0.4,0.2-0.7,0.5-0.9,0.8c-0.2,0.3-0.4,0.7-0.6,1.2c-0.1,0.5-0.2,1-0.2,1.5c0,0.6,0.1,1.1,0.2,1.5
c0.1,0.5,0.3,0.9,0.6,1.2c0.2,0.3,0.5,0.6,0.9,0.8c0.4,0.2,0.8,0.3,1.2,0.3c0.4,0,0.8,0,1.1-0.1c0.3-0.1,0.5-0.2,0.7-0.4
c0.2-0.2,0.3-0.4,0.4-0.6s0.2-0.5,0.2-0.7h-1.9V6h4.3v1.6C178.7,8.4,178.6,9.1,178.3,9.7z"/>
<path class="st0" d="M188.9,12.3l-4.4-6.6c-0.2-0.2-0.3-0.5-0.5-0.7c-0.2-0.3-0.3-0.5-0.4-0.6c0,0.1,0,0.3,0,0.5
c0,0.2,0,0.5,0,0.7c0,0.3,0,0.5,0,0.8c0,0.3,0,0.5,0,0.6v5.3h-2.4V0.2h2.3l4.3,6.4c0.1,0.2,0.3,0.5,0.5,0.7
c0.2,0.3,0.3,0.5,0.4,0.6c0-0.1,0-0.3,0-0.5c0-0.2,0-0.5,0-0.7c0-0.3,0-0.5,0-0.8c0-0.3,0-0.5,0-0.6V0.2h2.4v12.1H188.9z"/>
<path class="st0" d="M193.6,7.2V4.8h5v2.4H193.6z"/>
<path class="st0" d="M210.7,8.8c-0.3,0.8-0.6,1.4-1.1,2c-0.5,0.5-1,0.9-1.7,1.2c-0.7,0.3-1.4,0.4-2.2,0.4c-0.8,0-1.5-0.1-2.2-0.4
s-1.2-0.7-1.7-1.2c-0.5-0.5-0.8-1.2-1.1-2c-0.3-0.8-0.4-1.6-0.4-2.6s0.1-1.9,0.4-2.6c0.3-0.8,0.6-1.4,1.1-2c0.5-0.5,1-0.9,1.7-1.2
c0.7-0.3,1.4-0.4,2.2-0.4c0.8,0,1.5,0.1,2.1,0.4s1.2,0.7,1.7,1.2c0.5,0.5,0.8,1.2,1.1,2c0.3,0.8,0.4,1.6,0.4,2.6
S211,8.1,210.7,8.8z M207.9,3.4c-0.5-0.7-1.2-1-2.1-1s-1.5,0.3-2,1S203,5,203,6.2c0,1.2,0.3,2.2,0.8,2.8c0.5,0.7,1.2,1,2.1,1
s1.5-0.3,2-1s0.8-1.6,0.8-2.8S208.4,4.1,207.9,3.4z"/>
<path class="st0" d="M221.2,12.3l-4.4-6.6c-0.2-0.2-0.3-0.5-0.5-0.7c-0.2-0.3-0.3-0.5-0.4-0.6c0,0.1,0,0.3,0,0.5
c0,0.2,0,0.5,0,0.7c0,0.3,0,0.5,0,0.8c0,0.3,0,0.5,0,0.6v5.3h-2.4V0.2h2.3l4.3,6.4c0.1,0.2,0.3,0.5,0.5,0.7
c0.2,0.3,0.3,0.5,0.4,0.6c0-0.1,0-0.3,0-0.5c0-0.2,0-0.5,0-0.7c0-0.3,0-0.5,0-0.8c0-0.3,0-0.5,0-0.6V0.2h2.4v12.1H221.2z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -1,21 +0,0 @@
.login-pf body {
background: url("../node_modules/rcue/dist/img/bg-login.png") no-repeat left top fixed;
background-size: auto;
height: 100%;
}
@media (max-width: 767px) {
.login-pf body {
background: white;
}
}
@media (min-width: 767px) {
.login-pf {
background-attachment: fixed;
}
}
#kc-header-wrapper sup {
font-size: 35%;
top: -1.4em;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 343 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 410 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 646 B

View File

@ -1,4 +0,0 @@
parent=keycloak
styles=css/login.css css/tile.css css/login-rhsso.css
stylesCommon=web_modules/@patternfly/react-core/dist/styles/base.css web_modules/@patternfly/react-core/dist/styles/app.css node_modules/patternfly/dist/css/patternfly.min.css node_modules/patternfly/dist/css/patternfly-additions.min.css lib/pficon/pficon.css node_modules/rcue/dist/css/rcue.min.css node_modules/rcue/dist/css/rcue-additions.min.css

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -1,12 +0,0 @@
body {
background-image: url(../bg.png),url(../bg-login.png);
background-repeat: no-repeat,no-repeat;
background-position: right bottom, left top;
background-size: auto, auto;
background-color: #1a1a1a;
height: 100%;
}
.welcome-header {
color: #fff;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

View File

@ -1,7 +0,0 @@
parent=keycloak
styles=css/welcome.css css/welcome-rhsso.css
stylesCommon=node_modules/rcue/dist/css/rcue.min.css node_modules/rcue/dist/css/rcue-additions.min.css
documentationUrl=https://access.redhat.com/documentation/en/red-hat-single-sign-on/
displayCommunityLinks=false

View File

@ -23,7 +23,7 @@
<html>
<head>
<title>Welcome to ${productNameFull}</title>
<title>Welcome to ${productName}</title>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@ -49,7 +49,7 @@
<div class="col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2">
<div class="welcome-header">
<img src="${resourcesPath}/logo.png" alt="${productName}" border="0" />
<h1>Welcome to <strong>${productNameFull}</strong></h1>
<h1>Welcome to <strong>${productName}</strong></h1>
</div>
<div class="row">
<#if adminConsoleEnabled>
@ -98,7 +98,7 @@
<div class="welcome-primary-link">
<h3><a href="${adminUrl}"><img src="welcome-content/user.png">Administration Console <i class="fa fa-angle-right link" aria-hidden="true"></i></a></h3>
<div class="description">
Centrally manage all aspects of the ${productNameFull} server
Centrally manage all aspects of the ${productName} server
</div>
</div>
</div>