mirror of
https://gitlab.com/MrFry/qmining-page
synced 2026-04-28 03:07:36 +02:00
555 lines
20 KiB
React
555 lines
20 KiB
React
import React, { useState, useEffect } from 'react'
|
|
import Link from 'next/link'
|
|
|
|
import Header from '../components/header'
|
|
|
|
import constants from '../constants'
|
|
import styles from './faq.module.css'
|
|
|
|
function PasswordSection() {
|
|
return (
|
|
<>
|
|
<div className={'manualBody'}>
|
|
<ul>
|
|
<li>Minden felhasználónak más jelszava van.</li>
|
|
<li>Elvileg elég csak egyszer beírnod, és többet nem kell, de </li>
|
|
<li>
|
|
Mentsd le biztos helyre a jelszót, hogy később is meglegyen!
|
|
<i>
|
|
Jelenleg nincs elfelejtett jelszó funkció, ha elfelejted, akkor az
|
|
örökre eltűnik!
|
|
</i>
|
|
</li>
|
|
<li>
|
|
Ha van jelszavad akkor <i>bizonyos határok között</i> te is{' '}
|
|
<a
|
|
href={`${constants.siteUrl}pwRequest?man`}
|
|
target="_blank"
|
|
rel="noreferrer"
|
|
>
|
|
tudsz generálni
|
|
</a>{' '}
|
|
másoknak.
|
|
</li>
|
|
<li>
|
|
Saját jelszavadat ne oszd meg, mivel egyszerre korlátozott számú
|
|
helyen lehetsz belépve, máshol automatikusan ki leszel léptetve.
|
|
</li>
|
|
<li>
|
|
Mivel senkinek sincs felhasználóneve, csak egy UserID (amit
|
|
scriptben bal alul, weboldalon jobb felül találsz), így az egész
|
|
teljesen anonim. Emiatt a jelszavakat nem lehet megváltoztatni, hogy
|
|
a szükséges komplexitás megmaradjon.
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</>
|
|
)
|
|
}
|
|
|
|
function FAQSection() {
|
|
return (
|
|
<div className={'manualBody'}>
|
|
<ul>
|
|
<li>
|
|
<b>
|
|
Lehet-e valahol szerkeszteni, törölni, illetve manuálisan hozzáadni
|
|
a meglévő kérdésekhez?
|
|
</b>
|
|
Igen,{' '}
|
|
<a
|
|
href={`${constants.siteUrl}dataeditor`}
|
|
target="_blank"
|
|
rel="noreferrer"
|
|
>
|
|
ezen az oldalon
|
|
</a>{' '}
|
|
van lehetőség erre.
|
|
</li>
|
|
<li>
|
|
<b>
|
|
Mennyire anonymus a weboldal/script, és kiderülhet-e hogy használom?
|
|
</b>
|
|
A weboldal teljesen anonymus, mindenki csak egy számként van
|
|
nyilvántartva (ami a user ID), random generált uuidv4 jelszavak vannak
|
|
(így nicknevek sem kellenek), és még IP cím sincs sehol letárolva
|
|
szerver oldalon.
|
|
<br />
|
|
Több infó a <Link href="/faq?tab=risk">kockázatok résznél</Link>.
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
function RiskSection() {
|
|
return (
|
|
<>
|
|
Itt {'"admin"'} alatt a szerver, weboldal és script egyedüli üzemeltetője
|
|
értendő, az egyetlen személy, aki hozzáfér akármilyen szolgáltatással
|
|
kapcsolatos adathoz, pl.: szerver statisztikák, szerver operációs
|
|
rendszere, beküldött fájlok, chat üzenetek. A weboldalon a felhasználó
|
|
azonosítója: <i>#1</i>
|
|
<br />A weboldalt több ember is hostolhatja különböző domaineken, így
|
|
különböző hostolt szervereken az admin más személyt jelent!
|
|
<ul>
|
|
<li>
|
|
<b>Adminnak küldött fájlok kezelése</b>A beküldött fájlokban
|
|
(adminnnak chat-en küldött, vagy kapcsolat oldalon küldött fájlok)
|
|
szerepelhet személyes adat, pl.: név. Ha ilyen információval
|
|
találkozok, akkor azt ki szoktam törölni. Ezekhez a fájlokhoz és
|
|
információkhoz csak én férek hozzá, és sehova sincs kiadva. Ezek az
|
|
információk nincsenek sehol gyűjtve.
|
|
</li>
|
|
<li>
|
|
<b>
|
|
Ha esetleg {'"'}lebukik{'"'} a szerver, és tárolt személyes infók
|
|
</b>
|
|
Semmi személyes információ nincs eltárolva szerveren. Egyedüli
|
|
információ amit egyáltalán ki tudnék deríteni az amúgy is az IP címed,
|
|
de az nincs letárolva. Ha nagyon gonosz lennék, akkor a script el
|
|
tudná küldeni a neved és talán még 1-2 adatot a szervernek, de ezt nem
|
|
teszi.
|
|
<p />
|
|
Bizonyíték? A script, weboldal és szerver teljesen nyílt forráskódú,{' '}
|
|
TODO: ADD CONTRIBUTE TAB
|
|
<Link href="/contribute#gitrepo">
|
|
ezek repository-ja publikus
|
|
</Link>{' '}
|
|
(contribute oldal alja), és akármikor felülvizsgálható. A script a te
|
|
böngésződben fut, tampermonkey bővítmény menüjében megtekinthető
|
|
milyen kód fut pontosan.
|
|
</li>
|
|
<li>
|
|
<b>Bármikor észrevehetik hogy használod a scriptet</b> Vannak rá
|
|
módszerek, hogy a weboldalon érzékeljék hogy fut-e userscript, de ez
|
|
ellen minden ismert módon védekezik a script. <p />
|
|
A script shadow-root hoz teszi hozzá az összes megjelenített
|
|
elementet, így ezeket lehetetlen detektálni. A moodle semmiféleképpen
|
|
nem látja, hogy milyen más oldalak vannak megnyitva a böngésződben.
|
|
Nem látja az XMLHttp requesteket se, amit a script végez (böngésző
|
|
kiegészítőn keresztül). Egy Matomo nevű script látja hogy milyen
|
|
oldalakra navigálsz a moodle-ről, de a script nem linkekkel irányít
|
|
át, hanem javascript eseménnyel, amit nem tud nyomon követni.
|
|
<p />
|
|
Aztán ki tudja ténylegesen hogy lehet, ezért{' '}
|
|
<b>csak saját felelősségre használd a scriptet!</b>
|
|
<p />A kérdésekre a válaszokat
|
|
<a
|
|
href={`${constants.siteUrl}dataeditor`}
|
|
target="_blank"
|
|
rel="noreferrer"
|
|
>
|
|
manuálisan is be lehet küldeni
|
|
</a>
|
|
, és teszt kitöltés közben helyes válaszokat a weboldalon is meg lehet
|
|
keresni.
|
|
</li>
|
|
<li>
|
|
<b>Bármikor leállhat a szerver</b>
|
|
És akkor nem bírod megnézni a válaszokat. Erre van az{' '}
|
|
<a
|
|
href={`${constants.siteUrl}allqr.txt?man`}
|
|
target="_blank"
|
|
rel="noreferrer"
|
|
>
|
|
összes kérdés TXT
|
|
</a>
|
|
. A szervert több példányban (instance) is lehet futtatni, és az
|
|
üzemeltetői össze bírják kapcsolni egymással. Így ha az egyik kiesne,
|
|
a script automatikusan megnézi a többi szervert, hogy él-e
|
|
</li>
|
|
<li>
|
|
<b>Akármelyik válasz rossz lehet</b>
|
|
Pl.: ha a script rosszul menti le, vagy rossz kérdésre ad választ. A
|
|
script minding a moodle szerint helyesnek vélt választ menti le, így
|
|
előfordulhat hogy logikailag nem helyes a válasz, de a tanárok azt
|
|
jelölték be helyesnek.
|
|
</li>
|
|
</ul>
|
|
</>
|
|
)
|
|
}
|
|
|
|
function WebsiteSaveSection() {
|
|
return (
|
|
<>
|
|
<p>
|
|
Ha hibát találsz, kérlek jelents. Hogy a hibákat a saját gépemen
|
|
reprodukálni tudjam, és könnyen ki bírjam javítani, sokszor jól jön, ha
|
|
egy lementett weboldalt megkapok, amin a hiba történik. Így lehet
|
|
menteni egy oldalt:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
Lementett oldalon jobb klikk, oldal mentése
|
|
<br />
|
|
<img
|
|
src="img/faq/sitesave-1.jpg"
|
|
alt="img"
|
|
className={'manual_img'}
|
|
/>
|
|
</li>
|
|
<li>
|
|
A lementett oldal egy fájlból és mappából áll.
|
|
<br />
|
|
<img
|
|
src="img/faq/sitesave-2.jpg"
|
|
alt="img"
|
|
className={'manual_img'}
|
|
/>
|
|
</li>
|
|
<li>
|
|
A fájlt nyisd meg szövegszerkesztővel (notepad), és keress rá a
|
|
nevedre, majd (csak a neved, ne a sort) töröld ki, és mentsd el. Amit
|
|
beküldesz, azt csak az admin látja.{' '}
|
|
<Link href="/faq?tab=risk">Több infó itt</Link>{' '}
|
|
</li>
|
|
<li>
|
|
Ezután <Link href="/contact">itt</Link> tudsz írni a weboldal
|
|
adminjának, hogy útba igazítson egy olyan fejlesztő felé, aki ezek a
|
|
fájlok alapján ki tudja javítani a hibát
|
|
</li>
|
|
</ul>
|
|
<p>
|
|
Előfordulhat hogy a fejlesztőknek nincs hozzáférése semmilyen egyetemi
|
|
oldalhoz, így csak lementett weboldallal tudják hatékonyan tesztelni a
|
|
scriptet. Ezért hatalmas segítség ha felveszed a kapcsolatot adminnal ha
|
|
hibával találkozol.
|
|
</p>
|
|
</>
|
|
)
|
|
}
|
|
|
|
function ScriptSection() {
|
|
return (
|
|
<div className={'manualBody'}>
|
|
<ul>
|
|
<li>
|
|
<b>Hogy kell a scriptet telepíteni, és milyen oldalakon működik? </b>
|
|
<Link href="/script">Ezen az oldalon van leírva</Link>{' '}
|
|
</li>
|
|
<li>
|
|
<b>Hogyan működik a script?</b>
|
|
<ul>
|
|
<li>
|
|
Az egész folyamat a teszt ellenőrzés oldalon kezdődik, a script
|
|
onnan beolvassa, és szervernek beküldi a helyes válaszokat
|
|
</li>
|
|
<li>
|
|
Ezután ha újból kitöltöd a tesztet, vagy ugyanazzal a kérdéssel
|
|
találkozol másik tesztben (pl.: gyakorló teszt után zh/vizsga)
|
|
akkor ott megjeleníti a választ
|
|
</li>
|
|
<li>
|
|
Más felhasználóknak köszönhetően már valószínűleg lesznek
|
|
megoldások a tesztjeidhez. <Link href="/allQuestions">Itt</Link>{' '}
|
|
meg tudod tekinteni, hogy vannak-e válaszok a tárgyadhoz.
|
|
</li>
|
|
<li>
|
|
Ha teszt ellenőrzés oldal nem elérhető, vagy nem egyértelműen
|
|
kitalálható a helyes válasz, akkor a script nem tud mit csinálni,
|
|
nem ment le semmit
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<b>
|
|
A teszt ellenőrző oldal nem elérhető. Ilyenkor lehet valamit tenni,
|
|
hogy mégis el legyenek mentve a válaszok?
|
|
</b>
|
|
A{' '}
|
|
<a
|
|
href={`${constants.siteUrl}dataeditor`}
|
|
target="_blank"
|
|
rel="noreferrer"
|
|
>
|
|
dataeditor
|
|
</a>{' '}
|
|
oldal erre is jó, a <i>Kitöltetlen tesztek</i> részhez a script
|
|
automatikusan feltölti a kérdéseket még megoldás közben. Ehhez nincs
|
|
lementve helyes válasz, de ezt te utólag bejelölheted, vagy
|
|
beküldheted.
|
|
</li>
|
|
<li>
|
|
<b>
|
|
Olyan helyeken fut le a script, ahol nem kellene, vagy ideiglenesen
|
|
ki akarom kapcsolni, el akarom rejteni
|
|
</b>
|
|
Tampermonkey bővítmény ikon böngészőben -{'>'} click -{'>'} a scriptet
|
|
kapcsold ki. Csak ne felejtsd el visszakapcsolni {';)'}
|
|
</li>
|
|
<li>
|
|
<b>
|
|
Túl nagy a kérdést és a választ megjelenítő ablak, nem tudok a
|
|
válaszra kattintani
|
|
</b>
|
|
A felugró ablakot ha minden jól megy akkor a szélénél fogva tudod
|
|
mozgatni, vagy egeret rajtatartva a görgővel tudod állítani az
|
|
áttetszőségét, vagy be tudod zárni jobb felül X-el, vagy egér középső
|
|
gombbal.
|
|
</li>
|
|
<li>
|
|
<b>Script felugró ablakon szereplő adatok és gombok értelmezése</b>
|
|
<img
|
|
className={'manual_img'}
|
|
src="img/scriptimg/script-3.jpg"
|
|
alt="img"
|
|
/>
|
|
<ul>
|
|
<li>
|
|
Felső középső szöveg:
|
|
<br />
|
|
[Talált kérdés tárgya] - [Talált kérdés adatbázisának neve]
|
|
</li>
|
|
<li>
|
|
Jobb oldalt nyilak:
|
|
<br />
|
|
Ha több kérdés van egy oldalon, akkor azzal lehet váltogatni
|
|
</li>
|
|
<li>
|
|
Bal oldalt felső szám (5./1.)
|
|
<br />
|
|
Azt jelöli, hogy éppen hányadik kérdés válasza van megjelenítve.
|
|
Itt a 5./1. azt jelenti, hogy a tesztben a 5. kérdés 1. talált
|
|
válasza.
|
|
</li>
|
|
<li>
|
|
Bal oldalt %
|
|
<br />A szerver szerint hány százalékban egyezik a talált válasz
|
|
azzal, amit tényleg keresni kell
|
|
</li>
|
|
<li>
|
|
Középen
|
|
<br />
|
|
Első sorban kérdés, másodikban válasz (ha a sor hosszú, akkor
|
|
megtörhet)
|
|
</li>
|
|
</ul>
|
|
<img
|
|
className={'manual_img'}
|
|
src="img/scriptimg/script-4.jpg"
|
|
alt="img"
|
|
/>
|
|
<ul>
|
|
<li>
|
|
Alul nyilak:
|
|
<br />
|
|
Itt egy kérdésre több találat van, így közöttük neked kell
|
|
eldönteni, hogy mi a helyes válasz. Ez akkor van, ha a kérdés
|
|
szövege ugyan az, de más válasz is lehet. A nyilak segítségével
|
|
válogathatsz a válaszok között.
|
|
</li>
|
|
<li>
|
|
Bal oldalt felső szám (1./3.)
|
|
<br />
|
|
Itt az 1. azt jelenti hogy az oldalon az első kérdéshez van
|
|
megjelenítve a válasz, a 3. pedig azt, hogy a sok talált válaszok
|
|
közül a 3.
|
|
</li>
|
|
<li>
|
|
A kérdés mellett lévő [0]
|
|
<br />A teszt kérdésben itt épp egy kép van, és azt jelenti a
|
|
szögletes zárójelben lévő szám. A tesztben lévő képnél is
|
|
megjelenik ez a [0] azonosító, hogy könnyen párosítani lehessen.
|
|
<br />
|
|
Ez akkor hasznos, ha képekhez tartozik a válasz. Ekkor figyelni
|
|
kell, mert a képek nem biztos hogy jó sorrendben vannak a tesztben
|
|
a talált válaszhoz képest, de a []-ben lévő azonosítók segítenek.
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
function AddSite() {
|
|
return (
|
|
<>
|
|
Jelenleg az, hogy a script melyik oldalakon fut bele van égetve a script
|
|
forráskódjába. Ez itt látható:{' '}
|
|
<a
|
|
rel="noreferrer"
|
|
target="_blank"
|
|
href="https://gitlab.com/MrFry/moodle-test-userscript/-/blob/master/user.js"
|
|
>
|
|
stable.user.js#L52
|
|
</a>
|
|
{'. '}
|
|
Ez azért van így, hogy biztos csak olyan oldalakon fusson a script amit
|
|
támogat is.
|
|
<p />
|
|
Ehhez persze kézzel hozzá lehet adni ideiglenesen bármilyen oldalt, hogy
|
|
kipróbáld ott működik-e. Akár működik, akár nem kérlek szólj, és frissítem
|
|
a scriptet hogy azon a domainen is fusson és működjön alapból.
|
|
<p />
|
|
Egyetem moodle oldalának hozzáadása a scripthez kézzel:
|
|
<ul>
|
|
<li>
|
|
<Link href="/script">Először telepítsd a scriptet rendesen</Link>{' '}
|
|
</li>
|
|
<li>
|
|
Böngészőben nyisd meg a Tampermonkey bővítményt <br />
|
|
<img className={'manual_img'} src={`img/faq/siteadd-1.png`} />
|
|
<br />
|
|
Itt kattints a Dashboard-ra.
|
|
</li>
|
|
<li>
|
|
Keresd meg a scriptet, majd kattints rá:
|
|
<br />
|
|
<img className={'manual_img'} src={`img/faq/siteadd-2.png`} />
|
|
</li>
|
|
<li>
|
|
A felugró szerkesztőben keresd meg a következő sorokat:
|
|
<br />
|
|
<img className={'manual_img'} src={`img/faq/siteadd-3.png`} />
|
|
</li>
|
|
<li>
|
|
Itt az egyik <i>@match ...</i> sor után egy új sorban írd be az
|
|
egyetemed moodle oldalának címét. Ha ez a cím pl.:{' '}
|
|
<i>https://moodle.egyetem.hu/main/akármi</i>, akkor a következőre írd
|
|
át: <i>https://moodle.egyetem.hu/*</i>. Fenti képen látsz néhány
|
|
példát. <i>A {'"*"'} a végén fontos!</i>
|
|
</li>
|
|
<li>
|
|
Ezután mentsd el (ctrl + s, vagy file {'->'} save). Ha minden jól
|
|
ment, akkor elég frissíteni a moodle oldalát, és a script futni fog
|
|
rajta. Ezek után azon az oldalon amit beírtál meg kell jelennie a
|
|
Tampermonkey menüjében is:
|
|
<br />
|
|
<img className={'manual_img'} src={`img/faq/siteadd-4.png`} />
|
|
</li>
|
|
<li>
|
|
Ha a tesztek közben mégsem megy, akkor ellenőrizd, hogy a beírt moodle
|
|
cím egyezik-e a teszt közbenivel. Ha kell egy kis segítség, kérdésed
|
|
van, nem működik valami, vagy éppen működik, de alapból nincs
|
|
hozzáadva: <Link href="/contact">írj a kapcsolat oldalon!</Link>
|
|
</li>
|
|
</ul>
|
|
</>
|
|
)
|
|
}
|
|
|
|
function P2PSection() {
|
|
return (
|
|
<>
|
|
<p>
|
|
A szerverben peer to peer (p2p) funkcionalitás is implementálva van, így
|
|
ha több szerver fut egyszerre, akkor azok meg tudják osztani egymás
|
|
között a fontosabb adatokat, így az összes szerveren ugyanazok az adatok
|
|
érhetőek el.
|
|
</p>
|
|
Szinkronizált adatok:
|
|
<ul>
|
|
<li>
|
|
<i>Felhasználók</i>: egy jelszóval az összes oldalra be tudsz lépni
|
|
</li>
|
|
<li>
|
|
<i>Kérdés adatbázisok</i>: Az összes tárgy és kérdés elérhető a
|
|
szervereken
|
|
</li>
|
|
</ul>
|
|
<i>Nem</i> szinkronizált adatok:
|
|
<ul>
|
|
<li>Chat</li>
|
|
<li>Fórum</li>
|
|
<li>Motd (Script motto of the day)</li>
|
|
</ul>
|
|
A szinkronizált adatok frissessége több mindenen múlik: a szerver adminja
|
|
szinkronizál-e rendesein, illetve a két szerver között működik-e a
|
|
felhasználó szinkronizálás (van-e publick key megoszva a kettő között)
|
|
<p />A szervereknek 1-1 adminja van, akik belelátnak minden szerveren
|
|
tárolt adatba, a szervereken ők a <i>#1</i> számú felhasználók. Errő
|
|
többet a <Link href="/faq?tab=risk">kockázatok résznél</Link> tudtok
|
|
olvasni.
|
|
<p />
|
|
További információk a szerver és a peer-ek állapotáról{' '}
|
|
<Link href="/p2pinfo">itt</Link> találhatóak
|
|
</>
|
|
)
|
|
}
|
|
|
|
const pages = {
|
|
faq: { name: 'Vegyes általános kérdések', component: FAQSection },
|
|
script: {
|
|
name: 'Script specifikus kérdések',
|
|
component: ScriptSection,
|
|
},
|
|
pw: { name: 'Infó jelszavakról', component: PasswordSection },
|
|
risk: {
|
|
name: 'Kockázatok, személyes infók kezelése',
|
|
component: RiskSection,
|
|
},
|
|
websitedl: {
|
|
name: 'Teszt közbeni hiba jelentése',
|
|
component: WebsiteSaveSection,
|
|
},
|
|
addsite: {
|
|
name: 'Futtatás (még) nem támogatott oldalon',
|
|
component: AddSite,
|
|
},
|
|
p2p: {
|
|
name: 'Peer to peer információk',
|
|
component: P2PSection,
|
|
},
|
|
}
|
|
|
|
export default function FAQ({ router }) {
|
|
const [currPage, setCurrPage] = useState(pages.faq)
|
|
|
|
const renderCurrPage = (page) => {
|
|
if (page) {
|
|
return <page.component />
|
|
} else {
|
|
return null
|
|
}
|
|
}
|
|
|
|
useEffect(() => {
|
|
router.replace(`${router.asPath.replace('.html', '')}`, undefined, {
|
|
shallow: true,
|
|
})
|
|
}, [])
|
|
|
|
useEffect(() => {
|
|
if (router.query.tab) {
|
|
setCurrPage(pages[router.query.tab])
|
|
}
|
|
}, [router.query.tab])
|
|
|
|
return (
|
|
<div>
|
|
<Header title={'GYIK'} />
|
|
<div className={'pageHeader'}>
|
|
<h1>Gyakran Ismételt Kérdések</h1>
|
|
</div>
|
|
<div className={'buttonContainer'}>
|
|
{Object.keys(pages).map((key) => {
|
|
const page = pages[key]
|
|
return (
|
|
<div
|
|
className={`${page === currPage ? 'activeButton' : ''}`}
|
|
key={key}
|
|
onClick={() => {
|
|
setCurrPage(page)
|
|
|
|
router.replace(
|
|
`${router.pathname}?tab=${encodeURIComponent(key)}`,
|
|
undefined,
|
|
{ shallow: true }
|
|
)
|
|
}}
|
|
>
|
|
{page.name}
|
|
</div>
|
|
)
|
|
})}
|
|
</div>
|
|
<hr />
|
|
<div className={styles.content}>{renderCurrPage(currPage)}</div>
|
|
<hr />
|
|
</div>
|
|
)
|
|
}
|