feat: disable public registration on login page and add cron task management script
This commit is contained in:
parent
64e34678ec
commit
c49361c0fa
|
|
@ -157,7 +157,7 @@ class Auth extends ShieldAuth
|
|||
* --------------------------------------------------------------------
|
||||
* Determines whether users can register for the site.
|
||||
*/
|
||||
public bool $allowRegistration = true;
|
||||
public bool $allowRegistration = false;
|
||||
|
||||
/**
|
||||
* --------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -114,12 +114,6 @@
|
|||
</div>
|
||||
<?php endif ?>
|
||||
|
||||
<?php if (setting('Auth.allowRegistration')) : ?>
|
||||
<div class="col-12">
|
||||
<p class="text-center"><?= lang('Auth.needAccount') ?> <a href="<?= url_to('register') ?>"><?= lang('Auth.register') ?></a></p>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
|
|
|||
302
scripts/manage_hms_cron.sh
Normal file
302
scripts/manage_hms_cron.sh
Normal file
|
|
@ -0,0 +1,302 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# ==============================================================================
|
||||
# HMS CI4 - Cron Job Manager Script
|
||||
# ==============================================================================
|
||||
# Usage:
|
||||
# bash scripts/manage_hms_cron.sh install [project_dir]
|
||||
# bash scripts/manage_hms_cron.sh add "<schedule>" "<command>" [log_name] [project_dir]
|
||||
# bash scripts/manage_hms_cron.sh list
|
||||
# bash scripts/manage_hms_cron.sh remove "<keyword_pattern>"
|
||||
# bash scripts/manage_hms_cron.sh uninstall
|
||||
# bash scripts/manage_hms_cron.sh test "<spark_command>" [project_dir]
|
||||
#
|
||||
# Examples:
|
||||
# bash scripts/manage_hms_cron.sh install /var/www/html/hms_etria
|
||||
# bash scripts/manage_hms_cron.sh add "*/5 * * * *" "spark abdm:push-sync --limit=20" "abdm_push.log"
|
||||
# bash scripts/manage_hms_cron.sh list
|
||||
# bash scripts/manage_hms_cron.sh remove "abdm:push-sync"
|
||||
# ==============================================================================
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
BLOCK_START="# BEGIN HMS_CI4_AUTOGENERATED_CRON"
|
||||
BLOCK_END="# END HMS_CI4_AUTOGENERATED_CRON"
|
||||
|
||||
# Resolve PHP CLI binary (prefers php83 / php82 / php8.3 / php8.2 over default php)
|
||||
detect_php() {
|
||||
if [ -n "${PHP_BIN:-}" ]; then
|
||||
echo "$PHP_BIN"
|
||||
return
|
||||
fi
|
||||
for cand in php83 php8.3 php82 php8.2 php; do
|
||||
if command -v "$cand" >/dev/null 2>&1; then
|
||||
echo "$(command -v "$cand")"
|
||||
return
|
||||
fi
|
||||
done
|
||||
echo "php"
|
||||
}
|
||||
|
||||
# Resolve project directory
|
||||
resolve_project_dir() {
|
||||
local dir="${1:-}"
|
||||
if [ -z "$dir" ]; then
|
||||
# If script is inside scripts/, project root is parent
|
||||
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
if [ -f "${script_dir}/../spark" ]; then
|
||||
dir="$(cd "${script_dir}/.." && pwd)"
|
||||
else
|
||||
dir="/var/www/html/hms_etria"
|
||||
fi
|
||||
fi
|
||||
echo "$dir"
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Action: List Cron Jobs
|
||||
# ------------------------------------------------------------------------------
|
||||
cmd_list() {
|
||||
echo "=== Current HMS Managed Cron Jobs ==="
|
||||
local cron_block
|
||||
cron_block="$(crontab -l 2>/dev/null | awk -v start="$BLOCK_START" -v end="$BLOCK_END" '
|
||||
$0 == start {flag=1; next}
|
||||
$0 == end {flag=0; next}
|
||||
flag {print}
|
||||
' || true)"
|
||||
|
||||
if [ -z "$cron_block" ]; then
|
||||
echo "No HMS cron jobs found in crontab."
|
||||
else
|
||||
echo "$cron_block"
|
||||
fi
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Action: Install Default Cron Suite
|
||||
# ------------------------------------------------------------------------------
|
||||
cmd_install() {
|
||||
local project_dir
|
||||
project_dir="$(resolve_project_dir "${1:-}")"
|
||||
local php_bin
|
||||
php_bin="$(detect_php)"
|
||||
local log_dir="${project_dir}/writable/logs/cron"
|
||||
|
||||
if [ ! -d "$project_dir" ]; then
|
||||
echo "ERROR: Project directory not found: $project_dir"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "$log_dir"
|
||||
|
||||
local tmp_cron
|
||||
tmp_cron="$(mktemp)"
|
||||
trap 'rm -f "$tmp_cron"' EXIT
|
||||
|
||||
# Keep non-HMS crontab lines
|
||||
crontab -l 2>/dev/null | awk -v start="$BLOCK_START" -v end="$BLOCK_END" '
|
||||
$0 == start {in_block=1; next}
|
||||
$0 == end {in_block=0; next}
|
||||
!in_block {print}
|
||||
' > "$tmp_cron"
|
||||
|
||||
# Append default managed block
|
||||
cat >> "$tmp_cron" <<EOF
|
||||
$BLOCK_START
|
||||
# ABDM M2 Care Context Push Sync (Every 1 minute)
|
||||
* * * * * cd $project_dir && $php_bin spark abdm:push-sync --limit=20 --worker=cron-abdm-m2 >> $log_dir/abdm_push_sync.log 2>&1
|
||||
# ABDM Bridge Records Sync (Every 1 minute)
|
||||
* * * * * cd $project_dir && $php_bin spark bridge:sync --limit 10 >> $log_dir/bridge_sync.log 2>&1
|
||||
# SNOMED CT Medical Coding Worker (Every 1 minute)
|
||||
* * * * * cd $project_dir && $php_bin spark snomed:process-coding >> $log_dir/snomed_process.log 2>&1
|
||||
# ABDM M3 HIU Data Request Poll (Every 2 minutes)
|
||||
*/2 * * * * cd $project_dir && $php_bin spark abdm:hiu-poll --limit=30 >> $log_dir/abdm_hiu_poll.log 2>&1
|
||||
# ABDM M3 HIU Retry Queue (Every 5 minutes)
|
||||
*/5 * * * * cd $project_dir && $php_bin spark abdm:hiu-retry --limit=20 >> $log_dir/abdm_hiu_retry.log 2>&1
|
||||
# ABDM Audit & Gateway Log Maintenance (Daily at 02:30 AM)
|
||||
30 2 * * * cd $project_dir && $php_bin spark abdm:prune-logs --days=30 --strip-payload-days=2 --optimize >> $log_dir/abdm_prune_logs.log 2>&1
|
||||
$BLOCK_END
|
||||
EOF
|
||||
|
||||
crontab "$tmp_cron"
|
||||
echo "Successfully installed default HMS cron suite for: $project_dir"
|
||||
echo "PHP binary detected: $php_bin"
|
||||
echo "Logs directory: $log_dir"
|
||||
echo ""
|
||||
cmd_list
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Action: Add / Append a single task to cron
|
||||
# ------------------------------------------------------------------------------
|
||||
cmd_add() {
|
||||
local schedule="${1:-}"
|
||||
local command_str="${2:-}"
|
||||
local log_file="${3:-}"
|
||||
local project_dir
|
||||
project_dir="$(resolve_project_dir "${4:-}")"
|
||||
local php_bin
|
||||
php_bin="$(detect_php)"
|
||||
local log_dir="${project_dir}/writable/logs/cron"
|
||||
|
||||
if [ -z "$schedule" ] || [ -z "$command_str" ]; then
|
||||
echo "Usage: $0 add \"<cron_schedule>\" \"<command>\" [log_file] [project_dir]"
|
||||
echo "Example: $0 add \"*/5 * * * *\" \"spark abdm:push-sync --limit=20\" \"abdm_push.log\""
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "$log_dir"
|
||||
|
||||
# Normalize command: if starts with 'spark ', wrap with cd and php
|
||||
local full_exec=""
|
||||
if [[ "$command_str" =~ ^spark[[:space:]] ]] || [[ "$command_str" == "spark" ]]; then
|
||||
full_exec="cd $project_dir && $php_bin $command_str"
|
||||
elif [[ "$command_str" =~ ^php[[:space:]]spark ]]; then
|
||||
full_exec="cd $project_dir && $command_str"
|
||||
else
|
||||
full_exec="$command_str"
|
||||
fi
|
||||
|
||||
# Append log redirection if log_file is provided or auto-generate
|
||||
if [ -n "$log_file" ]; then
|
||||
full_exec="${full_exec} >> ${log_dir}/${log_file} 2>&1"
|
||||
fi
|
||||
|
||||
local new_cron_line="${schedule} ${full_exec}"
|
||||
|
||||
local tmp_cron
|
||||
tmp_cron="$(mktemp)"
|
||||
trap 'rm -f "$tmp_cron"' EXIT
|
||||
|
||||
local existing_crontab
|
||||
existing_crontab="$(crontab -l 2>/dev/null || true)"
|
||||
|
||||
if echo "$existing_crontab" | grep -q "$BLOCK_START"; then
|
||||
# Insert before BLOCK_END
|
||||
awk -v start="$BLOCK_START" -v end="$BLOCK_END" -v newline="$new_cron_line" '
|
||||
$0 == end { print newline; print $0; next }
|
||||
{ print }
|
||||
' <<< "$existing_crontab" > "$tmp_cron"
|
||||
else
|
||||
# No HMS block yet: create block
|
||||
cat <<< "$existing_crontab" > "$tmp_cron"
|
||||
cat >> "$tmp_cron" <<EOF
|
||||
$BLOCK_START
|
||||
$new_cron_line
|
||||
$BLOCK_END
|
||||
EOF
|
||||
fi
|
||||
|
||||
crontab "$tmp_cron"
|
||||
echo "Added task to crontab:"
|
||||
echo " $new_cron_line"
|
||||
echo ""
|
||||
cmd_list
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Action: Remove a task matching pattern
|
||||
# ------------------------------------------------------------------------------
|
||||
cmd_remove() {
|
||||
local pattern="${1:-}"
|
||||
if [ -z "$pattern" ]; then
|
||||
echo "Usage: $0 remove \"<keyword_pattern>\""
|
||||
echo "Example: $0 remove \"abdm:push-sync\""
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local tmp_cron
|
||||
tmp_cron="$(mktemp)"
|
||||
trap 'rm -f "$tmp_cron"' EXIT
|
||||
|
||||
local existing_crontab
|
||||
existing_crontab="$(crontab -l 2>/dev/null || true)"
|
||||
|
||||
awk -v start="$BLOCK_START" -v end="$BLOCK_END" -v pat="$pattern" '
|
||||
$0 == start { in_block=1; print; next }
|
||||
$0 == end { in_block=0; print; next }
|
||||
in_block && $0 ~ pat { next }
|
||||
{ print }
|
||||
' <<< "$existing_crontab" > "$tmp_cron"
|
||||
|
||||
crontab "$tmp_cron"
|
||||
echo "Removed any task matching: $pattern"
|
||||
echo ""
|
||||
cmd_list
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Action: Uninstall HMS Cron Block completely
|
||||
# ------------------------------------------------------------------------------
|
||||
cmd_uninstall() {
|
||||
local tmp_cron
|
||||
tmp_cron="$(mktemp)"
|
||||
trap 'rm -f "$tmp_cron"' EXIT
|
||||
|
||||
crontab -l 2>/dev/null | awk -v start="$BLOCK_START" -v end="$BLOCK_END" '
|
||||
$0 == start {in_block=1; next}
|
||||
$0 == end {in_block=0; next}
|
||||
!in_block {print}
|
||||
' > "$tmp_cron"
|
||||
|
||||
crontab "$tmp_cron"
|
||||
echo "Uninstalled all HMS managed cron jobs."
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Action: Test run a command immediately
|
||||
# ------------------------------------------------------------------------------
|
||||
cmd_test() {
|
||||
local command_str="${1:-}"
|
||||
local project_dir
|
||||
project_dir="$(resolve_project_dir "${2:-}")"
|
||||
local php_bin
|
||||
php_bin="$(detect_php)"
|
||||
|
||||
if [ -z "$command_str" ]; then
|
||||
echo "Usage: $0 test \"<spark_command>\" [project_dir]"
|
||||
echo "Example: $0 test \"spark abdm:push-sync --limit=5\""
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Running test: cd $project_dir && $php_bin $command_str"
|
||||
cd "$project_dir" && "$php_bin" $command_str
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# CLI Router
|
||||
# ------------------------------------------------------------------------------
|
||||
case "${1:-help}" in
|
||||
install)
|
||||
shift
|
||||
cmd_install "$@"
|
||||
;;
|
||||
add)
|
||||
shift
|
||||
cmd_add "$@"
|
||||
;;
|
||||
list)
|
||||
cmd_list
|
||||
;;
|
||||
remove)
|
||||
shift
|
||||
cmd_remove "$@"
|
||||
;;
|
||||
uninstall)
|
||||
cmd_uninstall
|
||||
;;
|
||||
test)
|
||||
shift
|
||||
cmd_test "$@"
|
||||
;;
|
||||
*)
|
||||
echo "HMS CI4 Cron Job Manager"
|
||||
echo "Usage:"
|
||||
echo " bash scripts/manage_hms_cron.sh install [project_dir]"
|
||||
echo " bash scripts/manage_hms_cron.sh add \"<schedule>\" \"<spark_command>\" [log_file] [project_dir]"
|
||||
echo " bash scripts/manage_hms_cron.sh list"
|
||||
echo " bash scripts/manage_hms_cron.sh remove \"<pattern>\""
|
||||
echo " bash scripts/manage_hms_cron.sh uninstall"
|
||||
echo " bash scripts/manage_hms_cron.sh test \"<spark_command>\" [project_dir]"
|
||||
;;
|
||||
esac
|
||||
Loading…
Reference in New Issue
Block a user