diff --git a/plugins/passwordResetPlugin/loginResetDispatcher.php b/plugins/passwordResetPlugin/loginResetDispatcher.php new file mode 100644 index 0000000..d53f8fe --- /dev/null +++ b/plugins/passwordResetPlugin/loginResetDispatcher.php @@ -0,0 +1,418 @@ +. + * + * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, + * California 94120-7775, or email info@knowledgetree.com. + * + * The interactive user interfaces in modified source and object code versions + * of this program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU General Public License version 3. + * + * In accordance with Section 7(b) of the GNU General Public License version 3, + * these Appropriate Legal Notices must retain the display of the "Powered by + * KnowledgeTree" logo and retain the original copyright notice. If the display of the + * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices + * must display the words "Powered by KnowledgeTree" and retain the original + * copyright notice. + * Contributor( s): ______________________________________ + */ + +// main library routines and defaults +require_once('../../config/dmsDefaults.php'); +require_once(KT_LIB_DIR . '/templating/templating.inc.php'); +require_once(KT_LIB_DIR . '/session/control.inc'); +require_once(KT_LIB_DIR . '/session/Session.inc'); +require_once(KT_LIB_DIR . '/users/User.inc'); +require_once(KT_LIB_DIR . '/authentication/authenticationutil.inc.php'); +require_once(KT_LIB_DIR . '/help/help.inc.php'); +require_once(KT_LIB_DIR . '/help/helpreplacement.inc.php'); +require_once(KT_LIB_DIR . '/widgets/fieldWidgets.php'); + +require_once('loginUtil.inc.php'); + +class loginResetDispatcher extends KTDispatcher { + + function do_main() { + global $default; + $oPage = $GLOBALS['main']; + + // Check if the user is trying to reset their password. + $reset_password = $this->checkReset(); + + KTUtil::save_base_kt_url(); + + if (is_a($oUser, 'User')) { + $res = $this->performLogin($oUser); + if ($res) { + $oUser = array($res); + } + } + if (is_array($oUser) && count($oUser)) { + if (empty($_REQUEST['errorMessage'])) { + $_REQUEST['errorMessage'] = array(); + } else { + $_REQUEST['errorMessage'] = array($_REQUEST['errorMessage']); + } + foreach ($oUser as $oError) { + $_REQUEST['errorMessage'][] = $oError->getMessage(); + } + $_REQUEST['errorMessage'] = join('.
', $_REQUEST['errorMessage']); + } + + if(!loginUtil::check()) { // bounce here, potentially. + // User is already logged in - get the redirect + $redirect = KTUtil::arrayGet($_REQUEST, 'redirect'); + + $cookietest = KTUtil::randomString(); + setcookie("CookieTestCookie", $cookietest, 0); + + $this->redirectTo('checkCookie', array( + 'cookieVerify' => $cookietest, + 'redirect' => $redirect, + )); + exit(0); + } + + header('Content-type: text/html; charset=UTF-8'); + + $errorMessage = KTUtil::arrayGet($_REQUEST, 'errorMessage'); + session_start(); + + $errorMessageConfirm = $_SESSION['errormessage']['login']; + + $redirect = KTUtil::arrayGet($_REQUEST, 'redirect'); + + // Get the list of languages + $oReg =& KTi18nregistry::getSingleton(); + $aRegisteredLangs = $oReg->geti18nLanguages('knowledgeTree'); + $aLanguageNames = $oReg->getLanguages('knowledgeTree'); + $aRegisteredLanguageNames = array(); + + if(!empty($aRegisteredLangs)) + { + foreach (array_keys($aRegisteredLangs) as $sLang) { + $aRegisteredLanguageNames[$sLang] = $aLanguageNames[$sLang]; + } + + asort($aRegisteredLanguageNames); + } + $sLanguageSelect = $default->defaultLanguage; + + // extra disclaimer, if plugin is enabled + $oRegistry =& KTPluginRegistry::getSingleton(); + $oPlugin =& $oRegistry->getPlugin('ktstandard.disclaimers.plugin'); + if (!PEAR::isError($oPlugin) && !is_null($oPlugin)) { + $sDisclaimer = $oPlugin->getLoginDisclaimer(); + } + + $js = array(); + $css = array(); + $js[] = '/thirdpartyjs/extjs/adapter/ext/ext-base.js'; + $js[] = '/thirdpartyjs/extjs/ext-all.js'; + $css[] = '/thirdpartyjs/extjs/resources/css/ext-all.css'; + + // Include additional js and css files + $oPlugin =& $oRegistry->getPlugin('password.reset.plugin'); + $js[] = $oPlugin->getURLPath('resources/passwordReset.js'); + $css[] = $oPlugin->getURLPath('resources/passwordReset.css'); + + $sUrl = KTUtil::addQueryStringSelf('action='); + + $oTemplating =& KTTemplating::getSingleton(); + $oTemplate = $oTemplating->loadTemplate('login_reset'); + $aTemplateData = array( + 'errorMessage' => $errorMessage, + 'errorMessageConfirm' => $errorMessageConfirm, + 'redirect' => $redirect, + 'systemVersion' => $default->systemVersion, + 'versionName' => $default->versionName, + 'languages' => $aRegisteredLanguageNames, + 'selected_language' => $sLanguageSelect, + 'disclaimer' => $sDisclaimer, + 'js' => $js, + 'css' => $css, + 'sUrl' => $sUrl, + 'smallVersion' => substr($default->versionName,-17), + 'reset_password' => $reset_password + ); + return $oTemplate->render($aTemplateData); + } + + function simpleRedirectToMain($errorMessage, $url, $params) { + $params[] = 'errorMessage='. urlencode($errorMessage); + $url .= '?' . join('&', $params); + redirect($url); + exit(0); + } + + function do_login() { + $aExtra = array(); + + if(!loginUtil::check()) { // bounce here, potentially. + // User is already logged in - get the redirect + $redirect = KTUtil::arrayGet($_REQUEST, 'redirect'); + + $cookietest = KTUtil::randomString(); + setcookie("CookieTestCookie", $cookietest, 0); + + $this->redirectTo('checkCookie', array( + 'cookieVerify' => $cookietest, + 'redirect' => $redirect, + )); + exit(0); + } + + global $default; + + $language = KTUtil::arrayGet($_REQUEST, 'language'); + if (empty($language)) { + $language = $default->defaultLanguage; + } + setcookie("kt_language", $language, 2147483647, '/'); + + $redirect = KTUtil::arrayGet($_REQUEST, 'redirect'); + + $url = $_SERVER["PHP_SELF"]; + $queryParams = array(); + + if ($redirect !== null) { + $queryParams[] = 'redirect=' . urlencode($redirect); + } + + $username = KTUtil::arrayGet($_REQUEST,'username'); + $password = KTUtil::arrayGet($_REQUEST,'password'); + + if (empty($username)) { + $this->simpleRedirectToMain(_kt('Please enter your username.'), $url, $queryParams); + } + + $oUser =& User::getByUsername($username); + if (PEAR::isError($oUser) || ($oUser === false)) { + if (is_a($oUser, 'ktentitynoobjects')) { + loginUtil::handleUserDoesNotExist($username, $password, $aExtra); + } + $this->simpleRedirectToMain(_kt('Login failed. Please check your username and password, and try again.'), $url, $queryParams); + exit(0); + } + + if (empty($password)) { + $this->simpleRedirectToMain(_kt('Please enter your password.'), $url, $queryParams); + } + + $authenticated = KTAuthenticationUtil::checkPassword($oUser, $password); + + if (PEAR::isError($authenticated)) { + $this->simpleRedirectToMain(_kt('Authentication failure. Please try again.'), $url, $queryParams); + exit(0); + } + + if ($authenticated !== true) { + $this->simpleRedirectToMain(_kt('Login failed. Please check your username and password, and try again.'), $url, $queryParams); + exit(0); + } + + $res = loginUtil::performLogin($oUser); + + if ($res) { + $this->simpleRedirectToMain($res->getMessage(), $url, $queryParams); + exit(0); + } + } + + function do_autoSignup() { + $oSource =& $this->oValidator->validateAuthenticationSource($_REQUEST['source_id']); + $oProvider =& KTAuthenticationUtil::getAuthenticationProviderForSource($oSource); + $oDispatcher = $oProvider->getSignupDispatcher($oSource); + $oDispatcher->subDispatch($this); + exit(0); + } + + function do_checkCookie() { + $cookieTest = KTUtil::arrayGet($_COOKIE, "CookieTestCookie", null); + $cookieVerify = KTUtil::arrayGet($_REQUEST, 'cookieVerify', null); + + $url = $_SERVER["PHP_SELF"]; + $queryParams = array(); + $redirect = KTUtil::arrayGet($_REQUEST, 'redirect'); + + if ($redirect !== null) { + $queryParams[] = 'redirect='. urlencode($redirect); + } + + if ($cookieTest !== $cookieVerify) { + Session::destroy(); + $this->simpleRedirectToMain(_kt('You must have cookies enabled to use the document management system.'), $url, $queryParams); + exit(0); + } + + // check for a location to forward to + if ($redirect !== null) { + $url = $redirect; + // else redirect to the dashboard if there is none + } else { + $url = KTUtil::kt_url(); + + $config = KTConfig::getSingleton(); + $redirectToBrowse = $config->get('KnowledgeTree/redirectToBrowse', false); + $redirectToDashboardList = $config->get('KnowledgeTree/redirectToBrowseExceptions', ''); + + if ($redirectToBrowse) + { + $exceptionsList = explode(',', str_replace(' ','',$redirectToDashboardList)); + $user = User::get($_SESSION['userID']); + $username = $user->getUserName(); + $url .= (in_array($username, $exceptionsList))?'/dashboard.php':'/browse.php'; + } + else + { + $url .= '/dashboard.php'; + } + } + exit(redirect($url)); + } + + function checkReset() { + $resetKey = (isset($_REQUEST['pword_reset'])) ? $_REQUEST['pword_reset'] : ''; + if(!empty($resetKey)){ + // Get the user id from the key + $aKey = explode('_', $resetKey); + $id = isset($aKey[1]) ? $aKey[1] : ''; + + // Match the key to the one stored in the database and check the expiry date + $storedKey = KTUtil::getSystemSetting('password_reset_key-'.$id); + $expiry = KTUtil::getSystemSetting('password_reset_expire-'.$id); + + if($expiry < time()){ + $_REQUEST['errorMessage'] = _kt('The password reset key has expired, please send a new request.'); + }else if($storedKey != $resetKey){ + $_REQUEST['errorMessage'] = _kt('Unauthorised access denied.'); + }else{ + return true; + } + } + return false; + } + + function do_sendResetRequest(){ + $email = $_REQUEST['email']; + $user = $_REQUEST['username']; + + // Check that the user and email match up in the database + $sQuery = 'SELECT id FROM users WHERE username = ? AND email = ?'; + $aParams = array($user, $email); + $id = DBUtil::getOneResultKey(array($sQuery, $aParams), 'id'); + + if(!is_numeric($id) || $id < 1) { + return _kt('Please check that you have entered a valid username and email address.'); + } + + // Generate a random key that expires after 24 hours + $expiryDate = time()+86400; + $randomKey = rand(20000, 100000)."_{$id}_".KTUtil::getSystemIdentifier(); + KTUtil::setSystemSetting('password_reset_expire-'.$id, $expiryDate); + KTUtil::setSystemSetting('password_reset_key-'.$id, $randomKey); + + // Create the link to reset the password + $query = 'pword_reset='.$randomKey; + $url = KTUtil::addQueryStringSelf($query); +// $url = KTUtil::kt_url() . '/login.php?' . $query; + + $subject = APP_NAME . ': ' . _kt('password reset request'); + + $body = '

