Search in sources :

Example 31 with AuditEventRecord

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);
}
Also used : MidpointAuthentication(com.evolveum.midpoint.authentication.api.config.MidpointAuthentication) Authentication(org.springframework.security.core.Authentication) PrismObject(com.evolveum.midpoint.prism.PrismObject) AuditEventRecord(com.evolveum.midpoint.audit.api.AuditEventRecord) MidpointAuthentication(com.evolveum.midpoint.authentication.api.config.MidpointAuthentication) MidPointPrincipal(com.evolveum.midpoint.security.api.MidPointPrincipal)

Example 32 with AuditEventRecord

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);
}
Also used : Task(com.evolveum.midpoint.task.api.Task) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) MidpointAuthentication(com.evolveum.midpoint.authentication.api.config.MidpointAuthentication) AuditEventRecord(com.evolveum.midpoint.audit.api.AuditEventRecord) MidPointPrincipal(com.evolveum.midpoint.security.api.MidPointPrincipal)

Example 33 with AuditEventRecord

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");
    }
}
Also used : Message(com.evolveum.midpoint.notifications.api.transports.Message) HashMap(java.util.HashMap) AuditEventRecord(com.evolveum.midpoint.audit.api.AuditEventRecord) Test(org.testng.annotations.Test)

Example 34 with AuditEventRecord

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());
}
Also used : Task(com.evolveum.midpoint.task.api.Task) ModelExecuteOptions(com.evolveum.midpoint.model.api.ModelExecuteOptions) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) ObjectDelta(com.evolveum.midpoint.prism.delta.ObjectDelta) AuditEventRecord(com.evolveum.midpoint.audit.api.AuditEventRecord) Test(org.testng.annotations.Test)

Example 35 with AuditEventRecord

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();
}
Also used : MAuditEventRecord(com.evolveum.midpoint.repo.sql.audit.beans.MAuditEventRecord) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) QAuditEventRecord(com.evolveum.midpoint.repo.sql.audit.querymodel.QAuditEventRecord) AuditEventRecord(com.evolveum.midpoint.audit.api.AuditEventRecord) MAuditEventRecord(com.evolveum.midpoint.repo.sql.audit.beans.MAuditEventRecord) NullTaskImpl(com.evolveum.midpoint.task.api.test.NullTaskImpl) Test(org.testng.annotations.Test)

Aggregations

AuditEventRecord (com.evolveum.midpoint.audit.api.AuditEventRecord)83 OperationResult (com.evolveum.midpoint.schema.result.OperationResult)28 Task (com.evolveum.midpoint.task.api.Task)18 Test (org.testng.annotations.Test)18 ObjectDeltaOperation (com.evolveum.midpoint.schema.ObjectDeltaOperation)11 SchemaException (com.evolveum.midpoint.util.exception.SchemaException)9 ObjectDelta (com.evolveum.midpoint.prism.delta.ObjectDelta)8 PrismObject (com.evolveum.midpoint.prism.PrismObject)7 ObjectType (com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType)6 ArrayList (java.util.ArrayList)6 MidPointPrincipal (com.evolveum.midpoint.security.api.MidPointPrincipal)5 NullTaskImpl (com.evolveum.midpoint.task.api.test.NullTaskImpl)5 PolyString (com.evolveum.midpoint.prism.polystring.PolyString)4 MAuditEventRecord (com.evolveum.midpoint.repo.sql.audit.beans.MAuditEventRecord)4 AuditResultHandler (com.evolveum.midpoint.audit.api.AuditResultHandler)3 MidpointAuthentication (com.evolveum.midpoint.authentication.api.config.MidpointAuthentication)3 Message (com.evolveum.midpoint.notifications.api.transports.Message)3 QAuditEventRecord (com.evolveum.midpoint.repo.sql.audit.querymodel.QAuditEventRecord)3 ObjectNotFoundException (com.evolveum.midpoint.util.exception.ObjectNotFoundException)3 AuditEventRecordType (com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventRecordType)3