Pihid.net stiilis anonüümsete pihtimuste veebileht
See on kuvatõmmise järgi loodud iseseisev PHP-veebirakendus: puidumustriga päis, ringmustriga taust, tumeda sisuga leht ja parempoolne menüü.
Funktsioonid
- Anonüümsete pihtimuste lisamine ja kategooriad
- Uued pihtimused lähevad esmalt modereerimisjärjekorda ega ole avalikkusele nähtavad enne administraatori avaldamist
- Administraator näeb pealehel avaldamata pihtimusi ja saab igaühe juurest valida nupu „Avalda”; avaldatud pihtimus ilmub seejärel kõigile külalistele
- Kui ootel pihtimusi on vähemalt üks, kuvatakse parempoolses tulbas kategooriate all punane teade „Pihtimusi ootel N”
- Otsing ning juhuslike/populaarsete pihtimuste vaated
- Kommentaarid pihtimusele
- 1–5 tärni hinnangud ning meeldib/ei meeldi reaktsioonid (seotud brauseri sessiooniga)
- Sobimatust sisust teatamine
- Eraldi jututuba kuvatõmmise stiilis paigutusega; sõnumid ja online-kasutajate nimekiri värskenduvad automaatselt iga 5 sekundi järel ilma kogu vestlusala ümber joonistamata, kui sisu pole muutunud
- Jututoa parempoolne tulbas näidatakse kõigepealt tegelikke aktiivseid kasutajanimesid; käsud ja meelespea jäävad nimekirja alla. Online-staatus aegub 30 sekundi järel, kui jututoa leht enam ühendust ei värskenda
- Kasutaja saab siseneda esmalt paroolita nimega ning registreerida selle jututoas käsuga
/password sinuparool(vähemalt 8 tähemärki) - Registreeritud kasutajanimed nõuavad järgmisel sisenemisel parooli; paroolid salvestatakse ainult
password_hash()räsina - Valikuline „Mäleta” salvestab ainult kasutajanime brauserisse, mitte parooli
- JSON-failides salvestamine, seega MySQL-i ega Composerit pole vaja
- Põhiline sisendi valideerimine, HTML-i escape'imine, CSRF-tokenid ja kirjutuslukud
Jututoa lisakäsud ja administraator
- Nime värv:
/namecolor red,/namecolor blue,/namecolor black,/namecolor whitejne. Lubatud on standardsed CSS-i nimelised värvid. Vaikevärvi saab taastada käsuga/namecolor reset. Avalikus kasutajaliideses kuvatakse ainult tavakasutaja käsud. Valitud värv salvestatakse registreeritud konto kirjenachat_users.jsonfailis ning taastatakse järgmisel edukal sisselogimisel. Käsuga/namecolor resetsalvestatakse vaikevärv ka konto juurde. Kui värv valitakse enne kasutajanime registreerimist, salvestatakse see konto loomisel käsuga/password. - Administraatori õiguse andmiseks lisa Wasmeri rakenduse keskkonnamuutujatesse
PIHID_ADMIN_KEYja määra sellele tugev juhuslik salavõti (soovitatavalt vähemalt 24 tähemärki). Ära pane päris salavõtit veebilehe koodi, README faili ega avalikku chat'i. - Pärast muutuja määramist logi jututuppa sisse enda nimega ja saada käsk
/admin sinu-salavõti. Administraatori õigused kehtivad selle PHP sessiooni lõpuni; päises kuvatakseADMIN. Administraatori käske ei kuvata jututoa tavakasutajatele. - Kasutaja eemaldamine:
/kick kasutajanimivõi/kick (kasutajanimi). Eemaldamine kestab 10 minutit ning kehtib sama hüüdnime kõikidele aktiivsetele sessioonidele. - Spämmikaitse arvestab sama nime ja sama normaliseeritud teksti kordusi jooksva 10 minuti jooksul. Pärast viit sama sõnumi avaldamist käivitub kuuenda saatmiskatse korral automaatne 10-minutiline eemaldamine.
Paigaldamine
- Laadi ZIP oma PHP-hostingu veebikausta (näiteks
public_html/) ja paki see seal lahti. ZIP-i failid asuvad kohe juurtasandil;index.phppeab asuma veebikausta juures, mitte alamkaustas. - Kasuta PHP 8.1 või uuemat. Andmebaasi pole vaja.
- Tavalisel PHP-hostingul peab
storage/olema PHP jaoks kirjutatav. Wasmer Edge’is kasuta püsivat/datavolume’i, mitte paketistorage/kausta; kui/datapole saadaval või pole kirjutatav, peatab see versioon teenindamise selge veateatega, et mitte salvestada andmeid ekslikult ajutisse failisüsteemi. - Ava domeen. Rakendus on kasutamiseks valmis.
Wasmer Edge: laadi ZIP üles olemasoleva rakenduse pihidnet kaudu, hoides olemasoleva pihidnet-data volume nime ja /data mountimise alles. Ära eemalda ega nimeta volume'i ümber. Pärast deploy'd kontrolli Storage → Explore files alt, et JSON-failid on alles. Säilita PIHID_ADMIN_KEY rakenduse keskkonnamuutujates (ZIP ei sisalda privaatset administraatori salavõtit).
Wasmeris asuvad päris käitusandmed /data kaustas, mis on püsiva volume’i mount point ega ole veebilehe avalik failikaust. Paketi storage/ sisaldab ainult algfaile ja esialgseid näidisandmeid.
KOHUSTUSLIK Wasmer Edge'i püsiv salvestus (kontod ja pihtimused)
Ainult ZIP-faili uuendamine ei taga andmete säilimist. Wasmer Edge'i rakenduste tavaline failisüsteem on ajutine. Kui storage/ on tavalises rakenduse failisüsteemis, võivad kontod, pihtimused ja jututoa sõnumid taaskäivituse või uue deploy järel kaduda. See selgitab tõenäoliselt sinu varasemat probleemi.
Sinu Wasmeris on volume juba loodud nimega pihidnet-data ja mountiga /data. Järgmise deploy ajal kasuta sama rakendust ning säilita sama volume nimi ja mount. Ära eemalda volume'it ega loo teise nimega uut volume'it, sest see alustaks tühja andmekaustaga.
Enne järgmisi deploy'sid kontrolli püsiva volume'i seadeid:
- Lisa oma olemasoleva
app.yamlfaili (säilitades selle senisedkind,owner,namejapackageväljad) järgmised väljad. Ära asenda kogu faili ainult selle näitega:
env:
PIHID_DATA_DIR: /data
volumes:
- name: pihidnet-data
mount: /data
- Salvesta ja deploy rakendus. Wasmer loob volume'i nimega
pihidnet-dataja ühendab selle/datakausta. - Wasmeri juhtpaneelis ava rakenduse Storage vaade ja kontrolli, et
pihidnet-datavolume on olemas. Ära muuda ega eemalda hiljem selle volume'i nime — Wasmeri dokumentatsiooni järgi võib volume'i eemaldamine või ümbernimetamine selle andmed kustutada. - Kontrolli, et
PIHID_DATA_DIRväärtus oleks täpselt/data. Olemasoleval Wasmeri rakendusel peab sama volumepihidnet-dataolema ühendatud teele/data; seda on vaja säilitada iga deploy'ga. - Registreeri testkasutaja ja loo testpihtimus, seejärel tee uus deploy. Kontrolli, et mõlemad säilivad.
Rakenduse kood kasutab PIHID_DATA_DIR=/data seadistust. Kui see keskkonnamuutuja on määratud, aga /data puudub või pole kirjutatav, tagastab rakendus HTTP 503 ega lähe vaikselt üle ajutisele salvestusele. Esimesel üleminekul kopeerib rakendus storage/ kaustast püsivasse volume'i need JSON-andmefailid, mida volume'is veel ei ole. Olemasolevaid volume'i faile ei kirjutata üle. /data on pärast loomist ainus käitusandmete allikas. Kui olemasolev JSON on vigane või loetamatu, kood jätab selle puutumata ega lähtesta seda tühjaks, et vähendada juhusliku andmekao riski.
Oluline piirang: kui Wasmer on vanad failid juba ajutisest failisüsteemist eemaldanud, ei saa kood neid tagasi luua. Kui konto või pihtimus on veel leitav Wasmeri praeguse rakenduse storage/ failidest, saab üleminekumigratsioon selle kopeerida; muul juhul saab selle taastada ainult varukoopiast või käsitsi uuesti sisestades. Tee chat_users.json ja posts.json failidest regulaarselt varukoopiaid. Vaata Wasmeri püsiva salvestuse juhendit ja app.yaml konfiguratsiooni.
Andmed ja testpostitused
storage/posts.json sisaldab viit kujunduse näidispostitust, et leht näeks esimesel avamisel kuvatõmmisega sarnane välja. Kui soovid alustada tühja postiloendiga, tee varukoopia ja asenda selle faili sisu []-ga. Jututuba on alguses tühi (storage/chat.json); Wasmeris salvestatakse käitusaegsed andmed /data püsivasse volume'i. Wasmeris luuakse chat_users.json, posts.json, chat.json, chat_presence.json ja chat_kicks.json püsivasse /data kausta. Paketi storage/ andmed pole Wasmeris aktiivne andmeallikas pärast seda, kui /data failid on loodud. Tee regulaarselt varukoopiaid andmefailidest.
Pihtimuste modereerimine
- Uued pihtimused salvestatakse
published: falseolekuga. Need on nähtavad ainult administraatorile, kes on samas brauseris jututoas käsuga/admin sinu-salavõtiadministraatoriõiguse aktiveerinud ja seejärel avalehele liikunud. - Administraator näeb avalehel sektsiooni „Avaldamist ootavad pihtimused” ning saab iga pihtimuse avalikustada nupuga „Avalda”. Avaldamine nõuab serveripoolset administraatori sessiooni ja CSRF-tokenit.
- Avalik otsing, kategooriad, üksikpihtimuse vaade, hinnangud ja kommentaarid sisaldavad ainult avaldatud pihtimusi. Vanad postitused, millel puudub
publishedväli, jäävad ühilduvuse huvides avaldatuks. - Uue pihtimuse saatja saab kinnituse, et pihtimus ootab modereerimist.
Enne avalikku käivitamist
- Lisa vajadusel oma privaatsustingimused, kasutustingimused ja selge modereerimisprotsess.
- Kuna kasutajad saavad avalikult postitada, jälgi teateid ning modereeri solvavat, ebaseaduslikku või isikuandmeid sisaldavat sisu.
- Lülita domeenil sisse HTTPS.
- See on visuaalne ja funktsionaalne rekonstruktsioon antud pildi põhjal, mitte algse Pihid.net-i serveri, andmebaasi ega lähtekoodi koopia. Kujunduse üksikasjad võivad algsest saidist erineda.
Käsu privaatsus
Kõik sõnumid, mis algavad kaldkriipsuga (/), käsitletakse käsukatsetena. Tundmatu või valesti kirjutatud käsk saab saatjale privaatse veateate ega salvestu avalikku jututoa ajalukku. Sama kehtib valesti sisestatud /admin käsu puhul. Parempoolses tulbas ja käsuabi aknas kuvatakse ainult /password, /namecolor ja /namecolor reset.
Jututoa sujuv kasutamine
- Enteriga või nupuga „Saada” saatmine ei laadi jututoa lehte uuesti. Sisestusväli jääb fookusesse ning pärast edukat saatmist saab kohe järgmise sõnumi kirjutada.
- Automaatne värskendus ei asenda olemasolevaid sõlmi ega joonista kogu sõnumilisti uuesti, kui sõnumid pole muutunud; uued sõnumid lisatakse juurde ning aegunud read eemaldatakse vajadusel.
Jututoa emotikonid
- Jututoa sõnumivälja kõrval olev
+nupp avab valija Pihid.neti stiilis pildiemotikonidega. Tavalised Unicode emoji-nupud on eemaldatud; pildiemotikonid on alles. - Emotikoni valimine lisab selle sõnumiväljale. Pildiemotikonid salvestatakse sõnumis ohutute markeritena, näiteks
[pihid:trollface]; server ja brauser muudavad ainult lubatud markerid piltideks. Suvalist HTML-i ei tõlgendata. Sõnum saadetakse taustapäringuga, Enteri järel jääb fookus sisestusväljale ja kirjutamist saab kohe jätkata. - Pildiemotikonid paiknevad
emotes/kaustas. Mitmed väiksemad kleepsud kasutavad kerget CSS-i põrkeanimatsiooni. Algse kuvatõmmise puhul polnud liikuvate emote'ide GIF/WebP-faile kaasas, seega ei saa algset animatsiooni üks-ühele taastada. - Kui lisad hiljem päris animeeritud GIF- või WebP-faile, tuleb lisaks failile uuendada lubatud emote'ide loendit
index.phpfailis ning renderdusloogikat.
Chat sending has no fixed cooldown. Users can send consecutive messages immediately; duplicate-message spam protection remains active and kicks after the sixth identical message within 10 minutes. Confession/comment cooldowns remain unchanged.
Jututoa sisselogimise seansi kestus
- PHP sisselogimisseansid salvestatakse püsiva volume'i sisse kausta
/data/.php-sessions, mitte PHP vaikimisi ajutisse session-kausta. See aitab vältida automaatset väljalogimist pärast mõneminutilist tegevusetust ja võimaldab sisselogimisel säilida rakenduse protsessi taaskäivituse järel, kui samapihidnet-datavolume jääb/datakülge. - PHP automaatne sessioonide koristus on välja lülitatud; seega ei kustutata seansiandmeid vaikimisi 24 minuti pärast. Brauseriküpsis on seansiküpsis (
lifetime = 0), mitte püsiv „Mäleta mind” autentimisküpsis. Tavaliselt kaob see brauseri täielikul sulgemisel, kuigi brauseri seansi taastamise funktsioon võib mõnes brauseris küpsise taastada. - Nupp „Logi välja” eemaldab jututoa sisselogimisoleku kohe. Brauseri sulgemist ei saa server alati usaldusväärselt tuvastada; pärast sulgemist alles jääv serveripoolne seansifail ei anna ligipääsu ilma seansi küpsiseta. PHP seansifailid võivad seetõttu /data kausta jääda ka pärast brauseri sulgemist.
- Wasmeris peab
PIHID_DATA_DIR=/dataja olemasolevpihidnet-datavolume (mount: /data) jääma muutmata. Kui volume eemaldatakse või asendatakse, kaovad nii kasutajaandmed kui ka serveripoolsed seansid.
Jututoa sõnumite säilitusaeg
- Jututoa ajaloos hoitakse kõiki viimase 7 päeva sõnumeid. Iga serveripäringu alguses eemaldatakse püsiva andmekausta
chat.jsonfailist kõik 7 päeva või vanemad sõnumid (sh vananenud süsteemiteated). - Puhastus käivitub automaatselt veebiliikluse käigus; kui täpselt 7 päeva piiril pole ühtegi uut päringut, kustutatakse aegunud read esimesel järgneval päringul enne ajaloo kuvamist. Uuemad sõnumid jäävad alles ning kõik viimase 7 päeva kirjed kuvatakse ka uuele külalisele. Ajalugu ei kärbita fikseeritud 60 või 500 sõnumi piiranguga.
- See ei kustuta pihtimusi ega registreeritud kasutajakontosid.
Wasmeri deploy ja püsiv salvestus (OLULINE)
See distributsioon sisaldab projekti juurkaustas mõlemat deploy jaoks vajalikku konfiguratsiooni: app.yaml (Wasmer Edge'i rakenduse seaded) ja wasmer.toml (PHP kohaliku paketi manifest). Hoia mõlemad failid oma projekti juurkaustas koos index.php, style.css, emotes/ ja storage/ sisuga.
wasmer.tomlkasutab PHP 8.3.4 ja käivitab juurkausta PHP veebilehe:php -t /app -S localhost:8080. See on vajalik, etwasmer deploysaaks kohaliku paketi ehitada ega küsiks puuduva manifesti tõttu remote build'i.app.yamlsihib olemasolevat rakendustpihidnet(reimo_ristla, app IDda_2l9IzteU7g59), seabPIHID_DATA_DIR=/dataja ühendab sama püsiva volume'ipihidnet-datamountiga/data.- Windows PowerShellis käivita projekti kaustas
wasmer deploy. Ära lisa Python-põhistwasmer.tomlfaili ega kasuta teist paketi nime. Kui Wasmer küsib kinnitust paketi versiooni suurendamiseks, lase versioonil tõusta; kui ta pakub täiesti uue Edge app'i loomist, katkestaCtrl+C. - Pärast deploy'd ava Storage ja kontrolli, et olemasolev
pihidnet-datavolume oleks alles ning selle sees oleksidchat_users.json,posts.json,chat.json,chat_presence.jsonjachat_kicks.json. - Ära muuda ega eemalda
pihidnet-datanime või/datamounti. Ära eemalda volume'i konfiguratsioonist ega kinnita selle kustutamist. PIHID_ADMIN_KEYpeab jääma Wasmeri salajaseks keskkonnamuutujaks/Secretiks; seda ei lisata ZIP-i. Pärast deploy'd kontrolli, et see on endiselt seadistatud.- Kui Storage'is kaob volume või ilmub uus tühi volume, peata edasised deploy'd ja kontrolli rakenduse konfiguratsiooni enne andmete lisamist.
app.yaml ja wasmer.toml peavad mõlemad olema projekti juurkaustas kogu deploy käigus. Ära laadi neid üksikult alles pärast veebilehe deploy'd. Faili app.yaml veebist allalaadimine on keelatud .htaccess reegliga.
HTTP 500 fix: if chat_presence.json is malformed, the app archives the broken ephemeral file and safely rebuilds an empty online-presence store. This file only represents current online users; accounts, confessions, chat history, and kicks are not reset by this recovery.