options_storage = $options_storage; } public function update( Request $request ): JSON_Response { $roles = $request->post( 'remember_browser_allowed_roles' ); if ( ! is_array( $roles ) ) { $roles = []; } if ( ! $this->validate_roles( $roles ) ) { throw new Validation_Exception( __( 'Invalid role has been sent.', '2fas-light' ) ); } $this->options_storage->set_remember_browser_allowed_roles( $roles ); return $this->json( [] ); } /** * @param array $roles * * @return bool */ private function validate_roles( array $roles ): bool { if ( empty( $roles ) ) { return true; } $wp_roles = array_keys( (new WP_Roles())->role_names ); $diff = array_diff( $roles, $wp_roles ); return empty( $diff ); } }