Tema
/
Interneto svetainių serverio dalies kūrimas GO
📖 Teorija

Namų darbas — 403 prieš 404, ir sargas SQL

Augina programą. Suteik savo programai tą patį savininko paviršių arba dirbk su SignFlow.

  1. Pajusk 403 prieš 404. Laikinai pakeisk ownedDocument, kad imtų neapribota užklausa ir grąžintų 403, kai doc.OwnerID != me. Prisijunk kaip vartotojas B ir paprašyk vartotojo A ID — gauni 403, kuris patvirtina, kad ID tikras. Dabar grįžk prie savininkui apribotos užklausos + 404. Parašyk du sakinius, ką užpuolikas sužino kiekvienu atveju.

  2. Pašalink patikrą, palik sargą. Užkomentuok if doc.Status != "draft" šaką DeleteDocument. Perjunk dokumentą į sent ir bandyk jį ištrinti — UI mygtuko nerodys, tad sukurk POST ranka. Patvirtink, kad DeleteDraftDocument praneša nulį ištrintų eilučių ir dokumentas išlieka. Verslo taisyklė išsilaikė be valdiklio patikros, nes ji gyvena WHERE.

  3. Atsisiuntimo vientisumas. Atsisiųsk dokumentą, paleisk sha256sum failui ir palygink su detalės puslapyje rodomu file_hash — jie sutampa. Dabar tiesiogiai suredaguok saugomą failą uploads/ (pridėk baitą) ir atsisiųsk vėl: baitai pasikeitė, bet file_hash ne. Ko reikėtų, kad aptiktum tą pokytį? (Būtent tokią patikrą pastatysi pasirašymo fazėje.)

  4. Neegzistuojantis ID. Paprašyk /documents/not-a-uuid ir /documents/00000000-0000-0000-0000-000000000000. Abu turi būti 404 — vienas todėl, kad parseUUID jį atmeta prieš DB, kitas todėl, kad užklausa negrąžina eilučių. Patvirtink, kad nė vienas nepasiekia serverError (jokio 500 žurnale).

Kita fazė: dokumentai nustoja būti privatūs — kviesi pasirašytojus el. paštu, o dokumentas juda iš draft į sent. Būtent ką tik pastatyta nekintamumo taisyklė daro tą perėjimą saugų.