diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/group_users_query.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/group_users_query.rb index 19cf94f9bf39..fa8b9fef8b8f 100644 --- a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/group_users_query.rb +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/group_users_query.rb @@ -60,15 +60,12 @@ def http_options Util.ocs_api_request end - # rubocop:disable Metrics/AbcSize def handle_response(response) error_data = StorageErrorData.new(source: self.class, payload: response) case response in { status: 200..299 } - group_users = Nokogiri::XML(response.body.to_s).xpath("/ocs/data/users/element").map(&:text) - info "#{group_users.size} users found" - ServiceResult.success(result: group_users) + handle_success_response(response) in { status: 405 } Util.error(:not_allowed, "Outbound request method not allowed", error_data) in { status: 401 } @@ -82,7 +79,22 @@ def handle_response(response) end end - # rubocop:enable Metrics/AbcSize + def handle_success_response(response) + error_data = StorageErrorData.new(source: self.class, payload: response) + xml = Nokogiri::XML(response.body.to_s) + statuscode = xml.xpath("/ocs/meta/statuscode").text + + case statuscode + when "100" + group_users = xml.xpath("/ocs/data/users/element").map(&:text) + info "#{group_users.size} users found" + ServiceResult.success(result: group_users) + when "404" + Util.error(:group_does_not_exist, "Group does not exist", error_data) + else + Util.error(:error, "Unknown response body", error_data) + end + end end end end diff --git a/modules/storages/spec/common/storages/peripherals/registry_spec.rb b/modules/storages/spec/common/storages/peripherals/registry_spec.rb index 4130e22f4db7..3e2e5c6e24f9 100644 --- a/modules/storages/spec/common/storages/peripherals/registry_spec.rb +++ b/modules/storages/spec/common/storages/peripherals/registry_spec.rb @@ -56,56 +56,6 @@ end end - describe "#group_users_query" do - let(:expected_response_body) do - <<~XML - - - - ok - 100 - OK - - - - - - admin - OpenProject - reader - TestUser - TestUser34 - - - - XML - end - let(:expected_response) do - { - status: 200, - body: expected_response_body, - headers: {} - } - end - - before do - stub_request(:get, "https://example.com/ocs/v1.php/cloud/groups/#{storage.group}") - .with( - headers: { - "Authorization" => "Basic T3BlblByb2plY3Q6T3BlblByb2plY3RTZWN1cmVQYXNzd29yZA==", - "OCS-APIRequest" => "true" - } - ) - .to_return(expected_response) - end - - it "responds with a strings array with group users" do - result = registry.resolve("nextcloud.queries.group_users").call(storage:) - expect(result).to be_success - expect(result.result).to eq(%w[admin OpenProject reader TestUser TestUser34]) - end - end - describe "#delete_folder_command" do let(:auth_strategy) { Storages::Peripherals::StorageInteraction::AuthenticationStrategies::BasicAuth.strategy } diff --git a/modules/storages/spec/common/storages/peripherals/storage_interaction/nextcloud/group_users_query_spec.rb b/modules/storages/spec/common/storages/peripherals/storage_interaction/nextcloud/group_users_query_spec.rb new file mode 100644 index 000000000000..ab395e98327a --- /dev/null +++ b/modules/storages/spec/common/storages/peripherals/storage_interaction/nextcloud/group_users_query_spec.rb @@ -0,0 +1,102 @@ +# frozen_string_literal: true + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +require "spec_helper" +require_module_spec_helper + +RSpec.describe Storages::Peripherals::StorageInteraction::Nextcloud::GroupUsersQuery, :webmock do + include NextcloudGroupUserHelper + + let(:storage) { create(:nextcloud_storage_with_local_connection, :as_automatically_managed, username: "vcr") } + let(:auth_strategy) { Storages::Peripherals::Registry.resolve("nextcloud.authentication.userless").call } + + describe "basic command setup" do + it "is registered as queries.group_users" do + expect(Storages::Peripherals::Registry + .resolve("#{storage}.queries.group_users")).to eq(described_class) + end + + it "responds to #call with correct parameters" do + expect(described_class).to respond_to(:call) + + method = described_class.method(:call) + expect(method.parameters).to contain_exactly(%i[keyreq storage], + %i[keyreq auth_strategy], + %i[keyreq group]) + end + end + + context "if group exists", vcr: "nextcloud/group_users_success" do + let(:user1) { "m.jade@death.star" } + let(:user2) { "d.vader@death.star" } + let(:user3) { "l.organa@filthy.rebels" } + let(:group) { "Sith Assassins" } + + before do + create_group(auth, storage, group) + add_user_to_group(user1, group) + add_user_to_group(user2, group) + end + + after do + remove_group(auth, storage, group) + end + + it "returns a success" do + result = described_class.call(storage:, auth_strategy:, group:) + expect(result).to be_success + expect(result.result).to include(user1, user2) + expect(result.result).not_to include(user3) + end + end + + context "if group does not exist", vcr: "nextcloud/group_users_not_existing_group" do + let(:user) { "m.jade@death.star" } + let(:group) { "Sith Assassins" } + + it "returns a failure" do + result = described_class.call(storage:, auth_strategy:, group:) + expect(result).to be_failure + + error = result.errors + expect(error.code).to eq(:group_does_not_exist) + expect(error.data.source).to eq(described_class) + end + end + + private + + def auth = Storages::Peripherals::StorageInteraction::Authentication[auth_strategy] + + def add_user_to_group(user, group) + Storages::Peripherals::StorageInteraction::Nextcloud::AddUserToGroupCommand + .call(storage:, auth_strategy:, user:, group:) + end +end diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/group_users_not_existing_group.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/group_users_not_existing_group.yml new file mode 100644 index 000000000000..6321ce5581db --- /dev/null +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/group_users_not_existing_group.yml @@ -0,0 +1,89 @@ +--- +http_interactions: +- request: + method: get + uri: https://nextcloud.local/ocs/v1.php/cloud/groups/Sith%20Assassins + body: + encoding: US-ASCII + string: '' + headers: + Authorization: + - Basic + Ocs-Apirequest: + - 'true' + User-Agent: + - httpx.rb/1.3.1 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-cache, no-store, must-revalidate + Content-Encoding: + - gzip + Content-Security-Policy: + - default-src 'none';base-uri 'none';manifest-src 'self';frame-ancestors 'none' + Content-Type: + - application/xml; charset=utf-8 + Date: + - Wed, 02 Oct 2024 11:37:31 GMT + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Feature-Policy: + - autoplay 'none';camera 'none';fullscreen 'none';geolocation 'none';microphone + 'none';payment 'none' + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.59 (Debian) + Set-Cookie: + - oc07ul6b4oaw=da8fba064c5eb040e7f63faa8e827fa2; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=eykNjTStsb51pc7TuGFtDdmqp%2BHuyJesisxZszV96MQSQJygR3EX%2Fpprct4M1XdwwtAKdrZtc6iRDHIz9WruBbwpn6vYx6qfcz4sCBotcqW6TGlTOz2PJ%2Bx1oZIvso5H; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=da8fba064c5eb040e7f63faa8e827fa2; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, oc07ul6b4oaw=da8fba064c5eb040e7f63faa8e827fa2; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=da8fba064c5eb040e7f63faa8e827fa2; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=ccf722de75faf24fc171f76ac35e006d; + path=/; secure; HttpOnly; SameSite=Lax, cookie_test=test; expires=Wed, 02 + Oct 2024 12:37:31 GMT; Max-Age=3600 + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.21 + X-Request-Id: + - HtGPLtBQkP2zcNT1t7r8 + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + Content-Length: + - '168' + body: + encoding: UTF-8 + string: | + + + + failure + 404 + The requested group could not be found + + + + + + recorded_at: Wed, 02 Oct 2024 11:37:31 GMT +recorded_with: VCR 6.3.1 diff --git a/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/group_users_success.yml b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/group_users_success.yml new file mode 100644 index 000000000000..6d4a8c1cb4e1 --- /dev/null +++ b/modules/storages/spec/support/fixtures/vcr_cassettes/nextcloud/group_users_success.yml @@ -0,0 +1,450 @@ +--- +http_interactions: +- request: + method: post + uri: https://nextcloud.local/ocs/v1.php/cloud/groups + body: + encoding: ASCII-8BIT + string: groupid=Sith+Assassins + headers: + Authorization: + - Basic + Ocs-Apirequest: + - 'true' + User-Agent: + - httpx.rb/1.3.1 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '22' + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-cache, no-store, must-revalidate + Content-Encoding: + - gzip + Content-Security-Policy: + - default-src 'none';base-uri 'none';manifest-src 'self';frame-ancestors 'none' + Content-Type: + - application/xml; charset=utf-8 + Date: + - Wed, 02 Oct 2024 11:37:28 GMT + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Feature-Policy: + - autoplay 'none';camera 'none';fullscreen 'none';geolocation 'none';microphone + 'none';payment 'none' + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.59 (Debian) + Set-Cookie: + - oc07ul6b4oaw=d3d0d217d5bb83669107a7af1768d511; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=0IfRnDsfWIewXWOxAJNjKVf1kXPyBq5q4RUNFu492ivgcc7LOJf4wvI2IDtzzzj41u5FkvJm%2BtGhGWZ0kVs%2BLO5ZMKzdS2ElCLHZBVMnkvo9UlkXNPAKi9GXGvziT0HA; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=d3d0d217d5bb83669107a7af1768d511; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, oc07ul6b4oaw=d3d0d217d5bb83669107a7af1768d511; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=d3d0d217d5bb83669107a7af1768d511; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=b739dd17c3e98b74ceb2b819a48d86b8; + path=/; secure; HttpOnly; SameSite=Lax, cookie_test=test; expires=Wed, 02 + Oct 2024 12:37:28 GMT; Max-Age=3600 + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.21 + X-Request-Id: + - rQbpRUHcN5tTMCMJKt9b + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + Content-Length: + - '140' + body: + encoding: UTF-8 + string: | + + + + ok + 100 + OK + + + + + + recorded_at: Wed, 02 Oct 2024 11:37:28 GMT +- request: + method: post + uri: https://nextcloud.local/ocs/v1.php/cloud/users/m.jade@death.star/groups + body: + encoding: ASCII-8BIT + string: groupid=Sith+Assassins + headers: + Authorization: + - Basic + Ocs-Apirequest: + - 'true' + User-Agent: + - httpx.rb/1.3.1 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '22' + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-cache, no-store, must-revalidate + Content-Encoding: + - gzip + Content-Security-Policy: + - default-src 'none';base-uri 'none';manifest-src 'self';frame-ancestors 'none' + Content-Type: + - application/xml; charset=utf-8 + Date: + - Wed, 02 Oct 2024 11:37:28 GMT + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Feature-Policy: + - autoplay 'none';camera 'none';fullscreen 'none';geolocation 'none';microphone + 'none';payment 'none' + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.59 (Debian) + Set-Cookie: + - oc07ul6b4oaw=4d3e270b2f7851695595129476d704f3; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=YbQtouAmLRvUMd104HIjo9%2BXNZFhs9AaP6SRvFdmcaxXfyQ%2FRCEoCfD%2BweWDwvsB14dE7Vsge%2FVumkiCnPD9OXnMH3ysQJ2wYGVWh7VAXkSoTK6DeGaMyvPE%2BDQi3c2j; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=4d3e270b2f7851695595129476d704f3; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, oc07ul6b4oaw=4d3e270b2f7851695595129476d704f3; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=4d3e270b2f7851695595129476d704f3; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=e8611297116a71fffa4d4d5d5f4f70fd; + path=/; secure; HttpOnly; SameSite=Lax, cookie_test=test; expires=Wed, 02 + Oct 2024 12:37:29 GMT; Max-Age=3600 + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.21 + X-Request-Id: + - ptyREbL5R011FSpQjqqG + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + Content-Length: + - '140' + body: + encoding: UTF-8 + string: | + + + + ok + 100 + OK + + + + + + recorded_at: Wed, 02 Oct 2024 11:37:29 GMT +- request: + method: post + uri: https://nextcloud.local/ocs/v1.php/cloud/users/d.vader@death.star/groups + body: + encoding: ASCII-8BIT + string: groupid=Sith+Assassins + headers: + Authorization: + - Basic + Ocs-Apirequest: + - 'true' + User-Agent: + - httpx.rb/1.3.1 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '22' + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-cache, no-store, must-revalidate + Content-Encoding: + - gzip + Content-Security-Policy: + - default-src 'none';base-uri 'none';manifest-src 'self';frame-ancestors 'none' + Content-Type: + - application/xml; charset=utf-8 + Date: + - Wed, 02 Oct 2024 11:37:29 GMT + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Feature-Policy: + - autoplay 'none';camera 'none';fullscreen 'none';geolocation 'none';microphone + 'none';payment 'none' + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.59 (Debian) + Set-Cookie: + - oc07ul6b4oaw=4b7eb4676a39d127db1c931b9fe4752a; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=eimv6KWlmI9CuNVvyuxk57mkh8L7HrZe1Vkh2QwTg8Rli6x7%2Fnw6hPYmnAHouEyrPnktiKAgpqpWnDq8QsNKzeaPLzyIqDN88Q%2B80llJVYH5XSybe3aPon1L%2FuJZqv9f; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=4b7eb4676a39d127db1c931b9fe4752a; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, oc07ul6b4oaw=4b7eb4676a39d127db1c931b9fe4752a; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=4b7eb4676a39d127db1c931b9fe4752a; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=4571c00d1196e4a66a2f43d93f73252a; + path=/; secure; HttpOnly; SameSite=Lax, cookie_test=test; expires=Wed, 02 + Oct 2024 12:37:29 GMT; Max-Age=3600 + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.21 + X-Request-Id: + - wFSZMQeNwyjGaNVGyDUc + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + Content-Length: + - '140' + body: + encoding: UTF-8 + string: | + + + + ok + 100 + OK + + + + + + recorded_at: Wed, 02 Oct 2024 11:37:29 GMT +- request: + method: get + uri: https://nextcloud.local/ocs/v1.php/cloud/groups/Sith%20Assassins + body: + encoding: US-ASCII + string: '' + headers: + Authorization: + - Basic + Ocs-Apirequest: + - 'true' + User-Agent: + - httpx.rb/1.3.1 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-cache, no-store, must-revalidate + Content-Encoding: + - gzip + Content-Security-Policy: + - default-src 'none';base-uri 'none';manifest-src 'self';frame-ancestors 'none' + Content-Type: + - application/xml; charset=utf-8 + Date: + - Wed, 02 Oct 2024 11:37:29 GMT + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Feature-Policy: + - autoplay 'none';camera 'none';fullscreen 'none';geolocation 'none';microphone + 'none';payment 'none' + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.59 (Debian) + Set-Cookie: + - oc07ul6b4oaw=fcd02ba4e46f7404443e0c3935bfcac6; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=8v2pd3DRVea6gOjg9%2B0%2F1GJrT1jC2Xj6z3sWQP%2B7ZZFJbk5mhERPPkGKjEA6OLKXgEHPfGFgo9zFCWm8sIYZuPiQzafeTV7DkAyR0rAKwSofHa6U%2Bt8ekj2adKsNG3ur; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=fcd02ba4e46f7404443e0c3935bfcac6; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, oc07ul6b4oaw=fcd02ba4e46f7404443e0c3935bfcac6; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=fcd02ba4e46f7404443e0c3935bfcac6; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=ab506622b7a32efa9ff8cb303913c901; + path=/; secure; HttpOnly; SameSite=Lax, cookie_test=test; expires=Wed, 02 + Oct 2024 12:37:30 GMT; Max-Age=3600 + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.21 + X-Request-Id: + - Bv2HXv8aIk6xf5SlKMSJ + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + Content-Length: + - '181' + body: + encoding: UTF-8 + string: | + + + + ok + 100 + OK + + + + + + d.vader@death.star + m.jade@death.star + + + + recorded_at: Wed, 02 Oct 2024 11:37:30 GMT +- request: + method: delete + uri: https://nextcloud.local/ocs/v1.php/cloud/groups/Sith%20Assassins + body: + encoding: US-ASCII + string: '' + headers: + Authorization: + - Basic + Ocs-Apirequest: + - 'true' + User-Agent: + - httpx.rb/1.3.1 + Accept: + - "*/*" + Accept-Encoding: + - gzip, deflate + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - no-cache, no-store, must-revalidate + Content-Encoding: + - gzip + Content-Security-Policy: + - default-src 'none';base-uri 'none';manifest-src 'self';frame-ancestors 'none' + Content-Type: + - application/xml; charset=utf-8 + Date: + - Wed, 02 Oct 2024 11:37:30 GMT + Expires: + - Thu, 19 Nov 1981 08:52:00 GMT + Feature-Policy: + - autoplay 'none';camera 'none';fullscreen 'none';geolocation 'none';microphone + 'none';payment 'none' + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - Apache/2.4.59 (Debian) + Set-Cookie: + - oc07ul6b4oaw=2a746d27bc7a1d5f95b186384202ed93; path=/; secure; HttpOnly; SameSite=Lax, + oc_sessionPassphrase=k4xgvDa7ByqF2ywFCAmdxPHgmKwjUC1Iuy44lDbFPwpGCrL9Znyi3hDGqdxXSAGiH2PjyXh48wZdiJNKfAt084h5l4C2fASyQttqpvAwwepiZvBr3FdPVIADEO6%2FoPpI; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=2a746d27bc7a1d5f95b186384202ed93; + path=/; secure; HttpOnly; SameSite=Lax, __Host-nc_sameSiteCookielax=true; + path=/; httponly;secure; expires=Fri, 31-Dec-2100 23:59:59 GMT; SameSite=lax, + __Host-nc_sameSiteCookiestrict=true; path=/; httponly;secure; expires=Fri, + 31-Dec-2100 23:59:59 GMT; SameSite=strict, oc07ul6b4oaw=2a746d27bc7a1d5f95b186384202ed93; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=2a746d27bc7a1d5f95b186384202ed93; + path=/; secure; HttpOnly; SameSite=Lax, oc07ul6b4oaw=b447774bea742aa1bb34f38fac4b4814; + path=/; secure; HttpOnly; SameSite=Lax, cookie_test=test; expires=Wed, 02 + Oct 2024 12:37:30 GMT; Max-Age=3600 + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Powered-By: + - PHP/8.2.21 + X-Request-Id: + - ZkM9A9ZbefVCG7sM7fb7 + X-Robots-Tag: + - noindex, nofollow + X-Xss-Protection: + - 1; mode=block + Content-Length: + - '140' + body: + encoding: UTF-8 + string: | + + + + ok + 100 + OK + + + + + + recorded_at: Wed, 02 Oct 2024 11:37:30 GMT +recorded_with: VCR 6.3.1