Skip to content

Commit a5c3b1c

Browse files
Fabienfabiengo
authored andcommitted
feat(bo): create keycloak user when partners is created
1 parent 89f74aa commit a5c3b1c

File tree

4 files changed

+41
-3
lines changed

4 files changed

+41
-3
lines changed

dossierfacile-bo/src/main/java/fr/gouv/bo/service/KeycloakService.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package fr.gouv.bo.service;
22

33
import fr.dossierfacile.common.entity.User;
4+
import fr.dossierfacile.common.entity.UserApi;
45
import org.keycloak.representations.idm.UserRepresentation;
56

67
import java.util.List;
@@ -11,4 +12,6 @@ public interface KeycloakService {
1112
void deleteKeycloakSingleUser(User tenant);
1213

1314
void deleteKeycloakUsers(List<User> tenants);
15+
16+
void createKeycloakClient(UserApi userApi);
1417
}

dossierfacile-bo/src/main/java/fr/gouv/bo/service/UserApiService.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
@Service
1818
@Slf4j
1919
public class UserApiService {
20-
20+
private final KeycloakService keycloakService;
2121
private final UserApiRepository userApiRepository;
2222
private final ObjectMapper mapper;
2323

@@ -36,11 +36,12 @@ public List<UserApi> findPartnersLinkedToTenant(Long id) {
3636
}
3737

3838
public List<UserApi> findAll() {
39-
return userApiRepository.findAll(Sort.by("disabled","name"));
39+
return userApiRepository.findAll(Sort.by("disabled", "name"));
4040
}
4141

4242
public UserApi create(UserApiDTO userApiDTO) {
4343
UserApi userApi = mapper.convertValue(userApiDTO, UserApi.class);
44+
keycloakService.createKeycloakClient(userApi);
4445
return userApiRepository.save(userApi);
4546
}
4647

dossierfacile-bo/src/main/java/fr/gouv/bo/service/impl/KeycloakServiceImpl.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
package fr.gouv.bo.service.impl;
22

33
import fr.dossierfacile.common.entity.User;
4+
import fr.dossierfacile.common.entity.UserApi;
45
import fr.gouv.bo.service.KeycloakService;
56
import lombok.AllArgsConstructor;
67
import lombok.extern.slf4j.Slf4j;
78
import org.keycloak.admin.client.resource.RealmResource;
89
import org.keycloak.admin.client.resource.UserResource;
10+
import org.keycloak.representations.idm.ClientRepresentation;
911
import org.keycloak.representations.idm.UserRepresentation;
1012
import org.springframework.stereotype.Service;
1113

1214
import javax.ws.rs.NotFoundException;
15+
import javax.ws.rs.core.Response;
16+
import java.time.LocalDateTime;
1317
import java.util.List;
1418
import java.util.Optional;
1519

@@ -48,4 +52,30 @@ public void deleteKeycloakSingleUser(User tenant) {
4852
public void deleteKeycloakUsers(List<User> tenants) {
4953
tenants.forEach(t -> deleteKeycloakSingleUser(t));
5054
}
55+
56+
@Override
57+
public void createKeycloakClient(UserApi userApi) {
58+
59+
String clientTemplateName = (userApi.getName().startsWith("dfconnect-")) ? "dfconnect-template" :
60+
((userApi.getName().startsWith("hybrid-")) ? "hybrid-template" : null);
61+
62+
ClientRepresentation clientTemplate = realmResource.clients()
63+
.findByClientId(clientTemplateName).get(0);
64+
65+
clientTemplate.setId(null);
66+
clientTemplate.setClientId(userApi.getName());
67+
clientTemplate.setDescription("Client DFC pour " + userApi.getName2() + " créé le " + LocalDateTime.now().toString());
68+
clientTemplate.setName(userApi.getName2());
69+
clientTemplate.setSecret(null);
70+
clientTemplate.getProtocolMappers().stream().forEach((pm) -> pm.setId(null));
71+
clientTemplate.setAttributes(null);
72+
clientTemplate.setEnabled(true);
73+
74+
Response response = realmResource.clients().create(clientTemplate);
75+
log.info(" status = " + response.getStatus());
76+
if (response.getStatus() != Response.Status.CREATED.getStatusCode()) {
77+
throw new IllegalStateException("Status de retour création de client " + +response.getStatus());
78+
}
79+
}
80+
5181
}

dossierfacile-bo/src/main/resources/templates/bo/tools.html

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,18 @@
1313
<div th:if="${errorMessage}" class="alert alert-danger" role="alert">
1414
<span th:text="${errorMessage}"></span>
1515
</div>
16+
</div>
17+
18+
<div class="container">
1619
<div class="text-center margin-bottom">
1720
<span th:text="'Enter the tenants Id : '"></span>
1821
</div>
1922
<div class="clearfix"></div>
2023
<div class="table-responsive">
2124
<form class="form" th:action="@{/bo/tools/regenerateStatusOfTenants}" th:method="post">
2225
<div style="text-align: -webkit-center;">
23-
<input type="text" autocomplete="true" name="tenantList" placeholder="Id: 2, 51, 8, ..." style="width: 50%"/>
26+
<input type="text" autocomplete="true" name="tenantList" placeholder="Id: 2, 51, 8, ..."
27+
style="width: 50%"/>
2428
</div>
2529

2630
<div class="text-center medium-space-separator">

0 commit comments

Comments
 (0)