is_post() ) { return $this->render_account_view( Views::CREATE_ACCOUNT ); } $email = $request->get_twofas_param( 'email' ); $password = $request->get_twofas_param( 'password' ); $password_confirmation = $request->get_twofas_param( 'password-confirmation' ); try { $this->api_wrapper->create_account( $email, $password, $password_confirmation ); return $this->redirect( Route::SUBMENU_DASHBOARD ); } catch ( ValidationException $e ) { $this->flash->add_message_now( 'error', $this->get_validation_error( $e ) ); return $this->render( Views::CREATE_ACCOUNT, array( 'email' => $email ) ); } } /** * @param Request $request * * @return View_Response|Redirection_Response * * @throws Account_Exception */ public function login( Request $request ) { if ( ! $request->is_post() ) { return $this->render_account_view( Views::LOGIN_FORM ); } $email = $request->get_twofas_param( 'email' ); $password = $request->get_twofas_param( 'password' ); $template_name = Views::LOGIN_FORM; $template_data = array( 'email' => $email ); try { $this->api_wrapper->login( $email, $password ); $this->flash->add_message( 'success', 'logged-in' ); return $this->redirect( Route::SUBMENU_DASHBOARD ); } catch ( ValidationException $e ) { $this->flash->add_message_now( 'error', $this->get_validation_error( $e ) ); } catch ( AuthorizationException $e ) { $this->flash->add_message_now( 'error', 'invalid-credentials' ); } return $this->render( $template_name, $template_data ); } /** * @param Request $request * * @return Redirection_Response */ public function logout( Request $request ) { $this->storage->get_options()->delete_wp_options_except( 'twofas_plugin_version' ); $this->storage->get_user_storage()->delete_wp_user_meta(); $request->cookie()->delete_wp_cookies(); $this->flash->add_message( 'success', 'logged-out' ); return $this->redirect( Route::SUBMENU_DASHBOARD, Route::ACTION_CREATE_ACCOUNT ); } /** * @param Request $request * * @return View_Response|Redirection_Response * * @throws PasswordResetAttemptsRemainingIsReachedException * @throws Account_Exception */ public function reset_password( Request $request ) { if ( ! $request->is_post() ) { return $this->render_account_view( Views::RESET_PASSWORD ); } $email = $request->get_twofas_param( 'email' ); try { $this->api_wrapper->reset_password( $email ); $this->flash->add_message( 'success', 'email-sent' ); return $this->redirect( Route::SUBMENU_DASHBOARD, Route::ACTION_LOGIN ); } catch ( NotFoundException $e ) { $this->flash->add_message( 'success', 'email-sent' ); return $this->redirect( Route::SUBMENU_DASHBOARD, Route::ACTION_LOGIN ); } catch ( ValidationException $e ) { $this->flash->add_message_now( 'error', $this->get_validation_error( $e ) ); return $this->render( Views::RESET_PASSWORD, array( 'email' => $email ) ); } } /** * @param string $template_name * * @return View_Response */ private function render_account_view( $template_name ) { try { $email = $this->storage->get_user_storage()->get_email(); return $this->render( $template_name, array( 'email' => $email, ) ); } catch ( User_Not_Found_Exception $e ) { return $this->render( Views::ERROR, array( 'description' => $e->getMessage(), ) ); } } }