# NeptunLdapSync

Az NIIF Intézet által fejlesztett szinkronizációs folyamat alkalmas arra, hogy Neptunban tárolt felhasználók (hallgatók, oktatók, dolgozók) adatait egy névtárba szinkronizálja. Természetesen lehetséges a névtárat más forrásokból is módosítani (pl. a dolgozói adatok sokhelyütt nem a Neptunban tárolódnak), ezzel a szinkronizációs program nem foglalkozik.

Az NIIF Intézet referencia implementációjának leírása [itt található](https://help.edu.hu/books/egyeb/page/neptunldapsyncimpl)


## Feltételezések

* A Neptun tartalmazza az SDA által kifejlesztett szinkronizációs webservice-t (ezt jelen pillanatban az SDA-tól kérni kell)
* A Neptun ezen kívül biztosít egy olyan webservice-t is, amely ellenőrizni tud egy neptunkódhoz tartozó jelszót (információink szerint ilyet néhány helyen biztosít az SDA)
* Létezik egy vagy több - az intézmény által fejlesztett vagy üzembe állított - webes adminisztrációs alkalmazás, ahol a felhasználók a Neptun jelszavuk birtokában tudnak maguk számára
	* LDAP jelszót generálni (a neptunos jelszó **nem** szinkronizálódik az LDAP-ba)
	* LDAP jelszót megváltoztatni
	* LDAP azonosítót generálni (opcionális, az intézmény algoritmikusan generált azonosítókat is alkalmazhat)
	* további LDAP attribútumokat generáltatni (pl. levelezéshez, Unix bejelentkezéshez stb.)


## Felhasználó életciklusa

1. Neptun felhasználói bejegyzés létrehozása (részletek nélkül)
1. Felhasználói adatok szinkronizálása az LDAP-ba
1. LDAP jelszó aktiválása
1. Neptun adatok változásának szinkronizációja
	* személyi adatok
	* státusz adatok
	* szervezeti kapcsolódás adatai
	* oktatási adatok
1. *(opcionális)* POSIX attribútumok generálása
1. *(opcionális)* Elfelejtett LDAP jelszó újragenerálása Neptun autentikáció után
1. Neptun státusz adatok alapján passzív / kilépett státuszba helyezés
1. LDAP bejegyzés törlése

## Részletek

### Attribútum mapping

#### Azonosító adatok

| Attribútum | LDAP Attribútum | Megjegyzés  |
|---|---|---|
| Neptun kód | niifPersonOrgID |  |

#### Személyi adatok

| Attribútum | LDAP Attribútum | Megjegyzés  |
|---|---|---|
| Vezetéknév | sn |  |
| Keresztnév | givenName |  |
| Teljes név | cn |  |
| Titulus | title | pl. Dr.  |
| Telefonszám | telephoneNumber, mobile, fax | A mobiltelefonszámot érdemes külön LDAP attribútumban tárolni a többi telefonszámtól. Speciális konverziós logika szükséges lehet (például az elválasztó karakterek törlése).  |
| E-mail cím | mail |  |


#### Státusz adatok

| Attribútum | LDAP Attribútum | Megjegyzés  |
|---|---|---|
| Hallgatói státusz | eduPersonAffiliation={'student', 'member'} | Ha van hozzá olyan képzés, aminek hallgatója  |
| Oktatói státusz | eduPersonAffiliation={'faculty', 'member'} | Ha az elmúlt N évben volt kurzushoz kapcsolódása  |
| Alkalmazotti státusz | eduPersonAffiliation={'employee', 'staff', 'member'} | Ha alkalmazott  |


#### Metaadatok

| Attribútum | LDAP Attribútum | Megjegyzés  |
|---|---|---|
| Bejegyzés archiválásának időpontja | schacExpiryDate | Azon időpont, amikor a bejegyzést az aktív felhasználók közül el kell távolítani, ezután semmilyen szolgáltatáshoz nem férhet hozzá  |
| Egyéb státuszok | schacUserStatus | Pl. az intézményhez fűződő viszonya (meddig tart), bizonyos szolgáltatásokat meddig érhet el, stb  |


#### Szervezeti kapcsolódások

| Attribútum | LDAP Attribútum | Megjegyzés  |
|---|---|---|
| Kar | niifEduPersonFaculty(DN) | Képzés kar szabadszöveges megnevezése (kódja) - csak hallgatóknál  |
| Szak | niifEduPersonMajor | Képzés szak szabadszöveges megnevezése - csak hallgatóknál  |
| Egyéb szervezeti egység | eduPersonOrgUnitDN | Pl tanszék, intézet, kollégium  |


#### Oktatási adatok

| Attribútum | LDAP Attribútum | Megjegyzés  |
|---|---|---|
| Aktívan oktatott tárgyak listája | niifEduPersonHeldCourse | Azon tárgykódok listája, melynek az elmúlt 1 évben indult olyan kurzusa, amit az adott oktató tartott  |
| Tárgyfelelős | eduPersonEntitlement? | Azon tárgykódok listája, melynek az oktató jelenleg tárgyfelelőse  |
| Aktuális félévben hallgatott tárgyak listája | niifEduPersonAttendedCourse |   |
| Valaha hallgatott tárgyak listája | niifEduPersonArchiveCourse | Aktuális félév tárgyai is  |


### Jelszó beállító felület


### Törlési folyamat


### Státusz

## Szinkronizáció

A Neptun és az LDAP közötti szinkronizációt az LDAP oldali szinkronizáló szkript indítja.


### Neptun interfészek

A szinkronizálás a Neptun által biztosított XML Webszolgáltatáson keresztül valósul meg. A legtöbb művelet két paramétert fogad: időbélyeg illetve Neptun lista - mindkettő opcionális. Amennyiben az időbélyeg szerepel, csak a megadott időpont óta módosult rekordok kerülnek át. A Neptun lista megadása az adott bejegyzésekre szűkíti az eredményt.

Fontos, hogy pl. a személyi adatoknál az időbélyeg a Neptun-ban a teljes rekordra értelmezett, tehát nem csak a szinkronizálni kívánt adatok triggerelik a változását.

* Szervezeti struktúra
	* paraméterek: nincs
	* visszatérés: szervezeti egységek fastruktúrája (egységenként: kód, szerv. egység neve, típusa)
	* ritka szinkronizálás (félévente)
* Neptun kódok és státuszok
	* paraméterek: opc. időbélyeg, opc. Neptun lista
	* visszatérés: Neptun kód, hallgatói státusz, oktatói státusz, alkalmazotti státusz
	* gyakori szinkronizálás (legalább naponta)
* Személyi adatok
	* paraméterek: opc. időbélyeg, opc. Neptun lista
	* visszatérés: Neptun kódhoz tartozó személyi adatok
	* gyakori szinkronizálás (naponta)
* Szervezeti kapcsolódás
	* paraméterek: opc. időbélyeg, opc. Neptun lista
	* visszatérés: Neptun kódhoz tartozó szervezeti egységek kódja
	* ritka szinkronizálás (félévente)
* Oktatási adatok
	* paraméterek: Neptun lista
	* visszatérés: minden megadott neptun kódhoz az összes oktatási adat (nem csak a változások)
	* ritka szinkronizálás (szorgalmi időszakban hetente, tárgyjelentkezési időszak kezdetétől regisztrációs hét végéig nincs szinkronizálás)


## Implementációk

* [NIIF szinkronizáció implementáció (PHP)](https://help.edu.hu/books/egyeb/page/neptunldapsyncimpl)
* [Neptun webservice szinkronizációs próbálkozások a PPKE-n](https://help.edu.hu/books/egyeb/page/neptunwebserviceppke)