From 250c90e80ebb8ac42d0ea8f7074280b034282b1f Mon Sep 17 00:00:00 2001 From: M.Gergo Date: Mon, 19 Mar 2018 09:19:45 +0100 Subject: Nextcloud-Mayor script logolás fingomhangolva --- .gitignore | 1 - "egy\303\251b/munin/README" | 98 +++++ "egy\303\251b/munin/mayor_munin.php" | 122 +++++ "egy\303\251b/nextcloud/README" | 215 +++++++++ "egy\303\251b/nextcloud/mayor-nextcloud.php" | 635 +++++++++++++++++++++++++++ external/munin/README | 98 ----- external/munin/mayor_munin.php | 122 ----- external/nextcloud/README | 183 -------- external/nextcloud/mayor-nextcloud.php | 577 ------------------------ 9 files changed, 1070 insertions(+), 981 deletions(-) create mode 100644 "egy\303\251b/munin/README" create mode 100755 "egy\303\251b/munin/mayor_munin.php" create mode 100644 "egy\303\251b/nextcloud/README" create mode 100644 "egy\303\251b/nextcloud/mayor-nextcloud.php" delete mode 100644 external/munin/README delete mode 100755 external/munin/mayor_munin.php delete mode 100644 external/nextcloud/README delete mode 100644 external/nextcloud/mayor-nextcloud.php diff --git a/.gitignore b/.gitignore index ac33c165..e4e5f6c8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ -index.html *~ \ No newline at end of file diff --git "a/egy\303\251b/munin/README" "b/egy\303\251b/munin/README" new file mode 100644 index 00000000..a0ad5eb8 --- /dev/null +++ "b/egy\303\251b/munin/README" @@ -0,0 +1,98 @@ + +Munin monitorozó plugin a mayorhoz + +Grafikonokat készít a "munin" program segítségével a Mayor pillanatnyi állapotáról. +Egyelőre csak debian 9+ rendszeren tesztelt, de pár apró módosítással életrekelthető más rendszereken is. + +Rögzíti az: +-- Egyidejűleg (pillanatnyi) bejelentkezett felhasználók számát. +-- IP-cím alapján a lokális (192.168.*.*, 10.*.*.*, 172.16.*.*, fd**::/8) és külön a külső tartományokat. +-- Policy alapján a 'private' és/vagy 'parent' -ben belépett felhasználókat. +-- Aktivitás alapján az Xperc (pl:10perc) ideje, a 2*Xperc ideje aktív felhasználókat és a tétleneket. + + +Beállítása a következő: (debian) + +1.lépés: >>> apt-get install munin +2.lépés: a "/etc/munin/munin.conf" fájl szerkesztése a következő módon: + +--(I.) először keressük meg a következő részt: + # a simple host tree + [localhost.localdomain] + address 127.0.0.1 + use_node_name yes + +-- módosítsuk a "localhost.localdomain"-t a napló-szerver gépnevének megfelelően: + (itt az FQDN (teljes elérési út szükséges)) + [gépnév.iskolaneve.hu] + address 127.0.0.1 + use_node_name yes + +--(II.) ugyanitt, adjuk hozzá a következő sorokat: + (és írjuk át a "mayor.iskolaneve.hu" címet a napló címének megfelelően) + [mayor.iskolaneve.hu] + address 127.0.0.1 + use_node_name no + + +--(III.) ezután módosítanunk kell a "mayor_munin.php" scriptben a "$set['naplo_host'] = "mayor.iskolaneve.hu";"-t + (első sorok egyike) a saját naplónk címének megfelelően. + Ez egy fontos beállítás, mert ezen keresztül ismeri fel a munin rendszer a mi + monitorozó scriptünket. + + +--(IV.) utána másoljuk a "mayor_munin.php"-t az: + az /usr/share/munin/plugins/ mappába vagy + az /etc/munin/ könyvtárba vagy + bárhova, ahonnan a munin eléri. + + FONTOS!! + A "mayor_munin.php"-nak állítsuk be a "root" tulajdonost és 700-as jogokat! + (nehogy valami kiolvassa a jelszót) + + +--(V.) ezután el kell helyezni egy simlink-et a /etc/munin/plugins/ könyvtárba, ami a bemásolt fájlra mutat. + pl: ln -s /usr/share/munin/plugins/mayor_munin.php /etc/munin/plugins/munin + + +--(VI.) végül be kell állítanunk egy felhasználót, a mysql-ben, amivel olvasni lehet a mayor_login.session és a mayor_login.loginLog táblákat + (például:) + mysql> GRANT SELECT ON mayor_login.loginLog TO 'mayor-monitor'@'localhost' IDENTIFIED BY 'erőős-jelszóó!'; + mysql> GRANT SELECT ON mayor_login.session TO 'mayor-monitor'@'localhost' IDENTIFIED BY 'erőős-jelszóó!'; + +- Lehetőség van mysql/unix_socket authentikációra is, ez nagyban növeli biztonságot, mert nem alkalmaz jelszót, + így szinte lehetetlen próbálgatással feltörni. + Fontos, hogy a kiválasztott felhasználónak/felhasználónévnek valósnak kell lenni, és léteznie kell a rendszerben. + Egyszerűség kedvéért használhatjuk a "root" felhasználót, ez eredetileg is unix_socket-tel authentikál a mysql-ben, + (hacsak a mysql telepítésénél meg nem változtattuk) + + vagy a "munin" nevű felhasználót, ezt adjuk hozzá a mysql-hez: + + mysql> GRANT SELECT ON mayor_login.session TO 'munin'@'localhost' IDENTIFIED via unix_socket; + mysql> GRANT SELECT ON mayor_login.loginLog TO 'munin'@'localhost' IDENTIFIED via unix_socket; + + majd rá kell venni a munin-t, hogy a "munin" felhasználónévvel futtassa, ezt a "/etc/munin/plugin-conf.d/munin-node" + fájlba kell beírni, a következő sorok hozzáadásával: + + [mayor_munin] + user munin + + Fontos: ekkor a mayor_munin.php tulajdonosát a "munin"-ra kell állítani! + + + +--(VII.) Finomhangolás: + Végül írjuk be a "mayor_munin.php" elejére, a "$set['___']" tömböt módosítva, a maysql adatokat, + illetve itt tudjuk beállítani az aktivitáshoz számolt időt percben, és a napló webcímét is. + + +--(VIII.) Befejezésképpen pedig indítsuk újra a munin-t az alábbi parancsokkal: + >>> /etc/init.d/munin-node restart + >>> /etc/init.d/munin restart + + +--(++) a beálítás végeztével a következő paranccsal ellenőrizhetjük, hogy mindent jól csináltunk-e: + >>> munin-run mayor_munin + + Ekkor egy listát kapunk, ahol a változók nevei ("mayor_xxxx_xx.values") mellett számértékeket látunk, + ha semmi, vagy a számok helyett egy "U" betű jelenik meg, akkor még valamit finomhangolni kell. diff --git "a/egy\303\251b/munin/mayor_munin.php" "b/egy\303\251b/munin/mayor_munin.php" new file mode 100755 index 00000000..92fc264d --- /dev/null +++ "b/egy\303\251b/munin/mayor_munin.php" @@ -0,0 +1,122 @@ +#!/usr/bin/env php += 7 ) { //MySQLi (Improved) és php7 kell!!! + + $ret['ip_b'] = 0; + $ret['ip_k'] = 0; + $ret['p_pri'] = 0; + $ret['p_par'] = 0; + $ret['a_t1'] = 0; + $ret['a_t2'] = 0; + $ret['a_tt'] = 0; + $l = mysqli_connect($set['db_host'], $set['db_user'], $set['db_pass'], $set['db_db']); + if(!$l){ +// echo "hiba\n "; + $ret['ip_b'] = "U"; + $ret['ip_k'] = "U"; + $ret['p_pri'] = "U"; + $ret['p_par'] = "U"; + $ret['a_t1'] = "U"; + $ret['a_t2'] = "U"; + $ret['a_tt'] = "U"; + + } else{ + mysqli_set_charset($l, "utf8"); + $r = mysqli_query($l," SELECT session.userAccount,session.policy, UNIX_TIMESTAMP(session.activity) AS activity, loginLog.ip + FROM mayor_login.session, mayor_login.loginLog + WHERE session.dt = loginLog.dt AND session.userAccount=loginLog.userAccount AND loginLog.flag=0; "); + + while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) { + if($row['policy'] == "private") { + $ret['p_pri'] ++; + } + if($row['policy'] == "parent") { + $ret['p_par'] ++; + } + + if( $row['activity'] >= time()-$set['t_active']*60){ //Az elmúlt x percben aktívak voltak + $ret['a_t1']++; + } else if( $row['activity'] >= time()-$set['t_active']*2*60){ //Az elmúlt 2*x percben aktívak voltak + $ret['a_t2']++; + } else { + $ret['a_tt']++; + } + + if( preg_match('/^((10\.)|(192\.168\.)|(172\.16\.)|(fd..\:)).*/', $row['ip']) ){ + $ret['ip_b']++ ; + } else{ + $ret['ip_k']++ ; + } + } + } + + @mysqli_free_result($r); + @mysqli_close($l); + echo "mayor_ip_sum.value ".($ret['ip_b']+$ret['ip_k'])."\n". "mayor_ip_k.value ".$ret['ip_k']."\n". "mayor_ip_b.value ".$ret['ip_b']."\n" ; + echo "mayor_p_pri.value ".$ret['p_pri']."\n". "mayor_p_par.value ".$ret['p_par']."\n"; + echo "mayor_a_t1.value ".$ret['a_t1']."\n". "mayor_a_t2.value ".$ret['a_t2']."\n". "mayor_a_tt.value ".$ret['a_tt']."\n" ; + + } else{ + echo "mayor_ip_sum.value U\n". "mayor_ip_b.value U\n". "mayor_ip_k.value U\n" ; + echo "mayor_p_pri.value U\n". "mayor_p_par.value U\n"; + echo "mayor_a_t1.value U\n". "mayor_a_t2.value U\n". "mayor_a_tt.value U\n"; + } +} + +?> \ No newline at end of file diff --git "a/egy\303\251b/nextcloud/README" "b/egy\303\251b/nextcloud/README" new file mode 100644 index 00000000..bb620cf5 --- /dev/null +++ "b/egy\303\251b/nextcloud/README" @@ -0,0 +1,215 @@ + +Nextcloud(13) - Mayor script + +Ezen script segítségével a Mayor-naplóból tudunk felhasználókat és csoportokat importálni a Nextcloud felhőbe, +létrehozva ezzel a saját, iskolai felhőszolgáltatásunkat. + +Ez a script lényegében annyit csinál, hogy a mysql-ből lekérdezi a mayor diák-tankör-tanár kapcsolatokat, +majd a tankörök nevei alapján létrehozza a csoportokat és a felhasználókat a Nextcloud szerveren, +majd belépteti ezen csoportokba a diákokat, és tanárokat, megspórolva ezzel a kézi (egyesével történő) feltöltést, +és egy csomó időt az adminisztrátornak. + +Támogatja a külön, illetve az egy, közös szerverre történő telepítését a mayornak és a nextcloud-nak. **(lásd: Szeparációs lehetőségek rész.) +Egyelőre még csak a Nextcloud 13.x -mal tesztelt. + +FONTOS! + Legalább "php7.0" és "Apache 2.4" kell hozzá! + + + +Beállítása az alábbiak szerint: (egy lehetséges elrendezés) + +-(I.) Először telepítsünk föl egy Nextcloud(13+) szervert egy Debian 9+ szerverre, + szükség van e-mail küldés (smtp) szolgáltatásra is. (ez lehet külső, pl.: google) + Bővebb leírást a telepítésről a + https://docs.nextcloud.com/server/13/admin_manual/installation/index.html oldalon találunk. + +-(II.) Helyezzük el a "mayor-nextcloud.php"-t biztos, védett helyre,a nextcloud szerveren, akár a /etc/ mappába, akár a /root könyvtárba, + ezt később "root"-ként kell majd futtatnunk, és mysql jelszó is (lehet/) van benne, + ezért ennek megfelelően állítsuk be a tulajdonost, és vegyük el a jogosultságokat. (chown root; chmod 600) + + + +-(III.) A fajl elején találhatóak a konfigurációs adatok, ezeket a következőképpen módosíthatjuk: + + + $db['host'] = "localhost"; //Ez a nextcloud alatt futó mysql elérhetősége. + // (Csak localhost lehet, a scriptet a nextcloud-szerveren kell futtatnunk.) + + $db['port'] = "3306"; //nextcloud-mysql port + + $db['user'] = "root"; //nextcloud-mysql felhasználónév + // HA nem a root-ot használjuk, akkor, a használt felhasználónak írási-olvasási-törlési + // (insert,select,update,delete) joggal kell rendelkeznie a nextcloud adatbázis "..groups" tábláján, + // valamit saját kezűleg kell létrehozni a script saját, nyilvántartó adatbázisát, és a fenti jogokat beállítani rá. + // Ha a Debian-on alapértelmezett root-ot használjuk, akkor mindez automatikusan történik. + + $db['pass'] = ""; //A nextcloud-mysql jelszó (pl a "root" felhasználónévhez tartozó) + // érdemes a debian 9.x-en, a root-hoz alapértelmezett "unix_socket" bejelentkezési módot + // használnunk, ez biztonságosabb, mert nem jön létre "olvasható" jelszó. + + + + $db['nxt_dbname'] = "nextcloud"; //A Nextcloud által használt adatbázis neve. + $db['nxt_prefix'] = "oc_"; //A Nextcloud által használt adatbázisban a táblák prefix-je. (ha van) + + + $db['m2n_db'] = "mayor_to_nextcloud"; //A nyilvántartó adatbázis neve. + // Ennek az adatbázisnak a nextcloud-mysql szerveren kell lennie! + // + // Ebben az adatbázisban könyveli el a script által létrehozott felhasználókat, azért, + // hogy így meg tudja különböztetni, a saját maga által létrehozottakat, az Adminisztrátor + // által, külön létrehozott felhasználóktól. + + $db['m2n_prefix'] = "m2n_"; //A nyilvántartó adatbázisban használt prefix, ha van. (ha nincs, akkor "üres string"-re kell állítani) + + + //$db['mayor_host'] = ""; //Akkor használatos, ha a mayor alatti mysql szerver egy másik szerveren van. + //$db['mayor_port'] = ""; // ekkor ki kell venni kommentből, és ki kell tölteni a mayor-mysql serverre érvényes adatokkal. + //$db['mayor_user'] = ""; + //$db['mayor_pass'] = ""; //A kiválasztott felhaználónak olvasnia (GRANT SELECT) kell tudnia a mayor-mysql serveren a(z): + // intezmeny_xxx, mayor_parent, naplo_xxx_yyyy adatbázisokból. + + //Ha a mayor-mysql sezvere fizikailag (vagy virtuálisan) másik szerveren van, akkor érdemes egy "ssh-tunnel"-lel + // áthozni a portját a nextcloud-serverre. (ez a legbiztonságossabb) + + + $m2n['isk_rovidnev'] = "rovid"; //A mayor-ban használt "iskola rövidneve" megnevezés. + + $m2n['min_evfolyam'] = 10; //A minimális évfolyam, amelytől fölfelé engedélyezzük a felhő használatát a diákoknak. + + $m2n['csoport_prefix'] = "(tk) "; //A Nextcloud-ban ezzel az előtaggal jelennek majd meg mayor-ból importált csoportok, a jobb átláthatóság érdekében. + + + + $m2n['default_email'] = "rendszergazda@iskola.hu"; //Ha a mayor intezmeny_xxx.diak, vagy az intezmeny_xxx.tanar táblákban nincs kitöltve az + // e-mail, akkor ezt használja alapértelmezetten. + // (ide megy a jelszó-emlékeztető, amíg a felhasználó birtokba nem veszi a fiókját) + + $m2n['default_passw'] = "EHYmGktzrdfS7wxJR6DFqxjJ"; //Az induló jelszó a Nextcloud-ban a felhasználóknak. (érdemes erőset megadni, a botnet-ek miatt) + + $m2n['default_quota'] = "10GB"; //Az induló fájl-kvóta a Nextcloud-ban. + + $m2n['default_lang'] = "hu"; //Az alapértelmezett nyelv (később minden felhasználó átállíthatja magának) + + $m2n['mindenki_csop'] = "naplós_felhasználók"; //A Nextcloud "mindenki" csoportja + // ebbe a "mindenki" csoportba minden, a script által létrehozott felhasználó bekerül. + + $m2n['verbose'] = 3 //Log bőbeszédűség (A leg informatívabb, talán a 3-mas fokozat.) + // 0: csak fatális hibák, 1: fontosabbak, 2: csop./felh. elvétel, 3: csop./felh. hozzáadás, + // 4: csop./felh. tények, 5: részletesebben, 6: sql query + bash parancsok kiírása + + + $occ_path = "/var/www/nextcloud/"; //A Nextcloud-server fájljainak elérési útja. (DocumentRoot) + // Erre szükség van a nextcloud "occ" parancsának eléréséhez. + + $occ_user = "www-data"; //A Nextcloud-servert futtató (Apache) felhasználónév + + + + FONTOS!! + A Nextcloud szerver "occ" parancsa elérhető kell legyen a script számára! + Az "occ" parancs működését pl. az: (>>> sudo -u www-data php /var/www/nextcloud/occ ) kiadásával ellenőrizzük! + + Lehetőség van a scriptet a "--loglevel xx" kapcsolóval is indítani. (>>> php mayor-nextcloud.php --loglevel 3 ) + + + + További Információk: + + Lehetőség van egy-egy felhasználó letiltására, ezt a nyilvántartó adatbázisban tehetjük meg, a "register" tábla, + az adott felhasználónévhez tartozó "status" mezőjének "forbidden"-re állításával. + Ekkor a script nem fog foglalkozni, az adott felhasználóval a továbbiakban. + + + Esetleg érdemes lehet a scriptet betenni a "cron"-ba (éjszakára), így naponta lefut, és követi napló változásait. + (Ez esetben figyelni kell arra, hogy mayorban a tankör-diák, tankör-tanár összerendelések az év végén lejárhatnak, (pl. júni. 15-én) + így a script futtatása júni. 16-án kitörli, letiltja az összes létrehozott mayor-os csoportot, és felhasználót a nextcloud-ból, + amely csak a script szept. 1-je után történő futtatásával hozható vissza, + ezért érdemes lehet a script automatikus futtatását átmenetileg júni. 15. és szept. 1. között felfüggeszteni. ) + (pl: /etc/crontab -ban + 01 3 * * * root php -f /root/mayor-nextcloud.php ) + + + A mayor által ajánlott "Vezetéknév.Keresztnév" típusú felhasználónév formátum, bár hasznos, mert könnyen megjegyezhető, + viszont (sajnos) egyáltalán nem POSIX kompatibilis (amely csak az angol ABC betűit +pár kiegészítő karaktert engedélyez) + így a legtöbb rendszerrel nem hozható összhangba, ezért szükség van az ékezetes karakterek lecserélésére. + + A karakterek cseréje az alábbi módon történik: + + á --> aa Á --> Aa + ä --> ae Ä --> Aae + é --> ee É --> Ee Például: + í --> ii Í --> Ii Vezetéknév.Keresztnév --> Vezeteekneev.Keresztneev + ó --> oo Ó --> Oo Bőrönd.Ödön --> Booeroend.Oedoen + ö --> oe Ö --> Oe + ő --> ooe Ő --> Ooe Ha a mayor felhasználónév nem tartalmaz ékezetes betűt, + ú --> uu Ú --> Uu akkor nem történik csere, a felhasználónév marad az eredeti. + ü --> ue Ü --> Ue + ű --> uue Ű --> Uue + + Ezeket a karakter cseréket maga a script végzi, futás közben, a mayor felhasználónevekből, + a létrejövő Nextcloud felhasználónév már a lecserélt változat lesz. + + + + A mayor-nextcloud script működése néhány mondatban: + + Első lépésben lekérdezi a feltételeknek megfelelő tanköröket a mayorból, (tankör-osztály évfolyama, tankör aktív-e a dátumok apaján) + majd ez alapján ellenőrzi, hogy a Nextcloud-ban már szerepelnek-e ezen tankörneveknek megfelelő csoportok. + Ha új tankör van a mayorban, akkor azt a Nextcloud-ban is létrehozza, ha egy tankört töröltek a mayorból, akkor azt a csoportot Nextcloud-ból is törli. + Fontos! + A csoport prefix-szel, például: "(tk) "-val kezdődő csoportokat magáénak tekinti, és ha nem találja a mayorban, akkor automatikusan töröli! + + Második lépésben lekérdezi a felhasználókat a mayorból, (jogviszony státusz, évfolyam, kapcsolódó tankörök) + csak azokat a tanárokat, illetve diákokat veszi figyelembe, akinek a státusza nem "jogviszonya lezárva", vagy nem "felvételt nyert". + Ha az illető még nem rendelkezik felhasználónévvel a Nextcloud-ban, akkor létrehozza, + - ha a mayorban, az "intezmeny_xxx.diak", illetve az "intezmeny_xxx.tanar" táblákon van beállított e-mail címe, akkor azt használja, + - ha nincs, akkor az alapértelmezettet állítja be a Nextcloud-ba, valamint ekkor állítódik be az alapértelmezett qvóta, és a felhasználó valódi neve is. + (Ezeket később Rendszergazdai, és Felhasználói oldalról változtatni lehet, értelemszerűen.) + Ha az illető már rendelkezik felhasználónévvel, de az le volt tiltva, akkor újra engedélyezi. + + Ezután egyezteti a tankör-csoport összerendeléseket, ha az illető új tankörbe került be, akkor belépteti a megfelelő csportba, + ha kikerült egy tankörből, akkor a csoportból is kilépteti. + + Végül ellenőrzi a kiléptetndő felhasználókat. + Ha velekinek a státusza a mayorban "jogviszonya lezárva"-ra változott, vagy a felhasználónevét a mayorból törölték, akkor + - ha még nem lépett be soha a Nextcloudba, akkor a felhasználót fizikailag törli. + - ha már használta a fiókját, akkor csak letiltja, azért, hogy a fájljai ne vesszenek el automatikusan. + (Ez, utóbbi esetben a Rendszergazdának kell külön elvégezni a törlést.) + + + + + ** Szeparációs lehetőségek: + Biztonsági megfontolásokból nem javasolt a Nextcloud-ot és a mayort ugyanazon Apache szerver és ugyanazon "DocumentRoot" alól futtatni. + Szétválasztásukra többféle lehetőség van: + - külön fizikai szerver mindegyiknek + - külön virtuális szerver mindegyiknek + - külön "DOCKER konténer" mindegyiknek + - külön felhasználónévvel futtatott php + + Természetesen a legerősebb szeparációt az 1. megoldás jelenti, de ugyanakkor előjöhetnek ennek hátrányai is, például, hogy dupla + akkora adminisztrációs teher a rendszergazdának. + Ugyanakkor foglalkoznunk kell azzal a kérdéssel is, hogy ha az iskola vásárol egy komolyabb szervergépet, (ma már) több-tíz gigabájt RAM-mal, + ekkor felesleges pazarlás fizikailag is külön szervergépre telepíteni a kettőt, különösen, ha figyelembe vesszük a mayor (ma már kicsinek számító) + memória igényét is. + + Ekkor jöhet képbe a 2. és 3. lehetőség, amely már ugyanazon fizikai gépre is telepíthető egyszerre, ez már ésszerű elosztást biztosít. + Ám, ha tovább gondoljuk, akkor szóba jöhet az a kérdés is, hogy ekkora fizikai memória (RAM) esetén + miért futtassunk több, különálló mysql-szervert, ahelyett, hogy egy, központi mysql-serverünk lenne, + aminek kiosztunk néhányszor-tíz gigabájt ramot? + (Különösen annak fényében, hogy egy ilyen "felturbózott" mysql sokszorosára növeli a mayor-napló sebességét.) + + Erre a megoldásra születtek a "php külön felhasználónévvel futtatva" típusú lehetőségek. + Ezek közül is a legésszerűbb, és legbiztonságosabb az Apache2 mod_suexec és mod_fcgid segítségével futtatott php. + (Ekkor egy, közös Mysql és Apache2 szerver van, ahol az egyes weboldalak (apache virtualhost-ok) mind, + külön "rendszer felhasználónévvel" futnak, külön "DocumentRoot" könyvtárból, (és külön a www-data felhasználótól) + ahol a felhasználónév váltást a mod_suexec modul végzi, a php futtatását pedig a mod_fcgid. ) + (Természetesen vannak még más megoldások is, mint pl. a php_fpm, de azokat nem javaslom. ) + + + + + + diff --git "a/egy\303\251b/nextcloud/mayor-nextcloud.php" "b/egy\303\251b/nextcloud/mayor-nextcloud.php" new file mode 100644 index 00000000..689715d7 --- /dev/null +++ "b/egy\303\251b/nextcloud/mayor-nextcloud.php" @@ -0,0 +1,635 @@ +#!/usr/bin/php += 7) { //MySQLi (Improved) és php7 kell! + + function db_connect(array $db){ + global $log; + if ($log['verbose'] > 0 ){ echo "***\tAdatbázis kapcsolódás. (m2n_db=".$db['m2n_db'].")\n"; } + $l = mysqli_connect($db['host'], $db['user'], $db['pass'], $db['m2n_db'],$db['port']); + if(!$l){ + if ($log['verbose'] > 0 ){echo "*\tAdatbázis kapcsolat újrapróbálása... (m2n_db=) hiba:".mysqli_connect_errno()."\n";} + $db_old = $db['m2n_db']; + $db['m2n_db'] = ""; + $l = mysqli_connect($db['host'], $db['user'], $db['pass'], $db['m2n_db'],$db['port']); + if(!$l){ + echo "\n**** Sikertelen kapcsolódás! **** (m2n_db=".$db['m2n_db'].") info:".mysqli_get_host_info($l)."\n"; + return null; + } else{ + if ($log['verbose'] > 4 ){ echo "*\tSikeres kapcsolódás. (m2n_db=".$db['m2n_db'].") info:".mysqli_get_host_info($l)."\n";} + if ($log['verbose'] > 0 ){ echo "***\tAdatbázis létrehozása: ".$db_old." ...\n";} + mysqli_set_charset($l, "utf8"); + mysqli_query($l, "SET NAMES utf8 COLLATE utf8_general_ci;" ); + script_install($l); + return $l; + } + } else { + if ($log['verbose'] > 4 ){ echo "*\tSikeres kapcsolódás. (m2n_db=".$db['m2n_db'].") info:".mysqli_get_host_info($l)."\n"; } + mysqli_set_charset($l, "utf8"); + mysqli_query($l, "SET NAMES utf8 COLLATE utf8_general_ci;" ); + if(mysqli_query($l, "SELECT * FROM ".$db['m2n_db'].".".$db['m2n_prefix']."register;" ) == FALSE ){ + script_install($l); + } + return $l; + } + } +// bezár: mysqli_close($link); + + function script_install($link){ + global $db,$log; + $q = "CREATE DATABASE IF NOT EXISTS ".$db['m2n_db']." DEFAULT COLLATE 'utf8_general_ci'; "; + if ($log['verbose'] > 0 ){ echo "M2N -> \t".$q."\n"; } + if(( $r = mysqli_query($link, $q)) !== FALSE ){ + if ($log['verbose'] > 0 ){ echo "*\tAz ".$db['m2n_db']." adatbázis sikeresen létrehozva.\n"; } + } + $q = "CREATE TABLE IF NOT EXISTS ".$db['m2n_db'].".".$db['m2n_prefix']."register ( + account VARCHAR(64) NOT NULL COLLATE 'utf8_bin', + status ENUM('active','disabled','forbidden','deleted') NULL DEFAULT 'active' COLLATE 'utf8_bin', + PRIMARY KEY (account)) + COLLATE='utf8_general_ci' + ENGINE=InnoDB;"; + if ($log['verbose'] > 5 ){ echo "M2N ->\t".$q."\n"; } + if(( $r = mysqli_query($link, $q)) !== FALSE ){ + if ($log['verbose'] > 0 ){ echo "*\tAz ".$db['m2n_db'].".".$db['m2n_prefix']."register (nextcloud-register) tábla sikeresen létrehozva.\n";} + } + } + + function nxt_register_userlist($link){ //akiket a script hozott létre + global $db,$log; + $q = "SELECT * FROM ".$db['m2n_db'].".".$db['m2n_prefix']."register WHERE STATUS != 'forbidden'; "; + if ($log['verbose'] > 5 ){ echo "M2N ->\t".$q."\n"; } + if(( $r = mysqli_query($link, $q)) !== FALSE ){ + while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) { + $ret['account'][] = $row['account']; + $ret['status'][] = $row['status']; + } + mysqli_free_result($r); + if ($log['verbose'] > 4 ){ echo "*\tFelhasználó-feljegyzések lekérdezése.\n"; } + return $ret; + } else { + echo "\nM2N -> \t**** Adatbázislekérdezési hiba! ****\n"; + } + } + + function nxt_register_forbiddenlist($link){ //akiket a rendszergazda kitiltott + global $log,$db; + $q = "SELECT * FROM ".$db['m2n_db'].".".$db['m2n_prefix']."register WHERE STATUS = 'forbidden'; "; + if ($log['verbose'] > 5 ){ echo "M2N ->\t".$q."\n"; } + if(( $r = mysqli_query($link, $q)) !== FALSE ){ + $ret = array(); + while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) { + $ret[] = $row['account']; + } + mysqli_free_result($r); + if ($log['verbose'] > 4 ){ echo "*\tFelhasználó-letiltások feljegyzésének lekérdezése.\n"; } + return $ret; + } else { + echo "\nM2N ->\t**** Adatbázislekérdezési hiba! ****\n"; + } + } + + function nxt_register_useradd($link, $account){ // feljegyzi az általa létrehozott felhasználókat + global $log,$db; + $q = "INSERT INTO ".$db['m2n_db'].".".$db['m2n_prefix']."register (account) VALUES ('".$account."')"; + if ($log['verbose'] > 5 ){ echo "M2N -> \t".$q."\n"; } + if(( mysqli_query($link, $q)) !== FALSE ){ + if ($log['verbose'] > 4 ){ echo "*\tFelhasználó-hozzáadás feljegyzése.\n"; } + } + } + + function nxt_register_userena($link, $account){ // az engedélyezetteket + global $db,$log; + $q = "UPDATE ".$db['m2n_db'].".".$db['m2n_prefix']."register SET status='active' WHERE account='".$account."'"; + if ($log['verbose'] > 5 ){ echo "M2N ->\t".$q."\n"; } + if(( mysqli_query($link, $q)) !== FALSE ){ + if ($log['verbose'] > 4 ){ echo "*\tFelhasználó-engedélyezés feljegyzése.\n" ;} + } + } + + function nxt_register_userdel($link, $account){ // a törölteket + global $db,$log; + $q = "DELETE FROM ".$db['m2n_db'].".".$db['m2n_prefix']."register WHERE account='".$account."' "; + if ($log['verbose'] > 5 ){ echo "M2N ->\t".$q."\n"; } + if(( mysqli_query($link, $q)) !== FALSE ){ + if ($log['verbose'] > 5 ){ echo "*\tFelhasználó-törlés feljegyzése.\n"; } + } + } + + function nxt_register_userdis($link, $account){ // a letiltottakat + global $m2n,$db,$log; + $q = "UPDATE ".$db['m2n_db'].".".$db['m2n_prefix']."register SET status='disabled' WHERE account='".$account."'"; + if ($log['verbose'] > 5 ){ echo "M2N ->\t".$q."\n"; } + if(( mysqli_query($link, $q)) !== FALSE ){ + if ($log['verbose'] > 5 ){ echo "*\tFelhasználó-letiltás feljegyzése.\n"; } + } + } + + + + + function user_add($userAccount, $fullName){ // létrehoz egy felhasználót a Nextcloud-ban + global $occ_path,$occ_user,$m2n,$log; +// export OC_PASS=ErősJelszó123; su -s /bin/sh www-data -c 'php web/occ user:add --password-from-env --display-name="Teszt Tamás" --group="csop" t.tamas' + if(strlen($userAccount) > 64 or strlen($fullName) > 64){ + echo "\n******** Hiba: A felahsználónév, vagy a \"teljes név\" hosszabb, mint 64 karakter! ********\n"; + } else { + $e = "export OC_PASS=".$m2n['default_passw']."; su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:add \ + --password-from-env --display-name=\"$fullName\" --group=\"".$m2n['mindenki_csop']."\" $userAccount'" ; + if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; } + shell_exec($e); + } + } + + function user_del($userAccount){ // kitöröl vagy letilt egy felhasználót a Nextcloud-ban + global $occ_path,$occ_user,$log; + $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:info $userAccount --output=json'"; + if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; } + $last_login = json_decode(shell_exec($e),true)['last_seen'] ; + if($last_login == "1970-01-01T00:00:00+00:00" ){ + $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:delete $userAccount'"; // Ha még soha nem lépett be + if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; } + shell_exec($e); // akkor törölhető + } else { + $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:disable $userAccount'"; + if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; } + shell_exec($e); // különben csak letiltja + } + + } + + function user_dis($userAccount){ // letiltja a felhasználót a Nextcloud-ban + global $occ_path,$occ_user,$log; + $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:disable $userAccount'"; + if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; } + shell_exec($e); + } + + function user_ena($userAccount){ // engedélyezi + global $occ_path,$occ_user,$log; + $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:enable $userAccount'"; + if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; } + shell_exec($e); + } + + + function nxt_group_list() { // Csoportok listázása a Nextcloud-ból + global $occ_path,$occ_user,$log; + $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" group:list --output=json'"; + if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; } + return (array)json_decode(shell_exec($e),true); + } + + function nxt_user_list() { // Felhasználók listázása a Nextcloud-ból + global $occ_path,$occ_user,$log; + $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:report | grep \"total\" | sed -e \"s/[^0-9]//g\" | tr -d \"[:blank:]\n\" '"; + if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; } + $num = shell_exec($e); + $num = $num + 100; // Biztos-ami-biztos, a nextcloud rejtett hibái miatt... + $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:list --limit $num --output=json'"; + if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; } + return (array)json_decode(shell_exec($e),true); + } + + function nxt_user_lastlogin($userAccount){ // legutóbbi belépés lekérdezése + global $occ_path,$occ_user,$log; + $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:info $userAccount --output=json'"; + if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; } + return json_decode(shell_exec($e),true)['last_seen'] ; + } + + + function user_set($userAccount, array $params){ //beállítja az e-mailt, quota-t, nyelvet a kapott értékekere + global $occ_path,$occ_user,$log; + if(isset($params['quota'])) + $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:setting $userAccount files quota \"".$params['quota']."\"'"; + if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; } + shell_exec( $e ); + if(isset($params['email'])) + $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:setting $userAccount settings email \"".$params['email']."\"'"; + if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; } + shell_exec( $e ); + if(isset($params['lang'])) + $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:setting $userAccount core lang \"".$params['lang']."\"'"; + if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; } + shell_exec($e); + } + + function group_add($groupName){ //Új csoport létrehozása a Nextcloud-ban + global $link,$db,$log; + if(strlen($groupName) > 64){ //mivel (egyelőre) nics erre 'occ' parancs, ezért közvetlenül kell... + echo "\n****** Hiba: a csoportnév nagyobb, mint 64 karakter!! ******\n"; + } else { + $q = "INSERT IGNORE INTO ".$db['nxt_dbname'].".".$db['nxt_prefix']."groups (gid) VALUES ('".$groupName."'); "; + if ($log['verbose'] > 5 ){ echo "NXT ->\t".$q."\n"; } + if(mysqli_query($link, $q) !== TRUE ) echo "\nNXT -> \t****** Csoport létrehozási hiba. (adatbázis) ******\n"; + } + } + + function group_del($groupName){ // Csoport törlése a Nextcloud-ból + global $occ_user,$occ_path,$db,$link,$log; + $grp = nxt_group_list(); + if(isset($grp[$groupName])){ // Mivel erre még nincs hivatalos "occ" parancs, ezért közvetlenül kell... + foreach($grp[$groupName] as $key => $user){ + $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" group:removeuser \"$groupName\" $user'"; + if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; } + shell_exec($e); + if ($log['verbose'] > 1 ){ echo "*--\t\tTörölve ($user) a:\t$groupName\t csoportból.\n"; } + } + $q = "DELETE FROM ".$db['nxt_dbname'].".".$db['nxt_prefix']."groups WHERE gid='".$groupName."'; " ; + if ($log['verbose'] > 5 ){ echo "NXT ->\t".$q."\n"; } + if(mysqli_query($link, $q) !== TRUE ) echo "\n NXT -> \t****** csoport törlési hiba. (adatbázis) ******\n"; + } + } + + function group_user_add($groupName, $userAccount){ // Hozzáad egy felhasználót egy csoporthoz a Nextcloud-ban + global $occ_user, $occ_path,$log; + $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" group:adduser \"$groupName\" $userAccount'"; + if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; } + shell_exec($e); + } + + function group_user_del($groupName, $userAccount){ // Kitöröl egy felhasználót egy Nextcoud csoportból + global $occ_user, $occ_path,$log; + $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" group:removeuser \"$groupName\" $userAccount'"; + if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; } + shell_exec($e); + } + + + function get_mayor_tankor($link){ // A tankörök neveinek lekérdezése a mayorból + global $m2n,$log; + $ret = array(); +//Létező összes tankör: +/* $q = "SELECT tankorId, TRIM(BOTH ' ' + FROM CONCAT('".$m2n['csoport_prefix']."',tankorNev)) AS tankorNev + FROM intezmeny_".$m2n['isk_rovidnev'].".tankorSzemeszter + WHERE tanev = ( + SELECT tanev + FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter + WHERE statusz = 'aktív' + GROUP BY tanev) AND szemeszter = ( + SELECT szemeszter + FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter + WHERE statusz = 'aktív' AND kezdesDt <= CURRENT_DATE() AND CURRENT_DATE() <= zarasDt); "; +*/ +//csak a megadott évfeolyamokhoz tartozó tankörök: + $q = "SELECT tanev FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter WHERE statusz = 'aktív' GROUP BY tanev; "; + if ($log['verbose'] > 5 ){ echo "MAY ->\t".$q."\n"; } + if( ($r = mysqli_query($link, $q)) !== FALSE ){ + $ev = mysqli_fetch_array($r, MYSQLI_ASSOC); + $q = "SELECT tankorId, TRIM(BOTH ' ' + FROM CONCAT('".$m2n['csoport_prefix']."',tankorNev)) AS tankorNev + FROM intezmeny_".$m2n['isk_rovidnev'].".tankorSzemeszter + WHERE tanev = ( + SELECT tanev + FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter + WHERE statusz = 'aktív' + GROUP BY tanev) AND szemeszter = ( + SELECT szemeszter + FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter + WHERE statusz = 'aktív' AND kezdesDt <= CURRENT_DATE() AND CURRENT_DATE() <= zarasDt) AND tankorId IN( + SELECT tankorId + FROM intezmeny_".$m2n['isk_rovidnev'].".tankorOsztaly + WHERE osztalyId IN ( + SELECT osztalyId + FROM naplo_".$m2n['isk_rovidnev']."_".$ev['tanev'].".osztalyNaplo + WHERE evfolyamJel >= ".$m2n['min_evfolyam']." + ORDER BY osztalyId) + ORDER BY tankorId ); + "; + if ($log['verbose'] > 5 ){ echo "MAY ->\t".$q."\n"; } + if(( $r = mysqli_query($link, $q)) !== FALSE ){ + while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) { + $ret[] = $row; + } + mysqli_free_result($r); + return $ret; + } else { + echo "\nMAY ->\t ******** Mayor_napló (tankör)lekérdezési hiba. (adatbázis) ********\n"; + } + } + } + + + function get_mayor_tanar($link){ // A tanárok lekérdezése a mayorból + global $m2n,$log; + $ret = array(); + $q = "SELECT userAccount, email, tanar.tanarId, tankorTanar.tankorId, TRIM(BOTH ' ' + FROM CONCAT_WS(' ',viseltNevElotag, viseltCsaladinev, viseltUtonev)) AS fullName, TRIM(BOTH ' ' + FROM CONCAT('".$m2n['csoport_prefix']."',tankorNev)) AS tankorNev + FROM intezmeny_".$m2n['isk_rovidnev'].".tanar, mayor_private.accounts, intezmeny_".$m2n['isk_rovidnev'].".tankorTanar, intezmeny_".$m2n['isk_rovidnev'].".tankorSzemeszter + WHERE accounts.studyId = tanar.oId AND statusz != 'jogviszonya lezárva' AND tanar.beDt <= CURRENT_DATE() AND (CURRENT_DATE() <= tanar.kiDt + OR tanar.kiDt IS NULL) AND tanar.tanarId = tankorTanar.tanarId AND tankorTanar.beDt <= CURRENT_DATE() AND CURRENT_DATE() <= tankorTanar.kiDt + AND tankorTanar.tankorId = tankorSzemeszter.tankorId AND tankorSzemeszter.tanev = ( + SELECT tanev + FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter + WHERE statusz = 'aktív' + GROUP BY tanev) AND szemeszter = ( + SELECT szemeszter + FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter + WHERE statusz = 'aktív' AND kezdesDt <= CURRENT_DATE() AND CURRENT_DATE() <= zarasDt) + ORDER BY userAccount ; + "; + if ($log['verbose'] > 5 ){ echo "MAY ->\t".$q."\n"; } + if(( $r = mysqli_query($link, $q)) !== FALSE ){ + while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) { + $ret[] = $row; + } + mysqli_free_result($r); + return $ret; + } else { + echo "\nMAY ->\t ******** Mayor_napló (tanár)lekérdezési hiba. (adatbázis) ********\n"; + } + } + + + function get_mayor_diak($link){ // diákok lekérdezése + global $m2n,$log; + $ret = array(); + $q = "SELECT tanev FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter WHERE statusz = 'aktív' GROUP BY tanev; "; + if ($log['verbose'] > 5 ){ echo "MAY ->\t".$q."\n"; } + if( ($r = mysqli_query($link, $q)) !== FALSE ){ + $ev = mysqli_fetch_array($r, MYSQLI_ASSOC); + $q = "SELECT userAccount, email, diak.diakId, tankorDiak.tankorId, TRIM(BOTH ' ' + FROM CONCAT_WS(' ',viseltNevElotag, viseltCsaladinev, viseltUtonev)) AS fullName, TRIM(BOTH ' ' + FROM CONCAT('".$m2n['csoport_prefix']."',tankorNev)) AS tankorNev + FROM intezmeny_".$m2n['isk_rovidnev'].".diak, mayor_private.accounts,intezmeny_".$m2n['isk_rovidnev'].".tankorDiak, intezmeny_".$m2n['isk_rovidnev'].".tankorSzemeszter + WHERE diak.diakId IN ( + SELECT diakId + FROM intezmeny_".$m2n['isk_rovidnev'].".osztalyDiak + WHERE osztalyId IN ( + SELECT osztalyId + FROM naplo_".$m2n['isk_rovidnev']."_".$ev['tanev'].".osztalyNaplo + WHERE evfolyamJel >= ".$m2n['min_evfolyam']." + ORDER BY osztalyId) + ORDER BY diakId) AND diak.statusz != 'jogviszonya lezárva' AND diak.statusz != 'felvételt nyert' AND diak.oId = accounts.studyId + AND tankorDiak.diakId = diak.diakId AND tankorDiak.beDt <= CURRENT_DATE() AND (tankorDiak.kiDt >= CURRENT_DATE() OR tankorDiak.kiDt IS NULL) + AND tankorSzemeszter.tankorId = tankorDiak.tankorId AND tankorSzemeszter.tanev = ( + SELECT tanev + FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter + WHERE statusz = 'aktív' + GROUP BY tanev) AND tankorSzemeszter.szemeszter = ( + SELECT szemeszter + FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter + WHERE statusz = 'aktív' AND kezdesDt <= CURRENT_DATE() AND CURRENT_DATE() <= zarasDt) + ORDER BY userAccount ; + "; + if ($log['verbose'] > 5 ){ echo "MAY ->\t".$q."\n"; } + if(( $r = mysqli_query($link, $q)) !== FALSE ){ +// mysqli_fetch_array($r, MYSQLI_ASSOC); + while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) { + $ret[] = $row; + } + mysqli_free_result($r); + return $ret; + } else { + echo "\nMAY ->\t ******** Mayor_napló (diák)lekérdezési hiba. (adatbázis) ********"; + } + } else { + echo "\nMAY ->\t ******** Mayor_napló (diák)lekérdezési hiba. (adatbázis) ********"; + } + + } + + +//------------------------------------------------------------------------------------------------------------------------------- + + if($log['verbose'] > 0) { echo "\n\n######## Mayor-Nextcloud Script ########\n\n\n"; } + + if(($link = db_connect($db)) == FALSE){ //csatlakozás + echo "\n******** MySQL (general) kapcsolat hiba. ********\n"; + echo "\n******** Script leáll... ********\n"; + die(); + } + $link2 = $link; + + group_add($m2n['mindenki_csop']); // A "mindenki" csoport hozzáadása + + + if(isset($db['mayor_user']) and isset($db['mayor_pass']) and isset($db['mayor_host']) or isset($db['mayor_port'])) + { + $db['user'] = $db['mayor_user']; //ha a mayor egy másik szerveren lenne + $db['pass'] = $db['mayor_pass']; + $db['host'] = $db['mayor_host']; + $db['port'] = $db['mayor_port']; + if(($link2 = db_connect($db)) == FALSE){ + echo "\n******** MySQL (mayor) kapcsolat hiba. ********\n"; + echo "\n******** Script leáll... ********\n"; + die(); + } else { + if ($log['verbose'] > 0 ){ echo "***\tMayor DB connect.\n"; } + } + } + + +//------------------------------------------------------------------------------------------------------------------------------ + +// Létrehozza az új Mayor tanköröket + if ($log['verbose'] > 0 ){ echo "\n***\tCsoportok egyeztetése.\n";} + $tankorok = get_mayor_tankor($link2); + $nxt_csop = nxt_group_list(); + foreach($tankorok as $key => $val){ //Végignézi a tankörök szerint + foreach($nxt_csop as $key2 => $val2){ // + if($key2 == $val['tankorNev']){ //Már van ilyen (tankör)nevű csoport + if ($log['verbose'] > 3 ){ echo " -\t Csoport:\t".$val['tankorNev']." \t ok.\n";} + break; + } + } + unset($nxt_csop[$val['tankorNev']]); //Megvizsgálva, többször már nem kell dönteni róla. + if($key2 != $val['tankorNev']){ //Ha nincs ilyen (tankör)nevű csoport + group_add($val['tankorNev']); //Akkor létrehozza + if ($log['verbose'] > 2 ){ echo "* -\t Új csoport:\t".$val['tankorNev']." \thozzáadva.\n";} + } + } +// A megszűnt tanköröket-csoportokat kitörli + foreach($nxt_csop as $key => $val){ + if(substr($key, 0, strlen($m2n['csoport_prefix'])) === $m2n['csoport_prefix'] ){ //Csak a "prefix"-el kezdődő nevűekre. + group_del($key); //elvégzi a törlést + if ($log['verbose'] > 1 ){ echo "** -\t Korábbi csoport:\t$key \t eltávolítva.\n";} + } else { + if ($log['verbose'] > 5 ){ echo " ---\t Külső csoport:\t$key \t békén hagyva.\n";} + } // Figyelem! A csoport prefix-szel: "(tk) " kezdődő csoportokat magáénak tekinti, automatikusan töröli! + } // Akkor is, ha az külön, kézzel lett létrehozva. + + + +//------------------------------------------------------------------------------------------------------------------------------- +// Felhasználónevek egyeztetése + if ($log['verbose'] > 0 ){ echo "\n***\tFelhasználók egyeztetése.\n";} + $mayor_user = array_merge( get_mayor_tanar($link2), get_mayor_diak($link2) ); //tanár, diák + $mayor_user = array_merge($mayor_user, array(array('userAccount' => null, 'fullName' => null, 'tankorNev' => null,)) ); //strázsa a lista végére + $nxt_user = nxt_user_list(); + $nxt_group = nxt_group_list(); + $nxt_registered = nxt_register_userlist($link); + $m2n_forbidden = nxt_register_forbiddenlist($link); + if ($log['verbose'] > 3 ){ echo "\n";} + + foreach($mayor_user as $key => $val){ + //Lecseréli az ékezetes betűket a felhasználónévből + $mayor_user[$key]['userAccount'] = str_replace($search, $replace, $val['userAccount']); // (pl: Á->Aa, á->aa, ...) + if(in_array($val['userAccount'], $m2n_forbidden) ){ //Ha a nyilvántartásban "forbidden"-ként szerepel, + unset($mayor_user[$key]); // akkor nem foglalkozik vele tovább. + } + } + + $curr = ""; + $tankorei = array(); + foreach($mayor_user as $key => $val){ //Végignézi a mayorból kinyert lista alapján. + + if($curr != $val['userAccount']){ //A következő felhasználó.. + foreach($nxt_user as $key2 => $val2){ + if($curr == $key2){ //Már létezik a felhasználó a Nextcloud-ban + $log['curr'] = "-\tFelhasználó:\t$curr_n ($curr) \t -- \tok.\n"; + if ($log['verbose'] > 3 ){ echo " -".$log['curr']; $log['curr'] = "";} + if($nxt_registered['status'][array_keys($nxt_registered['account'], $curr)[0]] == 'disabled' ){ + nxt_register_userena($link, $curr); //Ha netán le lenne tiltva, akkor engedélyezi, + user_ena($curr); //ha a script tiltotta le. + } + + foreach($nxt_group as $key3 => $val3){ //A tankörök egyeztetése + if(in_array($key3, $tankorei)){ //szerepel-e a felhasználó tankörei között a csoport? + if( in_array($curr, $val3)){ //Igen, és már benne is van +++ + + if ($log['verbose'] > 3 ){ echo " -\t\tBenne van a:\t$key3 \tcsoportban.\n";} + } else { //Nincs, most kell beletenni + if ($log['verbose'] > 2 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} echo "* -\t\tHozzáadva a:\t $key3 \tcsoporthoz.\n";} + group_user_add($key3, $curr); + } + } else { //Nem szerepel a tankörei között + if(in_array($curr, $val3) and (substr($key3, 0, strlen($m2n['csoport_prefix'])) === $m2n['csoport_prefix']) ){ + // korábban benne volt egy tankörben, de már nincs, vagy a hozzátartozó tankörben már nem tanít => kiveszi + if ($log['verbose'] > 1 ){if($log['curr'] !== ""){echo "*".$log['curr'];$log['curr'] = "";} echo "* -\t\tTörölve a:\t $key3 \tcsoportból.\n";} + group_user_del($key3, $curr); //egy korábbi tankör lehetett... + } + } + } + break; + } + } + unset($nxt_user[$curr]); //Megvizsgálva, többször már nem kell dönteni róla. + if($curr != $key2 and $curr != null){ //Nincs még ilyen felhasználó + if ($log['verbose'] > 2 ){ echo "**-\tFelhasználó:\t$curr_n ($curr) \t -- \tlétrehozva.\n";} + user_add($curr, $curr_n); //Akkor hozzá kell adni + nxt_register_useradd($link, $curr); + + foreach($tankorei as $key3 => $val3){ //Hozzáadja a (tankör)csoportokhoz is. + group_user_add($val3,$curr); + if ($log['verbose'] > 2 ){ echo "* -\t\tHozzáadva a:\t $val3 \tcsoporthoz.\n"; } + } + $params['quota'] = $m2n['default_quota']; // Alapértelmezett kvóta + $params['lang'] = $m2n['default_lang']; // Nyelv + if($curr_e == ""){ + $params['email'] = $m2n['default_email']; // e-mail beállítása + } else { + $params['email'] = $curr_e; // ha van a mysql-ben e-mail, akkor azt használja + } + user_set($curr,$params); //Alapértelmezett paraméterek érvényesítése + if ($log['verbose'] > 2 ){ echo "* -\t\tBeállítva:\t"."Qvóta: ".$params['quota']."\tNyelv: ".$params['lang']."\tE-mail: ".$params['email']."\n";} + } + + $tankorei = array(); // új ciklus kezdődik + $curr = $val['userAccount']; // + $curr_n = $val['fullName']; // + $curr_e = @$val['email']; // + } + $tankorei[] = $val['tankorNev']; // Egyébként a csoportok (tankörök) összegyűjtése + } + + +// A megszűnő felhasználónevek egyeztetése + if ($log['verbose'] > 0 ){ echo "\n***\tTörlendő/Letiltandó felhasználók egyeztetése.\n";} + $nxt_registered = nxt_register_userlist($link); + foreach($nxt_user as $key => $val){ //Benne van a nyilvántartásban, + if(in_array($key, $nxt_registered['account'])){ //vagyis a script adta hozzá korábban + if( nxt_user_lastlogin($key) == "1970-01-01T00:00:00+00:00" ){ //Még soha nem lépett be = 1970.01.01 ?? + user_del($key); //Akkor törli + nxt_register_userdel($link, $key); //A listáról is + if ($log['verbose'] > 1 ){ echo "**-\tFelhasználó:\t$val ($key)\t -- \ttörölve.\n";} + } else { + user_dis($key); //Különben csak letiltja (fájlok ne vesszenek el) + nxt_register_userdis($link, $key); //Feljegyzi a nyilvántartásba + if ($log['verbose'] > 1 ){ echo "**-\tFelhasználó:\t$val ($key)\t -- \t letiltva.\n";} + } + } + // döntési logika: + // ha benne van a $mayor_user-ben, + // - akkor vagy új user, vagy már meglévő, + // - ezért őt kihúzza az $nxt_user listáról, --> megtartja + // ezután ha valaki még rajta van az $nxt_user listán, az + // - vagy más, mayor_naplón kívüli user (rendszergazda vette föl) --> nem nyúl hozzá + // - vagy megszűnő, korábbi mayor_napló-s user --> törli (vagy letiltja) + // ha rajta van a $nxt_registered listán is, és nincs rajta $mayor_user listán + // - akkor őt a script hozta létre régen --> megszűnő, törli (vagy letiltja) + // (hiszen, ha aktív lenne, rajta lenne a $mayor_user listán, és kihúzta volna a $nxt_user-ből) + } + +// Végül a nyilvántartás kipucolása + if ($log['verbose'] > 0 ){ echo "\n***\tNyilvántartás ellenőrzése.\n";} + $nxt_user = nxt_user_list(); + $nxt_registered = nxt_register_userlist($link); + foreach($nxt_registered['account'] as $key => $val){ //Erre a nextcloud "occ" parancs hibakezelése miatt van szükség + + if(@$nxt_user[$val] === null ){ + if ($log['verbose'] > 4 ){ echo "**-\tFelhasználónév:\t($val)\t -- \t kivéve a nyilvántartásból.";} + nxt_register_userdel($link, $val); + } + } + +//------------------------------------------------------------------------------------------------------------------------------- + +//test +//script_install($link); + + + @mysqli_close($link2); + @mysqli_close($link); + if ($log['verbose'] > 0 ){echo "kész.\n";} //endline + +} else { + echo "\n\n******** Legalább PHP7 és mysqli szükséges! ********\n\n"; +} + + + +?> + + + + diff --git a/external/munin/README b/external/munin/README deleted file mode 100644 index a0ad5eb8..00000000 --- a/external/munin/README +++ /dev/null @@ -1,98 +0,0 @@ - -Munin monitorozó plugin a mayorhoz - -Grafikonokat készít a "munin" program segítségével a Mayor pillanatnyi állapotáról. -Egyelőre csak debian 9+ rendszeren tesztelt, de pár apró módosítással életrekelthető más rendszereken is. - -Rögzíti az: --- Egyidejűleg (pillanatnyi) bejelentkezett felhasználók számát. --- IP-cím alapján a lokális (192.168.*.*, 10.*.*.*, 172.16.*.*, fd**::/8) és külön a külső tartományokat. --- Policy alapján a 'private' és/vagy 'parent' -ben belépett felhasználókat. --- Aktivitás alapján az Xperc (pl:10perc) ideje, a 2*Xperc ideje aktív felhasználókat és a tétleneket. - - -Beállítása a következő: (debian) - -1.lépés: >>> apt-get install munin -2.lépés: a "/etc/munin/munin.conf" fájl szerkesztése a következő módon: - ---(I.) először keressük meg a következő részt: - # a simple host tree - [localhost.localdomain] - address 127.0.0.1 - use_node_name yes - --- módosítsuk a "localhost.localdomain"-t a napló-szerver gépnevének megfelelően: - (itt az FQDN (teljes elérési út szükséges)) - [gépnév.iskolaneve.hu] - address 127.0.0.1 - use_node_name yes - ---(II.) ugyanitt, adjuk hozzá a következő sorokat: - (és írjuk át a "mayor.iskolaneve.hu" címet a napló címének megfelelően) - [mayor.iskolaneve.hu] - address 127.0.0.1 - use_node_name no - - ---(III.) ezután módosítanunk kell a "mayor_munin.php" scriptben a "$set['naplo_host'] = "mayor.iskolaneve.hu";"-t - (első sorok egyike) a saját naplónk címének megfelelően. - Ez egy fontos beállítás, mert ezen keresztül ismeri fel a munin rendszer a mi - monitorozó scriptünket. - - ---(IV.) utána másoljuk a "mayor_munin.php"-t az: - az /usr/share/munin/plugins/ mappába vagy - az /etc/munin/ könyvtárba vagy - bárhova, ahonnan a munin eléri. - - FONTOS!! - A "mayor_munin.php"-nak állítsuk be a "root" tulajdonost és 700-as jogokat! - (nehogy valami kiolvassa a jelszót) - - ---(V.) ezután el kell helyezni egy simlink-et a /etc/munin/plugins/ könyvtárba, ami a bemásolt fájlra mutat. - pl: ln -s /usr/share/munin/plugins/mayor_munin.php /etc/munin/plugins/munin - - ---(VI.) végül be kell állítanunk egy felhasználót, a mysql-ben, amivel olvasni lehet a mayor_login.session és a mayor_login.loginLog táblákat - (például:) - mysql> GRANT SELECT ON mayor_login.loginLog TO 'mayor-monitor'@'localhost' IDENTIFIED BY 'erőős-jelszóó!'; - mysql> GRANT SELECT ON mayor_login.session TO 'mayor-monitor'@'localhost' IDENTIFIED BY 'erőős-jelszóó!'; - -- Lehetőség van mysql/unix_socket authentikációra is, ez nagyban növeli biztonságot, mert nem alkalmaz jelszót, - így szinte lehetetlen próbálgatással feltörni. - Fontos, hogy a kiválasztott felhasználónak/felhasználónévnek valósnak kell lenni, és léteznie kell a rendszerben. - Egyszerűség kedvéért használhatjuk a "root" felhasználót, ez eredetileg is unix_socket-tel authentikál a mysql-ben, - (hacsak a mysql telepítésénél meg nem változtattuk) - - vagy a "munin" nevű felhasználót, ezt adjuk hozzá a mysql-hez: - - mysql> GRANT SELECT ON mayor_login.session TO 'munin'@'localhost' IDENTIFIED via unix_socket; - mysql> GRANT SELECT ON mayor_login.loginLog TO 'munin'@'localhost' IDENTIFIED via unix_socket; - - majd rá kell venni a munin-t, hogy a "munin" felhasználónévvel futtassa, ezt a "/etc/munin/plugin-conf.d/munin-node" - fájlba kell beírni, a következő sorok hozzáadásával: - - [mayor_munin] - user munin - - Fontos: ekkor a mayor_munin.php tulajdonosát a "munin"-ra kell állítani! - - - ---(VII.) Finomhangolás: - Végül írjuk be a "mayor_munin.php" elejére, a "$set['___']" tömböt módosítva, a maysql adatokat, - illetve itt tudjuk beállítani az aktivitáshoz számolt időt percben, és a napló webcímét is. - - ---(VIII.) Befejezésképpen pedig indítsuk újra a munin-t az alábbi parancsokkal: - >>> /etc/init.d/munin-node restart - >>> /etc/init.d/munin restart - - ---(++) a beálítás végeztével a következő paranccsal ellenőrizhetjük, hogy mindent jól csináltunk-e: - >>> munin-run mayor_munin - - Ekkor egy listát kapunk, ahol a változók nevei ("mayor_xxxx_xx.values") mellett számértékeket látunk, - ha semmi, vagy a számok helyett egy "U" betű jelenik meg, akkor még valamit finomhangolni kell. diff --git a/external/munin/mayor_munin.php b/external/munin/mayor_munin.php deleted file mode 100755 index 92fc264d..00000000 --- a/external/munin/mayor_munin.php +++ /dev/null @@ -1,122 +0,0 @@ -#!/usr/bin/env php -= 7 ) { //MySQLi (Improved) és php7 kell!!! - - $ret['ip_b'] = 0; - $ret['ip_k'] = 0; - $ret['p_pri'] = 0; - $ret['p_par'] = 0; - $ret['a_t1'] = 0; - $ret['a_t2'] = 0; - $ret['a_tt'] = 0; - $l = mysqli_connect($set['db_host'], $set['db_user'], $set['db_pass'], $set['db_db']); - if(!$l){ -// echo "hiba\n "; - $ret['ip_b'] = "U"; - $ret['ip_k'] = "U"; - $ret['p_pri'] = "U"; - $ret['p_par'] = "U"; - $ret['a_t1'] = "U"; - $ret['a_t2'] = "U"; - $ret['a_tt'] = "U"; - - } else{ - mysqli_set_charset($l, "utf8"); - $r = mysqli_query($l," SELECT session.userAccount,session.policy, UNIX_TIMESTAMP(session.activity) AS activity, loginLog.ip - FROM mayor_login.session, mayor_login.loginLog - WHERE session.dt = loginLog.dt AND session.userAccount=loginLog.userAccount AND loginLog.flag=0; "); - - while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) { - if($row['policy'] == "private") { - $ret['p_pri'] ++; - } - if($row['policy'] == "parent") { - $ret['p_par'] ++; - } - - if( $row['activity'] >= time()-$set['t_active']*60){ //Az elmúlt x percben aktívak voltak - $ret['a_t1']++; - } else if( $row['activity'] >= time()-$set['t_active']*2*60){ //Az elmúlt 2*x percben aktívak voltak - $ret['a_t2']++; - } else { - $ret['a_tt']++; - } - - if( preg_match('/^((10\.)|(192\.168\.)|(172\.16\.)|(fd..\:)).*/', $row['ip']) ){ - $ret['ip_b']++ ; - } else{ - $ret['ip_k']++ ; - } - } - } - - @mysqli_free_result($r); - @mysqli_close($l); - echo "mayor_ip_sum.value ".($ret['ip_b']+$ret['ip_k'])."\n". "mayor_ip_k.value ".$ret['ip_k']."\n". "mayor_ip_b.value ".$ret['ip_b']."\n" ; - echo "mayor_p_pri.value ".$ret['p_pri']."\n". "mayor_p_par.value ".$ret['p_par']."\n"; - echo "mayor_a_t1.value ".$ret['a_t1']."\n". "mayor_a_t2.value ".$ret['a_t2']."\n". "mayor_a_tt.value ".$ret['a_tt']."\n" ; - - } else{ - echo "mayor_ip_sum.value U\n". "mayor_ip_b.value U\n". "mayor_ip_k.value U\n" ; - echo "mayor_p_pri.value U\n". "mayor_p_par.value U\n"; - echo "mayor_a_t1.value U\n". "mayor_a_t2.value U\n". "mayor_a_tt.value U\n"; - } -} - -?> \ No newline at end of file diff --git a/external/nextcloud/README b/external/nextcloud/README deleted file mode 100644 index 5eee1962..00000000 --- a/external/nextcloud/README +++ /dev/null @@ -1,183 +0,0 @@ - -Nextcloud(13) - Mayor script - -Ezzen script segítségével a Mayor-naplóból tudunk felhasználókat és csoportokat importálni a Nextcloud felhőbe, -létrehozva ezzel a saját, iskoali felhőszolgáltatásunkat. - -Ez a script lényegében annyit csinál, hogy a mysql segítségével lekérdezi a mayorból a diák-tankör-tanár összerendezéseket, -és a tankörök nevei alapján létrehoz csoportokat, majd belépteti ezen csoportokba a diákokat, és tanárokat, -megspórolva ezzel a kézi (egyesével történő) feltöltést, és egy csomó időt az adminisztrátornak. - -Támogatja a külön, illetve az egy, közös szerverre történő telepítését a mayornak és a nextcloud-nak. *(lásd: Szeparációs lehetőségek rész.) -Egyelőre még csak a Nextcloud 13.x -mal tesztelt. - -FONTOS! - Legalább "php7.0" és "Apache 2.4" kell hozzá! - - - -Beállítása az alábbiak szerint: (egy lehetséges elrendezés) - --(I.) Először telepítsünk föl egy Nextcloud(13+) szervert egy Debian 9+ szerverre, - szükség van e-mail küldés (smtp) szolgáltatásra is. (ez lehet külső, pl google) - Bővebb leírást a telepítésről a - https://docs.nextcloud.com/server/13/admin_manual/installation/index.html oldalon találunk. - --(II.) Helyezzük el a "mayor-nextcloud.php"-t biztos, védett helyre,a nextcloud szerveren, akár a /etc/ mappába, akár a /root könyvtárba, - ezt később "root"-ként kell majd futtatnunk, és mysql jelszó is (lehet/) van benne, - ezért ennek megfelelően állítsuk be a tulajdonost, és vegyük el a jogosultságokat. (chown root; chmod 600) - - - --(III.) A fajl elején találhatóak a konfigurációs adatok, ezeket a következőképpen módosíthatjuk: - - - $db['host'] = "localhost"; //Ez a nextcloud alatt futó mysql elérhetősége. - // (Csak localhost lehet, a scriptet a nextcloud-szerveren kell futtatnunk.) - - $db['port'] = "3306"; //nextcloud-mysql port - - $db['user'] = "root"; //nextcloud-mysql felhasználónév - // HA nem a root-ot használjuk, akkor, a használt felhasználónak írási-olvasási-törlési - // (insert,select,update,delete) joggal kell rendelkeznie a nextcloud adatbázis "..groups" tábláján, - // valamit saját kezűleg kell lérehozni a script saját nyilvántartó adatbázisát, és a fenti jogokat beállítani rá. - // Ha a Debian-on alapértelmezett root-ot használjuk, akkor mindez automatikusan történik. - - $db['pass'] = ""; //A nextcloud-mysql jelszó (pl a "root" felhasználónévhez tartozó) - // érdemes a debian 9.x-en, a root-hoz alapértelmezett "unix_socket" bejelentkezési módot - // használnunk, ez biztonságosabb, mert nem jön létre "olvasható" jelszó. - - - - $db['nxt_dbname'] = "nextcloud"; //A Nextcloud által használt adatbázis neve. - $db['nxt_prefix'] = "oc_"; //A Nextcloud által használt adatbázisban a táblák prefix-je. (ha van) - - - $db['m2n_db'] = "mayor_to_nextcloud"; //A nyilvántartó adatbázis neve. - // Ennek az adatbázisnak a nextcloud-mysql szerveren kell lennie! - // - // Ebben az adatbázisban könyveli el a script által létrehozott felhasználókat, azért, - // hogy így meg tudja különböztetni, a saját maga által létrehozottakat, az Adminisztrátor - // által, külön, kézzel létrehozott felhasználóktól. - - $db['m2n_prefix'] = "m2n_"; //A nyilvántartó adatbázisban használt prefix, ha van. (ha nincs, akkor "üres string"-re kell állítani) - - - //$db['mayor_host'] = ""; //Akkor használatos, ha a mayor alatti mysql szerver egy másik szerveren van. - //$db['mayor_port'] = ""; // ekkor ki kell venni kommentből, és ki kell tölteni a mayor-mysql serverre érvényes adatokkal. - //$db['mayor_user'] = ""; - //$db['mayor_pass'] = ""; //A kiválasztott felhaználónak olvasnia (GRANT SELECT) kell tudnia a mayor-mysql serveren a(z): - // intezmeny_xxx, mayor_parent, naplo_xxx_yyyy adatbázisokból. - - //Ha a mayor-mysql sezvere fizikailag (vagy virtuálisan) másik szerveren van, akkor érdemes egy "ssh-tunnel"-lel - // áthozni a portját a nextcloud-serverre. (ez a legbiztonságossabb) - - - $m2n['isk_rovidnev'] = "rovid"; //A mayor-ban használt "iskola rövidneve" megnevezés. - - $m2n['min_evfolyam'] = 10; //A minimális évfolyam, amelytől fölfelé engedélyezzük a felhő használatát a diákoknak. - - $m2n['csoport_prefix'] = "(tk) "; //A Nextcloud-ban ezzel az előtaggal jelennek majd meg mayor-ból importált csoportok, a jobb átláthatóság érdekében. - - - - $m2n['default_email'] = "rendszergazda@iskola.hu"; //Ha a mayor intezmeny_xxx.diak, vagy az intezmeny_xxx.tanar táblákban nincs kitöltve az - // e-mail, akkor ezt használja alapértelmezetten. - // (ide megy a jelszó-emlékeztető, amíg a felhasználó birtokba nem veszi a fiókját) - - $m2n['default_passw'] = "EHYmGktzrdfS7wxJR6DFqxjJ"; //Az induló jelszó a Nextcloud-ban a felhasználóknak. (érdemes erőset megadni, a botnet-ek miatt) - - $m2n['default_quota'] = "10GB"; //Az induló fájl-kvóta a Nextcloud-ban. - - $m2n['default_lang'] = "hu"; //Az alapértelmezett nyelv (később minden felhasználó átállíthatja magának) - - $m2n['mindenki_csop'] = "naplós_felhasználók"; //A Nextcloud "mindenki" csoportja - // ebbe a "mindenki" csoportba minden, a script által létrehozott felhasználó bekerül. - - - $occ_path = "/var/www/nextcloud/"; //A Nextcloud-server fájljainak elérési útja. (DocumentRoot) - // Erre szükség van a nextcloud "occ" parancsának eléréséhez. - - $occ_user = "www-data"; //A Nextcloud-servert futtató (Apache) felhasználónév - - - - FONTOS!! - A Nextcloud szerver "occ" parancsa elérhető kell legyen a script számára! - Az "occ" parancs működését pl. az: (>>> sudo -u www-data php /var/www/nextcloud/occ ) kiadásával ellenőrizzük! - - - - - - További Információk: - - Lehetőség van egy-egy felhasználó letiltására, ezt a nyilvántartó adatbázisban tehetjük meg, a "register" tábla, - az adott felhasználónévhez tartozó "status" mezőjének "forbidden"-re állításával. - Ekkor a script nem fog foglalkozni, az adott felhasználóval a továbbiakban. - - - Esetleg érdemes lehet a scriptet betenni a "cron"-ba (éjszakára), így naponta lefut, és követi napló változásait. - - - A mayor által ajánlott "Vezetéknév.Keresztnév" típusú felhasználónév formátum, bár hasznos, mert könnyen megjegyezhető, - viszont (sajnos) egyáltalán nem POSIX kompatibilis (amely csak az angol ABC betűit +pár kiegészítő karaktert engedélyez) - így a legtöbb rendszerrel nem hozható összhangba, ezért szükség van az ékezetes karakterek lecserélésére. - - A karakterek cseréje az alábbi módon történik: - - á --> aa Á --> Aa - ä --> ae Ä --> Aae - é --> ee É --> Ee Például: - í --> ii Í --> Ii Vezetéknév.Keresztnév --> Vezeteekneev.Keresztneev - ó --> oo Ó --> Oo Bőrönd.Ödön --> Booeroend.Oedoen - ö --> oe Ö --> Oe - ő --> ooe Ő --> Ooe - ú --> uu Ú --> Uu - ü --> ue Ü --> Ue - ű --> uue Ű --> Uue - - Ezeket a karakter cseréket maga a script végzi, futás közben, a mayor felhasználónevekből, - a létrejövő Nextcloud felhasználónév már a lecserélt változat lesz. - - - - A mayor-nextcloud script működése néhány mondatban: - - Első lépésben lekérdezi a feltételeknek megfelelő tanköröket a mayorból, (tankör-osztály évfolyama, tankör aktív-e a dátumok apaján) - majd ez alapján ellenőrzi, hogy a Nextcloud-ban már szerepelnek-e ezen tankörneveknek megfelelő csoportok. - Ha új tankör van a mayorban, akkor azt a Nextcloud-ban is létrehozza, ha egy tankört töröltek a mayorból, akkor azt a csoportot Nextcloud-ból is törli. - Fontos! - A csoport prefix-szel, például: "(tk) "-val kezdődő csoportokat magáénak tekinti, és ha nem találja a mayorban, akkor automatikusan töröli! - - Második lépésben lekérdezi a felhasználókat a mayorból, (jogviszony státusz, évfolyam, kapcsolódó tankörök) - csak azokat a tanárokat, illetve diákokat veszi figyelembe, akinek a státusza nem "jogviszonya lezárva", vagy nem "felvételt nyert". - Ha az illető még nem rendelkezik felhasználónévvel a Nextcloud-ban, akkor létrehozza, - - ha a mayorban, az "intezmeny_xxx.diak", illetve az "intezmeny_xxx.tanar" táblákon van beállított e-mail címe, akkor azt használja, ha nincs, - akkor az alapértelmezettet állítja be a Nextcloud-ba, valamint ekkor állítódik be az alapértelmezett qvóta, és a felhasználó valódi neve is. - (ezeket később Rendszergazdai, és Felhasználói oldalról változtatni lehet, értelemszerűen) - Ha az illető már rendelkezik felhasználónévvel, de az le volt tiltva, akkor újra engedélyezi. - - Ezután egyezteti a tankör-csoport összerendeléseket, ha az illető új tankörbe került be, akkor belépteti a megfelelő csportba, - ha kikerült egy tankörből, akkor a csoportból is kilépteti. - - Végül ellenőrzi a kiléptetndő felhasználókat. - Ha velekinek a státusza a mayorban "jogviszonya lezárva"-ra változott, vagy a felhasználót a mayorból törölték, akkor - - ha még nem lépett be soha a Nextcloudba, akkor a felhasználót fizikailag törli. - - ha már használta a fiókját, akkor csak letiltja, azért, hogy a fájljai ne vesszenek el automatikusan. - (Ez, utóbbi esetben a Rendszergazdának kell külön elvégezni a törlést.) - - - - - - - - - - - - - - - diff --git a/external/nextcloud/mayor-nextcloud.php b/external/nextcloud/mayor-nextcloud.php deleted file mode 100644 index f0359931..00000000 --- a/external/nextcloud/mayor-nextcloud.php +++ /dev/null @@ -1,577 +0,0 @@ -#!/usr/bin/php -= 7) { //MySQLi (Improved) és php7 kell!!! - - function db_connect(array $db){ - echo "Adatbázis kapcsolódás. (m2n_db=".$db['m2n_db'].")\n"; - $l = mysqli_connect($db['host'], $db['user'], $db['pass'], $db['m2n_db'],$db['port']); - if(!$l){ - echo "Adatbázis kapcsolat újrapróbálása... (m2n_db=) hiba:".mysqli_connect_errno()."\n"; - $db_old = $db['m2n_db']; - $db['m2n_db'] = ""; - $l = mysqli_connect($db['host'], $db['user'], $db['pass'], $db['m2n_db'],$db['port']); - if(!$l){ - echo "Sikertelen kapcsolódás. (m2n_db=".$db['m2n_db'].") info:".mysqli_get_host_info($l)."\n"; - return null; - } else{ - echo "Sikeres kapcsolódás. (m2n_db=".$db['m2n_db'].") info:".mysqli_get_host_info($l)."\n"; - echo "Adatbázis létrehozása: ".$db_old." ...\n"; - mysqli_set_charset($l, "utf8"); - mysqli_query($l, "SET NAMES utf8 COLLATE utf8_general_ci;" ); - script_install($l); - return $l; - } - } else { - echo "Sikeres kapcsolódás. (m2n_db=".$db['m2n_db'].") info:".mysqli_get_host_info($l)."\n"; - mysqli_set_charset($l, "utf8"); - mysqli_query($l, "SET NAMES utf8 COLLATE utf8_general_ci;" ); - if(mysqli_query($l, "SELECT * FROM ".$db['m2n_db'].".".$db['m2n_prefix']."register;" )) == FALSE ){ - script_install($l); - } - return $l; - } - } -// bezár: mysqli_close($link); - - function script_install($link){ - global $m2n,$db; - $q = "CREATE DATABASE IF NOT EXISTS ".$db['m2n_db']." DEFAULT COLLATE 'utf8_general_ci'; "; - if(( $r = mysqli_query($link, $q)) !== FALSE ){ - echo "Az ".$db['m2n_db']." adatbázis sikeresen létrehozva.\n"; - } - $q = "CREATE TABLE IF NOT EXISTS ".$db['m2n_db'].".".$db['m2n_prefix']."register ( - account VARCHAR(64) NOT NULL COLLATE 'utf8_bin', - status ENUM('active','disabled','forbidden','deleted') NULL DEFAULT 'active' COLLATE 'utf8_bin', - PRIMARY KEY (account)) - COLLATE='utf8_general_ci' - ENGINE=InnoDB;"; - if(( $r = mysqli_query($link, $q)) !== FALSE ){ - echo "Az ".$db['m2n_db'].".".$db['m2n_prefix']."A nextcloud-register tábla sikeresen létrehozva.\n"; - } - } - - function nxt_register_userlist($link){ //akiket a script hozott létre - global $m2n,$db; - $q = "SELECT * FROM ".$db['m2n_db'].".".$db['m2n_prefix']."register WHERE STATUS != 'forbidden'; "; - if(( $r = mysqli_query($link, $q)) !== FALSE ){ -// echo $q."\n"; - while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) { - $ret['account'][] = $row['account']; - $ret['status'][] = $row['status']; - } - mysqli_free_result($r); - return $ret; - } else { - echo "adatbázis hiba"; - } - } - - function nxt_register_forbiddenlist($link){ //akiket a rendszergazda kitiltott - global $m2n,$db; - $q = "SELECT * FROM ".$db['m2n_db'].".".$db['m2n_prefix']."register WHERE STATUS = 'forbidden'; "; - if(( $r = mysqli_query($link, $q)) !== FALSE ){ -// echo $q."\n"; - $ret = array(); - while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) { - $ret[] = $row['account']; - } - mysqli_free_result($r); - return $ret; - } else { - echo "adatbázis hiba"; - } - } - - function nxt_register_useradd($link, $account){ // feljegyzi az általa létrehozott felhasználókat - global $m2n,$db; - $q = "INSERT INTO ".$db['m2n_db'].".".$db['m2n_prefix']."register (account) VALUES ('".$account."')"; - if(( mysqli_query($link, $q)) !== FALSE ){ -// echo $q."\n"; - } - } - - function nxt_register_userena($link, $account){ // az engedélyezetteket - global $m2n,$db; - $q = "UPDATE ".$db['m2n_db'].".".$db['m2n_prefix']."register SET status='active' WHERE account='".$account."'"; - if(( mysqli_query($link, $q)) !== FALSE ){ -// echo $q."\n"; - } - } - - function nxt_register_userdel($link, $account){ // a törölteket - global $m2n,$db; - $q = "DELETE FROM ".$db['m2n_db'].".".$db['m2n_prefix']."register WHERE account='".$account."' "; - if(( mysqli_query($link, $q)) !== FALSE ){ -// echo $q."\n"; - } - } - - function nxt_register_userdis($link, $account){ // a letiltottakat - global $m2n,$db; - $q = "UPDATE ".$db['m2n_db'].".".$db['m2n_prefix']."register SET status='disabled' WHERE account='".$account."'"; - if(( mysqli_query($link, $q)) !== FALSE ){ -// echo $q."\n"; - } - } - - - - - function user_add($userAccount, $fullName){ // létrehoz egy felhasználót a Nextcloud-ban - global $occ_path,$occ_user,$m2n; -// export OC_PASS=ErősJelszó123; su -s /bin/sh www-data -c 'php web/occ user:add --password-from-env --display-name="Teszt Tamás" --group="csop" t.tamas' - if(strlen($userAccount) > 64 or strlen($fullName) > 64){ - echo "Hiba: A felahsználónév, vagy a teljes név hosszabb, mint 64 karakter!!"; - } else { -// shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:enable $userAccount '"); - shell_exec("export OC_PASS=".$m2n['default_passw']."; su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:add --password-from-env --display-name=\"$fullName\" --group=\"".$m2n['mindenki_csop']."\" $userAccount '"); - } - } - - function user_del($userAccount){ // kitöröl vagy letilt egy felhasználót a Nextcloud-ban - global $occ_path,$occ_user; - $last_login = json_decode(shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:info $userAccount --output=json '"),true)['last_seen'] ; - if($last_login == "1970-01-01T00:00:00+00:00" ){ // Ha még soha nem lépett be - shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:delete $userAccount '"); // akkor törölhető - } else { - shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:disable $userAccount '"); // különben csak letiltja - } - - } - - function user_dis($userAccount){ // letiltja a felhasználót a Nextcloud-ban - global $occ_path,$occ_user; - shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:disable $userAccount '"); - } - - function user_ena($userAccount){ // engedélyezi - global $occ_path,$occ_user; - shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:enable $userAccount '"); - } - - - function nxt_group_list() { // Csoportok listázása a Nextcloud-ból - global $occ_path,$occ_user; - return (array)json_decode(shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" group:list --output=json '")); - } - - function nxt_user_list() { // Felhasználók listázása a Nextcloud-ból - global $occ_path,$occ_user; - $num = shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:report | grep \"total\" | sed -e \"s/[^0-9]//g\" | tr -d \"[:blank:]\n\" '"); - $num = $num + 100; // Biztos-ami-biztos, a nextcloud rejtett hibái miatt... - return (array)json_decode(shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:list --limit $num --output=json '")); - } - - function nxt_user_lastlogin($userAccount){ // legutóbbi belépés lekérdezése - global $occ_path,$occ_user; - return json_decode(shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:info $userAccount --output=json '"),true)['last_seen'] ; - } - - - function user_set($userAccount, array $params){ //beállítja az e-mailt, quota-t, nyelvet a paott értékekere - global $occ_path,$occ_user; - if(isset($params['quota'])) - shell_exec( "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:setting $userAccount files quota \"".$params['quota']."\" '" ); - if(isset($params['email'])) - shell_exec( "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:setting $userAccount settings email \"".$params['email']."\" '" ); - if(isset($params['lang'])) - shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:setting $userAccount core lang \"".$params['lang']."\" '"); - } - - function group_add($groupName){ //Új csoport létrehozása a Nextcloud-ban - global $link,$db; - if(strlen($groupName) > 64){ //mivel (egyelőre) nics erre 'occ' parancs, ezért közvetlenül kell... - echo "Hiba: a csoportnév nagyobb, mint 64 karakter!!\n"; - } else { - $q = "INSERT IGNORE INTO ".$db['nxt_dbname'].".".$db['nxt_prefix']."groups (gid) VALUES ('".$groupName."'); "; - if(mysqli_query($link, $q) !== TRUE ) echo "group add query error"; - echo "\n".$q."\n"; - } - } - - function group_del($groupName){ // Csoport törlése a Nextcloud-ból - global $occ_user,$occ_path,$db,$link; - $grp = nxt_group_list(); - if(isset($grp[$groupName])){ // Mivel erre még nincs hivatalos "occ" parancs, ezért közvetlenül kell... - foreach($grp[$groupName] as $key => $user){ - shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" group:removeuser \"$groupName\" $user '"); - echo "$user removed from group:'$groupName' \n"; - } - $q = "DELETE FROM ".$db['nxt_dbname'].".".$db['nxt_prefix']."groups WHERE gid='".$groupName."'; " ; - if(mysqli_query($link, $q) !== TRUE ) echo "group del query error"; - echo "\n".$q."\n"; - } - } - - function group_user_add($groupName, $userAccount){ // Hozzáad egy felhasználót egy csoporthoz a Nextcloud-ban - global $occ_user, $occ_path; - shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" group:adduser \"$groupName\" $userAccount '"); - } - - function group_user_del($groupName, $userAccount){ // Kitöröl egy felhasználót egy Nextcoud csoportból - global $occ_user, $occ_path; - shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" group:removeuser \"$groupName\" $userAccount '"); - } - - - function get_mayor_tankor($link){ // A tankörök neveinek lekérdezése a mayorból - global $m2n; - $ret = array(); -//Létező összes tankör: -/* $q = "SELECT tankorId, TRIM(BOTH ' ' - FROM CONCAT('".$m2n['csoport_prefix']."',tankorNev)) AS tankorNev - FROM intezmeny_".$m2n['isk_rovidnev'].".tankorSzemeszter - WHERE tanev = ( - SELECT tanev - FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter - WHERE statusz = 'aktív' - GROUP BY tanev) AND szemeszter = ( - SELECT szemeszter - FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter - WHERE statusz = 'aktív' AND kezdesDt <= CURRENT_DATE() AND CURRENT_DATE() <= zarasDt); "; -*/ -//csak a megadott évfeolyamokhoz kötődő tankörök: - $q = "SELECT tanev FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter WHERE statusz = 'aktív' GROUP BY tanev; "; - if( ($r = mysqli_query($link, $q)) !== FALSE ){ - $ev = mysqli_fetch_array($r, MYSQLI_ASSOC); - $q = "SELECT tankorId, TRIM(BOTH ' ' - FROM CONCAT('".$m2n['csoport_prefix']."',tankorNev)) AS tankorNev - FROM intezmeny_".$m2n['isk_rovidnev'].".tankorSzemeszter - WHERE tanev = ( - SELECT tanev - FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter - WHERE statusz = 'aktív' - GROUP BY tanev) AND szemeszter = ( - SELECT szemeszter - FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter - WHERE statusz = 'aktív' AND kezdesDt <= CURRENT_DATE() AND CURRENT_DATE() <= zarasDt) AND tankorId IN( - SELECT tankorId - FROM intezmeny_".$m2n['isk_rovidnev'].".tankorOsztaly - WHERE osztalyId IN ( - SELECT osztalyId - FROM naplo_".$m2n['isk_rovidnev']."_".$ev['tanev'].".osztalyNaplo - WHERE evfolyamJel >= ".$m2n['min_evfolyam']." - ORDER BY osztalyId) - ORDER BY tankorId ); - "; - if(( $r = mysqli_query($link, $q)) !== FALSE ){ - echo $q."\n"; - while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) { - $ret[] = $row; - } - mysqli_free_result($r); - return $ret; - } else { - echo "adatbázis hiba"; - } - } - } - - - function get_mayor_tanar($link){ // A tanárok lekérdezése a mayorból - global $m2n; - $ret = array(); - $q = "SELECT userAccount, email, tanar.tanarId, tankorTanar.tankorId, TRIM(BOTH ' ' - FROM CONCAT_WS(' ',viseltNevElotag, viseltCsaladinev, viseltUtonev)) AS fullName, TRIM(BOTH ' ' - FROM CONCAT('".$m2n['csoport_prefix']."',tankorNev)) AS tankorNev - FROM intezmeny_".$m2n['isk_rovidnev'].".tanar, mayor_private.accounts, intezmeny_".$m2n['isk_rovidnev'].".tankorTanar, intezmeny_".$m2n['isk_rovidnev'].".tankorSzemeszter - WHERE accounts.studyId = tanar.oId AND statusz != 'jogviszonya lezárva' AND tanar.beDt <= CURRENT_DATE() AND (CURRENT_DATE() <= tanar.kiDt - OR tanar.kiDt IS NULL) AND tanar.tanarId = tankorTanar.tanarId AND tankorTanar.beDt <= CURRENT_DATE() AND CURRENT_DATE() <= tankorTanar.kiDt - AND tankorTanar.tankorId = tankorSzemeszter.tankorId AND tankorSzemeszter.tanev = ( - SELECT tanev - FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter - WHERE statusz = 'aktív' - GROUP BY tanev) AND szemeszter = ( - SELECT szemeszter - FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter - WHERE statusz = 'aktív' AND kezdesDt <= CURRENT_DATE() AND CURRENT_DATE() <= zarasDt) - ORDER BY userAccount ; - "; - - if(( $r = mysqli_query($link, $q)) !== FALSE ){ -// echo $q."\n"; -// mysqli_fetch_array($r, MYSQLI_ASSOC); - while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) { - $ret[] = $row; - } - mysqli_free_result($r); - return $ret; - } else { - echo "adatbázis hiba"; - } - } - - - function get_mayor_diak($link){ // diákok lekérdezése - global $m2n; - $ret = array(); - $q = "SELECT tanev FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter WHERE statusz = 'aktív' GROUP BY tanev; "; - if( ($r = mysqli_query($link, $q)) !== FALSE ){ - $ev = mysqli_fetch_array($r, MYSQLI_ASSOC); - $q = "SELECT userAccount, email, diak.diakId, tankorDiak.tankorId, TRIM(BOTH ' ' - FROM CONCAT_WS(' ',viseltNevElotag, viseltCsaladinev, viseltUtonev)) AS fullName, TRIM(BOTH ' ' - FROM CONCAT('".$m2n['csoport_prefix']."',tankorNev)) AS tankorNev - FROM intezmeny_".$m2n['isk_rovidnev'].".diak, mayor_private.accounts,intezmeny_".$m2n['isk_rovidnev'].".tankorDiak, intezmeny_".$m2n['isk_rovidnev'].".tankorSzemeszter - WHERE diak.diakId IN ( - SELECT diakId - FROM intezmeny_".$m2n['isk_rovidnev'].".osztalyDiak - WHERE osztalyId IN ( - SELECT osztalyId - FROM naplo_".$m2n['isk_rovidnev']."_".$ev['tanev'].".osztalyNaplo - WHERE evfolyamJel >= ".$m2n['min_evfolyam']." - ORDER BY osztalyId) - ORDER BY diakId) AND diak.statusz != 'jogviszonya lezárva' AND diak.statusz != 'felvételt nyert' AND diak.oId = accounts.studyId - AND tankorDiak.diakId = diak.diakId AND tankorDiak.beDt <= CURRENT_DATE() AND (tankorDiak.kiDt >= CURRENT_DATE() OR tankorDiak.kiDt IS NULL) - AND tankorSzemeszter.tankorId = tankorDiak.tankorId AND tankorSzemeszter.tanev = ( - SELECT tanev - FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter - WHERE statusz = 'aktív' - GROUP BY tanev) AND tankorSzemeszter.szemeszter = ( - SELECT szemeszter - FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter - WHERE statusz = 'aktív' AND kezdesDt <= CURRENT_DATE() AND CURRENT_DATE() <= zarasDt) - ORDER BY userAccount ; - "; - - if(( $r = mysqli_query($link, $q)) !== FALSE ){ - echo $q."\n"; -// mysqli_fetch_array($r, MYSQLI_ASSOC); - while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) { - $ret[] = $row; - } - mysqli_free_result($r); - return $ret; - } else { - echo "adatbázis hiba"; - } - } else { - echo "adatbázis hiba"; - } - - } - - -//------------------------------------------------------------------------------------------------------------------------------- -if(($link = db_connect($db)) == FALSE){ //csatlakozás - echo "MySQL (general) kapcsolat hiba\n"; - die(); -} -$link2 = $link; - -group_add($m2n['mindenki_csop']); // A "mindenki" csoport hozzáadása - - -if(isset($db['mayor_user']) and isset($db['mayor_pass']) and isset($db['mayor_host']) or isset($db['mayor_port'])) -{ - $db['user'] = $db['mayor_user']; //ha a mayor egy másik szerveren lenne - $db['pass'] = $db['mayor_pass']; - $db['host'] = $db['mayor_host']; - $db['port'] = $db['mayor_port']; - if(($link2 = db_connect($db)) == FALSE){ - echo "MySQL (mayor) kapcsolat hiba\n"; - die(); - } else { - echo "Mayor DB connect"; - } -} - -// Létrehozza az új Mayor tanköröket -$tankorok = get_mayor_tankor($link2); -$nxt_csop = nxt_group_list(); -foreach($tankorok as $key => $val){ //Végignézi a tankörök szerint - foreach($nxt_csop as $key2 => $val2){ // - if($key2 == $val['tankorNev']){ //Már van ilyen (tankör)nevű csoport - echo "group:".$val['tankorNev']." found\n"; - break; - } - } - unset($nxt_csop[$val['tankorNev']]); //Megvizsgálva, többször már nem kell dönteni róla. - if($key2 != $val['tankorNev']){ //Ha nincs ilyen (tankör)nevű csoport - group_add($val['tankorNev']); //Akkor létrehozza - echo "group:[".$val['tankorNev']."] created\n"; - } -} -// A megszűnt tanköröket-csoportokat kitörli -foreach($nxt_csop as $key => $val){ - if(substr($key, 0, strlen($m2n['csoport_prefix'])) === $m2n['csoport_prefix'] ){ //Csak a "prefix"-el kezdődő nevűekre. - group_del($key); //elvégzi a törlést - echo "group:[".$key."] Yes, removed\n"; - } else { - echo "group: $key Non removed\n"; - } // Figyelem! A csoport prefix-szel: "(tk) " kezdődő csoportokat magáénak tekinti, automatikusan töröli! -} // Akkor is, ha az külön, kézzel lett létrehozva. - - - -//------------------------------------------------------------------------------------------------------------------------------- -// Felhasználónevek egyeztetése -$mayor_user = array_merge( get_mayor_tanar($link2), get_mayor_diak($link2) ); //tanár, diák -$mayor_user = array_merge($mayor_user, array(array('userAccount' => null, 'fullName' => null, 'tankorNev' => null,)) ); //strázsa a lista végére -$nxt_user = nxt_user_list(); -$nxt_group = nxt_group_list(); -$nxt_registered = nxt_register_userlist($link); - -foreach($mayor_user as $key => $val){ - //Lecseréli az ékezetes betűket a felhasználónévből - $mayor_user[$key]['userAccount'] = str_replace($search, $replace, $val['userAccount']); // (pl: Á->Aa, á->aa, ...) - if(in_array($val['userAccount'], nxt_register_forbiddenlist($link)) ){ //Ha a nyilvántartásban "forbidden"-ként szerepel, - unset($mayor_user[$key]); // akkor nem foglalkozik vele tovább. - } -} - -$curr = ""; -$tankorei = array(); -foreach($mayor_user as $key => $val){ //Végignézi a mayorból kinyert lista alapján. - - if($curr != $val['userAccount']){ //A következő felhasználó.. - foreach($nxt_user as $key2 => $val2){ - if($curr == $key2){ //Már létezik a felhasználó a Nextcloud-ban - echo "user found: $curr:$curr_n\n"; - if($nxt_registered['status'][array_keys($nxt_registered['account'], $curr)[0]] == 'disabled' ){ - nxt_register_userena($link, $curr); //Ha netán le lenne tiltva, akkor engedélyezi, - user_ena($curr); //ha a script tiltotta le. - } - - foreach($nxt_group as $key3 => $val3){ //A tankörök egyeztetése - if(in_array($key3, $tankorei)){ //szerepel-e a felhasználó tankörei között a csoport? - if( in_array($curr, $val3)){ //Igen, és már benne is van +++ - - echo "$curr már benne van a \"$key3\" csoportban\n"; - } else { //Nincs, most kell beletenni - echo "$curr még nincs bent a \"$key3\" csoportban\n"; - group_user_add($key3, $curr); - } - } else { //Nem szerepel a tankörei között - if(in_array($curr, $val3) and (substr($key3, 0, strlen($m2n['csoport_prefix'])) === $m2n['csoport_prefix']) ){ - // korábban benne volt egy tankörben, de már nincs, vagy a hozzátartozó tankörben már nem tanít => kivenni - echo "$curr benne volt a \"$key3\" csoportban, kiszedve\n"; - group_user_del($key3, $curr); //egy korábbi tankör lehetett... - } - } - } - break; - } - } -// echo "\n\n curr:$curr, key2:$key2, val2:$val2, key3:$key3, val3:$val3,\n\n"; - unset($nxt_user[$curr]); //Megvizsgálva, többször már nem kell dönteni róla. - if($curr != $key2 and $curr != null){ //Nincs még ilyen felhasználó - echo "user added: $curr:$curr_n \n"; - user_add($curr, $curr_n); //Akkor hozzá kell adni - nxt_register_useradd($link, $curr); - - foreach($tankorei as $key3 => $val3){ //Hozzáadja a (tankör)csoportokhoz is. - group_user_add($val3,$curr); - echo "felhasználó hozzáadva: $val3 csoporthoz\n"; - } - $params['quota'] = $m2n['default_quota']; // Alapértelmezett kvóta - $params['lang'] = $m2n['default_lang']; // Nyelv - if($curr_e == ""){ - $params['email'] = $m2n['default_email']; // e-mail beállítása - } else { - $params['email'] = $curr_e; // ha van a mysql-ben e-mail, akkor azt használja - } - user_set($curr,$params); //Alapértelmezett paraméterek érvényesítése - echo "paraméterek beállítva:".$params['quota'].$params['lang'].$params['email']."\n"; - } - - echo "--$curr--$curr_n--\n"; - $tankorei = array(); // új ciklus kezdődik - $curr = $val['userAccount']; // - $curr_n = $val['fullName']; // - $curr_e = $val['email']; // - } - $tankorei[] = $val['tankorNev']; // Egyébként a csoportok (tankörök) összegyűjtése -} - - -// A megszűnő felhasználónevek egyeztetése -$nxt_registered = nxt_register_userlist($link); -foreach($nxt_user as $key => $val){ //Benne van a nyilvántartásban, - if(in_array($key, $nxt_registered['account'])){ //vagyis a script adta hozzá korábban - if( nxt_user_lastlogin($key) == "1970-01-01T00:00:00+00:00" ){ //Még soha nem lépett be = 1970.01.01 ?? - user_del($key); //Akkor törli - nxt_register_userdel($link, $key); //A listáról is - echo "felhasználó eltávolítva: $key\n"; - } else { - user_dis($key); //Különben csak letiltja (fájlok ne vesszenek el) - nxt_register_userdis($link, $key); //Feljegyzi a nyilvántartásba - echo "felhasználó letiltva: $key\n"; - } - } - // döntési logika: - // ha benne van a $mayor_user-ben, - // - akkor vagy új user, vagy már meglévő, - // - ezért őt kihúzza az $nxt_user listáról, --> megtartja - // ezután ha valaki még rajta van az $nxt_user listán, az - // - vagy más, mayor_naplón kívüli user (rendszergazda vette föl) --> nem nyúl hozzá - // - vagy megszűnő, korábbi mayor_napló-s user --> törli (vagy letiltja) - // ha rajta van a $nxt_registered listán is, és nincs rajta $mayor_user listán - // - akkor őt a script hozta létre régen --> megszűnő, törli (vagy letiltja) - // (hiszen, ha aktív lenne, rajta lenne a $mayor_user listán, és kihúzta volna a $nxt_user-ből) -} - -// Végül a nyilvántartás kipucolása -$nxt_user = nxt_user_list(); -$nxt_registered = nxt_register_userlist($link); -foreach($nxt_registered['account'] as $key => $val){ //Erre a nextcloud "occ" parancs hibakezelése miatt van szükség - - if(@$nxt_user[$val] === null ){ - echo "kivéve a nyilvántartásból: $val"; - nxt_register_userdel($link, $val); - } -} - -//------------------------------------------------------------------------------------------------------------------------------- - -//test -//script_install($link); - - -@mysqli_close($link2); -@mysqli_close($link); -echo "\n"; //endline - -} else { - echo "Legalább PHP7 és mysqli szükséges!\n\n"; -} - - - - - -?> -- cgit v1.2.3