Skip to content

Commit d65c3b8

Browse files
Revise build (#999)
* chore(deps): bump golang.org/x/net Bumps the go_modules group with 1 update in the / directory: [golang.org/x/net](https://github.com/golang/net). Updates `golang.org/x/net` from 0.17.0 to 0.23.0 - [Commits](golang/net@v0.17.0...v0.23.0) --- updated-dependencies: - dependency-name: golang.org/x/net dependency-type: direct:production dependency-group: go_modules ... Signed-off-by: dependabot[bot] <[email protected]> * Updated CodeQL and GoReleaser versions * chore(deps): bump github.com/hashicorp/go-retryablehttp Bumps the go_modules group with 1 update in the / directory: [github.com/hashicorp/go-retryablehttp](https://github.com/hashicorp/go-retryablehttp). Updates `github.com/hashicorp/go-retryablehttp` from 0.7.1 to 0.7.7 - [Changelog](https://github.com/hashicorp/go-retryablehttp/blob/main/CHANGELOG.md) - [Commits](hashicorp/go-retryablehttp@v0.7.1...v0.7.7) --- updated-dependencies: - dependency-name: github.com/hashicorp/go-retryablehttp dependency-type: direct:production dependency-group: go_modules ... Signed-off-by: dependabot[bot] <[email protected]> * chore(deps): bump google.golang.org/protobuf Bumps the go_modules group with 1 update in the / directory: google.golang.org/protobuf. Updates `google.golang.org/protobuf` from 1.30.0 to 1.33.0 --- updated-dependencies: - dependency-name: google.golang.org/protobuf dependency-type: indirect dependency-group: go_modules ... Signed-off-by: dependabot[bot] <[email protected]> * chore(deps): bump tj-actions/changed-files Bumps the github_actions group with 1 update in the /.github/workflows directory: [tj-actions/changed-files](https://github.com/tj-actions/changed-files). Updates `tj-actions/changed-files` from 1.1.3 to 41.0.0 - [Release notes](https://github.com/tj-actions/changed-files/releases) - [Changelog](https://github.com/tj-actions/changed-files/blob/main/HISTORY.md) - [Commits](tj-actions/changed-files@v1.1.3...v41.0.0) --- updated-dependencies: - dependency-name: tj-actions/changed-files dependency-type: direct:production dependency-group: github_actions ... Signed-off-by: dependabot[bot] <[email protected]> * Fixed gradle build to work again - Shortened build.gradle - Run docker container manually - Fix gradle build for example-extension - Fixed failing java keystore tests, version updates, removed custom image build * Set Terraform version to 1.9.5 for tests * Fix KC19 build * Skip using custom-user-federation-example in CI --------- Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
1 parent 3f6b75b commit d65c3b8

18 files changed

+146
-174
lines changed

.github/workflows/build-test-image.yml

-43
This file was deleted.

.github/workflows/codeql-analysis.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ jobs:
4848

4949
# Initializes the CodeQL tools for scanning.
5050
- name: Initialize CodeQL
51-
uses: github/codeql-action/init@v1
51+
uses: github/codeql-action/init@v2
5252
with:
5353
languages: ${{ matrix.language }}
5454
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -59,7 +59,7 @@ jobs:
5959
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
6060
# If this step fails, then you should remove it and run the build manually (see below)
6161
- name: Autobuild
62-
uses: github/codeql-action/autobuild@v1
62+
uses: github/codeql-action/autobuild@v2
6363

6464
# ℹ️ Command-line programs to run using the OS shell.
6565
# 📚 https://git.io/JvXDl
@@ -73,4 +73,4 @@ jobs:
7373
# make release
7474

7575
- name: Perform CodeQL Analysis
76-
uses: github/codeql-action/analyze@v1
76+
uses: github/codeql-action/analyze@v2

.github/workflows/test.yml

+18-14
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ jobs:
3131
# we only want to run tests if any code changes (not for README or docs changes)
3232
- name: Check Changed Files
3333
id: files
34-
uses: tj-actions/changed-files@v1.1.3
34+
uses: tj-actions/changed-files@v41.0.0
3535
with:
3636
files: |
3737
.github
@@ -67,18 +67,6 @@ jobs:
6767
concurrency:
6868
group: ${{ github.head_ref || github.run_id }}-${{ matrix.keycloak-version }}
6969
cancel-in-progress: true
70-
services:
71-
keycloak:
72-
# we have to use a custom docker image for these tests, since it's not possible to provide command-line args
73-
# to a service container. see https://github.com/actions/runner/issues/2139
74-
image: mrparkers/keycloak-dev:${{ matrix.keycloak-version }}
75-
ports:
76-
- 8080:8080
77-
env:
78-
KC_DB: dev-mem
79-
KC_LOG_LEVEL: INFO
80-
KEYCLOAK_ADMIN: keycloak
81-
KEYCLOAK_ADMIN_PASSWORD: password
8270
steps:
8371
- name: Checkout Code
8472
uses: actions/checkout@v3
@@ -93,7 +81,19 @@ jobs:
9381
uses: hashicorp/setup-terraform@v1
9482
with:
9583
terraform_wrapper: false
96-
terraform_version: 1.4.1
84+
terraform_version: 1.9.5
85+
86+
- name: Start Keycloak Container
87+
run: |
88+
docker run -d --name keycloak \
89+
-p 8080:8080 \
90+
-e KC_DB=dev-mem \
91+
-e KC_LOG_LEVEL=INFO \
92+
-e KEYCLOAK_ADMIN=keycloak \
93+
-e KEYCLOAK_ADMIN_PASSWORD=password \
94+
-e KC_FEATURES=preview \
95+
-v $PWD/provider/misc:/opt/keycloak/misc:z \
96+
quay.io/keycloak/keycloak:${{ matrix.keycloak-version }} start-dev
9797
9898
- name: Initialize Keycloak
9999
run: ./scripts/wait-for-local-keycloak.sh && ./scripts/create-terraform-client.sh
@@ -119,3 +119,7 @@ jobs:
119119
KEYCLOAK_TEST_PASSWORD_GRANT: "true"
120120
KEYCLOAK_VERSION: ${{ steps.keycloak-version.outputs.result }}
121121
timeout-minutes: 60
122+
- name: Clean up
123+
run: |
124+
docker stop keycloak
125+
docker rm keycloak

.goreleaser.yml

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# Visit https://goreleaser.com for documentation on how to customize this
22
# behavior.
3+
version: 2
4+
35
before:
46
hooks:
57
# this is just an example and not a requirement for provider building/publishing
@@ -57,4 +59,4 @@ release:
5759
# If you want to manually examine the release before its live, uncomment this line:
5860
# draft: true
5961
changelog:
60-
skip: true
62+
disable: true
+10-38
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,22 @@
1-
buildscript {
2-
ext.kotlinVersion = '1.3.31'
3-
ext.keycloakVersion = '19.0.2'
4-
ext.shadowJarVersion = '4.0.2'
5-
6-
repositories {
7-
mavenCentral()
8-
jcenter()
9-
}
10-
11-
dependencies {
12-
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}"
13-
classpath "com.github.jengelman.gradle.plugins:shadow:${shadowJarVersion}"
14-
}
15-
}
16-
17-
apply {
18-
plugin 'java'
19-
plugin 'kotlin'
20-
plugin 'com.github.johnrengelman.shadow'
1+
plugins {
2+
id 'org.jetbrains.kotlin.jvm' version '2.0.20'
3+
id 'com.gradleup.shadow' version '8.3.0'
4+
id 'java-library'
215
}
226

23-
shadowJar {
24-
classifier = null
7+
ext {
8+
keycloakVersion = '21.0.1'
259
}
2610

2711
dependencies {
28-
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlinVersion}"
29-
compile "org.keycloak:keycloak-core:${keycloakVersion}"
30-
compile "org.keycloak:keycloak-services:${keycloakVersion}"
31-
compile "org.keycloak:keycloak-server-spi:${keycloakVersion}"
32-
compile "org.keycloak:keycloak-server-spi-private:${keycloakVersion}"
33-
compile "org.keycloak:keycloak-model-legacy:${keycloakVersion}"
12+
compileOnly "org.keycloak:keycloak-services:${keycloakVersion}"
13+
compileOnly "org.keycloak:keycloak-model-legacy:${keycloakVersion}"
3414
}
3515

3616
repositories {
3717
mavenCentral()
3818
}
3919

40-
compileKotlin {
41-
kotlinOptions {
42-
jvmTarget = "1.8"
43-
}
44-
}
45-
46-
compileTestKotlin {
47-
kotlinOptions {
48-
jvmTarget = "1.8"
49-
}
20+
kotlin {
21+
jvmToolchain(11)
5022
}

custom-user-federation-example/gradle/wrapper/gradle-wrapper.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
33
zipStoreBase=GRADLE_USER_HOME
44
zipStorePath=wrapper/dists
5-
distributionUrl=https\://services.gradle.org/distributions/gradle-4.8-all.zip
5+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-all.zip
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.github.mrparkers.keycloak
2+
3+
import org.keycloak.events.Event
4+
import org.keycloak.events.EventListenerProvider
5+
import org.keycloak.events.admin.AdminEvent
6+
import org.keycloak.models.KeycloakSession
7+
8+
class CustomEventListenerProvider(session: KeycloakSession) : EventListenerProvider {
9+
10+
override fun onEvent(event: Event) {
11+
//
12+
}
13+
14+
override fun onEvent(adminEvent: AdminEvent, includeRep: Boolean) {
15+
//
16+
}
17+
18+
override fun close() {
19+
// NOOP
20+
}
21+
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.github.mrparkers.keycloak
2+
3+
import org.keycloak.Config
4+
import org.keycloak.events.EventListenerProvider
5+
import org.keycloak.events.EventListenerProviderFactory
6+
import org.keycloak.models.KeycloakSession
7+
import org.keycloak.models.KeycloakSessionFactory
8+
9+
class CustomEventListenerProviderFactory : EventListenerProviderFactory {
10+
11+
override fun create(session: KeycloakSession): EventListenerProvider {
12+
return CustomEventListenerProvider(session);
13+
}
14+
15+
override fun init(config: Config.Scope) {
16+
// NOOP
17+
}
18+
19+
override fun postInit(sessionFactory: KeycloakSessionFactory) {
20+
// NOOP
21+
}
22+
23+
override fun close() {
24+
// NOOP
25+
}
26+
27+
override fun getId(): String {
28+
return "example-listener";
29+
}
30+
}

custom-user-federation-example/src/main/kotlin/com/github/mrparkers/keycloak/CustomUserStorageProvider.kt

+12-12
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,17 @@ import org.keycloak.component.ComponentModel
44
import org.keycloak.credential.CredentialInput
55
import org.keycloak.credential.CredentialInputUpdater
66
import org.keycloak.credential.CredentialInputValidator
7-
import org.keycloak.credential.CredentialModel
7+
import org.keycloak.models.credential.PasswordCredentialModel
88
import org.keycloak.credential.LegacyUserCredentialManager
99
import org.keycloak.models.*
10+
import org.keycloak.models.credential.*
1011
import org.keycloak.storage.ReadOnlyException
1112
import org.keycloak.storage.StorageId
1213
import org.keycloak.storage.UserStorageProvider
1314
import org.keycloak.storage.adapter.AbstractUserAdapter
1415
import org.keycloak.storage.user.UserLookupProvider
1516
import java.util.*
17+
import java.util.stream.Stream
1618

1719
class CustomUserStorageProvider(private val session: KeycloakSession, private val model: ComponentModel) :
1820
UserStorageProvider, UserLookupProvider, CredentialInputValidator, CredentialInputUpdater {
@@ -30,11 +32,11 @@ class CustomUserStorageProvider(private val session: KeycloakSession, private va
3032

3133
// UserLookupProvider
3234

33-
override fun getUserByEmail(email: String, realm: RealmModel): UserModel? {
35+
override fun getUserByEmail(realm: RealmModel, email: String): UserModel? {
3436
return null
3537
}
3638

37-
override fun getUserByUsername(username: String, realm: RealmModel): UserModel? {
39+
override fun getUserByUsername(realm: RealmModel, username: String): UserModel? {
3840
val user = loadedUsers[username]
3941

4042
if (user != null) {
@@ -60,11 +62,11 @@ class CustomUserStorageProvider(private val session: KeycloakSession, private va
6062
return null
6163
}
6264

63-
override fun getUserById(id: String, realm: RealmModel): UserModel? {
65+
override fun getUserById(realm: RealmModel, id: String): UserModel? {
6466
val storageId = StorageId(id)
6567
val username = storageId.externalId
6668

67-
return getUserByUsername(username, realm)
69+
return getUserByUsername(realm, username)
6870
}
6971

7072
// CredentialInputValidator
@@ -74,7 +76,7 @@ class CustomUserStorageProvider(private val session: KeycloakSession, private va
7476
}
7577

7678
override fun supportsCredentialType(credentialType: String?): Boolean {
77-
return credentialType.equals(CredentialModel.PASSWORD)
79+
return credentialType.equals(PasswordCredentialModel.TYPE)
7880
}
7981

8082
override fun isValid(realm: RealmModel, user: UserModel, input: CredentialInput): Boolean {
@@ -87,14 +89,12 @@ class CustomUserStorageProvider(private val session: KeycloakSession, private va
8789
return password == input.value
8890
}
8991

90-
// CredentialInputUpdater
91-
92-
override fun getDisableableCredentialTypes(realm: RealmModel, user: UserModel): MutableSet<String> {
93-
return Collections.EMPTY_SET as MutableSet<String>
94-
}
92+
override fun getDisableableCredentialTypesStream(realm: RealmModel, user: UserModel): Stream<String> {
93+
return Stream.empty()
94+
}
9595

9696
override fun updateCredential(realm: RealmModel, user: UserModel, input: CredentialInput): Boolean {
97-
if (input.type == CredentialModel.PASSWORD) {
97+
if (input.type == PasswordCredentialModel.TYPE) {
9898
throw ReadOnlyException("Custom provider does not support password updating")
9999
}
100100

custom-user-federation-example/src/main/resources/META-INF/jboss-deployment-structure.xml

-16
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
com.github.mrparkers.keycloak.CustomEventListenerProviderFactory

docker-compose.yml

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
version: "3"
21
volumes:
32
postgres:
43
services:
@@ -7,18 +6,18 @@ services:
76
- POSTGRES_DB=keycloak
87
- POSTGRES_USER=keycloak
98
- POSTGRES_PASSWORD=password
10-
image: postgres:12
9+
image: postgres:16
1110
ports:
1211
- 5432:5432
1312
volumes:
1413
- postgres:/var/lib/postgresql
1514
openldap:
16-
image: osixia/openldap:1.3.0
15+
image: bitnami/openldap:2.6
1716
ports:
1817
- 8389:389
1918
keycloak:
2019
image: quay.io/keycloak/keycloak:21.0.1
21-
command: start-dev --features=preview
20+
command: --verbose start-dev --features=preview
2221
depends_on:
2322
- postgres
2423
- openldap
@@ -40,4 +39,5 @@ services:
4039
# - 8787:8787
4140
volumes:
4241
# Make the custom-user-federation-example extension available to Keycloak. The :z option is required and tells Docker that the volume content will be shared between containers.
43-
- ./custom-user-federation-example/build/libs/custom-user-federation-example.jar:/opt/jboss/keycloak/standalone/deployments/custom-user-federation-example.jar:z
42+
- ./custom-user-federation-example/build/libs/custom-user-federation-example-all.jar:/opt/keycloak/providers/custom-user-federation-example-all.jar:z
43+
- ./provider/misc:/opt/keycloak/misc:z

0 commit comments

Comments
 (0)