XML-RPC
XML-RPC interface
De LDAP server kan direct gemuteerd worden via een LDAP koppeling. Zie de standaard LDAP pagina voor de uitleg welke poorten daarvoor gebruikt kunnen worden.
Daarnaast is er de wens ontstaan om via een standaard protocol met de LDAP omgeving te kunnen communiceren. Er is hiertoe een XML-RPC koppeling ontwikkeld. XML-RPC is een standaard interface, waarmee het mogelijk is om vanuit diverse omgevingen op een gestandaardiseerde manier te communiceren.
Globale functie omschrijving
- Controleer of een gebruiker bestaat
- Wijzig het wachtwoord ('userPassword') en/of de gebruikersnaam ('hccLogin')
- Maak een nieuwe gebruiker
- Gooi een gebruiker weg
- Muteer een gebruiker ('hccIG', 'hccRegio', 'hccRol')
Authenticatie
Alle aanroepen gebeuren op basis van authenticatie vanuit de aanroeper. Dit valt uiteen in de volgende categorieën:
- gebruikersnaam ('hccLogin') en wachtwoord ('userPassword')
- hcc lidnummer ('hccLidnummer') en hcc code ('hccCode')
- beheerders-DN ('beheerLogin') en beheerders wachtwoord ('beheerPassword')
Resultaten
Alle aanroepen geven de volgende elementen terug:
- naam van de uitgevoerde procedure ('Action')
- resultaat van de uitgevoerde procedure ('Status')
- Een tekstuele vertaling van het resultaat dan wel de foutmelding ('Message')
Daarnaast geven specifieke aanroepen extra resultaten terug
Technische omschrijving
2012.03.26 HaVe XML-RPC Hobbynet versie 8. // XML-RPC beschrijving van acties in hcc.nl LDAP database // // 1.1 controleer of een gebruiker bestaat - optie 1 // (authenticatie op basis van hccLidnr en hccCode) $request = xmlrpc_encode_request('ldap', array('GebruikerBestaatControle', array('hccLidnr', $hccLidnr), array('hccCode', $hccCode))); // 1.2 controleer of een gebruiker bestaat - optie 2 // (authenticatie op basis van hccLogin en userPassword) $request = xmlrpc_encode_request('ldap', array('GebruikerBestaatControle', array('hccLogin', $hccLogin), array('userPassword', $userPassword))); // 1.3 controleer of een gebruiker bestaat - optie 3 // (t.b.v. PC30 portal) // (authenticatie op basis van beheerdernaam en beheerderwachtwoord) // * Als hccLidnr gevuld is, dan wordt hccLidnr gebruikt om het juiste record te zoeken // Als hccLidnr leeg is, dan wordt hccLogin gebruikt om het juiste record te zoeken // 1 van beide velden MOET aanwezig zijn $request = xmlrpc_encode_request('ldap', array('GebruikerBestaatControle', array('beheerLogin', $beheerLogin), array('beheerPassword', $beheerPassword), [array('hccLidnr', $hccLidnr),] [array('hccLogin', $hccLogin)])); Output positief: $reply = array('HCCldap', array('Action', 'GebruikerBestaatControle'), array('Status', 'TRUE'), array('Message', 'Gebruikersgegevens opgevraagd'), array('hccLidnr', $hccLidnr), array('hccLogin', $hccLogin), array('cn', $cn), array('sn', $sn), array('hccRegio', $hccRegio), array('hccIG', $hccIG), array('hccRol', $hccRol)); Output negatief $reply = array('HCCldap', array('Action', 'GebruikerBestaatControle'), array('Status', 'FALSE'), array('Message', 'Onjuiste credentials')); $reply = array('HCCldap', array('Action', 'GebruikerBestaatControle'), array('Status', 'FALSE'), array('Message', 'Gegevenscombinatie onjuist')); // 2.1 wijzig wachtwoord - optie 1 // op basis van hccLidnummer en hccCode (t.b.v. wachtwoord-vergeten procedure) // (authenticatie op basis van hccLidnr en hccCode) // ** Deze aanpassingen worden doorgezet naar hccnet.nl ** $request = xmlrpc_encode_request('ldap', array('WijzigGebruikersGegevens', array('hccLidnr', $hccLidnr), array('hccCode', $hccCode), array('nieuw_userPassword', $nieuw_userPassword))); // ** t.b.v. profielpagina van bestaande leden ** // 2.2 wijzig wachtwoord - optie 2 // (t.b.v. profiel-pagina) // (authenticatie op basis van hccLogin en userPassword) // ** Deze aanpassingen worden doorgezet naar hccnet.nl ** $request = xmlrpc_encode_request('ldap', array('WijzigGebruikersGegevens', array('hccLogin', $hccLogin), array('userPassword', $userPassword), array('nieuw_userPassword', $nieuw_userPassword))); // 2.3 wijzig wachtwoord - optie 3 // (t.b.v. PC30 portal) // (authenticatie op basis van beheerdernaam en beheerderwachtwoord) // * Als hccLidnr gevuld is, dan wordt hccLidnr gebruikt om het juiste record te zoeken // Als hccLidnr leeg is, dan wordt hccLogin gebruikt om het juiste record te zoeken // 1 van beide velden MOET aanwezig zijn // ** Deze aanpassingen worden doorgezet naar hccnet.nl ** $request = xmlrpc_encode_request('ldap', array('WijzigGebruikersGegevens', array('beheerLogin', $beheerLogin), array('beheerPassword', $beheerPassword), [array('hccLidnr', $hccLidnr),] [array('hccLogin', $hccLogin),] array('nieuw_userPassword', $nieuw_userPassword))); Output positief: $reply = array('HCCldap', array('Action', 'WijzigGebruikersGegevens'), array('Status', 'TRUE'), array('Message', 'Gebruikersgegevens gewijzigd'), array('cn', $cn), array('sn', $sn)); Output negatief: $reply = array('HCCldap', array('Action', 'WijzigGebruikersGegevens'), array('Status', 'FALSE'), array('Message', 'Onjuiste credentials')); $reply = array('HCCldap', array('Action', 'WijzigGebruikersGegevens'), array('Status', 'FALSE'), array('Message', 'Gegevenscombinatie onjuist')); // ** t.b.v. Cronjob ** // 5.1 Wijzig hccIG // * Als hccLidnr gevuld is, dan wordt hccLidnr gebruikt om het juiste record te zoeken // Als hccLidnr leeg is, dan wordt hccLogin gebruikt om het juiste record te zoeken // 1 van beide velden MOET aanwezig zijn // * nieuw_hccIG is een komma-gescheiden lijst. // Als deze lijst leeg is (of ontbreekt), dan worden alle bestaande hccIG records van dit lid weggegooid. $request = xmlrpc_encode_request('ldap', array('WijzigHccIG', array('beheerLogin', $beheerLogin), array('beheerPassword', $beheerPassword), [array('hccLidnr', $hccLidnr),] [array('hccLogin', $hccLogin),] [array('nieuw_hccIG', $nieuw_hccIG)])); // komma-gescheiden lijst Output positief: $reply = array('HCCldap', array('Action', 'WijzigHccIG'), array('Status', 'TRUE'), array('Message', 'hccIG gewijzigd')); Output negatief: $reply = array('HCCldap', array('Action', 'WijzigHccIG'), array('Status', 'FALSE'), array('Message', 'Onjuiste credentials')); $reply = array('HCCldap', array('Action', 'WijzigHccIG'), array('Status', 'FALSE'), array('Message', 'Gegevenscombinatie onjuist')); // ** t.b.v. Cronjob ** // 6.1 Wijzig hccRegio // Pas bij een verhuizing de hccRegio aan // * Als hccLidnr gevuld is, dan wordt hccLidnr gebruikt om het juiste record te zoeken // Als hccLidnr leeg is, dan wordt hccLogin gebruikt om het juiste record te zoeken // 1 van beide velden MOET aanwezig zijn $request = xmlrpc_encode_request('ldap', array('WijzigHccRegio', array('beheerLogin', $beheerLogin), array('beheerPassword', $beheerPassword), [array('hccLidnr', $hccLidnr),] [array('hccLogin', $hccLogin),] array('nieuw_hccRegio', $nieuw_hccRegio))); Output positief: $reply = array('HCCldap', array('Action', 'WijzigHccRegio'), array('Status', 'TRUE'), array('Message', 'hccRegio gewijzigd')); Output negatief: $reply = array('HCCldap', array('Action', 'WijzigHccRegio'), array('Status', 'FALSE'), array('Message', 'Onjuiste credentials')); $reply = array('HCCldap', array('Action', 'WijzigHccRegio'), array('Status', 'FALSE'), array('Message', 'Gegevenscombinatie onjuist')); // ** t.b.v. Cronjob ** // 7.1 Wijzig hccRol // * Als hccLidnr gevuld is, dan wordt hccLidnr gebruikt om het juiste record te zoeken // Als hccLidnr leeg is, dan wordt hccLogin gebruikt om het juiste record te zoeken // 1 van beide velden MOET aanwezig zijn // * nieuw_hccRol is een komma-gescheiden lijst. // Als deze lijst leeg is (of ontbreekt), dan worden alle bestaande hccRol records van dit lid weggegooid. $request = xmlrpc_encode_request('ldap', array('WijzigHccRol', array('beheerLogin', $beheerLogin), array('beheerPassword', $beheerPassword), [array('hccLidnr', $hccLidnr),] [array('hccLogin', $hccLogin),] [array('nieuw_hccRol', $nieuw_hccRol)])); Output positief: $reply = array('HCCldap', array('Action', 'WijzigHccRol'), array('Status', 'TRUE'), array('Message', 'hccRol gewijzigd')); Output negatief: $reply = array('HCCldap', array('Action', 'WijzigHccRol'), array('Status', 'FALSE'), array('Message', 'Onjuiste credentials')); $reply = array('HCCldap', array('Action', 'WijzigHccRol'), array('Status', 'FALSE'), array('Message', 'Gegevenscombinatie onjuist')); // ** t.b.v. 1e keer doorlopen van de profielpagina ** // 8.1 Maak nieuwe gebruiker bij hccnet.nl, en sla gebruikersnaam en wachtwoord tevens in LDAP op // (authenticatie op basis van hcc lidnummer en hcc-code) // ** Deze gegevens worden doorgezet naar hccnet.nl ** $request = xmlrpc_encode_request('HCCnet', array('MaakGebruikerAan', array('hccLidnr', $hccLidnr), array('hccCode', $hccCode), [array('nieuw_hccLogin', $nieuw_hccLogin),] [array('nieuw_userPassword', $nieuw_userPassword)])); Output positief: $reply = array('HCCnet', array('Action', 'MaakGebruikerAan'), array('Status', 'TRUE'), array('Message', 'Gebruiker aangemaakt')); Output negatief $reply = array('HCCnet', array('Action', 'MaakGebruikerAan'), array('Status', 'FALSE'), array('Message', 'Onjuiste credentials')); $reply = array('HCCnet', array('Action', 'MaakGebruikerAan'), array('Status', 'FALSE'), array('Message', 'Gebruikersnaam bestaat al')); // ** t.b.v. 1e keer doorlopen van de profielpagina ** // 8.2 Controleer of de gebruikersnaam op dit moment bestaat // (geen authenticatie) // ** Deze gegevens worden opgevraagd bij hccnet.nl ** // ** Het betreft een momentopname, de naam wordt niet gereserveerd! ** $request = xmlrpc_encode_request('HCCnet', array('IsDezeNaamNogBeschikbaar', array('nieuw_hccLogin', $nieuw_hccLogin)); Output positief: $reply = array('HCCnet', array('Action', 'IsDezeNaamNogBeschikbaar'), array('Status', 'TRUE'), array('Message', 'Gebruikersnaam is nog beschikbaar')); Output negatief $reply = array('HCCnet', array('Action', 'IsDezeNaamNogBeschikbaar'), array('Status', 'FALSE'), array('Message', 'Gebruikersnaam bestaat al')); // onbekende aanroep $request = xmlrpc_encode_request('ldap', array('OnbekendeAanroep', array('parameter', $iets))); Output negatief: $reply = array('HCCldap', array('Action', 'OnbekendeAanroep'), array('Status', 'FALSE'), array('Message', 'Opdracht onbekend'));
Overzicht van XML procedures die bij HenZ draaien (worden via de Hobbynet XML-RPC server afgehandeld)
- Action=1 controleer of een gebruiker bestaat op basis van hcclidnummer en hcccode. (geen aparte interface definitie noodzakelijk, bestaat al lokaal in XML-RPC server) Zie 1.1: controleer of een gebruiker bestaat - optie 1 - Action=2 wijzig gebruikersnaam en of wachtwoord op basis van hcclidnummer en hcccode. (geen aparte interface definitie noodzakelijk, bestaat al lokaal in XML-RPC server) (XML-RPC server gaat de hccnet XML-call uitvoeren, zie 2.1, 2.2 en 2.3) - Action=3 controleer of een gebruikersnaam bestaat (XML-RPC server gaat de hccnet XML-call uitvoeren, zie 8.2) - Action=4 creer een nieuwe gebruiker. Per lidnummer is er 1 account. Als er al een account voor dit lidnummer bestaat wordt het bestaande account hernoemd. (XML-RPC server gaat de hccnet XML-call uitvoeren, zie 8.1)
Release notes
2012.02.08 Wijzigingen versie 5: - 4.1 verwijder_hcc_Lidnummer i.p.v. hcc_Lidnummer - 4.1 optionele extra parameter verwijder_hccLogin - Optionele parameters aangegeven - Vanwege de duidelijkheid de beheerLogin en beheerPassword velden bovenin de betreffende aanroepen gezet (De volgorde van de parameters is niet relevant, dus dit is geen interface-aanpassing) 2012.02.16 Wijzigingen versie 6: - 2.1/2.2/2.3 geef ook cn en sn terug na aanpassen van het wachtwoord - 3.1 geef cn en sn terug na aanmaken nieuwe gebruiker 2012.02.27 Wijzigingen versie 7: - Neem de XML interface van HenZ in deze XML-RPC server op 8.1 Maak nieuwe gebruiker bij hccnet.nl, en sla gegevens tevens in LDAP op - 2.1 wijzig wachtwoord - optie 1 * Nieuw wachtwoord is verplicht, niet optioneel * wijzigingen worden naar hccnet.nl doorgezet - 2.2 wijzig wachtwoord, optie 2 * Nieuw wachtwoord is verplicht, niet optioneel * gebruikersnaam kan niet meer via deze interface aangepast worden * wijzigingen worden naar hccnet.nl doorgezet - 2.3 wijzig wachtwoord, optie 3 * wijzigingen worden naar hccnet.nl doorgezet 2012.03.26 Wijzigingen versie 8: - Breidt de XML interface van HenZ in deze XML-RPC server uit met 8.2 Controleer of de gebruikersnaam op dit moment bestaat
Aanpassingen aan de Apache omgeving
De XML-RPC server zal 'ergens' een bestand moeten kunnen vinden met de gebruikersnamen t.b.v. het authenticeren bij de LDAP-server.
Dit bestand wordt geplaatst in de map '/usr/local/hobbynet/etc'. Om dit vanuit Apache te mogen benaderen, dient een aanpassing aan php.ini gemaakt te worden:
/etc/php5/apache2/php.ini include_path = ".:/usr/share/php:/usr/share/pear:/usr/local/hobbynet/etc"