5 #include "authenticationrealm.h" 6 #include "credentialhttp_p.h" 7 #include "credentialpassword.h" 9 #include <Cutelyst/Context> 10 #include <Cutelyst/Response> 12 #include <QLoggingCategory> 18 Q_LOGGING_CATEGORY(C_CREDENTIALHTTP,
"cutelyst.plugin.credentialhttp", QtWarningMsg)
22 , d_ptr(new CredentialHttpPrivate)
40 d->authorizationRequiredMessage = message;
46 return d->passwordField;
52 d->passwordField = fieldName;
58 return d->passwordType;
64 d->passwordType = type;
70 return d->passwordPreSalt;
76 d->passwordPreSalt = passwordPreSalt;
82 return d->passwordPostSalt;
88 d->passwordPostSalt = passwordPostSalt;
94 return d->usernameField;
100 d->usernameField = fieldName;
106 d->requireSsl = require;
116 if (d->requireSsl && !c->
request()->secure()) {
117 ret = d->authenticationFailed(c, realm, authinfo);
121 if (d->isAuthTypeBasic()) {
122 ret = d->authenticateBasic(c, realm, authinfo);
128 ret = d->authenticationFailed(c, realm, authinfo);
135 const QString password = passwordPreSalt + authinfo.
value(passwordField) + passwordPostSalt;
141 return storedPassword == password;
143 qCCritical(C_CREDENTIALHTTP) <<
"CredentialPassword is set to ignore password check";
156 qCDebug(C_CREDENTIALHTTP) <<
"Checking http basic authentication.";
159 if (userPass.user.isEmpty()) {
164 auth.
insert(usernameField, userPass.user);
167 auth.
insert(passwordField, userPass.password);
168 if (checkPassword(_user, auth)) {
171 qCDebug(C_CREDENTIALHTTP) <<
"Password didn't match";
174 qCDebug(C_CREDENTIALHTTP) <<
"Unable to locate a user matching user info provided in realm";
188 if (authorizationRequiredMessage.isEmpty()) {
189 res->
setBody(
"Authorization required."_ba);
191 res->
setBody(authorizationRequiredMessage);
195 if (isAuthTypeBasic()) {
196 createBasicAuthResponse(c, realm);
202 bool CredentialHttpPrivate::isAuthTypeBasic()
const 204 return type == CredentialHttp::Basic || type == CredentialHttp::Any;
210 joinAuthHeaderParts(
"Basic"_ba, buildAuthHeaderCommon(realm)));
235 #include "moc_credentialhttp.cpp"
void setPasswordPostSalt(const QString &passwordPostSalt)
virtual AuthenticationUser findUser(Context *c, const ParamsMultiMap &userinfo)
Headers & headers() noexcept
Response * res() const noexcept
QString passwordPreSalt() const
void setPasswordType(PasswordType type)
QString passwordPostSalt() const
Abstract class to validate authentication credentials like user name and password.
void setContentType(const QByteArray &type)
Combines user store and credential validation into a named realm.
QString usernameField() const
QByteArray join(QByteArrayView separator) const const
void setUsernameField(const QString &fieldName)
AuthenticationUser authenticate(Context *c, AuthenticationRealm *realm, const ParamsMultiMap &authinfo) final
void setType(CredentialHttp::AuthType type)
Headers headers() const noexcept
QString passwordField() const
bool isEmpty() const const
bool isEmpty() const const
void setPasswordPreSalt(const QString &passwordPreSalt)
QString name() const noexcept
iterator insert(const Key &key, const T &value)
The Cutelyst namespace holds all public Cutelyst API.
Use HTTP basic authentication to authenticate a user.
void setRequireSsl(bool require)
QByteArray & append(QByteArrayView data)
void setPasswordField(const QString &fieldName)
Container for user data retrieved from an AuthenticationStore.
QByteArray toLatin1() const const
virtual ~CredentialHttp()
void append(QList< T > &&value)
QVariant value(const QString &key, const QVariant &defaultValue=QVariant()) const
PasswordType passwordType() const
void setAuthorizationRequiredMessage(const QString &message)
void setBody(QIODevice *body)
Response * response() const noexcept
QString toString() const const
void setStatus(quint16 status) noexcept
static bool validatePassword(const QByteArray &password, const QByteArray &correctHash)
T value(const Key &key, const T &defaultValue) const const
QByteArray toUtf8() const const