Bug bash fixes: special-file reads, per-client lockout, prefs validation, security headers, kernel-thread guard, login feedback, error text; plus journal-quiet sudoers + journal groups, upload overwrite guard, machines pattern, dnf freshness, cron/services speed, clean version
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
57c58ebffb
commit
27f9665606
+8
-4
@@ -1,4 +1,4 @@
|
||||
export class Unauthenticated extends Error {}
|
||||
export class Unauthenticated extends Error { constructor(msg = 'unauthenticated') { super(msg) } }
|
||||
|
||||
// Which machine the console is looking at. '' is this host; otherwise every /api/… call
|
||||
// is rewritten to /api/nodes/<name>/… and the hub proxies it. Hub-only calls (login,
|
||||
@@ -28,7 +28,11 @@ async function req<T>(method: string, path: string, body?: unknown, local = fals
|
||||
throw new Error('network error')
|
||||
}
|
||||
track(-1)
|
||||
if (r.status === 401) throw new Unauthenticated()
|
||||
if (r.status === 401) {
|
||||
let msg = 'unauthenticated'
|
||||
try { msg = (await r.json()).error ?? msg } catch { /* ignore */ }
|
||||
throw new Unauthenticated(msg)
|
||||
}
|
||||
if (!r.ok) {
|
||||
let msg = r.statusText
|
||||
try { msg = (await r.json()).error ?? msg } catch { /* ignore */ }
|
||||
@@ -111,9 +115,9 @@ export const api = {
|
||||
if (r.status === 401) throw new Unauthenticated()
|
||||
if (!r.ok) { let m = r.statusText; try { m = (await r.json()).error ?? m } catch { /* */ } throw new Error(m) }
|
||||
},
|
||||
fileUpload: (dir: string, file: File, sudo: boolean, onProgress: (pct: number) => void) => new Promise<void>((resolve, reject) => {
|
||||
fileUpload: (dir: string, file: File, sudo: boolean, onProgress: (pct: number) => void, overwrite = false) => new Promise<void>((resolve, reject) => {
|
||||
const x = new XMLHttpRequest()
|
||||
x.open('PUT', apiPath(`/api/files/upload?${q(dir, sudo)}&name=${encodeURIComponent(file.name)}`))
|
||||
x.open('PUT', apiPath(`/api/files/upload?${q(dir, sudo)}&name=${encodeURIComponent(file.name)}${overwrite ? '&overwrite=1' : ''}`))
|
||||
x.upload.onprogress = (e) => { if (e.lengthComputable) onProgress(Math.round((e.loaded / e.total) * 100)) }
|
||||
x.onload = () => { if (x.status >= 200 && x.status < 300) resolve(); else { let m = x.statusText; try { m = JSON.parse(x.responseText).error ?? m } catch { /* */ } reject(new Error(m)) } }
|
||||
x.onerror = () => reject(new Error('network error'))
|
||||
|
||||
Reference in New Issue
Block a user