Page Menu
Home
GnuPG
Search
Configure Global Search
Log In
Files
F34601912
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Size
6 KB
Subscribers
None
View Options
diff --git a/src/utils/validation.cpp b/src/utils/validation.cpp
index 2bb457b55..0d178cf11 100644
--- a/src/utils/validation.cpp
+++ b/src/utils/validation.cpp
@@ -1,122 +1,93 @@
/* -*- 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-FileCopyrightText: 2022 g10 Code GmbH
SPDX-FileContributor: Ingo Klöcker <dev@ingo-kloecker.de>
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 TrimmingValidator : public Validator
-{
-public:
- using Validator::Validator;
-
- QValidator::State validate(QString &str, int &pos) const override
- {
- auto trimmed = str.trimmed();
- auto posCopy = pos;
- return Validator::validate(trimmed, posCopy);
- }
-};
-
-template<class Validator>
-class EmptyIsAcceptableValidator : public Validator
-{
-public:
- using Validator::Validator;
-
- QValidator::State validate(QString &str, int &pos) const override
- {
- if (str.isEmpty()) {
- return QValidator::Acceptable;
- }
- return Validator::validate(str, pos);
- }
-};
-
class EMailValidator : public QValidator
{
public:
EMailValidator()
: QValidator{}
{
}
State validate(QString &str, int &pos) const override
{
Q_UNUSED(pos)
if (KEmailAddress::isValidSimpleAddress(str)) {
return Acceptable;
}
return Intermediate;
}
};
-std::shared_ptr<QValidator> regularExpressionValidator(Validation::Flags flags, const QString ®exp)
+}
+
+std::shared_ptr<QValidator> Validation::regularExpressionValidator(const QString ®exp, Flags flags)
{
if (flags & Validation::Required) {
return std::make_shared<TrimmingValidator<QRegularExpressionValidator>>(QRegularExpression{regexp});
} else {
return std::make_shared<TrimmingValidator<EmptyIsAcceptableValidator<QRegularExpressionValidator>>>(QRegularExpression{regexp});
}
}
-}
-
std::shared_ptr<QValidator> Validation::email(Flags flags)
{
if (flags & Required) {
return std::make_shared<TrimmingValidator<EMailValidator>>();
} else {
return std::make_shared<TrimmingValidator<EmptyIsAcceptableValidator<EMailValidator>>>();
}
}
std::shared_ptr<QValidator> Validation::email(const QString &addRX, Flags flags)
{
- return MultiValidator::create({email(flags), regularExpressionValidator(flags, addRX)});
+ return MultiValidator::create({email(flags), regularExpressionValidator(addRX, flags)});
}
std::shared_ptr<QValidator> Validation::pgpName(Flags flags)
{
// this regular expression is modeled after gnupg/g10/keygen.c:ask_user_id:
static const QString name_rx{QLatin1String{"[^0-9<>][^<>@]{4,}"}};
- return regularExpressionValidator(flags, name_rx);
+ return regularExpressionValidator(name_rx, flags);
}
std::shared_ptr<QValidator> Validation::pgpName(const QString &addRX, Flags flags)
{
- return MultiValidator::create({pgpName(flags), regularExpressionValidator(flags, addRX)});
+ return MultiValidator::create({pgpName(flags), regularExpressionValidator(addRX, flags)});
}
std::shared_ptr<QValidator> Validation::simpleName(Flags flags)
{
static const QString name_rx{QLatin1String{"[^<>@]*"}};
- return std::shared_ptr<QValidator>{regularExpressionValidator(flags, name_rx)};
+ return std::shared_ptr<QValidator>{regularExpressionValidator(name_rx, flags)};
}
std::shared_ptr<QValidator> Validation::simpleName(const QString &additionalRegExp, Flags flags)
{
- return MultiValidator::create({simpleName(flags), regularExpressionValidator(flags, additionalRegExp)});
+ return MultiValidator::create({simpleName(flags), regularExpressionValidator(additionalRegExp, flags)});
}
diff --git a/src/utils/validation.h b/src/utils/validation.h
index 8f27ff58d..241c0c88c 100644
--- a/src/utils/validation.h
+++ b/src/utils/validation.h
@@ -1,56 +1,91 @@
/* -*- 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-FileCopyrightText: 2022 g10 Code GmbH
SPDX-FileContributor: Ingo Klöcker <dev@ingo-kloecker.de>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#pragma once
+#include <QValidator>
+
#include <memory>
class QString;
-class QValidator;
namespace Kleo
{
namespace Validation
{
enum Flags {
Optional,
Required,
};
+/**
+ * Creates a validator with restrictions imposed by the regular expression \p regExp.
+ * If \p flags is \c Optional then empty values are also accepted.
+ */
+std::shared_ptr<QValidator> regularExpressionValidator(const QString ®Exp, Flags flags = Required);
+
std::shared_ptr<QValidator> email(Flags flags = Required);
/**
* Creates a validator for the name part of the user ID of an OpenPGP key with
* restrictions that are necessary for usage with the edit-key interface.
*/
std::shared_ptr<QValidator> pgpName(Flags flags = Required);
/**
* Creates a validator for the name part of the user ID of an OpenPGP key with
* less restrictions than \ref pgpName.
*/
std::shared_ptr<QValidator> simpleName(Flags flags = Required);
std::shared_ptr<QValidator> email(const QString &additionalRegExp, Flags flags = Required);
/**
* Creates a validator for the name part of the user ID of an OpenPGP key with
* restrictions that are necessary for usage with the edit-key interface, and
* with additional restrictions imposed by \p additionalRegExp.
*/
std::shared_ptr<QValidator> pgpName(const QString &additionalRegExp, Flags flags = Required);
/**
* Creates a validator for the name part of the user ID of an OpenPGP key with
* less restrictions than \ref pgpName, but with additional restrictions imposed
* by \p additionalRegExp.
*/
std::shared_ptr<QValidator> simpleName(const QString &additionalRegExp, Flags flags = Required);
+template<class Validator>
+class TrimmingValidator : public Validator
+{
+public:
+ using Validator::Validator;
+
+ QValidator::State validate(QString &str, int &pos) const override
+ {
+ auto trimmed = str.trimmed();
+ auto posCopy = pos;
+ return Validator::validate(trimmed, posCopy);
+ }
+};
+
+template<class Validator>
+class EmptyIsAcceptableValidator : public Validator
+{
+public:
+ using Validator::Validator;
+
+ QValidator::State validate(QString &str, int &pos) const override
+ {
+ if (str.isEmpty()) {
+ return QValidator::Acceptable;
+ }
+ return Validator::validate(str, pos);
+ }
+};
}
}
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Sun, Jan 18, 4:13 PM (14 h, 34 m)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
42/32/f9f968a9218c15e4afc41172a6f5
Attached To
rKLEOPATRA Kleopatra
Event Timeline
Log In to Comment