Files
MC_Report/public/js/pages/settings-page.js
canglan 1d669fd1d0 feat: skin site UUID lookup - auto-fetch UUID from player name
- GET /settings/uuid-lookup?site=&name= : proxy Yggdrasil API
  (POST {site}/api/yggdrasil/api/profiles/minecraft), SSRF guard,
  10s timeout, name regex, UUID formatting (with dashes)
- GET /settings/skin-site : public read of configured skin site
- settings page: 皮肤站地址 config
- bind identity modals (player dashboard + admin users): 获取UUID button,
  auto-fill site from settings, auto-fill UID from lookup
- verified live against littleskin.cn (Steve -> df273bda...)
- API docs updated
2026-08-17 02:05:21 +08:00

68 lines
4.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const SettingsPage = {
async render() { return '<div class="loading"><i class="fas fa-spinner"></i></div>'; },
async mount() {
document.getElementById('page-title').textContent = '系统设置';
document.getElementById('page-actions').innerHTML = '';
try {
const settings = await API.get('/settings/settings');
const ct = document.getElementById('page-content');
ct.innerHTML = `
<div class="card"><div class="card-h">站点设置</div><div class="card-b">
<form id="site-form">
<div class="grid-2"><div class="form-group"><label>站点名称</label><input id="s-name" value="${U.esc(settings.site_name?.value||'')}"></div>
<div class="form-group"><label>站点地址</label><input id="s-url" value="${U.esc(settings.site_url?.value||'')}"></div></div>
<div class="grid-2"><div class="form-group"><label>页尾版权</label><input id="s-copyright" value="${U.esc(settings.copyright?.value||'')}" placeholder="&copy; 2024 MC举报系统"></div>
<div class="form-group"><label>ICP备案号</label><input id="s-icp" value="${U.esc(settings.icp?.value||'')}" placeholder="沪ICP备XXXXXXXX号"></div></div>
<div class="form-group"><label>皮肤站地址</label><input id="s-skin-site" value="${U.esc(settings.skin_site?.value||'')}" placeholder="https://littleskin.cn用于绑定皮肤站身份时自动查询UUID"></div>
<button type="submit" class="btn btn-p btn-sm"><i class="fas fa-save"></i> 保存站点设置</button>
</form>
</div></div>
<div class="card"><div class="card-h">SMTP 邮件设置</div><div class="card-b">
<form id="smtp-form">
<div class="grid-2"><div class="form-group"><label>SMTP服务器</label><input id="s-host" value="${U.esc(settings.smtp_host?.value||'')}"></div>
<div class="form-group"><label>端口</label><input id="s-port" value="${U.esc(settings.smtp_port?.value||'587')}"></div></div>
<div class="grid-2"><div class="form-group"><label>用户名</label><input id="s-user" value="${U.esc(settings.smtp_user?.value||'')}"></div>
<div class="form-group"><label>密码</label><input type="password" id="s-pass" value="${U.esc(settings.smtp_pass?.value||'')}"></div></div>
<div class="grid-2"><div class="form-group"><label>发件地址</label><input id="s-from" value="${U.esc(settings.smtp_from?.value||'')}"></div>
<div class="form-group"><label>加密方式</label><select id="s-secure"><option value="0" ${settings.smtp_secure?.value!=='1'?'selected':''}>STARTTLS (587)</option><option value="1" ${settings.smtp_secure?.value==='1'?'selected':''}>SSL/TLS (465)</option></select></div></div>
<button type="submit" class="btn btn-p btn-sm"><i class="fas fa-save"></i> 保存SMTP设置</button>
</form>
</div></div>
`;
document.getElementById('site-form').onsubmit = async e => {
e.preventDefault();
try {
await API.put('/settings/settings', {
site_name: {value: document.getElementById('s-name').value, label:'站点名称'},
site_url: {value: document.getElementById('s-url').value, label:'站点地址'},
copyright: {value: document.getElementById('s-copyright').value, label:'页尾版权'},
icp: {value: document.getElementById('s-icp').value, label:'ICP备案号'},
skin_site: {value: document.getElementById('s-skin-site').value.trim(), label:'皮肤站地址'},
});
alert('已保存');
} catch (ex) { alert(ex.message); }
};
document.getElementById('smtp-form').onsubmit = async e => {
e.preventDefault();
try {
await API.put('/settings/settings', {
smtp_host: {value: document.getElementById('s-host').value, label:'SMTP服务器'},
smtp_port: {value: document.getElementById('s-port').value, label:'SMTP端口'},
smtp_secure: {value: document.getElementById('s-secure').value, label:'SSL'},
smtp_user: {value: document.getElementById('s-user').value, label:'SMTP用户名'},
smtp_pass: {value: document.getElementById('s-pass').value, label:'SMTP密码'},
smtp_from: {value: document.getElementById('s-from').value, label:'发件地址'},
});
alert('已保存');
} catch (ex) { alert(ex.message); }
};
} catch (e) {
document.getElementById('page-content').innerHTML = `<div class="alert alert-e">${e.message}</div>`;
}
}
};