Files
Jonathan Miller 9975d92ca2
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 1s
Universal: Auto Version Bump / Version Bump (push) Successful in 5s
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
feat: web cron trigger for shared hosting without crontab
Add URL-based backup trigger for external cron services:
  index.php?mokojoombackup_cron=SECRET&profile_id=1

- System plugin intercepts onAfterInitialise (before auth)
- Secret word, enable toggle, and IP whitelist in component config
- Timing-safe secret comparison with hash_equals
- Returns JSON response with success/failure and timestamp

Also fix: INSERT IGNORE for default profile to prevent duplicate key
error when updating an existing installation.

Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-06 15:37:19 -05:00

141 lines
3.8 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<!--
* @package MokoJoomBackup
* @subpackage com_mokojoombackup
* @author Moko Consulting <hello@mokoconsulting.tech>
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
* @license GNU General Public License version 3 or later; see LICENSE
-->
<config>
<fieldset name="general" label="COM_MOKOJOOMBACKUP_CONFIG_GENERAL">
<field
name="default_backup_dir"
type="FolderPicker"
label="COM_MOKOJOOMBACKUP_CONFIG_DEFAULT_BACKUP_DIR"
description="COM_MOKOJOOMBACKUP_CONFIG_DEFAULT_BACKUP_DIR_DESC"
default="administrator/components/com_mokojoombackup/backups"
addfieldprefix="Joomla\Component\MokoJoomBackup\Administrator\Field"
/>
<field
name="default_profile"
type="sql"
label="COM_MOKOJOOMBACKUP_CONFIG_DEFAULT_PROFILE"
description="COM_MOKOJOOMBACKUP_CONFIG_DEFAULT_PROFILE_DESC"
query="SELECT id AS value, title AS text FROM #__mokojoombackup_profiles WHERE published = 1 ORDER BY ordering ASC"
default="1"
>
<option value="1">Default Backup Profile</option>
</field>
<field
name="show_update_notice"
type="radio"
label="COM_MOKOJOOMBACKUP_CONFIG_SHOW_UPDATE_NOTICE"
description="COM_MOKOJOOMBACKUP_CONFIG_SHOW_UPDATE_NOTICE_DESC"
default="1"
class="btn-group"
>
<option value="1">JYES</option>
<option value="0">JNO</option>
</field>
</fieldset>
<fieldset name="webcron" label="COM_MOKOJOOMBACKUP_CONFIG_WEBCRON">
<field
name="webcron_secret"
type="text"
label="COM_MOKOJOOMBACKUP_CONFIG_WEBCRON_SECRET"
description="COM_MOKOJOOMBACKUP_CONFIG_WEBCRON_SECRET_DESC"
default=""
filter="string"
maxlength="64"
/>
<field
name="webcron_enabled"
type="radio"
label="COM_MOKOJOOMBACKUP_CONFIG_WEBCRON_ENABLED"
description="COM_MOKOJOOMBACKUP_CONFIG_WEBCRON_ENABLED_DESC"
default="0"
class="btn-group"
>
<option value="1">JYES</option>
<option value="0">JNO</option>
</field>
<field
name="webcron_ip_whitelist"
type="text"
label="COM_MOKOJOOMBACKUP_CONFIG_WEBCRON_IP"
description="COM_MOKOJOOMBACKUP_CONFIG_WEBCRON_IP_DESC"
default=""
filter="string"
hint="Leave blank to allow any IP"
/>
</fieldset>
<fieldset name="cleanup" label="COM_MOKOJOOMBACKUP_CONFIG_CLEANUP">
<field
name="max_age_days"
type="number"
label="COM_MOKOJOOMBACKUP_CONFIG_MAX_AGE"
description="COM_MOKOJOOMBACKUP_CONFIG_MAX_AGE_DESC"
default="30"
min="1"
max="365"
/>
<field
name="max_backups"
type="number"
label="COM_MOKOJOOMBACKUP_CONFIG_MAX_BACKUPS"
description="COM_MOKOJOOMBACKUP_CONFIG_MAX_BACKUPS_DESC"
default="10"
min="1"
max="100"
/>
</fieldset>
<fieldset name="notifications" label="COM_MOKOJOOMBACKUP_CONFIG_NOTIFICATIONS">
<field
name="notify_email"
type="text"
label="COM_MOKOJOOMBACKUP_CONFIG_NOTIFY_EMAIL"
description="COM_MOKOJOOMBACKUP_CONFIG_NOTIFY_EMAIL_DESC"
default=""
filter="string"
/>
<field
name="notify_on_success"
type="radio"
label="COM_MOKOJOOMBACKUP_CONFIG_NOTIFY_SUCCESS"
description="COM_MOKOJOOMBACKUP_CONFIG_NOTIFY_SUCCESS_DESC"
default="0"
class="btn-group"
>
<option value="1">JYES</option>
<option value="0">JNO</option>
</field>
<field
name="notify_on_failure"
type="radio"
label="COM_MOKOJOOMBACKUP_CONFIG_NOTIFY_FAILURE"
description="COM_MOKOJOOMBACKUP_CONFIG_NOTIFY_FAILURE_DESC"
default="1"
class="btn-group"
>
<option value="1">JYES</option>
<option value="0">JNO</option>
</field>
</fieldset>
<fieldset name="permissions" label="JCONFIG_PERMISSIONS_LABEL"
description="JCONFIG_PERMISSIONS_DESC">
<field
name="rules"
type="rules"
label="JCONFIG_PERMISSIONS_LABEL"
filter="rules"
validate="rules"
component="com_mokojoombackup"
section="component"
/>
</fieldset>
</config>