19 #include "validatorip_p.h"
20 #include <QHostAddress>
21 #include <QRegularExpression>
24 using namespace Cutelyst;
27 ValidatorRule(*new ValidatorIpPrivate(field, constraints, messages, defValKey))
49 qCDebug(C_VALIDATOR,
"ValidatorIp: Validation failed for field %s at %s::%s: not a valid IP address within the constraints.", qPrintable(
field()), qPrintable(c->controllerName()), qPrintable(c->actionName()));
71 static const std::vector<std::pair<QHostAddress,int>> ipv4Private({
91 static const std::vector<std::pair<QHostAddress,int>> ipv4Reserved({
139 static const std::vector<std::pair<QHostAddress,int>> ipv6Private({
148 static const std::vector<std::pair<QHostAddress,int>> ipv6Reserved({
184 if (a.setAddress(value)) {
188 if (a.protocol() == QAbstractSocket::IPv4Protocol) {
190 if (constraints.testFlag(
IPv6Only)) {
196 for (
const std::pair<QHostAddress,int> &subnet : ipv4Private) {
197 if (a.isInSubnet(subnet.first, subnet.second)) {
206 for (
const std::pair<QHostAddress,int> &subnet : ipv4Reserved) {
207 if (a.isInSubnet(subnet.first, subnet.second)) {
215 if (a.isInSubnet(
QHostAddress(QStringLiteral(
"224.0.0.0")), 4)) {
222 if (constraints.testFlag(
IPv4Only)) {
228 for (
const std::pair<QHostAddress,int> &subnet : ipv6Private) {
229 if (a.isInSubnet(subnet.first, subnet.second)) {
238 for (
const std::pair<QHostAddress,int> &subnet : ipv6Reserved) {
239 if (a.isInSubnet(subnet.first, subnet.second)) {
247 if (a.isInSubnet(
QHostAddress(QStringLiteral(
"ff00::")), 8)) {
268 error = c->
translate(
"Cutelyst::ValidatorIp",
"IP address is invalid or not acceptable.");
271 error = c->
translate(
"Cutelyst::ValidatorIp",
"The IP address in the “%1” field is invalid or not acceptable.").
arg(_label);
QString field() const
Returns the name of the field to validate.
QString label(Context *c) const
Returns the human readable field label used for generic error messages.
Stores custom error messages and the input field label.
~ValidatorIp() override
Deconstructs the ip validator.
QString value(const ParamsMultiMap ¶ms) const
Returns the value of the field from the input params.
QString validationError(Context *c, const QVariant &errorData=QVariant()) const
Returns a descriptive error message if validation failed.
Base class for all validator rules.
ValidatorIp(const QString &field, Constraints constraints=NoConstraint, const ValidatorMessages &messages=ValidatorMessages(), const QString &defValKey=QString())
Constructs a new ip validator.
void defaultValue(Context *c, ValidatorReturnType *result, const char *validatorName) const
I a defValKey has been set in the constructor, this will try to get the default value from the stash ...
bool contains(QChar ch, Qt::CaseSensitivity cs) const
void setValue(const T &value)
static bool validate(const QString &value, Constraints constraints=NoConstraint)
Returns true if value is a valid IP address within the constraints.
QString translate(const char *context, const char *sourceText, const char *disambiguation=nullptr, int n=-1) const
Contains the result of a single input parameter validation.
Checks if the field value is a valid IP address.
QString arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const
QString genericValidationError(Context *c, const QVariant &errorData=QVariant()) const override
Returns a generic error message if validation failed.