Add -i/--include option to "generate" CLI command. (#7112)

This commit is contained in:
Patrick Klein
2021-12-08 05:40:09 +01:00
committed by GitHub
parent b3896f2600
commit a0a063b57f
9 changed files with 359 additions and 213 deletions

View File

@@ -20,51 +20,43 @@
#include "crypto/Random.h"
const char* PasswordGenerator::DefaultAdditionalChars = "";
const int PasswordGenerator::DefaultLength = 32;
const char* PasswordGenerator::DefaultCustomCharacterSet = "";
const char* PasswordGenerator::DefaultExcludedChars = "";
PasswordGenerator::PasswordGenerator()
: m_length(0)
, m_classes(nullptr)
, m_flags(nullptr)
, m_additional(PasswordGenerator::DefaultAdditionalChars)
: m_length(PasswordGenerator::DefaultLength)
, m_classes(PasswordGenerator::CharClass::DefaultCharset)
, m_flags(PasswordGenerator::GeneratorFlag::DefaultFlags)
, m_custom(PasswordGenerator::DefaultCustomCharacterSet)
, m_excluded(PasswordGenerator::DefaultExcludedChars)
{
}
void PasswordGenerator::setLength(int length)
{
if (length <= 0) {
m_length = DefaultLength;
return;
}
m_length = length;
}
void PasswordGenerator::setCharClasses(const CharClasses& classes)
void PasswordGenerator::setCharClasses(const PasswordGenerator::CharClasses& classes)
{
if (classes == 0) {
m_classes = DefaultCharset;
return;
}
m_classes = classes;
}
void PasswordGenerator::setCustomCharacterSet(const QString& customCharacterSet)
{
m_custom = customCharacterSet;
}
void PasswordGenerator::setExcludedCharacterSet(const QString& excludedCharacterSet)
{
m_excluded = excludedCharacterSet;
}
void PasswordGenerator::setFlags(const GeneratorFlags& flags)
{
m_flags = flags;
}
void PasswordGenerator::setAdditionalChars(const QString& chars)
{
m_additional = chars;
}
void PasswordGenerator::setExcludedChars(const QString& chars)
{
m_excluded = chars;
}
QString PasswordGenerator::generatePassword() const
{
Q_ASSERT(isValid());
@@ -114,9 +106,9 @@ QString PasswordGenerator::generatePassword() const
bool PasswordGenerator::isValid() const
{
if (m_classes == 0 && m_additional.isEmpty()) {
if (m_classes == CharClass::NoClass && m_custom.isEmpty()) {
return false;
} else if (m_length == 0) {
} else if (m_length <= 0) {
return false;
}
@@ -266,10 +258,10 @@ QVector<PasswordGroup> PasswordGenerator::passwordGroups() const
passwordGroups.append(group);
}
if (!m_additional.isEmpty()) {
if (!m_custom.isEmpty()) {
PasswordGroup group;
for (auto ch : m_additional) {
for (auto ch : m_custom) {
group.append(ch);
}
@@ -302,38 +294,43 @@ QVector<PasswordGroup> PasswordGenerator::passwordGroups() const
int PasswordGenerator::numCharClasses() const
{
int numClasses = 0;
if (m_classes & LowerLetters) {
numClasses++;
}
if (m_classes & UpperLetters) {
numClasses++;
}
if (m_classes & Numbers) {
numClasses++;
}
if (m_classes & Braces) {
numClasses++;
}
if (m_classes & Punctuation) {
numClasses++;
}
if (m_classes & Quotes) {
numClasses++;
}
if (m_classes & Dashes) {
numClasses++;
}
if (m_classes & Math) {
numClasses++;
}
if (m_classes & Logograms) {
numClasses++;
}
if (m_classes & EASCII) {
numClasses++;
}
return numClasses;
// Actually compute the non empty password groups
auto non_empty_groups = passwordGroups();
return non_empty_groups.size();
}
int PasswordGenerator::getMinLength() const
{
if ((m_flags & CharFromEveryGroup)) {
return numCharClasses();
}
return 1;
}
void PasswordGenerator::reset()
{
m_classes = CharClass::DefaultCharset;
m_flags = GeneratorFlag::DefaultFlags;
m_custom = DefaultCustomCharacterSet;
m_excluded = DefaultExcludedChars;
m_length = DefaultLength;
}
int PasswordGenerator::getLength() const
{
return m_length;
}
const PasswordGenerator::GeneratorFlags& PasswordGenerator::getFlags() const
{
return m_flags;
}
const PasswordGenerator::CharClasses& PasswordGenerator::getActiveClasses() const
{
return m_classes;
}
const QString& PasswordGenerator::getCustomCharacterSet() const
{
return m_custom;
}
const QString& PasswordGenerator::getExcludedCharacterSet() const
{
return m_excluded;
}