'; + $body .= _kt('You have requested to reset the password for your account. To confirm that the request was submitted by you + click on the link below, you will then be able to reset your password.'); + $body .= "

". _kt('Confirm password reset').'

'; + + $oEmail = new Email(); + $res = $oEmail->send($email, $subject, $body); + + if($res === true){ + return _kt('A verification email has been sent to your email address.'); + } + + return _kt('An error occurred while sending the email, please try again or contact the System Administrator.'); + } + + function do_resetPassword(){ + $email = $_REQUEST['email']; + $user = $_REQUEST['username']; + $password = $_REQUEST['password']; + $confirm = $_REQUEST['confirm']; + + if(!($password == $confirm)){ + return _kt('The passwords do not match, please re-enter them.'); + } + $password = md5($password); + + // Get user from db + $sQuery = 'SELECT id FROM users WHERE username = ? AND email = ?'; + $aParams = array($user, $email); + $id = DBUtil::getOneResultKey(array($sQuery, $aParams), 'id'); + + if(!is_numeric($id) || $id < 1) { //PEAR::isError($res) || is_null($res)){ + return _kt('Please check that you have entered a valid username and email address.'); + } + + // Check expiry + $expiry = KTUtil::getSystemSetting('password_reset_expire-'.$id); + if($expiry < time()){ + return _kt('The password reset key has expired, please send a new request.'); + } + + // Update password + $res = DBUtil::autoUpdate('users', array('password' => $password), $id); + + if(PEAR::isError($res) || is_null($res)){ + return _kt('Your password could not be reset, please try again.'); + } + + // Unset expiry date and key + KTUtil::setSystemSetting('password_reset_expire-'.$id, ''); + KTUtil::setSystemSetting('password_reset_key-'.$id, ''); + + // Email confirmation + $url = KTUtil::addQueryStringSelf(''); + + $subject = APP_NAME . ': ' . _kt('password successfully reset'); + + $body = '

