ImagingTools Core SDK
CHttpGraphQLServletComp.h
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ImtCore-Commercial
2#pragma once
3
4
5// ImtCore includes
6#include <imtrest/IProtocolEngine.h>
7#include <imtrest/CHttpServletCompBase.h>
8#include <imtgql/IGqlRequestHandler.h>
9#include <imtgql/IGqlContextCreator.h>
10#include <imtgql/IGqlRequestProvider.h>
11#include <imtbase/IObjectCollection.h>
12#include <imtauth/IJwtSessionController.h>
13#include <imtauth/IPersonalAccessTokenManager.h>
14
15
16namespace imtservergql
17{
18
19
20class CHttpGraphQLServletComp: public imtrest::CHttpServletCompBase, virtual public imtgql::IGqlRequestProvider
21{
22public:
23 using BaseClass = imtrest::CHttpServletCompBase;
24 using StatusCode = imtrest::IProtocolEngine::StatusCode;
25
26 I_BEGIN_COMPONENT(CHttpGraphQLServletComp);
27 I_REGISTER_INTERFACE(imtgql::IGqlRequestProvider);
28 I_ASSIGN_MULTI_0(m_gqlRequestHandlerCompPtr, "GqlRequestHandler", "Handler for GraphQL-request", true);
29 I_ASSIGN(m_gqlContextCreatorCompPtr, "GqlContextCreator", "GraphQL-related context creator", false, "GqlContextCreator");
30 I_ASSIGN(m_jwtSessionControllerCompPtr, "JwtSessionController", "JWT session controller", false, "JwtSessionController");
31 I_ASSIGN(m_patManagerCompPtr, "PersonalAccessTokenManager", "Personal Access Token manager", false, "PersonalAccessTokenManager");
32 I_END_COMPONENT;
33
34protected:
35 // reimplemented (IRequestHandler)
36 virtual bool IsCommandSupported(const QByteArray& commandId) const override;
37
38 // reimplemented (imtrest::CHttpServletCompBase)
39 virtual imtrest::ConstResponsePtr OnPost(const QByteArray& commandId, const imtrest::IRequest::CommandParams& commandParams, const HeadersMap& headers, const imtrest::CHttpRequest& request) const override;
40
41 // reimplemented (imtgql::IGqlRequestProvider)
42 virtual const imtgql::IGqlRequest* GetGqlRequest() const override;
43
44private:
45 imtrest::ConstResponsePtr CreateResponse(
46 const StatusCode& statusCode,
47 const QByteArray& payload,
48 const imtrest::IRequest& request,
49 const QByteArray& contentTypeId = "text/plain; charset=utf-8") const;
50 imtrest::ConstResponsePtr GenerateError(
51 const StatusCode& errorCode,
52 const QString& errorString,
53 const imtrest::CHttpRequest& request) const;
54 QByteArray BuildGqlErrorJson(
55 const QByteArray& gqlCommand,
56 const QString& message,
57 const QString& type) const;
58
59private:
60 I_MULTIREF(imtgql::IGqlRequestHandler, m_gqlRequestHandlerCompPtr);
61 I_REF(imtgql::IGqlContextCreator, m_gqlContextCreatorCompPtr);
62 I_REF(imtauth::IJwtSessionController, m_jwtSessionControllerCompPtr);
63 I_REF(imtauth::IPersonalAccessTokenManager, m_patManagerCompPtr);
64
65private:
66 mutable imtgql::CGqlRequest m_lastRequest;
67};
68
69
70} // namespace imtservergql
71
72