Enable/disable kie logging #271

Allow to define a JMT token to give access to a project over reverse proxy #274
Hot deploy management #269 => UI for defiinition
This commit is contained in:
nheron 2021-07-24 22:11:11 +02:00
commit 488870e587
32 changed files with 664 additions and 167 deletions

View file

@ -64,95 +64,98 @@ public class StoreLoggingService {
item.setServerName(sessionContext.getServerName());
Map<Long, BusinessTransactionAction> actions = new HashMap<>();
SessionExecution sessionExecution = sessionContext.getSessionExecution();
BusinessTransactionAction businessTransactionoutput = null;
for (Fact fact : sessionExecution.getFacts()) {
BusinessTransactionAction businessTransactionAction = new BusinessTransactionAction();
businessTransactionAction.setId(UUID.randomUUID().toString());
businessTransactionAction.setBusinessTransactionId(item.getId());
if (fact.getFactType().equals(FactType.INPUTDATA)) {
businessTransactionAction.setEventType(EventType.INPUT);
businessTransactionAction.setInputData(fact);
businessTransactionAction.setEventNumber(0);
actions.put(businessTransactionAction.getEventNumber(), businessTransactionAction);
} else if (fact.getFactType().equals(FactType.OUTPUTDATA)) {
businessTransactionAction.setEventType(EventType.OUPUT);
businessTransactionAction.setOutputData(fact);
businessTransactionoutput = businessTransactionAction;
if (sessionExecution != null) {
BusinessTransactionAction businessTransactionoutput = null;
for (Fact fact : sessionExecution.getFacts()) {
BusinessTransactionAction businessTransactionAction = new BusinessTransactionAction();
businessTransactionAction.setId(UUID.randomUUID().toString());
businessTransactionAction.setBusinessTransactionId(item.getId());
if (fact.getFactType().equals(FactType.INPUTDATA)) {
businessTransactionAction.setEventType(EventType.INPUT);
businessTransactionAction.setInputData(fact);
businessTransactionAction.setEventNumber(0);
actions.put(businessTransactionAction.getEventNumber(), businessTransactionAction);
} else if (fact.getFactType().equals(FactType.OUTPUTDATA)) {
businessTransactionAction.setEventType(EventType.OUPUT);
businessTransactionAction.setOutputData(fact);
businessTransactionoutput = businessTransactionAction;
} else if (fact.getFactType().equals(FactType.INSERTED)) {
businessTransactionAction.setEventType(EventType.INSERTFACT);
businessTransactionAction.setFact(fact);
businessTransactionAction.setEventNumber(ii++);
actions.put(businessTransactionAction.getEventNumber(), businessTransactionAction);
} else if (fact.getFactType().equals(FactType.UPDATED_NEWVALUE)) {
businessTransactionAction.setEventType(EventType.UPDATEFACTNEWVALUE);
businessTransactionAction.setFact(fact);
businessTransactionAction.setEventNumber(ii++);
actions.put(businessTransactionAction.getEventNumber(), businessTransactionAction);
} else if (fact.getFactType().equals(FactType.UPDATED_OLDVALUE)) {
businessTransactionAction.setEventType(EventType.UPDATEFACTOLDVALUE);
businessTransactionAction.setFact(fact);
businessTransactionAction.setEventNumber(ii++);
actions.put(businessTransactionAction.getEventNumber(), businessTransactionAction);
} else if (fact.getFactType().equals(FactType.DELETED)) {
businessTransactionAction.setEventType(EventType.RETRACTFACT);
businessTransactionAction.setFact(fact);
businessTransactionAction.setEventNumber(ii++);
actions.put(businessTransactionAction.getEventNumber(), businessTransactionAction);
}
}
for (ProcessExecution processExecution : sessionExecution.getProcessExecutions()) {
BusinessTransactionAction businessTransactionActionStart = new BusinessTransactionAction();
businessTransactionActionStart.setEventType(EventType.STARTPROCESS);
businessTransactionActionStart.setProcessID(processExecution.getProcessId());
businessTransactionActionStart.setBusinessTransactionId(item.getId());
businessTransactionActionStart.setEventNumber(ii++);
businessTransactionActionStart.setId(UUID.randomUUID().toString());
actions.put(businessTransactionActionStart.getEventNumber(), businessTransactionActionStart);
for (RuleflowGroup rfg : processExecution.getRuleflowGroups()) {
BusinessTransactionAction businessTransactionActionStartRFG = new BusinessTransactionAction();
businessTransactionActionStartRFG.setBusinessTransactionId(item.getId());
businessTransactionActionStartRFG.setEventType(EventType.STARTRULEFLOWGROUP);
businessTransactionActionStartRFG.setRuleflowGroupName(rfg.getRuleflowGroup());
businessTransactionActionStartRFG.setEventNumber(ii++);
businessTransactionActionStartRFG.setId(UUID.randomUUID().toString());
actions.put(businessTransactionActionStartRFG.getEventNumber(), businessTransactionActionStartRFG);
for (RuleExecution ruleExecution : rfg.getRuleExecutionList()) {
BusinessTransactionAction businessTransactionActionRule = new BusinessTransactionAction();
businessTransactionActionRule.setEventType(EventType.RULE);
businessTransactionActionRule.setRuleflowGroupName(rfg.getRuleflowGroup());
businessTransactionActionRule.setRuleExecution(ruleExecution);
businessTransactionActionRule.setBusinessTransactionId(item.getId());
businessTransactionActionRule.setProcessID(processExecution.getProcessId());
businessTransactionActionRule.setEventNumber(ii++);
businessTransactionActionRule.setId(UUID.randomUUID().toString());
actions.put(businessTransactionActionRule.getEventNumber(), businessTransactionActionRule);
} else if (fact.getFactType().equals(FactType.INSERTED)) {
businessTransactionAction.setEventType(EventType.INSERTFACT);
businessTransactionAction.setFact(fact);
businessTransactionAction.setEventNumber(ii++);
actions.put(businessTransactionAction.getEventNumber(), businessTransactionAction);
} else if (fact.getFactType().equals(FactType.UPDATED_NEWVALUE)) {
businessTransactionAction.setEventType(EventType.UPDATEFACTNEWVALUE);
businessTransactionAction.setFact(fact);
businessTransactionAction.setEventNumber(ii++);
actions.put(businessTransactionAction.getEventNumber(), businessTransactionAction);
} else if (fact.getFactType().equals(FactType.UPDATED_OLDVALUE)) {
businessTransactionAction.setEventType(EventType.UPDATEFACTOLDVALUE);
businessTransactionAction.setFact(fact);
businessTransactionAction.setEventNumber(ii++);
actions.put(businessTransactionAction.getEventNumber(), businessTransactionAction);
} else if (fact.getFactType().equals(FactType.DELETED)) {
businessTransactionAction.setEventType(EventType.RETRACTFACT);
businessTransactionAction.setFact(fact);
businessTransactionAction.setEventNumber(ii++);
actions.put(businessTransactionAction.getEventNumber(), businessTransactionAction);
}
BusinessTransactionAction businessTransactionActionSTOPRFG = new BusinessTransactionAction();
businessTransactionActionSTOPRFG.setEventType(EventType.STOPTRULEFLOWGROUP);
businessTransactionActionSTOPRFG.setRuleflowGroupName(rfg.getRuleflowGroup());
businessTransactionActionSTOPRFG.setBusinessTransactionId(item.getId());
businessTransactionActionSTOPRFG.setEventNumber(ii++);
businessTransactionActionSTOPRFG.setId(UUID.randomUUID().toString());
actions.put(businessTransactionActionSTOPRFG.getEventNumber(), businessTransactionActionSTOPRFG);
}
BusinessTransactionAction businessTransactionActionEnd = new BusinessTransactionAction();
businessTransactionActionEnd.setEventType(EventType.STOPPROCESS);
businessTransactionActionEnd.setProcessID(processExecution.getProcessId());
businessTransactionActionEnd.setBusinessTransactionId(item.getId());
businessTransactionActionEnd.setEventNumber(ii++);
businessTransactionActionEnd.setId(UUID.randomUUID().toString());
for (ProcessExecution processExecution : sessionExecution.getProcessExecutions()) {
BusinessTransactionAction businessTransactionActionStart = new BusinessTransactionAction();
actions.put(businessTransactionActionEnd.getEventNumber(), businessTransactionActionEnd);
}
if (businessTransactionoutput != null) {
businessTransactionoutput.setEventNumber(ii++);
actions.put(businessTransactionoutput.getEventNumber(), businessTransactionoutput);
businessTransactionActionStart.setEventType(EventType.STARTPROCESS);
businessTransactionActionStart.setProcessID(processExecution.getProcessId());
businessTransactionActionStart.setBusinessTransactionId(item.getId());
businessTransactionActionStart.setEventNumber(ii++);
businessTransactionActionStart.setId(UUID.randomUUID().toString());
actions.put(businessTransactionActionStart.getEventNumber(), businessTransactionActionStart);
for (RuleflowGroup rfg : processExecution.getRuleflowGroups()) {
BusinessTransactionAction businessTransactionActionStartRFG = new BusinessTransactionAction();
businessTransactionActionStartRFG.setBusinessTransactionId(item.getId());
businessTransactionActionStartRFG.setEventType(EventType.STARTRULEFLOWGROUP);
businessTransactionActionStartRFG.setRuleflowGroupName(rfg.getRuleflowGroup());
businessTransactionActionStartRFG.setEventNumber(ii++);
businessTransactionActionStartRFG.setId(UUID.randomUUID().toString());
actions.put(businessTransactionActionStartRFG.getEventNumber(), businessTransactionActionStartRFG);
for (RuleExecution ruleExecution : rfg.getRuleExecutionList()) {
BusinessTransactionAction businessTransactionActionRule = new BusinessTransactionAction();
businessTransactionActionRule.setEventType(EventType.RULE);
businessTransactionActionRule.setRuleflowGroupName(rfg.getRuleflowGroup());
businessTransactionActionRule.setRuleExecution(ruleExecution);
businessTransactionActionRule.setBusinessTransactionId(item.getId());
businessTransactionActionRule.setProcessID(processExecution.getProcessId());
businessTransactionActionRule.setEventNumber(ii++);
businessTransactionActionRule.setId(UUID.randomUUID().toString());
actions.put(businessTransactionActionRule.getEventNumber(), businessTransactionActionRule);
}
BusinessTransactionAction businessTransactionActionSTOPRFG = new BusinessTransactionAction();
businessTransactionActionSTOPRFG.setEventType(EventType.STOPTRULEFLOWGROUP);
businessTransactionActionSTOPRFG.setRuleflowGroupName(rfg.getRuleflowGroup());
businessTransactionActionSTOPRFG.setBusinessTransactionId(item.getId());
businessTransactionActionSTOPRFG.setEventNumber(ii++);
businessTransactionActionSTOPRFG.setId(UUID.randomUUID().toString());
actions.put(businessTransactionActionSTOPRFG.getEventNumber(), businessTransactionActionSTOPRFG);
}
BusinessTransactionAction businessTransactionActionEnd = new BusinessTransactionAction();
businessTransactionActionEnd.setEventType(EventType.STOPPROCESS);
businessTransactionActionEnd.setProcessID(processExecution.getProcessId());
businessTransactionActionEnd.setBusinessTransactionId(item.getId());
businessTransactionActionEnd.setEventNumber(ii++);
businessTransactionActionEnd.setId(UUID.randomUUID().toString());
actions.put(businessTransactionActionEnd.getEventNumber(), businessTransactionActionEnd);
}
if (businessTransactionoutput != null) {
businessTransactionoutput.setEventNumber(ii++);
actions.put(businessTransactionoutput.getEventNumber(), businessTransactionoutput);
}
}
List<Long> keys = new ArrayList<>(actions.keySet());
Collections.sort(keys);

View file

@ -13,12 +13,14 @@ public class DroolsRouter extends RouteBuilder {
private String projectName;
private Class<?> clazzUser;
private String processID;
private boolean disableRuleLogging;
public DroolsRouter(CamelContext camelContext, Class<?> clazzUser, String projectName, String processID) {
public DroolsRouter(CamelContext camelContext, Class<?> clazzUser, String projectName, String processID, boolean disableRuleLogging) {
super(camelContext);
this.clazzUser = clazzUser;
this.projectName = projectName;
this.processID = processID;
this.disableRuleLogging = disableRuleLogging;
}
@Override
@ -33,6 +35,6 @@ public class DroolsRouter extends RouteBuilder {
.param().name("body").type(body).description("The Data drools should work on").endParam()
.responseMessage().code(200).message("Data drools worked on").endResponseMessage()
.to("bean:ruleService?method=runSessionObject(${header.transactionId}," + this.projectName + "," + this.processID + ",${body})");
.to("bean:ruleService?method=runSessionObject(${header.transactionId}," + this.projectName + "," + this.processID + ",${body},"+disableRuleLogging+")");
}
}

View file

@ -25,6 +25,7 @@ import org.chtijbug.drools.proxy.persistence.model.ContainerRuntimePojoPersist;
import org.chtijbug.drools.proxy.persistence.model.RuntimePersist;
import org.chtijbug.drools.proxy.persistence.repository.ContainerRepository;
import org.chtijbug.drools.proxy.persistence.repository.ContainerRuntimeRepository;
import org.chtijbug.drools.proxy.persistence.repository.ProjectRepository;
import org.chtijbug.drools.proxy.persistence.repository.RuntimeRepository;
import org.chtijbug.kieserver.services.drools.DroolsChtijbugKieServerExtension;
import org.chtijbug.kieserver.services.drools.DroolsChtijbugRulesExecutionService;
@ -72,6 +73,8 @@ public class KieServiceCommon {
private RuntimeRepository runtimeRepository;
@Inject
private ContainerRuntimeRepository containerRuntimeRepository;
@Inject
private ProjectRepository projectRepository;
@Value("${server.port}")
private int serverPort;
@ -185,6 +188,7 @@ public class KieServiceCommon {
containerRuntimePojoPersist.setServerName(serverName);
containerRuntimePojoPersist.setHostname(hostName);
containerRuntimePojoPersist.setStatus(ContainerRuntimePojoPersist.STATUS.UP.name());
containerRuntimePojoPersist.setProjectUUID(container.getProjectUUID());
containerRuntimeRepository.save(containerRuntimePojoPersist);
this.createContainer(kieContainerResource.getContainerId(), kieContainerResource);
this.initCamelBusinessRoute(container);
@ -260,7 +264,7 @@ public class KieServiceCommon {
String projectName = container.getContainerId();
String processId = container.getProcessID();
this.deleteCamelBusinessRoute(projectName);
DroolsRouter droolsRouter = new DroolsRouter(camelContext, theClass, projectName, processId);
DroolsRouter droolsRouter = new DroolsRouter(camelContext, theClass, projectName, processId,container.isDisableRuleLogging());
camelContext.addRoutes(droolsRouter);
routes.put(containerId, droolsRouter);
}

View file

@ -27,12 +27,13 @@ public class RuleService {
logger.info("Rule Service created");
}
public Object runSessionObject(String transactionID, String id, String processID, Object input) {
public Object runSessionObject(String transactionID, String id, String processID, Object input, boolean disableRuleLogging) {
ChtijbugObjectRequest chtijbugObjectRequest = new ChtijbugObjectRequest();
chtijbugObjectRequest.setTransactionID(transactionID);
chtijbugObjectRequest.setProcessID(processID);
chtijbugObjectRequest.setContainerID(id);
chtijbugObjectRequest.setDisableLogging(disableRuleLogging);
chtijbugObjectRequest.setTransactionStartTimeStamp(LocalDateTime.now());
KieContainerInstance kci = kieServiceCommon.getRegistry().getContainer(id);
chtijbugObjectRequest.setArtifactID(kci.getKieContainer().getReleaseId().getArtifactId());

View file

@ -4,15 +4,19 @@ import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.security.PrivateKey;
@Document
public class ContainerPojoPersist {
@Id
private String id;
private boolean disableRuleLogging;
@Indexed
private String className;
@Indexed
private String containerId;
@Indexed
@ -22,14 +26,13 @@ public class ContainerPojoPersist {
private String projectName;
private String groupId;
private String artifactId;
private String version;
private String projectUUID;
public String getId() {
return id;
@ -79,7 +82,21 @@ public class ContainerPojoPersist {
this.processID = processID;
}
public String getProjectUUID() {
return projectUUID;
}
public void setProjectUUID(String projectUUID) {
this.projectUUID = projectUUID;
}
public boolean isDisableRuleLogging() {
return disableRuleLogging;
}
public void setDisableRuleLogging(boolean disableRuleLogging) {
this.disableRuleLogging = disableRuleLogging;
}
public String getGroupId() {
return groupId;

View file

@ -24,6 +24,9 @@ public class ContainerRuntimePojoPersist {
private String status;
private String projectUUID;
private boolean disableRuleLogging;
public String getId() {
return id;
@ -33,6 +36,21 @@ public class ContainerRuntimePojoPersist {
this.id = id;
}
public String getProjectUUID() {
return projectUUID;
}
public void setProjectUUID(String projectUUID) {
this.projectUUID = projectUUID;
}
public boolean isDisableRuleLogging() {
return disableRuleLogging;
}
public void setDisableRuleLogging(boolean disableRuleLogging) {
this.disableRuleLogging = disableRuleLogging;
}
public String getContainerId() {
return containerId;

View file

@ -16,13 +16,13 @@ import java.util.List;
@CompoundIndexes({
@CompoundIndex(def = "{'projectName':1, 'branch':1}", name = "projectName_branch_Index")
})
public class ProjectPersist implements Serializable {
public class ProjectPersist implements Serializable {
public static final String ADEFINIR="A définir";
public static final String ADEFINIR = "A définir";
public static final String DEFINI="Défini";
public static final String DEFINI = "Défini";
public static final String Deployable="Déployable";
public static final String Deployable = "Déployable";
@Indexed
private String deploymentName;
@ -51,13 +51,22 @@ public class ProjectPersist implements Serializable {
private String branch;
private List<String> serverNames= new ArrayList<>();
private List<String> serverNames = new ArrayList<>();
private String status;
private List<String> classNameList;
public ProjectPersist(){}
private boolean disableRuleLogging;
private boolean enableHotDeploy;
private boolean useJWTToConnect;
private String jwtAPIToken;
public ProjectPersist() {
}
public ProjectPersist(String deploymentName, KieProject projectName, String mainClass, String groupID, String artifactID, String processID, String projectVersion, String containerID, List<String> serverNames, String status) {
this.deploymentName = deploymentName;
@ -72,6 +81,10 @@ public class ProjectPersist implements Serializable {
this.status = status;
}
public String getUuid() {
return uuid;
}
public String getDeploymentName() {
return deploymentName;
}
@ -180,22 +193,60 @@ public class ProjectPersist implements Serializable {
this.serverNames = serverNames;
}
public String getWorkspaceName(){
if (this.projectName!= null){
public String getWorkspaceName() {
if (this.projectName != null) {
return projectName.getSpaceName();
}
return null;
}
public String getKieProjectName(){
if (this.projectName!= null){
return projectName.getName()+"-"+this.branch;
public boolean isUseJWTToConnect() {
return useJWTToConnect;
}
public void setUseJWTToConnect(boolean useJWTToConnect) {
this.useJWTToConnect = useJWTToConnect;
}
public String getKieProjectName() {
if (this.projectName != null) {
return projectName.getName() + "-" + this.branch;
}
return null;
}
public ProjectPersist duplicate(){
public boolean isDisableRuleLogging() {
return disableRuleLogging;
}
public void setDisableRuleLogging(boolean disableRuleLogging) {
this.disableRuleLogging = disableRuleLogging;
}
public boolean isEnableHotDeploy() {
return enableHotDeploy;
}
public void setEnableHotDeploy(boolean enableHotDeploy) {
this.enableHotDeploy = enableHotDeploy;
}
public String getJwtAPIToken() {
return jwtAPIToken;
}
public void setJwtAPIToken(String jwtAPIToken) {
this.jwtAPIToken = jwtAPIToken;
}
public ProjectPersist duplicate() {
ArrayList<String> listServerNames = new ArrayList<String>();
listServerNames.addAll(serverNames);
ProjectPersist duplicate = new ProjectPersist(deploymentName,projectName,mainClass,groupID,artifactID,processID,projectVersion,containerID,listServerNames,status);
ProjectPersist duplicate = new ProjectPersist(deploymentName, projectName, mainClass, groupID, artifactID, processID, projectVersion, containerID, listServerNames, status);
duplicate.setEnableHotDeploy(enableHotDeploy);
duplicate.setJwtAPIToken(jwtAPIToken);
duplicate.setDisableRuleLogging(disableRuleLogging);
duplicate.setUseJWTToConnect(useJWTToConnect);
return duplicate;
}
}

View file

@ -16,6 +16,7 @@ public interface ContainerRepository extends MongoRepository<ContainerPojoPersis
List<ContainerPojoPersist> findByServerName(String serverName);
List<ContainerPojoPersist> findByProjectUUID(String projectUUID);
}

View file

@ -14,6 +14,9 @@ public interface ContainerRuntimeRepository extends MongoRepository<ContainerRun
List<ContainerRuntimePojoPersist> findByServerNameAndStatus(String serverName, String status);
List<ContainerRuntimePojoPersist> findByServerNameAndStatusAndHostname(String serverName, String status,String hostname);
List<ContainerRuntimePojoPersist> findByServerNameAndHostname(String serverName, String hostname);
List<ContainerRuntimePojoPersist> findByProjectUUID(String projectUUID);
List<ContainerRuntimePojoPersist> findByContainerId(String continuerID);
ContainerRuntimePojoPersist findByServerNameAndContainerIdAndHostname(String serverName, String containerId,String hostname);

View file

@ -14,6 +14,7 @@ public interface ProjectRepository extends MongoRepository<ProjectPersist, Strin
public List<ProjectPersist> findByProjectName(KieProject projectName);
public ProjectPersist findByProjectNameAndBranch(KieProject projectName,String branch);
public ProjectPersist findByDeploymentName(String deploymentName);
public ProjectPersist findByUuid(String UUID);
public List<ProjectPersist> findByServerNamesIn(List<String> serverNames);
public List<ProjectPersist> findByServerNamesInAndDeploymentName(List<String> serverNames,String deploymentName);
public List<ProjectPersist> findByKieWorkbench(KieWorkbench kieWorkbench);

View file

@ -72,6 +72,17 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.0</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
</dependencies>
<!-- Spring-Boot and Camel BOM -->
<dependencyManagement>

View file

@ -5,12 +5,16 @@ import com.github.mkopylec.charon.configuration.MappingProperties;
import com.github.mkopylec.charon.core.http.HttpClientProvider;
import com.github.mkopylec.charon.core.mappings.MappingsCorrector;
import com.github.mkopylec.charon.core.mappings.MappingsProvider;
import io.jsonwebtoken.Claims;
import org.chtijbug.drools.common.rest.Constants;
import org.chtijbug.drools.reverseproxy.service.JwtService;
import org.chtijbug.drools.reverseproxy.service.UpdateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.web.ServerProperties;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -18,23 +22,40 @@ import java.util.Map;
@Component
public class CustomMappingsProvider extends MappingsProvider {
@Autowired
private UpdateService updateService;
@Autowired
private JwtService jwtService;
private Map<String,MappingProperties> mappingPropertiesMap = new HashMap<>();
private Map<String, MappingProperties> mappingJWTPropertiesMap = new HashMap<>();
public CustomMappingsProvider(ServerProperties server, CharonProperties charon, MappingsCorrector mappingsCorrector, HttpClientProvider httpClientProvider) {
super(server, charon, mappingsCorrector,httpClientProvider);
}
@Override
public MappingProperties resolveMapping(String originUri, HttpServletRequest request) {
MappingProperties result = mappingPropertiesMap.get(UpdateService.removeSlach(originUri));
if (result!= null){
return result;
String token = request.getHeader(Constants.AUTHORISATION_HEADER);
if (token!= null && token.length()>0){
Claims claims = jwtService.decodeJWT(token);
String uuid = (String)claims.get("uuid");
MappingProperties result = mappingJWTPropertiesMap.get(uuid);
if (result != null) {
return result;
} else {
return super.resolveMapping(originUri, request);
}
}else {
return super.resolveMapping(originUri, request);
MappingProperties result = mappingPropertiesMap.get(UpdateService.removeSlach(originUri));
if (result != null) {
return result;
} else {
return super.resolveMapping(originUri, request);
}
}
}
@ -45,10 +66,17 @@ public class CustomMappingsProvider extends MappingsProvider {
@Override
protected List<MappingProperties> retrieveMappings() {
return updateService.retrievePath();
List<MappingProperties> paths= new ArrayList<>();
paths.addAll(mappingPropertiesMap.values());
paths.addAll(mappingJWTPropertiesMap.values());
return paths;
}
public void setMappingPropertiesMap(Map<String, MappingProperties> mappingPropertiesMap) {
this.mappingPropertiesMap = mappingPropertiesMap;
}
public void setMappingJWTPropertiesMap(Map<String, MappingProperties> mappingJWTPropertiesMap) {
this.mappingJWTPropertiesMap = mappingJWTPropertiesMap;
}
}

View file

@ -0,0 +1,28 @@
package org.chtijbug.drools.reverseproxy.service;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.chtijbug.drools.proxy.persistence.model.ProjectPersist;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
import java.security.Key;
import java.util.Date;
@Service
public class JwtService {
@Value("${secretkey}")
public String secretKey;
public Claims decodeJWT(String jwt) {
return Jwts.parser()
.setSigningKey(DatatypeConverter.parseBase64Binary(secretKey))
.parseClaimsJws(jwt.replace("bearer","")).getBody();
}
}

View file

@ -31,10 +31,10 @@ public class UpdateService {
private Boolean toUpdate = true;
private List<MappingProperties> mappings = new ArrayList<>();
private Map<String, MappingProperties> mappingPropertiesMap = new HashMap<>();
private Map<String, MappingProperties> mappingJWTPropertiesMap = new HashMap<>();
@Autowired
private CustomMappingsProvider customMappingsProvider;
@ -48,42 +48,54 @@ public class UpdateService {
containerFactory = "mappingKafkaListenerContainerFactory")
public void store(ReverseProxyUpdate update) {
boolean found = false;
for (MappingProperties mappingProperties : mappingPropertiesMap.values()) {
if (UpdateService.removeSlach(mappingProperties.getPath()).equals(UpdateService.removeSlach(update.getPath()))) {
MappingProperties mappingProperties = null;
if (update.getTokenUUID() != null && update.getTokenUUID().length() > 0) {
mappingProperties = mappingJWTPropertiesMap.get(update.getTokenUUID());
if (mappingProperties != null) {
found = true;
}
} else {
mappingProperties = mappingPropertiesMap.get(UpdateService.removeSlach(update.getPath()));
if (mappingProperties != null) {
found = true;
mappingProperties.getDestinations().clear();
logger.info("Updating path {}",update.getPath());
for (String destination : update.getServerNames()) {
mappingProperties.getDestinations().add(destination);
logger.info("for path {} adding server {} ",update.getPath(),destination);
}
break;
}
}
if (!found) {
if (found) {
mappingProperties.getDestinations().clear();
logger.info("Updating path {}", update.getPath());
for (String destination : update.getServerNames()) {
mappingProperties.getDestinations().add(destination);
logger.info("for path {} adding server {} ", update.getPath(), destination);
}
} else {
MappingProperties newMappingProperties = new MappingProperties();
newMappingProperties.setPath(UpdateService.removeSlach(update.getPath()));
logger.info("Creating path {}",update.getPath());
if (update.getTokenUUID() != null && update.getTokenUUID().length() > 0) {
mappingJWTPropertiesMap.put(update.getTokenUUID(), newMappingProperties);
} else {
newMappingProperties.setPath(UpdateService.removeSlach(update.getPath()));
logger.info("Creating path {}", update.getPath());
mappingPropertiesMap.put(UpdateService.removeSlach(update.getPath()), newMappingProperties);
}
newMappingProperties.setName(update.getContainerID());
newMappingProperties.getCustomConfiguration().put("connect", 2000);
newMappingProperties.getCustomConfiguration().put("read", 2000);
newMappingProperties.setStripPath(true);
for (String destination : update.getServerNames()) {
newMappingProperties.getDestinations().add(destination);
logger.info("for path {} adding server {} ",update.getPath(),destination);
logger.info("for path {} adding server {} ", update.getPath(), destination);
}
mappingPropertiesMap.put(UpdateService.removeSlach(update.getPath()), newMappingProperties);
}
mappings.clear();
mappings.addAll(mappingPropertiesMap.values());
this.toUpdate = true;
}
public List<MappingProperties> retrievePath() {
this.toUpdate = false;
return mappings;
}
public static String removeSlach(String target){
if (target!= null) {
return target.replace("/", "").replace(" ","");
public static String removeSlach(String target) {
if (target != null) {
return target.replace("/", "").replace(" ", "");
}
return null;
}
@ -125,14 +137,24 @@ public class UpdateService {
mappingProperties2.getCustomConfiguration().put("read", 2000);
mappingProperties2.setStripPath(true);
if (mappingProperties2.getDestinations().size() > 0) {
mappingPropertiesMap.put(UpdateService.removeSlach(mappingProperties2.getPath()), mappingProperties2);
paths.add(mappingProperties2);
logger.info("Startup creating path {}",mappingProperties2.getPath());
for (String serverName : mappingProperties2.getDestinations()){
logger.info("---------for path {} adding server {} ",mappingProperties2.getPath(),serverName);
}
logger.info("---------Project " + projectPersist.getContainerID() + " defined on servers - " + mappingProperties2.getDestinations().toString());
if (projectPersist.isUseJWTToConnect()) {
mappingJWTPropertiesMap.put(projectPersist.getUuid(), mappingProperties2);
paths.add(mappingProperties2);
logger.info("Startup creating path / and for token uuid {}", projectPersist.getUuid());
for (String serverName : mappingProperties2.getDestinations()) {
logger.info("---------for uuid {} adding server {} ", projectPersist.getUuid(), serverName);
}
logger.info("---------Project " + projectPersist.getContainerID() + " defined on servers - " + mappingProperties2.getDestinations().toString());
} else {
mappingPropertiesMap.put(UpdateService.removeSlach(mappingProperties2.getPath()), mappingProperties2);
paths.add(mappingProperties2);
logger.info("Startup creating path {}", mappingProperties2.getPath());
for (String serverName : mappingProperties2.getDestinations()) {
logger.info("---------for path {} adding server {} ", mappingProperties2.getPath(), serverName);
}
logger.info("---------Project " + projectPersist.getContainerID() + " defined on servers - " + mappingProperties2.getDestinations().toString());
}
} else {
logger.error("Project " + projectPersist.getContainerID() + " defined on non existing server");
}
@ -141,9 +163,8 @@ public class UpdateService {
}
}
mappings.clear();
mappings.addAll(paths);
this.customMappingsProvider.setMappingPropertiesMap(mappingPropertiesMap);
this.customMappingsProvider.setMappingJWTPropertiesMap(mappingJWTPropertiesMap);
}
@PostConstruct

View file

@ -11,4 +11,5 @@ pymma.kafka.sslTruststorePassword=${PYMMA_KAFKA_SSL_TRUSTSTORE_PASSWORD:}
pymma.kafka.sslKeyPassword=${PYMMA_KAFKA_KEY_PASSWORD:}
pymma.kafka.sslKeystorePassword=${PYMMA_KAFKA_SSL_KEYSTORE_PASSWORD:}
pymma.kafka.sslKeystoreLocation=${PYMMA_KAFKA_SSL_KEYSTORE_LOCATION:}
pymma.kafka.sslKeystoreType=${PYMMA_KAFKA_SSL_KEYSTORE_TYPE:}
pymma.kafka.sslKeystoreType=${PYMMA_KAFKA_SSL_KEYSTORE_TYPE:}
secretkey=eRaYY7Wo24sDqKSX3IM9ASGmdGPmkTd9jo1QTy4b7P9Ze5_9hKolVX8xNrQDcNRfVEdTZNOuOyqEGhXEbdJI-ZQ19k_o9MI0y3eZN2lp9jow55FfXMiINEdt1XR85VipRLSOkT6kSpzs2x-jbLDiz9iFVzkd81YKxMgPA7VfZeQUm4n-mOmnWMaVX30zGFU4L3oPBctYKkl4dYfqYWqRNfrgPJVi5DGFjywgxx0ASEiJHtV72paI3fDR2XwlSkyhhmY-ICjCRmsJN4fX1pdoL8a18-aQrvyu4j0Os6dVPYIoPvvY0SAZtWYKHfM15g7A3HD4cVREf9cUsprCRK93w