/**
  * allows a user to signup for an account
  *
  */
 public function signupAction()
 {
     $realm = $this->_getParam('realm', null);
     if (is_null($realm)) {
         throw new Ot_Exception_Input('msg-error-realmNotFound');
     }
     // Set up the auth adapter
     $authAdapter = new Ot_Model_DbTable_AuthAdapter();
     $adapter = $authAdapter->find($realm);
     if (is_null($adapter)) {
         throw new Ot_Exception_Data($this->view->translate('ot-login-signup:realmNotFound', array('<b>' . $realm . '</b>')));
     }
     if ($adapter->enabled == 0) {
         throw new Ot_Exception_Access('msg-error-authNotSupported');
     }
     $className = (string) $adapter->class;
     $auth = new $className();
     if (!$auth->manageLocally()) {
         throw new Ot_Exception_Access('msg-error-authNotSupported');
     }
     if (!$auth->allowUserSignUp()) {
         throw new Ot_Exception_Access('msg-error-authNotAllowed');
     }
     $form = new Ot_Form_Signup();
     $form->removeElement('realm');
     if ($this->_request->isPost()) {
         if ($form->isValid($_POST)) {
             if ($form->getValue('password') == $form->getValue('passwordConf')) {
                 $accountData = array('username' => $form->getValue('username'), 'password' => md5($form->getValue('password')), 'realm' => $realm, 'role' => $this->_helper->configVar('newAccountRole'), 'emailAddress' => $form->getValue('emailAddress'), 'firstName' => $form->getValue('firstName'), 'lastName' => $form->getValue('lastName'), 'timezone' => $form->getValue('timezone'));
                 $account = new Ot_Model_DbTable_Account();
                 if ($account->accountExists($accountData['username'], $accountData['realm'])) {
                     $this->_helper->messenger->addError('msg-error-usernameTaken');
                 } else {
                     $dba = Zend_Db_Table::getDefaultAdapter();
                     $dba->beginTransaction();
                     try {
                         $accountData['accountId'] = $account->insert($accountData);
                         $aar = new Ot_Account_Attribute_Register();
                         $vars = $aar->getVars($accountData['accountId']);
                         $values = $form->getValues();
                         foreach ($vars as $varName => $var) {
                             if (isset($values['accountAttributes'][$varName])) {
                                 $var->setValue($values['accountAttributes'][$varName]);
                                 $aar->save($var, $accountData['accountId']);
                             }
                         }
                         $cahr = new Ot_CustomAttribute_HostRegister();
                         $thisHost = $cahr->getHost('Ot_Profile');
                         if (is_null($thisHost)) {
                             throw new Ot_Exception_Data('msg-error-objectNotSetup');
                         }
                         $customAttributes = $thisHost->getAttributes($accountData['accountId']);
                         foreach ($customAttributes as $attributeName => $a) {
                             if (array_key_exists($attributeName, $values['customAttributes'])) {
                                 $a['var']->setValue($values['customAttributes'][$attributeName]);
                                 $thisHost->saveAttribute($a['var'], $accountData['accountId'], $a['attributeId']);
                             }
                         }
                     } catch (Exception $e) {
                         $dba->rollback();
                         throw $e;
                     }
                     $dba->commit();
                     $loggerOptions = array('attributeName' => 'accountId', 'attributeId' => $accountData['accountId']);
                     $this->_helper->log(Zend_Log::INFO, 'User ' . $accountData['username'] . ' created an account.', $loggerOptions);
                     $dt = new Ot_Trigger_Dispatcher();
                     $dt->setVariables($accountData);
                     $dt->password = $form->getValue('password');
                     $dt->loginMethod = $realm;
                     $dt->dispatch('Login_Index_Signup');
                     $authAdapterModel = new Ot_Model_DbTable_AuthAdapter();
                     $adapter = $authAdapterModel->find($realm);
                     $className = (string) $adapter->class;
                     // Set up the authentication adapter
                     $authAdapter = new $className($accountData['username'], $form->getValue('password'));
                     $auth = Zend_Auth::getInstance();
                     $authRealm = new Zend_Session_Namespace('authRealm');
                     $authRealm->setExpirationHops(1);
                     $authRealm->realm = $realm;
                     $authRealm->autoLogin = $authAdapter->autoLogin();
                     // Attempt authentication, saving the result
                     $result = $auth->authenticate($authAdapter);
                     $authRealm->unsetAll();
                     $req = new Zend_Session_Namespace(Zend_Registry::get('siteUrl') . '_request');
                     $this->_helper->messenger->addSuccess('msg-info-accountCreated');
                     if ($result->isValid()) {
                         $account = new Ot_Model_DbTable_Account();
                         $thisAccount = $account->getByUsername($accountData['username'], $realm);
                         $auth->getStorage()->write($thisAccount);
                         if (isset($req->uri) && $req->uri != '') {
                             $uri = $req->uri;
                             $req->unsetAll();
                             $this->_helper->redirector->gotoUrl($uri);
                         } else {
                             $this->_helper->redirector->gotoRoute(array(), 'default', true);
                         }
                     } else {
                         $this->_helper->redirector->gotoRoute(array('realm' => $realm), 'login', true);
                     }
                 }
             } else {
                 $this->_helper->messenger->addError('msg-error-passwordsNotMatch');
             }
         } else {
             $this->_helper->messenger->addError('msg-error-invalidFormInfo');
         }
     }
     $this->_helper->pageTitle('ot-login-signup:title');
     $this->view->headScript()->appendFile($this->view->baseUrl() . '/scripts/ot/jquery.plugin.passStrength.js');
     $this->view->assign(array('realm' => $realm, 'form' => $form));
 }
 /**
  * allows a user to change their password
  *
  */
 public function changePasswordAction()
 {
     $identity = Zend_Auth::getInstance()->getIdentity();
     $account = new Ot_Model_DbTable_Account();
     $thisAccount = $account->getByUsername($identity->username, $identity->realm);
     if (is_null($thisAccount)) {
         throw new Ot_Exception_Data('msg-error-noAccount');
     }
     $otAuthAdapter = new Ot_Model_DbTable_AuthAdapter();
     $thisAdapter = $otAuthAdapter->find($thisAccount->realm);
     $auth = new $thisAdapter->class();
     if (!$auth->manageLocally()) {
         throw new Ot_Exception_Access('msg-error-authAdapterSupport');
     }
     $form = new Ot_Form_ChangePassword();
     if ($this->_request->isPost()) {
         if ($form->isValid($_POST)) {
             if ($form->getValue('newPassword') != $form->getValue('newPasswordConf')) {
                 $this->_helper->messenger->addError('msg-error-passwordMismatch');
             }
             if (md5($form->getValue('oldPassword')) != $thisAccount->password) {
                 $this->_helper->messenger->addError('msg-error-passwordInvalidOriginal');
             }
             if ($this->_helper->messenger->count('error') == 0) {
                 $data = array('accountId' => $thisAccount->accountId, 'password' => md5($form->getValue('newPassword')));
                 $account->update($data, null);
                 $this->_helper->messenger->addSuccess('msg-info-passwordChanged');
                 $loggerOptions = array('attributeName' => 'accountId', 'attributeId' => $thisAccount->accountId);
                 $this->_helper->log(Zend_Log::INFO, 'User changed Password', $loggerOptions);
                 $this->_helper->redirector->gotoRoute(array(), 'account', true);
             }
         } else {
             $this->_helper->messenger->addError('msg-error-invalidForm');
         }
     }
     $this->view->headScript()->appendFile($this->view->baseUrl() . '/public/scripts/ot/jquery.plugin.passStrength.js');
     $this->_helper->pageTitle('ot-account-changePassword:title');
     $this->view->assign(array('form' => $form));
 }
 /**
  * Allows for the editing of the meta data attached to an auth adapter
  *
  * @throws Ot_Exception_Input
  * @throws Ot_Exception_Data
  */
 public function editAction()
 {
     $key = $this->_getParam('key', null);
     if (is_null($key)) {
         throw new Ot_Exception_Data('ot-auth-toggle:keyNotSet');
     }
     $authAdapter = new Ot_Model_DbTable_AuthAdapter();
     $adapter = $authAdapter->find($key);
     if (is_null($adapter)) {
         throw new Ot_Exception_Data('ot-auth-toggle:noAdapter');
     }
     $form = new Ot_Form_AuthAdapter();
     $form->populate($adapter->toArray());
     if ($this->_request->isPost()) {
         if ($form->isValid($_POST)) {
             $data = array('adapterKey' => $adapter->adapterKey, 'name' => $form->getValue('name'), 'description' => $form->getValue('description'));
             $authAdapter->update($data, null);
             $this->_helper->redirector->gotoRoute(array('controller' => 'auth'), 'ot', true);
         } else {
             $this->_helper->messenger->addError('ot-auth-edit:problemSubmitting');
         }
     }
     $this->_helper->pageTitle('ot-auth-edit:title', $adapter->name);
     $this->view->assign(array('form' => $form));
 }
