QtPass 1.6.0
Multi-platform GUI for pass, the standard unix password manager.
Loading...
Searching...
No Matches
pass.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2016 Anne Jan Brouwer
2// SPDX-License-Identifier: GPL-3.0-or-later
3#ifndef SRC_PASS_H_
4#define SRC_PASS_H_
5
6#include "enums.h"
7#include "executor.h"
8#include "userinfo.h"
9
10#include <QProcess>
11#include <QQueue>
12#include <QString>
13#include <QStringList>
14#include <cassert>
15#include <map>
16
18 QString program;
19 QStringList arguments;
20};
21
35class Pass : public QObject {
36 Q_OBJECT
37
38 bool wrapperRunning;
39 QStringList env;
40
41protected:
43
45
46public:
50 Pass();
54 void init();
59 static bool gpgSupportsEd25519();
64 static QString getDefaultKeyTemplate();
65
66 ~Pass() override = default;
67
68 // Git operations
72 virtual void GitInit() = 0;
76 virtual void GitPull() = 0;
80 virtual void GitPull_b() = 0;
84 virtual void GitPush() = 0;
85
86 // Password operations
91 virtual void Show(QString file) = 0;
96 virtual void OtpGenerate(QString file) = 0;
103 virtual void Insert(QString file, QString value, bool force) = 0;
109 virtual void Remove(QString file, bool isDir) = 0;
116 virtual void Move(const QString srcDir, const QString dest,
117 const bool force = false) = 0;
124 virtual void Copy(const QString srcDir, const QString dest,
125 const bool force = false) = 0;
131 virtual void Init(QString path, const QList<UserInfo> &users) = 0;
138 virtual auto generatePassword(unsigned int length, const QString &charset)
139 -> QString;
140
141 // GPG operations
146 void GenerateGPGKeys(QString batch);
153 auto listKeys(QStringList keystrings, bool secret = false) -> QList<UserInfo>;
160 auto listKeys(const QString &keystring = "", bool secret = false)
161 -> QList<UserInfo>;
165 void updateEnv();
166
167 // Static helpers
173 static auto resolveGpgconfCommand(const QString &gpgPath)
180 static auto getGpgIdPath(const QString &for_file) -> QString;
186 static auto getRecipientList(const QString &for_file) -> QStringList;
194 static auto getRecipientString(const QString &for_file,
195 const QString &separator = " ",
196 int *count = nullptr) -> QStringList;
197
198protected:
207 void executeWrapper(PROCESS id, const QString &app, const QStringList &args,
208 bool readStdout = true, bool readStderr = true);
215 auto generateRandomPassword(const QString &charset, unsigned int length)
216 -> QString;
222 auto boundedRandom(quint32 bound) -> quint32;
223
233 virtual void executeWrapper(PROCESS id, const QString &app,
234 const QStringList &args, QString input,
235 bool readStdout = true, bool readStderr = true);
236
237protected slots:
245 virtual void finished(int id, int exitCode, const QString &out,
246 const QString &err);
247
248signals:
252 void error(QProcess::ProcessError);
262 void statusMsg(const QString &, int);
268 void critical(const QString &, const QString &);
269
273 void processErrorExit(int exitCode, const QString &err);
274
278 void finishedAny(const QString &, const QString &);
282 void finishedGitInit(const QString &, const QString &);
286 void finishedGitPull(const QString &, const QString &);
290 void finishedGitPush(const QString &, const QString &);
294 void finishedShow(const QString &);
298 void finishedOtpGenerate(const QString &);
302 void finishedInsert(const QString &, const QString &);
306 void finishedRemove(const QString &, const QString &);
310 void finishedInit(const QString &, const QString &);
314 void finishedMove(const QString &, const QString &);
318 void finishedCopy(const QString &, const QString &);
322 void finishedGenerate(const QString &, const QString &);
326 void finishedGenerateGPGKeys(const QString &, const QString &);
327};
328
329#endif // SRC_PASS_H_
id Identifier provided by the caller for this queued request.
Definition executor.h:76
void init()
Initialize the Pass instance.
Definition pass.cpp:76
void startingExecuteWrapper()
Emitted before executing a command.
void GenerateGPGKeys(QString batch)
Generate GPG keys using batch script.
Definition pass.cpp:369
void critical(const QString &, const QString &)
Emit critical error.
virtual void Copy(const QString srcDir, const QString dest, const bool force=false)=0
Copy password file or directory.
void finishedCopy(const QString &, const QString &)
Emitted when copy finishes.
void finishedShow(const QString &)
Emitted when show finishes.
void finishedRemove(const QString &, const QString &)
Emitted when remove finishes.
virtual void GitInit()=0
Initialize Git repository in password store.
Enums::PROCESS PROCESS
Definition pass.h:44
virtual void GitPull()=0
Pull changes from remote Git repository.
virtual auto generatePassword(unsigned int length, const QString &charset) -> QString
Generate random password.
Definition pass.cpp:100
void finishedMove(const QString &, const QString &)
Emitted when move finishes.
void statusMsg(const QString &, int)
Emit status message.
static bool gpgSupportsEd25519()
Check if GPG supports Ed25519 encryption.
Definition pass.cpp:157
auto boundedRandom(quint32 bound) -> quint32
Generate random number in range.
Definition pass.cpp:591
void finishedGitInit(const QString &, const QString &)
Emitted when Git init finishes.
virtual void Remove(QString file, bool isDir)=0
Remove password file or directory.
Pass()
Construct a Pass instance.
Definition pass.cpp:34
virtual void Show(QString file)=0
Show decrypted password file.
void executeWrapper(PROCESS id, const QString &app, const QStringList &args, bool readStdout=true, bool readStderr=true)
Execute external wrapper command.
Definition pass.cpp:57
void finishedAny(const QString &, const QString &)
Emitted when any operation finishes.
static auto getRecipientList(const QString &for_file) -> QStringList
Get list of recipients for a password file.
Definition pass.cpp:550
static auto resolveGpgconfCommand(const QString &gpgPath) -> ResolvedGpgconfCommand
Resolve the gpgconf command to kill agents.
Definition pass.cpp:322
auto listKeys(QStringList keystrings, bool secret=false) -> QList< UserInfo >
List GPG keys matching patterns.
Definition pass.cpp:392
void finishedInsert(const QString &, const QString &)
Emitted when insert finishes.
virtual void GitPull_b()=0
Pull with rebase from remote.
void finishedInit(const QString &, const QString &)
Emitted when init finishes.
virtual void GitPush()=0
Push changes to remote Git repository.
static auto getGpgIdPath(const QString &for_file) -> QString
Get .gpg-id file path for a password file.
Definition pass.cpp:520
virtual void Insert(QString file, QString value, bool force)=0
Insert or update password.
void finishedOtpGenerate(const QString &)
Emitted when OTP generation finishes.
Executor exec
Definition pass.h:42
~Pass() override=default
void processErrorExit(int exitCode, const QString &err)
Emitted on process error exit.
void finishedGitPull(const QString &, const QString &)
Emitted when Git pull finishes.
void finishedGitPush(const QString &, const QString &)
Emitted when Git push finishes.
virtual void Move(const QString srcDir, const QString dest, const bool force=false)=0
Move password file or directory.
void finishedGenerate(const QString &, const QString &)
Emitted when generate finishes.
virtual void OtpGenerate(QString file)=0
Generate OTP for password file.
void updateEnv()
Update environment for subprocesses.
Definition pass.cpp:482
void error(QProcess::ProcessError)
Emitted when a process error occurs.
virtual void finished(int id, int exitCode, const QString &out, const QString &err)
Handle process completion.
Definition pass.cpp:429
static auto getRecipientString(const QString &for_file, const QString &separator=" ", int *count=nullptr) -> QStringList
Get recipients as string.
Definition pass.cpp:573
static QString getDefaultKeyTemplate()
Get default key template for new GPG keys.
Definition pass.cpp:178
void finishedGenerateGPGKeys(const QString &, const QString &)
Emitted when GPG key generation finishes.
virtual void Init(QString path, const QList< UserInfo > &users)=0
Initialize new password store.
auto generateRandomPassword(const QString &charset, unsigned int length) -> QString
Generate random password from charset.
Definition pass.cpp:617
PROCESS
Identifies different subprocess operations used in QtPass.
Definition enums.h:26
QStringList arguments
Definition pass.h:19