pucardotorg / dristi

MIT License
2 stars 12 forks source link

Security: Audit logs not reflecting in DB #1657

Open subhashini-egov opened 1 week ago

subhashini-egov commented 1 week ago

Describe the bug Signed audit logs are to be enabled for each service. These have been done in the persister configurations here. But there are no corresponding logs in the DB.

pucar-uat-db=> select count(*) from eg_audit_logs;
 count 
-------
     1
(1 row)

To Reproduce Steps to reproduce the behavior:

  1. Log into DB
  2. View the eg_audit_logs table
  3. Currently count is just 1 record

Expected behavior When a transaction (create/update/delete) happens, it is updated in audit logs table. We should have more records.

Additional context This is necessary for security and audit trail. Show stopper.

subhashini-egov commented 1 week ago

Just checked the audit logs pod. There are a lot of exceptions.

2024-09-11 10:57:24.574+0000 ERROR --- [er#0-0-C-1] o.e.a.c.AuditLogsConsumer                --  : Error while listening to value: {topic=save-order-application, value={RequestInfo={apiId=Rainmaker, ver=null, ts=null, action=null, did=null, key=null, msgId=1726052244422|en_IN, authToken=14d8da0b-115d-4784-a1f7-223d97da39b9, correlationId=2e75c940-110c-425e-8821-5b03cefebdba, plainAccessRequest={recordId=null, plainRequestFields=null}, userInfo={id=143, userName=uatJudge01, name=uatJudge01, type=EMPLOYEE, mobileNumber=1002335566, emailId=null, roles=[{id=null, name=HEARING_VIEWER, code=HEARING_VIEWER, tenantId=kl}, {id=null, name=DEPOSITION_EDITOR, code=DEPOSITION_EDITOR, tenantId=kl}, {id=null, name=WORKFLOW_ABANDON, code=WORKFLOW_ABANDON, tenantId=kl}, {id=null, name=ORDER_ESIGN, code=ORDER_ESIGN, tenantId=kl}, {id=null, name=Workflow Admin, code=WORKFLOW_ADMIN, tenantId=kl}, {id=null, name=DEPOSITION_PUBLISHER, code=DEPOSITION_PUBLISHER, tenantId=kl}, {id=null, name=TASK_APPROVER, code=TASK_APPROVER, tenantId=kl}, {id=null, name=HEARING_START, code=HEARING_START, tenantId=kl}, {id=null, name=HEARING_APPROVER, code=HEARING_APPROVER, tenantId=kl}, {id=null, name=APPLICATION_RESPONDER, code=APPLICATION_RESPONDER, tenantId=kl}, {id=null, name=ORDER_VIEWER, code=ORDER_VIEWER, tenantId=kl}, {id=null, name=ORDER_REASSIGN, code=ORDER_REASSIGN, tenantId=kl}, {id=null, name=CASE_EDITOR, code=CASE_EDITOR, tenantId=kl}, {id=null, name=TASK_CREATOR, code=TASK_CREATOR, tenantId=kl}, {id=null, name=APPLICATION_APPROVER, code=APPLICATION_APPROVER, tenantId=kl}, {id=null, name=HEARING_DATE_REQUESTOR, code=HEARING_DATE_REQUESTOR, tenantId=kl}, {id=null, name=Employee, code=EMPLOYEE, tenantId=kl}, {id=null, name=ORDER_DELETE, code=ORDER_DELETE, tenantId=kl}, {id=null, name=CASE_VIEWER, code=CASE_VIEWER, tenantId=kl}, {id=null, name=APPLICATION_REJECTOR, code=APPLICATION_REJECTOR, tenantId=kl}, {id=null, name=ORDER_APPROVER, code=ORDER_APPROVER, tenantId=kl}, {id=null, name=HEARING_CLOSER, code=HEARING_CLOSER, tenantId=kl}, {id=null, name=ORDER_CREATOR, code=ORDER_CREATOR, tenantId=kl}, {id=null, name=JUDGE_ROLE, code=JUDGE_ROLE, tenantId=kl}, {id=null, name=CASE_APPROVER, code=CASE_APPROVER, tenantId=kl}, {id=null, name=DEPOSITION_CREATOR, code=DEPOSITION_CREATOR, tenantId=kl}, {id=null, name=SUBMISSION_APPROVER, code=SUBMISSION_APPROVER, tenantId=kl}, {id=null, name=TASK_UPDATOR, code=TASK_UPDATOR, tenantId=kl}, {id=null, name=TASK_VIEWER, code=TASK_VIEWER, tenantId=kl}, {id=null, name=HEARING_SCHEDULER, code=HEARING_SCHEDULER, tenantId=kl}], tenantId=kl, uuid=c1c4a708-afd6-4c9c-91a5-fd6c8517fb39}}, order={id=760af164-f3b5-4f34-a728-1372b20e6a78, tenantId=kl, filingNumber=F-C.1973.002-2024-000150, cnrNumber=KLJL01-000150-2024, applicationNumber=[], hearingNumber=null, orderNumber=ORDER-NO-2024-09-11-000235, linkedOrderNumber=null, createdDate=1726052244522, issuedBy=null, orderType=OTHERS, orderCategory=null, status=DRAFT_IN_PROGRESS, comments=dsf, isActive=true, statuteSection={id=9a0d70cf-1140-4526-bfcb-385db29983d7, tenantId=kl, statute=null, sections=null, subsections=null, additionalDetails=null, auditDetails={createdBy=c1c4a708-afd6-4c9c-91a5-fd6c8517fb39, lastModifiedBy=c1c4a708-afd6-4c9c-91a5-fd6c8517fb39, createdTime=1726052244522, lastModifiedTime=1726052244522}, strSections=null, strSubsections=null}, documents=[], orderDetails=null, additionalDetails={formdata={orderType={id=18, code=OTHERS, type=OTHERS, isactive=true, name=ORDER_TYPE_OTHERS}, orderTitle=sdf, otherDetails={text=dsf}}}, auditDetails={createdBy=c1c4a708-afd6-4c9c-91a5-fd6c8517fb39, lastModifiedBy=c1c4a708-afd6-4c9c-91a5-fd6c8517fb39, createdTime=1726052244522, lastModifiedTime=1726052244522}, workflow={action=SAVE_DRAFT, comments=Creating order, documents=[{id=null, documentType=null, fileStore=null, documentUid=null, additionalDetails=null}], assignes=[], rating=null}}}}on topic: process-audit-records 

java.lang.NullPointerException: Cannot invoke "java.util.List.iterator()" because "mappings" is null
    at org.egov.auditservice.persisterauditclient.PersisterAuditClientService.filterMappings(PersisterAuditClientService.java:421)
    at org.egov.auditservice.persisterauditclient.PersisterAuditClientService.generateAuditLogs(PersisterAuditClientService.java:66)
    at org.egov.auditservice.consumers.AuditLogsConsumer.listen(AuditLogsConsumer.java:38)
    at jdk.internal.reflect.GeneratedMethodAccessor39.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:169)
    at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:119)
    at org.springframework.kafka.listener.adapter.HandlerAdapter.invoke(HandlerAdapter.java:56)
    at org.springframework.kafka.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:376)
    at org.springframework.kafka.listener.adapter.RecordMessagingMessageListenerAdapter.onMessage(RecordMessagingMessageListenerAdapter.java:92)
    at org.springframework.kafka.listener.adapter.RecordMessagingMessageListenerAdapter.onMessage(RecordMessagingMessageListenerAdapter.java:53)
    at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.doInvokeOnMessage(KafkaMessageListenerContainer.java:2848)
    at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeOnMessage(KafkaMessageListenerContainer.java:2826)
    at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.lambda$doInvokeRecordListener$56(KafkaMessageListenerContainer.java:2744)
    at io.micrometer.observation.Observation.observe(Observation.java:565)
    at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.doInvokeRecordListener(KafkaMessageListenerContainer.java:2742)
    at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.doInvokeWithRecords(KafkaMessageListenerContainer.java:2595)
    at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeRecordListener(KafkaMessageListenerContainer.java:2481)
    at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeListener(KafkaMessageListenerContainer.java:2123)
    at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeIfHaveRecords(KafkaMessageListenerContainer.java:1478)
    at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.pollAndInvoke(KafkaMessageListenerContainer.java:1442)
    at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.run(KafkaMessageListenerContainer.java:1313)
    at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804)
    at java.base/java.lang.Thread.run(Thread.java:840)
subhashini-egov commented 1 week ago

@manimaarans @Ramu-kandimalla The audit service helm chart is not configured correctly. We need to add this below:

 - name: EGOV_PERSIST_YML_REPO_PATH
    value: {{ index .Values "persist-yml-path" | quote }}

For reference, please see this as a sample.