Fix: CORS-Preflight bei Auth-Uploads - Token als URL-Parameter statt Header

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Christian Heubaum
2026-04-19 13:23:31 +02:00
parent 1138310639
commit cefa4ca38f
2 changed files with 11 additions and 9 deletions

View File

@@ -243,6 +243,7 @@ const GITEA_RAW = 'http://72.60.134.73:3000/api/v1/repos/cheubaum/BNI-Vorstellun
const GITEA_API = 'http://72.60.134.73:3000/api/v1/repos/cheubaum/BNI-Vorstellungsrunde';
const CHAPTER_CONFIG_KEY = 'bni-active-chapter';
function giteaUrl(path) { return `${GITEA_RAW}/${path}?ref=main`; }
function giteaAuthUrl(path, token) { return `${GITEA_API}/contents/${path}?token=${encodeURIComponent(token)}`; }
// ============================================================
// CHAPTER CONFIG
@@ -530,11 +531,11 @@ async function uploadSvToGitea() {
const path = `chapters/${activeChapter.code}/stammvertreter.json`;
try {
let sha = null;
const shaRes = await fetch(`${GITEA_API}/contents/${path}`, { headers: { Authorization: `token ${token}` } });
const shaRes = await fetch(giteaAuthUrl(path, token));
if (shaRes.ok) sha = (await shaRes.json()).sha;
const body = { message: 'Stammvertreter aktualisiert', content };
if (sha) body.sha = sha;
const res = await fetch(`${GITEA_API}/contents/${path}`, { method: sha?'PUT':'POST', headers: { Authorization:`token ${token}`, 'Content-Type':'application/json' }, body: JSON.stringify(body) });
const res = await fetch(giteaAuthUrl(path, token), { method: sha?'PUT':'POST', headers: { 'Content-Type':'application/json' }, body: JSON.stringify(body) });
if (res.ok) { statusEl.textContent = `✓ ${list.length} Stammvertreter gesichert`; statusEl.style.color = 'var(--success)'; }
else { statusEl.textContent = 'Fehler beim Upload.'; statusEl.style.color = '#dc2626'; }
} catch(e) { statusEl.textContent = 'Verbindungsfehler.'; statusEl.style.color = '#dc2626'; }
@@ -620,11 +621,11 @@ async function uploadMembersAdmin() {
const path = `chapters/${activeChapter.code}/members.json`;
try {
let sha = null;
const shaRes = await fetch(`${GITEA_API}/contents/${path}`, { headers: { Authorization:`token ${token}` } });
const shaRes = await fetch(giteaAuthUrl(path, token));
if (shaRes.ok) sha = (await shaRes.json()).sha;
const body = { message:`Mitglieder aktualisiert ${new Date().toLocaleDateString('de')}`, content };
if (sha) body.sha = sha;
const res = await fetch(`${GITEA_API}/contents/${path}`, { method:sha?'PUT':'POST', headers:{Authorization:`token ${token}`,'Content-Type':'application/json'}, body:JSON.stringify(body) });
const res = await fetch(giteaAuthUrl(path, token), { method:sha?'PUT':'POST', headers:{'Content-Type':'application/json'}, body:JSON.stringify(body) });
if (res.ok) { statusEl.textContent = `✓ ${members.length} Mitglieder hochgeladen`; statusEl.style.color = 'var(--success)'; }
else { statusEl.textContent = 'Fehler beim Upload.'; statusEl.style.color = '#dc2626'; }
} catch(e) { statusEl.textContent = 'Verbindungsfehler.'; statusEl.style.color = '#dc2626'; }
@@ -684,11 +685,11 @@ async function pushVersionUpdate() {
const content = btoa(unescape(encodeURIComponent(JSON.stringify({ version, notes }, null, 2))));
try {
let sha = null;
const shaRes = await fetch(`${GITEA_API}/contents/version.json`, { headers:{Authorization:`token ${token}`} });
const shaRes = await fetch(giteaAuthUrl('version.json', token));
if (shaRes.ok) sha = (await shaRes.json()).sha;
const body = { message:`Version ${version}`, content };
if (sha) body.sha = sha;
const res = await fetch(`${GITEA_API}/contents/version.json`, { method:sha?'PUT':'POST', headers:{Authorization:`token ${token}`,'Content-Type':'application/json'}, body:JSON.stringify(body) });
const res = await fetch(giteaAuthUrl('version.json', token), { method:sha?'PUT':'POST', headers:{'Content-Type':'application/json'}, body:JSON.stringify(body) });
if (res.ok) {
statusEl.textContent = `✓ Version ${version} gepusht – alle Nutzer sehen das Update-Banner`;
statusEl.style.color = 'var(--success)';

View File

@@ -1715,6 +1715,7 @@ const APP_VERSION = '1.1.0';
const GITEA_RAW = 'http://72.60.134.73:3000/api/v1/repos/cheubaum/BNI-Vorstellungsrunde/raw';
const GITEA_API = 'http://72.60.134.73:3000/api/v1/repos/cheubaum/BNI-Vorstellungsrunde';
function giteaUrl(path) { return `${GITEA_RAW}/${path}?ref=main`; }
function giteaAuthUrl(path, token) { return `${GITEA_API}/contents/${path}?token=${encodeURIComponent(token)}`; }
const CHAPTER_CONFIG_KEY = 'bni-active-chapter';
function loadChapterConfig() {
@@ -4409,15 +4410,15 @@ async function uploadMembersToGitea() {
try {
// Get current SHA
let sha = null;
const shaRes = await fetch(`${GITEA_API}/contents/${path}`, { headers: { 'Authorization': `token ${token}` } });
const shaRes = await fetch(giteaAuthUrl(path, token));
if (shaRes.ok) sha = (await shaRes.json()).sha;
const body = { message: `Mitglieder aktualisiert ${new Date().toLocaleDateString('de')}`, content };
if (sha) body.sha = sha;
const res = await fetch(`${GITEA_API}/contents/${path}`, {
const res = await fetch(giteaAuthUrl(path, token), {
method: sha ? 'PUT' : 'POST',
headers: { 'Authorization': `token ${token}`, 'Content-Type': 'application/json' },
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(body)
});
if (res.ok) {