/** * Filter executer */ public function execute($filterChain) { if ($this->isFirstCall()) { $context = $this->getContext(); // Checking user authorization if (!afStudioUser::getInstance()->authorize()) { $context->getController()->forward('afsAuthorize', 'index'); throw new sfStopException(); } } $filterChain->execute(); }
/** * Create new user * * @param sfWebRequest $request * @return array * @author Sergey Startsev */ public static function createNewUser(sfWebRequest $request) { $response = afResponseHelper::create(); afStudioUser::getInstance()->authorize(); $sUsername = $request->getParameter('username'); $aUser = json_decode($request->getParameter('user'), true); $user = afStudioUser::retrieve($sUsername); $aErrors = array(); if ($user) { $aErrors['username'] = '******'; } if (afStudioUser::retrieveByEmail($aUser['email'])) { $aErrors['email'] = "User with this `email` already exists"; } if (!afStudioUser::getInstance()->isAdmin()) { if ($aUser['captcha'] != sfContext::getInstance()->getUser()->getFlash(afsCaptcha::SESSION_IDENTIFICATOR)) { $aErrors['captcha'] = "Invalid verification code"; } } // Prepare data for validating and creating $aCreate = array(afStudioUser::USERNAME => $sUsername, afStudioUser::FIRST_NAME => $aUser['first_name'], afStudioUser::LAST_NAME => $aUser['last_name'], afStudioUser::EMAIL => $aUser['email'], afStudioUser::PASSWORD => $aUser['password'], afStudioUser::ROLE => afStudioUser::getInstance()->isAdmin() ? $aUser['role'] : 'user'); // Validating user data $validate = afStudioUser::validate($aCreate); if (is_bool($validate) && $validate === true && empty($aErrors)) { // unset username - no need to creating meta-field username unset($aCreate[afStudioUser::USERNAME]); // Create new user afStudioUser::create($sUsername, $aCreate); afsNotificationPeer::log('User has been successfully created', 'afStudioUser'); // getting current domain $domain = sfConfig::get('app_domain') ? sfConfig::get('app_domain') : sfContext::getInstance()->getRequest()->getHost(); $aParameters = array('user' => $aUser, 'password' => $aUser['password']); sfProjectConfiguration::getActive()->loadHelpers(array("Url", "Tag")); $message = Swift_Message::newInstance()->setFrom("no-reply@{$domain}", 'Studio')->setTo($aUser['email'])->setSubject('Studio Account')->setBody(sfContext::getInstance()->getController()->getAction('afsUserManager', 'create')->getPartial('afsUserManager/create', $aParameters))->setContentType('text/html'); try { @sfContext::getInstance()->getController()->getAction('afsUserManager', 'create')->getMailer()->send($message); } catch (Swift_TransportException $e) { $response->console("Local server can't sent email for now. Please check mail server settings."); } } else { if (is_array($validate)) { $aErrors = self::mergeErrors($aErrors, $validate); } } $aErrors = self::prepareErrors($aErrors); if (!empty($aErrors)) { return $response->success(false)->message($aErrors)->asArray(); } return $response->success(true)->message('User has been successfully created')->asArray(); }
/** * Log the notification messages in db * * @param string $message * @param string $messageType * @param $user: 0=Guest || 1-n=afGuardUser with id 1-n || instanceof afGuardUser class, 0 is default * @author radu */ public static function log($message, $messageType = 'notification', $user = 0) { if (afStudioUser::getInstance()->isAuthenticated()) { $user = afStudioUser::getInstance()->getUsername(); } else { // Seems like method called not from studio, or user not authenticated $user = '******'; } $afsNotification = new afsNotification(); $afsNotification->setMessage($message); $afsNotification->setMessageType($messageType); $afsNotification->setUser($user); $afsNotification->setIp(afsToolkit::getIP()); $afsNotification->save(); }
/** * Check is user exists * * todo remove if not used * * @param sfWebRequest $request * @return array * @author Milos Silni */ public function executeCheckUserExist(sfWebRequest $request) { afStudioUser::getInstance()->authorize(); $sUsername = $request->getParameter('username'); $aUser = json_decode($request->getParameter('user'), true); $user = afStudioUser::getInstance()->retrieve($sUsername); $aErrors = array(); if ($user) { return array('success' => false, 'message' => 'User with this `username` already exists', 'field' => 'username'); } if (afStudioUser::getInstance()->retrieveByEmail($aUser['email'])) { return array('success' => false, 'message' => 'User with this `email` already exists', 'field' => 'email'); } return array('success' => true, 'message' => 'User ok'); }
/** * Password request controller */ public function executePasswordRequest(sfWebRequest $request) { if ($request->getMethod() != sfRequest::POST) { // display the form return sfView::SUCCESS; } $email = $request->getParameter('email'); // Retrieve user via email $user = afStudioUser::getInstance()->retrieveByEmail($email); if ($user) { // set new random password $password = substr(md5(rand(100000, 999999)), 0, 6); // updating password afStudioUser::update($user['username'], array(afStudioUser::PASSWORD => afStudioUser::passwordRule($password))); // getting current domain $domain = ''; if (sfConfig::get('app_domain')) { $domain = sfConfig::get('app_domain'); } else { $domain = sfContext::getInstance()->getRequest()->getHost(); } // parameters for partial -> recovering mail $aParameters = array('user' => $user, 'password' => $password); sfProjectConfiguration::getActive()->loadHelpers(array("Url", "Tag")); $message = Swift_Message::newInstance()->setFrom("no-reply@{$domain}", 'Studio')->setTo($user['email'])->setSubject('Studio password recovery')->setBody($this->getPartial('recovery', $aParameters))->setContentType('text/html'); // Sending mail if ($this->getMailer()->send($message) > 0) { $result = array('success' => true, 'message' => 'Your login information was sent to ' . $email . '. <br>You should receive it shortly, so you can proceed to the ' . link_to('login page', 'afsAuthorize/index') . '.'); } else { $result = array('success' => false, 'message' => 'There is no user with this email address. Please try again!'); } } else { $result = array('success' => false, 'message' => 'There is no user with this email address. Please try again!'); } return $this->renderJson($result); }
/** * Pre-execute mehtod * * @return void * @author Sergey Startsev */ public function preExecute() { $this->realRoot = sfConfig::get('sf_root_dir'); $this->afExtjs = afExtjs::getInstance(); $this->afStudioUser = json_encode(afStudioUser::getInstance()->getInfo()); }