legacy_mode_checker = $legacy_mode_checker; } /** * @param Request $request * * @return View_Response * * @throws NotFoundException * @throws Account_Exception */ public function show_dashboard_page( Request $request ) { $options_storage = $this->storage->get_options(); $user_storage = $this->storage->get_user_storage(); $client = $this->api_wrapper->get_client(); $data = array(); if ( $client->hasCard() ) { $card = $this->api_wrapper->get_primary_card( $client ); $data['credit_card'] = 'XXXX-XXXX-XXXX-' . $card->getLastFour(); $data['has_client_card'] = true; } else { $data['has_client_card'] = false; if ( $options_storage->is_plan_premium() ) { $options_storage->set_basic_plan(); $this->flash->add_message_now( 'error', 'plan-downgraded-automatically' ); } } $data['twofas_email'] = $options_storage->get_twofas_email(); $data['is_plugin_enabled'] = $options_storage->is_plugin_enabled(); $data['statistics'] = $this->get_statistics( $user_storage ); $token = $this->storage->get_oauth()->retrieveToken( 'wordpress' ); $data['token'] = $token->getAccessToken(); $data['show_wizard_modal'] = $this->display_wizard_modal( $request ); $data['is_plan_premium'] = $options_storage->is_plan_premium(); $data['number_of_users_with_enabled_sms_backup'] = $user_storage->get_number_of_users_with_enabled_sms_backup(); return $this->render( Views::ADMIN_MENU, $data ); } /** * @param Request $request * * @return Redirection_Response */ public function disable_plugin( Request $request ) { $this->storage->get_options()->disable_plugin(); $this->flash->add_message( 'success', 'plugin-disabled' ); return $this->redirect( Route::SUBMENU_DASHBOARD ); } /** * @param Request $request * * @return Redirection_Response */ public function enable_plugin( Request $request ) { $this->storage->get_options()->enable_plugin(); $this->flash->add_message( 'success', 'plugin-enabled' ); return $this->redirect( Route::SUBMENU_DASHBOARD ); } /** * @param Request $request * * @return Redirection_Response */ public function downgrade_to_basic( Request $request ) { $options = $this->storage->get_options(); $user_storage = $this->storage->get_user_storage(); $this->legacy_mode_checker->disable_legacy_2fa(); $user_storage->disable_sms_backup_globally(); $options->set_basic_plan(); $this->flash->add_message( 'success', 'plan-updated' ); return $this->redirect( Route::SUBMENU_DASHBOARD ); } /** * @param Request $request * * @return Redirection_Response */ public function upgrade_to_premium( Request $request ) { try { $options = $this->storage->get_options(); $client = $this->api_wrapper->get_client(); if ( $client->hasCard() ) { $this->enable_channels(); $options->set_premium_plan(); $this->flash->add_message( 'success', 'plan-updated' ); } else { $this->flash->add_message( 'error', 'credit-card-required' ); } } catch ( TokenNotFoundException $e ) { $this->flash->add_message( 'error', 'integration-error' ); } catch ( Account_Exception $e ) { $this->flash->add_message( 'error', 'client-error' ); } return $this->redirect( Route::SUBMENU_DASHBOARD ); } /** * @param User_Storage $user_storage * * @return array */ private function get_statistics( User_Storage $user_storage ) { $wp_user_count = $user_storage->get_user_count(); $active_user_count = $user_storage->get_active_user_count(); $inactive_user_count = $wp_user_count - $active_user_count; return array( 'active_users_count' => $active_user_count, 'inactive_users_count' => $inactive_user_count, ); } /** * @param Request $request * * @return bool */ private function display_wizard_modal( Request $request ) { return $request->header( 'HTTP_REFERER' ) === $this->get_create_account_url(); } /** * @return string */ private function get_create_account_url() { $page = Route::SUBMENU_DASHBOARD; $action = Route::ACTION_CREATE_ACCOUNT; $path = "admin.php?page={$page}&twofas-action={$action}"; return admin_url( $path ); } /** * @throws TokenNotFoundException * @throws Account_Exception */ private function enable_channels() { $oauth = $this->storage->get_oauth(); $integration = $this->api_wrapper->get_integration( $oauth->get_integration_id() ); if ( $integration->getChannel( Methods::TOTP ) && $integration->getChannel( Methods::SMS ) && $integration->getChannel( Methods::CALL ) ) { return; } $integration->enableChannel( Methods::TOTP ); $integration->enableChannel( Methods::SMS ); $integration->enableChannel( Methods::CALL ); $this->api_wrapper->update_integration( $integration ); } }