browser = $browser; } /** * @param Request $request * * @return View_Response * * @throws Account_Exception * @throws API_Authorization_Exception * @throws API_Exception * @throws User_Not_Found_Exception */ public function show_trusted_devices( Request $request ) { $trusted_devices_storage = $this->storage->get_trusted_devices_storage(); $user_storage = $this->storage->get_user_storage(); $user_id = $user_storage->get_user_id(); $trusted_devices = $trusted_devices_storage->get_trusted_devices( $user_id ); $data = array(); $data['trusted_devices'] = $this->prepare( $trusted_devices ); $status_data = $this->get_user_status_data(); $data = array_merge( $data, $status_data ); $user = $this->api_wrapper->get_integration_user_by_external_id( $user_id ); $client = $this->api_wrapper->get_client(); $data['offline_codes_count'] = $user->getBackupCodesCount(); $data['has_client_card'] = $client->hasCard(); $data['is_current_device_trusted'] = $trusted_devices_storage->is_device_trusted( $user_id ); $data['active_tab'] = 'trusted_devices'; return $this->render( Views::TRUSTED_DEVICES, $data ); } /** * @param Request $request * * @return Redirection_Response * * @throws User_Not_Found_Exception */ public function add_trusted_device( Request $request ) { $trusted_devices_storage = $this->storage->get_trusted_devices_storage(); $user_storage = $this->storage->get_user_storage(); $user_id = $user_storage->get_user_id(); if ( ! $trusted_devices_storage->is_device_trusted( $user_id ) ) { $trusted_devices_storage->add_trusted_device( $user_id ); $this->flash->add_message( 'success', 'trusted-device-added' ); } else { $this->flash->add_message( 'error', 'trusted-device-already-added' ); } return $this->redirect( Route::SUBMENU_CHANNEL, Route::ACTION_DISPLAY_TRUSTED_DEVICES ); } /** * @param Request $request * * @return Redirection_Response * * @throws User_Not_Found_Exception */ public function remove_trusted_device( Request $request ) { $device_id = $request->post( 'device_id' ); $user_storage = $this->storage->get_user_storage(); $trusted_devices_storage = $this->storage->get_trusted_devices_storage(); $trusted_devices_storage->remove_trusted_device( $user_storage->get_user_id(), $device_id ); $this->flash->add_message( 'success', 'trusted-device-removed' ); return $this->redirect( Route::SUBMENU_CHANNEL, Route::ACTION_DISPLAY_TRUSTED_DEVICES ); } /** * @param array $trusted_devices * * @return array */ private function prepare( array $trusted_devices ) { $list = array(); foreach ( $trusted_devices as $device_data ) { $this->browser->setUserAgent( $device_data['user_agent'] ); $device_id = $device_data['device_id']; $ip = $device_data['ip']; $browser = $this->browser->describe(); $added_on = $device_data['created_at']; $last_logged_in = ! empty( $device_data['last_logged_in'] ) ? $device_data['last_logged_in'] : 'No information'; $list[ $device_id ] = array( 'ip' => $ip, 'browser' => $browser, 'last_logged_in' => $last_logged_in, 'added_on' => $added_on, ); } return $list; } }