ImagingTools Core SDK
CJwtSessionControllerComp.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// ACF includes
6#include <ilog/TLoggerCompWrap.h>
7#include <ifile/IFileNameParam.h>
8#include <iprm/INameParam.h>
9
10// ImtCore includes
11#include <imtauth/IJwtSessionController.h>
12#include <imtbase/IObjectCollection.h>
13
14
15namespace imtauth
16{
17
18
19class CJwtSessionControllerComp:
20 public ilog::CLoggerComponentBase,
21 virtual public imtauth::IJwtSessionController
22{
23public:
24 typedef icomp::CComponentBase BaseClass;
25
26 I_BEGIN_COMPONENT(CJwtSessionControllerComp);
27 I_REGISTER_INTERFACE(imtauth::IJwtSessionController);
28 I_ASSIGN(m_sessionCollectionCompPtr, "SessionCollection", "Session collection", true, "SessionCollection");
29 I_ASSIGN(m_sessionFactoryCompPtr, "SessionFactory", "Session factory", true, "SessionFactory");
30 I_ASSIGN(m_secretKeyParamCompPtr, "SecretKeyParam", "Secret key param", true, "SecretKeyParam");
31 I_ASSIGN(m_refreshTokenLifetimeAttrPtr, "RefreshTokenLifetime", "Refresh token Lifetime (in secs)", false, 86400);
32 I_ASSIGN(m_jwtLifetimeAttrPtr, "JwtLifetime", "JWT Lifetime (in secs)", false, 3600);
33 I_END_COMPONENT;
34
35protected:
36 // reimplemented (imtauth::IJwtSessionController)
37 virtual bool ValidateSession(const QByteArray& sessionId) const override;
38 virtual JwtState ValidateJwt(const QByteArray& token) const override;
39 virtual bool RefreshToken(const QByteArray& refreshToken, UserSession& userSession) const override;
40 virtual bool CreateNewSession(const QByteArray& userId, UserSession& userSession) const override;
41 virtual ISessionSharedPtr GetSession(const QByteArray& sessionId) const override;
42 virtual bool RemoveSession(const QByteArray& sessionId) const override;
43 virtual QByteArray GetUserFromJwt(const QByteArray& jwt) const override;
44 virtual QByteArray GetSessionFromJwt(const QByteArray& jwt) const override;
45
46private:
47 QByteArray JsonObjectToBase64(const QJsonObject& object) const;
48 QJsonObject JsonObjectFromBase64(const QByteArray& data) const;
49 QByteArray InsertNewSession(const istd::IChangeable& object) const;
50 QByteArray CreateSignature(const QByteArray& headerBase64, const QByteArray& payloadBase64) const;
51 QByteArray GenerateJwt(const QByteArray& sessionId, const QByteArray& userId) const;
52 QByteArray GetSessionIdByRefreshToken(const QByteArray& refreshToken) const;
53
54private:
55 I_REF(imtbase::IObjectCollection, m_sessionCollectionCompPtr);
56 I_REF(iprm::INameParam, m_secretKeyParamCompPtr);
57 I_FACT(imtauth::ISession, m_sessionFactoryCompPtr);
58 I_ATTR(int, m_refreshTokenLifetimeAttrPtr);
59 I_ATTR(int, m_jwtLifetimeAttrPtr);
60};
61
62
63} // namespace imtauth