#1 mORMot 2 » application/xml in OpenApi » 2025-11-25 09:48:59

MKi
Replies: 1

Hello,
as I saw in the topic https://synopse.info/forum/viewtopic.php?id=7026
multipart/form-data is not supported yet.

I've looked in the source and noticed, that only application/json is supported - is it right?

Now, my problem: I am writing client service for this OpenApi specification: https://ksef-test.mf.gov.pl/docs/v2/openapi.json
There is (only one!) endpoint that needs requestBody as application/xml:

    "/api/v2/auth/xades-signature": {
      "post": {
        "tags": [
          "Uzyskiwanie dostępu"
        ],
        "summary": "Uwierzytelnienie z wykorzystaniem podpisu XAdES",
        "description": "Rozpoczyna operację uwierzytelniania za pomocą dokumentu XML podpisanego podpisem elektronicznym XAdES.\n\n> Więcej informacji:\n> - [Przygotowanie dokumentu XML](https://github.com/CIRFMF/ksef-docs/blob/main/uwierzytelnianie.md#1-przygotowanie-dokumentu-xml-authtokenrequest)\n> - [Podpis dokumentu XML](https://github.com/CIRFMF/ksef-docs/blob/main/uwierzytelnianie.md#2-podpisanie-dokumentu-xades)\n> - [Schemat XSD](/docs/v2/schemas/authv2.xsd)",
        "parameters": [
          {
            "name": "verifyCertificateChain",
            "in": "query",
            "description": "Wymuszenie weryfikacji zaufania łańcucha certyfikatu wraz ze sprawdzeniem statusu certyfikatu (OCSP/CRL) na środowiskach które umożliwiają wykorzystanie samodzielnie wygenerowanych certyfikatów.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "type": "string"
              },
              "example": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<AuthTokenRequest xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://ksef.mf.gov.pl/auth/token/2.0\">\n    <Challenge>20250625-CR-20F5EE4000-DA48AE4124-46</Challenge>\n    <ContextIdentifier>\n  <Nip>5265877635</Nip>\n    </ContextIdentifier>\n    <SubjectIdentifierType>certificateSubject</SubjectIdentifierType>\n    <ds:Signature xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" Id=\"Signature-9707709\">\n  <!-- Tu powinien być podpis XAdES -->\n    </ds:Signature>\n</AuthTokenRequest>"
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationInitResponse"
                },
                "example": {
                  "referenceNumber": "20250514-AU-2DFC46C000-3AC6D5877F-D4",
                  "authenticationToken": {
                    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbi10eXBlIjoiT3BlcmF0aW9uVG9rZW4iLCJvcGVyYXRpb24tcmVmZXJlbmNlLW51bWJlciI6IjIwMjUwNTE0LUFVLTJERkM0NkMwMDAtM0FDNkQ1ODc3Ri1ENCIsImV4cCI6MTc0NzIzMTcxOSwiaWF0IjoxNzQ3MjI5MDE5LCJpc3MiOiJrc2VmLWFwaS10aSIsImF1ZCI6ImtzZWYtYXBpLXRpIn0.rtRcV2mR9SiuJwpQaQHsbAXvvVsdNKG4DJsdiJctIeU",
                    "validUntil": "2025-07-11T12:23:56.0154302+00:00"
                  }
                }
              }
            }
          },
          "400": {
            "description": " | ExceptionCode      | ExceptionDescription            | Details                 | \n|---------------------|---------------------------------------------------------------------|-------------------------------------------------------------|\n| 21001         | Nieczytelna treść.              |                   |\n| 21111         | Nieprawidłowe wyzwanie autoryzacyjne.             |                   |\n| 21115         | Nieprawidłowy certyfikat.             |                   |\n| 21117         | Nieprawidłowy identyfikator podmiotu dla wskazanego typu kontekstu. |                   |\n| 21217         | Nieprawidłowe kodowanie znaków.             |                   |\n| 21401         | Dokument nie jest zgodny ze schemą (xsd).         | {treść błędu walidacji}             |\n| 21406         | Konflikt podpisu i typu uwierzytelnienia.         |                   |\n| 9101    | Nieprawidłowy dokument.               |                   |\n| 9102    | Brak podpisu.                   |                   |\n| 9103    | Przekroczona liczba dozwolonych podpisów.         |                   |\n| 9105    | Nieprawidłowy podpis.                 |                   |\n| 21405 | Błąd walidacji danych wejściowych. | {treść błędu z walidatora} |",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionResponse"
                }
              }
            },
            "x-summary": "Bad Request"
          }
        }
      }
    },

Is there simple workaround of this problem?
I was thinking of manually changing function body in client.pas file from

function TKsefClient.PostApiV2AuthXadesSignature(
  VerifyCertificateChain: boolean): TAuthenticationInitResponse;
begin
  fClient.Request('POST', '/api/v2/auth/xades-signature', [], [
    'verifyCertificateChain', VerifyCertificateChain], [],
    result, TypeInfo(TAuthenticationInitResponse), OnError1);
end;

to something like this

function TKsefClient.PostApiV2AuthXadesSignature(
  const Payload: RawUtf8; VerifyCertificateChain: boolean): TAuthenticationInitResponse;
begin
  fClient.Request(
    'POST',
    '/api/v2/auth/xades-signature',
    [],
    ['verifyCertificateChain', VerifyCertificateChain],
    [],
    Payload,
    result,
    TypeInfo(RawUtf8),
    TypeInfo(TAuthenticationInitResponse),
    OnError1);
end;

Is it enough, or it is not so simple?

Board footer

Powered by FluxBB