Repository navigation
formd v0.1.0
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_KEYi 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-errornadpisują 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 przezgovulncheck. - 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 potwierdziSec-Fetch-Site: same-origin.
Co jest w środku
- API formularzy
POST /f/{id}: urlencoded, multipart (bez plików) i JSON. Bez JS przekierowanie 303, zfetchodpowiedź 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.0jest odrzucane), allowlista IP,X-Forwarded-Forhonorowany 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.0Albo 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).
