File tree Expand file tree Collapse file tree 6 files changed +53
-11
lines changed
java/edu/harvard/iq/keycloak/auth/spi
test/java/edu/harvard/iq/keycloak/auth/spi/services Expand file tree Collapse file tree 6 files changed +53
-11
lines changed Original file line number Diff line number Diff line change @@ -31,7 +31,10 @@ public class DataverseUserStorageProvider implements
3131 public DataverseUserStorageProvider (KeycloakSession session , ComponentModel model ) {
3232 this .session = session ;
3333 this .model = model ;
34- this .dataverseUserService = new DataverseUserService (session );
34+
35+ String datasource = model .getConfig ().getFirst ("datasource" );
36+ logger .debugf ("Using datasource: %s" , datasource );
37+ this .dataverseUserService = new DataverseUserService (session , datasource );
3538 }
3639
3740 @ Override
Original file line number Diff line number Diff line change 33import org .jboss .logging .Logger ;
44import org .keycloak .component .ComponentModel ;
55import org .keycloak .models .KeycloakSession ;
6+ import org .keycloak .provider .ProviderConfigProperty ;
67import org .keycloak .storage .UserStorageProviderFactory ;
78
9+ import java .util .ArrayList ;
10+ import java .util .List ;
11+
812public class DataverseUserStorageProviderFactory implements UserStorageProviderFactory <DataverseUserStorageProvider > {
913
1014 public static final String PROVIDER_ID = "dv-builtin-users-authenticator" ;
@@ -30,4 +34,19 @@ public String getHelpText() {
3034 public void close () {
3135 logger .debug ("<<<<<< Closing factory" );
3236 }
37+
38+ @ Override
39+ public List <ProviderConfigProperty > getConfigProperties () {
40+ List <ProviderConfigProperty > configProperties = new ArrayList <>();
41+
42+ ProviderConfigProperty mySetting = new ProviderConfigProperty ();
43+ mySetting .setName ("datasource" );
44+ mySetting .setLabel ("Datasource" );
45+ mySetting .setHelpText ("This specifies the target datasource used by the SPI." );
46+ mySetting .setType (ProviderConfigProperty .STRING_TYPE );
47+
48+ configProperties .add (mySetting );
49+
50+ return configProperties ;
51+ }
3352}
Original file line number Diff line number Diff line change @@ -17,8 +17,8 @@ public class DataverseUserService {
1717
1818 private final EntityManager em ;
1919
20- public DataverseUserService (KeycloakSession session ) {
21- this .em = session .getProvider (JpaConnectionProvider .class , "user-store" ).getEntityManager ();
20+ public DataverseUserService (KeycloakSession session , String datasource ) {
21+ this .em = session .getProvider (JpaConnectionProvider .class , datasource ).getEntityManager ();
2222 }
2323
2424 public DataverseUser getUserById (String id ) {
Original file line number Diff line number Diff line change 1313 <!-- JDBC connection settings -->
1414 <property name =" hibernate.connection.datasource" value =" user-store" />
1515
16- <!-- Database connection properties for PostgreSQL -->
17- <property name =" hibernate.connection.driver_class" value =" org.postgresql.Driver" />
18- <property name =" hibernate.connection.url" value =" jdbc:postgresql://postgres:5432/dataverse" />
19- <property name =" hibernate.connection.username" value =" ${DATAVERSE_DB_USER}" />
20- <property name =" hibernate.connection.password" value =" secret" />
16+ <!-- Transaction management settings -->
17+ <property name =" jakarta.persistence.transactionType" value =" JTA" />
18+
19+ <!-- Automatically update database schema -->
20+ <property name =" hibernate.hbm2ddl.auto" value =" none" />
21+
22+ <!-- Disable SQL logging -->
23+ <property name =" hibernate.show_sql" value =" false" />
24+ </properties >
25+ </persistence-unit >
26+
27+ <persistence-unit name =" user-store-qa" transaction-type =" JTA" >
28+ <class >edu.harvard.iq.keycloak.auth.spi.models.DataverseBuiltinUser</class >
29+ <class >edu.harvard.iq.keycloak.auth.spi.models.DataverseAuthenticatedUser</class >
30+ <properties >
31+ <!-- Set the Hibernate dialect for PostgreSQL -->
32+ <property name =" hibernate.dialect" value =" org.hibernate.dialect.PostgreSQLDialect" />
33+
34+ <!-- JDBC connection settings -->
35+ <property name =" hibernate.connection.datasource" value =" user-store-qa" />
2136
2237 <!-- Transaction management settings -->
2338 <property name =" jakarta.persistence.transactionType" value =" JTA" />
Original file line number Diff line number Diff line change 1818
1919class DataverseUserServiceTest {
2020
21+ private static final String TEST_USER_STORE = "user-store" ;
22+
2123 private EntityManager entityManagerMock ;
2224 private DataverseUserService sut ;
2325
@@ -27,10 +29,10 @@ void setUp() {
2729 KeycloakSession sessionMock = mock (KeycloakSession .class );
2830
2931 JpaConnectionProvider jpaConnectionProviderMock = mock (JpaConnectionProvider .class );
30- when (sessionMock .getProvider (JpaConnectionProvider .class , "user-store" )).thenReturn (jpaConnectionProviderMock );
32+ when (sessionMock .getProvider (JpaConnectionProvider .class , TEST_USER_STORE )).thenReturn (jpaConnectionProviderMock );
3133 when (jpaConnectionProviderMock .getEntityManager ()).thenReturn (entityManagerMock );
3234
33- sut = new DataverseUserService (sessionMock );
35+ sut = new DataverseUserService (sessionMock , TEST_USER_STORE );
3436 }
3537
3638 @ Test
Original file line number Diff line number Diff line change @@ -35,7 +35,10 @@ curl -X POST "http://keycloak:8090/admin/realms/test/components" \
3535 "name": "Dataverse built-in users authentication",
3636 "providerId": "dv-builtin-users-authenticator",
3737 "providerType": "org.keycloak.storage.UserStorageProvider",
38- "parentId": null
38+ "parentId": null,
39+ "config": {
40+ "datasource": ["user-store"]
41+ }
3942 }'
4043
4144echo " Keycloak SPI configured in realm."
You can’t perform that action at this time.
0 commit comments