initialer commit, Grundcode
This commit is contained in:
49
frontend/js/api.js
Normal file
49
frontend/js/api.js
Normal file
@@ -0,0 +1,49 @@
|
||||
const BASE = '/api';
|
||||
|
||||
async function request(method, path, body = null, formEncoded = false) {
|
||||
const token = localStorage.getItem('token');
|
||||
const headers = {};
|
||||
|
||||
if (token) headers['Authorization'] = `Bearer ${token}`;
|
||||
|
||||
let bodyStr = null;
|
||||
if (body !== null) {
|
||||
if (formEncoded) {
|
||||
headers['Content-Type'] = 'application/x-www-form-urlencoded';
|
||||
bodyStr = new URLSearchParams(body).toString();
|
||||
} else {
|
||||
headers['Content-Type'] = 'application/json';
|
||||
bodyStr = JSON.stringify(body);
|
||||
}
|
||||
}
|
||||
|
||||
const res = await fetch(`${BASE}${path}`, { method, headers, body: bodyStr });
|
||||
|
||||
if (res.status === 401) {
|
||||
localStorage.removeItem('token');
|
||||
localStorage.removeItem('user');
|
||||
window.location.reload();
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!res.ok) {
|
||||
const err = await res.json().catch(() => ({ detail: 'Unbekannter Fehler' }));
|
||||
throw new Error(err.detail || `HTTP ${res.status}`);
|
||||
}
|
||||
|
||||
if (res.status === 204) return null;
|
||||
return res.json();
|
||||
}
|
||||
|
||||
export const api = {
|
||||
get: (path) => request('GET', path),
|
||||
post: (path, body) => request('POST', path, body),
|
||||
put: (path, body) => request('PUT', path, body),
|
||||
delete: (path) => request('DELETE', path),
|
||||
|
||||
login: (username, password) =>
|
||||
request('POST', '/auth/token', { username, password }, true),
|
||||
|
||||
setupRequired: () => request('GET', '/auth/setup-required'),
|
||||
setup: (data) => request('POST', '/auth/setup', data),
|
||||
};
|
||||
Reference in New Issue
Block a user