service/pam: add responseVisible

Fixes misunderstanding of "echo".
This commit is contained in:
outfoxxed 2024-06-19 00:31:09 -07:00
parent 6efa05a8eb
commit 59cf60d83e
Signed by: outfoxxed
GPG Key ID: 4C88A185FB89301E
3 changed files with 22 additions and 18 deletions

View File

@ -123,12 +123,7 @@ void PamConversation::onMessage() {
if (!ok) goto fail;
this->message(
QString::fromUtf8(message),
/*flags.echo*/ true,
flags.error,
flags.responseRequired
);
this->message(QString::fromUtf8(message), flags.error, flags.responseRequired, flags.echo);
} else {
qCCritical(logPam) << "Unexpected message from subprocess.";
goto fail;

View File

@ -193,6 +193,7 @@ void PamContext::setUser(QString user) {
QString PamContext::message() const { return this->mMessage; }
bool PamContext::messageIsError() const { return this->mMessageIsError; }
bool PamContext::isResponseRequired() const { return this->mIsResponseRequired; }
bool PamContext::isResponseVisible() const { return this->mIsResponseVisible; }
void PamContext::onCompleted(PamResult::Enum result) {
this->abortConversation();
@ -207,20 +208,23 @@ void PamContext::onError(PamError::Enum error) {
void PamContext::onMessage(
QString message,
bool messageChanged,
bool isError,
bool responseRequired
bool responseRequired,
bool responseVisible
) {
if (messageChanged) {
if (message != this->mMessage) {
this->mMessage = std::move(message);
emit this->messageChanged();
}
if (message != this->mMessage) {
this->mMessage = std::move(message);
emit this->messageChanged();
}
if (isError != this->mMessageIsError) {
this->mMessageIsError = isError;
emit this->messageIsErrorChanged();
}
if (isError != this->mMessageIsError) {
this->mMessageIsError = isError;
emit this->messageIsErrorChanged();
}
if (responseVisible != this->mIsResponseVisible) {
this->mIsResponseVisible = responseVisible;
emit this->responseVisibleChanged();
}
if (responseRequired != this->mIsResponseRequired) {

View File

@ -46,6 +46,8 @@ class PamContext
///
/// Responses can be returned with the `respond()` function.
Q_PROPERTY(bool responseRequired READ isResponseRequired NOTIFY responseRequiredChanged);
/// If the user's response should be visible. Only valid when `responseRequired` is true.
Q_PROPERTY(bool responseVisible READ isResponseVisible NOTIFY responseVisibleChanged);
// clang-format on
QML_ELEMENT;
@ -84,6 +86,7 @@ public:
[[nodiscard]] QString message() const;
[[nodiscard]] bool messageIsError() const;
[[nodiscard]] bool isResponseRequired() const;
[[nodiscard]] bool isResponseVisible() const;
signals:
/// Emitted whenever authentication completes.
@ -104,11 +107,12 @@ signals:
void messageChanged();
void messageIsErrorChanged();
void responseRequiredChanged();
void responseVisibleChanged();
private slots:
void onCompleted(PamResult::Enum result);
void onError(PamError::Enum error);
void onMessage(QString message, bool messageChanged, bool isError, bool responseRequired);
void onMessage(QString message, bool isError, bool responseRequired, bool responseVisible);
private:
PamConversation* conversation = nullptr;
@ -121,4 +125,5 @@ private:
QString mMessage;
bool mMessageIsError = false;
bool mIsResponseRequired = false;
bool mIsResponseVisible = false;
};