10#include <QLoggingCategory>
11#include <QTemporaryFile>
20StoreHtpasswd::~StoreHtpasswd()
26 const QString username = user.value(QStringLiteral(
"username"));
28 QTemporaryFile tmp(m_filename + QLatin1String(
"-XXXXXXX"));
29 tmp.setAutoRemove(
false);
31 qCWarning(CUTELYST_UTILS_AUTH) <<
"Failed to open temporary file for writing";
36 QFile file(m_filename);
37 if (file.exists() && file.open(QFile::ReadWrite | QFile::Text)) {
38 while (!file.atEnd()) {
39 QByteArray line = file.readLine();
40 QByteArrayList parts = line.split(
':');
41 if (!wrote && parts.size() >= 2 && parts.first() == username.toLatin1()) {
42 line = username.toLatin1() +
':' +
43 user.value(QStringLiteral(
"password")).toLatin1().replace(
':',
',') +
'\n';
52 QByteArray line = username.toLatin1() +
':' +
53 user.value(QStringLiteral(
"password")).toLatin1().replace(
':',
',') +
58 if (file.exists() && !file.remove()) {
59 qCWarning(CUTELYST_UTILS_AUTH) <<
"Failed to remove auth file for replacement";
63 if (!tmp.rename(m_filename)) {
64 qCWarning(CUTELYST_UTILS_AUTH) <<
"Failed to rename temporary file";
72 const QString username = userInfo.value(QStringLiteral(
"username"));
74 QFile file(m_filename);
75 if (file.open(QFile::ReadOnly | QFile::Text)) {
76 while (!file.atEnd()) {
77 QByteArray line = file.readLine();
78 QByteArrayList parts = line.trimmed().split(
':');
79 if (parts.size() >= 2 && !parts.first().startsWith(
'#') &&
80 parts.first() == username.toLatin1()) {
81 ret.insert(QStringLiteral(
"username"), username);
83 QByteArray password = parts.at(1);
84 ret.insert(QStringLiteral(
"password"),
85 QString::fromLatin1(password.replace(
',',
':')));
101 return findUser(c, {{QStringLiteral(
"username"), frozenUser.toString()}});
void setId(const QVariant &id)
Sets the unique user id restored from the store.
QVariant forSession(Context *c, const AuthenticationUser &user) override final
AuthenticationUser findUser(Context *c, const ParamsMultiMap &userInfo) override final
AuthenticationUser fromSession(Context *c, const QVariant &frozenUser) override final
void addUser(const ParamsMultiMap &user)
StoreHtpasswd(const QString &name)
The Cutelyst namespace holds all public Cutelyst API.
QMultiMap< QString, QString > ParamsMultiMap