From 9dffa0ed1228a16d91b2e291bfa5e07b517bf49f Mon Sep 17 00:00:00 2001 From: Roland Gruber Date: Mon, 15 Oct 2018 21:05:39 +0200 Subject: [PATCH] YubiKey support --- lam/HISTORY | 1 + lam/docs/manual-sources/chapter-modules.xml | 68 ++ .../manual-sources/images/mod_yubikey1.png | Bin 0 -> 46003 bytes .../manual-sources/images/mod_yubikey2.png | Bin 0 -> 18225 bytes .../manual-sources/images/mod_yubikey3.png | Bin 0 -> 27560 bytes .../manual-sources/images/mod_yubikey4.png | Bin 0 -> 7344 bytes .../manual-sources/images/mod_yubikey5.png | Bin 0 -> 8777 bytes .../manual-sources/images/mod_yubikey6.png | Bin 0 -> 7771 bytes lam/graphics/yubikey.png | Bin 0 -> 1205 bytes lam/lib/baseModule.inc | 5 +- lam/lib/modules/yubiKeyUser.inc | 592 ++++++++++++++++++ 11 files changed, 665 insertions(+), 1 deletion(-) create mode 100644 lam/docs/manual-sources/images/mod_yubikey1.png create mode 100644 lam/docs/manual-sources/images/mod_yubikey2.png create mode 100644 lam/docs/manual-sources/images/mod_yubikey3.png create mode 100644 lam/docs/manual-sources/images/mod_yubikey4.png create mode 100644 lam/docs/manual-sources/images/mod_yubikey5.png create mode 100644 lam/docs/manual-sources/images/mod_yubikey6.png create mode 100755 lam/graphics/yubikey.png create mode 100644 lam/lib/modules/yubiKeyUser.inc diff --git a/lam/HISTORY b/lam/HISTORY index 47ebe3aa..5ad4d74b 100644 --- a/lam/HISTORY +++ b/lam/HISTORY @@ -1,5 +1,6 @@ December 2018 6.6 - New import/export in tools menu + - YubiKey support 25.09.2018 6.5 diff --git a/lam/docs/manual-sources/chapter-modules.xml b/lam/docs/manual-sources/chapter-modules.xml index 00263ab7..837d79fb 100644 --- a/lam/docs/manual-sources/chapter-modules.xml +++ b/lam/docs/manual-sources/chapter-modules.xml @@ -1992,6 +1992,74 @@ ldapsearch -x -h $server -p $port -b $baseDN -s sub "(&(objectclass=posixAcc AuthorizedKeysCommandUser root +
+ YubiKey + + You can manage your YubiKey ids with LAM. It supports the yubiKeyUser schema + or any other attribute mapping. + + Configuration + + First, you need to activate the YubiKey module for users in your + LAM server profile. + + + + + + Second, you need to specify which object class and attribute name + should be used. + + Object class: If you have an object class just for the YubiKey ids + then enter it here. LAM will then provide options to add and remove it. + In case you reuse some existing attribute from e.g. inetOrgPerson please + leave object class name blank. + + Attribute name: please enter the attribute name that is used for + the key ids. + + + + + + You will then be able to manage the key ids for your users. + + + + + + Self Service (LAM Pro) + + This will allow your users to update their own keys. + + You need to configure the object class and attribute name first. + This is done on tab "Module settings" in self service profile. + + Attention: Please note that both + fields are mandatory here. Even if you reused an attribute from some + existing object class you need to set it here. LAM needs this to detect + if the user can add keys. + + + + + + Then add the YubiKey ids field to your self service profile on tab + "Page layout". + + + + + + When a user with the specified object class logs in then the key + input fields are shown. + + + + +
+
Authorized services diff --git a/lam/docs/manual-sources/images/mod_yubikey1.png b/lam/docs/manual-sources/images/mod_yubikey1.png new file mode 100644 index 0000000000000000000000000000000000000000..fddd5d7d9e96050b27837e72865b01b62aba6be1 GIT binary patch literal 46003 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 -AqUBbNCM`W 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 literal 0 HcmV?d00001 diff --git a/lam/docs/manual-sources/images/mod_yubikey3.png b/lam/docs/manual-sources/images/mod_yubikey3.png new file mode 100644 index 0000000000000000000000000000000000000000..acd5c378d944b16796392473a30c4076f0f16b72 GIT binary patch literal 27560 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 Sp48y!5LG3uM@5R3@Bah!>18nh literal 0 HcmV?d00001 diff --git a/lam/docs/manual-sources/images/mod_yubikey5.png b/lam/docs/manual-sources/images/mod_yubikey5.png new file mode 100644 index 0000000000000000000000000000000000000000..eac43233e5e712f34011e2b94e5e379eed27231d GIT binary patch literal 8777 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 Ntdyc;rTE7${|%JC+0y_3 literal 0 HcmV?d00001 diff --git a/lam/docs/manual-sources/images/mod_yubikey6.png b/lam/docs/manual-sources/images/mod_yubikey6.png new file mode 100644 index 0000000000000000000000000000000000000000..02b94efca338610f1bbd6346016e15a392080fef GIT binary patch literal 7771 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 MKhRVygj&4)KLDUSDgXcg literal 0 HcmV?d00001 diff --git a/lam/graphics/yubikey.png b/lam/graphics/yubikey.png new file mode 100755 index 0000000000000000000000000000000000000000..bcd4d48c4940ddd13804156daaaf330588870758 GIT binary patch literal 1205 zcmd_o`A^da6aetAY=mnJgh|i^Cpt|!muypr9g768rIfBnIGlCEp#qb+G1QJ_fKFjz zB~S_$hlK&kRSp@8Fphz=Uwd%06l6$CrG=JJXe&Kv`=$53-@jwY=e?KrlK0bl_mY!v z{=WNs0RZsFCty$I60u97hBND5hC)OYc_c=*)#OYd2@&j(lZ`{;6Uiw4+83z9>gHK{ikm@JSHB5fh zIC;Kt^6RFl3(Zp(o2M^55@bIXfcMWQAG8a^!_s`eOy{Q{^|jH znE@`>KbQT^l{InY%{=)d-pXU%N(&#+Issd4n^F;>pZf@66gC zqP4yk>wnFwhW=3vFQ`UdZj3H&j4f`$o{2Zd#cGyB&0a!)QVmC{;l9%HmbLtqErCKe ztJKY{>E~5O@#eNvy}hh4$uuUp)+B#zR&1G-I?I~Q@~_Uau7^|xXu}ApjXP?S^|i^m zWwGfkHiN}xglq-~&h~Aq-E4JOYzWBa*s;T$R=d;YK-irym&4_9x?C=|+Z|qu?uP$( z7da&<6^L0E=OE2R0uBREJi`*;#wS04bR7Wvf|1w-Fd9PPp%)oX#Cj=w-}Xm`=k1Ll z!aG0XF|ldr>Dts-LR@U1*&H$e4C*p{X0#d+b^_oq5Y~YsRKVxruTI^BrdOoyM#vp|d9*MP(N&cYp?uAY*2~&$-e8ks&)G@Ul6u z$h#!-L%%Ezhdjv79*&fJN*=vK322!7s7BsT{L=i(5AjQRgeNk+;>6wkM-Oj9*FqGF hpOLy^+*71`P9V5xs>ml=pn>lK;IT=V-nh(?{{Zixr-%Rm literal 0 HcmV?d00001 diff --git a/lam/lib/baseModule.inc b/lam/lib/baseModule.inc index 9b948af0..2f2bd6af 100644 --- a/lam/lib/baseModule.inc +++ b/lam/lib/baseModule.inc @@ -68,7 +68,10 @@ abstract class baseModule { /** configuration settings of all modules */ protected $moduleSettings; - /** self service profile with settings of all modules */ + /** + * self service profile with settings of all modules + * @var selfServiceProfile profile + */ protected $selfServiceSettings; /** name of parent accountContainer ($_SESSION[$base]) */ diff --git a/lam/lib/modules/yubiKeyUser.inc b/lam/lib/modules/yubiKeyUser.inc new file mode 100644 index 00000000..06439c4c --- /dev/null +++ b/lam/lib/modules/yubiKeyUser.inc @@ -0,0 +1,592 @@ +autoAddObjectClasses = false; + } + + /** + * Returns true if this module can manage accounts of the current type, otherwise false. + * + * @return boolean true if module fits + */ + public function can_manage() { + return in_array($this->get_scope(), array('user')); + } + + /** + * Returns meta data that is interpreted by parent class + * + * @return array array with meta data + * + * @see baseModule::get_metaData() + */ + public function get_metaData() { + $return = array(); + // icon + $return['icon'] = 'yubikey.png'; + // alias name + $return["alias"] = _("YubiKey"); + // module dependencies + $return['dependencies'] = array('depends' => array(), 'conflicts' => array()); + // managed object classes + $objectClass = $this->getObjectClassName(); + if (!empty($objectClass)) { + $return['objectClasses'] = array($objectClass); + } + // managed attributes + $attributeName = $this->getAttributeName(); + $return['attributes'] = array($attributeName); + // help Entries + $return['help'] = array( + $attributeName => array( + "Headline" => _("YubiKey ids"), 'attr' => $attributeName, + "Text" => _("Please enter your YubiKey ids.") + ), + 'keyList' => array( + "Headline" => _("YubiKey ids"), 'attr' => $attributeName, + "Text" => _("Please a comma separated list of your YubiKey ids.") + ), + 'objectClass' => array( + "Headline" => _("Object class"), + "Text" => _("Please enter the object class that should be used for YubiKey (e.g. 'yubiKeyUser').") + ), + 'attributeName' => array( + "Headline" => _("Attribute name"), + "Text" => _("Please enter the attribute name that should be used for YubiKey (e.g. 'yubiKeyId').") + ), + ); + // upload fields + $return['upload_columns'] = array( + array( + 'name' => 'yubiKeyUser_yubiKeyId', + 'description' => _('YubiKey ids'), + 'help' => 'keyList', + 'example' => 'abcd1234, vwyxz12345' + ) + ); + // available PDF fields + $return['PDF_fields'] = array( + 'yubiKeyId' => _('YubiKey ids') + ); + // self service field settings + $return['selfServiceFieldSettings'] = array( + 'yubiKeyId' => _('YubiKey ids'), + ); + $return['selfServiceReadOnlyFields'] = array('yubiKeyId'); + return $return; + } + + /** + * This function fills the message array. + **/ + protected function load_Messages() { + $this->messages['yubiKeyId'][0] = array('ERROR', _('Please enter a valid key id.')); + $this->messages['yubiKeyId'][1] = array('ERROR', _('Account %s:') . ' yubiKeyUser_yubiKeyId', _('Please enter a valid key id.')); + } + + /** + * Returns the HTML meta data for the main account page. + * + * @return htmlElement HTML meta data + */ + public function display_html_attributes() { + $return = new htmlTable(); + $objectClass = $this->getObjectClassName(); + $attributeName = $this->getAttributeName(); + if (empty($attributeName)) { + $message = new htmlStatusMessage('ERROR', _('Invalid configuration detected. Please edit your server profile (module settings) and fill all required fields.')); + $return->addElement($message, true); + return $return; + } + if (empty($objectClass) || in_array($objectClass, $this->attributes['objectClass'])) { + $this->addMultiValueInputTextField($return, $attributeName, _('YubiKey ids'), false, '256', false, null, '50'); + if (!empty($objectClass)) { + $return->addElement(new htmlSpacer(null, '30px'), true); + + $remButton = new htmlButton('remObjectClass', _('Remove YubiKey extension')); + $remButton->colspan = 3; + $return->addElement($remButton); + } + } + else { + $return->addElement(new htmlButton('addObjectClass', _('Add YubiKey extension'))); + } + return $return; + } + + /** + * Processes user input of the primary module page. + * It checks if all input values are correct and updates the associated LDAP attributes. + * + * @return array list of info/error messages + */ + public function process_attributes() { + $messages = array(); + $objectClass = $this->getObjectClassName(); + $attributeName = $this->getAttributeName(); + // add extension + if (isset($_POST['addObjectClass'])) { + $this->attributes['objectClass'][] = $objectClass; + return array(); + } + // remove extension + elseif (isset($_POST['remObjectClass'])) { + $this->attributes['objectClass'] = array_delete(array($objectClass), $this->attributes['objectClass']); + if (!empty($this->attributes[$attributeName])) { + unset($this->attributes[$attributeName]); + } + return array(); + } + // skip processing if extension is not active + if (!empty($objectClass) && !in_array($objectClass, $this->attributes['objectClass'])) { + return array(); + } + $this->processMultiValueInputTextField($attributeName, $messages, 'ascii'); + $this->attributes[$attributeName] = array_values(array_unique($this->attributes[$attributeName])); + return $messages; + } + + /** + * Returns a list of modifications which have to be made to the LDAP account. + * + * @return array list of modifications + *
This function returns an array with 3 entries: + *
array( DN1 ('add' => array($attr), 'remove' => array($attr), 'modify' => array($attr)), DN2 .... ) + *
DN is the DN to change. It may be possible to change several DNs (e.g. create a new user and add him to some groups via attribute memberUid) + *
"add" are attributes which have to be added to LDAP entry + *
"remove" are attributes which have to be removed from LDAP entry + *
"modify" are attributes which have to been modified in LDAP entry + *
"info" are values with informational value (e.g. to be used later by pre/postModify actions) + */ + public function save_attributes() { + $objectClass = $this->getObjectClassName(); + if (!empty($objectClass) && !in_array($objectClass, $this->attributes['objectClass']) && !in_array($objectClass, $this->orig['objectClass'])) { + // skip saving if the extension was not added/modified + return array(); + } + return parent::save_attributes(); + } + + /** + * {@inheritDoc} + * @see baseModule::build_uploadAccounts() + */ + public function build_uploadAccounts($rawAccounts, $ids, &$partialAccounts, $selectedModules, &$type) { + $objectClass = $this->getObjectClassName(); + $attributeName = $this->getAttributeName(); + $messages = array(); + for ($i = 0; $i < sizeof($rawAccounts); $i++) { + // add object class + if (!empty($objectClass) && !in_array($objectClass, $partialAccounts[$i]['objectClass'])) { + $partialAccounts[$i]['objectClass'][] = $objectClass; + } + // add keys + $message = $this->messages['yubiKeyId'][1]; + $this->mapSimpleUploadField($rawAccounts, $ids, $partialAccounts, $i, 'yubiKeyUser_yubiKeyId', $attributeName, 'ascii', $message, $messages, '/,[ ]*/'); + } + return $messages; + } + + /** + * {@inheritDoc} + * @see baseModule::get_pdfEntries() + */ + public function get_pdfEntries($pdfKeys, $typeId) { + $return = array(); + $attributeName = $this->getAttributeName(); + if (!empty($this->attributes[$attributeName])) { + $pdfTable = new PDFTable(_('YubiKey ids')); + for ($i = 0; $i < sizeof($this->attributes[$attributeName]); $i++) { + $pdfRow = new PDFTableRow(); + $pdfRow->cells[] = new PDFTableCell($this->attributes[$attributeName][$i]); + $pdfTable->rows[] = $pdfRow; + } + $this->addPDFTable($return, 'yubiKeyId', $pdfTable); + } + return $return; + } + + /** + * Returns the meta HTML code for each input field. + * format: array( => array(), ...) + * It is not possible to display help links. + * + * @param array $fields list of active fields + * @param array $attributes attributes of LDAP account + * @param boolean $passwordChangeOnly indicates that the user is only allowed to change his password and no LDAP content is readable + * @param array $readOnlyFields list of read-only fields + * @return array list of meta HTML elements (field name => htmlResponsiveRow) + */ + public function getSelfServiceOptions($fields, $attributes, $passwordChangeOnly, $readOnlyFields) { + $return = array(); + if ($passwordChangeOnly) { + return $return; // no fields as long no LDAP content can be read + } + $attributes = array_change_key_case($attributes, CASE_LOWER); + $objectClass = strtolower($this->getObjectClassName()); + if (!in_array_ignore_case($objectClass, $attributes['objectclass'])) { + return $return; + } + if (in_array('yubiKeyId', $fields)) { + $attributeName = strtolower($this->getAttributeName()); + $keyIds = array(); + if (isset($attributes[$attributeName][0])) { + $keyIds = $attributes[$attributeName]; + } + $_SESSION[self::SESS_KEY_LIST] = $keyIds; + $keyTable = new htmlTable(); + // JavaScript functions + $keyTable->addElement($this->getSelfServiceKeysJSBlock(), true); + // input fields + $keyTable->addElement(new htmlDiv('yubiKeyIdDiv', $this->getSelfServiceKeys()), true); + $keyLabel = new htmlOutputText($this->getSelfServiceLabel('yubiKeyId', _('YubiKey ids'))); + $row = new htmlResponsiveRow(); + $row->addLabel($keyLabel); + $row->addField($keyTable); + $return['yubiKeyId'] = $row; + } + return $return; + } + + /** + * Returns the meta HTML code to display the key area. + * This also includes the file upload. + * + * @return htmlTable key content + */ + private function getSelfServiceKeys() { + $keys = $_SESSION[self::SESS_KEY_LIST]; + $content = new htmlResponsiveRow(); + if (sizeof($keys) > 0) { + for ($i = 0; $i < sizeof($keys); $i++) { + $group = new htmlGroup(); + $keyInput = new htmlInputField('yubiKeyId_' . $i, $keys[$i]); + $keyInput->setFieldMaxLength(16384); + $group->addElement($keyInput); + $delLink = new htmlLink('', '#', '../../graphics/del.png'); + $delLink->setTitle(_('Delete')); + $delLink->setOnClick('yubiKeyIdDeleteKey(' . $i . ', ' . sizeof($keys) . ');return false;'); + $group->addElement($delLink); + if ($i == (sizeof($keys) - 1)) { + $addLink = new htmlLink('', '#', '../../graphics/add.png'); + $addLink->setTitle(_('Add')); + $addLink->setOnClick('yubiKeyIdAddKey(' . sizeof($keys) . ');return false;'); + $group->addElement($addLink); + } + $content->add($group, 12, 12, 12, 'nowrap'); + } + } + else { + $addLink = new htmlLink('', '#', '../../graphics/add.png'); + $addLink->setTitle(_('Add')); + $addLink->setOnClick('yubiKeyIdAddKey(' . sizeof($keys) . ');return false;'); + $content->add($addLink, 12); + } + return $content; + } + + /** + * Returns the Java Script functions to manage the keys. + * + * @return htmlJavaScript JS block + */ + private static function getSelfServiceKeysJSBlock() { + $content = ' + function yubiKeyIdDeleteKey(id, count) { + var actionJSON = { + "action": "deleteKey", + "id": id + }; + for (c = 0; c < count; c++) { + actionJSON["yubiKeyId_" + c] = jQuery(\'#yubiKeyId_\' + c).val(); + } + var data = {jsonInput: actionJSON}; + data["' . getSecurityTokenName() . '"] = "' . getSecurityTokenValue() . '"; + jQuery.post(\'../misc/ajax.php?selfservice=1&module=yubiKeyUser&scope=user\', + data, function(data) {yubiKeyIdDeleteKeyHandleReply(data);}, \'json\'); + } + + function yubiKeyIdDeleteKeyHandleReply(data) { + if (data.errorsOccured == "false") { + jQuery(\'#yubiKeyIdDiv\').html(data.html); + } + else { + alert(data.errormessage); + } + } + + function yubiKeyIdAddKey(count) { + var actionJSON = { + "action": "addKey" + }; + for (c = 0; c < count; c++) { + actionJSON["yubiKeyId_" + c] = jQuery(\'#yubiKeyId_\' + c).val(); + } + var data = {jsonInput: actionJSON}; + data["' . getSecurityTokenName() . '"] = "' . getSecurityTokenValue() . '"; + jQuery.post(\'../misc/ajax.php?selfservice=1&module=yubiKeyUser&scope=user' + . '&' . getSecurityTokenName() . '=' . getSecurityTokenValue() + . '\', data, function(data) {yubiKeyIdAddKeyHandleReply(data);}, \'json\'); + } + + function yubiKeyIdAddKeyHandleReply(data) { + if (data.errorsOccured == "false") { + jQuery(\'#yubiKeyIdDiv\').html(data.html); + } + else { + alert(data.errormessage); + } + } + + '; + return new htmlJavaScript($content); + } + + /** + * Checks if all input values are correct and returns the LDAP attributes which should be changed. + *
Return values: + *
messages: array of parameters to create status messages + *
add: array of attributes to add + *
del: array of attributes to remove + *
mod: array of attributes to modify + *
info: array of values with informational value (e.g. to be used later by pre/postModify actions) + * + * Calling this method does not require the existence of an enclosing {@link accountContainer}. + * + * @param string $fields input fields + * @param array $attributes LDAP attributes + * @param boolean $passwordChangeOnly indicates that the user is only allowed to change his password and no LDAP content is readable + * @param array $readOnlyFields list of read-only fields + * @return array messages and attributes (array('messages' => array(), 'add' => array('mail' => array('test@test.com')), 'del' => array(), 'mod' => array(), 'info' => array())) + */ + public function checkSelfServiceOptions($fields, $attributes, $passwordChangeOnly, $readOnlyFields) { + $return = array('messages' => array(), 'add' => array(), 'del' => array(), 'mod' => array(), 'info' => array()); + if ($passwordChangeOnly) { + return $return; // skip processing if only a password change is done + } + $attributes = array_change_key_case($attributes, CASE_LOWER); + $objectClass = strtolower($this->getObjectClassName()); + if (!in_array_ignore_case($objectClass, $attributes['objectclass'])) { + return $return; + } + if (in_array('yubiKeyId', $fields)) { + $attributeName = strtolower($this->getAttributeName()); + $newKeys = array(); + $counter = 0; + while (isset($_POST['yubiKeyId_' . $counter])) { + $newKeys[] = $_POST['yubiKeyId_' . $counter]; + $counter++; + } + $count = sizeof($newKeys); + for ($i = 0; $i < $count; $i++) { + if (trim($newKeys[$i]) == '') { + unset($newKeys[$i]); + } + elseif (!get_preg($newKeys[$i], 'ascii')) { + $return['messages'][] = array('ERROR', _('Please enter a valid key id.'), htmlspecialchars($newKeys[$i])); + } + } + $newKeys = array_values(array_unique($newKeys)); + $oldKeys = array(); + if (isset($attributes[$attributeName][0])) { + $oldKeys = $attributes[$attributeName]; + } + $update = false; + if (sizeof($newKeys) != sizeof($oldKeys)) { + $update = true; + } + else { + for ($i = 0; $i < sizeof($newKeys); $i++) { + if (!in_array($newKeys[$i], $oldKeys)) { + $update = true; + break; + } + } + } + if ($update) { + if (sizeof($oldKeys) == 0) { + $return['add'][$attributeName] = $newKeys; + } + elseif (sizeof($newKeys) == 0) { + $return['del'][$attributeName] = $newKeys; + } + else { + $return['mod'][$attributeName] = $newKeys; + } + } + } + return $return; + } + + /** + * Manages AJAX requests. + * This function may be called with or without an account container. + */ + public function handleAjaxRequest() { + $jsonInput = $_POST['jsonInput']; + $jsonReturn = self::invalidAjaxRequest(); + if (isset($jsonInput['action'])) { + if ($jsonInput['action'] == 'deleteKey') { + $jsonReturn = $this->ajaxDeleteSelfServiceKey($jsonInput); + } + elseif ($jsonInput['action'] == 'addKey') { + $_SESSION[self::SESS_KEY_LIST][] = ''; + ob_start(); + $contentElement = $this->getSelfServiceKeys(); + ob_end_clean(); + ob_start(); + $tabindex = 999; + parseHtml(null, $contentElement, array(), true, $tabindex, $this->get_scope()); + $content = ob_get_contents(); + ob_end_clean(); + $jsonReturn = array( + 'errorsOccured' => 'false', + 'html' => $content, + ); + } + } + echo json_encode($jsonReturn); + } + + /** + * Manages the deletion of a key. + * + * @param array $data JSON data + */ + private function ajaxDeleteSelfServiceKey($data) { + if (!isset($data['id'])) { + return self::invalidAjaxRequest(); + } + $index = $data['id']; + if (array_key_exists($index, $_SESSION[self::SESS_KEY_LIST])) { + unset($_SESSION[self::SESS_KEY_LIST][$index]); + $_SESSION[self::SESS_KEY_LIST] = array_values($_SESSION[self::SESS_KEY_LIST]); + } + ob_start(); + $contentElement = $this->getSelfServiceKeys(); + ob_end_clean(); + ob_start(); + $tabindex = 999; + parseHtml(null, $contentElement, array(), true, $tabindex, $this->get_scope()); + $content = ob_get_contents(); + ob_end_clean(); + return array( + 'errorsOccured' => 'false', + 'html' => $content, + ); + } + + /** + * Invalid AJAX request received. + * + * @param String $message error message + */ + public static function invalidAjaxRequest($message = null) { + if ($message == null) { + $message = _('Invalid request'); + } + return array('errorsOccured' => 'true', 'errormessage' => $message); + } + + /** + * Returns the object class used for YubiKey. + * + * @return string object class + */ + private function getObjectClassName() { + if (!empty($this->moduleSettings['yubiKeyUser_objectClass'][0])) { + return $this->moduleSettings['yubiKeyUser_objectClass'][0]; + } + elseif (!empty($this->selfServiceSettings->moduleSettings['yubiKeyUser_objectClass'][0])) { + return $this->selfServiceSettings->moduleSettings['yubiKeyUser_objectClass'][0]; + } + return null; + } + + /** + * Returns the attribute name used for YubiKey. + * + * @return string attribute name + */ + private function getAttributeName() { + if (!empty($this->moduleSettings['yubiKeyUser_attributeName'][0])) { + return $this->moduleSettings['yubiKeyUser_attributeName'][0]; + } + elseif (!empty($this->selfServiceSettings->moduleSettings['yubiKeyUser_attributeName'][0])) { + return $this->selfServiceSettings->moduleSettings['yubiKeyUser_attributeName'][0]; + } + return null; + } + + /** + * {@inheritDoc} + * @see baseModule::get_configOptions() + */ + public function get_configOptions($scopes, $allScopes) { + $configContainer = new htmlResponsiveRow(); + $configContainer->add(new htmlResponsiveInputField(_('Object class'), 'yubiKeyUser_objectClass', null, 'objectClass'), 12); + $configContainer->add(new htmlResponsiveInputField(_('Attribute name'), 'yubiKeyUser_attributeName', 'yubiKeyId', 'attributeName', true), 12); + return $configContainer; + } + + /** + * {@inheritDoc} + * @see baseModule::getSelfServiceSettings() + */ + public function getSelfServiceSettings($profile) { + $container = new htmlResponsiveRow(); + $container->add(new htmlResponsiveInputField(_('Object class'), 'yubiKeyUser_objectClass', null, array('objectClass', 'yubiKeyUser')), 12); + $container->add(new htmlResponsiveInputField(_('Attribute name'), 'yubiKeyUser_attributeName', 'yubiKeyId', array('attributeName', 'yubiKeyUser')), 12); + return $container; + } + +} + + +?>