6#include "validator_p.h"
8#include <Cutelyst/application.h>
9#include <Cutelyst/context.h>
10#include <Cutelyst/request.h>
12#include <QLoggingCategory>
17Q_LOGGING_CATEGORY(C_VALIDATOR,
"cutelyst.utils.validator", QtWarningMsg)
20 : d_ptr(new ValidatorPrivate(translationContext))
25 const char *translationContext)
26 : d_ptr(new ValidatorPrivate(validators, translationContext))
35 if (!d->validators.empty()) {
36 qDeleteAll(d->validators.begin(), d->validators.end());
37 d->validators.clear();
70 if (d->validators.empty()) {
71 qCWarning(C_VALIDATOR) <<
"Validation started with empty validator list.";
76 qCWarning(C_VALIDATOR) <<
"Validation started with empty parameters.";
80 const bool noTrimming = flags.testFlag(
NoTrimming);
85 v->setTrimBefore(
false);
98 if (stopOnFirstError) {
110 auto cb = avr.callback;
124 auto async =
new AsyncValidator{c};
126 &AsyncValidator::finished,
128 async->start(d->validators, flags, params);
137 auto cb = avr.callback;
141 auto async =
new AsyncValidator{c};
143 &AsyncValidator::finished,
145 async->start(d->validators, flags, params);
153 v->setTranslationContext(d->translationContext);
154 d->validators.push_back(v);
162void AsyncValidator::start(
const std::vector<ValidatorRule *> &validators,
163 Validator::ValidatorFlags flags,
166 if (validators.empty()) {
167 qCWarning(C_VALIDATOR) <<
"Validation started with empty validator list.";
168 Q_EMIT finished(m_result);
172 if (params.
empty()) {
173 qCWarning(C_VALIDATOR) <<
"Validation started with empty parameters.";
178 for (
auto validator : validators) {
179 m_validators.enqueue(validator);
188void AsyncValidator::doValidation()
190 if (m_validators.empty() || m_cancelValidation) {
191 Q_EMIT finished(m_result);
195 auto v = m_validators.dequeue();
197 if (m_context.isNull()) {
198 qCCritical(C_VALIDATOR)
199 <<
"Cutelyst context object was destroyed while performing validation";
200 m_result.addError(v->field(),
201 u
"Cutelyst context object was destroyed while performing validation."_s);
202 Q_EMIT finished(m_result);
207 if (singleResult.extra.isValid()) {
208 m_result.addExtra(v->field(), singleResult.extra);
212 m_result.addValue(v->field(), singleResult.value);
214 m_result.addError(v->field(), singleResult.errorMessage);
215 if (m_stopOnFirstError) {
216 m_cancelValidation =
true;
The Cutelyst application.
void loadTranslations(const QString &filename, const QString &directory={}, const QString &prefix={}, const QString &suffix={})
Coroutine awaitable for ValidatorResult.
ParamsMultiMap bodyParameters() const
ParamsMultiMap queryParameters() const
Provides information about performed validations.
void addExtra(const QString &field, const QVariant &extra)
void addValue(const QString &field, const QVariant &value)
void addError(const QString &field, const QString &message)
Base class for all validator rules.
Validation processor for input data.
AwaitedValidatorResult coValidate(Context *c, ValidatorFlags flags=NoSpecialBehavior) const
ValidatorResult validate(Context *c, ValidatorFlags flags=NoSpecialBehavior) const
Validator(const char *translationContext=nullptr)
void addValidator(ValidatorRule *v)
static void loadTranslations(Application *app)
The Cutelyst namespace holds all public Cutelyst API.
QMultiMap< Key, T > & unite(QMultiMap< Key, T > &&other)
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
bool isValid() const const
Contains the result of a single input parameter validation.