8 #include <QTemporaryFile>
9 #include <QLoggingCategory>
21 StoreHtpasswd::~StoreHtpasswd()
28 const QString username = user.value(QStringLiteral(
"username"));
30 QTemporaryFile tmp(m_filename + QLatin1String(
"-XXXXXXX"));
31 tmp.setAutoRemove(
false);
33 qCWarning(CUTELYST_UTILS_AUTH) <<
"Failed to open temporary file for writing";
38 QFile file(m_filename);
39 if (file.exists() && file.open(QFile::ReadWrite | QFile::Text)) {
40 while (!file.atEnd()) {
41 QByteArray line = file.readLine();
42 QByteArrayList parts = line.split(
':');
43 if (!wrote && parts.size() >= 2 && parts.first() == username.toLatin1()) {
44 line = username.toLatin1() +
':' + user.value(QStringLiteral(
"password")).toLatin1().replace(
':',
',') +
'\n';
53 QByteArray line = username.toLatin1() +
':' + user.value(QStringLiteral(
"password")).toLatin1().replace(
':',
',') +
'\n';
57 if (file.exists() && !file.remove()) {
58 qCWarning(CUTELYST_UTILS_AUTH) <<
"Failed to remove auth file for replacement";
62 if (!tmp.rename(m_filename)) {
63 qCWarning(CUTELYST_UTILS_AUTH) <<
"Failed to rename temporary file";
71 const QString username = userInfo.value(QStringLiteral(
"username"));
73 QFile file(m_filename);
74 if (file.open(QFile::ReadOnly | QFile::Text)) {
75 while (!file.atEnd()) {
76 QByteArray line = file.readLine();
77 QByteArrayList parts = line.trimmed().split(
':');
78 if (parts.size() >= 2 && !parts.first().startsWith(
'#') && parts.first() == username.toLatin1()) {
79 ret.insert(QStringLiteral(
"username"), username);
81 QByteArray password = parts.at(1);
82 ret.insert(QStringLiteral(
"password"), QString::fromLatin1(password.replace(
',',
':')));
99 {QStringLiteral(
"username"), frozenUser.toString()}
103 #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