QtPass 1.6.0
Multi-platform GUI for pass, the standard unix password manager.
Loading...
Searching...
No Matches
filecontent.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2018 Anne Jan Brouwer
2// SPDX-License-Identifier: GPL-3.0-or-later
3#include "filecontent.h"
4
5#include "helpers.h"
6#include <utility>
7
13static auto isLineHidden(const QString &line) -> bool {
14 return line.startsWith("otpauth://", Qt::CaseInsensitive);
15}
16
24auto FileContent::parse(const QString &fileContent,
25 const QStringList &templateFields, bool allFields)
26 -> FileContent {
27 QStringList lines = fileContent.split("\n");
28 QString password;
29 if (!lines.isEmpty()) {
30 password = lines.takeFirst();
31 }
32 QStringList remainingData;
33 QStringList remainingDataDisplay;
34 NamedValues namedValues;
35 for (const QString &line : AS_CONST(lines)) {
36 if (line.contains(":")) {
37 int colon = line.indexOf(':');
38 QString name = line.left(colon);
39 QString value = line.right(line.length() - colon - 1);
40 if ((allFields &&
41 !value.startsWith(
42 "//")) // if value startswith // colon is probably from a url
43 || templateFields.contains(name)) {
44 namedValues.append({name.trimmed(), value.trimmed()});
45 continue;
46 }
47 }
48
49 remainingData.append(line);
50 if (!isLineHidden(line)) {
51 remainingDataDisplay.append(line);
52 }
53 }
54 return {password, namedValues, remainingData.join("\n"),
55 remainingDataDisplay.join("\n")};
56}
57
62auto FileContent::getPassword() const -> QString { return this->password; }
63
69 return this->namedValues;
70}
71
76auto FileContent::getRemainingData() const -> QString {
77 return this->remainingData;
78}
79
85 return this->remainingDataDisplay;
86}
87
95FileContent::FileContent(QString password, NamedValues namedValues,
96 QString remainingData, QString remainingDataDisplay)
97 : password(std::move(password)), namedValues(std::move(namedValues)),
98 remainingData(std::move(remainingData)),
99 remainingDataDisplay(std::move(remainingDataDisplay)) {}
100
104NamedValues::NamedValues() = default;
105
110NamedValues::NamedValues(std::initializer_list<NamedValue> values)
111 : QList(values) {}
112
118auto NamedValues::takeValue(const QString &name) -> QString {
119 for (int i = 0; i < length(); ++i) {
120 if (at(i).name == name) {
121 return takeAt(i).value;
122 }
123 }
124 return {};
125}
auto getRemainingData() const -> QString
Gets remaining data not in named values.
auto getNamedValues() const -> NamedValues
Gets named value pairs from the parsed file.
auto getRemainingDataForDisplay() const -> QString
Gets remaining data for display (excludes hidden fields like OTP).
auto getPassword() const -> QString
Gets the password from the parsed file.
static auto parse(const QString &fileContent, const QStringList &templateFields, bool allFields) -> FileContent
parse parses the given fileContent in a FileContent object. The password is accessible through getPas...
The NamedValues class is mostly a list of NamedValue but also has a method to take a specific NamedVa...
Definition filecontent.h:23
auto takeValue(const QString &name) -> QString
Finds and removes a named value by name.
NamedValues()
Default constructor for NamedValues.
Utility macros for QtPass.
#define AS_CONST(x)
Cross-platform const_cast for range-based for loops.
Definition helpers.h:20