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

Namų darbas — pasenink žetoną, pamatyk slog klaidą

Padaryk savą.

  1. Pasenink žetoną ranka. Paprašyk atstatymo, bet prieš atidarydamas nuorodą paleisk UPDATE password_reset_tokens SET expires_at = now() - interval '1 hour';. Atidaryk nuorodą → invalid puslapis. GetValidPasswordReset expires_at > now() sąlyga atliko darbą. Atstatymo žetonai negyvena amžinai — pavogta nuoroda po valandos bevertė.

  2. Pamatyk slog klaidą pats. ConsoleSender.Send laikinai pakeisk fmt.Fprintf ciklą į s.log.Info("email", "body", msg.Text) (reikėtų paduoti registratorių). Sukelk atstatymą ir pažiūrėk į log'ą: visas laiškas — su nuoroda — viena eilutė su raidiniais \n, o URL nepaspaudžiamas ir sunkiai kopijuojamas. Štai kodėl konsolės siuntėjas rašo tiesiai į stdout. Grąžink.

  3. Prijunk tikrą el. paštą (nebūtina). Gauk nemokamą Resend API raktą, tada paleisk EMAIL_SENDER=resend RESEND_API_KEY=... go run ./cmd/signflow. Paleidimo log'as persijungia į „using Resend sender", o atstatymas tikrai atsiunčia laišką. Ta pati Sender sąsaja, kita realizacija — apdorotojo kodas visai nepasikeitė. Persijunk atgal į konsolę (pašalink kintamuosius), ir srautas vis tiek veikia, be rakto.

Kur einam toliau — dokumentų fazė. Autentifikacija baigta: registracija, prisijungimas, atsijungimas, slaptažodžio atstatymas, sesijos, CSRF — visa tikra, viskas išbandyta. SignFlow dabar žino, kas yra kiekviena užklausa. Kita fazė duoda tiems vartotojams ką veikti: įkelti dokumentą. Pastatysi storage.Store sąsają (ta pati dev-realizacijos/prod-realizacijos siūlė kaip el. paštas), srautu rašysi įkeltą failą į diską maišydamas jį SHA-256 tuo pačiu perėjimu, ir pastatysi savininko dokumentų skydelį, kur svetimo dokumento ID grąžina 404, ne 403. Maiša, kurią užfiksuoji įkeliant, yra tai, ką 11 pamokos parašai pririš — ir ką klastojimo aptikimo demonstracija atskleis.