Template
Allow re-copying invite configs and end-user server choice (v3.0.1).
Invite pages keep created configs for repeat copy; guest/invite can pick a server when enabled. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+28
-1
@@ -29,6 +29,10 @@
|
||||
<div id="connectionsList">
|
||||
{% if allow_create %}
|
||||
<div class="share-create">
|
||||
<div id="guestServerPickWrap" class="form-group" style="text-align:left; margin-bottom:var(--space-sm); display:none;">
|
||||
<label class="form-label">{{ _('choose_server') }}</label>
|
||||
<select class="form-select" id="guestServerPick"></select>
|
||||
</div>
|
||||
<button class="btn btn-secondary share-btn-lg" type="button" onclick="createGuestConfig()" id="createBtn">
|
||||
<span id="createBtnText">{{ _('guest_get_config') }}</span>
|
||||
<div class="spinner hidden" id="createSpinner"></div>
|
||||
@@ -178,6 +182,23 @@
|
||||
const data = await res.json();
|
||||
document.getElementById('loadingState').classList.add('hidden');
|
||||
|
||||
const wrap = document.getElementById('guestServerPickWrap');
|
||||
const sel = document.getElementById('guestServerPick');
|
||||
if (wrap && sel && data.allow_server_choice && (data.servers || []).length) {
|
||||
const prev = sel.value;
|
||||
sel.innerHTML = '';
|
||||
(data.servers || []).forEach(s => {
|
||||
const opt = document.createElement('option');
|
||||
opt.value = String(s.id);
|
||||
opt.textContent = s.host ? `${s.name} (${s.host})` : s.name;
|
||||
if (String(s.id) === String(prev) || String(s.id) === String(data.default_server_id)) opt.selected = true;
|
||||
sel.appendChild(opt);
|
||||
});
|
||||
wrap.style.display = '';
|
||||
} else if (wrap) {
|
||||
wrap.style.display = 'none';
|
||||
}
|
||||
|
||||
if (!data.connections || data.connections.length === 0) {
|
||||
document.getElementById('emptyState').classList.remove('hidden');
|
||||
document.getElementById('connectionsGrid').classList.add('hidden');
|
||||
@@ -221,10 +242,16 @@
|
||||
text.classList.add('hidden');
|
||||
spinner.classList.remove('hidden');
|
||||
try {
|
||||
const body = { name: 'Guest VPN' };
|
||||
const wrap = document.getElementById('guestServerPickWrap');
|
||||
const sel = document.getElementById('guestServerPick');
|
||||
if (wrap && wrap.style.display !== 'none' && sel && sel.value !== '') {
|
||||
body.server_id = parseInt(sel.value, 10);
|
||||
}
|
||||
const res = await fetch(`/api/guest/${TOKEN}/create`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ name: 'Guest VPN' })
|
||||
body: JSON.stringify(body)
|
||||
});
|
||||
const data = await res.json();
|
||||
if (!res.ok || data.error) throw new Error(data.error || _('error'));
|
||||
|
||||
Reference in New Issue
Block a user