18 #include "sessionstorefile.h" 20 #include <Cutelyst/Context> 21 #include <Cutelyst/Application> 26 #include <QDataStream> 27 #include <QLoggingCategory> 28 #include <QCoreApplication> 32 Q_LOGGING_CATEGORY(C_SESSION_FILE,
"cutelyst.plugin.sessionfile", QtWarningMsg)
34 #define SESSION_STORE_FILE_SAVE QStringLiteral("_c_session_store_file_save") 35 #define SESSION_STORE_FILE_DATA QStringLiteral("_c_session_store_file_data") 37 static QVariantHash loadSessionData(
Context *c,
const QString &sid);
44 SessionStoreFile::~SessionStoreFile()
50 const QVariantHash data = loadSessionData(c, sid);
52 return data.value(key, defaultValue);
57 QVariantHash data = loadSessionData(c, sid);
59 data.insert(key, value);
60 c->
setStash(SESSION_STORE_FILE_DATA, data);
61 c->
setStash(SESSION_STORE_FILE_SAVE,
true);
68 QVariantHash data = loadSessionData(c, sid);
71 c->
setStash(SESSION_STORE_FILE_DATA, data);
72 c->
setStash(SESSION_STORE_FILE_SAVE,
true);
84 QVariantHash loadSessionData(
Context *c,
const QString &sid)
87 const QVariant sessionVariant = c->
stash(SESSION_STORE_FILE_DATA);
88 if (!sessionVariant.isNull()) {
89 data = sessionVariant.toHash();
93 const static QString root = QDir::tempPath()
95 + QCoreApplication::applicationName()
98 auto file =
new QFile(root +
QLatin1Char(
'/') + sid, c);
99 if (!file->open(QIODevice::ReadWrite)) {
100 if (!QDir().mkpath(root)) {
101 qCWarning(C_SESSION_FILE) <<
"Failed to create path for session object" << root;
105 if (!file->open(QIODevice::ReadWrite)) {
112 if (!c->stash(SESSION_STORE_FILE_SAVE).toBool()) {
116 const QVariantHash data = c->
stash(SESSION_STORE_FILE_DATA).toHash();
118 if (data.isEmpty()) {
119 QFile::remove(file->fileName());
123 QDataStream in(file);
131 if (file->pos() < file->size()) {
132 file->resize(file->pos());
144 QDataStream in(file);
149 c->setStash(SESSION_STORE_FILE_DATA, data);
154 #include "moc_sessionstorefile.cpp" Application * app() const
void setStash(const QString &key, const QVariant &value)
SessionStoreFile(QObject *parent=nullptr)
The Cutelyst namespace holds all public Cutelyst API.
virtual QVariant getSessionData(Context *c, const QString &sid, const QString &key, const QVariant &defaultValue) final
void afterDispatch(Cutelyst::Context *c)
virtual bool storeSessionData(Context *c, const QString &sid, const QString &key, const QVariant &value) final
virtual bool deleteExpiredSessions(Context *c, quint64 expires) final
virtual bool deleteSessionData(Context *c, const QString &sid, const QString &key) final
void stash(const QVariantHash &unite)