QtPass 1.5.1
Multi-platform GUI for pass, the standard unix password manager.
Loading...
Searching...
No Matches
realpass.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2016 Anne Jan Brouwer
2// SPDX-License-Identifier: GPL-3.0-or-later
3#include "realpass.h"
4#include "qtpasssettings.h"
5#include "util.h"
6
7#include <QDir>
8#include <QFileInfo>
9#include <QRegularExpression>
10#include <utility>
11
12using Enums::GIT_INIT;
13using Enums::GIT_PULL;
14using Enums::GIT_PUSH;
22
23RealPass::RealPass() = default;
24
28void RealPass::GitInit() { executePass(GIT_INIT, {"git", "init"}); }
29
38
42void RealPass::GitPull() { executePass(GIT_PULL, {"git", "pull"}); }
43
47void RealPass::GitPush() { executePass(GIT_PUSH, {"git", "push"}); }
48
58void RealPass::Show(QString file) {
59 executePass(PASS_SHOW, {"show", file}, "", true);
60}
61
66void RealPass::OtpGenerate(QString file) {
67 executePass(PASS_OTP_GENERATE, {"otp", file}, "", true);
68}
69
73void RealPass::Insert(QString file, QString newValue, bool overwrite) {
74 QStringList args = {"insert", "-m"};
75 if (overwrite) {
76 args.append("-f");
77 }
78 args.append(file);
79 executePass(PASS_INSERT, args, newValue);
80}
81
85void RealPass::Remove(QString file, bool isDir) {
86 executePass(PASS_REMOVE, {"rm", (isDir ? "-rf" : "-f"), file});
87}
88
95void RealPass::Init(QString path, const QList<UserInfo> &users) {
96 // remove the passStore directory otherwise,
97 // pass would create a passStore/passStore/dir
98 // but you want passStore/dir
99 QString dirWithoutPassdir =
100 path.remove(0, QtPassSettings::getPassStore().size());
101 QStringList args = {"init", "--path=" + dirWithoutPassdir};
102 foreach (const UserInfo &user, users) {
103 if (user.enabled) {
104 args.append(user.key_id);
105 }
106 }
107 executePass(PASS_INIT, args);
108}
109
116void RealPass::Move(const QString src, const QString dest, const bool force) {
117 QFileInfo srcFileInfo = QFileInfo(src);
118 QFileInfo destFileInfo = QFileInfo(dest);
119
120 // force mode?
121 // pass uses always the force mode, when call from eg. QT. so we have to
122 // check if this are to files and the user didnt want to move force
123 if (!force && srcFileInfo.isFile() && destFileInfo.isFile()) {
124 return;
125 }
126
127 QString passSrc = QDir(QtPassSettings::getPassStore())
128 .relativeFilePath(QDir(src).absolutePath());
129 QString passDest = QDir(QtPassSettings::getPassStore())
130 .relativeFilePath(QDir(dest).absolutePath());
131
132 // remove the .gpg because pass will not work
133 if (srcFileInfo.isFile() && srcFileInfo.suffix() == "gpg") {
134 passSrc.replace(Util::endsWithGpg(), "");
135 }
136 if (destFileInfo.isFile() && destFileInfo.suffix() == "gpg") {
137 passDest.replace(Util::endsWithGpg(), "");
138 }
139
140 QStringList args;
141 args << "mv";
142 if (force) {
143 args << "-f";
144 }
145 args << passSrc;
146 args << passDest;
147 executePass(PASS_MOVE, args);
148}
149
156void RealPass::Copy(const QString src, const QString dest, const bool force) {
157 QFileInfo srcFileInfo = QFileInfo(src);
158 QFileInfo destFileInfo = QFileInfo(dest);
159 // force mode?
160 // pass uses always the force mode, when call from eg. QT. so we have to
161 // check if this are to files and the user didnt want to move force
162 if (!force && srcFileInfo.isFile() && destFileInfo.isFile()) {
163 return;
164 }
165
166 QString passSrc = QDir(QtPassSettings::getPassStore())
167 .relativeFilePath(QDir(src).absolutePath());
168 QString passDest = QDir(QtPassSettings::getPassStore())
169 .relativeFilePath(QDir(dest).absolutePath());
170
171 // remove the .gpg because pass will not work
172 if (srcFileInfo.isFile() && srcFileInfo.suffix() == "gpg") {
173 passSrc.replace(Util::endsWithGpg(), "");
174 }
175 if (destFileInfo.isFile() && destFileInfo.suffix() == "gpg") {
176 passDest.replace(Util::endsWithGpg(), "");
177 }
178 QStringList args;
179 args << "cp";
180 if (force) {
181 args << "-f";
182 }
183 args << passSrc;
184 args << passDest;
185 executePass(PASS_COPY, args);
186}
187
192void RealPass::executePass(PROCESS id, const QStringList &args, QString input,
193 bool readStdout, bool readStderr) {
195 std::move(input), readStdout, readStderr);
196}
static auto executeBlocking(QString app, const QStringList &args, const QString &input=QString(), QString *process_out=nullptr, QString *process_err=nullptr) -> int
Executor::executeBlocking blocking version of the executor, takes input and presents it as stdin.
Definition executor.cpp:177
void executeWrapper(PROCESS id, const QString &app, const QStringList &args, bool readStdout=true, bool readStderr=true)
Definition pass.cpp:45
static auto getPassStore(const QString &defaultValue=QVariant().toString()) -> QString
static auto getPassExecutable(const QString &defaultValue=QVariant().toString()) -> QString
virtual void Insert(QString file, QString newValue, bool overwrite=false) Q_DECL_OVERRIDE
RealPass::Insert pass insert.
Definition realpass.cpp:73
virtual void OtpGenerate(QString file) Q_DECL_OVERRIDE
RealPass::OtpGenerate pass otp.
Definition realpass.cpp:66
virtual void GitPull() Q_DECL_OVERRIDE
RealPass::GitPull pass git pull wrapper.
Definition realpass.cpp:42
virtual void GitPush() Q_DECL_OVERRIDE
RealPass::GitPush pass git push wrapper.
Definition realpass.cpp:47
virtual void Init(QString path, const QList< UserInfo > &users) Q_DECL_OVERRIDE
RealPass::Init initialize pass repository.
Definition realpass.cpp:95
virtual void GitInit() Q_DECL_OVERRIDE
RealPass::GitInit pass git init wrapper.
Definition realpass.cpp:28
virtual void Remove(QString file, bool isDir=false) Q_DECL_OVERRIDE
RealPass::Remove pass remove wrapper.
Definition realpass.cpp:85
void Copy(const QString src, const QString dest, const bool force=false) Q_DECL_OVERRIDE
RealPass::Copy copy a file (or folder)
Definition realpass.cpp:156
virtual void GitPull_b() Q_DECL_OVERRIDE
RealPass::GitInit pass git pull wrapper which blocks until process finishes.
Definition realpass.cpp:34
void Move(const QString src, const QString dest, const bool force=false) Q_DECL_OVERRIDE
RealPass::Move move a file (or folder)
Definition realpass.cpp:116
virtual void Show(QString file) Q_DECL_OVERRIDE
RealPass::Show pass show.
Definition realpass.cpp:58
static auto endsWithGpg() -> const QRegularExpression &
Definition util.cpp:203
@ PASS_INIT
Definition enums.h:28
@ PASS_OTP_GENERATE
Definition enums.h:36
@ PASS_INSERT
Definition enums.h:26
@ GIT_INIT
Definition enums.h:19
@ PASS_COPY
Definition enums.h:31
@ PASS_MOVE
Definition enums.h:30
@ PASS_REMOVE
Definition enums.h:27
@ PASS_SHOW
Definition enums.h:25
@ GIT_PULL
Definition enums.h:23
@ GIT_PUSH
Definition enums.h:24
Stores key info lines including validity, creation date and more.
Definition userinfo.h:13
bool enabled
UserInfo::enabled.
Definition userinfo.h:52
QString key_id
UserInfo::key_id hexadecimal representation.
Definition userinfo.h:38