use of com.evolveum.midpoint.audit.api.AuditEventRecord in project midpoint by Evolveum.
the class AbstractRestController method auditLogout.
private void auditLogout(Task task, OperationResult result) {
if (isAuditingSkipped(result)) {
return;
}
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Object principal = authentication.getPrincipal();
String name;
PrismObject<? extends FocusType> user;
if (principal instanceof MidPointPrincipal) {
name = ((MidPointPrincipal) principal).getUsername();
user = ((MidPointPrincipal) principal).getFocus().asPrismObject();
} else {
name = null;
user = null;
}
AuditEventRecord record = new AuditEventRecord(AuditEventType.TERMINATE_SESSION, AuditEventStage.REQUEST);
record.setInitiator(user);
record.setParameter(name);
record.setChannel(SchemaConstants.CHANNEL_REST_URI);
record.setTimestamp(System.currentTimeMillis());
record.setOutcome(OperationResultStatus.SUCCESS);
if (authentication instanceof MidpointAuthentication) {
record.setSessionIdentifier(((MidpointAuthentication) authentication).getSessionId());
}
auditService.audit(record, task, result);
}
use of com.evolveum.midpoint.audit.api.AuditEventRecord in project midpoint by Evolveum.
the class AuditedAccessDeniedHandler method auditEvent.
private void auditEvent(HttpServletRequest request, Authentication authentication, AccessDeniedException accessDeniedException) {
// Eventually we should get this from the caller
OperationResult result = new OperationResult(OP_AUDIT_EVENT);
MidPointPrincipal principal = AuthUtil.getPrincipalUser(authentication);
PrismObject<? extends FocusType> user = principal != null ? principal.getFocus().asPrismObject() : null;
String channel = SchemaConstants.CHANNEL_USER_URI;
if (authentication instanceof MidpointAuthentication && ((MidpointAuthentication) authentication).getAuthenticationChannel() != null) {
channel = ((MidpointAuthentication) authentication).getAuthenticationChannel().getChannelId();
}
Task task = taskManager.createTaskInstance();
task.setOwner(user);
task.setChannel(channel);
AuditEventRecord record = new AuditEventRecord(AuditEventType.CREATE_SESSION, AuditEventStage.REQUEST);
record.setInitiator(user);
record.setParameter(AuthSequenceUtil.getName(user));
record.setChannel(channel);
record.setTimestamp(System.currentTimeMillis());
record.setOutcome(OperationResultStatus.FATAL_ERROR);
// probably not needed, as audit service would take care of it; but it doesn't hurt so let's keep it here
record.setHostIdentifier(request.getLocalName());
record.setRemoteHostAddress(request.getLocalAddr());
record.setNodeIdentifier(taskManager.getNodeId());
record.setSessionIdentifier(request.getRequestedSessionId());
record.setMessage(accessDeniedException.getMessage());
auditService.audit(record, task, result);
}
use of com.evolveum.midpoint.audit.api.AuditEventRecord in project midpoint by Evolveum.
the class TestEscalation method test220Reject.
/**
* After 5 days, the case should be auto-rejected.
*/
@Test
public void test220Reject() throws Exception {
given();
login(userAdministrator);
dummyAuditService.clear();
dummyTransport.clearMessages();
clock.resetOverride();
// at 5D there's a deadline with auto-rejection
clock.overrideDuration("P5DT2H");
when();
waitForTaskNextRun(TASK_TRIGGER_SCANNER_OID, true, 20000, true);
then();
// @formatter:off
var approvalCase = assertCase(approvalCaseOid, "after").display().displayXml().assertClosed().assertStageNumber(1).triggers().assertTriggers(0).end().workItems().forOriginalAssignee(USER_BOB_OID).assertClosed().assertEscalationLevelNumber(1).end().forOriginalAssignee(USER_BOBEK_OID).assertClosed().assertEscalationLevelNumber(1).end().end().getObjectable();
// @formatter:on
Map<String, WorkItemCompletionEventType> eventMap = new HashMap<>();
for (CaseEventType event : approvalCase.getEvent()) {
if (event instanceof WorkItemCompletionEventType) {
WorkItemCompletionEventType c = (WorkItemCompletionEventType) event;
eventMap.put(c.getExternalWorkItemId(), c);
assertNotNull("No result in " + c, c.getOutput());
assertEquals("Wrong outcome in " + c, WorkItemOutcomeType.REJECT, ApprovalUtils.fromUri(c.getOutput().getOutcome()));
assertNotNull("No cause in " + c, c.getCause());
assertEquals("Wrong cause type in " + c, WorkItemEventCauseTypeType.TIMED_ACTION, c.getCause().getType());
assertEquals("Wrong cause name in " + c, "auto-reject", c.getCause().getName());
assertEquals("Wrong cause display name in " + c, "Automatic rejection at deadline", c.getCause().getDisplayName());
}
}
displayValue("completion event map", eventMap);
assertEquals("Wrong # of work item completion events in case history", 2, eventMap.size());
displayCollection("audit records", dummyAuditService.getRecords());
List<AuditEventRecord> workItemAuditRecords = dummyAuditService.getRecordsOfType(AuditEventType.WORK_ITEM);
assertEquals("Wrong # of work item audit records", 2, workItemAuditRecords.size());
for (AuditEventRecord r : workItemAuditRecords) {
assertEquals("Wrong causeType in " + r, Collections.singleton("timedAction"), r.getPropertyValues(AuditingConstants.AUDIT_CAUSE_TYPE));
assertEquals("Wrong causeName in " + r, Collections.singleton("auto-reject"), r.getPropertyValues(AuditingConstants.AUDIT_CAUSE_NAME));
assertEquals("Wrong causeDisplayName in " + r, Collections.singleton("Automatic rejection at deadline"), r.getPropertyValues(AuditingConstants.AUDIT_CAUSE_DISPLAY_NAME));
assertEquals("Wrong result in " + r, "Rejected", r.getResult());
}
displayCollection("notifications - process", dummyTransport.getMessages("dummy:simpleWorkflowNotifier-Processes"));
List<Message> notifications = dummyTransport.getMessages("dummy:simpleWorkflowNotifier-WorkItems");
displayCollection("notifications - work items", notifications);
for (Message notification : notifications) {
assertContains(notification, "Reason: Automatic rejection at deadline (timed action)");
assertContains(notification, "Result: Rejected");
}
}
use of com.evolveum.midpoint.audit.api.AuditEventRecord in project midpoint by Evolveum.
the class TestMiscellaneous method test105RequesterCommentImmediate.
@Test
public void test105RequesterCommentImmediate() throws Exception {
login(userAdministrator);
Task task = getTestTask();
OperationResult result = getTestOperationResult();
given();
dummyAuditService.clear();
OperationBusinessContextType businessContext = new OperationBusinessContextType();
final String REQUESTER_COMMENT = "req.comment";
businessContext.setComment(REQUESTER_COMMENT);
ObjectDelta<UserType> userDelta = createAssignmentUserDelta(userJackOid, ROLE_CAPTAIN.oid, RoleType.COMPLEX_TYPE, null, null, null, true);
Collection<ObjectDelta<? extends ObjectType>> deltas = MiscSchemaUtil.createCollection(userDelta);
ModelExecuteOptions options = executeOptions().requestBusinessContext(businessContext);
options.executeImmediatelyAfterApproval(true);
modelService.executeChanges(deltas, options, task, result);
assertNotAssignedRole(userJackOid, ROLE_CAPTAIN.oid, result);
CaseWorkItemType workItem = getWorkItem(task, result);
display("Work item", workItem);
when();
caseManager.completeWorkItem(WorkItemId.of(workItem), ApprovalUtils.createApproveOutput(prismContext).comment("OK"), null, task, result);
then();
CaseType aCase = getCase(CaseWorkItemUtil.getCaseRequired(workItem).getOid());
display("workflow context", aCase.getApprovalContext());
List<? extends CaseEventType> events = aCase.getEvent();
assertEquals("Wrong # of events", 2, events.size());
CaseCreationEventType event1 = (CaseCreationEventType) events.get(0);
display("Event 1", event1);
assertEquals("Wrong requester comment", REQUESTER_COMMENT, ApprovalContextUtil.getBusinessContext(aCase).getComment());
WorkItemEventType event2 = (WorkItemEventType) events.get(1);
display("Event 2", event2);
assertNotNull("Original assignee is null", event2.getOriginalAssigneeRef());
assertEquals("Wrong original assignee OID", USER_SCOTT.oid, event2.getOriginalAssigneeRef().getOid());
displayDumpable("audit", dummyAuditService);
List<AuditEventRecord> records = dummyAuditService.getRecordsOfType(AuditEventType.WORKFLOW_PROCESS_INSTANCE);
assertEquals("Wrong # of process instance audit records", 2, records.size());
for (int i = 0; i < records.size(); i++) {
AuditEventRecord record = records.get(i);
assertEquals("Wrong requester comment in audit record #" + i, Collections.singleton(REQUESTER_COMMENT), record.getPropertyValues(AuditingConstants.AUDIT_REQUESTER_COMMENT));
}
CaseType parentCase = getCase(aCase.getParentRef().getOid());
waitForCaseClose(parentCase);
AssignmentType assignment = assertAssignedRole(userJackOid, ROLE_CAPTAIN.oid, result);
display("assignment after creation", assignment);
MetadataType metadata = assignment.getMetadata();
assertNotNull("Null request timestamp in metadata", metadata.getRequestTimestamp());
assertRefEquals("Wrong requestorRef in metadata", ObjectTypeUtil.createObjectRef(userAdministrator, prismContext), metadata.getRequestorRef());
assertEquals("Wrong requestorComment in metadata", REQUESTER_COMMENT, metadata.getRequestorComment());
}
use of com.evolveum.midpoint.audit.api.AuditEventRecord in project midpoint by Evolveum.
the class AuditTest method test110AuditSecond.
@Test
public void test110AuditSecond() throws QueryException {
OperationResult result = createOperationResult();
when();
AuditEventRecord record = new AuditEventRecord();
record.addPropertyValue("prop", "val");
logger.info("Adding audit record {}", record);
auditService.audit(record, new NullTaskImpl(), result);
then();
System.out.println("Record written:\n" + record.debugDump());
System.out.println("Repo ID: " + record.getRepoId());
MAuditEventRecord loaded = getAuditEventRecord(2, 1);
System.out.println("Record loaded:\n" + loaded);
assertThat(loaded.properties).describedAs("# of properties").hasSize(1);
assertThat(loaded.properties.get("prop")).withFailMessage("Wrong prop values").containsExactlyInAnyOrder("val");
// not initialized if nothing is there, so it's null (meaning empty)
assertThat(loaded.refValues).describedAs("# of references").isNullOrEmpty();
}
Aggregations