reimo_ristla/pihidnet
Public
wasmer run reimo_ristla/pihidnet

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 white jne. 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 kirjena chat_users.json failis ning taastatakse järgmisel edukal sisselogimisel. Käsuga /namecolor reset salvestatakse 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_KEY ja 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 kuvatakse ADMIN. Administraatori käske ei kuvata jututoa tavakasutajatele.
  • Kasutaja eemaldamine: /kick kasutajanimi võ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

  1. Laadi ZIP oma PHP-hostingu veebikausta (näiteks public_html/) ja paki see seal lahti. ZIP-i failid asuvad kohe juurtasandil; index.php peab asuma veebikausta juures, mitte alamkaustas.
  2. Kasuta PHP 8.1 või uuemat. Andmebaasi pole vaja.
  3. Tavalisel PHP-hostingul peab storage/ olema PHP jaoks kirjutatav. Wasmer Edge’is kasuta püsivat /data volume’i, mitte paketi storage/ kausta; kui /data pole saadaval või pole kirjutatav, peatab see versioon teenindamise selge veateatega, et mitte salvestada andmeid ekslikult ajutisse failisüsteemi.
  4. 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:

  1. Lisa oma olemasoleva app.yaml faili (säilitades selle senised kind, owner, name ja package väljad) järgmised väljad. Ära asenda kogu faili ainult selle näitega:
env:
  PIHID_DATA_DIR: /data
volumes:
  - name: pihidnet-data
    mount: /data
  1. Salvesta ja deploy rakendus. Wasmer loob volume'i nimega pihidnet-data ja ühendab selle /data kausta.
  2. Wasmeri juhtpaneelis ava rakenduse Storage vaade ja kontrolli, et pihidnet-data volume 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.
  3. Kontrolli, et PIHID_DATA_DIR väärtus oleks täpselt /data. Olemasoleval Wasmeri rakendusel peab sama volume pihidnet-data olema ühendatud teele /data; seda on vaja säilitada iga deploy'ga.
  4. 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: false olekuga. Need on nähtavad ainult administraatorile, kes on samas brauseris jututoas käsuga /admin sinu-salavõti administraatoriõ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 published vä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.php failis 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 sama pihidnet-data volume jääb /data kü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=/data ja olemasolev pihidnet-data volume (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.json failist 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.toml kasutab PHP 8.3.4 ja käivitab juurkausta PHP veebilehe: php -t /app -S localhost:8080. See on vajalik, et wasmer deploy saaks kohaliku paketi ehitada ega küsiks puuduva manifesti tõttu remote build'i.
  • app.yaml sihib olemasolevat rakendust pihidnet (reimo_ristla, app ID da_2l9IzteU7g59), seab PIHID_DATA_DIR=/data ja ühendab sama püsiva volume'i pihidnet-data mountiga /data.
  • Windows PowerShellis käivita projekti kaustas wasmer deploy. Ära lisa Python-põhist wasmer.toml faili 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, katkesta Ctrl+C.
  • Pärast deploy'd ava Storage ja kontrolli, et olemasolev pihidnet-data volume oleks alles ning selle sees oleksid chat_users.json, posts.json, chat.json, chat_presence.json ja chat_kicks.json.
  • Ära muuda ega eemalda pihidnet-data nime või /data mounti. Ära eemalda volume'i konfiguratsioonist ega kinnita selle kustutamist.
  • PIHID_ADMIN_KEY peab 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.

Pihid.net PHP anonymous confessions and chat website