Skip to content

Commit

Permalink
KOGITO-9611 - Track user identity in Kogito event
Browse files Browse the repository at this point in the history
  • Loading branch information
cristianonicolai committed Jul 21, 2023
1 parent 5acc68c commit 6b4c732
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ public static ProcessInstanceDataEvent getProcessCloudEvent(String processId, St
.build() : null)
.build();

return new ProcessInstanceDataEvent(URI.create("http://localhost:8080/" + processId).toString(), "jobs-management,prometheus-monitoring,process-management", body.metaData(), body);
return new ProcessInstanceDataEvent(URI.create("http://localhost:8080/" + processId).toString(), "jobs-management,prometheus-monitoring,process-management", null, body.metaData(), body);
}

public static ProcessInstance getProcessInstance(String processId, String processInstanceId, Integer status, String rootProcessInstanceId, String rootProcessId) {
Expand Down Expand Up @@ -229,7 +229,7 @@ public static UserTaskInstanceDataEvent getUserTaskCloudEvent(String taskId, Str
.outputs(emptyMap())
.build();

return new UserTaskInstanceDataEvent(URI.create("http://localhost:8080/" + processId).toString(), null, body.metaData(), body);
return new UserTaskInstanceDataEvent(URI.create("http://localhost:8080/" + processId).toString(), null, null, body.metaData(), body);
}

public static AttachmentEventBody getTaskAttachment(String id, String user, String name, String content) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ public TestingDataEvent(String type,
String kogitoProcessId,
String kogitoRootProcessId) {
super(type, source, data, kogitoProcessInstanceId, kogitoRootProcessInstanceId, kogitoProcessId,
kogitoRootProcessId, null);
kogitoRootProcessId, null, null);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,16 @@ public class JobDataEvent extends AbstractDataEvent<ScheduledJob> {

public static final String JOB_EVENT_TYPE = "JobEvent";

public JobDataEvent(String source, ScheduledJob data) {
public JobDataEvent(String source, String identity, ScheduledJob data) {
super(JOB_EVENT_TYPE,
source,
data,
data.getProcessInstanceId(),
data.getRootProcessInstanceId(),
data.getProcessId(),
data.getRootProcessId(),
null);
null,
identity);
}

@JsonIgnore
Expand All @@ -49,19 +50,25 @@ public static class JobDataEventBuilder {

private String source;
private ScheduledJob data;
private String identity;

public JobDataEventBuilder source(String source) {
this.source = source;
return this;
}

public JobDataEventBuilder identity(String identity) {
this.identity = identity;
return this;
}

public JobDataEventBuilder data(ScheduledJob data) {
this.data = data;
return this;
}

public JobDataEvent build() {
return new JobDataEvent(source, data);
return new JobDataEvent(source, identity, data);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@

import com.fasterxml.jackson.databind.ObjectMapper;

import io.quarkus.security.identity.SecurityIdentity;
import io.smallrye.reactive.messaging.annotations.Blocking;

import static org.kie.kogito.jobs.service.events.JobDataEvent.JOB_EVENT_TYPE;
Expand All @@ -57,16 +58,20 @@ public class EventPublisherJobStreams {

private final ObjectMapper objectMapper;

private final SecurityIdentity identity;

@Inject
public EventPublisherJobStreams(@ConfigProperty(name = "kogito.service.url", defaultValue = "http://localhost:8080") String url,
Instance<EventPublisher> eventPublishers,
ObjectMapper objectMapper) {
ObjectMapper objectMapper,
SecurityIdentity identity) {
this.url = url;
eventPublisher = eventPublishers.stream()
.filter(publisher -> publisher.getClass().getName().startsWith(DATA_INDEX_EVENT_PUBLISHER))
.findFirst()
.orElse(null);
this.objectMapper = objectMapper;
this.identity = identity;
}

@Incoming(AvailableStreams.JOB_STATUS_CHANGE_EVENTS)
Expand All @@ -87,7 +92,8 @@ public void onJobStatusChange(JobDetails jobDetails) {
scheduledJob.getProcessInstanceId(),
scheduledJob.getRootProcessInstanceId(),
scheduledJob.getProcessId(),
scheduledJob.getRootProcessId());
scheduledJob.getRootProcessId(),
identity.isAnonymous() ? null : identity.getPrincipal().getName());
try {
eventPublisher.publish(event);
} catch (Exception e) {
Expand All @@ -103,9 +109,10 @@ public EventPublisherJobDataEvent(String type,
String kogitoProcessInstanceId,
String kogitoRootProcessInstanceId,
String kogitoProcessId,
String kogitoRootProcessId) {
String kogitoRootProcessId,
String kogitoIdentity) {
super(type, source, data, kogitoProcessInstanceId, kogitoRootProcessInstanceId, kogitoProcessId,
kogitoRootProcessId, null);
kogitoRootProcessId, null, kogitoIdentity);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,16 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;

import io.quarkus.security.identity.SecurityIdentity;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.anyCollection;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

class EventPublisherJobStreamsTest {

Expand Down Expand Up @@ -94,7 +97,9 @@ void onJobStatusChange() throws Exception {
.registerModule(new JavaTimeModule())
.disable(com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

EventPublisherJobStreams eventPublisherJobStreams = new EventPublisherJobStreams(URL, eventPublisherInstance, objectMapper);
SecurityIdentity identity = mock(SecurityIdentity.class);
when(identity.isAnonymous()).thenReturn(true);
EventPublisherJobStreams eventPublisherJobStreams = new EventPublisherJobStreams(URL, eventPublisherInstance, objectMapper, identity);

JobDetails jobDetails = buildJobDetails();
eventPublisherJobStreams.onJobStatusChange(jobDetails);
Expand Down

0 comments on commit 6b4c732

Please sign in to comment.