🚀 Avaldamine ja turvalisus
Kuidas kood jõuab live'i, kus on seadistus ja saladused, mida kontrollida enne live'i ja mis on auditi järgi veel tegemata.
🚀 Veebisait: GitHub → FTPS
Iga main-i merge, mis muudab site/ kausta, laeb failid FTPS-iga serverisse (GitHub Actions „Deploy site (FTPS)“, AUTO_DEPLOY=true). Enne deployd: ühiktestid, JS-süntaks, saladuste skann (service_role võti ja uue formaadi salajane võti eesliitega „sb_secret“ ja alakriips), keelatud failid, DEV-lippude kontroll.
- Secret: üks repo secret
DEPLOY(FTP_SERVER / FTP_USERNAME / FTP_PASSWORD). Parool ainult seal. - Kaitstud failid: deploy ei kustuta
elkdata_redirect_*faile (HTTPS ja www ümbersuunamine). - Käsitsi: Actions → Run workflow → inspect / dry-run / deploy.
- Tagasipööramine:
git revert+ uus deploy (~3 min). Ühe nupuga tagasipööramist ei ole.
⛔ Testkeskkonda ei ole: iga merge läheb klientideni. Enne suuremaid muudatusi testi Playwrightiga stub-andmetega või Supabase'i harus. Staging on auditi tegevuskavas (nädal 3–4).
🗄️ Supabase: andmebaas, Edge Functionid, hoidlad
- Migratsioonid on repos
supabase/migrations/(dokumendina). Rakendatud on need käsitsi (MCP / SQL editor); CI neid ei rakenda. Reegel: üks DDL-grupp korraga;delete/dropsisaldavad laused vajavad eraldi kinnitust. - Edge Functionid (32): lähtekood
supabase/functions/<nimi>/index.ts; deploy Supabase'i kaudu.verify_jwt=falseon tahtlik välitöötajate ja avalike funktsioonide puhul — autoriseerimine on funktsiooni sees (seadme token, pääsukood, importtoken). - Secretid (Supabase → Edge Functions → Secrets):
ANTHROPIC_API_KEY(AI),MESSENTE_USER/MESSENTE_PASS/SMS_SENDER(SMS; puudumisel demorežiim),SMS_MODE,SMS_EVENT_DAILY_MAX. Service_role ja anon võti on keskkonnas automaatselt. - Hoidlad:
images(avalik, ainult pildid),traffic-docs(privaatne, ürituse õigus),portal-assets(privaatne, omanik; allkirjastatud link 1 h). - Seaded andmebaasis (Owner Console → Seaded): AI lüliti, ilmaallikad, riiklik GTFS aadress.
- Varukoopiad: Pro plaan = päevane koopia 7 päeva. PITR ja taasteproov on tegemata (audit K2).
⚙️ config.js
| Väli | Selgitus |
|---|---|
SUPABASE_URL, SUPABASE_KEY | Projekt ja publishable võti (RLS piirab). Service_role ei tohi kunagi frontendis olla. |
FN_BASE | Edge Functionite aadress. |
GOOGLE_MAPS_KEY | Brauseri võti — Google Cloudis peab olema referrer-piirang ja kvoodihäire. |
TZ, ORG_NAME, ORG_LEGAL, SUPPORT_PHONE | Ajavöönd ja platvormi omaniku andmed (ainult omaniku lehed; ürituse lehed kasutavad ürituse telefone). |
FLAGS.DEV_BYPASS_GEO / _TIME | Arendaja möödapääsud; live'is false. CI keeldub deployst, kui true. |
MAP_TYPES, PAGE_LAYERS | Kaardiobjektide tüübid (KML märksõnad, ikoonid) ja avaliku lehe kihid vahelehtede kaupa. |
🧱 Koodi ülesehitus
ui.css+core/— jagatud tuum: Supabase klient,html``automaatse escapimisega (kasutaja andmed ei lähe kunagi otse innerHTML-i), ajad, i18n, kest (Abi, ülesanded, otsing), helpdesk, AI-vidin, Excel (A4 generaator ja lugeja).- Moodulid kaustades:
admin/,staff/,event/,console/,playbook/,volunteer/,transport/,partners/,pt/,board/,courseload/,project/,briefing/,liiklusinfo/,scanner/,account/,dashboard/. - Vana koodiosa (
staff.html,admin.htmlosad,regulators.html,traffic.html) kirjutab HTML-i käsitsi escapimisega — muudatuste puhul kontrolli XSS-i. - Testid:
node --test tests/*.mjs(puhas loogika); UI kontroll Playwrightiga stubidega (/opt/pw-browsers/chromium). - Dokumendid:
CHANGELOG.md(iga muudatus),docs/HANDOFF.md,docs/ROADMAP.md,docs/AUDIT-*.md.
🔐 Turvamudel lühidalt
- RLS kõigil tabelitel; anon näeb ainult avaldatud ürituste avalikke veerge.
- Õigused serveris:
has_event_permission(event, 'event.view' | 'event.edit' | …),is_super_admin(); omaniku RPC-d kontrollivad rolli. - Lingid ilma kontota (partner, amet, pass, seadme token, importtoken): andmebaasis ainult sha256 räsi; tühistamine asendab räsi.
- Sageduspiirangud Edge Functionites (vestlus, intsident, SMS, kontaktivorm, avalik vestlus).
- Tegevuslogi (
audit_logs) 43 tabelil, sh rollimuudatused ja arved.
✅ Kontroll enne live'i (iga ürituse ees)
- config.js FLAGS mõlemad false; Google Mapsi võtme piirang ja kvoot kontrollitud
- Supabase'i secretid olemas: AI (kui kasutatakse), SMS (muidu demo), GTFS aadress
- Üritus: algus ja lõpp, organisatsioon, staabi telefon, infotelefonid, avaldatud
- Reguleerijad määratud, QR-id ja infolehed prinditud; pääsukoodid loodud
- Avalik leht kontrollitud telefonis (ET/EN); kontaktivorm testitud; takso infoleht saadetud
- Partnerite ja ametite lingid saadetud; ÜT muudatused kinnitatud ja avalikuks märgitud
- Staap: heli lubatud, võistluspäeva režiim, suur ekraan üleval; infotöötajal liiklusinfo leht
- Varukanalid: telefonid, prinditud juhendid
🧾 Auditi järgi tegemata (16.10.2026)
- 🔴 MFA admin-kontodele ja teine omanikukonto · PITR ja taasteproov · staging · monitooring ja häired · tingimused, privaatsuspoliitika, DPA, säilitustähtajad.
- 🟠
internal/parool · HTTP turvapäised (.htaccess) · teekide pinnimine ja SRI, xlsx uuendus · SMS ja e-posti teenus (SPF/DKIM/DMARC) · atomaarne deploy või staatiline hosting · teine admin GitHubis ja Supabase'is.
📌 Täielik nimekiri, põhjendused ja tegevuskava:
docs/AUDIT-2026-10-16.md (repos ja omaniku portaalis).Event Mobility Partners · Safe Infra OÜ · +372 511 3525