Work on Finish the "drools-framewok-uberfire-security-service" module #97

Allow only users with a user group that gives access to the Workbench #96
This commit is contained in:
Nicolas Héron 2020-10-12 09:02:54 +02:00
commit 3f1187921e
18 changed files with 416 additions and 131 deletions

View file

@ -39,6 +39,7 @@ import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
import org.springframework.kafka.core.*;
import org.springframework.kafka.support.serializer.JsonDeserializer;
import org.springframework.kafka.support.serializer.JsonSerializer;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import springfox.documentation.builders.PathSelectors;
@ -56,6 +57,7 @@ import java.util.Map;
@EnableKafka
@PropertySource("classpath:application.properties")
@EnableSwagger2
@EnableScheduling
public class DroolsSpringBootConsoleApplication extends SpringBootServletInitializer {

View file

@ -1,9 +1,14 @@
package org.chtijbug.drools.console.middle;
import org.chtijbug.drools.console.service.KieRepositoryService;
import org.chtijbug.drools.console.service.ProjectPersistService;
import org.chtijbug.drools.console.service.model.UserConnected;
import org.chtijbug.drools.proxy.persistence.model.*;
import org.chtijbug.drools.proxy.persistence.repository.*;
import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import java.util.UUID;
@ -17,6 +22,9 @@ public class DababaseContentInit {
@Value("${kie-wb.mainwbextern}")
private String mainwbExtern;
@Value("${kie-wb.baseurl}")
private String kiewbUrl;
@Autowired
private UserRepository userRepository;
@ -32,10 +40,13 @@ public class DababaseContentInit {
@Autowired
private CustomerRepository customerRepository;
public void initDatabaseIfNecessary(){
@Autowired
private KieRepositoryService kieRepositoryService;
User adminUser = userRepository.findByLogin("admin");
if (adminUser==null){
@Autowired
private ProjectPersistService projectPersistService;
public void initDatabaseIfNecessary() {
/**
* admin The administrator
* analyst The analyst
@ -44,6 +55,16 @@ public class DababaseContentInit {
* user The end user
* kiemgmt KIE management user
*/
User adminUser = userRepository.findByLogin("admin");
if (adminUser == null) {
this.initDatabase();
}else{
this.synchronizeDatabaseWithWorkbenches();
}
}
private void initDatabase(){
userRolesRepository.save(new UserRoles(UUID.randomUUID().toString(), "process-admin"));
userRolesRepository.save(new UserRoles(UUID.randomUUID().toString(), "manager"));
userRolesRepository.save(new UserRoles(UUID.randomUUID().toString(), "admin"));
@ -58,7 +79,7 @@ public class DababaseContentInit {
userGroupsRepository.save(new UserGroups(UUID.randomUUID().toString(), "admingroup"));
userGroupsRepository.save(new UserGroups(UUID.randomUUID().toString(), "demogroup"));
adminUser = new User(UUID.randomUUID().toString(),"admin","adminadmin99#");
User adminUser = new User(UUID.randomUUID().toString(), "admin", "adminadmin99#");
adminUser.getUserGroups().add(userGroupsRepository.findByName("kiemgmt"));
adminUser.getUserGroups().add(userGroupsRepository.findByName("admingroup"));
adminUser.getUserRoles().add(userRolesRepository.findByName("admin"));
@ -81,13 +102,24 @@ public class DababaseContentInit {
mainWorkbench.setInternalUrl(mainwbUrlIntern);
mainWorkbench = kieWorkbenchRepository.save(mainWorkbench);
UserConnected userConnected = kieRepositoryService.getUserContent(mainWorkbench.getExternalUrl() + "/rest",
nheronUser.getLogin(), nheronUser.getPassword(), mainWorkbench.getName());
for (PlatformProjectData platformProjectData : userConnected.getProjectResponses()) {
String projectName = platformProjectData.getName();
String workspaceName = platformProjectData.getSpaceName();
ProjectPersist projectPersist=projectPersistService.saveorUpdateProject(platformProjectData, mainWorkbench);
UserGroups workspaceUserGroups=projectPersistService.createWorkSpaceGroupIfNeeded(workspaceName, mainWorkbench);
projectPersistService.createProjectGroupIfNeeded(projectName, mainWorkbench,projectPersist,workspaceUserGroups);
//platformProjectData.getJavaClasses()
}
Customer demCustomer = new Customer();
demCustomer.setKieWorkbench(mainWorkbench);
demCustomer.setName("demoCustomer");
demCustomer.setID(UUID.randomUUID().toString());
customerRepository.save(demCustomer);
User demoUser = new User(UUID.randomUUID().toString(), "demo", "demo");
demoUser.getUserGroups().add(userGroupsRepository.findByName("demogroup"));
demoUser.getUserRoles().add(userRolesRepository.findByName("user"));
@ -96,14 +128,28 @@ public class DababaseContentInit {
demoUser.setWbName(mainWorkbench.getName());
demoUser.setCustomer(demCustomer);
userRepository.save(demoUser);
}
@Scheduled(cron = "0 0 0/1 * * ?")
public void synchronizeDatabaseWithWorkbenches(){
for (KieWorkbench kieWorkbench : kieWorkbenchRepository.findAll()){
User nheronUser = userRepository.findByLogin("nheron");
UserConnected userConnected = kieRepositoryService.getUserContent(kieWorkbench.getExternalUrl() + "/rest",
nheronUser.getLogin(), nheronUser.getPassword(), kieWorkbench.getName());
for (PlatformProjectData platformProjectData : userConnected.getProjectResponses()) {
String projectName = platformProjectData.getName();
String workspaceName = platformProjectData.getSpaceName();
ProjectPersist projectPersist=projectPersistService.saveorUpdateProject(platformProjectData, kieWorkbench);
UserGroups workSpaceGroupIfNeeded = projectPersistService.createWorkSpaceGroupIfNeeded(workspaceName, kieWorkbench);
projectPersistService.createProjectGroupIfNeeded(projectName, kieWorkbench,projectPersist,workSpaceGroupIfNeeded);
}
}
}
}

View file

@ -4,9 +4,12 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.codec.binary.Base64;
import org.chtijbug.drools.console.service.IndexerService;
import org.chtijbug.drools.console.service.JobService;
import org.chtijbug.drools.console.service.ProjectPersistService;
import org.chtijbug.drools.proxy.persistence.model.KieWorkbench;
import org.chtijbug.drools.proxy.persistence.model.User;
import org.chtijbug.drools.proxy.persistence.model.UserGroups;
import org.chtijbug.drools.proxy.persistence.repository.KieWorkbenchRepository;
import org.chtijbug.drools.proxy.persistence.repository.UserGroupsRepository;
import org.chtijbug.drools.proxy.persistence.repository.UserRepository;
import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectData;
import org.guvnor.rest.client.CreateProjectJobRequest;
@ -44,12 +47,17 @@ public class AssetServiceExpose {
@Autowired
private KieWorkbenchRepository kieWorkbenchRepository;
@Autowired
private UserGroupsRepository userGroupsRepository;
@Autowired
private UserRepository userRepository;
@Autowired
private JobService jobService;
@Autowired
private ProjectPersistService projectPersistService;
@PostMapping(value = "/spaces",
consumes = {javax.ws.rs.core.MediaType.APPLICATION_JSON, javax.ws.rs.core.MediaType.APPLICATION_XML},
@ -85,6 +93,7 @@ public class AssetServiceExpose {
}
return new ResponseEntity<>(extractedResponse, clientHttpResponse.getHeaders(), clientHttpResponse.getStatusCode());
});
projectPersistService.createWorkSpaceGroupIfNeeded(request.getSpaceName(),kieWorkbench);
jobService.executeWrite(kieWorkbench.getExternalUrl()+"/rest", connectedUser.getLogin(), connectedUser.getPassword(), null, response.getBody().getJobId(), null);
Variant variant = Variant.mediaTypes(javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE).add().build().get(0);
return Response.status(Response.Status.CREATED).entity(response.getBody()).variant(variant).build();
@ -143,6 +152,8 @@ public class AssetServiceExpose {
Variant variant = Variant.mediaTypes(javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE).add().build().get(0);
UserGroups workspaceUsergroup = userGroupsRepository.findByName("wrk_" + spaceName);
projectPersistService.createProjectGroupIfNeeded(request.getName(),kieWorkbench,null,workspaceUsergroup);
return Response.status(Response.Status.CREATED).entity(response2.getBody()).variant(variant).build();
}
private RequestCallback requestCallback(final Object content, String username, String password) {

View file

@ -138,7 +138,44 @@ public class KieRepositoryService {
return null;
}
}
public UserConnected getUserContent(String url, String username, String password,String workbenchName) {
User user = userRepository.findByLogin(username);
String completeurl = url + chtijbugprefix+"content";
if (user != null && user.getPassword().equals(password)) {
if (user.getCustomer()!= null &&
user.getCustomer().getKieWorkbench()!= null
&& user.getCustomer().getKieWorkbench().getInternalUrl()!= null){
completeurl = user.getCustomer().getKieWorkbench().getInternalUrl()+"/rest/chtijbug/content";
}
logger.info("url moteur reco : {}" , completeurl);
ResponseEntity<UserLoginInformation> response = restTemplateKiewb
.execute(completeurl, HttpMethod.GET, requestCallback(null, username, password), clientHttpResponse -> {
UserLoginInformation extractedResponse = null;
if (clientHttpResponse.getBody() != null) {
Scanner s = new Scanner(clientHttpResponse.getBody()).useDelimiter("\\A");
String result = s.hasNext() ? s.next() : "";
extractedResponse = mapper.readValue(result, UserLoginInformation.class);
}
return new ResponseEntity<>(extractedResponse, clientHttpResponse.getHeaders(), clientHttpResponse.getStatusCode());
});
UserConnected userConnected = new UserConnected();
UserLoginInformation responseBody = response.getBody();
userConnected.setUserName(username);
userConnected.setUserPassword(password);
userConnected.setUserPassword(password);
userConnected.getProjectResponses().addAll(responseBody.getProjects());
userConnected.getRoles().addAll(responseBody.getRoles());
userConnected.setUserName(username);
userConnected.setKieWorkbenchName(workbenchName);
return userConnected;
} else {
return null;
}
}
public List<Asset> getListAssets(String url, String username, String password, String spaceName, String projectName) {
String completeurl = url + chtijbugprefix + spaceName + "/" + projectName + "/assets";
logger.info("url getListAssets : {}" , completeurl);

View file

@ -1,7 +1,6 @@
package org.chtijbug.drools.console.service;
import com.vaadin.flow.component.UI;
import com.vaadin.flow.server.VaadinSession;
import org.chtijbug.drools.ReverseProxyUpdate;
import org.chtijbug.drools.common.KafkaTopicConstants;
import org.chtijbug.drools.console.AddLog;
@ -20,10 +19,7 @@ import org.springframework.context.annotation.DependsOn;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
@Service
@DependsOn("applicationContext")
@ -41,6 +37,13 @@ public class ProjectPersistService {
private KieConfigurationData config;
@Autowired
private UserRepository userRepository;
@Autowired
private UserRolesRepository userRolesRepository;
@Autowired
private UserConnectedService userConnectedService;
@ -62,6 +65,8 @@ public class ProjectPersistService {
@Autowired
private KafkaTemplate<String, ReverseProxyUpdate> kafkaTemplateProxyUpdate;
@Autowired
private UserGroupsRepository userGroupsRepository;
public ProjectPersistService() {
@ -69,58 +74,102 @@ public class ProjectPersistService {
}
public void saveIfnotExist(List<PlatformProjectData> platformProjectResponses, String workbenchName) {
KieWorkbench kieWorkbench = workbenchRepository.findByName(workbenchName);
for (PlatformProjectData platformProjectResponse : platformProjectResponses) {
ProjectPersist projectPersist = projectRepository.findByProjectNameAndBranch(new KieProject(platformProjectResponse.getSpaceName(), platformProjectResponse.getName()), platformProjectResponse.getBranch());
public ProjectPersist saveorUpdateProject(PlatformProjectData platformProjectData, KieWorkbench kieWorkbench) {
ProjectPersist projectPersist = projectRepository.findByProjectNameAndBranch(new KieProject(platformProjectData.getSpaceName(), platformProjectData.getName()), platformProjectData.getBranch());
if (projectPersist == null) {
projectPersist = platformProjectResponseToProjectPersist(platformProjectResponse);
projectPersist = platformProjectResponseToProjectPersist(platformProjectData);
projectPersist.setKieWorkbench(kieWorkbench);
projectPersist = projectRepository.save(projectPersist);
addProjectToSession(projectPersist, true);
} else {
projectPersist.setKieWorkbench(kieWorkbench);
projectPersist.getClassNameList().clear();
for (String className : platformProjectResponse.getJavaClasses()) {
projectPersist.setProjectVersion(platformProjectData.getVersion());
projectPersist.setArtifactID(platformProjectData.getArtifactId());
projectPersist.setGroupID(platformProjectData.getGroupId());
projectPersist.setClassNameList(new ArrayList<>());
for (String className : platformProjectData.getJavaClasses()) {
projectPersist.getClassNameList().add(className);
projectRepository.save(projectPersist);
}
addProjectToSession(projectPersist, false);
}
}
}
public Map<String, ProjectPersist> getProjectsSession() {
return (Map<String, ProjectPersist>) VaadinSession.getCurrent().getAttribute(projectVariable);
}
projectPersist = projectRepository.save(projectPersist);
public void addProjectToSession(ProjectPersist projectPersist, boolean isModifiable) {
Map<String, ProjectPersist> projectPersists = getProjectsSession();
if (projectPersists == null) {
projectPersists = new HashMap<>();
}
if (isModifiable) {
projectPersists.put(projectPersist.getProjectName().toString() + "-" + projectPersist.getBranch(), projectPersist);
} else {
projectPersist.setKieWorkbench(kieWorkbench);
projectPersist.setProjectVersion(platformProjectData.getVersion());
projectPersist.setArtifactID(platformProjectData.getArtifactId());
projectPersist.setGroupID(platformProjectData.getGroupId());
projectPersist.setClassNameList(new ArrayList<>());
for (String className : platformProjectData.getJavaClasses()) {
projectPersist.getClassNameList().add(className);
ProjectPersist tmp = projectPersists.get(projectPersist.getProjectName().toString() + "-" + projectPersist.getBranch());
if (tmp == null) {
projectPersists.put(projectPersist.getProjectName().toString() + "-" + projectPersist.getBranch(), projectPersist);
}
projectRepository.save(projectPersist);
}
return projectPersist;
}
public void createProjectGroupIfNeeded(String projectName, KieWorkbench kieWorkbench,ProjectPersist projectPersist,UserGroups workspaceUserGroup ) {
UserGroups userGroups = userGroupsRepository.findByName("prj_" + projectName);
if (userGroups == null) {
UserGroups projectGroup = new UserGroups(UUID.randomUUID().toString(), "prj_" + projectName);
projectGroup.setKieWorkbench(kieWorkbench);
projectGroup.setProjectName(projectName);
projectGroup.setProjectPersist(projectPersist);
projectGroup.setWorkspaceUserGroup(workspaceUserGroup);
userGroupsRepository.save(projectGroup);
User groupUser = new User(UUID.randomUUID().toString(), "prj_user_" + projectName, "adminadmin99#");
groupUser.getUserGroups().add(projectGroup);
groupUser.getUserRoles().add(userRolesRepository.findByName("analyst"));
userRepository.save(groupUser);
}else{
userGroups.setWorkspaceUserGroup(workspaceUserGroup);
userGroupsRepository.save(userGroups);
}
}
VaadinSession.getCurrent().setAttribute(projectVariable, projectPersists);
public UserGroups createWorkSpaceGroupIfNeeded(String workSpaceName, KieWorkbench kieWorkbench) {
UserGroups userGroupsWorkSpace = userGroupsRepository.findByName("wrk_" + workSpaceName);
if (userGroupsWorkSpace == null) {
userGroupsWorkSpace = new UserGroups(UUID.randomUUID().toString(), "wrk_" + workSpaceName);
userGroupsWorkSpace.setKieWorkbench(kieWorkbench);
userGroupsWorkSpace.setSpaceName(workSpaceName);
userGroupsRepository.save(userGroupsWorkSpace);
User groupUser = new User(UUID.randomUUID().toString(), "wrk_user_" + workSpaceName, "pymma#");
groupUser.getUserGroups().add(userGroupsWorkSpace);
groupUser.getUserRoles().add(userRolesRepository.findByName("analyst"));
userRepository.save(groupUser);
}
return userGroupsWorkSpace;
}
public Map<String, ProjectPersist> findProjectsConnectedUser() {
//VaadinSession.getCurrent().get
boolean isAdmin =false;
UserConnected userConnected = userConnectedService.getUserConnected();
User user = userRepository.findByLogin(userConnected.getUserName());
for (UserRoles userRoles : user.getUserRoles()){
if ("admin".equals(userRoles.getName())){
isAdmin=true;
}
}
List<ProjectPersist> projectPersists = new ArrayList<>();
if (isAdmin) {
projectPersists = projectRepository.findAll();
}else {
List<UserGroups> userGroups = user.getUserGroups();
}
Map<String, ProjectPersist> map = new HashMap<>();
for (ProjectPersist projectPersist : projectPersists){
map.put(projectPersist.getProjectName().toString() + "-" + projectPersist.getBranch(),projectPersist);
}
return map;
}
public boolean associate(ProjectPersist projectPersist, List<RuntimePersist> runtimePersists) {
projectPersist.setStatus(ProjectPersist.Deployable);
projectPersist.setContainerID(projectPersist.getDeploymentName() + "-" + projectPersist.getProjectName());
@ -148,7 +197,6 @@ public class ProjectPersistService {
reverseProxyUpdate.getServerNames().add(hostName);
}
projectRepository.save(projectPersist);
addProjectToSession(projectPersist, true);
kafkaTemplateProxyUpdate.send(KafkaTopicConstants.REVERSE_PROXY, reverseProxyUpdate);
return true;
}
@ -175,7 +223,6 @@ public class ProjectPersistService {
}
public void waitForJobToBeEnded(String url, String username, String password, ProjectPersist projectPersist, AddLog workOnGoingView, UI ui) {
UserConnected userConnected = userConnectedService.getUserConnected();
@ -195,7 +242,6 @@ public class ProjectPersistService {
jobService.executeWrite(url, username, password, workOnGoingView, result.getJobId(), ui);
for (String serverName : projectPersist.getServerNames()) {
@ -224,7 +270,6 @@ public class ProjectPersistService {
}
public ProjectRepository getProjectRepository() {
return projectRepository;
}

View file

@ -112,7 +112,6 @@ public class DefineProject extends VerticalLayout {
if (createMode) {
projectPersist.setStatus(ProjectPersist.DEFINI);
}
projectPersistService.addProjectToSession(projectPersist,true);
projectPersistService.getProjectRepository().save(projectPersist);
deploymentView.setDataProvider();
dialog.close();

View file

@ -3,9 +3,13 @@ package org.chtijbug.drools.console.vaadincomponent.leftMenu.Action;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.icon.VaadinIcon;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import org.chtijbug.drools.console.service.ProjectPersistService;
import org.chtijbug.drools.console.service.util.AppContext;
import org.chtijbug.drools.console.vaadincomponent.componentperso.ComboBoxPerso;
import org.chtijbug.drools.console.view.TemplateView;
import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectData;
import org.chtijbug.drools.proxy.persistence.model.ProjectPersist;
import java.util.Map;
public class TemplatesAction extends VerticalLayout {
@ -15,16 +19,20 @@ public class TemplatesAction extends VerticalLayout {
private Button edit;
private ComboBoxPerso<PlatformProjectData> spaceSelection;
private ComboBoxPerso<ProjectPersist> spaceSelection;
private ProjectPersistService projectPersistService;
public TemplatesAction(TemplateView templateView){
setClassName("leftMenu-global-action");
projectPersistService = AppContext.getApplicationContext().getBean(ProjectPersistService.class);
Map<String, ProjectPersist> map = projectPersistService.findProjectsConnectedUser();
spaceSelection = new ComboBoxPerso<>("Project",VaadinIcon.SEARCH.create());
spaceSelection.getComboBox().setItems(templateView.getUserConnectedService().getUserConnected().getProjectResponses());
spaceSelection.getComboBox().setItemLabelGenerator(PlatformProjectData::getName);
spaceSelection.getComboBox().setItems(map.values());
spaceSelection.getComboBox().setItemLabelGenerator(ProjectPersist::getKieProjectName);
spaceSelection.getComboBox().addValueChangeListener(valueChangeEvent -> {
templateView.setDataProvider(spaceSelection.getComboBox());
});

View file

@ -130,7 +130,7 @@ public class FormulaireComposant extends VerticalLayout {
if(connected!=null) {
connected.setConnected(true);
userConnectedService.addUserToSession(connected);
projectPersistService.saveIfnotExist(connected.getProjectResponses(),configKie.getName());
//projectPersistService.saveIfnotExist(connected.getProjectResponses(),configKie.getName());
return true;
}else {

View file

@ -213,7 +213,7 @@ public class DeploymentView extends VerticalLayout implements AddLog {
public void setDataProvider() {
Map<String, ProjectPersist> projectPersists = projectPersistService.getProjectsSession();
Map<String, ProjectPersist> projectPersists = projectPersistService.findProjectsConnectedUser();
if (projectPersists != null) {
ListDataProvider<ProjectPersist> dataProvider = new ListDataProvider<>(projectPersists.values());
filterDataProvider = dataProvider.withConfigurableFilter();

View file

@ -10,14 +10,17 @@ import com.vaadin.flow.data.provider.ListDataProvider;
import com.vaadin.flow.data.value.ValueChangeMode;
import com.vaadin.flow.function.SerializablePredicate;
import org.chtijbug.drools.console.service.KieRepositoryService;
import org.chtijbug.drools.console.service.ProjectPersistService;
import org.chtijbug.drools.console.service.UserConnectedService;
import org.chtijbug.drools.console.service.model.UserConnected;
import org.chtijbug.drools.console.service.model.kie.KieConfigurationData;
import org.chtijbug.drools.console.service.util.AppContext;
import org.chtijbug.drools.console.vaadincomponent.componentperso.DialogPerso;
import org.chtijbug.drools.console.vaadincomponent.leftMenu.Action.TemplatesAction;
import org.chtijbug.drools.proxy.persistence.model.ProjectPersist;
import org.chtijbug.drools.proxy.persistence.model.UserGroups;
import org.chtijbug.drools.proxy.persistence.repository.UserGroupsRepository;
import org.chtijbug.guvnor.server.jaxrs.jaxb.Asset;
import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectData;
import java.util.ArrayList;
import java.util.List;
@ -37,6 +40,10 @@ public class TemplateView extends VerticalLayout {
private UserConnectedService userConnectedService;
private UserGroupsRepository userGroupsRepository;
private ProjectPersistService projectPersistService;
private ListDataProvider<Asset> dataProvider;
private Grid<Asset> assetListGrid;
@ -56,7 +63,9 @@ public class TemplateView extends VerticalLayout {
this.kieRepositoryService = AppContext.getApplicationContext().getBean(KieRepositoryService.class);
this.userConnectedService = AppContext.getApplicationContext().getBean(UserConnectedService.class);
this.userGroupsRepository = AppContext.getApplicationContext().getBean(UserGroupsRepository.class);
this.userConnected = userConnectedService.getUserConnected();
this.projectPersistService = AppContext.getApplicationContext().getBean(ProjectPersistService.class);
this.config = AppContext.getApplicationContext().getBean(KieConfigurationData.class);
assetListGrid = new Grid();
@ -81,9 +90,16 @@ public class TemplateView extends VerticalLayout {
});
}
public void setDataProvider(ComboBox<PlatformProjectData> spaceSelection){
PlatformProjectData response = spaceSelection.getValue();
List<Asset> tmp = kieRepositoryService.getListAssets(config.getKiewbUrl(), userConnected.getUserName(), userConnected.getUserPassword(), response.getSpaceName(), response.getName());
public void setDataProvider(ComboBox<ProjectPersist> spaceSelection){
ProjectPersist response = spaceSelection.getValue();
if (response!= null) {
UserGroups projectGroups = userGroupsRepository.findUserGroupsByProjectPersist(response);
String workspaceName = projectGroups.getWorkspaceUserGroup().getSpaceName();
List<Asset> tmp = kieRepositoryService.getListAssets(config.getKiewbUrl(),
userConnected.getUserName(),
userConnected.getUserPassword(),
workspaceName,
projectGroups.getProjectName());
List<Asset> result = new ArrayList<>();
for (Asset asset : tmp) {
if (asset.getTitle().endsWith(".template")
@ -95,22 +111,31 @@ public class TemplateView extends VerticalLayout {
filterDataProvider = dataProvider.withConfigurableFilter();
assetListGrid.setDataProvider(filterDataProvider);
reinitFilter();
}else{
List<Asset> result = new ArrayList<>();
dataProvider = new ListDataProvider<>(result);
filterDataProvider = dataProvider.withConfigurableFilter();
assetListGrid.setDataProvider(filterDataProvider);
reinitFilter();
}
}
public void refreshList(ComboBox<PlatformProjectData> spaceSelection) {
spaceSelection.setItems(userConnected.getProjectResponses());
public void refreshList(ComboBox<ProjectPersist> spaceSelection) {
spaceSelection.setItems(projectPersistService.findProjectsConnectedUser().values());
}
public void edit(ComboBox<PlatformProjectData> spaceSelection){
public void edit(ComboBox<ProjectPersist> spaceSelection){
Set<Asset> selectedElements = assetListGrid.getSelectedItems();
if (selectedElements.toArray().length > 0) {
Optional<Asset> assetOptional = selectedElements.stream().findFirst();
if (assetOptional.isPresent()) {
String assetName = assetOptional.get().getTitle();
if (assetName != null) {
PlatformProjectData response = spaceSelection.getValue();
//latformProjectData response = spaceSelection.getValue();
userConnectedService.addAssetToSession(assetName);
userConnectedService.addProjectToSession(response.getName());
userConnectedService.addSpaceToSession(response.getSpaceName());
UserGroups projectGroups = userGroupsRepository.findUserGroupsByProjectPersist(spaceSelection.getValue());
String workspaceName=projectGroups.getWorkspaceUserGroup().getSpaceName();
userConnectedService.addProjectToSession(projectGroups.getProjectName());
userConnectedService.addSpaceToSession(workspaceName);
DialogPerso dialog = new DialogPerso();
dialog.add(new EditTemplateView(dialog, assetName));

View file

@ -16,7 +16,9 @@
package org.chtijbug.guvnor.uberfire.security;
import com.mongodb.BasicDBObject;
import com.mongodb.Block;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
@ -37,6 +39,8 @@ import org.uberfire.ext.security.management.util.SecurityManagementUtils;
import java.util.*;
import static com.mongodb.client.model.Filters.eq;
/**
* <p>Groups manager service provider implementation for Apache tomcat, when using default realm based on properties files.</p>
* @since 0.8.0
@ -85,14 +89,39 @@ public class KiePlatformGroupManager implements GroupManager, ContextualManager
@Override
public SearchResponse<Group> search(SearchRequest request) throws SecurityManagementException {
SearchResponse<Group> result = new SearchResponseImpl<>();
return result;
MongoCollection<Document> userCollection = database.getCollection("userGroups");
BasicDBObject regexQuery = new BasicDBObject();
regexQuery.put("name", new BasicDBObject("$regex", request.getSearchPattern() + ".*").append("$options", "i"));
List<Group> groups = new ArrayList<>();
long totalNumber = userCollection.countDocuments(regexQuery);
FindIterable<Document> documents = userCollection.find(regexQuery).skip(request.getPageSize() * (request.getPage() - 1)).limit(request.getPageSize());
documents.forEach((Block<? super Document>) document -> {
String groupName = document.getString("name");
Group group = new GroupImpl(groupName);
groups.add(group);
});
boolean hasNextPage = true;
if ((request.getPageSize() * (request.getPage()) > totalNumber)) {
hasNextPage = false;
}
SearchResponse<Group> response = new SearchResponseImpl(groups, request.getPage(), request.getPageSize(), Long.valueOf(totalNumber).intValue(), hasNextPage);
return response;
}
@Override
public Group get(String identifier) throws SecurityManagementException {
Group group = new GroupImpl(identifier);
return group;
MongoCollection<Document> userCollection = database.getCollection("userGroups");
List<Group> groups = new ArrayList<>();
userCollection.find(eq("name", identifier)).forEach((Block<? super Document>) document -> {
String groupName = document.getString("name");
Group group = new GroupImpl(groupName);
groups.add(group);
});
if (groups.size() == 1) {
return groups.get(0);
} else {
return null;
}
}
@Override

View file

@ -42,7 +42,7 @@ public class KiePlatformSecurityService implements UserManagementService {
//-DconnectionString=localhost:28017 -Ddatabase=businessProxyDB
this.connectionString = System.getProperty("connectionString");
this.databaseName=System.getProperty("database");
this.databaseName=System.getProperty("name");
System.out.println("KiePlatformSecurityService initialized with databaseName = " + connectionString );
this.mongoClient = MongoClients.create(connectionString);
this.pojoCodecRegistry = fromRegistries(MongoClientSettings.getDefaultCodecRegistry(),

View file

@ -34,6 +34,12 @@
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.uberfire</groupId>
<artifactId>uberfire-rest-backend</artifactId>
<version>${jbpm.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.kie</groupId>

View file

@ -11,6 +11,7 @@ import org.guvnor.common.services.project.model.GAV;
import org.guvnor.common.services.project.model.POM;
import org.guvnor.common.services.project.model.WorkspaceProject;
import org.guvnor.common.services.project.service.WorkspaceProjectService;
import org.guvnor.rest.backend.UserManagementResourceHelper;
import org.guvnor.structure.organizationalunit.OrganizationalUnit;
import org.guvnor.structure.organizationalunit.OrganizationalUnitService;
import org.guvnor.structure.repositories.Branch;
@ -18,10 +19,12 @@ import org.guvnor.structure.repositories.Repository;
import org.guvnor.structure.repositories.RepositoryService;
import org.kie.workbench.common.screens.datamodeller.service.DataModelerService;
import org.slf4j.LoggerFactory;
import org.uberfire.backend.authz.AuthorizationService;
import org.uberfire.io.IOService;
import org.uberfire.java.nio.base.options.CommentedOption;
import org.uberfire.java.nio.file.DirectoryStream;
import org.uberfire.java.nio.file.Paths;
import org.uberfire.security.authz.PermissionManager;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
@ -63,7 +66,13 @@ public class PackageResource {
private WorkspaceProjectService workspaceProjectService;
@Inject
private AssetService assetService;
@Inject
private PermissionManager permissionManager;
@Inject
private AuthorizationService authorizationService;
@Inject
private UserManagementResourceHelper userManagementResourceHelper;
public PackageResource() {
System.out.println("coucou");
@ -76,6 +85,22 @@ public class PackageResource {
UserLoginInformation userLoginInformation = new UserLoginInformation();
userLoginInformation.setUsername(sc.getUserPrincipal().getName());
for (String role : PermissionConstants.tableauChaine) {
if (sc.isUserInRole(role) == true) {
userLoginInformation.getRoles().add(role);
}
}
return userLoginInformation;
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/content")
public UserLoginInformation getUserContent() {
UserLoginInformation userLoginInformation = new UserLoginInformation();
userLoginInformation.setUsername(sc.getUserPrincipal().getName());
for (String role : PermissionConstants.tableauChaine) {
if (sc.isUserInRole(role) == true) {
@ -86,7 +111,6 @@ public class PackageResource {
return userLoginInformation;
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/detailedSpaces")
@ -123,6 +147,8 @@ public class PackageResource {
return null;
}
@GET
@Path("{organizationalUnitName}/{projectName}/assets")
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})

View file

@ -86,6 +86,9 @@ public class AssetService {
return repoNames;
}
public void todo(){
// workspaceProjectService.
}

View file

@ -34,6 +34,7 @@ public class ProjectPersist implements Serializable {
@DBRef
private KieWorkbench kieWorkbench;
private KieProject projectName;
private String mainClass;
@ -179,6 +180,18 @@ public class ProjectPersist implements Serializable {
this.serverNames = serverNames;
}
public String getWorkspaceName(){
if (this.projectName!= null){
return projectName.getSpaceName();
}
return null;
}
public String getKieProjectName(){
if (this.projectName!= null){
return projectName.getName()+"-"+this.branch;
}
return null;
}
public ProjectPersist duplicate(){
ArrayList<String> listServerNames = new ArrayList<String>();
listServerNames.addAll(serverNames);

View file

@ -2,6 +2,7 @@ package org.chtijbug.drools.proxy.persistence.model;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.Document;
@Document
@ -16,7 +17,14 @@ public class UserGroups {
@Indexed
private String projectName;
@DBRef
private KieWorkbench kieWorkbench;
@DBRef
private ProjectPersist projectPersist;
@DBRef
private UserGroups workspaceUserGroup;
public UserGroups() {
}
@ -58,4 +66,28 @@ public class UserGroups {
this.projectName = projectName;
}
public KieWorkbench getKieWorkbench() {
return kieWorkbench;
}
public void setKieWorkbench(KieWorkbench kieWorkbench) {
this.kieWorkbench = kieWorkbench;
}
public ProjectPersist getProjectPersist() {
return projectPersist;
}
public void setProjectPersist(ProjectPersist projectPersist) {
this.projectPersist = projectPersist;
}
public UserGroups getWorkspaceUserGroup() {
return workspaceUserGroup;
}
public void setWorkspaceUserGroup(UserGroups workspaceUserGroup) {
this.workspaceUserGroup = workspaceUserGroup;
}
}

View file

@ -1,5 +1,6 @@
package org.chtijbug.drools.proxy.persistence.repository;
import org.chtijbug.drools.proxy.persistence.model.ProjectPersist;
import org.chtijbug.drools.proxy.persistence.model.UserGroups;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
@ -9,4 +10,6 @@ public interface UserGroupsRepository extends MongoRepository<UserGroups, String
UserGroups findByName(String login);
UserGroups findByID(String login);
UserGroups findUserGroupsByProjectPersist(ProjectPersist projectPersist);
}