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