ABDM submit: release session lock before internal handoff and extend client timeout
This commit is contained in:
parent
a23d1f215a
commit
e7e5cf88e7
|
|
@ -5203,7 +5203,7 @@ class Opd_prescription extends BaseController
|
||||||
. ' btn.disabled=true;btn.innerHTML=\'<span class="spinner-border spinner-border-sm me-1"></span>Submitting\u2026\';'
|
. ' btn.disabled=true;btn.innerHTML=\'<span class="spinner-border spinner-border-sm me-1"></span>Submitting\u2026\';'
|
||||||
. ' const body=new URLSearchParams({opd_id:CTX.opdId,opd_session_id:CTX.sessionId});'
|
. ' const body=new URLSearchParams({opd_id:CTX.opdId,opd_session_id:CTX.sessionId});'
|
||||||
. ' body.append(CSRF_NAME,CSRF_HASH);'
|
. ' body.append(CSRF_NAME,CSRF_HASH);'
|
||||||
. ' const submitTimeoutMs=45000;'
|
. ' const submitTimeoutMs=150000;'
|
||||||
. ' const submitController=new AbortController();'
|
. ' const submitController=new AbortController();'
|
||||||
. ' const submitTimer=setTimeout(()=>submitController.abort(),submitTimeoutMs);'
|
. ' const submitTimer=setTimeout(()=>submitController.abort(),submitTimeoutMs);'
|
||||||
. ' fetch(SUBMIT_URL,{method:"POST",headers:{"X-Requested-With":"XMLHttpRequest","Content-Type":"application/x-www-form-urlencoded"},body:body.toString(),signal:submitController.signal})'
|
. ' fetch(SUBMIT_URL,{method:"POST",headers:{"X-Requested-With":"XMLHttpRequest","Content-Type":"application/x-www-form-urlencoded"},body:body.toString(),signal:submitController.signal})'
|
||||||
|
|
@ -5365,6 +5365,20 @@ class Opd_prescription extends BaseController
|
||||||
$cookieHeader = (string) $this->request->getHeaderLine('Cookie');
|
$cookieHeader = (string) $this->request->getHeaderLine('Cookie');
|
||||||
$handoffTimeoutSec = $this->resolveFhirGatewayHandoffTimeoutSec();
|
$handoffTimeoutSec = $this->resolveFhirGatewayHandoffTimeoutSec();
|
||||||
|
|
||||||
|
// Avoid self-call deadlock: this request forwards the same session cookie
|
||||||
|
// to an internal endpoint protected by permission filter.
|
||||||
|
// Releasing session lock allows the internal request to proceed.
|
||||||
|
try {
|
||||||
|
$session = session();
|
||||||
|
if (is_object($session) && method_exists($session, 'close')) {
|
||||||
|
$session->close();
|
||||||
|
} elseif (function_exists('session_write_close') && session_status() === PHP_SESSION_ACTIVE) {
|
||||||
|
session_write_close();
|
||||||
|
}
|
||||||
|
} catch (\Throwable $sessionCloseError) {
|
||||||
|
log_message('warning', '[fhir_bundle_submit] could not close session lock before handoff for OPD#' . $opdId . ': ' . $sessionCloseError->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
$client = service('curlrequest', [
|
$client = service('curlrequest', [
|
||||||
'timeout' => $handoffTimeoutSec,
|
'timeout' => $handoffTimeoutSec,
|
||||||
'connect_timeout' => 10,
|
'connect_timeout' => 10,
|
||||||
|
|
|
||||||
|
|
@ -2179,7 +2179,7 @@
|
||||||
btn.textContent = 'Submitting…';
|
btn.textContent = 'Submitting…';
|
||||||
var body = new URLSearchParams({ opd_id: _fhirOpdId, opd_session_id: _fhirSessionId });
|
var body = new URLSearchParams({ opd_id: _fhirOpdId, opd_session_id: _fhirSessionId });
|
||||||
body.append(csrfName, csrfHash);
|
body.append(csrfName, csrfHash);
|
||||||
var submitTimeoutMs = 45000;
|
var submitTimeoutMs = 150000;
|
||||||
var submitController = new AbortController();
|
var submitController = new AbortController();
|
||||||
var submitTimer = window.setTimeout(function () { submitController.abort(); }, submitTimeoutMs);
|
var submitTimer = window.setTimeout(function () { submitController.abort(); }, submitTimeoutMs);
|
||||||
fetch('<?= base_url('Opd_prescription/fhir_bundle_submit') ?>', {
|
fetch('<?= base_url('Opd_prescription/fhir_bundle_submit') ?>', {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user