Issue invite configs as subscription URLs with redeem-based lifetime.

Admin picks inbound once, sets duration in days from Get config, and configures the 3x-ui /sub base URL.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
orohi
2026-07-26 01:34:40 +03:00
co-authored by Cursor
parent 7b3d8aac34
commit 7d7094bc38
13 changed files with 347 additions and 148 deletions
+10 -2
View File
@@ -436,6 +436,12 @@
value="{{ settings.sync.xui_url }}" placeholder="https://panel.example.com:2053/path">
<div class="form-hint">{{ _('xui_url_hint') }}</div>
</div>
<div class="form-group">
<label class="form-label">{{ _('xui_sub_url_label') }}</label>
<input type="url" class="form-input" name="xui_sub_url"
value="{{ settings.sync.xui_sub_url or '' }}" placeholder="https://sub.example.com:2096/sub">
<div class="form-hint">{{ _('xui_sub_url_hint') }}</div>
</div>
<div class="form-group">
<label class="form-label">{{ _('xui_api_token_label') }}</label>
<input type="password" class="form-input" name="xui_api_token"
@@ -1028,7 +1034,8 @@
xui_create_conns: syncForm.xui_create_conns.checked,
xui_server_id: parseInt(syncForm.xui_server_id.value || '0'),
xui_protocol: syncForm.xui_protocol.value,
xui_inbound_id: parseInt(syncForm.xui_inbound_id.value || '0')
xui_inbound_id: parseInt(syncForm.xui_inbound_id.value || '0'),
xui_sub_url: (syncForm.xui_sub_url && syncForm.xui_sub_url.value || '').trim()
};
const res = await fetch('/api/settings/xui_sync_now', {
method: 'POST',
@@ -1110,7 +1117,8 @@
xui_create_conns: syncForm.xui_create_conns.checked,
xui_server_id: parseInt(syncForm.xui_server_id.value || '0'),
xui_protocol: syncForm.xui_protocol.value,
xui_inbound_id: parseInt(syncForm.xui_inbound_id.value || '0')
xui_inbound_id: parseInt(syncForm.xui_inbound_id.value || '0'),
xui_sub_url: (syncForm.xui_sub_url && syncForm.xui_sub_url.value || '').trim()
};