'; + $body .= _kt('Your password has been successfully reset, click the link below to login.'); + $body .= "

". _kt('Login').'

'; + + $oEmail = new Email(); + $res = $oEmail->send($email, $subject, $body); + + if($res === true){ + return _kt('Your password has been successfully reset.'); + } + + return _kt('An error occurred while sending the email, please try again or contact the System Administrator.'); + } +} + +$dispatcher = new loginResetDispatcher(); +$dispatcher->dispatch(); + +?> diff --git a/plugins/passwordResetPlugin/loginUtil.inc.php b/plugins/passwordResetPlugin/loginUtil.inc.php new file mode 100644 index 0000000..6a304a9 --- /dev/null +++ b/plugins/passwordResetPlugin/loginUtil.inc.php @@ -0,0 +1,146 @@ +. + * + * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, + * California 94120-7775, or email info@knowledgetree.com. + * + * The interactive user interfaces in modified source and object code versions + * of this program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU General Public License version 3. + * + * In accordance with Section 7(b) of the GNU General Public License version 3, + * these Appropriate Legal Notices must retain the display of the "Powered by + * KnowledgeTree" logo and retain the original copyright notice. If the display of the + * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices + * must display the words "Powered by KnowledgeTree" and retain the original + * copyright notice. + * Contributor( s): ______________________________________ + */ + +require_once(KT_LIB_DIR . '/session/Session.inc'); + +class loginUtil +{ + /** + * Check if the user is already logged in or if anonymous login is enabled + * + * @return boolean false if the user is logged in + */ + function check() { + $session = new Session(); + $sessionStatus = $session->verify(); + + if ($sessionStatus === true) { // the session is valid + if ($_SESSION['userID'] == -2 && $default->allowAnonymousLogin) { + // Anonymous user - we want to login + return true; + } else { + return false; + } + } + return true; + } + + /** + * Verify the user session + * + */ + function do_providerVerify() { + $this->session = new Session(); + $sessionStatus = $this->session->verify(); + if ($sessionStatus !== true) { // the session is not valid + $this->redirectToMain(); + } + $this->oUser =& User::get($_SESSION['userID']); + $oProvider =& KTAuthenticationUtil::getAuthenticationProviderForUser($this->oUser); + $oProvider->subDispatch($this); + exit(0); + } + + /** + * Log the user into the system + * + * @param unknown_type $oUser + * @return unknown + */ + function performLogin(&$oUser) { + if (!is_a($oUser, 'User')) { + } + + $session = new Session(); + $sessionID = $session->create($oUser); + if (PEAR::isError($sessionID)) { + return $sessionID; + } + + $redirect = KTUtil::arrayGet($_REQUEST, 'redirect'); + + // DEPRECATED initialise page-level authorisation array + $_SESSION["pageAccess"] = NULL; + + $cookietest = KTUtil::randomString(); + setcookie("CookieTestCookie", $cookietest, 0); + + $this->redirectTo('checkCookie', array( + 'cookieVerify' => $cookietest, + 'redirect' => $redirect, + )); + exit(0); + } + + function handleUserDoesNotExist($username, $password, $aExtra = null) { + if (empty($aExtra)) { + $aExtra = array(); + } + + // Check if the user has been deleted before allowing auto-signup + $delUser = User::checkDeletedUser($username); + + if($delUser){ + return ; + } + + $oKTConfig = KTConfig::getSingleton(); + $allow = $oKTConfig->get('session/allowAutoSignup', true); + + if($allow){ + $res = KTAuthenticationUtil::autoSignup($username, $password, $aExtra); + if (empty($res)) { + return $res; + } + if (is_a($res, 'User')) { + $this->performLogin($res); + } + if (is_a($res, 'KTAuthenticationSource')) { + $_SESSION['autosignup'] = $aExtra; + $this->redirectTo('autoSignup', array( + 'source_id' => $res->getId(), + 'username' => $username, + )); + exit(0); + } + } + } +} +?> \ No newline at end of file diff --git a/plugins/passwordResetPlugin/passwordResetPlugin.php b/plugins/passwordResetPlugin/passwordResetPlugin.php new file mode 100644 index 0000000..1ee9cab --- /dev/null +++ b/plugins/passwordResetPlugin/passwordResetPlugin.php @@ -0,0 +1,96 @@ +. + * + * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, + * California 94120-7775, or email info@knowledgetree.com. + * + * The interactive user interfaces in modified source and object code versions + * of this program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU General Public License version 3. + * + * In accordance with Section 7(b) of the GNU General Public License version 3, + * these Appropriate Legal Notices must retain the display of the "Powered by + * KnowledgeTree" logo and retain the original copyright notice. If the display of the + * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices + * must display the words "Powered by KnowledgeTree" and retain the original + * copyright notice. + * Contributor( s): ______________________________________ + */ + +require_once(KT_LIB_DIR . '/plugins/plugin.inc.php'); +require_once(KT_LIB_DIR . '/plugins/pluginregistry.inc.php'); +require_once(KT_LIB_DIR . '/templating/templating.inc.php'); +require_once(KT_LIB_DIR . '/authentication/interceptor.inc.php'); +require_once(KT_LIB_DIR . '/authentication/interceptorinstances.inc.php'); + +class PasswordResetInterceptor extends KTInterceptor { + var $sNamespace = 'password.reset.login.interceptor'; + + function authenticated() { + } + + function takeover() { + $oRegistry =& KTPluginRegistry::getSingleton(); + $oPlugin =& $oRegistry->getPlugin('password.reset.plugin'); + $dispatcherURL = $oPlugin->getURLPath('loginResetDispatcher.php'); + $redirect = KTUtil::arrayGet($_REQUEST, 'redirect'); + + $url = KTUtil::kt_url() . $dispatcherURL; + $url .= (!empty($redirect)) ? '?redirect='.$redirect : ''; + redirect($url); + exit(0); + } +} + +class PasswordResetPlugin extends KTPlugin { + var $sNamespace = 'password.reset.plugin'; + var $autoRegister = false; + + function PasswordResetPlugin($sFilename = null) { + $res = parent::KTPlugin($sFilename); + $this->sFriendlyName = _kt('Password Reset Plugin'); + return $res; + } + + function setup() { + // Register the interceptor + $this->registerInterceptor('PasswordResetInterceptor', 'password.reset.login.interceptor', __FILE__); + + // Interceptor has to be added to the DB to be found + $aOptions = array( + 'sName' => 'Password Reset Interceptor', + 'sInterceptorNamespace' => 'password.reset.login.interceptor', + 'sConfig' => '' + ); + KTInterceptorInstance::createFromArray($aOptions); + + // Add templates directory to list + $dir = dirname(__FILE__); + $oTemplating =& KTTemplating::getSingleton(); + $oTemplating->addLocation('passwordResetPlugin', $dir . '/templates'); + } +} +$oPluginRegistry =& KTPluginRegistry::getSingleton(); +$oPluginRegistry->registerPlugin('PasswordResetPlugin', 'password.reset.plugin', __FILE__); +?> \ No newline at end of file diff --git a/plugins/passwordResetPlugin/resources/passwordReset.css b/plugins/passwordResetPlugin/resources/passwordReset.css new file mode 100644 index 0000000..435c375 --- /dev/null +++ b/plugins/passwordResetPlugin/resources/passwordReset.css @@ -0,0 +1,21 @@ +#forgot_box { + display: none; + visibility: hidden; +} + +#reset_box { + display: none; + visibility: hidden; +} + +.smaller{ + padding-top: 5px; + font-family: sans-serif; + font-size: 9px; +} + +#messages { + display: none; + visibility: hidden; + padding: 5px; +} \ No newline at end of file diff --git a/plugins/passwordResetPlugin/resources/passwordReset.js b/plugins/passwordResetPlugin/resources/passwordReset.js new file mode 100644 index 0000000..f2ec9de --- /dev/null +++ b/plugins/passwordResetPlugin/resources/passwordReset.js @@ -0,0 +1,145 @@ +/* Hide the password request box and display the login form */ +var hideBox = function(){ + var box = document.getElementById('forgot_box'); + var formbox = document.getElementById('login_form'); + + formbox.style.display = 'block'; + formbox.style.visibility = 'visible'; + box.style.display = 'none'; + box.style.visibility = 'hidden'; + + document.getElementById('username').focus(); +} + +/* Hide the login form and display the password request box */ +var showBox = function(){ + var box = document.getElementById('forgot_box'); + var formbox = document.getElementById('login_form'); + + box.style.display = 'block'; + box.style.visibility = 'visible'; + formbox.style.display = 'none'; + formbox.style.visibility = 'hidden'; + + document.getElementById('reset_username').focus(); +} + +/* Hide the login form and display the reset password box */ +var showResetBox = function(){ + var box = document.getElementById('reset_box'); + var formbox = document.getElementById('login_form'); + + box.style.display = 'block'; + box.style.visibility = 'visible'; + formbox.style.display = 'none'; + formbox.style.visibility = 'hidden'; + + document.getElementById('new_username').focus(); +} + +/* Hide the reset password box and display the login form */ +var hideResetBox = function(){ + var box = document.getElementById('reset_box'); + var formbox = document.getElementById('login_form'); + + formbox.style.display = 'block'; + formbox.style.visibility = 'visible'; + box.style.display = 'none'; + box.style.visibility = 'hidden'; + + document.getElementById('username').focus(); +} + +/* Display the error / success messages in the correct format */ +var showMessages = function() { + var box = document.getElementById('messages'); + + box.style.display = 'block'; + box.style.visibility = 'visible'; +} + +/* Check the entered details and use ajax to send the email confirming the users request +on success display the response from the server */ +var sendEmailRequest = function(sUrl) { + // Check the username and password has been supplied + var user = document.getElementById('reset_username'); + var email = document.getElementById('reset_email'); + + if(!user.value){ + alert('Please enter a username.'); + user.focus(); + return false; + } + if(!email.value){ + alert('Please enter a valid email address.'); + email.focus(); + return false; + } + + Ext.Ajax.request({ + url: sUrl, + success: function(response) { + //hideBox(); + showMessages(); + document.getElementById('messages').innerHTML = response.responseText; + }, + failure: function(response) { + showMessages(); + document.getElementById('messages').innerHTML = 'A server error occurred, please refresh and try again.'; + }, + params: { + username: user.value, + email: email.value + } + }); +} + +/* Check the entered details and use ajax to reset the users password +on success display the response from the server */ +var resetPassword = function(sUrl) { + // Check the fields have been filled in + var name = document.getElementById('new_username'); + var email = document.getElementById('new_email'); + var password = document.getElementById('new_password'); + var confirm = document.getElementById('new_password_repeat'); + + if(!name.value){ + alert('Please enter your username.'); + name.focus(); + return false; + } + if(!email.value){ + alert('Please enter a valid email address.'); + email.focus(); + return false; + } + if(!password.value){ + alert('Please enter new password.'); + password.focus(); + return false; + } + if(password.value != confirm.value){ + alert('Your passwords do not match, please reenter them.'); + confirm.focus(); + return false; + } + + Ext.Ajax.request({ + url: sUrl, + success: function(response) { + hideResetBox(); + showMessages(); + document.getElementById('messages').innerHTML = response.responseText; + }, + failure: function(response) { + showMessages(); + document.getElementById('messages').innerHTML = 'A server error occurred, please refresh and try again.'; + }, + params: { + username: name.value, + email: email.value, + password: password.value, + confirm: confirm.value + } + }); +} \ No newline at end of file diff --git a/plugins/passwordResetPlugin/templates/login_reset.smarty b/plugins/passwordResetPlugin/templates/login_reset.smarty new file mode 100644 index 0000000..7b937e0 --- /dev/null +++ b/plugins/passwordResetPlugin/templates/login_reset.smarty @@ -0,0 +1,150 @@ + + + + {i18n arg_appname="$appname"}Login | #appname#{/i18n} + + {foreach from=$css item=item} + + {/foreach} + + + + + + + + + + + {foreach from=$js item=item} + + {/foreach} + + +
+
+
+
+ + + + {if $config->get('ui/mainLogo') != ''} + {$config->get(
+ {else} + {$appname}
+ {/if} + {if $smallVersion == 'Community Edition'} +

{i18n}Community Edition{/i18n}

+ {/if} +
+
+ {if ($errorMessage == null)} +

{i18n}Please enter your details below to login.{/i18n}

+ {else} +
+ {if ($errorMessage == $errorMessageConfirm)} + {$errorMessage} + {else} + {$errorMessage|sanitize} + {/if} +
+ {/if} + + + + + + + + + +
+
+
+ +
+
+

{i18n}Enter your username and email address. A link will be mailed to you in order to verify your email address.{/i18n}

+ + + +
+ + +
+
+ + +
+
+
+
+
+
+ +
+
+

{i18n}Please enter your username and email address.{/i18n}

+ + +
+ + +
+ + +
+ + +
+ +
+ + +
+
+
+ + {if ($disclaimer)} +
+

{$disclaimer}

+
+ {/if} +

+
+ {* Added for live *} + {i18n}Access to this service is subject to the KnowledgeTreeLive Terms and Conditions of use.{/i18n}
+ {i18n}© 2008 KnowledgeTree Inc. All Rights Reserved{/i18n} + + {* Removed for live + {i18n arg_appname="$appname"}#appname# Version{/i18n} {$versionName}
+ {i18n}Document Management Software{/i18n}
+ {i18n}© 2008 KnowledgeTree Inc.{/i18n}

+ {if ($smallVersion == 'Community Edition')} + {i18n}This program is free software and published under the GNU General Public License version 3{/i18n}
+ {else} + {i18n}All rights reserved.{/i18n}
+ {/if} + *} +

+
+
+
+
+
+ + {if $reset_password} + + {else} + + {/if} + +