Files
Cristian Laporta 4257c96ec5 2026.10.07.3: salvataggi online cifrati end-to-end
- Salvataggi online in stile PS Plus (savesync.c): dopo ogni partita i
  salvataggi cambiati vanno online da soli; si ripristinano sulla stessa o su
  un'altra console da Impostazioni › Home e giochi o dalle opzioni del gioco.
  Ultime 3 versioni per gioco, 2 GB per account.
- Cifratura sulla console (XChaCha20-Poly1305, blocchi da 1 MB) con una chiave
  casuale; il server conserva solo la chiave chiusa con la parola d'ordine
  (Argon2id). Lettura da una copia montata dell'immagine; ripristino solo in
  salvataggi già creati, con param.sfo locale, percorsi controllati e
  «Annulla l'ultimo ripristino».
- Server (migrazione 017, endpoints/saves.js): blocchi opachi mai aperti,
  pezzi da 8 MB esatti con SHA-256, controllo dell'intestazione, quota e
  limiti di concorrenza per account, tetto totale e spazio minimo libero,
  nomi casuali scelti dal server, proprietà controllata a ogni richiesta,
  download octet-stream con nosniff e CSP sandbox, pulizia dei caricamenti a
  metà dopo 2 ore. 48 controlli nuovi.
- Web app: pagina Salvataggi online (elenco, spazio usato, elimina una versione).
2026-10-07 14:34:23 +02:00

30 lines
1.2 KiB
Docker

# Api di Omega. Oltre alle dipendenze npm servono ffmpeg (avatar e copertine)
# e JxrDecApp per le catture PS5 in JPEG XR: Alpine non lo pacchettizza, quindi
# si compila da jxrlib nel primo stadio.
FROM node:22-alpine AS jxr
RUN apk add --no-cache git build-base \
&& git clone -q --depth 1 https://github.com/4creators/jxrlib /j \
&& cd /j && make -j4 CFLAGS="-O2 -w -fPIC -D__ANSI__ -DDISABLE_PERF_MEASUREMENT -std=gnu89 -fpermissive -I. -Icommon/include -Iimage/sys -Ijxrgluelib -Ijxrtestlib" \
&& cp build/JxrDecApp /JxrDecApp
FROM node:22-alpine
# tar GNU per l'archivio del sorgente servito su /source
RUN apk add --no-cache ffmpeg tar
COPY --from=jxr /JxrDecApp /usr/local/bin/JxrDecApp
WORKDIR /app
COPY package.json package-lock.json* ./
RUN if [ -f package-lock.json ]; then npm ci --omit=dev; else npm install --omit=dev; fi \
&& npm cache clean --force
COPY config ./config
COPY migrations ./migrations
COPY src ./src
COPY store-assets ./store-assets
COPY admin-ui ./admin-ui
# web app per telefono e PC (/app)
COPY webapp ./webapp
# foto e video caricati dagli utenti (volume media-data) e salvataggi cifrati (saves-data)
RUN mkdir -p /app/media /app/saves && chown node:node /app/media /app/saves
USER node
EXPOSE 8080
CMD ["node", "src/server.js"]