Page Menu
Home
GnuPG
Search
Configure Global Search
Log In
Files
F36623470
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Size
5 KB
Subscribers
None
View Options
diff --git a/src/utils/validation.cpp b/src/utils/validation.cpp
index 71e25d6e5..7c954fef9 100644
--- a/src/utils/validation.cpp
+++ b/src/utils/validation.cpp
@@ -1,77 +1,113 @@
/* -*- mode: c++; c-basic-offset:4 -*-
utils/validation.cpp
This file is part of Kleopatra, the KDE keymanager
SPDX-FileCopyrightText: 2008 Klarälvdalens Datakonsult AB
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include <config-kleopatra.h>
#include "validation.h"
#include <utils/multivalidator.h>
#include <KEmailAddress>
#include "kleopatra_debug.h"
#include <QRegularExpression>
using namespace Kleo;
namespace
{
+template<class Validator>
+class EmptyIsAcceptableValidator : public Validator
+{
+public:
+ using Validator::Validator;
+
+ QValidator::State validate(QString &str, int &pos) const override
+ {
+ if (str.trimmed().isEmpty()) {
+ return QValidator::Acceptable;
+ }
+ return Validator::validate(str, pos);
+ }
+};
+
class EMailValidator : public QValidator
{
public:
explicit EMailValidator(QObject *parent = nullptr) : QValidator(parent) {}
State validate(QString &str, int &pos) const override
{
Q_UNUSED(pos)
if (KEmailAddress::isValidSimpleAddress(str)) {
return Acceptable;
}
return Intermediate;
}
};
+QValidator *regularExpressionValidator(Validation::Flags flags, const QString ®exp, QObject *parent)
+{
+ if (flags & Validation::Required) {
+ return new QRegularExpressionValidator{QRegularExpression{regexp}, parent};
+ } else {
+ return new EmptyIsAcceptableValidator<QRegularExpressionValidator>{QRegularExpression{regexp}, parent};
+ }
+}
+
}
-QValidator *Validation::email(QObject *parent)
+QValidator *Validation::email(Flags flags, QObject *parent)
{
- return new EMailValidator(parent);
+ if (flags & Required) {
+ return new EMailValidator{parent};
+ } else {
+ return new EmptyIsAcceptableValidator<EMailValidator>{parent};
+ }
}
-QValidator *Validation::email(const QString &addRX, QObject *parent)
+QValidator *Validation::email(const QString &addRX, Flags flags, QObject *parent)
{
- return new MultiValidator{email(), new QRegularExpressionValidator{QRegularExpression{addRX}, nullptr}, parent};
+ return new MultiValidator{email(flags), regularExpressionValidator(flags, addRX, nullptr), parent};
}
-QValidator *Validation::pgpName(QObject *parent)
+QValidator *Validation::pgpName(Flags flags, QObject *parent)
{
// this regular expression is modeled after gnupg/g10/keygen.c:ask_user_id:
static const auto name_rx = QRegularExpression{QStringLiteral("[^0-9<>][^<>@]{3,}")};
- return new QRegularExpressionValidator{name_rx, parent};
+ if (flags & Required) {
+ return new QRegularExpressionValidator{name_rx, parent};
+ } else {
+ return new EmptyIsAcceptableValidator<QRegularExpressionValidator>{name_rx, parent};
+ }
}
-QValidator *Validation::pgpName(const QString &addRX, QObject *parent)
+QValidator *Validation::pgpName(const QString &addRX, Flags flags, QObject *parent)
{
- return new MultiValidator{pgpName(), new QRegularExpressionValidator{QRegularExpression{addRX}, nullptr}, parent};
+ return new MultiValidator{pgpName(flags), regularExpressionValidator(flags, addRX, nullptr), parent};
}
-QValidator *Validation::pgpComment(QObject *parent)
+QValidator *Validation::pgpComment(Flags flags, QObject *parent)
{
// this regular expression is modeled after gnupg/g10/keygen.c:ask_user_id:
static const auto comment_rx = QRegularExpression{QStringLiteral("[^()]*")};
- return new QRegularExpressionValidator{comment_rx, parent};
+ if (flags & Required) {
+ return new QRegularExpressionValidator{comment_rx, parent};
+ } else {
+ return new EmptyIsAcceptableValidator<QRegularExpressionValidator>{comment_rx, parent};
+ }
}
-QValidator *Validation::pgpComment(const QString &addRX, QObject *parent)
+QValidator *Validation::pgpComment(const QString &addRX, Flags flags, QObject *parent)
{
- return new MultiValidator{pgpComment(), new QRegularExpressionValidator{QRegularExpression{addRX}, nullptr}, parent};
+ return new MultiValidator{pgpComment(flags), regularExpressionValidator(flags, addRX, nullptr), parent};
}
diff --git a/src/utils/validation.h b/src/utils/validation.h
index afc92d01d..3b76abc60 100644
--- a/src/utils/validation.h
+++ b/src/utils/validation.h
@@ -1,31 +1,35 @@
/* -*- mode: c++; c-basic-offset:4 -*-
utils/validation.h
This file is part of Kleopatra, the KDE keymanager
SPDX-FileCopyrightText: 2008 Klarälvdalens Datakonsult AB
SPDX-License-Identifier: GPL-2.0-or-later
*/
#pragma once
class QObject;
class QString;
class QValidator;
namespace Kleo
{
namespace Validation
{
-QValidator *email(QObject *parent = nullptr);
-QValidator *pgpName(QObject *parent = nullptr);
-QValidator *pgpComment(QObject *parent = nullptr);
+enum Flags {
+ Optional,
+ Required
+};
-QValidator *email(const QString &additionalRegExp, QObject *parent = nullptr);
-QValidator *pgpName(const QString &additionalRegExp, QObject *parent = nullptr);
-QValidator *pgpComment(const QString &additionalRegExp, QObject *parent = nullptr);
+QValidator *email(Flags flags = Required, QObject *parent = nullptr);
+QValidator *pgpName(Flags flags = Required, QObject *parent = nullptr);
+QValidator *pgpComment(Flags flags = Required, QObject *parent = nullptr);
+
+QValidator *email(const QString &additionalRegExp, Flags flags = Required, QObject *parent = nullptr);
+QValidator *pgpName(const QString &additionalRegExp, Flags flags = Required, QObject *parent = nullptr);
+QValidator *pgpComment(const QString &additionalRegExp, Flags flags = Required, QObject *parent = nullptr);
}
}
-
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Thu, Feb 26, 6:53 PM (16 h, 11 m)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
c1/39/4a48bcd2bbe9e72f66ab3e32b293
Attached To
rKLEOPATRA Kleopatra
Event Timeline
Log In to Comment