From 011cbd23b22d3c069891a073b726f1ee077c3872 Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner Date: Fri, 24 Oct 2025 22:29:37 +0200 Subject: [PATCH] Fix autosync continuing to run after being disabled - Add destroy() method to properly stop cron jobs - Add additional safety checks in cron job execution - Add debugging logs to track cron job lifecycle - Ensure isRunning is set to false even when no cron job exists - Add null check for cronJob before execution This should prevent autosync from continuing to run after being disabled. --- scripts/ct/2fauth.sh | 82 ------------------- scripts/install/2fauth-install.sh | 105 ------------------------- src/server/services/autoSyncService.js | 18 ++++- 3 files changed, 16 insertions(+), 189 deletions(-) delete mode 100644 scripts/ct/2fauth.sh delete mode 100644 scripts/install/2fauth-install.sh diff --git a/scripts/ct/2fauth.sh b/scripts/ct/2fauth.sh deleted file mode 100644 index b301cf2..0000000 --- a/scripts/ct/2fauth.sh +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env bash -SCRIPT_DIR="$(dirname "$0")" -source "$SCRIPT_DIR/../core/build.func" -# Copyright (c) 2021-2025 community-scripts ORG -# Author: jkrgr0 -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://docs.2fauth.app/ - -APP="2FAuth" -var_tags="${var_tags:-2fa;authenticator}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-512}" -var_disk="${var_disk:-2}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - - if [[ ! -d "/opt/2fauth" ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - if check_for_gh_release "2fauth" "Bubka/2FAuth"; then - $STD apt update - $STD apt -y upgrade - - msg_info "Creating Backup" - mv "/opt/2fauth" "/opt/2fauth-backup" - if ! dpkg -l | grep -q 'php8.3'; then - cp /etc/nginx/conf.d/2fauth.conf /etc/nginx/conf.d/2fauth.conf.bak - fi - msg_ok "Backup Created" - - if ! dpkg -l | grep -q 'php8.3'; then - $STD apt-get install -y \ - lsb-release \ - gnupg2 - PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,mysql,cli" PHP_FPM="YES" setup_php - sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/2fauth.conf - fi - fetch_and_deploy_gh_release "2fauth" "Bubka/2FAuth" - setup_composer - mv "/opt/2fauth-backup/.env" "/opt/2fauth/.env" - mv "/opt/2fauth-backup/storage" "/opt/2fauth/storage" - cd "/opt/2fauth" || return - chown -R www-data: "/opt/2fauth" - chmod -R 755 "/opt/2fauth" - export COMPOSER_ALLOW_SUPERUSER=1 - $STD composer install --no-dev --prefer-source - php artisan 2fauth:install - $STD systemctl restart nginx - - msg_info "Cleaning Up" - if dpkg -l | grep -q 'php8.2'; then - $STD apt remove --purge -y php8.2* - fi - $STD apt -y autoremove - $STD apt -y autoclean - $STD apt -y clean - msg_ok "Cleanup Completed" - msg_ok "Updated Successfully" - fi - exit -} - -start -build_container -description - -msg_ok "Completed Successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:80${CL}" diff --git a/scripts/install/2fauth-install.sh b/scripts/install/2fauth-install.sh deleted file mode 100644 index 2ef85c8..0000000 --- a/scripts/install/2fauth-install.sh +++ /dev/null @@ -1,105 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2025 community-scripts ORG -# Author: jkrgr0 -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://docs.2fauth.app/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apt install -y \ - lsb-release \ - nginx -msg_ok "Installed Dependencies" - -PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,mysql,cli" PHP_FPM="YES" setup_php -setup_composer -setup_mariadb - -msg_info "Setting up Database" -DB_NAME=2fauth_db -DB_USER=2fauth -DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) -$STD mariadb -u root -e "CREATE DATABASE $DB_NAME;" -$STD mariadb -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';" -$STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;" -{ - echo "2FAuth Credentials" - echo "Database User: $DB_USER" - echo "Database Password: $DB_PASS" - echo "Database Name: $DB_NAME" -} >>~/2FAuth.creds -msg_ok "Set up Database" - -fetch_and_deploy_gh_release "2fauth" "Bubka/2FAuth" - -msg_info "Setup 2FAuth" -cd /opt/2fauth || exit -cp .env.example .env -IPADDRESS=$(hostname -I | awk '{print $1}') -sed -i -e "s|^APP_URL=.*|APP_URL=http://$IPADDRESS|" \ - -e "s|^DB_CONNECTION=$|DB_CONNECTION=mysql|" \ - -e "s|^DB_DATABASE=$|DB_DATABASE=$DB_NAME|" \ - -e "s|^DB_HOST=$|DB_HOST=127.0.0.1|" \ - -e "s|^DB_PORT=$|DB_PORT=3306|" \ - -e "s|^DB_USERNAME=$|DB_USERNAME=$DB_USER|" \ - -e "s|^DB_PASSWORD=$|DB_PASSWORD=$DB_PASS|" .env -export COMPOSER_ALLOW_SUPERUSER=1 -$STD composer update --no-plugins --no-scripts -$STD composer install --no-dev --prefer-source --no-plugins --no-scripts -$STD php artisan key:generate --force -$STD php artisan migrate:refresh -$STD php artisan passport:install -q -n -$STD php artisan storage:link -$STD php artisan config:cache -chown -R www-data: /opt/2fauth -chmod -R 755 /opt/2fauth -msg_ok "Setup 2fauth" - -msg_info "Configure Service" -cat </etc/nginx/conf.d/2fauth.conf -server { - listen 80; - root /opt/2fauth/public; - server_name $IPADDRESS; - index index.php; - charset utf-8; - - location / { - try_files \$uri \$uri/ /index.php?\$query_string; - } - - location = /favicon.ico { access_log off; log_not_found off; } - location = /robots.txt { access_log off; log_not_found off; } - - error_page 404 /index.php; - - location ~ \.php\$ { - fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; - fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name; - include fastcgi_params; - } - - location ~ /\.(?!well-known).* { - deny all; - } -} -EOF -systemctl reload nginx -msg_ok "Configured Service" - -motd_ssh -customize - -msg_info "Cleaning up" -$STD apt -y autoremove -$STD apt -y autoclean -$STD apt -y clean -msg_ok "Cleaned" diff --git a/src/server/services/autoSyncService.js b/src/server/services/autoSyncService.js index 0d1c30d..6616d80 100644 --- a/src/server/services/autoSyncService.js +++ b/src/server/services/autoSyncService.js @@ -216,11 +216,15 @@ export class AutoSyncService { * Schedule auto-sync cron job */ scheduleAutoSync() { + console.log('scheduleAutoSync called - stopping any existing job first'); this.stopAutoSync(); // Stop any existing job const settings = this.loadSettings(); + console.log('Current settings loaded:', { autoSyncEnabled: settings.autoSyncEnabled }); + if (!settings.autoSyncEnabled) { console.log('Auto-sync is disabled, not scheduling cron job'); + this.isRunning = false; // Ensure we're completely stopped return; } @@ -271,11 +275,17 @@ export class AutoSyncService { // Double-check that autosync is still enabled before executing const currentSettings = this.loadSettings(); if (!currentSettings.autoSyncEnabled) { - console.log('Auto-sync has been disabled, stopping cron job'); + console.log('Auto-sync has been disabled, stopping and destroying cron job'); this.stopAutoSync(); return; } + // Additional check: if cronJob is null, it means it was stopped + if (!this.cronJob) { + console.log('Cron job was stopped, skipping execution'); + return; + } + console.log('Starting scheduled auto-sync...'); await this.executeAutoSync(); }, { @@ -290,13 +300,17 @@ export class AutoSyncService { * Stop auto-sync cron job */ stopAutoSync() { + console.log('stopAutoSync called - cronJob exists:', !!this.cronJob); if (this.cronJob) { + console.log('Stopping and destroying cron job...'); this.cronJob.stop(); + this.cronJob.destroy(); this.cronJob = null; this.isRunning = false; - console.log('Auto-sync cron job stopped'); + console.log('Auto-sync cron job stopped and destroyed'); } else { console.log('No active cron job to stop'); + this.isRunning = false; // Ensure isRunning is false even if no cron job } }