Exemple #4
0
 protected function _mergeAccountData(Zend_Db_Table_Row $data)
 {
     $data = (object) $data->toArray();
     $accountRolesModel = new Ot_Model_DbTable_AccountRoles();
     $rolesModel = new Ot_Model_DbTable_Role();
     $select = $this->getAdapter()->select()->from(array('a' => $accountRolesModel->info('name')))->join(array('r' => $rolesModel->info('name')), 'a.roleId = r.roleId')->where('accountId = ?', $data->accountId);
     $stmt = $select->query();
     $roles = $stmt->fetchAll();
     $roleList = array();
     foreach ($roles as $r) {
         $roleList[$r['name']] = $r['roleId'];
     }
     $data->role = $roleList;
     $aar = new Ot_Account_Attribute_Register();
     $vars = $aar->getVars($data->accountId);
     $data->accountAttributes = array();
     foreach ($vars as $varName => $var) {
         $data->accountAttributes[$varName] = $var;
     }
     $cahr = new Ot_CustomAttribute_HostRegister();
     $thisHost = $cahr->getHost('Ot_Profile');
     $attributes = $thisHost->getAttributes($data->accountId);
     $data->customAttributes = array();
     foreach ($attributes as $a) {
         $data->customAttributes[$a['var']->getName()] = $a['var'];
     }
     $authAdapter = new Ot_Model_DbTable_AuthAdapter();
     $adapter = $authAdapter->find($data->realm);
     $data->authAdapter = array('obj' => new $adapter->class(), 'enabled' => $adapter->enabled, 'name' => $adapter->name, 'description' => $adapter->description);
     return $data;
 }