Skip to content

formd v0.1.0

Choose a tag to compare

@dc9-dev dc9-dev released this 15 Oct 16:36
· 15 commits to main since this release

formd

Pierwsze wydanie formd: samodzielnego backendu formularzy dla stron statycznych. Jedna binarka w Go, którą instalujesz na tym samym serwerze co stronę. Przyjmuje formularz, waliduje go, zapisuje do SQLite i wysyła powiadomienie oraz potwierdzenie przez Twój SMTP albo Amazon SES. Bez SaaS-ów i bez captchy od firm trzecich.

Strona projektu: https://formd.top

Co nowego

Ocena treści przez Jev (opcjonalna)

  • Każde zgłoszenie może dostać ocenę modelu Jev (TypeSafe, przez OpenRouter): kategorię, prawdopodobieństwo spamu, oszustwa lub phishingu, treści obraźliwej i pilność.
  • Powyżej progu ryzyka (domyślnie 70%) formularz:
    • wstrzymuje zgłoszenie do zatwierdzenia w panelu, razem z mailami (domyślnie),
    • oznacza maile prefiksem [SPAM?],
    • albo odrzuca je bez zapisu.
  • Jev jest pytany dopiero po wszystkich tanich filtrach. Ma dzienny budżet (JEV_DAILY_BUDGET_USD) i timeout 4 s. Gdy nie odpowie, zgłoszenie domyślnie przechodzi bez oceny.
  • Prywatność: funkcja jest wyłączona, dopóki nie ustawisz OPENROUTER_API_KEY i nie włączysz jej w formularzu. Adresy e-mail są zastępowane samą domeną.
  • Treść od użytkownika trafia tylko do opisu sytuacji, w osłoniętych blokach, oznaczona jako niezaufana. Klucz API nie pojawia się w logach.

Nowy panel administracyjny

  • Jasny, lekki wygląd z wyraźnym logo; font Geist wbudowany w binarkę (bez zasobów z zewnątrz).
  • Strona główna z podsumowaniem (zgłoszenia, wstrzymane, nieudane maile, dzisiejszy koszt Jev) i listą formularzy.
  • Zakładka Wstrzymane z przyciskiem „Zatwierdź i wyślij” oraz ocena Jev przy każdym zgłoszeniu.
  • Wyraźny fokus, link „Przejdź do treści”, ruch wyłączany przy prefers-reduced-motion.

Komunikaty formd.js w innych językach

  • Atrybuty data-formd-sending, -success, -error, -network-error nadpisują domyślne polskie komunikaty dla danego formularza.
  • data-formd-server-errors="off" ukrywa szczegółowe komunikaty walidacji z serwera.
  • Bez tych atrybutów działanie się nie zmienia.

HTTPS i reverse proxy

  • Pełne konfiguracje nginx dla dwóch wariantów, z certyfikatem, przekierowaniem 80→443 i HSTS:
    • formularz na tej samej domenie co strona,
    • osobna subdomena, gdy strona leży na GitHub Pages, Netlify albo S3.
  • Ten sam zestaw dla Caddy.
  • W README: dlaczego formularz musi trafiać na HTTPS, kroki z certbotem i komendy curl do sprawdzenia wdrożenia.

Bezpieczeństwo

  • Wymagane Go 1.27.2: usuwa 12 podatności biblioteki standardowej (m.in. w html/template) zgłoszonych przez govulncheck.
  • Zaktualizowane moduły golang.org/x (crypto, net, sys, term).
  • Naprawione logowanie do panelu w przeglądarkach wysyłających Origin: null. Takie żądanie przechodzi tylko wtedy, gdy przeglądarka potwierdzi Sec-Fetch-Site: same-origin.

Co jest w środku

  • API formularzy POST /f/{id}: urlencoded, multipart (bez plików) i JSON. Bez JS przekierowanie 303, z fetch odpowiedź JSON.
  • Ochrona przed masową wysyłką:
    • podpisany, jednorazowy token HMAC z proof-of-work zamiast captchy,
    • minimalny czas wypełnienia liczony na serwerze,
    • limity per IP, per formularz i globalne,
    • limit potwierdzeń na adres na dobę,
    • honeypot, filtr linków i fraz, odrzucanie duplikatów.
  • Sieć: nasłuch tylko na konkretnym IP (0.0.0.0 jest odrzucane), allowlista IP, X-Forwarded-For honorowany wyłącznie od zaufanego proxy.
  • Panel na osobnym porcie (przez tunel SSH):
    • argon2id, sesje po stronie serwera, CSRF,
    • SameSite=Strict, ochrona przed DNS rebinding, ścisły CSP,
    • dziennik zdarzeń.
  • Kolejka maili: zgłoszenie i maile zapisują się w jednej transakcji. Ponowienia od 1 min do 24 h, globalny limit maili na godzinę.
  • Wdrożenie: utwardzony unit systemd, install.sh, filtr fail2ban, retencja danych w dniach.

Instalacja

# Linux x86-64 (dla ARM pobierz formd-linux-arm64)
curl -LO https://github.com/dc9-dev/formd/releases/download/v0.1.0/formd-linux-amd64
curl -LO https://github.com/dc9-dev/formd/releases/download/v0.1.0/SHA256SUMS
sha256sum --check --ignore-missing SHA256SUMS
sudo install -m 0755 formd-linux-amd64 /usr/local/bin/formd
formd version   # v0.1.0

Albo ze źródeł: go install github.com/dc9-dev/formd/cmd/formd@v0.1.0 (Go 1.27.2+).

Dalej: Szybki start i HTTPS i reverse proxy.

Aktualizacja

Schemat bazy migruje się sam przy starcie (dochodzą kolumny statusu i oceny zgłoszeń oraz tabela kosztów Jev). Przed aktualizacją zrób kopię formd.db.

Pliki

Plik Platforma
formd-linux-amd64 Linux x86-64, statycznie linkowana
formd-linux-arm64 Linux ARM64, statycznie linkowana
SHA256SUMS sumy kontrolne

Zbudowane z commita cd96ade przez Go 1.27.2 (CGO_ENABLED=0, -trimpath).